[{"data":1,"prerenderedAt":173260},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-shu-zu-zhuan-zhi":3,"wiki-doc-nav":341},{"id":4,"title":5,"body":6,"description":333,"extension":334,"meta":335,"navigation":336,"path":337,"seo":338,"stem":339,"__hash__":340},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":8,"toc":331},"minimark",[9,13,17,152,155,158,161,164,167,170,173,176,327],[10,11,5],"h1",{"id":12},"_7数组转置",[14,15,16],"p",{},"使用transpose()函数",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-python shiki shiki-themes github-light github-dark","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","python","",[25,26,27,46,82,89,95,101,107,116,122,129,135,141,147],"code",{"__ignoreMap":23},[28,29,32,36,40,43],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"szBVR","import",[28,37,39],{"class":38},"sVt8B"," numpy ",[28,41,42],{"class":34},"as",[28,44,45],{"class":38}," np\n",[28,47,49,52,55,58,62,65,68,71,74,76,79],{"class":30,"line":48},2,[28,50,51],{"class":38},"a",[28,53,54],{"class":34},"=",[28,56,57],{"class":38}," np.arange(",[28,59,61],{"class":60},"sj4cs","1",[28,63,64],{"class":38},",",[28,66,67],{"class":60},"13",[28,69,70],{"class":38},").reshape(",[28,72,73],{"class":60},"4",[28,75,64],{"class":38},[28,77,78],{"class":60},"3",[28,80,81],{"class":38},")\n",[28,83,85],{"class":30,"line":84},3,[28,86,88],{"class":87},"sJ8bj","#二维数组转置\n",[28,90,92],{"class":30,"line":91},4,[28,93,94],{"class":87},"#调用transpose()函数\n",[28,96,98],{"class":30,"line":97},5,[28,99,100],{"class":38},"a.transpose()\n",[28,102,104],{"class":30,"line":103},6,[28,105,106],{"class":87},"#对于二维数组也可以采用.T来实现\n",[28,108,110,113],{"class":30,"line":109},7,[28,111,112],{"class":38},"a.T",[28,114,115],{"class":87},"#与上述代码一样\n",[28,117,119],{"class":30,"line":118},8,[28,120,121],{"class":87},"#结果：\n",[28,123,125],{"class":30,"line":124},9,[28,126,128],{"class":127},"sZZnC","'''\n",[28,130,132],{"class":30,"line":131},10,[28,133,134],{"class":127},"array([[ 1,  4,  7, 10],\n",[28,136,138],{"class":30,"line":137},11,[28,139,140],{"class":127},"       [ 2,  5,  8, 11],\n",[28,142,144],{"class":30,"line":143},12,[28,145,146],{"class":127},"       [ 3,  6,  9, 12]])\n",[28,148,150],{"class":30,"line":149},13,[28,151,128],{"class":127},[14,153,154],{},"也可以使用np.transpose()的形式",[14,156,157],{},"#多维数组进行转置 np.transpose()",[14,159,160],{},"#对二维数组也可以使用np.transpose()进行转置",[14,162,163],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,165,166],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,168,169],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,171,172],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,174,175],{},"四维及以上的数组也是一样的道理",[18,177,179],{"className":20,"code":178,"language":22,"meta":23,"style":23},"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",[25,180,181,214,219,224,229,248,253,286,291,296,301,322],{"__ignoreMap":23},[28,182,183,186,188,191,193,195,198,200,202,204,207,209,212],{"class":30,"line":31},[28,184,185],{"class":38},"x",[28,187,54],{"class":34},[28,189,190],{"class":38},"np.arange(",[28,192,61],{"class":60},[28,194,64],{"class":38},[28,196,197],{"class":60},"37",[28,199,70],{"class":38},[28,201,78],{"class":60},[28,203,64],{"class":38},[28,205,206],{"class":60},"6",[28,208,64],{"class":38},[28,210,211],{"class":60},"2",[28,213,81],{"class":38},[28,215,216],{"class":30,"line":48},[28,217,218],{"class":38},"x.shape\n",[28,220,221],{"class":30,"line":84},[28,222,223],{"class":87},"#结果：（3,6,2）\n",[28,225,226],{"class":30,"line":91},[28,227,228],{"class":87},"#使用np.transpose()进行转置 变为(2,6,3)\n",[28,230,231,234,236,238,240,242,245],{"class":30,"line":97},[28,232,233],{"class":38},"np.transpose(x,(",[28,235,211],{"class":60},[28,237,64],{"class":38},[28,239,61],{"class":60},[28,241,64],{"class":38},[28,243,244],{"class":60},"0",[28,246,247],{"class":38},")).shape\n",[28,249,250],{"class":30,"line":103},[28,251,252],{"class":87},"#结果：(2,6,3)\n",[28,254,255,258,260,262,264,266,268,270,272,274,276,278,280,282,284],{"class":30,"line":109},[28,256,257],{"class":38},"aaaa",[28,259,54],{"class":34},[28,261,190],{"class":38},[28,263,61],{"class":60},[28,265,64],{"class":38},[28,267,197],{"class":60},[28,269,70],{"class":38},[28,271,78],{"class":60},[28,273,64],{"class":38},[28,275,211],{"class":60},[28,277,64],{"class":38},[28,279,61],{"class":60},[28,281,64],{"class":38},[28,283,206],{"class":60},[28,285,81],{"class":38},[28,287,288],{"class":30,"line":118},[28,289,290],{"class":38},"aaaa.shape\n",[28,292,293],{"class":30,"line":124},[28,294,295],{"class":87},"#结果：（3，2，1，6）\n",[28,297,298],{"class":30,"line":131},[28,299,300],{"class":87},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[28,302,303,306,308,310,312,314,316,318,320],{"class":30,"line":137},[28,304,305],{"class":38},"np.transpose(aaaa,(",[28,307,61],{"class":60},[28,309,64],{"class":38},[28,311,211],{"class":60},[28,313,64],{"class":38},[28,315,244],{"class":60},[28,317,64],{"class":38},[28,319,78],{"class":60},[28,321,247],{"class":38},[28,323,324],{"class":30,"line":143},[28,325,326],{"class":87},"#结果：(2,1,3,6)\n",[328,329,330],"style",{},"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":23,"searchDepth":48,"depth":48,"links":332},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":5,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",[342,5424,6532,7952,10941,12292,13781,14870,23633,23645,24244,24270,24394,24635,24700,24718,24731,24778,24902,25071,25270,25450,25655,25791,25886,25923,25936,26246,26987,27695,27716,28736,30367,30518,30531,30543,30841,50649,50664,50681,50714,53586,76934,93079,93100,93213,93332,94101,94763,95124,95162,95268,95368,95411,95437,95498,97152,97253,97278,97769,98269,99348,99593,100335,100837,100849,102865,104529,106032,107730,109647,111566,113588,117058,117490,117953,118702,121646,121994,122016,122372,125679,125691,126094,126117,126264,126431,126636,126937,127494,128151,130082,131680,132329,133823,135254,136489,138183,139935,142345,142461,143396,143607,144492,145727,145955,145968,147123,149535,151903,155224,157701,159345,161122,163135,166187,168367,170894,173088],{"id":343,"title":344,"body":345,"description":23,"extension":334,"meta":5419,"navigation":336,"path":5420,"seo":5421,"stem":5422,"__hash__":5423},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":346,"toc":5391},[347,350,355,358,362,375,379,384,387,390,393,396,399,426,430,433,436,439,442,490,494,512,514,528,531,539,542,1396,1403,1420,1424,1510,1514,1520,1606,1610,1648,1652,1716,1720,1724,1731,1742,1746,1751,1755,1760,1764,1769,1773,1777,1782,2049,2054,2192,2197,2454,2457,2465,2469,2474,2577,2580,2886,2895,2996,2999,3002,3005,3008,3268,3273,3413,3416,3595,3598,3726,3729,3881,3885,3890,3893,3904,3912,3915,4022,4026,4030,4035,4085,4090,4095,4119,4124,4177,4180,4185,4362,4367,4652,4657,5054,5058,5063,5120,5125,5133,5136,5276,5279,5388],[10,348,344],{"id":349},"_1基础入门",[351,352,354],"h2",{"id":353},"_11注释","1.1注释",[14,356,357],{},"\u002F\u002F或者\u002F* *\u002F",[351,359,361],{"id":360},"_12命名","1.2命名",[363,364,365,369,372],"ol",{},[366,367,368],"li",{},"字母数字下划线",[366,370,371],{},"开头必须是字母或_",[366,373,374],{},"不能使用关键词",[351,376,378],{"id":377},"_13数据类型","1.3数据类型",[380,381,383],"h3",{"id":382},"_131整形","1.3.1整形",[14,385,386],{},"short 短整形 2",[14,388,389],{},"int 整形 4",[14,391,392],{},"long 长整形 win4 linux32位4 linux64位8",[14,394,395],{},"long long 长长整形 8",[14,397,398],{},"利用sizeof可以求数据类型占用的内存空间大小",[18,400,404],{"className":401,"code":402,"language":403,"meta":23,"style":23},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[25,405,406,419],{"__ignoreMap":23},[28,407,408,411,414,417],{"class":30,"line":31},[28,409,410],{"class":34},"sizeof",[28,412,413],{"class":38},"(",[28,415,416],{"class":34},"int",[28,418,81],{"class":38},[28,420,421,423],{"class":30,"line":48},[28,422,410],{"class":34},[28,424,425],{"class":38},"(num)\n",[380,427,429],{"id":428},"_132浮点型","1.3.2浮点型",[14,431,432],{},"float 单精度 4节 7位有效数字",[14,434,435],{},"double 双精度 8节 15-16有效数字",[14,437,438],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,440,441],{},"注意点：",[18,443,445],{"className":401,"code":444,"language":403,"meta":23,"style":23},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[25,446,447,469],{"__ignoreMap":23},[28,448,449,452,455,457,460,463,466],{"class":30,"line":31},[28,450,451],{"class":34},"float",[28,453,454],{"class":38}," f1",[28,456,54],{"class":34},[28,458,459],{"class":60},"3.14",[28,461,462],{"class":34},"f",[28,464,465],{"class":38},";",[28,467,468],{"class":87}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[28,470,471,473,476,478,480,483,485,487],{"class":30,"line":48},[28,472,451],{"class":34},[28,474,475],{"class":38}," f2",[28,477,54],{"class":34},[28,479,78],{"class":60},[28,481,482],{"class":34},"e",[28,484,211],{"class":60},[28,486,465],{"class":38},[28,488,489],{"class":87}," \u002F\u002F科学记数法\n",[380,491,493],{"id":492},"_133字符型","1.3.3字符型",[18,495,497],{"className":401,"code":496,"language":403,"meta":23,"style":23},"char ch='a'\n",[25,498,499],{"__ignoreMap":23},[28,500,501,504,507,509],{"class":30,"line":31},[28,502,503],{"class":34},"char",[28,505,506],{"class":38}," ch",[28,508,54],{"class":34},[28,510,511],{"class":127},"'a'\n",[14,513,441],{},[363,515,516,519,522,525],{},[366,517,518],{},"在显示字符型变量时，只能单引号，双引号x",[366,520,521],{},"单引号内只能一个字符，不能字符串",[366,523,524],{},"c和c++字符型变量只占用一个字符",[366,526,527],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,529,530],{},"ASCII码大致由以下两部分组成：",[363,532,533,536],{},[366,534,535],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[366,537,538],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,540,541],{},"ASCII码表格：",[543,544,545,589],"table",{},[546,547,548],"thead",{},[549,550,551,559,564,568,573,577,581,585],"tr",{},[552,553,554,558],"th",{},[555,556,557],"strong",{},"ASCII","值",[552,560,561],{},[555,562,563],{},"控制字符",[552,565,566,558],{},[555,567,557],{},[552,569,570],{},[555,571,572],{},"字符",[552,574,575,558],{},[555,576,557],{},[552,578,579],{},[555,580,572],{},[552,582,583,558],{},[555,584,557],{},[552,586,587],{},[555,588,572],{},[590,591,592,618,642,667,692,717,741,765,790,815,841,867,893,918,943,969,995,1019,1044,1069,1094,1119,1144,1169,1194,1218,1243,1269,1294,1319,1344,1370],"tbody",{},[549,593,594,597,600,603,606,609,612,615],{},[595,596,244],"td",{},[595,598,599],{},"NUT",[595,601,602],{},"32",[595,604,605],{},"(space)",[595,607,608],{},"64",[595,610,611],{},"@",[595,613,614],{},"96",[595,616,617],{},"、",[549,619,620,622,625,628,631,634,637,640],{},[595,621,61],{},[595,623,624],{},"SOH",[595,626,627],{},"33",[595,629,630],{},"!",[595,632,633],{},"65",[595,635,636],{},"A",[595,638,639],{},"97",[595,641,51],{},[549,643,644,646,649,652,655,658,661,664],{},[595,645,211],{},[595,647,648],{},"STX",[595,650,651],{},"34",[595,653,654],{},"\"",[595,656,657],{},"66",[595,659,660],{},"B",[595,662,663],{},"98",[595,665,666],{},"b",[549,668,669,671,674,677,680,683,686,689],{},[595,670,78],{},[595,672,673],{},"ETX",[595,675,676],{},"35",[595,678,679],{},"#",[595,681,682],{},"67",[595,684,685],{},"C",[595,687,688],{},"99",[595,690,691],{},"c",[549,693,694,696,699,702,705,708,711,714],{},[595,695,73],{},[595,697,698],{},"EOT",[595,700,701],{},"36",[595,703,704],{},"$",[595,706,707],{},"68",[595,709,710],{},"D",[595,712,713],{},"100",[595,715,716],{},"d",[549,718,719,722,725,727,730,733,736,739],{},[595,720,721],{},"5",[595,723,724],{},"ENQ",[595,726,197],{},[595,728,729],{},"%",[595,731,732],{},"69",[595,734,735],{},"E",[595,737,738],{},"101",[595,740,482],{},[549,742,743,745,748,751,754,757,760,763],{},[595,744,206],{},[595,746,747],{},"ACK",[595,749,750],{},"38",[595,752,753],{},"&",[595,755,756],{},"70",[595,758,759],{},"F",[595,761,762],{},"102",[595,764,462],{},[549,766,767,770,773,776,778,781,784,787],{},[595,768,769],{},"7",[595,771,772],{},"BEL",[595,774,775],{},"39",[595,777,64],{},[595,779,780],{},"71",[595,782,783],{},"G",[595,785,786],{},"103",[595,788,789],{},"g",[549,791,792,795,798,801,803,806,809,812],{},[595,793,794],{},"8",[595,796,797],{},"BS",[595,799,800],{},"40",[595,802,413],{},[595,804,805],{},"72",[595,807,808],{},"H",[595,810,811],{},"104",[595,813,814],{},"h",[549,816,817,820,823,826,829,832,835,838],{},[595,818,819],{},"9",[595,821,822],{},"HT",[595,824,825],{},"41",[595,827,828],{},")",[595,830,831],{},"73",[595,833,834],{},"I",[595,836,837],{},"105",[595,839,840],{},"i",[549,842,843,846,849,852,855,858,861,864],{},[595,844,845],{},"10",[595,847,848],{},"LF",[595,850,851],{},"42",[595,853,854],{},"*",[595,856,857],{},"74",[595,859,860],{},"J",[595,862,863],{},"106",[595,865,866],{},"j",[549,868,869,872,875,878,881,884,887,890],{},[595,870,871],{},"11",[595,873,874],{},"VT",[595,876,877],{},"43",[595,879,880],{},"+",[595,882,883],{},"75",[595,885,886],{},"K",[595,888,889],{},"107",[595,891,892],{},"k",[549,894,895,898,901,904,906,909,912,915],{},[595,896,897],{},"12",[595,899,900],{},"FF",[595,902,903],{},"44",[595,905,64],{},[595,907,908],{},"76",[595,910,911],{},"L",[595,913,914],{},"108",[595,916,917],{},"l",[549,919,920,922,925,928,931,934,937,940],{},[595,921,67],{},[595,923,924],{},"CR",[595,926,927],{},"45",[595,929,930],{},"-",[595,932,933],{},"77",[595,935,936],{},"M",[595,938,939],{},"109",[595,941,942],{},"m",[549,944,945,948,951,954,957,960,963,966],{},[595,946,947],{},"14",[595,949,950],{},"SO",[595,952,953],{},"46",[595,955,956],{},".",[595,958,959],{},"78",[595,961,962],{},"N",[595,964,965],{},"110",[595,967,968],{},"n",[549,970,971,974,977,980,983,986,989,992],{},[595,972,973],{},"15",[595,975,976],{},"SI",[595,978,979],{},"47",[595,981,982],{},"\u002F",[595,984,985],{},"79",[595,987,988],{},"O",[595,990,991],{},"111",[595,993,994],{},"o",[549,996,997,1000,1003,1006,1008,1011,1014,1017],{},[595,998,999],{},"16",[595,1001,1002],{},"DLE",[595,1004,1005],{},"48",[595,1007,244],{},[595,1009,1010],{},"80",[595,1012,1013],{},"P",[595,1015,1016],{},"112",[595,1018,14],{},[549,1020,1021,1024,1027,1030,1032,1035,1038,1041],{},[595,1022,1023],{},"17",[595,1025,1026],{},"DCI",[595,1028,1029],{},"49",[595,1031,61],{},[595,1033,1034],{},"81",[595,1036,1037],{},"Q",[595,1039,1040],{},"113",[595,1042,1043],{},"q",[549,1045,1046,1049,1052,1055,1057,1060,1063,1066],{},[595,1047,1048],{},"18",[595,1050,1051],{},"DC2",[595,1053,1054],{},"50",[595,1056,211],{},[595,1058,1059],{},"82",[595,1061,1062],{},"R",[595,1064,1065],{},"114",[595,1067,1068],{},"r",[549,1070,1071,1074,1077,1080,1082,1085,1088,1091],{},[595,1072,1073],{},"19",[595,1075,1076],{},"DC3",[595,1078,1079],{},"51",[595,1081,78],{},[595,1083,1084],{},"83",[595,1086,1087],{},"S",[595,1089,1090],{},"115",[595,1092,1093],{},"s",[549,1095,1096,1099,1102,1105,1107,1110,1113,1116],{},[595,1097,1098],{},"20",[595,1100,1101],{},"DC4",[595,1103,1104],{},"52",[595,1106,73],{},[595,1108,1109],{},"84",[595,1111,1112],{},"T",[595,1114,1115],{},"116",[595,1117,1118],{},"t",[549,1120,1121,1124,1127,1130,1132,1135,1138,1141],{},[595,1122,1123],{},"21",[595,1125,1126],{},"NAK",[595,1128,1129],{},"53",[595,1131,721],{},[595,1133,1134],{},"85",[595,1136,1137],{},"U",[595,1139,1140],{},"117",[595,1142,1143],{},"u",[549,1145,1146,1149,1152,1155,1157,1160,1163,1166],{},[595,1147,1148],{},"22",[595,1150,1151],{},"SYN",[595,1153,1154],{},"54",[595,1156,206],{},[595,1158,1159],{},"86",[595,1161,1162],{},"V",[595,1164,1165],{},"118",[595,1167,1168],{},"v",[549,1170,1171,1174,1177,1180,1182,1185,1188,1191],{},[595,1172,1173],{},"23",[595,1175,1176],{},"TB",[595,1178,1179],{},"55",[595,1181,769],{},[595,1183,1184],{},"87",[595,1186,1187],{},"W",[595,1189,1190],{},"119",[595,1192,1193],{},"w",[549,1195,1196,1199,1202,1205,1207,1210,1213,1216],{},[595,1197,1198],{},"24",[595,1200,1201],{},"CAN",[595,1203,1204],{},"56",[595,1206,794],{},[595,1208,1209],{},"88",[595,1211,1212],{},"X",[595,1214,1215],{},"120",[595,1217,185],{},[549,1219,1220,1223,1226,1229,1231,1234,1237,1240],{},[595,1221,1222],{},"25",[595,1224,1225],{},"EM",[595,1227,1228],{},"57",[595,1230,819],{},[595,1232,1233],{},"89",[595,1235,1236],{},"Y",[595,1238,1239],{},"121",[595,1241,1242],{},"y",[549,1244,1245,1248,1251,1254,1257,1260,1263,1266],{},[595,1246,1247],{},"26",[595,1249,1250],{},"SUB",[595,1252,1253],{},"58",[595,1255,1256],{},":",[595,1258,1259],{},"90",[595,1261,1262],{},"Z",[595,1264,1265],{},"122",[595,1267,1268],{},"z",[549,1270,1271,1274,1277,1280,1282,1285,1288,1291],{},[595,1272,1273],{},"27",[595,1275,1276],{},"ESC",[595,1278,1279],{},"59",[595,1281,465],{},[595,1283,1284],{},"91",[595,1286,1287],{},"[",[595,1289,1290],{},"123",[595,1292,1293],{},"{",[549,1295,1296,1299,1302,1305,1308,1311,1313,1316],{},[595,1297,1298],{},"28",[595,1300,1301],{},"FS",[595,1303,1304],{},"60",[595,1306,1307],{},"\u003C",[595,1309,1310],{},"92",[595,1312,982],{},[595,1314,1315],{},"124",[595,1317,1318],{},"|",[549,1320,1321,1324,1327,1330,1332,1335,1338,1341],{},[595,1322,1323],{},"29",[595,1325,1326],{},"GS",[595,1328,1329],{},"61",[595,1331,54],{},[595,1333,1334],{},"93",[595,1336,1337],{},"]",[595,1339,1340],{},"125",[595,1342,1343],{},"}",[549,1345,1346,1349,1352,1355,1358,1361,1364,1367],{},[595,1347,1348],{},"30",[595,1350,1351],{},"RS",[595,1353,1354],{},"62",[595,1356,1357],{},">",[595,1359,1360],{},"94",[595,1362,1363],{},"^",[595,1365,1366],{},"126",[595,1368,1369],{},"`",[549,1371,1372,1375,1378,1381,1384,1387,1390,1393],{},[595,1373,1374],{},"31",[595,1376,1377],{},"US",[595,1379,1380],{},"63",[595,1382,1383],{},"?",[595,1385,1386],{},"95",[595,1388,1389],{},"_",[595,1391,1392],{},"127",[595,1394,1395],{},"DEL",[14,1397,1398,1399,1402],{},"ASCII 码大致由以下",[555,1400,1401],{},"两部分组","成：",[1404,1405,1406,1413],"ul",{},[366,1407,1408,1409,1412],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[555,1410,1411],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[366,1414,1415,1416,1419],{},"ASCII 打印字符：数字 ",[555,1417,1418],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[380,1421,1423],{"id":1422},"_134转义字符","1.3.4转义字符",[18,1425,1427],{"className":401,"code":1426,"language":403,"meta":23,"style":23},"\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",[25,1428,1429,1434,1450,1464,1469,1482,1487],{"__ignoreMap":23},[28,1430,1431],{"class":30,"line":31},[28,1432,1433],{"class":87},"\u002F\u002F换行符\n",[28,1435,1436,1439,1442,1445,1447],{"class":30,"line":48},[28,1437,1438],{"class":38},"cout ",[28,1440,1441],{"class":34},"\u003C\u003C",[28,1443,1444],{"class":127},"\"hello world\u002Fn\"",[28,1446,465],{"class":38},[28,1448,1449],{"class":87}," \u002F\u002F就等同于如下：\n",[28,1451,1452,1454,1456,1459,1461],{"class":30,"line":84},[28,1453,1438],{"class":38},[28,1455,1441],{"class":34},[28,1457,1458],{"class":127},"\"hello world\"",[28,1460,1441],{"class":34},[28,1462,1463],{"class":38},"endl;\n",[28,1465,1466],{"class":30,"line":91},[28,1467,1468],{"class":87},"\u002F\u002F反斜杠\n",[28,1470,1471,1473,1475,1478,1480],{"class":30,"line":97},[28,1472,1438],{"class":38},[28,1474,1441],{"class":34},[28,1476,1477],{"class":127},"\"\u002F\u002F\"",[28,1479,1441],{"class":34},[28,1481,1463],{"class":38},[28,1483,1484],{"class":30,"line":103},[28,1485,1486],{"class":87},"\u002F\u002F水平制表符\n",[28,1488,1489,1491,1493,1496,1499,1502,1504,1507],{"class":30,"line":109},[28,1490,1438],{"class":38},[28,1492,1441],{"class":34},[28,1494,1495],{"class":127},"\"aaaa",[28,1497,1498],{"class":60},"\\t",[28,1500,1501],{"class":127},"helloworld\"",[28,1503,1441],{"class":34},[28,1505,1506],{"class":38},"endl;",[28,1508,1509],{"class":87}," \u002F\u002F输出窗口时有对齐效果\n",[380,1511,1513],{"id":1512},"_135字符串型","1.3.5字符串型",[14,1515,1516,1517,1519],{},"char 变量名",[28,1518],{},"=\"字符串值\"",[18,1521,1523],{"className":401,"code":1522,"language":403,"meta":23,"style":23},"\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",[25,1524,1525,1530,1535,1540,1545,1559,1572,1577,1582,1593],{"__ignoreMap":23},[28,1526,1527],{"class":30,"line":31},[28,1528,1529],{"class":87},"\u002F\u002Fc风格字符串\n",[28,1531,1532],{"class":30,"line":48},[28,1533,1534],{"class":87},"\u002F\u002F注意事项：\n",[28,1536,1537],{"class":30,"line":84},[28,1538,1539],{"class":87},"\u002F\u002F1.char字符串名[]\n",[28,1541,1542],{"class":30,"line":91},[28,1543,1544],{"class":87},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[28,1546,1547,1549,1552,1554,1556],{"class":30,"line":97},[28,1548,503],{"class":34},[28,1550,1551],{"class":38}," str[]",[28,1553,54],{"class":34},[28,1555,1458],{"class":127},[28,1557,1558],{"class":38},";\n",[28,1560,1561,1563,1565,1568,1570],{"class":30,"line":103},[28,1562,1438],{"class":38},[28,1564,1441],{"class":34},[28,1566,1567],{"class":38},"str",[28,1569,1441],{"class":34},[28,1571,1463],{"class":38},[28,1573,1574],{"class":30,"line":109},[28,1575,1576],{"class":87},"\u002F\u002Fc++风格字符串\n",[28,1578,1579],{"class":30,"line":118},[28,1580,1581],{"class":87},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[28,1583,1584,1587,1589,1591],{"class":30,"line":124},[28,1585,1586],{"class":38},"string str2",[28,1588,54],{"class":34},[28,1590,1458],{"class":127},[28,1592,1558],{"class":38},[28,1594,1595,1597,1599,1602,1604],{"class":30,"line":131},[28,1596,1438],{"class":38},[28,1598,1441],{"class":34},[28,1600,1601],{"class":38},"str2",[28,1603,1441],{"class":34},[28,1605,1463],{"class":38},[380,1607,1609],{"id":1608},"_136布尔类型bool","1.3.6布尔类型bool",[18,1611,1613],{"className":401,"code":1612,"language":403,"meta":23,"style":23},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[25,1614,1615,1630],{"__ignoreMap":23},[28,1616,1617,1620,1623,1625,1628],{"class":30,"line":31},[28,1618,1619],{"class":34},"bool",[28,1621,1622],{"class":38}," flag",[28,1624,54],{"class":34},[28,1626,1627],{"class":60},"true",[28,1629,1558],{"class":38},[28,1631,1632,1635,1638,1641,1643,1645],{"class":30,"line":48},[28,1633,1634],{"class":38},"cout",[28,1636,1637],{"class":34},"\u003C\u003Csizeof",[28,1639,1640],{"class":38},"(flag)",[28,1642,1441],{"class":34},[28,1644,1506],{"class":38},[28,1646,1647],{"class":87}," \u002F\u002F查看布尔占内存空间\n",[351,1649,1651],{"id":1650},"_14键盘输入cin","1.4键盘输入cin",[18,1653,1655],{"className":401,"code":1654,"language":403,"meta":23,"style":23},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[25,1656,1657,1670,1687,1698],{"__ignoreMap":23},[28,1658,1659,1661,1664,1666,1668],{"class":30,"line":31},[28,1660,416],{"class":34},[28,1662,1663],{"class":38}," a",[28,1665,54],{"class":34},[28,1667,244],{"class":60},[28,1669,1558],{"class":38},[28,1671,1672,1674,1676,1679,1681,1683,1685],{"class":30,"line":48},[28,1673,1634],{"class":38},[28,1675,1441],{"class":34},[28,1677,1678],{"class":127},"\"请给整型变量a赋值\"",[28,1680,1441],{"class":34},[28,1682,51],{"class":38},[28,1684,1441],{"class":34},[28,1686,1463],{"class":38},[28,1688,1689,1692,1695],{"class":30,"line":84},[28,1690,1691],{"class":38},"cin ",[28,1693,1694],{"class":34},">>",[28,1696,1697],{"class":38}," a;\n",[28,1699,1700,1702,1704,1707,1710,1712,1714],{"class":30,"line":91},[28,1701,1438],{"class":38},[28,1703,1441],{"class":34},[28,1705,1706],{"class":127}," \"整型变量a=\"",[28,1708,1709],{"class":34}," \u003C\u003C",[28,1711,51],{"class":38},[28,1713,1441],{"class":34},[28,1715,1463],{"class":38},[351,1717,1719],{"id":1718},"_15运算符","1.5运算符",[380,1721,1723],{"id":1722},"_151算术运算符","1.5.1算术运算符",[14,1725,1726,1730],{},[1727,1728],"img",{"alt":23,"src":1729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[363,1732,1733,1736,1739],{},[366,1734,1735],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[366,1737,1738],{},"两个小数不可以做取模运算",[366,1740,1741],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[380,1743,1745],{"id":1744},"_152赋值运算符","1.5.2赋值运算符",[14,1747,1748],{},[1727,1749],{"alt":23,"src":1750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[380,1752,1754],{"id":1753},"_153比较运算符","1.5.3比较运算符",[14,1756,1757],{},[1727,1758],{"alt":23,"src":1759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[380,1761,1763],{"id":1762},"_154逻辑运算符","1.5.4逻辑运算符",[14,1765,1766],{},[1727,1767],{"alt":23,"src":1768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[351,1770,1772],{"id":1771},"_16程序流程结构","1.6程序流程结构",[380,1774,1776],{"id":1775},"_161选择结构","1.6.1选择结构",[363,1778,1779],{},[366,1780,1781],{},"if语句\n单行、多行、多条件if语句",[18,1783,1785],{"className":401,"code":1784,"language":403,"meta":23,"style":23},"\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",[25,1786,1787,1792,1807,1812,1826,1831,1836,1845,1858,1862,1875,1879,1884,1888,1902,1907,1913,1934,1939,1953,1958,1987,1992,2009,2014,2019,2024,2038,2043],{"__ignoreMap":23},[28,1788,1789],{"class":30,"line":31},[28,1790,1791],{"class":87},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[28,1793,1794,1797,1800,1802,1805],{"class":30,"line":48},[28,1795,1796],{"class":34},"if",[28,1798,1799],{"class":38},"(score",[28,1801,1357],{"class":34},[28,1803,1804],{"class":60},"600",[28,1806,81],{"class":38},[28,1808,1809],{"class":30,"line":84},[28,1810,1811],{"class":38},"{\n",[28,1813,1814,1817,1819,1822,1824],{"class":30,"line":91},[28,1815,1816],{"class":38},"    cout",[28,1818,1441],{"class":34},[28,1820,1821],{"class":127},"'这是单行if语句'",[28,1823,1441],{"class":34},[28,1825,1463],{"class":38},[28,1827,1828],{"class":30,"line":97},[28,1829,1830],{"class":38},"}\n",[28,1832,1833],{"class":30,"line":103},[28,1834,1835],{"class":87},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[28,1837,1838,1840,1842],{"class":30,"line":109},[28,1839,1691],{"class":38},[28,1841,1694],{"class":34},[28,1843,1844],{"class":38}," score\n",[28,1846,1847,1849,1851,1854,1856],{"class":30,"line":118},[28,1848,1796],{"class":34},[28,1850,1799],{"class":38},[28,1852,1853],{"class":34},"\u003C=",[28,1855,1804],{"class":60},[28,1857,81],{"class":38},[28,1859,1860],{"class":30,"line":124},[28,1861,1811],{"class":38},[28,1863,1864,1866,1868,1871,1873],{"class":30,"line":131},[28,1865,1816],{"class":38},[28,1867,1694],{"class":34},[28,1869,1870],{"class":127},"\"小于等于600\"",[28,1872,1441],{"class":34},[28,1874,1463],{"class":38},[28,1876,1877],{"class":30,"line":137},[28,1878,1830],{"class":38},[28,1880,1881],{"class":30,"line":143},[28,1882,1883],{"class":34},"else\n",[28,1885,1886],{"class":30,"line":149},[28,1887,1811],{"class":38},[28,1889,1891,1893,1895,1898,1900],{"class":30,"line":1890},14,[28,1892,1816],{"class":38},[28,1894,1694],{"class":34},[28,1896,1897],{"class":127},"\"大于600\"",[28,1899,1694],{"class":34},[28,1901,1463],{"class":38},[28,1903,1905],{"class":30,"line":1904},15,[28,1906,1830],{"class":38},[28,1908,1910],{"class":30,"line":1909},16,[28,1911,1912],{"class":87},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[28,1914,1916,1918,1921,1923,1925,1928,1930,1932],{"class":30,"line":1915},17,[28,1917,1796],{"class":34},[28,1919,1920],{"class":38}," (",[28,1922,244],{"class":60},[28,1924,1307],{"class":34},[28,1926,1927],{"class":38},"num",[28,1929,1307],{"class":34},[28,1931,713],{"class":60},[28,1933,81],{"class":38},[28,1935,1937],{"class":30,"line":1936},18,[28,1938,1811],{"class":38},[28,1940,1942,1944,1946,1949,1951],{"class":30,"line":1941},19,[28,1943,1816],{"class":38},[28,1945,1441],{"class":34},[28,1947,1948],{"class":127},"\"小于100\"",[28,1950,1441],{"class":34},[28,1952,1463],{"class":38},[28,1954,1956],{"class":30,"line":1955},20,[28,1957,1830],{"class":38},[28,1959,1961,1964,1967,1970,1973,1975,1978,1980,1982,1985],{"class":30,"line":1960},21,[28,1962,1963],{"class":34},"else",[28,1965,1966],{"class":34}," if",[28,1968,1969],{"class":38}," (nmu",[28,1971,1972],{"class":34},">=",[28,1974,713],{"class":60},[28,1976,1977],{"class":34},"&&",[28,1979,1927],{"class":38},[28,1981,1307],{"class":34},[28,1983,1984],{"class":60},"200",[28,1986,81],{"class":38},[28,1988,1990],{"class":30,"line":1989},22,[28,1991,1811],{"class":38},[28,1993,1995,1997,1999,2002,2004,2006],{"class":30,"line":1994},23,[28,1996,1816],{"class":38},[28,1998,1441],{"class":34},[28,2000,2001],{"class":127},"\"不小于100且小于200\"",[28,2003,1441],{"class":34},[28,2005,1506],{"class":38},[28,2007,2008],{"class":87}," \u002F\u002F可以无限else if,python中是elif：\n",[28,2010,2012],{"class":30,"line":2011},24,[28,2013,1830],{"class":38},[28,2015,2017],{"class":30,"line":2016},25,[28,2018,1883],{"class":34},[28,2020,2022],{"class":30,"line":2021},26,[28,2023,1811],{"class":38},[28,2025,2027,2029,2031,2034,2036],{"class":30,"line":2026},27,[28,2028,1816],{"class":38},[28,2030,1441],{"class":34},[28,2032,2033],{"class":127},"\"不小于200\"",[28,2035,1441],{"class":34},[28,2037,1463],{"class":38},[28,2039,2041],{"class":30,"line":2040},28,[28,2042,1830],{"class":38},[28,2044,2046],{"class":30,"line":2045},29,[28,2047,2048],{"class":87},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[363,2050,2051],{"start":48},[366,2052,2053],{},"三目运算符",[18,2055,2057],{"className":401,"code":2056,"language":403,"meta":23,"style":23},"\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",[25,2058,2059,2064,2069,2095,2117,2134,2139,2162,2177],{"__ignoreMap":23},[28,2060,2061],{"class":30,"line":31},[28,2062,2063],{"class":87},"\u002F\u002F创建三个变量a,b,c\n",[28,2065,2066],{"class":30,"line":48},[28,2067,2068],{"class":87},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[28,2070,2071,2073,2075,2077,2079,2082,2084,2086,2089,2091,2093],{"class":30,"line":84},[28,2072,416],{"class":34},[28,2074,1663],{"class":38},[28,2076,54],{"class":34},[28,2078,1098],{"class":60},[28,2080,2081],{"class":38},",b",[28,2083,54],{"class":34},[28,2085,845],{"class":60},[28,2087,2088],{"class":38},",c",[28,2090,54],{"class":34},[28,2092,244],{"class":60},[28,2094,1558],{"class":38},[28,2096,2097,2099,2101,2104,2106,2108,2110,2112,2114],{"class":30,"line":91},[28,2098,691],{"class":38},[28,2100,54],{"class":34},[28,2102,2103],{"class":38},"(a",[28,2105,1357],{"class":34},[28,2107,666],{"class":38},[28,2109,1383],{"class":34},[28,2111,51],{"class":38},[28,2113,1256],{"class":34},[28,2115,2116],{"class":38},"b)\n",[28,2118,2119,2121,2123,2126,2128,2130,2132],{"class":30,"line":97},[28,2120,1634],{"class":38},[28,2122,1441],{"class":34},[28,2124,2125],{"class":127},"\"c=\"",[28,2127,1441],{"class":34},[28,2129,691],{"class":38},[28,2131,1441],{"class":34},[28,2133,1463],{"class":38},[28,2135,2136],{"class":30,"line":103},[28,2137,2138],{"class":87},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[28,2140,2141,2143,2145,2147,2149,2151,2153,2156,2158,2160],{"class":30,"line":109},[28,2142,2103],{"class":38},[28,2144,1357],{"class":34},[28,2146,666],{"class":38},[28,2148,1383],{"class":34},[28,2150,51],{"class":38},[28,2152,1256],{"class":34},[28,2154,2155],{"class":38},"b)",[28,2157,54],{"class":34},[28,2159,713],{"class":60},[28,2161,1558],{"class":38},[28,2163,2164,2166,2168,2170,2172,2174],{"class":30,"line":118},[28,2165,1634],{"class":38},[28,2167,1441],{"class":34},[28,2169,51],{"class":38},[28,2171,1441],{"class":34},[28,2173,1506],{"class":38},[28,2175,2176],{"class":87}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[28,2178,2179,2181,2183,2185,2187,2189],{"class":30,"line":124},[28,2180,1634],{"class":38},[28,2182,1441],{"class":34},[28,2184,666],{"class":38},[28,2186,1441],{"class":34},[28,2188,1506],{"class":38},[28,2190,2191],{"class":87}," \u002F\u002F10   a>b,b还是原值\n",[363,2193,2194],{"start":84},[366,2195,2196],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[18,2198,2200],{"className":401,"code":2199,"language":403,"meta":23,"style":23},"\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",[25,2201,2202,2207,2215,2229,2239,2243,2257,2270,2280,2288,2293,2318,2339,2361,2382,2404,2425,2445,2450],{"__ignoreMap":23},[28,2203,2204],{"class":30,"line":31},[28,2205,2206],{"class":87},"\u002F\u002F案例-电影打分\n",[28,2208,2209,2212],{"class":30,"line":48},[28,2210,2211],{"class":34},"#include",[28,2213,2214],{"class":127},"\u003Ciostream>\n",[28,2216,2217,2220,2223,2227],{"class":30,"line":84},[28,2218,2219],{"class":34},"using",[28,2221,2222],{"class":34}," namespace",[28,2224,2226],{"class":2225},"sScJk"," std",[28,2228,1558],{"class":38},[28,2230,2231,2233,2236],{"class":30,"line":91},[28,2232,416],{"class":34},[28,2234,2235],{"class":2225}," main",[28,2237,2238],{"class":38},"()\n",[28,2240,2241],{"class":30,"line":97},[28,2242,1811],{"class":38},[28,2244,2245,2248,2251,2253,2255],{"class":30,"line":103},[28,2246,2247],{"class":34},"    int",[28,2249,2250],{"class":38}," score",[28,2252,54],{"class":34},[28,2254,244],{"class":60},[28,2256,1558],{"class":38},[28,2258,2259,2261,2263,2266,2268],{"class":30,"line":109},[28,2260,1816],{"class":38},[28,2262,1441],{"class":34},[28,2264,2265],{"class":127},"\"电影打分：\"",[28,2267,1441],{"class":34},[28,2269,1463],{"class":38},[28,2271,2272,2275,2277],{"class":30,"line":118},[28,2273,2274],{"class":38},"    cin",[28,2276,1694],{"class":34},[28,2278,2279],{"class":38},"score;\n",[28,2281,2282,2285],{"class":30,"line":124},[28,2283,2284],{"class":34},"    switch",[28,2286,2287],{"class":38},"(score)\n",[28,2289,2290],{"class":30,"line":131},[28,2291,2292],{"class":38},"    {\n",[28,2294,2295,2298,2301,2304,2306,2309,2311,2313,2316],{"class":30,"line":137},[28,2296,2297],{"class":34},"        case",[28,2299,2300],{"class":60}," 10",[28,2302,2303],{"class":38},":cout",[28,2305,1441],{"class":34},[28,2307,2308],{"class":127},"\"经典\"",[28,2310,1441],{"class":34},[28,2312,1506],{"class":38},[28,2314,2315],{"class":34},"break",[28,2317,1558],{"class":38},[28,2319,2320,2322,2325,2327,2329,2331,2333,2335,2337],{"class":30,"line":143},[28,2321,2297],{"class":34},[28,2323,2324],{"class":60}," 9",[28,2326,2303],{"class":38},[28,2328,1441],{"class":34},[28,2330,2308],{"class":127},[28,2332,1441],{"class":34},[28,2334,1506],{"class":38},[28,2336,2315],{"class":34},[28,2338,1558],{"class":38},[28,2340,2341,2343,2346,2348,2350,2353,2355,2357,2359],{"class":30,"line":149},[28,2342,2297],{"class":34},[28,2344,2345],{"class":60}," 8",[28,2347,2303],{"class":38},[28,2349,1441],{"class":34},[28,2351,2352],{"class":127},"\"非常好\"",[28,2354,1441],{"class":34},[28,2356,1506],{"class":38},[28,2358,2315],{"class":34},[28,2360,1558],{"class":38},[28,2362,2363,2365,2368,2370,2372,2374,2376,2378,2380],{"class":30,"line":1890},[28,2364,2297],{"class":34},[28,2366,2367],{"class":60}," 7",[28,2369,2303],{"class":38},[28,2371,1441],{"class":34},[28,2373,2352],{"class":127},[28,2375,1441],{"class":34},[28,2377,1506],{"class":38},[28,2379,2315],{"class":34},[28,2381,1558],{"class":38},[28,2383,2384,2386,2389,2391,2393,2396,2398,2400,2402],{"class":30,"line":1904},[28,2385,2297],{"class":34},[28,2387,2388],{"class":60}," 6",[28,2390,2303],{"class":38},[28,2392,1441],{"class":34},[28,2394,2395],{"class":127},"\"一般\"",[28,2397,1441],{"class":34},[28,2399,1506],{"class":38},[28,2401,2315],{"class":34},[28,2403,1558],{"class":38},[28,2405,2406,2408,2411,2413,2415,2417,2419,2421,2423],{"class":30,"line":1909},[28,2407,2297],{"class":34},[28,2409,2410],{"class":60}," 5",[28,2412,2303],{"class":38},[28,2414,1441],{"class":34},[28,2416,2395],{"class":127},[28,2418,1441],{"class":34},[28,2420,1506],{"class":38},[28,2422,2315],{"class":34},[28,2424,1558],{"class":38},[28,2426,2427,2430,2432,2434,2437,2439,2441,2443],{"class":30,"line":1915},[28,2428,2429],{"class":34},"        default",[28,2431,2303],{"class":38},[28,2433,1441],{"class":34},[28,2435,2436],{"class":127},"\"烂片\"",[28,2438,1441],{"class":34},[28,2440,1506],{"class":38},[28,2442,2315],{"class":34},[28,2444,1558],{"class":38},[28,2446,2447],{"class":30,"line":1936},[28,2448,2449],{"class":38},"    }\n",[28,2451,2452],{"class":30,"line":1941},[28,2453,1830],{"class":38},[14,2455,2456],{},"if和switch区别：",[1404,2458,2459,2462],{},[366,2460,2461],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[366,2463,2464],{},"switch优点：结构清晰，执行效率高",[380,2466,2468],{"id":2467},"_162循环结构","1.6.2循环结构",[363,2470,2471],{},[366,2472,2473],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[18,2475,2477],{"className":401,"code":2476,"language":403,"meta":23,"style":23},"\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",[25,2478,2479,2484,2492,2496,2509,2523,2527,2547,2557,2561,2573],{"__ignoreMap":23},[28,2480,2481],{"class":30,"line":31},[28,2482,2483],{"class":87},"\u002F\u002F打印0-9数字\n",[28,2485,2486,2488,2490],{"class":30,"line":48},[28,2487,416],{"class":34},[28,2489,2235],{"class":2225},[28,2491,2238],{"class":38},[28,2493,2494],{"class":30,"line":84},[28,2495,1811],{"class":38},[28,2497,2498,2500,2503,2505,2507],{"class":30,"line":91},[28,2499,2247],{"class":34},[28,2501,2502],{"class":38}," num",[28,2504,54],{"class":34},[28,2506,244],{"class":60},[28,2508,1558],{"class":38},[28,2510,2511,2514,2517,2519,2521],{"class":30,"line":97},[28,2512,2513],{"class":34},"    while",[28,2515,2516],{"class":38},"(num",[28,2518,1307],{"class":34},[28,2520,845],{"class":60},[28,2522,81],{"class":38},[28,2524,2525],{"class":30,"line":103},[28,2526,2292],{"class":38},[28,2528,2529,2532,2535,2537,2539,2541,2544],{"class":30,"line":109},[28,2530,2531],{"class":2225},"       std",[28,2533,2534],{"class":38},"::cout",[28,2536,1441],{"class":34},[28,2538,1927],{"class":38},[28,2540,1441],{"class":34},[28,2542,2543],{"class":2225},"std",[28,2545,2546],{"class":38},"::endl;\n",[28,2548,2549,2552,2555],{"class":30,"line":118},[28,2550,2551],{"class":38},"        num",[28,2553,2554],{"class":34},"++",[28,2556,1558],{"class":38},[28,2558,2559],{"class":30,"line":124},[28,2560,2449],{"class":38},[28,2562,2563,2566,2568,2571],{"class":30,"line":131},[28,2564,2565],{"class":2225},"    system",[28,2567,413],{"class":38},[28,2569,2570],{"class":127},"\"pause\"",[28,2572,81],{"class":38},[28,2574,2575],{"class":30,"line":137},[28,2576,1830],{"class":38},[14,2578,2579],{},"注意：写好循环条件，避免死循环情况",[18,2581,2583],{"className":401,"code":2582,"language":403,"meta":23,"style":23},"\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",[25,2584,2585,2590,2597,2604,2614,2622,2626,2631,2658,2663,2668,2676,2703,2708,2713,2726,2736,2740,2750,2755,2768,2773,2787,2792,2807,2811,2824,2828,2833,2837,2851,2859,2864,2870,2876,2881],{"__ignoreMap":23},[28,2586,2587],{"class":30,"line":31},[28,2588,2589],{"class":87},"\u002F\u002F循环结构-猜数字\n",[28,2591,2592,2594],{"class":30,"line":48},[28,2593,2211],{"class":34},[28,2595,2596],{"class":127}," \u003Ciostream>\n",[28,2598,2599,2601],{"class":30,"line":84},[28,2600,2211],{"class":34},[28,2602,2603],{"class":127}," \u003Cctime>\n",[28,2605,2606,2608,2610,2612],{"class":30,"line":91},[28,2607,2219],{"class":34},[28,2609,2222],{"class":34},[28,2611,2226],{"class":2225},[28,2613,1558],{"class":38},[28,2615,2616,2618,2620],{"class":30,"line":97},[28,2617,416],{"class":34},[28,2619,2235],{"class":2225},[28,2621,2238],{"class":38},[28,2623,2624],{"class":30,"line":103},[28,2625,1811],{"class":38},[28,2627,2628],{"class":30,"line":109},[28,2629,2630],{"class":87},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[28,2632,2633,2636,2639,2642,2645,2647,2650,2652,2655],{"class":30,"line":118},[28,2634,2635],{"class":2225},"    srand",[28,2637,2638],{"class":38},"((",[28,2640,2641],{"class":34},"unsigned",[28,2643,2644],{"class":34}," int",[28,2646,828],{"class":38},[28,2648,2649],{"class":2225},"time",[28,2651,413],{"class":38},[28,2653,2654],{"class":60},"NULL",[28,2656,2657],{"class":38},"));\n",[28,2659,2660],{"class":30,"line":124},[28,2661,2662],{"emptyLinePlaceholder":336},"\n",[28,2664,2665],{"class":30,"line":131},[28,2666,2667],{"class":87},"    \u002F\u002F1.系统生成随机数\n",[28,2669,2670,2673],{"class":30,"line":137},[28,2671,2672],{"class":87},"    \u002F\u002Frand()%100",[28,2674,2675],{"class":87}," \u002F\u002F生成0-99的随机数\n",[28,2677,2678,2680,2682,2684,2687,2690,2692,2694,2696,2698,2700],{"class":30,"line":143},[28,2679,2247],{"class":34},[28,2681,2502],{"class":38},[28,2683,54],{"class":34},[28,2685,2686],{"class":2225},"rand",[28,2688,2689],{"class":38},"()",[28,2691,729],{"class":34},[28,2693,713],{"class":60},[28,2695,880],{"class":34},[28,2697,61],{"class":60},[28,2699,465],{"class":38},[28,2701,2702],{"class":87}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[28,2704,2705],{"class":30,"line":149},[28,2706,2707],{"class":87},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[28,2709,2710],{"class":30,"line":1890},[28,2711,2712],{"class":87},"    \u002F\u002F2.玩家猜测\n",[28,2714,2715,2717,2720,2722,2724],{"class":30,"line":1904},[28,2716,2247],{"class":34},[28,2718,2719],{"class":38}," val",[28,2721,54],{"class":34},[28,2723,244],{"class":60},[28,2725,1558],{"class":38},[28,2727,2728,2730,2732,2734],{"class":30,"line":1909},[28,2729,2513],{"class":34},[28,2731,1920],{"class":38},[28,2733,61],{"class":60},[28,2735,81],{"class":38},[28,2737,2738],{"class":30,"line":1915},[28,2739,2292],{"class":38},[28,2741,2742,2745,2747],{"class":30,"line":1936},[28,2743,2744],{"class":38},"        cin",[28,2746,1694],{"class":34},[28,2748,2749],{"class":38},"val;\n",[28,2751,2752],{"class":30,"line":1941},[28,2753,2754],{"class":87},"        \u002F\u002F3.判断玩家猜测\n",[28,2756,2757,2760,2763,2765],{"class":30,"line":1955},[28,2758,2759],{"class":34},"        if",[28,2761,2762],{"class":38},"(val",[28,2764,1307],{"class":34},[28,2766,2767],{"class":38},"num) \n",[28,2769,2770],{"class":30,"line":1960},[28,2771,2772],{"class":38},"        {\n",[28,2774,2775,2778,2780,2783,2785],{"class":30,"line":1989},[28,2776,2777],{"class":38},"            cout",[28,2779,1441],{"class":34},[28,2781,2782],{"class":127},"\"猜小了！\"",[28,2784,1441],{"class":34},[28,2786,1463],{"class":38},[28,2788,2789],{"class":30,"line":1994},[28,2790,2791],{"class":38},"        }\n",[28,2793,2794,2797,2799,2802,2804],{"class":30,"line":2011},[28,2795,2796],{"class":34},"        else",[28,2798,1966],{"class":34},[28,2800,2801],{"class":38}," (val",[28,2803,1357],{"class":34},[28,2805,2806],{"class":38},"num)\n",[28,2808,2809],{"class":30,"line":2016},[28,2810,2772],{"class":38},[28,2812,2813,2815,2817,2820,2822],{"class":30,"line":2021},[28,2814,2777],{"class":38},[28,2816,1441],{"class":34},[28,2818,2819],{"class":127},"\"猜大了！\"",[28,2821,1441],{"class":34},[28,2823,1463],{"class":38},[28,2825,2826],{"class":30,"line":2026},[28,2827,2791],{"class":38},[28,2829,2830],{"class":30,"line":2040},[28,2831,2832],{"class":34},"        else\n",[28,2834,2835],{"class":30,"line":2045},[28,2836,2772],{"class":38},[28,2838,2840,2842,2844,2847,2849],{"class":30,"line":2839},30,[28,2841,2777],{"class":38},[28,2843,1441],{"class":34},[28,2845,2846],{"class":127},"\"猜对了！\"",[28,2848,1441],{"class":34},[28,2850,1463],{"class":38},[28,2852,2854,2857],{"class":30,"line":2853},31,[28,2855,2856],{"class":34},"            break",[28,2858,1558],{"class":38},[28,2860,2862],{"class":30,"line":2861},32,[28,2863,2791],{"class":38},[28,2865,2867],{"class":30,"line":2866},33,[28,2868,2869],{"class":87},"        \u002F\u002F猜对 退出游戏\n",[28,2871,2873],{"class":30,"line":2872},34,[28,2874,2875],{"class":87},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[28,2877,2879],{"class":30,"line":2878},35,[28,2880,2449],{"class":38},[28,2882,2884],{"class":30,"line":2883},36,[28,2885,1830],{"class":38},[363,2887,2888],{"start":48},[366,2889,2890,2891,2894],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[555,2892,2893],{},"do...while会先执行一次循环语句","，在判断循环语句",[18,2896,2898],{"className":401,"code":2897,"language":403,"meta":23,"style":23},"\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",[25,2899,2900,2905,2913,2917,2929,2937,2941,2958,2965,2969,2982,2992],{"__ignoreMap":23},[28,2901,2902],{"class":30,"line":31},[28,2903,2904],{"class":87},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[28,2906,2907,2909,2911],{"class":30,"line":48},[28,2908,416],{"class":34},[28,2910,2235],{"class":2225},[28,2912,2238],{"class":38},[28,2914,2915],{"class":30,"line":84},[28,2916,1811],{"class":38},[28,2918,2919,2921,2923,2925,2927],{"class":30,"line":91},[28,2920,2247],{"class":34},[28,2922,2502],{"class":38},[28,2924,54],{"class":34},[28,2926,244],{"class":60},[28,2928,1558],{"class":38},[28,2930,2931,2934],{"class":30,"line":97},[28,2932,2933],{"class":34},"    do",[28,2935,2936],{"class":38}," \n",[28,2938,2939],{"class":30,"line":103},[28,2940,2292],{"class":38},[28,2942,2943,2946,2948,2950,2952,2954,2956],{"class":30,"line":109},[28,2944,2945],{"class":2225},"        std",[28,2947,2534],{"class":38},[28,2949,1441],{"class":34},[28,2951,1927],{"class":38},[28,2953,1441],{"class":34},[28,2955,2543],{"class":2225},[28,2957,2546],{"class":38},[28,2959,2960,2962],{"class":30,"line":118},[28,2961,2551],{"class":38},[28,2963,2964],{"class":34},"++\n",[28,2966,2967],{"class":30,"line":124},[28,2968,2449],{"class":38},[28,2970,2971,2973,2975,2977,2979],{"class":30,"line":131},[28,2972,2513],{"class":34},[28,2974,2516],{"class":38},[28,2976,1307],{"class":34},[28,2978,845],{"class":60},[28,2980,2981],{"class":38},");\n",[28,2983,2984,2986,2988,2990],{"class":30,"line":137},[28,2985,2565],{"class":2225},[28,2987,413],{"class":38},[28,2989,2570],{"class":127},[28,2991,2981],{"class":38},[28,2993,2994],{"class":30,"line":143},[28,2995,1830],{"class":38},[14,2997,2998],{},"案例-水仙花数",[14,3000,3001],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3003,3004],{},"例如：1^3+5^3+3^3=153",[14,3006,3007],{},"请用do...while语句，求出所有3位数的水仙花数",[18,3009,3011],{"className":401,"code":3010,"language":403,"meta":23,"style":23},"#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",[25,3012,3013,3019,3029,3037,3041,3046,3058,3064,3068,3073,3089,3105,3121,3136,3155,3170,3218,3222,3234,3238,3246,3250,3264],{"__ignoreMap":23},[28,3014,3015,3017],{"class":30,"line":31},[28,3016,2211],{"class":34},[28,3018,2596],{"class":127},[28,3020,3021,3023,3025,3027],{"class":30,"line":48},[28,3022,2219],{"class":34},[28,3024,2222],{"class":34},[28,3026,2226],{"class":2225},[28,3028,1558],{"class":38},[28,3030,3031,3033,3035],{"class":30,"line":84},[28,3032,416],{"class":34},[28,3034,2235],{"class":2225},[28,3036,2238],{"class":38},[28,3038,3039],{"class":30,"line":91},[28,3040,1811],{"class":38},[28,3042,3043],{"class":30,"line":97},[28,3044,3045],{"class":87},"    \u002F\u002F1.先打印所有三位数字\n",[28,3047,3048,3050,3052,3054,3056],{"class":30,"line":103},[28,3049,2247],{"class":34},[28,3051,2502],{"class":38},[28,3053,54],{"class":34},[28,3055,713],{"class":60},[28,3057,1558],{"class":38},[28,3059,3060,3062],{"class":30,"line":109},[28,3061,2933],{"class":34},[28,3063,2936],{"class":38},[28,3065,3066],{"class":30,"line":118},[28,3067,2292],{"class":38},[28,3069,3070],{"class":30,"line":124},[28,3071,3072],{"class":87},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[28,3074,3075,3078,3080,3082,3084,3086],{"class":30,"line":131},[28,3076,3077],{"class":34},"        int",[28,3079,1663],{"class":38},[28,3081,54],{"class":34},[28,3083,244],{"class":60},[28,3085,465],{"class":38},[28,3087,3088],{"class":87}," \u002F\u002F个位\n",[28,3090,3091,3093,3096,3098,3100,3102],{"class":30,"line":137},[28,3092,3077],{"class":34},[28,3094,3095],{"class":38}," b",[28,3097,54],{"class":34},[28,3099,244],{"class":60},[28,3101,465],{"class":38},[28,3103,3104],{"class":87}," \u002F\u002F十位\n",[28,3106,3107,3109,3112,3114,3116,3118],{"class":30,"line":143},[28,3108,3077],{"class":34},[28,3110,3111],{"class":38}," c",[28,3113,54],{"class":34},[28,3115,244],{"class":60},[28,3117,465],{"class":38},[28,3119,3120],{"class":87}," \u002F\u002F百位\n",[28,3122,3123,3126,3128,3130,3132,3134],{"class":30,"line":149},[28,3124,3125],{"class":38},"        a",[28,3127,54],{"class":34},[28,3129,1927],{"class":38},[28,3131,729],{"class":34},[28,3133,845],{"class":60},[28,3135,1558],{"class":38},[28,3137,3138,3141,3143,3145,3147,3149,3151,3153],{"class":30,"line":1890},[28,3139,3140],{"class":38},"        b",[28,3142,54],{"class":34},[28,3144,1927],{"class":38},[28,3146,982],{"class":34},[28,3148,845],{"class":60},[28,3150,729],{"class":34},[28,3152,845],{"class":60},[28,3154,1558],{"class":38},[28,3156,3157,3160,3162,3164,3166,3168],{"class":30,"line":1904},[28,3158,3159],{"class":38},"        c",[28,3161,54],{"class":34},[28,3163,1927],{"class":38},[28,3165,982],{"class":34},[28,3167,713],{"class":60},[28,3169,1558],{"class":38},[28,3171,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3209,3212,3215],{"class":30,"line":1909},[28,3173,2759],{"class":34},[28,3175,2103],{"class":38},[28,3177,854],{"class":34},[28,3179,51],{"class":38},[28,3181,854],{"class":34},[28,3183,51],{"class":38},[28,3185,880],{"class":34},[28,3187,666],{"class":38},[28,3189,854],{"class":34},[28,3191,666],{"class":38},[28,3193,854],{"class":34},[28,3195,666],{"class":38},[28,3197,880],{"class":34},[28,3199,691],{"class":38},[28,3201,854],{"class":34},[28,3203,691],{"class":38},[28,3205,854],{"class":34},[28,3207,3208],{"class":38},"c ",[28,3210,3211],{"class":34},"==",[28,3213,3214],{"class":38}," num)",[28,3216,3217],{"class":87}," \u002F\u002F如果是水仙花数，才打印\n",[28,3219,3220],{"class":30,"line":1915},[28,3221,2772],{"class":38},[28,3223,3224,3226,3228,3230,3232],{"class":30,"line":1936},[28,3225,2777],{"class":38},[28,3227,1441],{"class":34},[28,3229,1927],{"class":38},[28,3231,1441],{"class":34},[28,3233,1463],{"class":38},[28,3235,3236],{"class":30,"line":1941},[28,3237,2791],{"class":38},[28,3239,3240,3242,3244],{"class":30,"line":1955},[28,3241,2551],{"class":38},[28,3243,2554],{"class":34},[28,3245,1558],{"class":38},[28,3247,3248],{"class":30,"line":1960},[28,3249,2449],{"class":38},[28,3251,3252,3254,3257,3259,3262],{"class":30,"line":1989},[28,3253,2513],{"class":34},[28,3255,3256],{"class":38}," (num ",[28,3258,1307],{"class":34},[28,3260,3261],{"class":60}," 1000",[28,3263,2981],{"class":38},[28,3265,3266],{"class":30,"line":1994},[28,3267,1830],{"class":38},[363,3269,3270],{"start":84},[366,3271,3272],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[18,3274,3276],{"className":401,"code":3275,"language":403,"meta":23,"style":23},"\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",[25,3277,3278,3283,3312,3316,3328,3332,3337,3348,3355,3359,3373,3377,3384,3388,3400,3409],{"__ignoreMap":23},[28,3279,3280],{"class":30,"line":31},[28,3281,3282],{"class":87},"\u002F\u002F从数字0-9打印\n",[28,3284,3285,3288,3290,3292,3295,3297,3299,3302,3304,3306,3308,3310],{"class":30,"line":48},[28,3286,3287],{"class":34},"for",[28,3289,413],{"class":38},[28,3291,416],{"class":34},[28,3293,3294],{"class":38}," i",[28,3296,54],{"class":34},[28,3298,244],{"class":60},[28,3300,3301],{"class":38},";i",[28,3303,1307],{"class":34},[28,3305,845],{"class":60},[28,3307,3301],{"class":38},[28,3309,2554],{"class":34},[28,3311,81],{"class":38},[28,3313,3314],{"class":30,"line":84},[28,3315,1811],{"class":38},[28,3317,3318,3320,3322,3324,3326],{"class":30,"line":91},[28,3319,1816],{"class":38},[28,3321,1441],{"class":34},[28,3323,840],{"class":38},[28,3325,1441],{"class":34},[28,3327,1463],{"class":38},[28,3329,3330],{"class":30,"line":97},[28,3331,1830],{"class":38},[28,3333,3334],{"class":30,"line":103},[28,3335,3336],{"class":87},"\u002F\u002F上式可以进行拆分\n",[28,3338,3339,3341,3343,3345],{"class":30,"line":109},[28,3340,416],{"class":34},[28,3342,3294],{"class":38},[28,3344,54],{"class":34},[28,3346,3347],{"class":60},"0\n",[28,3349,3350,3352],{"class":30,"line":118},[28,3351,3287],{"class":34},[28,3353,3354],{"class":38},"(;;;)\n",[28,3356,3357],{"class":30,"line":124},[28,3358,1811],{"class":38},[28,3360,3361,3364,3367,3369,3371],{"class":30,"line":131},[28,3362,3363],{"class":34},"    if",[28,3365,3366],{"class":38},"(i",[28,3368,1972],{"class":34},[28,3370,845],{"class":60},[28,3372,81],{"class":38},[28,3374,3375],{"class":30,"line":137},[28,3376,2292],{"class":38},[28,3378,3379,3382],{"class":30,"line":143},[28,3380,3381],{"class":34},"        break",[28,3383,1558],{"class":38},[28,3385,3386],{"class":30,"line":149},[28,3387,2449],{"class":38},[28,3389,3390,3392,3394,3396,3398],{"class":30,"line":1890},[28,3391,1816],{"class":38},[28,3393,1441],{"class":34},[28,3395,840],{"class":38},[28,3397,1441],{"class":34},[28,3399,1463],{"class":38},[28,3401,3402,3405,3407],{"class":30,"line":1904},[28,3403,3404],{"class":38},"    i",[28,3406,2554],{"class":34},[28,3408,1558],{"class":38},[28,3410,3411],{"class":30,"line":1909},[28,3412,1830],{"class":38},[14,3414,3415],{},"小练习",[18,3417,3419],{"className":401,"code":3418,"language":403,"meta":23,"style":23},"#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",[25,3420,3421,3427,3437,3445,3449,3454,3459,3487,3491,3496,3501,3542,3546,3559,3563,3567,3571,3583,3587,3591],{"__ignoreMap":23},[28,3422,3423,3425],{"class":30,"line":31},[28,3424,2211],{"class":34},[28,3426,2214],{"class":127},[28,3428,3429,3431,3433,3435],{"class":30,"line":48},[28,3430,2219],{"class":34},[28,3432,2222],{"class":34},[28,3434,2226],{"class":2225},[28,3436,1558],{"class":38},[28,3438,3439,3441,3443],{"class":30,"line":84},[28,3440,416],{"class":34},[28,3442,2235],{"class":2225},[28,3444,2238],{"class":38},[28,3446,3447],{"class":30,"line":91},[28,3448,1811],{"class":38},[28,3450,3451],{"class":30,"line":97},[28,3452,3453],{"class":87},"    \u002F\u002F敲桌子案例\n",[28,3455,3456],{"class":30,"line":103},[28,3457,3458],{"class":87},"    \u002F\u002F1.先输出1-100的数字\n",[28,3460,3461,3464,3466,3468,3470,3472,3474,3477,3479,3481,3483,3485],{"class":30,"line":109},[28,3462,3463],{"class":34},"    for",[28,3465,413],{"class":38},[28,3467,416],{"class":34},[28,3469,3294],{"class":38},[28,3471,54],{"class":34},[28,3473,61],{"class":60},[28,3475,3476],{"class":38},"; i",[28,3478,1853],{"class":34},[28,3480,713],{"class":60},[28,3482,3476],{"class":38},[28,3484,2554],{"class":34},[28,3486,81],{"class":38},[28,3488,3489],{"class":30,"line":118},[28,3490,2292],{"class":38},[28,3492,3493],{"class":30,"line":124},[28,3494,3495],{"class":87},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[28,3497,3498],{"class":30,"line":131},[28,3499,3500],{"class":87},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[28,3502,3503,3505,3507,3509,3511,3513,3515,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540],{"class":30,"line":137},[28,3504,2759],{"class":34},[28,3506,3366],{"class":38},[28,3508,729],{"class":34},[28,3510,769],{"class":60},[28,3512,3211],{"class":34},[28,3514,244],{"class":60},[28,3516,3517],{"class":34}," ||",[28,3519,3294],{"class":38},[28,3521,729],{"class":34},[28,3523,845],{"class":60},[28,3525,3211],{"class":34},[28,3527,769],{"class":60},[28,3529,3517],{"class":34},[28,3531,3294],{"class":38},[28,3533,982],{"class":34},[28,3535,845],{"class":60},[28,3537,3211],{"class":34},[28,3539,769],{"class":60},[28,3541,81],{"class":38},[28,3543,3544],{"class":30,"line":143},[28,3545,2772],{"class":38},[28,3547,3548,3550,3552,3555,3557],{"class":30,"line":149},[28,3549,2777],{"class":38},[28,3551,1441],{"class":34},[28,3553,3554],{"class":127},"\"敲桌子\"",[28,3556,1441],{"class":34},[28,3558,1463],{"class":38},[28,3560,3561],{"class":30,"line":1890},[28,3562,2791],{"class":38},[28,3564,3565],{"class":30,"line":1904},[28,3566,2832],{"class":34},[28,3568,3569],{"class":30,"line":1909},[28,3570,2772],{"class":38},[28,3572,3573,3575,3577,3579,3581],{"class":30,"line":1915},[28,3574,2777],{"class":38},[28,3576,1441],{"class":34},[28,3578,840],{"class":38},[28,3580,1441],{"class":34},[28,3582,1463],{"class":38},[28,3584,3585],{"class":30,"line":1936},[28,3586,2791],{"class":38},[28,3588,3589],{"class":30,"line":1941},[28,3590,2449],{"class":38},[28,3592,3593],{"class":30,"line":1955},[28,3594,1830],{"class":38},[14,3596,3597],{},"嵌套实现星图",[18,3599,3601],{"className":401,"code":3600,"language":403,"meta":23,"style":23},"#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",[25,3602,3603,3609,3619,3627,3631,3657,3661,3690,3694,3705,3709,3718,3722],{"__ignoreMap":23},[28,3604,3605,3607],{"class":30,"line":31},[28,3606,2211],{"class":34},[28,3608,2214],{"class":127},[28,3610,3611,3613,3615,3617],{"class":30,"line":48},[28,3612,2219],{"class":34},[28,3614,2222],{"class":34},[28,3616,2226],{"class":2225},[28,3618,1558],{"class":38},[28,3620,3621,3623,3625],{"class":30,"line":84},[28,3622,416],{"class":34},[28,3624,2235],{"class":2225},[28,3626,2238],{"class":38},[28,3628,3629],{"class":30,"line":91},[28,3630,1811],{"class":38},[28,3632,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655],{"class":30,"line":97},[28,3634,3463],{"class":34},[28,3636,1920],{"class":38},[28,3638,416],{"class":34},[28,3640,3294],{"class":38},[28,3642,54],{"class":34},[28,3644,244],{"class":60},[28,3646,3301],{"class":38},[28,3648,1307],{"class":34},[28,3650,845],{"class":60},[28,3652,3301],{"class":38},[28,3654,2554],{"class":34},[28,3656,81],{"class":38},[28,3658,3659],{"class":30,"line":103},[28,3660,2292],{"class":38},[28,3662,3663,3666,3668,3670,3673,3675,3677,3680,3682,3684,3686,3688],{"class":30,"line":109},[28,3664,3665],{"class":34},"        for",[28,3667,1920],{"class":38},[28,3669,416],{"class":34},[28,3671,3672],{"class":38}," j",[28,3674,54],{"class":34},[28,3676,244],{"class":60},[28,3678,3679],{"class":38},";j",[28,3681,1307],{"class":34},[28,3683,845],{"class":60},[28,3685,3679],{"class":38},[28,3687,2554],{"class":34},[28,3689,81],{"class":38},[28,3691,3692],{"class":30,"line":118},[28,3693,2772],{"class":38},[28,3695,3696,3698,3700,3703],{"class":30,"line":124},[28,3697,2777],{"class":38},[28,3699,1441],{"class":34},[28,3701,3702],{"class":127},"\"*\"",[28,3704,1558],{"class":38},[28,3706,3707],{"class":30,"line":131},[28,3708,2791],{"class":38},[28,3710,3711,3714,3716],{"class":30,"line":137},[28,3712,3713],{"class":38},"        cout",[28,3715,1441],{"class":34},[28,3717,1463],{"class":38},[28,3719,3720],{"class":30,"line":143},[28,3721,2449],{"class":38},[28,3723,3724],{"class":30,"line":149},[28,3725,1830],{"class":38},[14,3727,3728],{},"乘法口诀表",[18,3730,3732],{"className":401,"code":3731,"language":403,"meta":23,"style":23},"#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",[25,3733,3734,3740,3750,3758,3762,3788,3792,3817,3821,3861,3865,3873,3877],{"__ignoreMap":23},[28,3735,3736,3738],{"class":30,"line":31},[28,3737,2211],{"class":34},[28,3739,2596],{"class":127},[28,3741,3742,3744,3746,3748],{"class":30,"line":48},[28,3743,2219],{"class":34},[28,3745,2222],{"class":34},[28,3747,2226],{"class":2225},[28,3749,1558],{"class":38},[28,3751,3752,3754,3756],{"class":30,"line":84},[28,3753,416],{"class":34},[28,3755,2235],{"class":2225},[28,3757,2238],{"class":38},[28,3759,3760],{"class":30,"line":91},[28,3761,1811],{"class":38},[28,3763,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786],{"class":30,"line":97},[28,3765,3463],{"class":34},[28,3767,413],{"class":38},[28,3769,416],{"class":34},[28,3771,3294],{"class":38},[28,3773,54],{"class":34},[28,3775,61],{"class":60},[28,3777,3301],{"class":38},[28,3779,1307],{"class":34},[28,3781,845],{"class":60},[28,3783,3301],{"class":38},[28,3785,2554],{"class":34},[28,3787,81],{"class":38},[28,3789,3790],{"class":30,"line":103},[28,3791,2292],{"class":38},[28,3793,3794,3796,3798,3800,3802,3804,3806,3808,3810,3813,3815],{"class":30,"line":109},[28,3795,3665],{"class":34},[28,3797,413],{"class":38},[28,3799,416],{"class":34},[28,3801,3672],{"class":38},[28,3803,54],{"class":34},[28,3805,61],{"class":60},[28,3807,3679],{"class":38},[28,3809,1853],{"class":34},[28,3811,3812],{"class":38},"i;j",[28,3814,2554],{"class":34},[28,3816,81],{"class":38},[28,3818,3819],{"class":30,"line":118},[28,3820,2772],{"class":38},[28,3822,3823,3825,3827,3829,3831,3833,3835,3837,3839,3842,3844,3846,3848,3850,3852,3855,3857,3859],{"class":30,"line":124},[28,3824,2777],{"class":38},[28,3826,1441],{"class":34},[28,3828,866],{"class":38},[28,3830,1441],{"class":34},[28,3832,3702],{"class":127},[28,3834,1441],{"class":34},[28,3836,840],{"class":38},[28,3838,1441],{"class":34},[28,3840,3841],{"class":127},"\"=\"",[28,3843,1441],{"class":34},[28,3845,840],{"class":38},[28,3847,854],{"class":34},[28,3849,866],{"class":38},[28,3851,1441],{"class":34},[28,3853,3854],{"class":127},"'",[28,3856,1498],{"class":60},[28,3858,3854],{"class":127},[28,3860,1558],{"class":38},[28,3862,3863],{"class":30,"line":131},[28,3864,2791],{"class":38},[28,3866,3867,3869,3871],{"class":30,"line":137},[28,3868,3713],{"class":38},[28,3870,1441],{"class":34},[28,3872,1463],{"class":38},[28,3874,3875],{"class":30,"line":143},[28,3876,2449],{"class":38},[28,3878,3879],{"class":30,"line":149},[28,3880,1830],{"class":38},[380,3882,3884],{"id":3883},"_163跳出语句","1.6.3跳出语句",[363,3886,3887],{},[366,3888,3889],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3891,3892],{},"break使用时机：",[1404,3894,3895,3898,3901],{},[366,3896,3897],{},"出现在switch条件语句中，作用是终止case并跳出switch",[366,3899,3900],{},"出现在循环结构中，作用是跳出当前的循环结构",[366,3902,3903],{},"出现在嵌套循环中，跳出最近的内层循环语句",[363,3905,3906,3909],{"start":48},[366,3907,3908],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[366,3910,3911],{},"goto语句\n语法：goto 标记;",[14,3913,3914],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[18,3916,3918],{"className":401,"code":3917,"language":403,"meta":23,"style":23},"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",[25,3919,3920,3928,3932,3945,3955,3968,3981,3994,4002,4018],{"__ignoreMap":23},[28,3921,3922,3924,3926],{"class":30,"line":31},[28,3923,416],{"class":34},[28,3925,2235],{"class":2225},[28,3927,2238],{"class":38},[28,3929,3930],{"class":30,"line":48},[28,3931,1811],{"class":38},[28,3933,3934,3936,3938,3941,3943],{"class":30,"line":84},[28,3935,1816],{"class":38},[28,3937,1441],{"class":34},[28,3939,3940],{"class":127},"\"1\"",[28,3942,1441],{"class":34},[28,3944,1463],{"class":38},[28,3946,3947,3950,3953],{"class":30,"line":91},[28,3948,3949],{"class":34},"    goto",[28,3951,3952],{"class":2225}," FLAG",[28,3954,1558],{"class":38},[28,3956,3957,3959,3961,3964,3966],{"class":30,"line":97},[28,3958,1816],{"class":38},[28,3960,1441],{"class":34},[28,3962,3963],{"class":127},"\"2\"",[28,3965,1441],{"class":34},[28,3967,1463],{"class":38},[28,3969,3970,3972,3974,3977,3979],{"class":30,"line":103},[28,3971,1816],{"class":38},[28,3973,1441],{"class":34},[28,3975,3976],{"class":127},"\"3\"",[28,3978,1441],{"class":34},[28,3980,1463],{"class":38},[28,3982,3983,3985,3987,3990,3992],{"class":30,"line":109},[28,3984,1816],{"class":38},[28,3986,1441],{"class":34},[28,3988,3989],{"class":127},"\"4\"",[28,3991,1441],{"class":34},[28,3993,1463],{"class":38},[28,3995,3996,3999],{"class":30,"line":118},[28,3997,3998],{"class":2225},"    FLAG",[28,4000,4001],{"class":38},":\n",[28,4003,4004,4006,4008,4011,4013,4015],{"class":30,"line":124},[28,4005,1816],{"class":38},[28,4007,1441],{"class":34},[28,4009,4010],{"class":127},"\"5\"",[28,4012,1441],{"class":34},[28,4014,1506],{"class":38},[28,4016,4017],{"class":87},"\u002F\u002F跳过了2,3,4,直接到5\n",[28,4019,4020],{"class":30,"line":131},[28,4021,1830],{"class":38},[351,4023,4025],{"id":4024},"_17数组","1.7数组",[380,4027,4029],{"id":4028},"_171一维数组","1.7.1一维数组",[363,4031,4032],{},[366,4033,4034],{},"一维数组定义方式",[543,4036,4037,4047],{},[546,4038,4039],{},[549,4040,4041,4044],{},[552,4042,4043],{},"方式",[552,4045,4046],{},"注意事项",[590,4048,4049,4063,4073],{},[549,4050,4051,4057],{},[595,4052,4053,4054,465],{},"数据类型 数组名",[28,4055,4056],{},"数组长度",[595,4058,4059,4060,4062],{},"这种方式是先定义再arr",[28,4061,840],{},"赋值",[549,4064,4065,4070],{},[595,4066,4053,4067,4069],{},[28,4068,4056],{},"={值1,值2....};",[595,4071,4072],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[549,4074,4075,4079],{},[595,4076,4053,4077,4069],{},[28,4078],{},[595,4080,4081,4082,4084],{},"int arr",[28,4083],{},";这是不正确的，按照这样的方式定义必须有初始长度",[363,4086,4087],{"start":48},[366,4088,4089],{},"一维数组数组名\n用途：",[1404,4091,4092],{},[366,4093,4094],{},"1.可以统计整个数组在内存中的长度：",[18,4096,4098],{"className":401,"code":4097,"language":403,"meta":23,"style":23},"sizeof(arr);\nsizeof(arr[0]);\n",[25,4099,4100,4107],{"__ignoreMap":23},[28,4101,4102,4104],{"class":30,"line":31},[28,4103,410],{"class":34},[28,4105,4106],{"class":38},"(arr);\n",[28,4108,4109,4111,4114,4116],{"class":30,"line":48},[28,4110,410],{"class":34},[28,4112,4113],{"class":38},"(arr[",[28,4115,244],{"class":60},[28,4117,4118],{"class":38},"]);\n",[1404,4120,4121],{},[366,4122,4123],{},"2.可以获取数组在内存中的首地址:",[18,4125,4127],{"className":401,"code":4126,"language":403,"meta":23,"style":23},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[25,4128,4129,4134,4147,4152],{"__ignoreMap":23},[28,4130,4131],{"class":30,"line":31},[28,4132,4133],{"class":87},"\u002F\u002F查看16进制的首地址\n",[28,4135,4136,4138,4140,4143,4145],{"class":30,"line":48},[28,4137,1634],{"class":38},[28,4139,1441],{"class":34},[28,4141,4142],{"class":38},"arr",[28,4144,1441],{"class":34},[28,4146,1463],{"class":38},[28,4148,4149],{"class":30,"line":84},[28,4150,4151],{"class":87},"\u002F\u002F看10进制数\n",[28,4153,4154,4156,4158,4160,4162,4164,4166,4169,4171,4173,4175],{"class":30,"line":91},[28,4155,1634],{"class":38},[28,4157,1441],{"class":34},[28,4159,413],{"class":38},[28,4161,416],{"class":34},[28,4163,828],{"class":38},[28,4165,753],{"class":34},[28,4167,4168],{"class":38},"arr[",[28,4170,244],{"class":60},[28,4172,1337],{"class":38},[28,4174,1441],{"class":34},[28,4176,1463],{"class":38},[14,4178,4179],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1404,4181,4182],{},[366,4183,4184],{},"1️⃣五只小猪称体重",[18,4186,4188],{"className":401,"code":4187,"language":403,"meta":23,"style":23},"#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",[25,4189,4190,4196,4206,4214,4218,4258,4271,4297,4301,4313,4317,4327,4331,4335,4348,4358],{"__ignoreMap":23},[28,4191,4192,4194],{"class":30,"line":31},[28,4193,2211],{"class":34},[28,4195,2214],{"class":127},[28,4197,4198,4200,4202,4204],{"class":30,"line":48},[28,4199,2219],{"class":34},[28,4201,2222],{"class":34},[28,4203,2226],{"class":2225},[28,4205,1558],{"class":38},[28,4207,4208,4210,4212],{"class":30,"line":84},[28,4209,416],{"class":34},[28,4211,2235],{"class":2225},[28,4213,2238],{"class":38},[28,4215,4216],{"class":30,"line":91},[28,4217,1811],{"class":38},[28,4219,4220,4222,4225,4227,4229,4231,4233,4236,4238,4241,4243,4245,4247,4250,4252,4255],{"class":30,"line":97},[28,4221,2247],{"class":34},[28,4223,4224],{"class":38}," arr[",[28,4226,721],{"class":60},[28,4228,1337],{"class":38},[28,4230,54],{"class":34},[28,4232,1293],{"class":38},[28,4234,4235],{"class":60},"300",[28,4237,64],{"class":38},[28,4239,4240],{"class":60},"350",[28,4242,64],{"class":38},[28,4244,1984],{"class":60},[28,4246,64],{"class":38},[28,4248,4249],{"class":60},"400",[28,4251,64],{"class":38},[28,4253,4254],{"class":60},"250",[28,4256,4257],{"class":38},"};\n",[28,4259,4260,4262,4265,4267,4269],{"class":30,"line":103},[28,4261,2247],{"class":34},[28,4263,4264],{"class":38}," tmp",[28,4266,54],{"class":34},[28,4268,244],{"class":60},[28,4270,1558],{"class":38},[28,4272,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295],{"class":30,"line":109},[28,4274,3463],{"class":34},[28,4276,1920],{"class":38},[28,4278,416],{"class":34},[28,4280,3294],{"class":38},[28,4282,54],{"class":34},[28,4284,244],{"class":60},[28,4286,3301],{"class":38},[28,4288,1307],{"class":34},[28,4290,721],{"class":60},[28,4292,3301],{"class":38},[28,4294,2554],{"class":34},[28,4296,81],{"class":38},[28,4298,4299],{"class":30,"line":118},[28,4300,2292],{"class":38},[28,4302,4303,4305,4308,4310],{"class":30,"line":124},[28,4304,2759],{"class":34},[28,4306,4307],{"class":38},"(tmp",[28,4309,1307],{"class":34},[28,4311,4312],{"class":38},"arr[i])\n",[28,4314,4315],{"class":30,"line":131},[28,4316,2772],{"class":38},[28,4318,4319,4322,4324],{"class":30,"line":137},[28,4320,4321],{"class":38},"            tmp",[28,4323,54],{"class":34},[28,4325,4326],{"class":38},"arr[i];\n",[28,4328,4329],{"class":30,"line":143},[28,4330,2791],{"class":38},[28,4332,4333],{"class":30,"line":149},[28,4334,2449],{"class":38},[28,4336,4337,4339,4341,4344,4346],{"class":30,"line":1890},[28,4338,1816],{"class":38},[28,4340,1441],{"class":34},[28,4342,4343],{"class":38},"tmp",[28,4345,1441],{"class":34},[28,4347,1463],{"class":38},[28,4349,4350,4353,4356],{"class":30,"line":1904},[28,4351,4352],{"class":34},"    return",[28,4354,4355],{"class":60}," 0",[28,4357,1558],{"class":38},[28,4359,4360],{"class":30,"line":1909},[28,4361,1830],{"class":38},[1404,4363,4364],{},[366,4365,4366],{},"2️⃣数组元素逆置",[18,4368,4370],{"className":401,"code":4369,"language":403,"meta":23,"style":23},"\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",[25,4371,4372,4377,4383,4393,4401,4405,4440,4456,4488,4501,4506,4511,4523,4533,4543,4548,4557,4567,4572,4577,4604,4608,4624,4628,4639,4648],{"__ignoreMap":23},[28,4373,4374],{"class":30,"line":31},[28,4375,4376],{"class":87},"\u002F\u002F元素逆置\n",[28,4378,4379,4381],{"class":30,"line":48},[28,4380,2211],{"class":34},[28,4382,2214],{"class":127},[28,4384,4385,4387,4389,4391],{"class":30,"line":84},[28,4386,2219],{"class":34},[28,4388,2222],{"class":34},[28,4390,2226],{"class":2225},[28,4392,1558],{"class":38},[28,4394,4395,4397,4399],{"class":30,"line":91},[28,4396,416],{"class":34},[28,4398,2235],{"class":2225},[28,4400,2238],{"class":38},[28,4402,4403],{"class":30,"line":97},[28,4404,1811],{"class":38},[28,4406,4407,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438],{"class":30,"line":103},[28,4408,4409],{"class":34},"   int",[28,4411,4224],{"class":38},[28,4413,721],{"class":60},[28,4415,1337],{"class":38},[28,4417,54],{"class":34},[28,4419,1293],{"class":38},[28,4421,61],{"class":60},[28,4423,64],{"class":38},[28,4425,211],{"class":60},[28,4427,64],{"class":38},[28,4429,78],{"class":60},[28,4431,64],{"class":38},[28,4433,73],{"class":60},[28,4435,64],{"class":38},[28,4437,721],{"class":60},[28,4439,4257],{"class":38},[28,4441,4442,4444,4447,4449,4451,4453],{"class":30,"line":109},[28,4443,4409],{"class":34},[28,4445,4446],{"class":38}," start",[28,4448,54],{"class":34},[28,4450,244],{"class":60},[28,4452,465],{"class":38},[28,4454,4455],{"class":87},"\u002F\u002F起始下标\n",[28,4457,4458,4460,4463,4466,4469,4472,4474,4476,4479,4481,4483,4485],{"class":30,"line":118},[28,4459,4409],{"class":34},[28,4461,4462],{"class":38}," end",[28,4464,4465],{"class":34},"=sizeof",[28,4467,4468],{"class":38},"(arr)",[28,4470,4471],{"class":34},"\u002Fsizeof",[28,4473,4113],{"class":38},[28,4475,244],{"class":60},[28,4477,4478],{"class":38},"])",[28,4480,930],{"class":34},[28,4482,61],{"class":60},[28,4484,465],{"class":38},[28,4486,4487],{"class":87},"\u002F\u002F结束下标\n",[28,4489,4490,4493,4496,4498],{"class":30,"line":124},[28,4491,4492],{"class":34},"   while",[28,4494,4495],{"class":38}," (start",[28,4497,1307],{"class":34},[28,4499,4500],{"class":38},"end)\n",[28,4502,4503],{"class":30,"line":131},[28,4504,4505],{"class":38},"   {\n",[28,4507,4508],{"class":30,"line":137},[28,4509,4510],{"class":87},"    \u002F\u002F实现元素互换代码\n",[28,4512,4513,4515,4518,4520],{"class":30,"line":143},[28,4514,2247],{"class":34},[28,4516,4517],{"class":38}," temp",[28,4519,54],{"class":34},[28,4521,4522],{"class":38},"arr[start];\n",[28,4524,4525,4528,4530],{"class":30,"line":149},[28,4526,4527],{"class":38},"    arr[start]",[28,4529,54],{"class":34},[28,4531,4532],{"class":38},"arr[end];\n",[28,4534,4535,4538,4540],{"class":30,"line":1890},[28,4536,4537],{"class":38},"    arr[end]",[28,4539,54],{"class":34},[28,4541,4542],{"class":38},"temp;\n",[28,4544,4545],{"class":30,"line":1904},[28,4546,4547],{"class":87},"    \u002F\u002F下标更新\n",[28,4549,4550,4553,4555],{"class":30,"line":1909},[28,4551,4552],{"class":38},"    start",[28,4554,2554],{"class":34},[28,4556,1558],{"class":38},[28,4558,4559,4562,4565],{"class":30,"line":1915},[28,4560,4561],{"class":38},"    end",[28,4563,4564],{"class":34},"--",[28,4566,1558],{"class":38},[28,4568,4569],{"class":30,"line":1936},[28,4570,4571],{"class":38},"   }\n",[28,4573,4574],{"class":30,"line":1941},[28,4575,4576],{"class":87},"   \u002F\u002F输出逆置后的数组\n",[28,4578,4579,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602],{"class":30,"line":1955},[28,4580,4581],{"class":34},"   for",[28,4583,1920],{"class":38},[28,4585,416],{"class":34},[28,4587,3294],{"class":38},[28,4589,54],{"class":34},[28,4591,244],{"class":60},[28,4593,3301],{"class":38},[28,4595,1307],{"class":34},[28,4597,721],{"class":60},[28,4599,3301],{"class":38},[28,4601,2554],{"class":34},[28,4603,81],{"class":38},[28,4605,4606],{"class":30,"line":1960},[28,4607,4505],{"class":38},[28,4609,4610,4612,4614,4617,4619,4622],{"class":30,"line":1989},[28,4611,1816],{"class":38},[28,4613,1441],{"class":34},[28,4615,4616],{"class":38},"arr[i]",[28,4618,1441],{"class":34},[28,4620,4621],{"class":127},"\" \"",[28,4623,1558],{"class":38},[28,4625,4626],{"class":30,"line":1994},[28,4627,4571],{"class":38},[28,4629,4630,4633,4635,4637],{"class":30,"line":2011},[28,4631,4632],{"class":2225},"   system",[28,4634,413],{"class":38},[28,4636,2570],{"class":127},[28,4638,2981],{"class":38},[28,4640,4641,4644,4646],{"class":30,"line":2016},[28,4642,4643],{"class":34},"   return",[28,4645,4355],{"class":60},[28,4647,1558],{"class":38},[28,4649,4650],{"class":30,"line":2021},[28,4651,1830],{"class":38},[1404,4653,4654],{},[366,4655,4656],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[18,4658,4660],{"className":401,"code":4659,"language":403,"meta":23,"style":23},"\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",[25,4661,4662,4667,4673,4683,4691,4695,4747,4760,4786,4790,4804,4808,4813,4818,4848,4852,4857,4891,4895,4900,4920,4925,4937,4953,4968,4973,4977,4981,4994,5020,5024,5038,5042,5050],{"__ignoreMap":23},[28,4663,4664],{"class":30,"line":31},[28,4665,4666],{"class":87},"\u002F\u002F冒泡排序,升序\n",[28,4668,4669,4671],{"class":30,"line":48},[28,4670,2211],{"class":34},[28,4672,2214],{"class":127},[28,4674,4675,4677,4679,4681],{"class":30,"line":84},[28,4676,2219],{"class":34},[28,4678,2222],{"class":34},[28,4680,2226],{"class":2225},[28,4682,1558],{"class":38},[28,4684,4685,4687,4689],{"class":30,"line":91},[28,4686,416],{"class":34},[28,4688,2235],{"class":2225},[28,4690,2238],{"class":38},[28,4692,4693],{"class":30,"line":97},[28,4694,1811],{"class":38},[28,4696,4697,4699,4701,4703,4706,4708,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745],{"class":30,"line":103},[28,4698,2247],{"class":34},[28,4700,4224],{"class":38},[28,4702,819],{"class":60},[28,4704,4705],{"class":38},"] ",[28,4707,54],{"class":34},[28,4709,4710],{"class":38}," {",[28,4712,73],{"class":60},[28,4714,64],{"class":38},[28,4716,211],{"class":60},[28,4718,64],{"class":38},[28,4720,794],{"class":60},[28,4722,64],{"class":38},[28,4724,244],{"class":60},[28,4726,64],{"class":38},[28,4728,721],{"class":60},[28,4730,64],{"class":38},[28,4732,769],{"class":60},[28,4734,64],{"class":38},[28,4736,61],{"class":60},[28,4738,64],{"class":38},[28,4740,78],{"class":60},[28,4742,64],{"class":38},[28,4744,819],{"class":60},[28,4746,4257],{"class":38},[28,4748,4749,4751,4753,4756,4758],{"class":30,"line":109},[28,4750,1816],{"class":38},[28,4752,1441],{"class":34},[28,4754,4755],{"class":127},"\"排序前：\"",[28,4757,1441],{"class":34},[28,4759,1463],{"class":38},[28,4761,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784],{"class":30,"line":118},[28,4763,3463],{"class":34},[28,4765,1920],{"class":38},[28,4767,416],{"class":34},[28,4769,3294],{"class":38},[28,4771,54],{"class":34},[28,4773,244],{"class":60},[28,4775,3301],{"class":38},[28,4777,1307],{"class":34},[28,4779,819],{"class":60},[28,4781,3301],{"class":38},[28,4783,2554],{"class":34},[28,4785,81],{"class":38},[28,4787,4788],{"class":30,"line":124},[28,4789,2292],{"class":38},[28,4791,4792,4794,4796,4798,4800,4802],{"class":30,"line":131},[28,4793,3713],{"class":38},[28,4795,1441],{"class":34},[28,4797,4616],{"class":38},[28,4799,1441],{"class":34},[28,4801,4621],{"class":127},[28,4803,1558],{"class":38},[28,4805,4806],{"class":30,"line":137},[28,4807,2449],{"class":38},[28,4809,4810],{"class":30,"line":143},[28,4811,4812],{"class":87},"    \u002F\u002F开始冒泡排序\n",[28,4814,4815],{"class":30,"line":149},[28,4816,4817],{"class":87},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[28,4819,4820,4822,4824,4826,4828,4830,4832,4834,4836,4838,4840,4842,4844,4846],{"class":30,"line":1890},[28,4821,3463],{"class":34},[28,4823,1920],{"class":38},[28,4825,416],{"class":34},[28,4827,3294],{"class":38},[28,4829,54],{"class":34},[28,4831,244],{"class":60},[28,4833,3301],{"class":38},[28,4835,1307],{"class":34},[28,4837,819],{"class":60},[28,4839,930],{"class":34},[28,4841,61],{"class":60},[28,4843,3301],{"class":38},[28,4845,2554],{"class":34},[28,4847,81],{"class":38},[28,4849,4850],{"class":30,"line":1904},[28,4851,2292],{"class":38},[28,4853,4854],{"class":30,"line":1909},[28,4855,4856],{"class":87},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[28,4858,4859,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879,4881,4883,4885,4887,4889],{"class":30,"line":1915},[28,4860,3665],{"class":34},[28,4862,1920],{"class":38},[28,4864,416],{"class":34},[28,4866,3672],{"class":38},[28,4868,54],{"class":34},[28,4870,244],{"class":60},[28,4872,3679],{"class":38},[28,4874,1307],{"class":34},[28,4876,819],{"class":60},[28,4878,930],{"class":34},[28,4880,840],{"class":38},[28,4882,930],{"class":34},[28,4884,61],{"class":60},[28,4886,3679],{"class":38},[28,4888,2554],{"class":34},[28,4890,81],{"class":38},[28,4892,4893],{"class":30,"line":1936},[28,4894,2772],{"class":38},[28,4896,4897],{"class":30,"line":1941},[28,4898,4899],{"class":87},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[28,4901,4902,4905,4908,4910,4913,4915,4917],{"class":30,"line":1955},[28,4903,4904],{"class":34},"            if",[28,4906,4907],{"class":38},"(arr[j]",[28,4909,1357],{"class":34},[28,4911,4912],{"class":38},"arr[j",[28,4914,880],{"class":34},[28,4916,61],{"class":60},[28,4918,4919],{"class":38},"])\n",[28,4921,4922],{"class":30,"line":1960},[28,4923,4924],{"class":38},"            {\n",[28,4926,4927,4930,4932,4934],{"class":30,"line":1989},[28,4928,4929],{"class":34},"                int",[28,4931,4517],{"class":38},[28,4933,54],{"class":34},[28,4935,4936],{"class":38},"arr[j];\n",[28,4938,4939,4942,4944,4946,4948,4950],{"class":30,"line":1994},[28,4940,4941],{"class":38},"                arr[j]",[28,4943,54],{"class":34},[28,4945,4912],{"class":38},[28,4947,880],{"class":34},[28,4949,61],{"class":60},[28,4951,4952],{"class":38},"];\n",[28,4954,4955,4958,4960,4962,4964,4966],{"class":30,"line":2011},[28,4956,4957],{"class":38},"                arr[j",[28,4959,880],{"class":34},[28,4961,61],{"class":60},[28,4963,1337],{"class":38},[28,4965,54],{"class":34},[28,4967,4542],{"class":38},[28,4969,4970],{"class":30,"line":2016},[28,4971,4972],{"class":38},"            }\n",[28,4974,4975],{"class":30,"line":2021},[28,4976,2791],{"class":38},[28,4978,4979],{"class":30,"line":2026},[28,4980,2449],{"class":38},[28,4982,4983,4985,4987,4990,4992],{"class":30,"line":2040},[28,4984,1816],{"class":38},[28,4986,1441],{"class":34},[28,4988,4989],{"class":127},"\"排序后：\"",[28,4991,1441],{"class":34},[28,4993,1463],{"class":38},[28,4995,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018],{"class":30,"line":2045},[28,4997,3463],{"class":34},[28,4999,1920],{"class":38},[28,5001,416],{"class":34},[28,5003,3294],{"class":38},[28,5005,54],{"class":34},[28,5007,244],{"class":60},[28,5009,3301],{"class":38},[28,5011,1307],{"class":34},[28,5013,819],{"class":60},[28,5015,3301],{"class":38},[28,5017,2554],{"class":34},[28,5019,81],{"class":38},[28,5021,5022],{"class":30,"line":2839},[28,5023,2292],{"class":38},[28,5025,5026,5028,5030,5032,5034,5036],{"class":30,"line":2853},[28,5027,3713],{"class":38},[28,5029,1441],{"class":34},[28,5031,4616],{"class":38},[28,5033,1441],{"class":34},[28,5035,4621],{"class":127},[28,5037,1558],{"class":38},[28,5039,5040],{"class":30,"line":2861},[28,5041,2449],{"class":38},[28,5043,5044,5046,5048],{"class":30,"line":2866},[28,5045,4352],{"class":34},[28,5047,4355],{"class":60},[28,5049,1558],{"class":38},[28,5051,5052],{"class":30,"line":2872},[28,5053,1830],{"class":38},[380,5055,5057],{"id":5056},"_172二维数组","1.7.2二维数组",[363,5059,5060],{},[366,5061,5062],{},"二维数组的四种定义方式",[543,5064,5065,5074],{},[546,5066,5067],{},[549,5068,5069,5072],{},[552,5070,5071],{},"序号",[552,5073,4043],{},[590,5075,5076,5086,5095,5104,5113],{},[549,5077,5078,5080],{},[595,5079,61],{},[595,5081,5082,5083,465],{},"数据类型 数组名[行数]",[28,5084,5085],{},"列数",[549,5087,5088,5090],{},[595,5089,211],{},[595,5091,5082,5092,5094],{},[28,5093,5085],{},"={ {数据1,数据2}，{数据3，数据4}... }",[549,5096,5097,5099],{},[595,5098,78],{},[595,5100,5082,5101,5103],{},[28,5102,5085],{},"={数据1,数据2,数据3...}",[549,5105,5106,5108],{},[595,5107,73],{},[595,5109,5110,5111,5103],{},"数据类型 数组名[]",[28,5112,5085],{},[549,5114,5115,5118],{},[595,5116,5117],{},"注意：不能只省略列数",[595,5119],{},[363,5121,5122],{"start":48},[366,5123,5124],{},"二维数组数组名",[1404,5126,5127,5130],{},[366,5128,5129],{},"1.查看二维数组所占内存空间",[366,5131,5132],{},"2.获取二维数组首地址",[14,5134,5135],{},"已知二维数组，求二维数组的行数与列数",[18,5137,5139],{"className":401,"code":5138,"language":403,"meta":23,"style":23},"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",[25,5140,5141,5149,5153,5171,5175,5193,5209,5214,5239,5272],{"__ignoreMap":23},[28,5142,5143,5145,5147],{"class":30,"line":31},[28,5144,416],{"class":34},[28,5146,2235],{"class":2225},[28,5148,2238],{"class":38},[28,5150,5151],{"class":30,"line":48},[28,5152,1811],{"class":38},[28,5154,5155,5157,5159,5161,5164,5166,5168],{"class":30,"line":84},[28,5156,2247],{"class":34},[28,5158,4224],{"class":38},[28,5160,211],{"class":60},[28,5162,5163],{"class":38},"][",[28,5165,78],{"class":60},[28,5167,1337],{"class":38},[28,5169,5170],{"class":34},"=\n",[28,5172,5173],{"class":30,"line":91},[28,5174,2292],{"class":38},[28,5176,5177,5180,5182,5184,5186,5188,5190],{"class":30,"line":97},[28,5178,5179],{"class":38},"        {",[28,5181,61],{"class":60},[28,5183,64],{"class":38},[28,5185,211],{"class":60},[28,5187,64],{"class":38},[28,5189,78],{"class":60},[28,5191,5192],{"class":38},"},\n",[28,5194,5195,5197,5199,5201,5203,5205,5207],{"class":30,"line":103},[28,5196,5179],{"class":38},[28,5198,73],{"class":60},[28,5200,64],{"class":38},[28,5202,721],{"class":60},[28,5204,64],{"class":38},[28,5206,206],{"class":60},[28,5208,1830],{"class":38},[28,5210,5211],{"class":30,"line":109},[28,5212,5213],{"class":38},"    };\n",[28,5215,5216,5218,5220,5223,5225,5227,5229,5231,5233,5235,5237],{"class":30,"line":118},[28,5217,1816],{"class":38},[28,5219,1441],{"class":34},[28,5221,5222],{"class":127},"\"二维数组的行数\"",[28,5224,1637],{"class":34},[28,5226,4468],{"class":38},[28,5228,4471],{"class":34},[28,5230,4113],{"class":38},[28,5232,244],{"class":60},[28,5234,4478],{"class":38},[28,5236,1441],{"class":34},[28,5238,1463],{"class":38},[28,5240,5241,5243,5245,5248,5250,5252,5254,5256,5258,5260,5262,5264,5266,5268,5270],{"class":30,"line":124},[28,5242,1816],{"class":38},[28,5244,1441],{"class":34},[28,5246,5247],{"class":127},"\"二维数组的列数\"",[28,5249,1637],{"class":34},[28,5251,4113],{"class":38},[28,5253,244],{"class":60},[28,5255,4478],{"class":38},[28,5257,4471],{"class":34},[28,5259,4113],{"class":38},[28,5261,244],{"class":60},[28,5263,5163],{"class":38},[28,5265,244],{"class":60},[28,5267,4478],{"class":38},[28,5269,1441],{"class":34},[28,5271,1463],{"class":38},[28,5273,5274],{"class":30,"line":131},[28,5275,1830],{"class":38},[14,5277,5278],{},"查看二维数组首地址",[18,5280,5282],{"className":401,"code":5281,"language":403,"meta":23,"style":23},"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",[25,5283,5284,5301,5327,5352],{"__ignoreMap":23},[28,5285,5286,5288,5290,5293,5295,5297,5299],{"class":30,"line":31},[28,5287,1634],{"class":38},[28,5289,1441],{"class":34},[28,5291,5292],{"class":127},"\"二维数组首地址：\"",[28,5294,1441],{"class":34},[28,5296,4142],{"class":38},[28,5298,1441],{"class":34},[28,5300,1463],{"class":38},[28,5302,5303,5305,5307,5310,5312,5314,5316,5319,5321,5323,5325],{"class":30,"line":48},[28,5304,1634],{"class":38},[28,5306,1441],{"class":34},[28,5308,5309],{"class":127},"\"二维数组第一行的首地址：\"",[28,5311,1441],{"class":34},[28,5313,413],{"class":38},[28,5315,416],{"class":34},[28,5317,5318],{"class":38},")arr[",[28,5320,244],{"class":60},[28,5322,1337],{"class":38},[28,5324,1441],{"class":34},[28,5326,1463],{"class":38},[28,5328,5329,5331,5333,5336,5338,5340,5342,5344,5346,5348,5350],{"class":30,"line":84},[28,5330,1634],{"class":38},[28,5332,1441],{"class":34},[28,5334,5335],{"class":127},"\"二维数组第二行的首地址：\"",[28,5337,1441],{"class":34},[28,5339,413],{"class":38},[28,5341,416],{"class":34},[28,5343,5318],{"class":38},[28,5345,61],{"class":60},[28,5347,1337],{"class":38},[28,5349,1441],{"class":34},[28,5351,1463],{"class":38},[28,5353,5354,5356,5358,5361,5363,5365,5367,5369,5371,5373,5375,5377,5379,5381,5383,5385],{"class":30,"line":91},[28,5355,1634],{"class":38},[28,5357,1441],{"class":34},[28,5359,5360],{"class":127},"\"二维数组第一个元素的首地址:\"",[28,5362,1441],{"class":34},[28,5364,413],{"class":38},[28,5366,416],{"class":34},[28,5368,828],{"class":38},[28,5370,753],{"class":34},[28,5372,4168],{"class":38},[28,5374,244],{"class":60},[28,5376,5163],{"class":38},[28,5378,244],{"class":60},[28,5380,1337],{"class":38},[28,5382,1441],{"class":34},[28,5384,1506],{"class":38},[28,5386,5387],{"class":87},"\u002F\u002F对于数，要加取址符\n",[328,5389,5390],{},"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":23,"searchDepth":48,"depth":48,"links":5392},[5393,5394,5395,5403,5404,5410,5415],{"id":353,"depth":48,"text":354},{"id":360,"depth":48,"text":361},{"id":377,"depth":48,"text":378,"children":5396},[5397,5398,5399,5400,5401,5402],{"id":382,"depth":84,"text":383},{"id":428,"depth":84,"text":429},{"id":492,"depth":84,"text":493},{"id":1422,"depth":84,"text":1423},{"id":1512,"depth":84,"text":1513},{"id":1608,"depth":84,"text":1609},{"id":1650,"depth":48,"text":1651},{"id":1718,"depth":48,"text":1719,"children":5405},[5406,5407,5408,5409],{"id":1722,"depth":84,"text":1723},{"id":1744,"depth":84,"text":1745},{"id":1753,"depth":84,"text":1754},{"id":1762,"depth":84,"text":1763},{"id":1771,"depth":48,"text":1772,"children":5411},[5412,5413,5414],{"id":1775,"depth":84,"text":1776},{"id":2467,"depth":84,"text":2468},{"id":3883,"depth":84,"text":3884},{"id":4024,"depth":48,"text":4025,"children":5416},[5417,5418],{"id":4028,"depth":84,"text":4029},{"id":5056,"depth":84,"text":5057},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":344,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5425,"title":5426,"body":5427,"description":23,"extension":334,"meta":6527,"navigation":336,"path":6528,"seo":6529,"stem":6530,"__hash__":6531},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5428,"toc":6519},[5429,5432,5436,5444,5452,5455,5521,5525,5528,5604,5608,5611,5614,5617,5830,5834,5839,5903,5908,5975,5980,6071,6074,6179,6183,6186,6192,6336,6340,6343,6357,6360,6405,6408,6516],[10,5430,5426],{"id":5431},"_2函数",[351,5433,5435],{"id":5434},"_21函数概述","2.1函数概述",[363,5437,5438,5441],{},[366,5439,5440],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[366,5442,5443],{},"语法：",[18,5445,5450],{"className":5446,"code":5448,"language":5449,"meta":23},[5447],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[25,5451,5448],{"__ignoreMap":23},[14,5453,5454],{},"小案例",[18,5456,5458],{"className":401,"code":5457,"language":403,"meta":23,"style":23},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[25,5459,5460,5465,5489,5493,5510,5517],{"__ignoreMap":23},[28,5461,5462],{"class":30,"line":31},[28,5463,5464],{"class":87},"\u002F\u002Fnum1,num2形参\n",[28,5466,5467,5469,5472,5474,5476,5480,5482,5484,5487],{"class":30,"line":48},[28,5468,416],{"class":34},[28,5470,5471],{"class":2225}," add",[28,5473,413],{"class":38},[28,5475,416],{"class":34},[28,5477,5479],{"class":5478},"s4XuR"," num1",[28,5481,64],{"class":38},[28,5483,416],{"class":34},[28,5485,5486],{"class":5478}," num2",[28,5488,81],{"class":38},[28,5490,5491],{"class":30,"line":84},[28,5492,1811],{"class":38},[28,5494,5495,5497,5500,5502,5505,5507],{"class":30,"line":91},[28,5496,2247],{"class":34},[28,5498,5499],{"class":38}," sum",[28,5501,54],{"class":34},[28,5503,5504],{"class":38},"num1",[28,5506,880],{"class":34},[28,5508,5509],{"class":38},"num2;\n",[28,5511,5512,5514],{"class":30,"line":97},[28,5513,4352],{"class":34},[28,5515,5516],{"class":38}," sum;\n",[28,5518,5519],{"class":30,"line":103},[28,5520,1830],{"class":38},[351,5522,5524],{"id":5523},"_22函数调用","2.2函数调用",[14,5526,5527],{},"调用刚刚写的求和函数",[18,5529,5531],{"className":401,"code":5530,"language":403,"meta":23,"style":23},"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",[25,5532,5533,5541,5545,5550,5562,5574,5583,5588,5600],{"__ignoreMap":23},[28,5534,5535,5537,5539],{"class":30,"line":31},[28,5536,416],{"class":34},[28,5538,2235],{"class":2225},[28,5540,2238],{"class":38},[28,5542,5543],{"class":30,"line":48},[28,5544,1811],{"class":38},[28,5546,5547],{"class":30,"line":84},[28,5548,5549],{"class":87},"    \u002F\u002Fa,b实参\n",[28,5551,5552,5554,5556,5558,5560],{"class":30,"line":91},[28,5553,2247],{"class":34},[28,5555,1663],{"class":38},[28,5557,54],{"class":34},[28,5559,244],{"class":60},[28,5561,1558],{"class":38},[28,5563,5564,5566,5568,5570,5572],{"class":30,"line":97},[28,5565,2247],{"class":34},[28,5567,3095],{"class":38},[28,5569,54],{"class":34},[28,5571,244],{"class":60},[28,5573,1558],{"class":38},[28,5575,5576,5578,5580],{"class":30,"line":103},[28,5577,2274],{"class":38},[28,5579,1694],{"class":34},[28,5581,5582],{"class":38},"a,b;\n",[28,5584,5585],{"class":30,"line":109},[28,5586,5587],{"class":87},"    \u002F\u002F调用函数时，实参值传给了形参\n",[28,5589,5590,5592,5594,5597],{"class":30,"line":118},[28,5591,1816],{"class":38},[28,5593,1441],{"class":34},[28,5595,5596],{"class":2225},"add",[28,5598,5599],{"class":38},"(a,b);\n",[28,5601,5602],{"class":30,"line":124},[28,5603,1830],{"class":38},[351,5605,5607],{"id":5606},"_23值传递","2.3值传递",[14,5609,5610],{},"值传递就是函数调用时实参将数值传给形参",[14,5612,5613],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5615,5616],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[18,5618,5620],{"className":401,"code":5619,"language":403,"meta":23,"style":23},"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",[25,5621,5622,5644,5648,5661,5678,5696,5707,5716,5725,5738,5754,5770,5779,5783,5791,5795,5807,5819,5826],{"__ignoreMap":23},[28,5623,5624,5627,5630,5632,5634,5636,5638,5640,5642],{"class":30,"line":31},[28,5625,5626],{"class":34},"void",[28,5628,5629],{"class":2225}," swap",[28,5631,413],{"class":38},[28,5633,416],{"class":34},[28,5635,5479],{"class":5478},[28,5637,64],{"class":38},[28,5639,416],{"class":34},[28,5641,5486],{"class":5478},[28,5643,81],{"class":38},[28,5645,5646],{"class":30,"line":48},[28,5647,1811],{"class":38},[28,5649,5650,5652,5654,5657,5659],{"class":30,"line":84},[28,5651,1816],{"class":38},[28,5653,1441],{"class":34},[28,5655,5656],{"class":127},"\"交换前：\"",[28,5658,1441],{"class":34},[28,5660,1463],{"class":38},[28,5662,5663,5665,5667,5670,5672,5674,5676],{"class":30,"line":91},[28,5664,1816],{"class":38},[28,5666,1441],{"class":34},[28,5668,5669],{"class":127},"\"num1=\"",[28,5671,1441],{"class":34},[28,5673,5504],{"class":38},[28,5675,1441],{"class":34},[28,5677,1463],{"class":38},[28,5679,5680,5682,5684,5687,5689,5692,5694],{"class":30,"line":97},[28,5681,1816],{"class":38},[28,5683,1441],{"class":34},[28,5685,5686],{"class":127},"\"num2=\"",[28,5688,1441],{"class":34},[28,5690,5691],{"class":38},"num2",[28,5693,1441],{"class":34},[28,5695,1463],{"class":38},[28,5697,5698,5700,5702,5704],{"class":30,"line":103},[28,5699,2247],{"class":34},[28,5701,4517],{"class":38},[28,5703,54],{"class":34},[28,5705,5706],{"class":38},"num1;\n",[28,5708,5709,5712,5714],{"class":30,"line":109},[28,5710,5711],{"class":38},"    num1",[28,5713,54],{"class":34},[28,5715,5509],{"class":38},[28,5717,5718,5721,5723],{"class":30,"line":118},[28,5719,5720],{"class":38},"    num2",[28,5722,54],{"class":34},[28,5724,4542],{"class":38},[28,5726,5727,5729,5731,5734,5736],{"class":30,"line":124},[28,5728,1816],{"class":38},[28,5730,1441],{"class":34},[28,5732,5733],{"class":127},"\"交换后：\"",[28,5735,1441],{"class":34},[28,5737,1463],{"class":38},[28,5739,5740,5742,5744,5746,5748,5750,5752],{"class":30,"line":131},[28,5741,1816],{"class":38},[28,5743,1441],{"class":34},[28,5745,5669],{"class":127},[28,5747,1441],{"class":34},[28,5749,5504],{"class":38},[28,5751,1441],{"class":34},[28,5753,1463],{"class":38},[28,5755,5756,5758,5760,5762,5764,5766,5768],{"class":30,"line":137},[28,5757,1816],{"class":38},[28,5759,1441],{"class":34},[28,5761,5686],{"class":127},[28,5763,1441],{"class":34},[28,5765,5691],{"class":38},[28,5767,1441],{"class":34},[28,5769,1463],{"class":38},[28,5771,5772,5774,5776],{"class":30,"line":143},[28,5773,4352],{"class":34},[28,5775,465],{"class":38},[28,5777,5778],{"class":87},"\u002F\u002F或者不写\n",[28,5780,5781],{"class":30,"line":149},[28,5782,1830],{"class":38},[28,5784,5785,5787,5789],{"class":30,"line":1890},[28,5786,416],{"class":34},[28,5788,2235],{"class":2225},[28,5790,2238],{"class":38},[28,5792,5793],{"class":30,"line":1904},[28,5794,1811],{"class":38},[28,5796,5797,5799,5801,5803,5805],{"class":30,"line":1909},[28,5798,2247],{"class":34},[28,5800,1663],{"class":38},[28,5802,54],{"class":34},[28,5804,845],{"class":60},[28,5806,1558],{"class":38},[28,5808,5809,5811,5813,5815,5817],{"class":30,"line":1915},[28,5810,2247],{"class":34},[28,5812,3095],{"class":38},[28,5814,54],{"class":34},[28,5816,1098],{"class":60},[28,5818,1558],{"class":38},[28,5820,5821,5824],{"class":30,"line":1936},[28,5822,5823],{"class":2225},"    swap",[28,5825,5599],{"class":38},[28,5827,5828],{"class":30,"line":1941},[28,5829,1830],{"class":38},[351,5831,5833],{"id":5832},"_24函数的常见形式","2.4函数的常见形式",[363,5835,5836],{},[366,5837,5838],{},"无参无返",[18,5840,5842],{"className":401,"code":5841,"language":403,"meta":23,"style":23},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[25,5843,5844,5853,5857,5870,5874,5882,5886,5891,5899],{"__ignoreMap":23},[28,5845,5846,5848,5851],{"class":30,"line":31},[28,5847,5626],{"class":34},[28,5849,5850],{"class":2225}," test01",[28,5852,2238],{"class":38},[28,5854,5855],{"class":30,"line":48},[28,5856,1811],{"class":38},[28,5858,5859,5861,5863,5866,5868],{"class":30,"line":84},[28,5860,1816],{"class":38},[28,5862,1441],{"class":34},[28,5864,5865],{"class":127},"\"你好\"",[28,5867,1441],{"class":34},[28,5869,1463],{"class":38},[28,5871,5872],{"class":30,"line":91},[28,5873,1830],{"class":38},[28,5875,5876,5878,5880],{"class":30,"line":97},[28,5877,416],{"class":34},[28,5879,2235],{"class":2225},[28,5881,2238],{"class":38},[28,5883,5884],{"class":30,"line":103},[28,5885,1811],{"class":38},[28,5887,5888],{"class":30,"line":109},[28,5889,5890],{"class":87},"    \u002F\u002F函数调用\n",[28,5892,5893,5896],{"class":30,"line":118},[28,5894,5895],{"class":2225},"    test01",[28,5897,5898],{"class":38},"();\n",[28,5900,5901],{"class":30,"line":124},[28,5902,1830],{"class":38},[363,5904,5905],{"start":48},[366,5906,5907],{},"有参无返",[18,5909,5911],{"className":401,"code":5910,"language":403,"meta":23,"style":23},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[25,5912,5913,5928,5932,5944,5948,5956,5960,5971],{"__ignoreMap":23},[28,5914,5915,5917,5920,5922,5924,5926],{"class":30,"line":31},[28,5916,5626],{"class":34},[28,5918,5919],{"class":2225}," test02",[28,5921,413],{"class":38},[28,5923,416],{"class":34},[28,5925,1663],{"class":5478},[28,5927,81],{"class":38},[28,5929,5930],{"class":30,"line":48},[28,5931,1811],{"class":38},[28,5933,5934,5936,5938,5940,5942],{"class":30,"line":84},[28,5935,1816],{"class":38},[28,5937,1441],{"class":34},[28,5939,5865],{"class":127},[28,5941,1441],{"class":34},[28,5943,1463],{"class":38},[28,5945,5946],{"class":30,"line":91},[28,5947,1830],{"class":38},[28,5949,5950,5952,5954],{"class":30,"line":97},[28,5951,416],{"class":34},[28,5953,2235],{"class":2225},[28,5955,2238],{"class":38},[28,5957,5958],{"class":30,"line":103},[28,5959,1811],{"class":38},[28,5961,5962,5965,5967,5969],{"class":30,"line":109},[28,5963,5964],{"class":2225},"    test02",[28,5966,413],{"class":38},[28,5968,713],{"class":60},[28,5970,2981],{"class":38},[28,5972,5973],{"class":30,"line":118},[28,5974,1830],{"class":38},[363,5976,5977],{"start":84},[366,5978,5979],{},"无参有返",[18,5981,5983],{"className":401,"code":5982,"language":403,"meta":23,"style":23},"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",[25,5984,5985,5994,5998,6010,6019,6023,6031,6035,6048,6067],{"__ignoreMap":23},[28,5986,5987,5989,5992],{"class":30,"line":31},[28,5988,416],{"class":34},[28,5990,5991],{"class":2225}," test03",[28,5993,2238],{"class":38},[28,5995,5996],{"class":30,"line":48},[28,5997,1811],{"class":38},[28,5999,6000,6002,6004,6006,6008],{"class":30,"line":84},[28,6001,1816],{"class":38},[28,6003,1441],{"class":34},[28,6005,5865],{"class":127},[28,6007,1441],{"class":34},[28,6009,1463],{"class":38},[28,6011,6012,6014,6017],{"class":30,"line":91},[28,6013,4352],{"class":34},[28,6015,6016],{"class":60}," 100",[28,6018,1558],{"class":38},[28,6020,6021],{"class":30,"line":97},[28,6022,1830],{"class":38},[28,6024,6025,6027,6029],{"class":30,"line":103},[28,6026,416],{"class":34},[28,6028,2235],{"class":2225},[28,6030,2238],{"class":38},[28,6032,6033],{"class":30,"line":109},[28,6034,1811],{"class":38},[28,6036,6037,6039,6041,6043,6046],{"class":30,"line":118},[28,6038,2247],{"class":34},[28,6040,5479],{"class":38},[28,6042,54],{"class":34},[28,6044,6045],{"class":2225},"test03",[28,6047,5898],{"class":38},[28,6049,6050,6052,6054,6056,6058,6060,6062,6064],{"class":30,"line":124},[28,6051,1816],{"class":38},[28,6053,1441],{"class":34},[28,6055,5669],{"class":127},[28,6057,1441],{"class":34},[28,6059,5504],{"class":38},[28,6061,1441],{"class":34},[28,6063,1506],{"class":38},[28,6065,6066],{"class":87}," \u002F\u002F100\n",[28,6068,6069],{"class":30,"line":131},[28,6070,1830],{"class":38},[14,6072,6073],{},"4.有参有返",[18,6075,6077],{"className":401,"code":6076,"language":403,"meta":23,"style":23},"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",[25,6078,6079,6094,6098,6111,6117,6121,6130,6134,6146,6160,6175],{"__ignoreMap":23},[28,6080,6081,6083,6086,6088,6090,6092],{"class":30,"line":31},[28,6082,416],{"class":34},[28,6084,6085],{"class":2225}," test04",[28,6087,413],{"class":38},[28,6089,416],{"class":34},[28,6091,1663],{"class":5478},[28,6093,81],{"class":38},[28,6095,6096],{"class":30,"line":48},[28,6097,1811],{"class":38},[28,6099,6100,6102,6104,6107,6109],{"class":30,"line":84},[28,6101,1816],{"class":38},[28,6103,1441],{"class":34},[28,6105,6106],{"class":127},"\"hello\"",[28,6108,1441],{"class":34},[28,6110,1463],{"class":38},[28,6112,6113,6115],{"class":30,"line":91},[28,6114,4352],{"class":34},[28,6116,1697],{"class":38},[28,6118,6119],{"class":30,"line":97},[28,6120,1830],{"class":38},[28,6122,6123,6125,6128],{"class":30,"line":103},[28,6124,416],{"class":34},[28,6126,6127],{"class":2225}," mian",[28,6129,2238],{"class":38},[28,6131,6132],{"class":30,"line":109},[28,6133,1811],{"class":38},[28,6135,6136,6138,6140,6142,6144],{"class":30,"line":118},[28,6137,2247],{"class":34},[28,6139,3095],{"class":38},[28,6141,54],{"class":34},[28,6143,61],{"class":60},[28,6145,1558],{"class":38},[28,6147,6148,6150,6152,6154,6157],{"class":30,"line":124},[28,6149,2247],{"class":34},[28,6151,3111],{"class":38},[28,6153,54],{"class":34},[28,6155,6156],{"class":2225},"test04",[28,6158,6159],{"class":38},"(b);\n",[28,6161,6162,6164,6166,6168,6170,6172],{"class":30,"line":131},[28,6163,1816],{"class":38},[28,6165,1441],{"class":34},[28,6167,691],{"class":38},[28,6169,1441],{"class":34},[28,6171,1506],{"class":38},[28,6173,6174],{"class":87}," \u002F\u002F1\n",[28,6176,6177],{"class":30,"line":137},[28,6178,1830],{"class":38},[351,6180,6182],{"id":6181},"_25函数的声明","2.5函数的声明",[14,6184,6185],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6187,6188,6189],{},"函数的",[555,6190,6191],{},"声明可以多次，但是函数的定义只能有一次",[18,6193,6195],{"className":401,"code":6194,"language":403,"meta":23,"style":23},"\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",[25,6196,6197,6202,6207,6232,6241,6245,6257,6269,6285,6289,6309,6313,6332],{"__ignoreMap":23},[28,6198,6199],{"class":30,"line":31},[28,6200,6201],{"class":87},"\u002F\u002F函数声明\n",[28,6203,6204],{"class":30,"line":48},[28,6205,6206],{"class":87},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[28,6208,6209,6211,6214,6216,6218,6220,6222,6224,6226,6229],{"class":30,"line":84},[28,6210,416],{"class":34},[28,6212,6213],{"class":2225}," max",[28,6215,413],{"class":38},[28,6217,416],{"class":34},[28,6219,1663],{"class":5478},[28,6221,64],{"class":38},[28,6223,416],{"class":34},[28,6225,3095],{"class":5478},[28,6227,6228],{"class":38},");",[28,6230,6231],{"class":87},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[28,6233,6234,6236,6238],{"class":30,"line":91},[28,6235,416],{"class":34},[28,6237,2235],{"class":2225},[28,6239,6240],{"class":38},"() \n",[28,6242,6243],{"class":30,"line":97},[28,6244,1811],{"class":38},[28,6246,6247,6249,6251,6253,6255],{"class":30,"line":103},[28,6248,2247],{"class":34},[28,6250,1663],{"class":38},[28,6252,54],{"class":34},[28,6254,845],{"class":60},[28,6256,1558],{"class":38},[28,6258,6259,6261,6263,6265,6267],{"class":30,"line":109},[28,6260,2247],{"class":34},[28,6262,3095],{"class":38},[28,6264,54],{"class":34},[28,6266,1098],{"class":60},[28,6268,1558],{"class":38},[28,6270,6271,6273,6275,6278,6281,6283],{"class":30,"line":118},[28,6272,1816],{"class":38},[28,6274,1441],{"class":34},[28,6276,6277],{"class":2225},"max",[28,6279,6280],{"class":38},"(a,b)",[28,6282,1441],{"class":34},[28,6284,1463],{"class":38},[28,6286,6287],{"class":30,"line":124},[28,6288,1830],{"class":38},[28,6290,6291,6293,6295,6297,6299,6301,6303,6305,6307],{"class":30,"line":131},[28,6292,416],{"class":34},[28,6294,6213],{"class":2225},[28,6296,413],{"class":38},[28,6298,416],{"class":34},[28,6300,1663],{"class":5478},[28,6302,64],{"class":38},[28,6304,416],{"class":34},[28,6306,3095],{"class":5478},[28,6308,81],{"class":38},[28,6310,6311],{"class":30,"line":137},[28,6312,1811],{"class":38},[28,6314,6315,6317,6319,6321,6323,6325,6327,6329],{"class":30,"line":143},[28,6316,4352],{"class":34},[28,6318,1663],{"class":38},[28,6320,1357],{"class":34},[28,6322,666],{"class":38},[28,6324,1383],{"class":34},[28,6326,51],{"class":38},[28,6328,1256],{"class":34},[28,6330,6331],{"class":38},"b;\n",[28,6333,6334],{"class":30,"line":149},[28,6335,1830],{"class":38},[351,6337,6339],{"id":6338},"_26函数的分文件编写","2.6函数的分文件编写",[14,6341,6342],{},"4个步骤：",[1404,6344,6345,6348,6351,6354],{},[366,6346,6347],{},"1.创建后缀名为.h的头文件",[366,6349,6350],{},"2.创建后缀名为.cpp的源文件",[366,6352,6353],{},"3.在头文件中写函数的定义",[366,6355,6356],{},"4.在源文件中写函数的定义\n示例：",[14,6358,6359],{},"头文件：swap.h",[18,6361,6363],{"className":401,"code":6362,"language":403,"meta":23,"style":23},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[25,6364,6365,6371,6381,6385],{"__ignoreMap":23},[28,6366,6367,6369],{"class":30,"line":31},[28,6368,2211],{"class":34},[28,6370,2214],{"class":127},[28,6372,6373,6375,6377,6379],{"class":30,"line":48},[28,6374,2219],{"class":34},[28,6376,2222],{"class":34},[28,6378,2226],{"class":2225},[28,6380,1558],{"class":38},[28,6382,6383],{"class":30,"line":84},[28,6384,6201],{"class":87},[28,6386,6387,6389,6391,6393,6395,6397,6399,6401,6403],{"class":30,"line":91},[28,6388,5626],{"class":34},[28,6390,5629],{"class":2225},[28,6392,413],{"class":38},[28,6394,416],{"class":34},[28,6396,1663],{"class":5478},[28,6398,64],{"class":38},[28,6400,416],{"class":34},[28,6402,3095],{"class":5478},[28,6404,2981],{"class":38},[14,6406,6407],{},"源文件：swap.cpp",[18,6409,6411],{"className":401,"code":6410,"language":403,"meta":23,"style":23},"#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",[25,6412,6413,6420,6425,6445,6449,6460,6469,6478,6495,6512],{"__ignoreMap":23},[28,6414,6415,6417],{"class":30,"line":31},[28,6416,2211],{"class":34},[28,6418,6419],{"class":127}," \"swap.h\"\n",[28,6421,6422],{"class":30,"line":48},[28,6423,6424],{"class":87},"\u002F\u002F函数的定义\n",[28,6426,6427,6429,6431,6433,6435,6437,6439,6441,6443],{"class":30,"line":84},[28,6428,5626],{"class":34},[28,6430,5629],{"class":2225},[28,6432,413],{"class":38},[28,6434,416],{"class":34},[28,6436,1663],{"class":5478},[28,6438,64],{"class":38},[28,6440,416],{"class":34},[28,6442,3095],{"class":5478},[28,6444,81],{"class":38},[28,6446,6447],{"class":30,"line":91},[28,6448,1811],{"class":38},[28,6450,6451,6453,6455,6457],{"class":30,"line":97},[28,6452,2247],{"class":34},[28,6454,4517],{"class":38},[28,6456,54],{"class":34},[28,6458,6459],{"class":38},"a;\n",[28,6461,6462,6465,6467],{"class":30,"line":103},[28,6463,6464],{"class":38},"    a",[28,6466,54],{"class":34},[28,6468,6331],{"class":38},[28,6470,6471,6474,6476],{"class":30,"line":109},[28,6472,6473],{"class":38},"    b",[28,6475,54],{"class":34},[28,6477,4542],{"class":38},[28,6479,6480,6482,6484,6487,6489,6491,6493],{"class":30,"line":118},[28,6481,1816],{"class":38},[28,6483,1441],{"class":34},[28,6485,6486],{"class":127},"\"a=\"",[28,6488,1441],{"class":34},[28,6490,51],{"class":38},[28,6492,1441],{"class":34},[28,6494,1463],{"class":38},[28,6496,6497,6499,6501,6504,6506,6508,6510],{"class":30,"line":124},[28,6498,1816],{"class":38},[28,6500,1441],{"class":34},[28,6502,6503],{"class":127},"\"b=\"",[28,6505,1441],{"class":34},[28,6507,666],{"class":38},[28,6509,1441],{"class":34},[28,6511,1463],{"class":38},[28,6513,6514],{"class":30,"line":131},[28,6515,1830],{"class":38},[328,6517,6518],{},"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":23,"searchDepth":48,"depth":48,"links":6520},[6521,6522,6523,6524,6525,6526],{"id":5434,"depth":48,"text":5435},{"id":5523,"depth":48,"text":5524},{"id":5606,"depth":48,"text":5607},{"id":5832,"depth":48,"text":5833},{"id":6181,"depth":48,"text":6182},{"id":6338,"depth":48,"text":6339},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5426,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6533,"title":6534,"body":6535,"description":6542,"extension":334,"meta":7947,"navigation":336,"path":7948,"seo":7949,"stem":7950,"__hash__":7951},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6536,"toc":7937},[6537,6540,6543,6547,6709,6713,6716,6719,6722,6725,6865,6869,6872,6875,6878,6943,6947,6952,7019,7022,7026,7029,7040,7045,7065,7068,7073,7092,7095,7099,7118,7121,7125,7360,7364,7367,7370,7373,7535,7538,7542,7545,7551,7934],[10,6538,6534],{"id":6539},"_3指针",[14,6541,6542],{},"通过指针保存一个地址，指针就是个地址",[351,6544,6546],{"id":6545},"_31定义指针","3.1定义指针",[18,6548,6550],{"className":401,"code":6549,"language":403,"meta":23,"style":23},"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",[25,6551,6552,6560,6564,6569,6581,6586,6594,6604,6622,6642,6646,6651,6656,6661,6675,6691,6705],{"__ignoreMap":23},[28,6553,6554,6556,6558],{"class":30,"line":31},[28,6555,416],{"class":34},[28,6557,2235],{"class":2225},[28,6559,2238],{"class":38},[28,6561,6562],{"class":30,"line":48},[28,6563,1811],{"class":38},[28,6565,6566],{"class":30,"line":84},[28,6567,6568],{"class":87},"    \u002F\u002F1.定义指针\n",[28,6570,6571,6573,6575,6577,6579],{"class":30,"line":91},[28,6572,2247],{"class":34},[28,6574,1663],{"class":38},[28,6576,54],{"class":34},[28,6578,845],{"class":60},[28,6580,1558],{"class":38},[28,6582,6583],{"class":30,"line":97},[28,6584,6585],{"class":87},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[28,6587,6588,6591],{"class":30,"line":103},[28,6589,6590],{"class":34},"    int*",[28,6592,6593],{"class":38},"p;\n",[28,6595,6596,6599,6602],{"class":30,"line":109},[28,6597,6598],{"class":38},"    p",[28,6600,6601],{"class":34},"=&",[28,6603,6459],{"class":38},[28,6605,6606,6608,6610,6613,6616,6618,6620],{"class":30,"line":118},[28,6607,1816],{"class":38},[28,6609,1441],{"class":34},[28,6611,6612],{"class":127},"\"a的地址为：\"",[28,6614,6615],{"class":34},"\u003C\u003C&",[28,6617,51],{"class":38},[28,6619,1441],{"class":34},[28,6621,1463],{"class":38},[28,6623,6624,6626,6628,6631,6633,6635,6637,6639],{"class":30,"line":124},[28,6625,1816],{"class":38},[28,6627,1441],{"class":34},[28,6629,6630],{"class":127},"\"指针p为：\"",[28,6632,1441],{"class":34},[28,6634,14],{"class":38},[28,6636,1441],{"class":34},[28,6638,1506],{"class":38},[28,6640,6641],{"class":87},"\u002F\u002F指针p表示的就是a的地址\n",[28,6643,6644],{"class":30,"line":131},[28,6645,2662],{"emptyLinePlaceholder":336},[28,6647,6648],{"class":30,"line":137},[28,6649,6650],{"class":87},"    \u002F\u002F2.使用指针\n",[28,6652,6653],{"class":30,"line":143},[28,6654,6655],{"class":87},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[28,6657,6658],{"class":30,"line":149},[28,6659,6660],{"class":87},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[28,6662,6663,6666,6668,6670,6673],{"class":30,"line":1890},[28,6664,6665],{"class":34},"    *",[28,6667,14],{"class":38},[28,6669,54],{"class":34},[28,6671,6672],{"class":60},"1000",[28,6674,1558],{"class":38},[28,6676,6677,6679,6682,6684,6686,6688],{"class":30,"line":1904},[28,6678,1816],{"class":38},[28,6680,6681],{"class":34},"\u003C\u003C*",[28,6683,14],{"class":38},[28,6685,1441],{"class":34},[28,6687,1506],{"class":38},[28,6689,6690],{"class":87},"\u002F\u002F1000\n",[28,6692,6693,6695,6697,6699,6701,6703],{"class":30,"line":1909},[28,6694,1816],{"class":38},[28,6696,1441],{"class":34},[28,6698,51],{"class":38},[28,6700,1441],{"class":34},[28,6702,1506],{"class":38},[28,6704,6690],{"class":87},[28,6706,6707],{"class":30,"line":1915},[28,6708,1830],{"class":38},[351,6710,6712],{"id":6711},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6714,6715],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6717,6718],{},"在32位操作系统下：占用4个字节空间",[14,6720,6721],{},"在64位操作系统下：占用8个字节空间",[14,6723,6724],{},"上方是不管啥数据类型的",[18,6726,6728],{"className":401,"code":6727,"language":403,"meta":23,"style":23},"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",[25,6729,6730,6738,6742,6747,6759,6764,6769,6774,6787,6809,6835,6861],{"__ignoreMap":23},[28,6731,6732,6734,6736],{"class":30,"line":31},[28,6733,416],{"class":34},[28,6735,2235],{"class":2225},[28,6737,2238],{"class":38},[28,6739,6740],{"class":30,"line":48},[28,6741,1811],{"class":38},[28,6743,6744],{"class":30,"line":84},[28,6745,6746],{"class":87},"    \u002F\u002F指针所占内存空间\n",[28,6748,6749,6751,6753,6755,6757],{"class":30,"line":91},[28,6750,2247],{"class":34},[28,6752,1663],{"class":38},[28,6754,54],{"class":34},[28,6756,845],{"class":60},[28,6758,1558],{"class":38},[28,6760,6761],{"class":30,"line":97},[28,6762,6763],{"class":87},"    \u002F\u002Fint *p;\n",[28,6765,6766],{"class":30,"line":103},[28,6767,6768],{"class":87},"    \u002F\u002Fp=&a;\n",[28,6770,6771],{"class":30,"line":109},[28,6772,6773],{"class":87},"    \u002F\u002F上述可以写为以下：\n",[28,6775,6776,6778,6781,6783,6785],{"class":30,"line":118},[28,6777,2247],{"class":34},[28,6779,6780],{"class":34}," *",[28,6782,14],{"class":38},[28,6784,6601],{"class":34},[28,6786,6459],{"class":38},[28,6788,6789,6792,6794,6797,6799,6802,6804,6806],{"class":30,"line":124},[28,6790,6791],{"class":38},"    cout ",[28,6793,1441],{"class":34},[28,6795,6796],{"class":127},"\"sizeof(int *)\"",[28,6798,1637],{"class":34},[28,6800,6801],{"class":38},"(p)",[28,6803,1441],{"class":34},[28,6805,1506],{"class":38},[28,6807,6808],{"class":87},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[28,6810,6811,6813,6815,6817,6819,6821,6823,6825,6827,6829,6832],{"class":30,"line":131},[28,6812,6791],{"class":38},[28,6814,1441],{"class":34},[28,6816,6796],{"class":127},[28,6818,1637],{"class":34},[28,6820,413],{"class":38},[28,6822,416],{"class":34},[28,6824,6780],{"class":34},[28,6826,828],{"class":38},[28,6828,1441],{"class":34},[28,6830,6831],{"class":38},"endl",[28,6833,6834],{"class":87},"  \u002F\u002F4字节(32位的话)\n",[28,6836,6837,6839,6841,6844,6846,6848,6850,6852,6854,6856,6858],{"class":30,"line":137},[28,6838,6791],{"class":38},[28,6840,1441],{"class":34},[28,6842,6843],{"class":127},"\"sizeof(char *)\"",[28,6845,1637],{"class":34},[28,6847,413],{"class":38},[28,6849,503],{"class":34},[28,6851,6780],{"class":34},[28,6853,828],{"class":38},[28,6855,1441],{"class":34},[28,6857,1506],{"class":38},[28,6859,6860],{"class":87}," \u002F\u002F4字节(32位的话)\n",[28,6862,6863],{"class":30,"line":143},[28,6864,1830],{"class":38},[351,6866,6868],{"id":6867},"_33空指针","3.3空指针",[14,6870,6871],{},"空指针：指针变量指向内存中编号为0的空间",[14,6873,6874],{},"用途：初始化指针变量",[14,6876,6877],{},"注意：空指针指向的内存是不可以访问的",[18,6879,6881],{"className":401,"code":6880,"language":403,"meta":23,"style":23},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[25,6882,6883,6891,6895,6900,6914,6919,6934,6939],{"__ignoreMap":23},[28,6884,6885,6887,6889],{"class":30,"line":31},[28,6886,416],{"class":34},[28,6888,2235],{"class":2225},[28,6890,2238],{"class":38},[28,6892,6893],{"class":30,"line":48},[28,6894,1811],{"class":38},[28,6896,6897],{"class":30,"line":84},[28,6898,6899],{"class":87},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[28,6901,6902,6904,6906,6908,6910,6912],{"class":30,"line":91},[28,6903,2247],{"class":34},[28,6905,6780],{"class":34},[28,6907,14],{"class":38},[28,6909,54],{"class":34},[28,6911,2654],{"class":60},[28,6913,1558],{"class":38},[28,6915,6916],{"class":30,"line":97},[28,6917,6918],{"class":87},"    \u002F\u002F2.空指针不能进行访问\n",[28,6920,6921,6923,6925,6927,6929,6931],{"class":30,"line":103},[28,6922,6665],{"class":34},[28,6924,14],{"class":38},[28,6926,54],{"class":34},[28,6928,713],{"class":60},[28,6930,465],{"class":38},[28,6932,6933],{"class":87},"\u002F\u002F直接报错，压根不能访问\n",[28,6935,6936],{"class":30,"line":109},[28,6937,6938],{"class":87},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[28,6940,6941],{"class":30,"line":118},[28,6942,1830],{"class":38},[351,6944,6946],{"id":6945},"_34野指针","3.4野指针",[14,6948,6949],{},[555,6950,6951],{},"指针变量指向非法的内存空间",[18,6953,6955],{"className":401,"code":6954,"language":403,"meta":23,"style":23},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[25,6956,6957,6965,6969,6998,7003,7015],{"__ignoreMap":23},[28,6958,6959,6961,6963],{"class":30,"line":31},[28,6960,416],{"class":34},[28,6962,2235],{"class":2225},[28,6964,2238],{"class":38},[28,6966,6967],{"class":30,"line":48},[28,6968,1811],{"class":38},[28,6970,6971,6973,6975,6977,6979,6981,6983,6985,6987,6990,6993,6995],{"class":30,"line":84},[28,6972,2247],{"class":34},[28,6974,6780],{"class":34},[28,6976,14],{"class":38},[28,6978,54],{"class":34},[28,6980,413],{"class":38},[28,6982,416],{"class":34},[28,6984,6780],{"class":34},[28,6986,828],{"class":38},[28,6988,6989],{"class":34},"0x",[28,6991,6992],{"class":60},"1100",[28,6994,465],{"class":38},[28,6996,6997],{"class":87}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[28,6999,7000],{"class":30,"line":91},[28,7001,7002],{"class":87},"    \u002F\u002F访问野指针报错\n",[28,7004,7005,7007,7009,7011,7013],{"class":30,"line":97},[28,7006,1816],{"class":38},[28,7008,6681],{"class":34},[28,7010,14],{"class":38},[28,7012,1441],{"class":34},[28,7014,1463],{"class":38},[28,7016,7017],{"class":30,"line":103},[28,7018,1830],{"class":38},[14,7020,7021],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[351,7023,7025],{"id":7024},"_35const修饰指针","3.5const修饰指针",[14,7027,7028],{},"三种情况：",[1404,7030,7031,7034,7037],{},[366,7032,7033],{},"const修饰指针 常量指针",[366,7035,7036],{},"const修饰常量 指针常量",[366,7038,7039],{},"const即修饰指针，又修饰常量",[363,7041,7042],{},[366,7043,7044],{},"常量指针",[18,7046,7048],{"className":401,"code":7047,"language":403,"meta":23,"style":23},"const int *p=&a;\n",[25,7049,7050],{"__ignoreMap":23},[28,7051,7052,7055,7057,7059,7061,7063],{"class":30,"line":31},[28,7053,7054],{"class":34},"const",[28,7056,2644],{"class":34},[28,7058,6780],{"class":34},[28,7060,14],{"class":38},[28,7062,6601],{"class":34},[28,7064,6459],{"class":38},[14,7066,7067],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[363,7069,7070],{"start":48},[366,7071,7072],{},"指针常量",[18,7074,7076],{"className":401,"code":7075,"language":403,"meta":23,"style":23},"int *const p=&a;\n",[25,7077,7078],{"__ignoreMap":23},[28,7079,7080,7082,7085,7088,7090],{"class":30,"line":31},[28,7081,416],{"class":34},[28,7083,7084],{"class":34}," *const",[28,7086,7087],{"class":38}," p",[28,7089,6601],{"class":34},[28,7091,6459],{"class":38},[14,7093,7094],{},"指针的指向不可以改，指针指向的值可以改",[363,7096,7097],{"start":84},[366,7098,7039],{},[18,7100,7102],{"className":401,"code":7101,"language":403,"meta":23,"style":23},"const int *const p=&a;\n",[25,7103,7104],{"__ignoreMap":23},[28,7105,7106,7108,7110,7112,7114,7116],{"class":30,"line":31},[28,7107,7054],{"class":34},[28,7109,2644],{"class":34},[28,7111,7084],{"class":34},[28,7113,7087],{"class":38},[28,7115,6601],{"class":34},[28,7117,6459],{"class":38},[14,7119,7120],{},"指针的指向和指针指向的值都不可以改变",[351,7122,7124],{"id":7123},"_36指针和数组","3.6指针和数组",[18,7126,7128],{"className":401,"code":7127,"language":403,"meta":23,"style":23},"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",[25,7129,7130,7138,7142,7147,7201,7222,7238,7254,7265,7282,7287,7301,7327,7331,7343,7352,7356],{"__ignoreMap":23},[28,7131,7132,7134,7136],{"class":30,"line":31},[28,7133,416],{"class":34},[28,7135,2235],{"class":2225},[28,7137,2238],{"class":38},[28,7139,7140],{"class":30,"line":48},[28,7141,1811],{"class":38},[28,7143,7144],{"class":30,"line":84},[28,7145,7146],{"class":87},"    \u002F\u002F利用指针访问数组中的元素\n",[28,7148,7149,7151,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199],{"class":30,"line":91},[28,7150,2247],{"class":34},[28,7152,4224],{"class":38},[28,7154,845],{"class":60},[28,7156,1337],{"class":38},[28,7158,54],{"class":34},[28,7160,1293],{"class":38},[28,7162,61],{"class":60},[28,7164,64],{"class":38},[28,7166,211],{"class":60},[28,7168,64],{"class":38},[28,7170,78],{"class":60},[28,7172,64],{"class":38},[28,7174,73],{"class":60},[28,7176,64],{"class":38},[28,7178,721],{"class":60},[28,7180,64],{"class":38},[28,7182,206],{"class":60},[28,7184,64],{"class":38},[28,7186,769],{"class":60},[28,7188,64],{"class":38},[28,7190,794],{"class":60},[28,7192,64],{"class":38},[28,7194,819],{"class":60},[28,7196,64],{"class":38},[28,7198,845],{"class":60},[28,7200,4257],{"class":38},[28,7202,7203,7205,7207,7210,7212,7214,7216,7218,7220],{"class":30,"line":97},[28,7204,1816],{"class":38},[28,7206,1441],{"class":34},[28,7208,7209],{"class":127},"\"数组的第一个元素为：\"",[28,7211,1441],{"class":34},[28,7213,4168],{"class":38},[28,7215,244],{"class":60},[28,7217,1337],{"class":38},[28,7219,1441],{"class":34},[28,7221,1463],{"class":38},[28,7223,7224,7226,7228,7230,7232,7235],{"class":30,"line":103},[28,7225,2247],{"class":34},[28,7227,6780],{"class":34},[28,7229,14],{"class":38},[28,7231,54],{"class":34},[28,7233,7234],{"class":38},"arr;",[28,7236,7237],{"class":87},"\u002F\u002F注意数才要加取地址符号&\n",[28,7239,7240,7242,7244,7246,7248,7250,7252],{"class":30,"line":109},[28,7241,1816],{"class":38},[28,7243,1441],{"class":34},[28,7245,7209],{"class":127},[28,7247,6681],{"class":34},[28,7249,14],{"class":38},[28,7251,1441],{"class":34},[28,7253,1463],{"class":38},[28,7255,7256,7258,7260,7262],{"class":30,"line":118},[28,7257,6598],{"class":38},[28,7259,2554],{"class":34},[28,7261,465],{"class":38},[28,7263,7264],{"class":87}," \u002F\u002F让指针向后偏移4个字节\n",[28,7266,7267,7269,7271,7274,7276,7278,7280],{"class":30,"line":124},[28,7268,1816],{"class":38},[28,7270,1441],{"class":34},[28,7272,7273],{"class":127},"\"数组的第二个元素为：\"",[28,7275,6681],{"class":34},[28,7277,14],{"class":38},[28,7279,1441],{"class":34},[28,7281,1463],{"class":38},[28,7283,7284],{"class":30,"line":131},[28,7285,7286],{"class":87},"    \u002F\u002F利用指针遍历数组\n",[28,7288,7289,7291,7293,7296,7298],{"class":30,"line":137},[28,7290,2247],{"class":34},[28,7292,6780],{"class":34},[28,7294,7295],{"class":38},"p2",[28,7297,54],{"class":34},[28,7299,7300],{"class":38},"arr;\n",[28,7302,7303,7305,7307,7309,7311,7313,7315,7317,7319,7321,7323,7325],{"class":30,"line":143},[28,7304,3463],{"class":34},[28,7306,1920],{"class":38},[28,7308,416],{"class":34},[28,7310,3294],{"class":38},[28,7312,54],{"class":34},[28,7314,244],{"class":60},[28,7316,3301],{"class":38},[28,7318,1307],{"class":34},[28,7320,845],{"class":60},[28,7322,3301],{"class":38},[28,7324,2554],{"class":34},[28,7326,81],{"class":38},[28,7328,7329],{"class":30,"line":149},[28,7330,2292],{"class":38},[28,7332,7333,7335,7337,7339,7341],{"class":30,"line":1890},[28,7334,3713],{"class":38},[28,7336,6681],{"class":34},[28,7338,7295],{"class":38},[28,7340,1441],{"class":34},[28,7342,1463],{"class":38},[28,7344,7345,7348,7350],{"class":30,"line":1904},[28,7346,7347],{"class":38},"        p2",[28,7349,2554],{"class":34},[28,7351,1558],{"class":38},[28,7353,7354],{"class":30,"line":1909},[28,7355,2449],{"class":38},[28,7357,7358],{"class":30,"line":1915},[28,7359,1830],{"class":38},[351,7361,7363],{"id":7362},"_37指针和函数","3.7指针和函数",[14,7365,7366],{},"利用指针做函数参数，可以修改实参的值",[14,7368,7369],{},"值传递：只改变形参，不改变实参",[14,7371,7372],{},"地址传递：",[18,7374,7376],{"className":401,"code":7375,"language":403,"meta":23,"style":23},"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",[25,7377,7378,7403,7407,7419,7430,7440,7444,7452,7456,7468,7480,7485,7501,7516,7531],{"__ignoreMap":23},[28,7379,7380,7382,7384,7386,7388,7390,7393,7395,7397,7399,7401],{"class":30,"line":31},[28,7381,5626],{"class":34},[28,7383,5629],{"class":2225},[28,7385,413],{"class":38},[28,7387,416],{"class":34},[28,7389,6780],{"class":34},[28,7391,7392],{"class":5478},"p1",[28,7394,64],{"class":38},[28,7396,416],{"class":34},[28,7398,6780],{"class":34},[28,7400,7295],{"class":5478},[28,7402,81],{"class":38},[28,7404,7405],{"class":30,"line":48},[28,7406,1811],{"class":38},[28,7408,7409,7411,7413,7416],{"class":30,"line":84},[28,7410,2247],{"class":34},[28,7412,4517],{"class":38},[28,7414,7415],{"class":34},"=*",[28,7417,7418],{"class":38},"p1;\n",[28,7420,7421,7423,7425,7427],{"class":30,"line":91},[28,7422,6665],{"class":34},[28,7424,7392],{"class":38},[28,7426,7415],{"class":34},[28,7428,7429],{"class":38},"p2;\n",[28,7431,7432,7434,7436,7438],{"class":30,"line":97},[28,7433,6665],{"class":34},[28,7435,7295],{"class":38},[28,7437,54],{"class":34},[28,7439,4542],{"class":38},[28,7441,7442],{"class":30,"line":103},[28,7443,1830],{"class":38},[28,7445,7446,7448,7450],{"class":30,"line":109},[28,7447,416],{"class":34},[28,7449,2235],{"class":2225},[28,7451,2238],{"class":38},[28,7453,7454],{"class":30,"line":118},[28,7455,1811],{"class":38},[28,7457,7458,7460,7462,7464,7466],{"class":30,"line":124},[28,7459,2247],{"class":34},[28,7461,1663],{"class":38},[28,7463,54],{"class":34},[28,7465,845],{"class":60},[28,7467,1558],{"class":38},[28,7469,7470,7472,7474,7476,7478],{"class":30,"line":131},[28,7471,2247],{"class":34},[28,7473,3095],{"class":38},[28,7475,54],{"class":34},[28,7477,1098],{"class":60},[28,7479,1558],{"class":38},[28,7481,7482],{"class":30,"line":137},[28,7483,7484],{"class":87},"    \u002F\u002F地址传递\n",[28,7486,7487,7489,7491,7493,7496,7498],{"class":30,"line":143},[28,7488,5823],{"class":2225},[28,7490,413],{"class":38},[28,7492,753],{"class":34},[28,7494,7495],{"class":38},"a,",[28,7497,753],{"class":34},[28,7499,7500],{"class":38},"b);\n",[28,7502,7503,7505,7507,7509,7511,7513],{"class":30,"line":149},[28,7504,1816],{"class":38},[28,7506,1441],{"class":34},[28,7508,51],{"class":38},[28,7510,1441],{"class":34},[28,7512,1506],{"class":38},[28,7514,7515],{"class":87},"\u002F\u002F20\n",[28,7517,7518,7520,7522,7524,7526,7528],{"class":30,"line":1890},[28,7519,1816],{"class":38},[28,7521,1441],{"class":34},[28,7523,666],{"class":38},[28,7525,1441],{"class":34},[28,7527,1506],{"class":38},[28,7529,7530],{"class":87},"\u002F\u002F10\n",[28,7532,7533],{"class":30,"line":1904},[28,7534,1830],{"class":38},[14,7536,7537],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[351,7539,7541],{"id":7540},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7543,7544],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7546,7547,7548,7550],{},"例如数组：int arr",[28,7549,845],{},"={4,3,6,9,1,2,10,8,7,5}",[18,7552,7554],{"className":401,"code":7553,"language":403,"meta":23,"style":23},"#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",[25,7555,7556,7562,7572,7596,7600,7631,7635,7669,7673,7691,7695,7706,7721,7736,7740,7744,7748,7752,7756,7764,7768,7773,7827,7839,7851,7856,7864,7868,7873,7898,7902,7917,7926,7930],{"__ignoreMap":23},[28,7557,7558,7560],{"class":30,"line":31},[28,7559,2211],{"class":34},[28,7561,2214],{"class":127},[28,7563,7564,7566,7568,7570],{"class":30,"line":48},[28,7565,2219],{"class":34},[28,7567,2222],{"class":34},[28,7569,2226],{"class":2225},[28,7571,1558],{"class":38},[28,7573,7574,7576,7579,7581,7583,7585,7587,7589,7591,7594],{"class":30,"line":84},[28,7575,5626],{"class":34},[28,7577,7578],{"class":2225}," bubbleSort",[28,7580,413],{"class":38},[28,7582,416],{"class":34},[28,7584,6780],{"class":34},[28,7586,14],{"class":5478},[28,7588,64],{"class":38},[28,7590,416],{"class":34},[28,7592,7593],{"class":5478}," len",[28,7595,81],{"class":38},[28,7597,7598],{"class":30,"line":91},[28,7599,1811],{"class":38},[28,7601,7602,7604,7606,7608,7610,7612,7614,7616,7618,7621,7623,7625,7627,7629],{"class":30,"line":97},[28,7603,3463],{"class":34},[28,7605,413],{"class":38},[28,7607,416],{"class":34},[28,7609,3294],{"class":38},[28,7611,54],{"class":34},[28,7613,244],{"class":60},[28,7615,3301],{"class":38},[28,7617,1307],{"class":34},[28,7619,7620],{"class":38},"len",[28,7622,930],{"class":34},[28,7624,61],{"class":60},[28,7626,3301],{"class":38},[28,7628,2554],{"class":34},[28,7630,81],{"class":38},[28,7632,7633],{"class":30,"line":103},[28,7634,2292],{"class":38},[28,7636,7637,7639,7641,7643,7645,7647,7649,7651,7653,7655,7657,7659,7661,7663,7665,7667],{"class":30,"line":109},[28,7638,3665],{"class":34},[28,7640,413],{"class":38},[28,7642,416],{"class":34},[28,7644,3672],{"class":38},[28,7646,54],{"class":34},[28,7648,244],{"class":60},[28,7650,3679],{"class":38},[28,7652,1307],{"class":34},[28,7654,7620],{"class":38},[28,7656,930],{"class":34},[28,7658,840],{"class":38},[28,7660,930],{"class":34},[28,7662,61],{"class":60},[28,7664,3679],{"class":38},[28,7666,2554],{"class":34},[28,7668,81],{"class":38},[28,7670,7671],{"class":30,"line":118},[28,7672,2772],{"class":38},[28,7674,7675,7677,7680,7682,7685,7687,7689],{"class":30,"line":124},[28,7676,4904],{"class":34},[28,7678,7679],{"class":38},"(p[j]",[28,7681,1357],{"class":34},[28,7683,7684],{"class":38},"p[j",[28,7686,880],{"class":34},[28,7688,61],{"class":60},[28,7690,4919],{"class":38},[28,7692,7693],{"class":30,"line":131},[28,7694,4924],{"class":38},[28,7696,7697,7699,7701,7703],{"class":30,"line":137},[28,7698,4929],{"class":34},[28,7700,4517],{"class":38},[28,7702,54],{"class":34},[28,7704,7705],{"class":38},"p[j];\n",[28,7707,7708,7711,7713,7715,7717,7719],{"class":30,"line":143},[28,7709,7710],{"class":38},"                p[j]",[28,7712,54],{"class":34},[28,7714,7684],{"class":38},[28,7716,880],{"class":34},[28,7718,61],{"class":60},[28,7720,4952],{"class":38},[28,7722,7723,7726,7728,7730,7732,7734],{"class":30,"line":149},[28,7724,7725],{"class":38},"                p[j",[28,7727,880],{"class":34},[28,7729,61],{"class":60},[28,7731,1337],{"class":38},[28,7733,54],{"class":34},[28,7735,4542],{"class":38},[28,7737,7738],{"class":30,"line":1890},[28,7739,4972],{"class":38},[28,7741,7742],{"class":30,"line":1904},[28,7743,2791],{"class":38},[28,7745,7746],{"class":30,"line":1909},[28,7747,2449],{"class":38},[28,7749,7750],{"class":30,"line":1915},[28,7751,1830],{"class":38},[28,7753,7754],{"class":30,"line":1936},[28,7755,2662],{"emptyLinePlaceholder":336},[28,7757,7758,7760,7762],{"class":30,"line":1941},[28,7759,416],{"class":34},[28,7761,2235],{"class":2225},[28,7763,2238],{"class":38},[28,7765,7766],{"class":30,"line":1955},[28,7767,1811],{"class":38},[28,7769,7770],{"class":30,"line":1960},[28,7771,7772],{"class":87},"    \u002F\u002F 1.创建数组\n",[28,7774,7775,7777,7779,7781,7783,7785,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825],{"class":30,"line":1989},[28,7776,2247],{"class":34},[28,7778,4224],{"class":38},[28,7780,845],{"class":60},[28,7782,1337],{"class":38},[28,7784,54],{"class":34},[28,7786,1293],{"class":38},[28,7788,73],{"class":60},[28,7790,64],{"class":38},[28,7792,78],{"class":60},[28,7794,64],{"class":38},[28,7796,206],{"class":60},[28,7798,64],{"class":38},[28,7800,819],{"class":60},[28,7802,64],{"class":38},[28,7804,61],{"class":60},[28,7806,64],{"class":38},[28,7808,211],{"class":60},[28,7810,64],{"class":38},[28,7812,845],{"class":60},[28,7814,64],{"class":38},[28,7816,794],{"class":60},[28,7818,64],{"class":38},[28,7820,769],{"class":60},[28,7822,64],{"class":38},[28,7824,721],{"class":60},[28,7826,4257],{"class":38},[28,7828,7829,7831,7833,7835,7837],{"class":30,"line":1994},[28,7830,2247],{"class":34},[28,7832,7593],{"class":38},[28,7834,54],{"class":34},[28,7836,845],{"class":60},[28,7838,1558],{"class":38},[28,7840,7841,7843,7845,7847,7849],{"class":30,"line":2011},[28,7842,2247],{"class":34},[28,7844,6780],{"class":34},[28,7846,14],{"class":38},[28,7848,54],{"class":34},[28,7850,7300],{"class":38},[28,7852,7853],{"class":30,"line":2016},[28,7854,7855],{"class":87},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[28,7857,7858,7861],{"class":30,"line":2021},[28,7859,7860],{"class":2225},"    bubbleSort",[28,7862,7863],{"class":38},"(p,len);\n",[28,7865,7866],{"class":30,"line":2026},[28,7867,2662],{"emptyLinePlaceholder":336},[28,7869,7870],{"class":30,"line":2040},[28,7871,7872],{"class":87},"    \u002F\u002F 3.打印排序后的数组\n",[28,7874,7875,7877,7879,7881,7883,7885,7887,7889,7891,7894,7896],{"class":30,"line":2045},[28,7876,3463],{"class":34},[28,7878,1920],{"class":38},[28,7880,416],{"class":34},[28,7882,3294],{"class":38},[28,7884,54],{"class":34},[28,7886,244],{"class":60},[28,7888,3476],{"class":38},[28,7890,1307],{"class":34},[28,7892,7893],{"class":38},"len; i",[28,7895,2554],{"class":34},[28,7897,81],{"class":38},[28,7899,7900],{"class":30,"line":2839},[28,7901,2292],{"class":38},[28,7903,7904,7906,7908,7910,7912,7915],{"class":30,"line":2853},[28,7905,3713],{"class":38},[28,7907,6681],{"class":34},[28,7909,14],{"class":38},[28,7911,1441],{"class":34},[28,7913,7914],{"class":127},"\"\"",[28,7916,1558],{"class":38},[28,7918,7919,7922,7924],{"class":30,"line":2861},[28,7920,7921],{"class":38},"        p",[28,7923,2554],{"class":34},[28,7925,1558],{"class":38},[28,7927,7928],{"class":30,"line":2866},[28,7929,2449],{"class":38},[28,7931,7932],{"class":30,"line":2872},[28,7933,1830],{"class":38},[328,7935,7936],{},"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":23,"searchDepth":48,"depth":48,"links":7938},[7939,7940,7941,7942,7943,7944,7945,7946],{"id":6545,"depth":48,"text":6546},{"id":6711,"depth":48,"text":6712},{"id":6867,"depth":48,"text":6868},{"id":6945,"depth":48,"text":6946},{"id":7024,"depth":48,"text":7025},{"id":7123,"depth":48,"text":7124},{"id":7362,"depth":48,"text":7363},{"id":7540,"depth":48,"text":7541},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6534,"description":6542},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7953,"title":7954,"body":7955,"description":7962,"extension":334,"meta":10936,"navigation":336,"path":10937,"seo":10938,"stem":10939,"__hash__":10940},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7956,"toc":10927},[7957,7960,7963,7967,7970,7973,7984,8322,8325,8329,8332,8339,8594,8598,8601,8604,8759,8763,8766,8769,8975,8979,8982,9285,9288,9296,9300,9303,9454,9456,9467,9524,9528,9533,10190,10198,10201,10295,10298,10918,10924],[10,7958,7954],{"id":7959},"_4结构体",[14,7961,7962],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[351,7964,7966],{"id":7965},"_41结构体定义与使用","4.1结构体定义与使用",[14,7968,7969],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7971,7972],{},"通过结构体创建变量的方式：",[1404,7974,7975,7978,7981],{},[366,7976,7977],{},"struct 结构体名 变量名",[366,7979,7980],{},"struct 结构体名 变量名={成员1值，成员2值...}",[366,7982,7983],{},"定义结构体时顺便创建变量",[18,7985,7987],{"className":401,"code":7986,"language":403,"meta":23,"style":23},"#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",[25,7988,7989,7995,8005,8012,8017,8025,8029,8034,8038,8043,8048,8053,8060,8065,8072,8076,8083,8087,8091,8095,8099,8103,8107,8113,8117,8123,8131,8139,8143,8148,8153,8164,8169,8181,8192,8203,8208,8232,8237,8243,8270,8275,8281,8293,8305,8317],{"__ignoreMap":23},[28,7990,7991,7993],{"class":30,"line":31},[28,7992,2211],{"class":34},[28,7994,2214],{"class":127},[28,7996,7997,7999,8001,8003],{"class":30,"line":48},[28,7998,2219],{"class":34},[28,8000,2222],{"class":34},[28,8002,2226],{"class":2225},[28,8004,1558],{"class":38},[28,8006,8007,8009],{"class":30,"line":84},[28,8008,2211],{"class":34},[28,8010,8011],{"class":127},"\u003Cstring>\n",[28,8013,8014],{"class":30,"line":91},[28,8015,8016],{"class":87},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[28,8018,8019,8022],{"class":30,"line":97},[28,8020,8021],{"class":34},"struct",[28,8023,8024],{"class":2225}," Student\n",[28,8026,8027],{"class":30,"line":103},[28,8028,1811],{"class":38},[28,8030,8031],{"class":30,"line":109},[28,8032,8033],{"class":87},"    \u002F\u002F成员列表\n",[28,8035,8036],{"class":30,"line":118},[28,8037,2662],{"emptyLinePlaceholder":336},[28,8039,8040],{"class":30,"line":124},[28,8041,8042],{"class":87},"    \u002F\u002F姓名\n",[28,8044,8045],{"class":30,"line":131},[28,8046,8047],{"class":38},"    string name;\n",[28,8049,8050],{"class":30,"line":137},[28,8051,8052],{"class":87},"    \u002F\u002F年龄\n",[28,8054,8055,8057],{"class":30,"line":143},[28,8056,2247],{"class":34},[28,8058,8059],{"class":38}," age;\n",[28,8061,8062],{"class":30,"line":149},[28,8063,8064],{"class":87},"    \u002F\u002F分数\n",[28,8066,8067,8069],{"class":30,"line":1890},[28,8068,2247],{"class":34},[28,8070,8071],{"class":38}," score;\n",[28,8073,8074],{"class":30,"line":1904},[28,8075,4257],{"class":38},[28,8077,8078,8080],{"class":30,"line":1909},[28,8079,8021],{"class":34},[28,8081,8082],{"class":2225}," School\n",[28,8084,8085],{"class":30,"line":1915},[28,8086,1811],{"class":38},[28,8088,8089],{"class":30,"line":1936},[28,8090,8033],{"class":87},[28,8092,8093],{"class":30,"line":1941},[28,8094,2662],{"emptyLinePlaceholder":336},[28,8096,8097],{"class":30,"line":1955},[28,8098,8042],{"class":87},[28,8100,8101],{"class":30,"line":1960},[28,8102,8047],{"class":38},[28,8104,8105],{"class":30,"line":1989},[28,8106,8052],{"class":87},[28,8108,8109,8111],{"class":30,"line":1994},[28,8110,2247],{"class":34},[28,8112,8059],{"class":38},[28,8114,8115],{"class":30,"line":2011},[28,8116,8064],{"class":87},[28,8118,8119,8121],{"class":30,"line":2016},[28,8120,2247],{"class":34},[28,8122,8071],{"class":38},[28,8124,8125,8128],{"class":30,"line":2021},[28,8126,8127],{"class":38},"} s3;",[28,8129,8130],{"class":87}," \u002F\u002F创建结构体时就创建了变量\n",[28,8132,8133,8135,8137],{"class":30,"line":2026},[28,8134,416],{"class":34},[28,8136,2235],{"class":2225},[28,8138,2238],{"class":38},[28,8140,8141],{"class":30,"line":2040},[28,8142,1811],{"class":38},[28,8144,8145],{"class":30,"line":2045},[28,8146,8147],{"class":87},"    \u002F\u002F2.通过学生类型创建具体学生\n",[28,8149,8150],{"class":30,"line":2839},[28,8151,8152],{"class":87},"    \u002F\u002F2.1 struct Student s1;\n",[28,8154,8155,8158,8161],{"class":30,"line":2853},[28,8156,8157],{"class":34},"    struct",[28,8159,8160],{"class":2225}," Student",[28,8162,8163],{"class":38}," s1;\n",[28,8165,8166],{"class":30,"line":2861},[28,8167,8168],{"class":87},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[28,8170,8171,8174,8176,8179],{"class":30,"line":2866},[28,8172,8173],{"class":38},"    s1.name",[28,8175,54],{"class":34},[28,8177,8178],{"class":127},"\"张三\"",[28,8180,1558],{"class":38},[28,8182,8183,8186,8188,8190],{"class":30,"line":2872},[28,8184,8185],{"class":38},"    s1.age",[28,8187,54],{"class":34},[28,8189,1048],{"class":60},[28,8191,1558],{"class":38},[28,8193,8194,8197,8199,8201],{"class":30,"line":2878},[28,8195,8196],{"class":38},"    s1.score",[28,8198,54],{"class":34},[28,8200,657],{"class":60},[28,8202,1558],{"class":38},[28,8204,8205],{"class":30,"line":2883},[28,8206,8207],{"class":87},"    \u002F\u002F输出结果\n",[28,8209,8211,8213,8215,8218,8220,8223,8225,8228,8230],{"class":30,"line":8210},37,[28,8212,1816],{"class":38},[28,8214,1441],{"class":34},[28,8216,8217],{"class":38},"s1.name",[28,8219,1441],{"class":34},[28,8221,8222],{"class":38},"s1.age",[28,8224,1441],{"class":34},[28,8226,8227],{"class":38},"s1.score",[28,8229,1441],{"class":34},[28,8231,1463],{"class":38},[28,8233,8235],{"class":30,"line":8234},38,[28,8236,2662],{"emptyLinePlaceholder":336},[28,8238,8240],{"class":30,"line":8239},39,[28,8241,8242],{"class":87},"    \u002F\u002F2.2 struct Student s2={...}\n",[28,8244,8246,8248,8250,8253,8255,8257,8260,8262,8264,8266,8268],{"class":30,"line":8245},40,[28,8247,8157],{"class":34},[28,8249,8160],{"class":2225},[28,8251,8252],{"class":38}," s2",[28,8254,54],{"class":34},[28,8256,1293],{"class":38},[28,8258,8259],{"class":127},"\"王五\"",[28,8261,64],{"class":38},[28,8263,1048],{"class":60},[28,8265,64],{"class":38},[28,8267,657],{"class":60},[28,8269,4257],{"class":38},[28,8271,8273],{"class":30,"line":8272},41,[28,8274,2662],{"emptyLinePlaceholder":336},[28,8276,8278],{"class":30,"line":8277},42,[28,8279,8280],{"class":87},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[28,8282,8284,8287,8289,8291],{"class":30,"line":8283},43,[28,8285,8286],{"class":38},"    s3.name",[28,8288,54],{"class":34},[28,8290,3940],{"class":127},[28,8292,1558],{"class":38},[28,8294,8296,8299,8301,8303],{"class":30,"line":8295},44,[28,8297,8298],{"class":38},"    s3.age",[28,8300,54],{"class":34},[28,8302,1048],{"class":60},[28,8304,1558],{"class":38},[28,8306,8308,8311,8313,8315],{"class":30,"line":8307},45,[28,8309,8310],{"class":38},"    s3.score",[28,8312,54],{"class":34},[28,8314,1098],{"class":60},[28,8316,1558],{"class":38},[28,8318,8320],{"class":30,"line":8319},46,[28,8321,1830],{"class":38},[14,8323,8324],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[351,8326,8328],{"id":8327},"_42结构体数组","4.2结构体数组",[14,8330,8331],{},"将自定义的结构体放入到数组中方便维护",[14,8333,8334,8335,8338],{},"语法：struct 结构体名 数组名",[28,8336,8337],{},"元素个数","={ {}，{},...{} };",[18,8340,8342],{"className":401,"code":8341,"language":403,"meta":23,"style":23},"#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",[25,8343,8344,8350,8360,8366,8371,8377,8381,8385,8391,8397,8401,8405,8413,8417,8422,8437,8441,8457,8473,8477,8482,8498,8513,8528,8533,8559,8563,8586,8590],{"__ignoreMap":23},[28,8345,8346,8348],{"class":30,"line":31},[28,8347,2211],{"class":34},[28,8349,2214],{"class":127},[28,8351,8352,8354,8356,8358],{"class":30,"line":48},[28,8353,2219],{"class":34},[28,8355,2222],{"class":34},[28,8357,2226],{"class":2225},[28,8359,1558],{"class":38},[28,8361,8362,8364],{"class":30,"line":84},[28,8363,2211],{"class":34},[28,8365,8011],{"class":127},[28,8367,8368],{"class":30,"line":91},[28,8369,8370],{"class":87},"\u002F\u002F1.定义结构体\n",[28,8372,8373,8375],{"class":30,"line":97},[28,8374,8021],{"class":34},[28,8376,8024],{"class":2225},[28,8378,8379],{"class":30,"line":103},[28,8380,1811],{"class":38},[28,8382,8383],{"class":30,"line":109},[28,8384,8047],{"class":38},[28,8386,8387,8389],{"class":30,"line":118},[28,8388,2247],{"class":34},[28,8390,8059],{"class":38},[28,8392,8393,8395],{"class":30,"line":124},[28,8394,2247],{"class":34},[28,8396,8071],{"class":38},[28,8398,8399],{"class":30,"line":131},[28,8400,2662],{"emptyLinePlaceholder":336},[28,8402,8403],{"class":30,"line":137},[28,8404,4257],{"class":38},[28,8406,8407,8409,8411],{"class":30,"line":143},[28,8408,416],{"class":34},[28,8410,2235],{"class":2225},[28,8412,2238],{"class":38},[28,8414,8415],{"class":30,"line":149},[28,8416,1811],{"class":38},[28,8418,8419],{"class":30,"line":1890},[28,8420,8421],{"class":87},"    \u002F\u002F2.创建结构体数组\n",[28,8423,8424,8426,8428,8431,8433,8435],{"class":30,"line":1904},[28,8425,8157],{"class":34},[28,8427,8160],{"class":2225},[28,8429,8430],{"class":38}," stuArray[",[28,8432,211],{"class":60},[28,8434,1337],{"class":38},[28,8436,5170],{"class":34},[28,8438,8439],{"class":30,"line":1909},[28,8440,2292],{"class":38},[28,8442,8443,8445,8447,8449,8451,8453,8455],{"class":30,"line":1915},[28,8444,5179],{"class":38},[28,8446,8178],{"class":127},[28,8448,64],{"class":38},[28,8450,1048],{"class":60},[28,8452,64],{"class":38},[28,8454,713],{"class":60},[28,8456,5192],{"class":38},[28,8458,8459,8461,8463,8465,8467,8469,8471],{"class":30,"line":1936},[28,8460,5179],{"class":38},[28,8462,3940],{"class":127},[28,8464,64],{"class":38},[28,8466,973],{"class":60},[28,8468,64],{"class":38},[28,8470,973],{"class":60},[28,8472,1830],{"class":38},[28,8474,8475],{"class":30,"line":1941},[28,8476,2449],{"class":38},[28,8478,8479],{"class":30,"line":1955},[28,8480,8481],{"class":87},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[28,8483,8484,8487,8489,8492,8494,8496],{"class":30,"line":1960},[28,8485,8486],{"class":38},"    stuArray[",[28,8488,61],{"class":60},[28,8490,8491],{"class":38},"].name",[28,8493,54],{"class":34},[28,8495,3963],{"class":127},[28,8497,1558],{"class":38},[28,8499,8500,8502,8504,8507,8509,8511],{"class":30,"line":1989},[28,8501,8486],{"class":38},[28,8503,61],{"class":60},[28,8505,8506],{"class":38},"].age",[28,8508,54],{"class":34},[28,8510,211],{"class":60},[28,8512,1558],{"class":38},[28,8514,8515,8517,8519,8522,8524,8526],{"class":30,"line":1994},[28,8516,8486],{"class":38},[28,8518,61],{"class":60},[28,8520,8521],{"class":38},"].score",[28,8523,54],{"class":34},[28,8525,211],{"class":60},[28,8527,1558],{"class":38},[28,8529,8530],{"class":30,"line":2011},[28,8531,8532],{"class":87},"    \u002F\u002F4.遍历结构体数组\n",[28,8534,8535,8537,8539,8541,8543,8545,8547,8549,8551,8553,8555,8557],{"class":30,"line":2016},[28,8536,3463],{"class":34},[28,8538,1920],{"class":38},[28,8540,416],{"class":34},[28,8542,3294],{"class":38},[28,8544,54],{"class":34},[28,8546,244],{"class":60},[28,8548,3301],{"class":38},[28,8550,1307],{"class":34},[28,8552,211],{"class":60},[28,8554,3301],{"class":38},[28,8556,2554],{"class":34},[28,8558,81],{"class":38},[28,8560,8561],{"class":30,"line":2021},[28,8562,2292],{"class":38},[28,8564,8565,8567,8569,8572,8574,8577,8579,8582,8584],{"class":30,"line":2026},[28,8566,3713],{"class":38},[28,8568,1441],{"class":34},[28,8570,8571],{"class":38},"stuArray[i].name",[28,8573,1441],{"class":34},[28,8575,8576],{"class":38},"stuArray[i].age",[28,8578,1441],{"class":34},[28,8580,8581],{"class":38},"stuArray[i].score",[28,8583,1441],{"class":34},[28,8585,1463],{"class":38},[28,8587,8588],{"class":30,"line":2040},[28,8589,2449],{"class":38},[28,8591,8592],{"class":30,"line":2045},[28,8593,1830],{"class":38},[351,8595,8597],{"id":8596},"_43结构体指针","4.3结构体指针",[14,8599,8600],{},"作用：通过指针访问结构体中的成员",[14,8602,8603],{},"利用操作符->可以通过结构体指针访问结构体属性",[18,8605,8607],{"className":401,"code":8606,"language":403,"meta":23,"style":23},"#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",[25,8608,8609,8615,8625,8631,8635,8641,8645,8649,8655,8661,8665,8673,8677,8682,8707,8712,8727,8732,8755],{"__ignoreMap":23},[28,8610,8611,8613],{"class":30,"line":31},[28,8612,2211],{"class":34},[28,8614,2214],{"class":127},[28,8616,8617,8619,8621,8623],{"class":30,"line":48},[28,8618,2219],{"class":34},[28,8620,2222],{"class":34},[28,8622,2226],{"class":2225},[28,8624,1558],{"class":38},[28,8626,8627,8629],{"class":30,"line":84},[28,8628,2211],{"class":34},[28,8630,8011],{"class":127},[28,8632,8633],{"class":30,"line":91},[28,8634,8370],{"class":87},[28,8636,8637,8639],{"class":30,"line":97},[28,8638,8021],{"class":34},[28,8640,8024],{"class":2225},[28,8642,8643],{"class":30,"line":103},[28,8644,1811],{"class":38},[28,8646,8647],{"class":30,"line":109},[28,8648,8047],{"class":38},[28,8650,8651,8653],{"class":30,"line":118},[28,8652,2247],{"class":34},[28,8654,8059],{"class":38},[28,8656,8657,8659],{"class":30,"line":124},[28,8658,2247],{"class":34},[28,8660,8071],{"class":38},[28,8662,8663],{"class":30,"line":131},[28,8664,4257],{"class":38},[28,8666,8667,8669,8671],{"class":30,"line":137},[28,8668,416],{"class":34},[28,8670,2235],{"class":2225},[28,8672,2238],{"class":38},[28,8674,8675],{"class":30,"line":143},[28,8676,1811],{"class":38},[28,8678,8679],{"class":30,"line":149},[28,8680,8681],{"class":87},"    \u002F\u002F创建学生结构体变量\n",[28,8683,8684,8686,8688,8691,8693,8695,8697,8699,8701,8703,8705],{"class":30,"line":1890},[28,8685,8157],{"class":34},[28,8687,8160],{"class":2225},[28,8689,8690],{"class":38}," s",[28,8692,54],{"class":34},[28,8694,1293],{"class":38},[28,8696,8178],{"class":127},[28,8698,64],{"class":38},[28,8700,1048],{"class":60},[28,8702,64],{"class":38},[28,8704,1984],{"class":60},[28,8706,4257],{"class":38},[28,8708,8709],{"class":30,"line":1904},[28,8710,8711],{"class":87},"    \u002F\u002F通过指针指向结构体变量\n",[28,8713,8714,8716,8718,8720,8722,8724],{"class":30,"line":1909},[28,8715,8157],{"class":34},[28,8717,8160],{"class":2225},[28,8719,6780],{"class":34},[28,8721,14],{"class":38},[28,8723,6601],{"class":34},[28,8725,8726],{"class":38},"s\n",[28,8728,8729],{"class":30,"line":1915},[28,8730,8731],{"class":87},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[28,8733,8734,8736,8738,8741,8743,8746,8748,8751,8753],{"class":30,"line":1936},[28,8735,1816],{"class":38},[28,8737,1441],{"class":34},[28,8739,8740],{"class":38},"p->name",[28,8742,1441],{"class":34},[28,8744,8745],{"class":38},"p->age",[28,8747,1441],{"class":34},[28,8749,8750],{"class":38},"p->score",[28,8752,1441],{"class":34},[28,8754,1463],{"class":38},[28,8756,8757],{"class":30,"line":1941},[28,8758,1830],{"class":38},[351,8760,8762],{"id":8761},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8764,8765],{},"作用：结构体中的成员可以是另一个结构体",[14,8767,8768],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[18,8770,8772],{"className":401,"code":8771,"language":403,"meta":23,"style":23},"#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",[25,8773,8774,8780,8790,8796,8801,8809,8813,8817,8823,8829,8833,8838,8845,8849,8856,8860,8866,8871,8875,8883,8887,8892,8897,8902,8913,8925,8936,8949,8960,8971],{"__ignoreMap":23},[28,8775,8776,8778],{"class":30,"line":31},[28,8777,2211],{"class":34},[28,8779,2214],{"class":127},[28,8781,8782,8784,8786,8788],{"class":30,"line":48},[28,8783,2219],{"class":34},[28,8785,2222],{"class":34},[28,8787,2226],{"class":2225},[28,8789,1558],{"class":38},[28,8791,8792,8794],{"class":30,"line":84},[28,8793,2211],{"class":34},[28,8795,8011],{"class":127},[28,8797,8798],{"class":30,"line":91},[28,8799,8800],{"class":87},"\u002F\u002F定义学生结构体\n",[28,8802,8803,8805,8807],{"class":30,"line":97},[28,8804,8021],{"class":34},[28,8806,8160],{"class":2225},[28,8808,2936],{"class":38},[28,8810,8811],{"class":30,"line":103},[28,8812,1811],{"class":38},[28,8814,8815],{"class":30,"line":109},[28,8816,8047],{"class":38},[28,8818,8819,8821],{"class":30,"line":118},[28,8820,2247],{"class":34},[28,8822,8059],{"class":38},[28,8824,8825,8827],{"class":30,"line":124},[28,8826,2247],{"class":34},[28,8828,8071],{"class":38},[28,8830,8831],{"class":30,"line":131},[28,8832,1830],{"class":38},[28,8834,8835],{"class":30,"line":137},[28,8836,8837],{"class":87},"\u002F\u002F定义老师结构体\n",[28,8839,8840,8842],{"class":30,"line":143},[28,8841,8021],{"class":34},[28,8843,8844],{"class":2225}," Teacher\n",[28,8846,8847],{"class":30,"line":149},[28,8848,1811],{"class":38},[28,8850,8851,8853],{"class":30,"line":1890},[28,8852,2247],{"class":34},[28,8854,8855],{"class":38}," id;\n",[28,8857,8858],{"class":30,"line":1904},[28,8859,8047],{"class":38},[28,8861,8862,8864],{"class":30,"line":1909},[28,8863,2247],{"class":34},[28,8865,8059],{"class":38},[28,8867,8868],{"class":30,"line":1915},[28,8869,8870],{"class":38},"    Student stu;\n",[28,8872,8873],{"class":30,"line":1936},[28,8874,1830],{"class":38},[28,8876,8877,8879,8881],{"class":30,"line":1941},[28,8878,416],{"class":34},[28,8880,2235],{"class":2225},[28,8882,6240],{"class":38},[28,8884,8885],{"class":30,"line":1955},[28,8886,1811],{"class":38},[28,8888,8889],{"class":30,"line":1960},[28,8890,8891],{"class":87},"    \u002F\u002F结构体嵌套结构体\n",[28,8893,8894],{"class":30,"line":1989},[28,8895,8896],{"class":87},"    \u002F\u002F创建老师\n",[28,8898,8899],{"class":30,"line":1994},[28,8900,8901],{"class":38},"    Teacher t;\n",[28,8903,8904,8907,8909,8911],{"class":30,"line":2011},[28,8905,8906],{"class":38},"    t.id",[28,8908,54],{"class":34},[28,8910,713],{"class":60},[28,8912,1558],{"class":38},[28,8914,8915,8918,8920,8923],{"class":30,"line":2016},[28,8916,8917],{"class":38},"    t.name",[28,8919,54],{"class":34},[28,8921,8922],{"class":127},"\"老王\"",[28,8924,1558],{"class":38},[28,8926,8927,8930,8932,8934],{"class":30,"line":2021},[28,8928,8929],{"class":38},"    t.age",[28,8931,54],{"class":34},[28,8933,1048],{"class":60},[28,8935,1558],{"class":38},[28,8937,8938,8941,8943,8946],{"class":30,"line":2026},[28,8939,8940],{"class":38},"    t.stu.name",[28,8942,54],{"class":34},[28,8944,8945],{"class":127},"\"小王\"",[28,8947,8948],{"class":38},"；\n",[28,8950,8951,8954,8956,8958],{"class":30,"line":2040},[28,8952,8953],{"class":38},"    t.stu.age",[28,8955,54],{"class":34},[28,8957,1098],{"class":60},[28,8959,1558],{"class":38},[28,8961,8962,8965,8967,8969],{"class":30,"line":2045},[28,8963,8964],{"class":38},"    t.stu.score",[28,8966,54],{"class":34},[28,8968,206],{"class":60},[28,8970,1558],{"class":38},[28,8972,8973],{"class":30,"line":2839},[28,8974,1830],{"class":38},[351,8976,8978],{"id":8977},"_45结构体做函数参数","4.5结构体做函数参数",[14,8980,8981],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[18,8983,8985],{"className":401,"code":8984,"language":403,"meta":23,"style":23},"#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",[25,8986,8987,8993,9003,9009,9015,9019,9023,9029,9035,9039,9044,9049,9066,9070,9103,9107,9112,9131,9135,9166,9170,9178,9182,9191,9203,9215,9227,9240,9248,9261,9273,9281],{"__ignoreMap":23},[28,8988,8989,8991],{"class":30,"line":31},[28,8990,2211],{"class":34},[28,8992,2214],{"class":127},[28,8994,8995,8997,8999,9001],{"class":30,"line":48},[28,8996,2219],{"class":34},[28,8998,2222],{"class":34},[28,9000,2226],{"class":2225},[28,9002,1558],{"class":38},[28,9004,9005,9007],{"class":30,"line":84},[28,9006,2211],{"class":34},[28,9008,8011],{"class":127},[28,9010,9011,9013],{"class":30,"line":91},[28,9012,8021],{"class":34},[28,9014,8024],{"class":2225},[28,9016,9017],{"class":30,"line":97},[28,9018,1811],{"class":38},[28,9020,9021],{"class":30,"line":103},[28,9022,8047],{"class":38},[28,9024,9025,9027],{"class":30,"line":109},[28,9026,2247],{"class":34},[28,9028,8059],{"class":38},[28,9030,9031,9033],{"class":30,"line":118},[28,9032,2247],{"class":34},[28,9034,8071],{"class":38},[28,9036,9037],{"class":30,"line":124},[28,9038,4257],{"class":38},[28,9040,9041],{"class":30,"line":131},[28,9042,9043],{"class":87},"\u002F\u002F打印学生信息的函数\n",[28,9045,9046],{"class":30,"line":137},[28,9047,9048],{"class":87},"\u002F\u002F值传递\n",[28,9050,9051,9053,9056,9058,9060,9062,9064],{"class":30,"line":143},[28,9052,5626],{"class":34},[28,9054,9055],{"class":2225}," printStudent1",[28,9057,413],{"class":38},[28,9059,8021],{"class":34},[28,9061,8160],{"class":2225},[28,9063,8690],{"class":5478},[28,9065,81],{"class":38},[28,9067,9068],{"class":30,"line":149},[28,9069,1811],{"class":38},[28,9071,9072,9074,9076,9079,9081,9084,9086,9089,9091,9093,9095,9098,9100],{"class":30,"line":1890},[28,9073,6791],{"class":38},[28,9075,1441],{"class":34},[28,9077,9078],{"class":38}," s.name ",[28,9080,1441],{"class":34},[28,9082,9083],{"class":127}," \" \"",[28,9085,1709],{"class":34},[28,9087,9088],{"class":38}," s.age ",[28,9090,1441],{"class":34},[28,9092,9083],{"class":127},[28,9094,1709],{"class":34},[28,9096,9097],{"class":38}," s.score ",[28,9099,1441],{"class":34},[28,9101,9102],{"class":38}," endl;\n",[28,9104,9105],{"class":30,"line":1904},[28,9106,1830],{"class":38},[28,9108,9109],{"class":30,"line":1909},[28,9110,9111],{"class":87},"\u002F\u002F地址传递\n",[28,9113,9114,9116,9119,9121,9123,9125,9127,9129],{"class":30,"line":1915},[28,9115,5626],{"class":34},[28,9117,9118],{"class":2225}," printStudent2",[28,9120,413],{"class":38},[28,9122,8021],{"class":34},[28,9124,8160],{"class":2225},[28,9126,6780],{"class":34},[28,9128,1093],{"class":5478},[28,9130,81],{"class":38},[28,9132,9133],{"class":30,"line":1936},[28,9134,1811],{"class":38},[28,9136,9137,9139,9141,9144,9146,9148,9150,9153,9155,9157,9159,9162,9164],{"class":30,"line":1941},[28,9138,6791],{"class":38},[28,9140,1441],{"class":34},[28,9142,9143],{"class":38}," s->name ",[28,9145,1441],{"class":34},[28,9147,9083],{"class":127},[28,9149,1709],{"class":34},[28,9151,9152],{"class":38}," s->age ",[28,9154,1441],{"class":34},[28,9156,9083],{"class":127},[28,9158,1709],{"class":34},[28,9160,9161],{"class":38}," s->score ",[28,9163,1441],{"class":34},[28,9165,9102],{"class":38},[28,9167,9168],{"class":30,"line":1955},[28,9169,1830],{"class":38},[28,9171,9172,9174,9176],{"class":30,"line":1960},[28,9173,416],{"class":34},[28,9175,2235],{"class":2225},[28,9177,2238],{"class":38},[28,9179,9180],{"class":30,"line":1989},[28,9181,1811],{"class":38},[28,9183,9184,9186,9188],{"class":30,"line":1994},[28,9185,8157],{"class":34},[28,9187,8160],{"class":2225},[28,9189,9190],{"class":38}," s;\n",[28,9192,9193,9196,9198,9201],{"class":30,"line":2011},[28,9194,9195],{"class":38},"    s.name ",[28,9197,54],{"class":34},[28,9199,9200],{"class":127}," \"张三\"",[28,9202,1558],{"class":38},[28,9204,9205,9208,9210,9213],{"class":30,"line":2016},[28,9206,9207],{"class":38},"    s.age ",[28,9209,54],{"class":34},[28,9211,9212],{"class":60}," 20",[28,9214,1558],{"class":38},[28,9216,9217,9220,9222,9225],{"class":30,"line":2021},[28,9218,9219],{"class":38},"    s.score ",[28,9221,54],{"class":34},[28,9223,9224],{"class":60}," 85",[28,9226,1558],{"class":38},[28,9228,9229,9231,9233,9236,9238],{"class":30,"line":2026},[28,9230,1816],{"class":38},[28,9232,1441],{"class":34},[28,9234,9235],{"class":127},"\"值传递:\"",[28,9237,1441],{"class":34},[28,9239,1463],{"class":38},[28,9241,9242,9245],{"class":30,"line":2040},[28,9243,9244],{"class":2225},"    printStudent1",[28,9246,9247],{"class":38},"(s);\n",[28,9249,9250,9252,9254,9257,9259],{"class":30,"line":2045},[28,9251,1816],{"class":38},[28,9253,1441],{"class":34},[28,9255,9256],{"class":127},"\"地址传递:\"",[28,9258,1441],{"class":34},[28,9260,1463],{"class":38},[28,9262,9263,9266,9268,9270],{"class":30,"line":2839},[28,9264,9265],{"class":2225},"    printStudent2",[28,9267,413],{"class":38},[28,9269,753],{"class":34},[28,9271,9272],{"class":38},"s); \n",[28,9274,9275,9277,9279],{"class":30,"line":2853},[28,9276,4352],{"class":34},[28,9278,4355],{"class":60},[28,9280,1558],{"class":38},[28,9282,9283],{"class":30,"line":2861},[28,9284,1830],{"class":38},[14,9286,9287],{},"注意：",[1404,9289,9290,9293],{},[366,9291,9292],{},"1.先定义结构体，不要在函数中写结构体的定义",[366,9294,9295],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[351,9297,9299],{"id":9298},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9301,9302],{},"用const防止误操作",[18,9304,9306],{"className":401,"code":9305,"language":403,"meta":23,"style":23},"#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",[25,9307,9308,9314,9324,9330,9335,9339,9343,9349,9355,9359,9375,9379,9402,9406,9414,9418,9439,9446,9450],{"__ignoreMap":23},[28,9309,9310,9312],{"class":30,"line":31},[28,9311,2211],{"class":34},[28,9313,2214],{"class":127},[28,9315,9316,9318,9320,9322],{"class":30,"line":48},[28,9317,2219],{"class":34},[28,9319,2222],{"class":34},[28,9321,2226],{"class":2225},[28,9323,1558],{"class":38},[28,9325,9326,9328],{"class":30,"line":84},[28,9327,2211],{"class":34},[28,9329,8011],{"class":127},[28,9331,9332],{"class":30,"line":91},[28,9333,9334],{"class":38},"sctuct Student\n",[28,9336,9337],{"class":30,"line":97},[28,9338,1811],{"class":38},[28,9340,9341],{"class":30,"line":103},[28,9342,8047],{"class":38},[28,9344,9345,9347],{"class":30,"line":109},[28,9346,2247],{"class":34},[28,9348,8059],{"class":38},[28,9350,9351,9353],{"class":30,"line":118},[28,9352,2247],{"class":34},[28,9354,8071],{"class":38},[28,9356,9357],{"class":30,"line":124},[28,9358,4257],{"class":38},[28,9360,9361,9363,9366,9368,9371,9373],{"class":30,"line":131},[28,9362,5626],{"class":34},[28,9364,9365],{"class":2225}," printStudents",[28,9367,413],{"class":38},[28,9369,9370],{"class":2225},"student",[28,9372,8690],{"class":5478},[28,9374,81],{"class":38},[28,9376,9377],{"class":30,"line":137},[28,9378,1811],{"class":38},[28,9380,9381,9383,9385,9388,9390,9393,9395,9398,9400],{"class":30,"line":143},[28,9382,1816],{"class":38},[28,9384,1441],{"class":34},[28,9386,9387],{"class":38},"s.name",[28,9389,1441],{"class":34},[28,9391,9392],{"class":38},"s.age",[28,9394,1441],{"class":34},[28,9396,9397],{"class":38},"s.score",[28,9399,1441],{"class":34},[28,9401,1463],{"class":38},[28,9403,9404],{"class":30,"line":149},[28,9405,1830],{"class":38},[28,9407,9408,9410,9412],{"class":30,"line":1890},[28,9409,416],{"class":34},[28,9411,2235],{"class":2225},[28,9413,6240],{"class":38},[28,9415,9416],{"class":30,"line":1904},[28,9417,1811],{"class":38},[28,9419,9420,9423,9425,9427,9429,9431,9433,9435,9437],{"class":30,"line":1909},[28,9421,9422],{"class":38},"    Student s",[28,9424,54],{"class":34},[28,9426,1293],{"class":38},[28,9428,8178],{"class":127},[28,9430,64],{"class":38},[28,9432,1048],{"class":60},[28,9434,64],{"class":38},[28,9436,1048],{"class":60},[28,9438,4257],{"class":38},[28,9440,9441,9444],{"class":30,"line":1915},[28,9442,9443],{"class":2225},"    printStudent",[28,9445,9247],{"class":38},[28,9447,9448],{"class":30,"line":1936},[28,9449,2662],{"emptyLinePlaceholder":336},[28,9451,9452],{"class":30,"line":1941},[28,9453,1830],{"class":38},[14,9455,9287],{},[1404,9457,9458,9461,9464],{},[366,9459,9460],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[366,9462,9463],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[366,9465,9466],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[18,9468,9470],{"className":401,"code":9469,"language":403,"meta":23,"style":23},"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",[25,9471,9472,9491,9495,9500,9520],{"__ignoreMap":23},[28,9473,9474,9476,9478,9480,9482,9485,9487,9489],{"class":30,"line":31},[28,9475,5626],{"class":34},[28,9477,9365],{"class":2225},[28,9479,413],{"class":38},[28,9481,7054],{"class":34},[28,9483,9484],{"class":2225}," student",[28,9486,6780],{"class":34},[28,9488,1093],{"class":5478},[28,9490,81],{"class":38},[28,9492,9493],{"class":30,"line":48},[28,9494,1811],{"class":38},[28,9496,9497],{"class":30,"line":84},[28,9498,9499],{"class":87},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[28,9501,9502,9504,9506,9508,9510,9512,9514,9516,9518],{"class":30,"line":91},[28,9503,1816],{"class":38},[28,9505,1441],{"class":34},[28,9507,9387],{"class":38},[28,9509,1441],{"class":34},[28,9511,9392],{"class":38},[28,9513,1441],{"class":34},[28,9515,9397],{"class":38},[28,9517,1441],{"class":34},[28,9519,1463],{"class":38},[28,9521,9522],{"class":30,"line":97},[28,9523,1830],{"class":38},[351,9525,9527],{"id":9526},"_47案例","4.7案例",[363,9529,9530],{},[366,9531,9532],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[18,9534,9536],{"className":401,"code":9535,"language":403,"meta":23,"style":23},"#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",[25,9537,9538,9544,9554,9560,9567,9571,9577,9581,9586,9592,9598,9602,9606,9612,9616,9621,9626,9639,9643,9648,9674,9678,9690,9717,9721,9733,9743,9747,9752,9781,9785,9797,9806,9833,9844,9854,9858,9862,9866,9871,9895,9899,9923,9927,9946,9972,9976,10001,10024,10048,10053,10058,10063,10072,10077,10083,10104,10110,10124,10130,10157,10166,10172,10180,10185],{"__ignoreMap":23},[28,9539,9540,9542],{"class":30,"line":31},[28,9541,2211],{"class":34},[28,9543,2214],{"class":127},[28,9545,9546,9548,9550,9552],{"class":30,"line":48},[28,9547,2219],{"class":34},[28,9549,2222],{"class":34},[28,9551,2226],{"class":2225},[28,9553,1558],{"class":38},[28,9555,9556,9558],{"class":30,"line":84},[28,9557,2211],{"class":34},[28,9559,8011],{"class":127},[28,9561,9562,9564],{"class":30,"line":91},[28,9563,2211],{"class":34},[28,9565,9566],{"class":127},"\u003Cctime>\n",[28,9568,9569],{"class":30,"line":97},[28,9570,8800],{"class":87},[28,9572,9573,9575],{"class":30,"line":103},[28,9574,8021],{"class":34},[28,9576,8024],{"class":2225},[28,9578,9579],{"class":30,"line":109},[28,9580,1811],{"class":38},[28,9582,9583],{"class":30,"line":118},[28,9584,9585],{"class":38},"    string sName;\n",[28,9587,9588,9590],{"class":30,"line":124},[28,9589,2247],{"class":34},[28,9591,8059],{"class":38},[28,9593,9594,9596],{"class":30,"line":131},[28,9595,2247],{"class":34},[28,9597,8071],{"class":38},[28,9599,9600],{"class":30,"line":137},[28,9601,4257],{"class":38},[28,9603,9604],{"class":30,"line":143},[28,9605,8837],{"class":87},[28,9607,9608,9610],{"class":30,"line":149},[28,9609,8021],{"class":34},[28,9611,8844],{"class":2225},[28,9613,9614],{"class":30,"line":1890},[28,9615,1811],{"class":38},[28,9617,9618],{"class":30,"line":1904},[28,9619,9620],{"class":38},"    string tName;\n",[28,9622,9623],{"class":30,"line":1909},[28,9624,9625],{"class":87},"    \u002F\u002F学生数组\n",[28,9627,9628,9630,9632,9635,9637],{"class":30,"line":1915},[28,9629,8157],{"class":34},[28,9631,8160],{"class":2225},[28,9633,9634],{"class":38}," sArray[",[28,9636,721],{"class":60},[28,9638,4952],{"class":38},[28,9640,9641],{"class":30,"line":1936},[28,9642,4257],{"class":38},[28,9644,9645],{"class":30,"line":1941},[28,9646,9647],{"class":87},"\u002F\u002F给老师和学生赋值的函数\n",[28,9649,9650,9652,9655,9657,9659,9662,9665,9668,9670,9672],{"class":30,"line":1955},[28,9651,5626],{"class":34},[28,9653,9654],{"class":2225}," allocateSpace",[28,9656,413],{"class":38},[28,9658,8021],{"class":34},[28,9660,9661],{"class":2225}," Teacher",[28,9663,9664],{"class":5478}," tArray",[28,9666,9667],{"class":38},"[],",[28,9669,416],{"class":34},[28,9671,7593],{"class":5478},[28,9673,81],{"class":38},[28,9675,9676],{"class":30,"line":1960},[28,9677,1811],{"class":38},[28,9679,9680,9683,9685,9688],{"class":30,"line":1989},[28,9681,9682],{"class":38},"    string nameSeed",[28,9684,54],{"class":34},[28,9686,9687],{"class":127},"\"ABCDE\"",[28,9689,1558],{"class":38},[28,9691,9692,9694,9696,9698,9701,9703,9705,9708,9710,9713,9715],{"class":30,"line":1994},[28,9693,3463],{"class":34},[28,9695,1920],{"class":38},[28,9697,416],{"class":34},[28,9699,9700],{"class":38}," i ",[28,9702,54],{"class":34},[28,9704,4355],{"class":60},[28,9706,9707],{"class":38},"; i ",[28,9709,1307],{"class":34},[28,9711,9712],{"class":38}," len; i",[28,9714,2554],{"class":34},[28,9716,81],{"class":38},[28,9718,9719],{"class":30,"line":2011},[28,9720,2292],{"class":38},[28,9722,9723,9726,9728,9731],{"class":30,"line":2016},[28,9724,9725],{"class":38},"        tArray[i].tName ",[28,9727,54],{"class":34},[28,9729,9730],{"class":127}," \"Teacher_\"",[28,9732,1558],{"class":38},[28,9734,9735,9737,9740],{"class":30,"line":2021},[28,9736,9725],{"class":38},[28,9738,9739],{"class":34},"+=",[28,9741,9742],{"class":38},"nameSeed[i];\n",[28,9744,9745],{"class":30,"line":2026},[28,9746,2662],{"emptyLinePlaceholder":336},[28,9748,9749],{"class":30,"line":2040},[28,9750,9751],{"class":87},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[28,9753,9754,9756,9758,9760,9763,9765,9767,9770,9772,9774,9777,9779],{"class":30,"line":2045},[28,9755,3665],{"class":34},[28,9757,1920],{"class":38},[28,9759,416],{"class":34},[28,9761,9762],{"class":38}," j ",[28,9764,54],{"class":34},[28,9766,4355],{"class":60},[28,9768,9769],{"class":38},"; j ",[28,9771,1307],{"class":34},[28,9773,2410],{"class":60},[28,9775,9776],{"class":38},"; j",[28,9778,2554],{"class":34},[28,9780,81],{"class":38},[28,9782,9783],{"class":30,"line":2839},[28,9784,2772],{"class":38},[28,9786,9787,9790,9792,9795],{"class":30,"line":2853},[28,9788,9789],{"class":38},"            tArray[i].sArray[j].sName ",[28,9791,54],{"class":34},[28,9793,9794],{"class":127}," \"Student_\"",[28,9796,1558],{"class":38},[28,9798,9799,9801,9803],{"class":30,"line":2861},[28,9800,9789],{"class":38},[28,9802,9739],{"class":34},[28,9804,9805],{"class":38}," nameSeed[j];\n",[28,9807,9808,9811,9814,9816,9818,9820,9822,9824,9826,9828,9830],{"class":30,"line":2866},[28,9809,9810],{"class":34},"            int",[28,9812,9813],{"class":38}," random",[28,9815,54],{"class":34},[28,9817,2686],{"class":2225},[28,9819,2689],{"class":38},[28,9821,729],{"class":34},[28,9823,1304],{"class":60},[28,9825,880],{"class":34},[28,9827,800],{"class":60},[28,9829,465],{"class":38},[28,9831,9832],{"class":87},"\u002F\u002F40~99\n",[28,9834,9835,9838,9840,9842],{"class":30,"line":2872},[28,9836,9837],{"class":38},"            tArray[i].sArray[j].age ",[28,9839,54],{"class":34},[28,9841,9212],{"class":60},[28,9843,1558],{"class":38},[28,9845,9846,9849,9851],{"class":30,"line":2878},[28,9847,9848],{"class":38},"            tArray[i].sArray[j].score ",[28,9850,54],{"class":34},[28,9852,9853],{"class":38}," random;\n",[28,9855,9856],{"class":30,"line":2883},[28,9857,2791],{"class":38},[28,9859,9860],{"class":30,"line":8210},[28,9861,2449],{"class":38},[28,9863,9864],{"class":30,"line":8234},[28,9865,1830],{"class":38},[28,9867,9868],{"class":30,"line":8239},[28,9869,9870],{"class":87},"\u002F\u002F打印所有信息的函数\n",[28,9872,9873,9875,9878,9880,9882,9884,9886,9889,9891,9893],{"class":30,"line":8245},[28,9874,5626],{"class":34},[28,9876,9877],{"class":2225}," printInfo",[28,9879,413],{"class":38},[28,9881,8021],{"class":34},[28,9883,9661],{"class":2225},[28,9885,9664],{"class":5478},[28,9887,9888],{"class":38},"[], ",[28,9890,416],{"class":34},[28,9892,7593],{"class":5478},[28,9894,81],{"class":38},[28,9896,9897],{"class":30,"line":8272},[28,9898,1811],{"class":38},[28,9900,9901,9903,9905,9907,9909,9911,9913,9915,9917,9919,9921],{"class":30,"line":8277},[28,9902,3463],{"class":34},[28,9904,1920],{"class":38},[28,9906,416],{"class":34},[28,9908,9700],{"class":38},[28,9910,54],{"class":34},[28,9912,4355],{"class":60},[28,9914,9707],{"class":38},[28,9916,1307],{"class":34},[28,9918,9712],{"class":38},[28,9920,2554],{"class":34},[28,9922,81],{"class":38},[28,9924,9925],{"class":30,"line":8283},[28,9926,2292],{"class":38},[28,9928,9929,9932,9934,9937,9939,9942,9944],{"class":30,"line":8295},[28,9930,9931],{"class":38},"        cout ",[28,9933,1441],{"class":34},[28,9935,9936],{"class":127}," \"Teacher: \"",[28,9938,1709],{"class":34},[28,9940,9941],{"class":38}," tArray[i].tName ",[28,9943,1441],{"class":34},[28,9945,9102],{"class":38},[28,9947,9948,9950,9952,9954,9956,9958,9960,9962,9964,9966,9968,9970],{"class":30,"line":8307},[28,9949,3665],{"class":34},[28,9951,1920],{"class":38},[28,9953,416],{"class":34},[28,9955,9762],{"class":38},[28,9957,54],{"class":34},[28,9959,4355],{"class":60},[28,9961,9769],{"class":38},[28,9963,1307],{"class":34},[28,9965,2410],{"class":60},[28,9967,9776],{"class":38},[28,9969,2554],{"class":34},[28,9971,81],{"class":38},[28,9973,9974],{"class":30,"line":8319},[28,9975,2772],{"class":38},[28,9977,9979,9982,9984,9987,9989,9992,9994,9997,9999],{"class":30,"line":9978},47,[28,9980,9981],{"class":38},"            cout ",[28,9983,1441],{"class":34},[28,9985,9986],{"class":127}," \"",[28,9988,1498],{"class":60},[28,9990,9991],{"class":127},"Student: \"",[28,9993,1709],{"class":34},[28,9995,9996],{"class":38}," tArray[i].sArray[j].sName",[28,9998,1441],{"class":34},[28,10000,1463],{"class":38},[28,10002,10004,10006,10008,10010,10012,10015,10017,10020,10022],{"class":30,"line":10003},48,[28,10005,9981],{"class":38},[28,10007,1441],{"class":34},[28,10009,9986],{"class":127},[28,10011,1498],{"class":60},[28,10013,10014],{"class":127},"Age: \"",[28,10016,1709],{"class":34},[28,10018,10019],{"class":38}," tArray[i].sArray[j].age ",[28,10021,1441],{"class":34},[28,10023,9102],{"class":38},[28,10025,10027,10029,10031,10033,10035,10038,10040,10043,10045],{"class":30,"line":10026},49,[28,10028,9981],{"class":38},[28,10030,1441],{"class":34},[28,10032,9986],{"class":127},[28,10034,1498],{"class":60},[28,10036,10037],{"class":127},"Score: \"",[28,10039,1709],{"class":34},[28,10041,10042],{"class":38}," tArray[i].sArray[j].score ",[28,10044,1441],{"class":34},[28,10046,10047],{"class":38}," endl;   \n",[28,10049,10051],{"class":30,"line":10050},50,[28,10052,2791],{"class":38},[28,10054,10056],{"class":30,"line":10055},51,[28,10057,2449],{"class":38},[28,10059,10061],{"class":30,"line":10060},52,[28,10062,1830],{"class":38},[28,10064,10066,10068,10070],{"class":30,"line":10065},53,[28,10067,416],{"class":34},[28,10069,2235],{"class":2225},[28,10071,2238],{"class":38},[28,10073,10075],{"class":30,"line":10074},54,[28,10076,1811],{"class":38},[28,10078,10080],{"class":30,"line":10079},55,[28,10081,10082],{"class":87},"    \u002F\u002F随机数种子\n",[28,10084,10086,10088,10090,10092,10094,10096,10098,10100,10102],{"class":30,"line":10085},56,[28,10087,2635],{"class":2225},[28,10089,2638],{"class":38},[28,10091,2641],{"class":34},[28,10093,2644],{"class":34},[28,10095,828],{"class":38},[28,10097,2649],{"class":2225},[28,10099,413],{"class":38},[28,10101,2654],{"class":60},[28,10103,2657],{"class":38},[28,10105,10107],{"class":30,"line":10106},57,[28,10108,10109],{"class":87},"    \u002F\u002F1.创建3名老师的数组\n",[28,10111,10113,10115,10117,10120,10122],{"class":30,"line":10112},58,[28,10114,8157],{"class":34},[28,10116,9661],{"class":2225},[28,10118,10119],{"class":38}," tArray[",[28,10121,78],{"class":60},[28,10123,4952],{"class":38},[28,10125,10127],{"class":30,"line":10126},59,[28,10128,10129],{"class":87},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[28,10131,10133,10135,10138,10140,10143,10146,10148,10150,10153,10155],{"class":30,"line":10132},60,[28,10134,2247],{"class":34},[28,10136,10137],{"class":38}," len ",[28,10139,54],{"class":34},[28,10141,10142],{"class":34}," sizeof",[28,10144,10145],{"class":38},"(tArray) ",[28,10147,982],{"class":34},[28,10149,10142],{"class":34},[28,10151,10152],{"class":38},"(tArray[",[28,10154,244],{"class":60},[28,10156,4118],{"class":38},[28,10158,10160,10163],{"class":30,"line":10159},61,[28,10161,10162],{"class":2225},"    allocateSpace",[28,10164,10165],{"class":38},"(tArray, len);\n",[28,10167,10169],{"class":30,"line":10168},62,[28,10170,10171],{"class":87},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[28,10173,10175,10178],{"class":30,"line":10174},63,[28,10176,10177],{"class":2225},"    printInfo",[28,10179,10165],{"class":38},[28,10181,10183],{"class":30,"line":10182},64,[28,10184,2662],{"emptyLinePlaceholder":336},[28,10186,10188],{"class":30,"line":10187},65,[28,10189,1830],{"class":38},[363,10191,10192],{"start":48},[366,10193,10194,10197],{},[555,10195,10196],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10199,10200],{},"五名英雄信息如下：",[18,10202,10206],{"className":10203,"code":10204,"language":10205,"meta":23,"style":23},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[25,10207,10208,10226,10243,10260,10277],{"__ignoreMap":23},[28,10209,10210,10212,10215,10217,10219,10221,10224],{"class":30,"line":31},[28,10211,5179],{"class":38},[28,10213,10214],{"class":127},"\"刘备\"",[28,10216,64],{"class":38},[28,10218,1173],{"class":60},[28,10220,64],{"class":38},[28,10222,10223],{"class":127},"\"男\"",[28,10225,5192],{"class":38},[28,10227,10228,10230,10233,10235,10237,10239,10241],{"class":30,"line":48},[28,10229,5179],{"class":38},[28,10231,10232],{"class":127},"\"关羽\"",[28,10234,64],{"class":38},[28,10236,1148],{"class":60},[28,10238,64],{"class":38},[28,10240,10223],{"class":127},[28,10242,5192],{"class":38},[28,10244,10245,10247,10250,10252,10254,10256,10258],{"class":30,"line":84},[28,10246,5179],{"class":38},[28,10248,10249],{"class":127},"\"张飞\"",[28,10251,64],{"class":38},[28,10253,1098],{"class":60},[28,10255,64],{"class":38},[28,10257,10223],{"class":127},[28,10259,5192],{"class":38},[28,10261,10262,10264,10267,10269,10271,10273,10275],{"class":30,"line":91},[28,10263,5179],{"class":38},[28,10265,10266],{"class":127},"\"赵云\"",[28,10268,64],{"class":38},[28,10270,1123],{"class":60},[28,10272,64],{"class":38},[28,10274,10223],{"class":127},[28,10276,5192],{"class":38},[28,10278,10279,10281,10284,10286,10288,10290,10293],{"class":30,"line":97},[28,10280,5179],{"class":38},[28,10282,10283],{"class":127},"\"貂蝉\"",[28,10285,64],{"class":38},[28,10287,1073],{"class":60},[28,10289,64],{"class":38},[28,10291,10292],{"class":127},"\"女\"",[28,10294,5192],{"class":38},[14,10296,10297],{},"代码：",[18,10299,10301],{"className":401,"code":10300,"language":403,"meta":23,"style":23},"#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",[25,10302,10303,10309,10319,10325,10332,10336,10340,10346,10351,10355,10360,10383,10387,10412,10416,10449,10454,10483,10488,10503,10529,10549,10554,10559,10563,10567,10572,10594,10598,10622,10626,10688,10692,10696,10704,10708,10713,10724,10728,10744,10760,10776,10792,10808,10812,10832,10854,10859,10872,10879,10884,10890,10895,10908,10914],{"__ignoreMap":23},[28,10304,10305,10307],{"class":30,"line":31},[28,10306,2211],{"class":34},[28,10308,2214],{"class":127},[28,10310,10311,10313,10315,10317],{"class":30,"line":48},[28,10312,2219],{"class":34},[28,10314,2222],{"class":34},[28,10316,2226],{"class":2225},[28,10318,1558],{"class":38},[28,10320,10321,10323],{"class":30,"line":84},[28,10322,2211],{"class":34},[28,10324,8011],{"class":127},[28,10326,10327,10329],{"class":30,"line":91},[28,10328,8021],{"class":34},[28,10330,10331],{"class":2225}," Sanguo\n",[28,10333,10334],{"class":30,"line":97},[28,10335,1811],{"class":38},[28,10337,10338],{"class":30,"line":103},[28,10339,8047],{"class":38},[28,10341,10342,10344],{"class":30,"line":109},[28,10343,2247],{"class":34},[28,10345,8059],{"class":38},[28,10347,10348],{"class":30,"line":118},[28,10349,10350],{"class":38},"    string gender;\n",[28,10352,10353],{"class":30,"line":124},[28,10354,4257],{"class":38},[28,10356,10357],{"class":30,"line":131},[28,10358,10359],{"class":87},"\u002F\u002F定义排序函数\n",[28,10361,10362,10364,10366,10368,10371,10373,10375,10377,10379,10381],{"class":30,"line":137},[28,10363,5626],{"class":34},[28,10365,7578],{"class":2225},[28,10367,413],{"class":38},[28,10369,10370],{"class":2225},"Sanguo",[28,10372,6780],{"class":34},[28,10374,1093],{"class":5478},[28,10376,64],{"class":38},[28,10378,416],{"class":34},[28,10380,7593],{"class":5478},[28,10382,81],{"class":38},[28,10384,10385],{"class":30,"line":143},[28,10386,1811],{"class":38},[28,10388,10389,10391,10393,10395,10397,10399,10401,10403,10405,10408,10410],{"class":30,"line":149},[28,10390,3463],{"class":34},[28,10392,413],{"class":38},[28,10394,416],{"class":34},[28,10396,3294],{"class":38},[28,10398,54],{"class":34},[28,10400,244],{"class":60},[28,10402,3301],{"class":38},[28,10404,1307],{"class":34},[28,10406,10407],{"class":38},"len;i",[28,10409,2554],{"class":34},[28,10411,81],{"class":38},[28,10413,10414],{"class":30,"line":1890},[28,10415,2292],{"class":38},[28,10417,10418,10421,10423,10425,10427,10429,10431,10433,10435,10437,10439,10441,10443,10445,10447],{"class":30,"line":1904},[28,10419,10420],{"class":34},"     for",[28,10422,1920],{"class":38},[28,10424,416],{"class":34},[28,10426,3672],{"class":38},[28,10428,54],{"class":34},[28,10430,244],{"class":60},[28,10432,3679],{"class":38},[28,10434,1307],{"class":34},[28,10436,7620],{"class":38},[28,10438,930],{"class":34},[28,10440,61],{"class":60},[28,10442,930],{"class":34},[28,10444,3812],{"class":38},[28,10446,2554],{"class":34},[28,10448,81],{"class":38},[28,10450,10451],{"class":30,"line":1909},[28,10452,10453],{"class":38},"     {\n",[28,10455,10456,10459,10462,10464,10467,10469,10472,10474,10476,10478,10480],{"class":30,"line":1915},[28,10457,10458],{"class":34},"         if",[28,10460,10461],{"class":38}," ((s",[28,10463,880],{"class":34},[28,10465,10466],{"class":38},"j)->age ",[28,10468,1357],{"class":34},[28,10470,10471],{"class":38}," (s",[28,10473,880],{"class":34},[28,10475,866],{"class":38},[28,10477,880],{"class":34},[28,10479,61],{"class":60},[28,10481,10482],{"class":38},")->age)\n",[28,10484,10485],{"class":30,"line":1936},[28,10486,10487],{"class":38},"         {\n",[28,10489,10490,10493,10495,10498,10500],{"class":30,"line":1941},[28,10491,10492],{"class":38},"             Sanguo temp",[28,10494,7415],{"class":34},[28,10496,10497],{"class":38},"(s",[28,10499,880],{"class":34},[28,10501,10502],{"class":38},"j);\n",[28,10504,10505,10508,10510,10512,10515,10517,10519,10521,10523,10525,10527],{"class":30,"line":1955},[28,10506,10507],{"class":34},"             *",[28,10509,10497],{"class":38},[28,10511,880],{"class":34},[28,10513,10514],{"class":38},"j)",[28,10516,7415],{"class":34},[28,10518,10497],{"class":38},[28,10520,880],{"class":34},[28,10522,866],{"class":38},[28,10524,880],{"class":34},[28,10526,61],{"class":60},[28,10528,2981],{"class":38},[28,10530,10531,10533,10535,10537,10539,10541,10543,10545,10547],{"class":30,"line":1960},[28,10532,10507],{"class":34},[28,10534,10497],{"class":38},[28,10536,880],{"class":34},[28,10538,866],{"class":38},[28,10540,880],{"class":34},[28,10542,61],{"class":60},[28,10544,828],{"class":38},[28,10546,54],{"class":34},[28,10548,4542],{"class":38},[28,10550,10551],{"class":30,"line":1989},[28,10552,10553],{"class":38},"         }\n",[28,10555,10556],{"class":30,"line":1994},[28,10557,10558],{"class":38},"     }\n",[28,10560,10561],{"class":30,"line":2011},[28,10562,2449],{"class":38},[28,10564,10565],{"class":30,"line":2016},[28,10566,1830],{"class":38},[28,10568,10569],{"class":30,"line":2021},[28,10570,10571],{"class":87},"\u002F\u002F定义打印函数\n",[28,10573,10574,10576,10578,10580,10582,10584,10586,10588,10590,10592],{"class":30,"line":2026},[28,10575,5626],{"class":34},[28,10577,9877],{"class":2225},[28,10579,413],{"class":38},[28,10581,10370],{"class":2225},[28,10583,6780],{"class":34},[28,10585,1093],{"class":5478},[28,10587,64],{"class":38},[28,10589,416],{"class":34},[28,10591,7593],{"class":5478},[28,10593,81],{"class":38},[28,10595,10596],{"class":30,"line":2040},[28,10597,1811],{"class":38},[28,10599,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620],{"class":30,"line":2045},[28,10601,3463],{"class":34},[28,10603,1920],{"class":38},[28,10605,416],{"class":34},[28,10607,3294],{"class":38},[28,10609,54],{"class":34},[28,10611,244],{"class":60},[28,10613,3301],{"class":38},[28,10615,1307],{"class":34},[28,10617,10407],{"class":38},[28,10619,2554],{"class":34},[28,10621,81],{"class":38},[28,10623,10624],{"class":30,"line":2839},[28,10625,2292],{"class":38},[28,10627,10628,10630,10632,10634,10636,10639,10641,10643,10645,10648,10650,10652,10654,10657,10659,10661,10663,10666,10668,10670,10672,10675,10677,10679,10681,10684,10686],{"class":30,"line":2853},[28,10629,3713],{"class":38},[28,10631,1441],{"class":34},[28,10633,654],{"class":127},[28,10635,1498],{"class":60},[28,10637,10638],{"class":127},"姓名：\"",[28,10640,1441],{"class":34},[28,10642,10497],{"class":38},[28,10644,880],{"class":34},[28,10646,10647],{"class":38},"i)->name",[28,10649,1441],{"class":34},[28,10651,654],{"class":127},[28,10653,1498],{"class":60},[28,10655,10656],{"class":127},"年龄：\"",[28,10658,1441],{"class":34},[28,10660,10497],{"class":38},[28,10662,880],{"class":34},[28,10664,10665],{"class":38},"i)->age",[28,10667,1441],{"class":34},[28,10669,654],{"class":127},[28,10671,1498],{"class":60},[28,10673,10674],{"class":127},"性别：\"",[28,10676,1441],{"class":34},[28,10678,10497],{"class":38},[28,10680,880],{"class":34},[28,10682,10683],{"class":38},"i)->gender",[28,10685,1441],{"class":34},[28,10687,1463],{"class":38},[28,10689,10690],{"class":30,"line":2861},[28,10691,2449],{"class":38},[28,10693,10694],{"class":30,"line":2866},[28,10695,1830],{"class":38},[28,10697,10698,10700,10702],{"class":30,"line":2872},[28,10699,416],{"class":34},[28,10701,2235],{"class":2225},[28,10703,2238],{"class":38},[28,10705,10706],{"class":30,"line":2878},[28,10707,1811],{"class":38},[28,10709,10710],{"class":30,"line":2883},[28,10711,10712],{"class":87},"    \u002F\u002F定义结构体变量\n",[28,10714,10715,10718,10720,10722],{"class":30,"line":8210},[28,10716,10717],{"class":38},"    Sanguo s1[",[28,10719,721],{"class":60},[28,10721,1337],{"class":38},[28,10723,5170],{"class":34},[28,10725,10726],{"class":30,"line":8234},[28,10727,2292],{"class":38},[28,10729,10730,10732,10734,10736,10738,10740,10742],{"class":30,"line":8239},[28,10731,5179],{"class":38},[28,10733,10214],{"class":127},[28,10735,64],{"class":38},[28,10737,1173],{"class":60},[28,10739,64],{"class":38},[28,10741,10223],{"class":127},[28,10743,5192],{"class":38},[28,10745,10746,10748,10750,10752,10754,10756,10758],{"class":30,"line":8245},[28,10747,5179],{"class":38},[28,10749,10232],{"class":127},[28,10751,64],{"class":38},[28,10753,1148],{"class":60},[28,10755,64],{"class":38},[28,10757,10223],{"class":127},[28,10759,5192],{"class":38},[28,10761,10762,10764,10766,10768,10770,10772,10774],{"class":30,"line":8272},[28,10763,5179],{"class":38},[28,10765,10249],{"class":127},[28,10767,64],{"class":38},[28,10769,1098],{"class":60},[28,10771,64],{"class":38},[28,10773,10223],{"class":127},[28,10775,5192],{"class":38},[28,10777,10778,10780,10782,10784,10786,10788,10790],{"class":30,"line":8277},[28,10779,5179],{"class":38},[28,10781,10266],{"class":127},[28,10783,64],{"class":38},[28,10785,1123],{"class":60},[28,10787,64],{"class":38},[28,10789,10223],{"class":127},[28,10791,5192],{"class":38},[28,10793,10794,10796,10798,10800,10802,10804,10806],{"class":30,"line":8283},[28,10795,5179],{"class":38},[28,10797,10283],{"class":127},[28,10799,64],{"class":38},[28,10801,1073],{"class":60},[28,10803,64],{"class":38},[28,10805,10292],{"class":127},[28,10807,5192],{"class":38},[28,10809,10810],{"class":30,"line":8295},[28,10811,5213],{"class":38},[28,10813,10814,10816,10818,10820,10823,10825,10828,10830],{"class":30,"line":8307},[28,10815,2247],{"class":34},[28,10817,7593],{"class":38},[28,10819,4465],{"class":34},[28,10821,10822],{"class":38},"(s1)",[28,10824,4471],{"class":34},[28,10826,10827],{"class":38},"(s1[",[28,10829,244],{"class":60},[28,10831,4118],{"class":38},[28,10833,10834,10837,10839,10842,10844,10847,10850,10852],{"class":30,"line":8319},[28,10835,10836],{"class":38},"    Sanguo ",[28,10838,854],{"class":34},[28,10840,10841],{"class":38},"s ",[28,10843,54],{"class":34},[28,10845,10846],{"class":34}," &",[28,10848,10849],{"class":38},"s1[",[28,10851,244],{"class":60},[28,10853,4952],{"class":38},[28,10855,10856],{"class":30,"line":9978},[28,10857,10858],{"class":87},"    \u002F\u002F排序前：\n",[28,10860,10861,10863,10865,10868,10870],{"class":30,"line":10003},[28,10862,6791],{"class":38},[28,10864,1441],{"class":34},[28,10866,10867],{"class":127}," \"排序前：\"",[28,10869,1709],{"class":34},[28,10871,9102],{"class":38},[28,10873,10874,10876],{"class":30,"line":10026},[28,10875,10177],{"class":2225},[28,10877,10878],{"class":38},"(s,len);\n",[28,10880,10881],{"class":30,"line":10050},[28,10882,10883],{"class":87},"    \u002F\u002F调用排序函数\n",[28,10885,10886,10888],{"class":30,"line":10055},[28,10887,7860],{"class":2225},[28,10889,10878],{"class":38},[28,10891,10892],{"class":30,"line":10060},[28,10893,10894],{"class":87},"    \u002F\u002F排序后\n",[28,10896,10897,10899,10901,10904,10906],{"class":30,"line":10065},[28,10898,6791],{"class":38},[28,10900,1441],{"class":34},[28,10902,10903],{"class":127}," \"排序后：\"",[28,10905,1709],{"class":34},[28,10907,9102],{"class":38},[28,10909,10910,10912],{"class":30,"line":10074},[28,10911,10177],{"class":2225},[28,10913,10878],{"class":38},[28,10915,10916],{"class":30,"line":10079},[28,10917,1830],{"class":38},[14,10919,10920,10921,10923],{},"注意：使用指针时直接用传首地址**&s",[28,10922,244],{},"**",[328,10925,10926],{},"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":23,"searchDepth":48,"depth":48,"links":10928},[10929,10930,10931,10932,10933,10934,10935],{"id":7965,"depth":48,"text":7966},{"id":8327,"depth":48,"text":8328},{"id":8596,"depth":48,"text":8597},{"id":8761,"depth":48,"text":8762},{"id":8977,"depth":48,"text":8978},{"id":9298,"depth":48,"text":9299},{"id":9526,"depth":48,"text":9527},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7954,"description":7962},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10942,"title":10943,"body":10944,"description":23,"extension":334,"meta":12287,"navigation":336,"path":12288,"seo":12289,"stem":12290,"__hash__":12291},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10945,"toc":12281},[10946,10949,10953,10959,10973,10978,10981,10985,10992,10998,11001,11008,11014,11019,11022,11025,11028,11592,11595,11609,11613,11618,11634,11774,11777,11783,11786,11791,11799,11907,11910,11915,11918,11923,11926,11932,11935,12278],[10,10947,10943],{"id":10948},"_5程序内存模型",[351,10950,10952],{"id":10951},"_51内存分区模型","5.1内存分区模型",[14,10954,10955,10956],{},"C++程序在执行时，将内存大方向划分为",[555,10957,10958],{},"4个区域",[1404,10960,10961,10964,10967,10970],{},[366,10962,10963],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[366,10965,10966],{},"全局区：存放全局变量和静态变量以及常量",[366,10968,10969],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[366,10971,10972],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10974,10975],{},[555,10976,10977],{},"内存四区意义：",[14,10979,10980],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[380,10982,10984],{"id":10983},"_511程序运行前","5.1.1程序运行前",[14,10986,10987,10988,10991],{},"​\t在程序编译后，生成了exe可执行程序，",[555,10989,10990],{},"未执行该程序前","分为两个区域",[14,10993,10994,10995],{},"​\t",[555,10996,10997],{},"代码区：",[14,10999,11000],{},"​\t\t存放 CPU 执行的机器指令",[14,11002,11003,11004,11007],{},"​\t\t代码区是",[555,11005,11006],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11009,11003,11010,11013],{},[555,11011,11012],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11015,10994,11016],{},[555,11017,11018],{},"全局区：",[14,11020,11021],{},"​\t\t全局变量和静态变量存放在此.",[14,11023,11024],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11026,11027],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[18,11029,11031],{"className":401,"code":11030,"language":403,"meta":23,"style":23},"\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",[25,11032,11033,11038,11051,11064,11068,11073,11088,11103,11107,11116,11120,11125,11138,11151,11155,11160,11186,11212,11216,11243,11269,11273,11278,11294,11309,11313,11339,11365,11369,11394,11419,11423,11449,11475,11479,11495,11510,11536,11562,11566,11576,11580,11588],{"__ignoreMap":23},[28,11034,11035],{"class":30,"line":31},[28,11036,11037],{"class":87},"\u002F\u002F全局变量\n",[28,11039,11040,11042,11045,11047,11049],{"class":30,"line":48},[28,11041,416],{"class":34},[28,11043,11044],{"class":38}," g_a ",[28,11046,54],{"class":34},[28,11048,2300],{"class":60},[28,11050,1558],{"class":38},[28,11052,11053,11055,11058,11060,11062],{"class":30,"line":84},[28,11054,416],{"class":34},[28,11056,11057],{"class":38}," g_b ",[28,11059,54],{"class":34},[28,11061,2300],{"class":60},[28,11063,1558],{"class":38},[28,11065,11066],{"class":30,"line":91},[28,11067,2662],{"emptyLinePlaceholder":336},[28,11069,11070],{"class":30,"line":97},[28,11071,11072],{"class":87},"\u002F\u002F全局常量\n",[28,11074,11075,11077,11079,11082,11084,11086],{"class":30,"line":103},[28,11076,7054],{"class":34},[28,11078,2644],{"class":34},[28,11080,11081],{"class":38}," c_g_a ",[28,11083,54],{"class":34},[28,11085,2300],{"class":60},[28,11087,1558],{"class":38},[28,11089,11090,11092,11094,11097,11099,11101],{"class":30,"line":109},[28,11091,7054],{"class":34},[28,11093,2644],{"class":34},[28,11095,11096],{"class":38}," c_g_b ",[28,11098,54],{"class":34},[28,11100,2300],{"class":60},[28,11102,1558],{"class":38},[28,11104,11105],{"class":30,"line":118},[28,11106,2662],{"emptyLinePlaceholder":336},[28,11108,11109,11111,11113],{"class":30,"line":124},[28,11110,416],{"class":34},[28,11112,2235],{"class":2225},[28,11114,11115],{"class":38},"() {\n",[28,11117,11118],{"class":30,"line":131},[28,11119,2662],{"emptyLinePlaceholder":336},[28,11121,11122],{"class":30,"line":137},[28,11123,11124],{"class":87},"    \u002F\u002F局部变量\n",[28,11126,11127,11129,11132,11134,11136],{"class":30,"line":143},[28,11128,2247],{"class":34},[28,11130,11131],{"class":38}," a ",[28,11133,54],{"class":34},[28,11135,2300],{"class":60},[28,11137,1558],{"class":38},[28,11139,11140,11142,11145,11147,11149],{"class":30,"line":149},[28,11141,2247],{"class":34},[28,11143,11144],{"class":38}," b ",[28,11146,54],{"class":34},[28,11148,2300],{"class":60},[28,11150,1558],{"class":38},[28,11152,11153],{"class":30,"line":1890},[28,11154,2662],{"emptyLinePlaceholder":336},[28,11156,11157],{"class":30,"line":1904},[28,11158,11159],{"class":87},"    \u002F\u002F打印地址\n",[28,11161,11162,11164,11166,11169,11171,11173,11175,11177,11179,11182,11184],{"class":30,"line":1909},[28,11163,6791],{"class":38},[28,11165,1441],{"class":34},[28,11167,11168],{"class":127}," \"局部变量a地址为： \"",[28,11170,1709],{"class":34},[28,11172,1920],{"class":38},[28,11174,416],{"class":34},[28,11176,828],{"class":38},[28,11178,753],{"class":34},[28,11180,11181],{"class":38},"a ",[28,11183,1441],{"class":34},[28,11185,9102],{"class":38},[28,11187,11188,11190,11192,11195,11197,11199,11201,11203,11205,11208,11210],{"class":30,"line":1915},[28,11189,6791],{"class":38},[28,11191,1441],{"class":34},[28,11193,11194],{"class":127}," \"局部变量b地址为： \"",[28,11196,1709],{"class":34},[28,11198,1920],{"class":38},[28,11200,416],{"class":34},[28,11202,828],{"class":38},[28,11204,753],{"class":34},[28,11206,11207],{"class":38},"b ",[28,11209,1441],{"class":34},[28,11211,9102],{"class":38},[28,11213,11214],{"class":30,"line":1936},[28,11215,2662],{"emptyLinePlaceholder":336},[28,11217,11218,11220,11222,11225,11227,11230,11232,11234,11236,11239,11241],{"class":30,"line":1941},[28,11219,6791],{"class":38},[28,11221,1441],{"class":34},[28,11223,11224],{"class":127}," \"全局变量g_a地址为： \"",[28,11226,1709],{"class":34},[28,11228,11229],{"class":38},"  (",[28,11231,416],{"class":34},[28,11233,828],{"class":38},[28,11235,753],{"class":34},[28,11237,11238],{"class":38},"g_a ",[28,11240,1441],{"class":34},[28,11242,9102],{"class":38},[28,11244,11245,11247,11249,11252,11254,11256,11258,11260,11262,11265,11267],{"class":30,"line":1955},[28,11246,6791],{"class":38},[28,11248,1441],{"class":34},[28,11250,11251],{"class":127}," \"全局变量g_b地址为： \"",[28,11253,1709],{"class":34},[28,11255,11229],{"class":38},[28,11257,416],{"class":34},[28,11259,828],{"class":38},[28,11261,753],{"class":34},[28,11263,11264],{"class":38},"g_b ",[28,11266,1441],{"class":34},[28,11268,9102],{"class":38},[28,11270,11271],{"class":30,"line":1960},[28,11272,2662],{"emptyLinePlaceholder":336},[28,11274,11275],{"class":30,"line":1989},[28,11276,11277],{"class":87},"    \u002F\u002F静态变量\n",[28,11279,11280,11283,11285,11288,11290,11292],{"class":30,"line":1994},[28,11281,11282],{"class":34},"    static",[28,11284,2644],{"class":34},[28,11286,11287],{"class":38}," s_a ",[28,11289,54],{"class":34},[28,11291,2300],{"class":60},[28,11293,1558],{"class":38},[28,11295,11296,11298,11300,11303,11305,11307],{"class":30,"line":2011},[28,11297,11282],{"class":34},[28,11299,2644],{"class":34},[28,11301,11302],{"class":38}," s_b ",[28,11304,54],{"class":34},[28,11306,2300],{"class":60},[28,11308,1558],{"class":38},[28,11310,11311],{"class":30,"line":2016},[28,11312,2662],{"emptyLinePlaceholder":336},[28,11314,11315,11317,11319,11322,11324,11326,11328,11330,11332,11335,11337],{"class":30,"line":2021},[28,11316,6791],{"class":38},[28,11318,1441],{"class":34},[28,11320,11321],{"class":127}," \"静态变量s_a地址为： \"",[28,11323,1709],{"class":34},[28,11325,1920],{"class":38},[28,11327,416],{"class":34},[28,11329,828],{"class":38},[28,11331,753],{"class":34},[28,11333,11334],{"class":38},"s_a ",[28,11336,1441],{"class":34},[28,11338,9102],{"class":38},[28,11340,11341,11343,11345,11348,11350,11352,11354,11356,11358,11361,11363],{"class":30,"line":2026},[28,11342,6791],{"class":38},[28,11344,1441],{"class":34},[28,11346,11347],{"class":127}," \"静态变量s_b地址为： \"",[28,11349,1709],{"class":34},[28,11351,1920],{"class":38},[28,11353,416],{"class":34},[28,11355,828],{"class":38},[28,11357,753],{"class":34},[28,11359,11360],{"class":38},"s_b ",[28,11362,1441],{"class":34},[28,11364,9102],{"class":38},[28,11366,11367],{"class":30,"line":2040},[28,11368,2662],{"emptyLinePlaceholder":336},[28,11370,11371,11373,11375,11378,11380,11382,11384,11386,11388,11390,11392],{"class":30,"line":2045},[28,11372,6791],{"class":38},[28,11374,1441],{"class":34},[28,11376,11377],{"class":127}," \"字符串常量地址为： \"",[28,11379,1709],{"class":34},[28,11381,1920],{"class":38},[28,11383,416],{"class":34},[28,11385,828],{"class":38},[28,11387,753],{"class":34},[28,11389,1458],{"class":127},[28,11391,1709],{"class":34},[28,11393,9102],{"class":38},[28,11395,11396,11398,11400,11402,11404,11406,11408,11410,11412,11415,11417],{"class":30,"line":2839},[28,11397,6791],{"class":38},[28,11399,1441],{"class":34},[28,11401,11377],{"class":127},[28,11403,1709],{"class":34},[28,11405,1920],{"class":38},[28,11407,416],{"class":34},[28,11409,828],{"class":38},[28,11411,753],{"class":34},[28,11413,11414],{"class":127},"\"hello world1\"",[28,11416,1709],{"class":34},[28,11418,9102],{"class":38},[28,11420,11421],{"class":30,"line":2853},[28,11422,2662],{"emptyLinePlaceholder":336},[28,11424,11425,11427,11429,11432,11434,11436,11438,11440,11442,11445,11447],{"class":30,"line":2861},[28,11426,6791],{"class":38},[28,11428,1441],{"class":34},[28,11430,11431],{"class":127}," \"全局常量c_g_a地址为： \"",[28,11433,1709],{"class":34},[28,11435,1920],{"class":38},[28,11437,416],{"class":34},[28,11439,828],{"class":38},[28,11441,753],{"class":34},[28,11443,11444],{"class":38},"c_g_a ",[28,11446,1441],{"class":34},[28,11448,9102],{"class":38},[28,11450,11451,11453,11455,11458,11460,11462,11464,11466,11468,11471,11473],{"class":30,"line":2866},[28,11452,6791],{"class":38},[28,11454,1441],{"class":34},[28,11456,11457],{"class":127}," \"全局常量c_g_b地址为： \"",[28,11459,1709],{"class":34},[28,11461,1920],{"class":38},[28,11463,416],{"class":34},[28,11465,828],{"class":38},[28,11467,753],{"class":34},[28,11469,11470],{"class":38},"c_g_b ",[28,11472,1441],{"class":34},[28,11474,9102],{"class":38},[28,11476,11477],{"class":30,"line":2872},[28,11478,2662],{"emptyLinePlaceholder":336},[28,11480,11481,11484,11486,11489,11491,11493],{"class":30,"line":2878},[28,11482,11483],{"class":34},"    const",[28,11485,2644],{"class":34},[28,11487,11488],{"class":38}," c_l_a ",[28,11490,54],{"class":34},[28,11492,2300],{"class":60},[28,11494,1558],{"class":38},[28,11496,11497,11499,11501,11504,11506,11508],{"class":30,"line":2883},[28,11498,11483],{"class":34},[28,11500,2644],{"class":34},[28,11502,11503],{"class":38}," c_l_b ",[28,11505,54],{"class":34},[28,11507,2300],{"class":60},[28,11509,1558],{"class":38},[28,11511,11512,11514,11516,11519,11521,11523,11525,11527,11529,11532,11534],{"class":30,"line":8210},[28,11513,6791],{"class":38},[28,11515,1441],{"class":34},[28,11517,11518],{"class":127}," \"局部常量c_l_a地址为： \"",[28,11520,1709],{"class":34},[28,11522,1920],{"class":38},[28,11524,416],{"class":34},[28,11526,828],{"class":38},[28,11528,753],{"class":34},[28,11530,11531],{"class":38},"c_l_a ",[28,11533,1441],{"class":34},[28,11535,9102],{"class":38},[28,11537,11538,11540,11542,11545,11547,11549,11551,11553,11555,11558,11560],{"class":30,"line":8234},[28,11539,6791],{"class":38},[28,11541,1441],{"class":34},[28,11543,11544],{"class":127}," \"局部常量c_l_b地址为： \"",[28,11546,1709],{"class":34},[28,11548,1920],{"class":38},[28,11550,416],{"class":34},[28,11552,828],{"class":38},[28,11554,753],{"class":34},[28,11556,11557],{"class":38},"c_l_b ",[28,11559,1441],{"class":34},[28,11561,9102],{"class":38},[28,11563,11564],{"class":30,"line":8239},[28,11565,2662],{"emptyLinePlaceholder":336},[28,11567,11568,11570,11572,11574],{"class":30,"line":8245},[28,11569,2565],{"class":2225},[28,11571,413],{"class":38},[28,11573,2570],{"class":127},[28,11575,2981],{"class":38},[28,11577,11578],{"class":30,"line":8272},[28,11579,2662],{"emptyLinePlaceholder":336},[28,11581,11582,11584,11586],{"class":30,"line":8277},[28,11583,4352],{"class":34},[28,11585,4355],{"class":60},[28,11587,1558],{"class":38},[28,11589,11590],{"class":30,"line":8283},[28,11591,1830],{"class":38},[14,11593,11594],{},"总结：",[1404,11596,11597,11600,11603,11606],{},[366,11598,11599],{},"c++中程序运行前分为全局区和代码区",[366,11601,11602],{},"代码区特点是共享和只读",[366,11604,11605],{},"全局区中存放全局变量、静态变量、常量",[366,11607,11608],{},"常量区中存放const修饰的全局常量和字符串常量",[380,11610,11612],{"id":11611},"_512程序运行后","5.1.2程序运行后",[363,11614,11615],{},[366,11616,11617],{},"栈区：",[1404,11619,11620,11627],{},[366,11621,11622,11623,11626],{},"由编译器自动分配释放, 存放",[555,11624,11625],{},"函数的参数值,局部变量","等",[366,11628,11629,11630,11633],{},"注意事项：",[555,11631,11632],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[18,11635,11637],{"className":401,"code":11636,"language":403,"meta":23,"style":23},"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",[25,11638,11639,11650,11654,11669,11681,11685,11689,11697,11702,11717,11735,11752,11762,11770],{"__ignoreMap":23},[28,11640,11641,11643,11645,11648],{"class":30,"line":31},[28,11642,416],{"class":34},[28,11644,6780],{"class":34},[28,11646,11647],{"class":2225}," func",[28,11649,2238],{"class":38},[28,11651,11652],{"class":30,"line":48},[28,11653,1811],{"class":38},[28,11655,11656,11658,11660,11662,11664,11666],{"class":30,"line":84},[28,11657,2247],{"class":34},[28,11659,11131],{"class":38},[28,11661,54],{"class":34},[28,11663,2300],{"class":60},[28,11665,465],{"class":38},[28,11667,11668],{"class":87}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[28,11670,11671,11673,11675,11678],{"class":30,"line":91},[28,11672,4352],{"class":34},[28,11674,10846],{"class":34},[28,11676,11677],{"class":38},"a;",[28,11679,11680],{"class":87}," \u002F\u002F放回局部变量的地址\n",[28,11682,11683],{"class":30,"line":97},[28,11684,1830],{"class":38},[28,11686,11687],{"class":30,"line":103},[28,11688,2662],{"emptyLinePlaceholder":336},[28,11690,11691,11693,11695],{"class":30,"line":109},[28,11692,416],{"class":34},[28,11694,2235],{"class":2225},[28,11696,11115],{"class":38},[28,11698,11699],{"class":30,"line":118},[28,11700,11701],{"class":87},"    \u002F\u002F接受func的返回值\n",[28,11703,11704,11706,11708,11711,11713,11715],{"class":30,"line":124},[28,11705,2247],{"class":34},[28,11707,6780],{"class":34},[28,11709,11710],{"class":38},"p ",[28,11712,54],{"class":34},[28,11714,11647],{"class":2225},[28,11716,5898],{"class":38},[28,11718,11719,11721,11723,11725,11727,11729,11732],{"class":30,"line":131},[28,11720,6791],{"class":38},[28,11722,1441],{"class":34},[28,11724,6780],{"class":34},[28,11726,11710],{"class":38},[28,11728,1441],{"class":34},[28,11730,11731],{"class":38}," endl;",[28,11733,11734],{"class":87}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[28,11736,11737,11739,11741,11743,11745,11747,11749],{"class":30,"line":137},[28,11738,6791],{"class":38},[28,11740,1441],{"class":34},[28,11742,6780],{"class":34},[28,11744,11710],{"class":38},[28,11746,1441],{"class":34},[28,11748,11731],{"class":38},[28,11750,11751],{"class":87}," \u002F\u002F第二次这个数据不再保留\n",[28,11753,11754,11756,11758,11760],{"class":30,"line":143},[28,11755,2565],{"class":2225},[28,11757,413],{"class":38},[28,11759,2570],{"class":127},[28,11761,2981],{"class":38},[28,11763,11764,11766,11768],{"class":30,"line":149},[28,11765,4352],{"class":34},[28,11767,4355],{"class":60},[28,11769,1558],{"class":38},[28,11771,11772],{"class":30,"line":1890},[28,11773,1830],{"class":38},[14,11775,11776],{},"输出结果：",[14,11778,11779],{},[1727,11780],{"alt":11781,"src":11782},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11784,11785],{},"总结：不要返回局部变量的地址",[363,11787,11788],{"start":48},[366,11789,11790],{},"堆区",[1404,11792,11793,11796],{},[366,11794,11795],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[366,11797,11798],{},"在c++中主要利用new在堆区开辟内存",[18,11800,11802],{"className":401,"code":11801,"language":403,"meta":23,"style":23},"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",[25,11803,11804,11819,11823,11828,11849,11856,11860,11868,11872,11877,11891,11903],{"__ignoreMap":23},[28,11805,11806,11808,11811,11814,11816],{"class":30,"line":31},[28,11807,416],{"class":34},[28,11809,11810],{"class":34},"  *",[28,11812,11813],{"class":2225},"func",[28,11815,2689],{"class":38},[28,11817,11818],{"class":87},"  \u002F\u002F函数返回指针\n",[28,11820,11821],{"class":30,"line":48},[28,11822,1811],{"class":38},[28,11824,11825],{"class":30,"line":84},[28,11826,11827],{"class":87},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[28,11829,11830,11832,11834,11836,11838,11841,11843,11845,11847],{"class":30,"line":91},[28,11831,4409],{"class":34},[28,11833,6780],{"class":34},[28,11835,14],{"class":38},[28,11837,54],{"class":34},[28,11839,11840],{"class":34}," new",[28,11842,2644],{"class":34},[28,11844,413],{"class":38},[28,11846,845],{"class":60},[28,11848,2981],{"class":38},[28,11850,11851,11853],{"class":30,"line":97},[28,11852,4643],{"class":34},[28,11854,11855],{"class":38}," p;\n",[28,11857,11858],{"class":30,"line":103},[28,11859,1830],{"class":38},[28,11861,11862,11864,11866],{"class":30,"line":109},[28,11863,416],{"class":34},[28,11865,2235],{"class":2225},[28,11867,2238],{"class":38},[28,11869,11870],{"class":30,"line":118},[28,11871,1811],{"class":38},[28,11873,11874],{"class":30,"line":124},[28,11875,11876],{"class":87},"    \u002F\u002F在堆区开辟数据\n",[28,11878,11879,11881,11883,11885,11887,11889],{"class":30,"line":131},[28,11880,2247],{"class":34},[28,11882,6780],{"class":34},[28,11884,14],{"class":38},[28,11886,54],{"class":34},[28,11888,11813],{"class":2225},[28,11890,5898],{"class":38},[28,11892,11893,11895,11897,11899,11901],{"class":30,"line":137},[28,11894,1816],{"class":38},[28,11896,6681],{"class":34},[28,11898,14],{"class":38},[28,11900,1441],{"class":34},[28,11902,1463],{"class":38},[28,11904,11905],{"class":30,"line":143},[28,11906,1830],{"class":38},[14,11908,11909],{},"图片展示：",[14,11911,11912],{},[1727,11913],{"alt":11781,"src":11914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11916,11917],{},"堆区内存由程序员管生死！！！",[363,11919,11920],{"start":84},[366,11921,11922],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11924,11925],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11927,11928,11929],{},"​语法：",[25,11930,11931],{}," new 数据类型",[14,11933,11934],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[18,11936,11938],{"className":401,"code":11937,"language":403,"meta":23,"style":23},"\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",[25,11939,11940,11945,11955,11959,11964,11969,11991,11995,12003,12007,12021,12033,12045,12057,12062,12067,12078,12082,12087,12095,12099,12104,12126,12152,12156,12174,12178,12204,12208,12220,12224,12229,12234,12242,12246,12250,12258,12262,12268,12274],{"__ignoreMap":23},[28,11941,11942],{"class":30,"line":31},[28,11943,11944],{"class":87},"\u002F\u002F1.new的基本语法\n",[28,11946,11947,11949,11951,11953],{"class":30,"line":48},[28,11948,416],{"class":34},[28,11950,6780],{"class":34},[28,11952,11813],{"class":2225},[28,11954,2238],{"class":38},[28,11956,11957],{"class":30,"line":84},[28,11958,1811],{"class":38},[28,11960,11961],{"class":30,"line":91},[28,11962,11963],{"class":87},"    \u002F\u002F在堆区创建整型数据\n",[28,11965,11966],{"class":30,"line":97},[28,11967,11968],{"class":87},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[28,11970,11971,11973,11975,11977,11980,11982,11984,11986,11988],{"class":30,"line":103},[28,11972,2247],{"class":34},[28,11974,6780],{"class":34},[28,11976,14],{"class":38},[28,11978,11979],{"class":34},"=new",[28,11981,2644],{"class":34},[28,11983,413],{"class":38},[28,11985,845],{"class":60},[28,11987,6228],{"class":38},[28,11989,11990],{"class":87},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[28,11992,11993],{"class":30,"line":109},[28,11994,1830],{"class":38},[28,11996,11997,11999,12001],{"class":30,"line":118},[28,11998,5626],{"class":34},[28,12000,5850],{"class":2225},[28,12002,2238],{"class":38},[28,12004,12005],{"class":30,"line":124},[28,12006,1811],{"class":38},[28,12008,12009,12011,12013,12015,12017,12019],{"class":30,"line":131},[28,12010,2247],{"class":34},[28,12012,6780],{"class":34},[28,12014,14],{"class":38},[28,12016,54],{"class":34},[28,12018,11813],{"class":2225},[28,12020,5898],{"class":38},[28,12022,12023,12025,12027,12029,12031],{"class":30,"line":137},[28,12024,1816],{"class":38},[28,12026,6681],{"class":34},[28,12028,14],{"class":38},[28,12030,1441],{"class":34},[28,12032,1463],{"class":38},[28,12034,12035,12037,12039,12041,12043],{"class":30,"line":143},[28,12036,1816],{"class":38},[28,12038,6681],{"class":34},[28,12040,14],{"class":38},[28,12042,1441],{"class":34},[28,12044,1463],{"class":38},[28,12046,12047,12049,12051,12053,12055],{"class":30,"line":149},[28,12048,1816],{"class":38},[28,12050,6681],{"class":34},[28,12052,14],{"class":38},[28,12054,1441],{"class":34},[28,12056,1463],{"class":38},[28,12058,12059],{"class":30,"line":1890},[28,12060,12061],{"class":87},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[28,12063,12064],{"class":30,"line":1904},[28,12065,12066],{"class":87},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[28,12068,12069,12072,12075],{"class":30,"line":1909},[28,12070,12071],{"class":34},"    delete",[28,12073,12074],{"class":38}," p;",[28,12076,12077],{"class":87},"\u002F\u002F删除这块地址\n",[28,12079,12080],{"class":30,"line":1915},[28,12081,1830],{"class":38},[28,12083,12084],{"class":30,"line":1936},[28,12085,12086],{"class":87},"\u002F\u002F2.在堆区利用new开辟数组\n",[28,12088,12089,12091,12093],{"class":30,"line":1941},[28,12090,5626],{"class":34},[28,12092,5919],{"class":2225},[28,12094,2238],{"class":38},[28,12096,12097],{"class":30,"line":1955},[28,12098,1811],{"class":38},[28,12100,12101],{"class":30,"line":1960},[28,12102,12103],{"class":87},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[28,12105,12106,12108,12110,12112,12114,12116,12118,12120,12123],{"class":30,"line":1989},[28,12107,2247],{"class":34},[28,12109,6780],{"class":34},[28,12111,4142],{"class":38},[28,12113,11979],{"class":34},[28,12115,2644],{"class":34},[28,12117,1287],{"class":38},[28,12119,845],{"class":60},[28,12121,12122],{"class":38},"];",[28,12124,12125],{"class":87},"\u002F\u002F10代表数组有10个元素\n",[28,12127,12128,12130,12132,12134,12136,12138,12140,12142,12144,12146,12148,12150],{"class":30,"line":1994},[28,12129,3463],{"class":34},[28,12131,1920],{"class":38},[28,12133,416],{"class":34},[28,12135,3294],{"class":38},[28,12137,54],{"class":34},[28,12139,244],{"class":60},[28,12141,3301],{"class":38},[28,12143,1307],{"class":34},[28,12145,845],{"class":60},[28,12147,3301],{"class":38},[28,12149,2554],{"class":34},[28,12151,81],{"class":38},[28,12153,12154],{"class":30,"line":2011},[28,12155,2292],{"class":38},[28,12157,12158,12161,12163,12165,12167,12169,12171],{"class":30,"line":2016},[28,12159,12160],{"class":38},"        arr[i]",[28,12162,54],{"class":34},[28,12164,840],{"class":38},[28,12166,880],{"class":34},[28,12168,713],{"class":60},[28,12170,465],{"class":38},[28,12172,12173],{"class":87},"\u002F\u002F给10个元素赋值100～109\n",[28,12175,12176],{"class":30,"line":2021},[28,12177,2449],{"class":38},[28,12179,12180,12182,12184,12186,12188,12190,12192,12194,12196,12198,12200,12202],{"class":30,"line":2026},[28,12181,3463],{"class":34},[28,12183,1920],{"class":38},[28,12185,416],{"class":34},[28,12187,3294],{"class":38},[28,12189,54],{"class":34},[28,12191,244],{"class":60},[28,12193,3301],{"class":38},[28,12195,1307],{"class":34},[28,12197,845],{"class":60},[28,12199,3301],{"class":38},[28,12201,2554],{"class":34},[28,12203,81],{"class":38},[28,12205,12206],{"class":30,"line":2040},[28,12207,2292],{"class":38},[28,12209,12210,12212,12214,12216,12218],{"class":30,"line":2045},[28,12211,3713],{"class":38},[28,12213,1441],{"class":34},[28,12215,4616],{"class":38},[28,12217,1441],{"class":34},[28,12219,1463],{"class":38},[28,12221,12222],{"class":30,"line":2839},[28,12223,2449],{"class":38},[28,12225,12226],{"class":30,"line":2853},[28,12227,12228],{"class":87},"    \u002F\u002F释放堆区数组\n",[28,12230,12231],{"class":30,"line":2861},[28,12232,12233],{"class":87},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[28,12235,12236,12239],{"class":30,"line":2866},[28,12237,12238],{"class":34},"    delete[]",[28,12240,12241],{"class":38}," arr;\n",[28,12243,12244],{"class":30,"line":2872},[28,12245,1830],{"class":38},[28,12247,12248],{"class":30,"line":2878},[28,12249,2662],{"emptyLinePlaceholder":336},[28,12251,12252,12254,12256],{"class":30,"line":2883},[28,12253,416],{"class":34},[28,12255,2235],{"class":2225},[28,12257,2238],{"class":38},[28,12259,12260],{"class":30,"line":8210},[28,12261,1811],{"class":38},[28,12263,12264,12266],{"class":30,"line":8234},[28,12265,5895],{"class":2225},[28,12267,5898],{"class":38},[28,12269,12270,12272],{"class":30,"line":8239},[28,12271,5964],{"class":2225},[28,12273,5898],{"class":38},[28,12275,12276],{"class":30,"line":8245},[28,12277,1830],{"class":38},[328,12279,12280],{},"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":23,"searchDepth":48,"depth":48,"links":12282},[12283],{"id":10951,"depth":48,"text":10952,"children":12284},[12285,12286],{"id":10983,"depth":84,"text":10984},{"id":11611,"depth":84,"text":11612},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10943,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12293,"title":12294,"body":12295,"description":23,"extension":334,"meta":13776,"navigation":336,"path":13777,"seo":13778,"stem":13779,"__hash__":13780},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12296,"toc":13768},[12297,12300,12304,12307,12310,12479,12483,12488,12505,12510,12662,12666,12669,12672,13066,13070,13073,13078,13081,13393,13397,13403,13563,13565,13573,13577,13580,13587,13765],[10,12298,12294],{"id":12299},"_6引用",[351,12301,12303],{"id":12302},"_61引用基本用法","6.1引用基本用法",[14,12305,12306],{},"引用的本质：给变量起别名",[14,12308,12309],{},"语法：数据类型 &别名=原名",[18,12311,12313],{"className":401,"code":12312,"language":403,"meta":23,"style":23},"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",[25,12314,12315,12323,12327,12339,12351,12355,12374,12393,12397,12408,12412,12431,12449,12453,12463,12467,12475],{"__ignoreMap":23},[28,12316,12317,12319,12321],{"class":30,"line":31},[28,12318,416],{"class":34},[28,12320,2235],{"class":2225},[28,12322,11115],{"class":38},[28,12324,12325],{"class":30,"line":48},[28,12326,2662],{"emptyLinePlaceholder":336},[28,12328,12329,12331,12333,12335,12337],{"class":30,"line":84},[28,12330,2247],{"class":34},[28,12332,11131],{"class":38},[28,12334,54],{"class":34},[28,12336,2300],{"class":60},[28,12338,1558],{"class":38},[28,12340,12341,12343,12345,12347,12349],{"class":30,"line":91},[28,12342,2247],{"class":34},[28,12344,10846],{"class":34},[28,12346,11207],{"class":38},[28,12348,54],{"class":34},[28,12350,1697],{"class":38},[28,12352,12353],{"class":30,"line":97},[28,12354,2662],{"emptyLinePlaceholder":336},[28,12356,12357,12359,12361,12364,12366,12368,12370,12372],{"class":30,"line":103},[28,12358,6791],{"class":38},[28,12360,1441],{"class":34},[28,12362,12363],{"class":127}," \"a = \"",[28,12365,1709],{"class":34},[28,12367,11131],{"class":38},[28,12369,1441],{"class":34},[28,12371,11731],{"class":38},[28,12373,7530],{"class":87},[28,12375,12376,12378,12380,12383,12385,12387,12389,12391],{"class":30,"line":109},[28,12377,6791],{"class":38},[28,12379,1441],{"class":34},[28,12381,12382],{"class":127}," \"b = \"",[28,12384,1709],{"class":34},[28,12386,11144],{"class":38},[28,12388,1441],{"class":34},[28,12390,11731],{"class":38},[28,12392,7530],{"class":87},[28,12394,12395],{"class":30,"line":118},[28,12396,2662],{"emptyLinePlaceholder":336},[28,12398,12399,12402,12404,12406],{"class":30,"line":124},[28,12400,12401],{"class":38},"    b ",[28,12403,54],{"class":34},[28,12405,6016],{"class":60},[28,12407,1558],{"class":38},[28,12409,12410],{"class":30,"line":131},[28,12411,2662],{"emptyLinePlaceholder":336},[28,12413,12414,12416,12418,12420,12422,12424,12426,12428],{"class":30,"line":137},[28,12415,6791],{"class":38},[28,12417,1441],{"class":34},[28,12419,12363],{"class":127},[28,12421,1709],{"class":34},[28,12423,11131],{"class":38},[28,12425,1441],{"class":34},[28,12427,11731],{"class":38},[28,12429,12430],{"class":87},"\u002F\u002F100\n",[28,12432,12433,12435,12437,12439,12441,12443,12445,12447],{"class":30,"line":143},[28,12434,6791],{"class":38},[28,12436,1441],{"class":34},[28,12438,12382],{"class":127},[28,12440,1709],{"class":34},[28,12442,11144],{"class":38},[28,12444,1441],{"class":34},[28,12446,11731],{"class":38},[28,12448,12430],{"class":87},[28,12450,12451],{"class":30,"line":149},[28,12452,2662],{"emptyLinePlaceholder":336},[28,12454,12455,12457,12459,12461],{"class":30,"line":1890},[28,12456,2565],{"class":2225},[28,12458,413],{"class":38},[28,12460,2570],{"class":127},[28,12462,2981],{"class":38},[28,12464,12465],{"class":30,"line":1904},[28,12466,2662],{"emptyLinePlaceholder":336},[28,12468,12469,12471,12473],{"class":30,"line":1909},[28,12470,4352],{"class":34},[28,12472,4355],{"class":60},[28,12474,1558],{"class":38},[28,12476,12477],{"class":30,"line":1915},[28,12478,1830],{"class":38},[351,12480,12482],{"id":12481},"_62引用的注意事项","6.2引用的注意事项",[363,12484,12485],{},[366,12486,12487],{},"引用必须要初始化",[18,12489,12491],{"className":401,"code":12490,"language":403,"meta":23,"style":23},"int &b;\u002F\u002F非常错误！\n",[25,12492,12493],{"__ignoreMap":23},[28,12494,12495,12497,12499,12502],{"class":30,"line":31},[28,12496,416],{"class":34},[28,12498,10846],{"class":34},[28,12500,12501],{"class":38},"b;",[28,12503,12504],{"class":87},"\u002F\u002F非常错误！\n",[363,12506,12507],{"start":48},[366,12508,12509],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[18,12511,12513],{"className":401,"code":12512,"language":403,"meta":23,"style":23},"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",[25,12514,12515,12523,12535,12547,12555,12571,12584,12602,12620,12640,12650,12658],{"__ignoreMap":23},[28,12516,12517,12519,12521],{"class":30,"line":31},[28,12518,416],{"class":34},[28,12520,2235],{"class":2225},[28,12522,11115],{"class":38},[28,12524,12525,12527,12529,12531,12533],{"class":30,"line":48},[28,12526,2247],{"class":34},[28,12528,11131],{"class":38},[28,12530,54],{"class":34},[28,12532,2300],{"class":60},[28,12534,1558],{"class":38},[28,12536,12537,12539,12541,12543,12545],{"class":30,"line":84},[28,12538,2247],{"class":34},[28,12540,11144],{"class":38},[28,12542,54],{"class":34},[28,12544,9212],{"class":60},[28,12546,1558],{"class":38},[28,12548,12549,12552],{"class":30,"line":91},[28,12550,12551],{"class":87},"    \u002F\u002Fint &c;",[28,12553,12554],{"class":87}," \u002F\u002F错误，引用必须初始化\n",[28,12556,12557,12559,12561,12563,12565,12568],{"class":30,"line":97},[28,12558,2247],{"class":34},[28,12560,10846],{"class":34},[28,12562,3208],{"class":38},[28,12564,54],{"class":34},[28,12566,12567],{"class":38}," a;",[28,12569,12570],{"class":87}," \u002F\u002F一旦初始化后，就不可以更改\n",[28,12572,12573,12576,12578,12581],{"class":30,"line":103},[28,12574,12575],{"class":38},"    c ",[28,12577,54],{"class":34},[28,12579,12580],{"class":38}," b;",[28,12582,12583],{"class":87}," \u002F\u002F这是赋值操作，不是更改引用\n",[28,12585,12586,12588,12590,12592,12594,12596,12598,12600],{"class":30,"line":109},[28,12587,6791],{"class":38},[28,12589,1441],{"class":34},[28,12591,12363],{"class":127},[28,12593,1709],{"class":34},[28,12595,11131],{"class":38},[28,12597,1441],{"class":34},[28,12599,11731],{"class":38},[28,12601,7515],{"class":87},[28,12603,12604,12606,12608,12610,12612,12614,12616,12618],{"class":30,"line":118},[28,12605,6791],{"class":38},[28,12607,1441],{"class":34},[28,12609,12382],{"class":127},[28,12611,1709],{"class":34},[28,12613,11144],{"class":38},[28,12615,1441],{"class":34},[28,12617,11731],{"class":38},[28,12619,7515],{"class":87},[28,12621,12622,12624,12626,12629,12631,12634,12636,12638],{"class":30,"line":124},[28,12623,6791],{"class":38},[28,12625,1441],{"class":34},[28,12627,12628],{"class":127}," \"c = \"",[28,12630,1709],{"class":34},[28,12632,12633],{"class":38}," c ",[28,12635,1441],{"class":34},[28,12637,11731],{"class":38},[28,12639,7515],{"class":87},[28,12641,12642,12644,12646,12648],{"class":30,"line":131},[28,12643,2565],{"class":2225},[28,12645,413],{"class":38},[28,12647,2570],{"class":127},[28,12649,2981],{"class":38},[28,12651,12652,12654,12656],{"class":30,"line":137},[28,12653,4352],{"class":34},[28,12655,4355],{"class":60},[28,12657,1558],{"class":38},[28,12659,12660],{"class":30,"line":143},[28,12661,1830],{"class":38},[351,12663,12665],{"id":12664},"_63引用做函数参数","6.3引用做函数参数",[14,12667,12668],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12670,12671],{},"优点：可以简化指针修改实参",[18,12673,12675],{"className":401,"code":12674,"language":403,"meta":23,"style":23},"\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",[25,12676,12677,12682,12705,12716,12726,12735,12739,12743,12748,12770,12782,12794,12804,12808,12812,12817,12839,12849,12857,12865,12869,12873,12881,12885,12897,12909,12913,12924,12950,12954,12974,12998,13002,13012,13036,13040,13050,13054,13062],{"__ignoreMap":23},[28,12678,12679],{"class":30,"line":31},[28,12680,12681],{"class":87},"\u002F\u002F1. 值传递\n",[28,12683,12684,12686,12689,12691,12693,12695,12698,12700,12702],{"class":30,"line":48},[28,12685,5626],{"class":34},[28,12687,12688],{"class":2225}," mySwap01",[28,12690,413],{"class":38},[28,12692,416],{"class":34},[28,12694,1663],{"class":5478},[28,12696,12697],{"class":38},", ",[28,12699,416],{"class":34},[28,12701,3095],{"class":5478},[28,12703,12704],{"class":38},") {\n",[28,12706,12707,12709,12712,12714],{"class":30,"line":84},[28,12708,2247],{"class":34},[28,12710,12711],{"class":38}," temp ",[28,12713,54],{"class":34},[28,12715,1697],{"class":38},[28,12717,12718,12721,12723],{"class":30,"line":91},[28,12719,12720],{"class":38},"    a ",[28,12722,54],{"class":34},[28,12724,12725],{"class":38}," b;\n",[28,12727,12728,12730,12732],{"class":30,"line":97},[28,12729,12401],{"class":38},[28,12731,54],{"class":34},[28,12733,12734],{"class":38}," temp;\n",[28,12736,12737],{"class":30,"line":103},[28,12738,1830],{"class":38},[28,12740,12741],{"class":30,"line":109},[28,12742,2662],{"emptyLinePlaceholder":336},[28,12744,12745],{"class":30,"line":118},[28,12746,12747],{"class":87},"\u002F\u002F2. 地址传递\n",[28,12749,12750,12752,12755,12757,12760,12762,12764,12766,12768],{"class":30,"line":124},[28,12751,5626],{"class":34},[28,12753,12754],{"class":2225}," mySwap02",[28,12756,413],{"class":38},[28,12758,12759],{"class":34},"int*",[28,12761,1663],{"class":5478},[28,12763,12697],{"class":38},[28,12765,12759],{"class":34},[28,12767,3095],{"class":5478},[28,12769,12704],{"class":38},[28,12771,12772,12774,12776,12778,12780],{"class":30,"line":131},[28,12773,2247],{"class":34},[28,12775,12711],{"class":38},[28,12777,54],{"class":34},[28,12779,6780],{"class":34},[28,12781,6459],{"class":38},[28,12783,12784,12786,12788,12790,12792],{"class":30,"line":137},[28,12785,6665],{"class":34},[28,12787,11181],{"class":38},[28,12789,54],{"class":34},[28,12791,6780],{"class":34},[28,12793,6331],{"class":38},[28,12795,12796,12798,12800,12802],{"class":30,"line":143},[28,12797,6665],{"class":34},[28,12799,11207],{"class":38},[28,12801,54],{"class":34},[28,12803,12734],{"class":38},[28,12805,12806],{"class":30,"line":149},[28,12807,1830],{"class":38},[28,12809,12810],{"class":30,"line":1890},[28,12811,2662],{"emptyLinePlaceholder":336},[28,12813,12814],{"class":30,"line":1904},[28,12815,12816],{"class":87},"\u002F\u002F3. 引用传递\n",[28,12818,12819,12821,12824,12826,12829,12831,12833,12835,12837],{"class":30,"line":1909},[28,12820,5626],{"class":34},[28,12822,12823],{"class":2225}," mySwap03",[28,12825,413],{"class":38},[28,12827,12828],{"class":34},"int&",[28,12830,1663],{"class":5478},[28,12832,12697],{"class":38},[28,12834,12828],{"class":34},[28,12836,3095],{"class":5478},[28,12838,12704],{"class":38},[28,12840,12841,12843,12845,12847],{"class":30,"line":1915},[28,12842,2247],{"class":34},[28,12844,12711],{"class":38},[28,12846,54],{"class":34},[28,12848,1697],{"class":38},[28,12850,12851,12853,12855],{"class":30,"line":1936},[28,12852,12720],{"class":38},[28,12854,54],{"class":34},[28,12856,12725],{"class":38},[28,12858,12859,12861,12863],{"class":30,"line":1941},[28,12860,12401],{"class":38},[28,12862,54],{"class":34},[28,12864,12734],{"class":38},[28,12866,12867],{"class":30,"line":1955},[28,12868,1830],{"class":38},[28,12870,12871],{"class":30,"line":1960},[28,12872,2662],{"emptyLinePlaceholder":336},[28,12874,12875,12877,12879],{"class":30,"line":1989},[28,12876,416],{"class":34},[28,12878,2235],{"class":2225},[28,12880,11115],{"class":38},[28,12882,12883],{"class":30,"line":1994},[28,12884,2662],{"emptyLinePlaceholder":336},[28,12886,12887,12889,12891,12893,12895],{"class":30,"line":2011},[28,12888,2247],{"class":34},[28,12890,11131],{"class":38},[28,12892,54],{"class":34},[28,12894,2300],{"class":60},[28,12896,1558],{"class":38},[28,12898,12899,12901,12903,12905,12907],{"class":30,"line":2016},[28,12900,2247],{"class":34},[28,12902,11144],{"class":38},[28,12904,54],{"class":34},[28,12906,9212],{"class":60},[28,12908,1558],{"class":38},[28,12910,12911],{"class":30,"line":2021},[28,12912,2662],{"emptyLinePlaceholder":336},[28,12914,12915,12918,12921],{"class":30,"line":2026},[28,12916,12917],{"class":2225},"    mySwap01",[28,12919,12920],{"class":38},"(a, b);",[28,12922,12923],{"class":87},"\u002F\u002F值传递，形参不会修饰实参\n",[28,12925,12926,12928,12930,12933,12935,12937,12939,12942,12944,12946,12948],{"class":30,"line":2040},[28,12927,6791],{"class":38},[28,12929,1441],{"class":34},[28,12931,12932],{"class":127}," \"a:\"",[28,12934,1709],{"class":34},[28,12936,11131],{"class":38},[28,12938,1441],{"class":34},[28,12940,12941],{"class":127}," \" b:\"",[28,12943,1709],{"class":34},[28,12945,11144],{"class":38},[28,12947,1441],{"class":34},[28,12949,9102],{"class":38},[28,12951,12952],{"class":30,"line":2045},[28,12953,2662],{"emptyLinePlaceholder":336},[28,12955,12956,12959,12961,12963,12966,12968,12971],{"class":30,"line":2839},[28,12957,12958],{"class":2225},"    mySwap02",[28,12960,413],{"class":38},[28,12962,753],{"class":34},[28,12964,12965],{"class":38},"a, ",[28,12967,753],{"class":34},[28,12969,12970],{"class":38},"b);",[28,12972,12973],{"class":87},"\u002F\u002F地址传递，形参会修饰实参\n",[28,12975,12976,12978,12980,12982,12984,12986,12988,12990,12992,12994,12996],{"class":30,"line":2853},[28,12977,6791],{"class":38},[28,12979,1441],{"class":34},[28,12981,12932],{"class":127},[28,12983,1709],{"class":34},[28,12985,11131],{"class":38},[28,12987,1441],{"class":34},[28,12989,12941],{"class":127},[28,12991,1709],{"class":34},[28,12993,11144],{"class":38},[28,12995,1441],{"class":34},[28,12997,9102],{"class":38},[28,12999,13000],{"class":30,"line":2861},[28,13001,2662],{"emptyLinePlaceholder":336},[28,13003,13004,13007,13009],{"class":30,"line":2866},[28,13005,13006],{"class":2225},"    mySwap03",[28,13008,12920],{"class":38},[28,13010,13011],{"class":87},"\u002F\u002F引用传递，形参会修饰实参\n",[28,13013,13014,13016,13018,13020,13022,13024,13026,13028,13030,13032,13034],{"class":30,"line":2872},[28,13015,6791],{"class":38},[28,13017,1441],{"class":34},[28,13019,12932],{"class":127},[28,13021,1709],{"class":34},[28,13023,11131],{"class":38},[28,13025,1441],{"class":34},[28,13027,12941],{"class":127},[28,13029,1709],{"class":34},[28,13031,11144],{"class":38},[28,13033,1441],{"class":34},[28,13035,9102],{"class":38},[28,13037,13038],{"class":30,"line":2878},[28,13039,2662],{"emptyLinePlaceholder":336},[28,13041,13042,13044,13046,13048],{"class":30,"line":2883},[28,13043,2565],{"class":2225},[28,13045,413],{"class":38},[28,13047,2570],{"class":127},[28,13049,2981],{"class":38},[28,13051,13052],{"class":30,"line":8210},[28,13053,2662],{"emptyLinePlaceholder":336},[28,13055,13056,13058,13060],{"class":30,"line":8234},[28,13057,4352],{"class":34},[28,13059,4355],{"class":60},[28,13061,1558],{"class":38},[28,13063,13064],{"class":30,"line":8239},[28,13065,1830],{"class":38},[351,13067,13069],{"id":13068},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13071,13072],{},"作用：引用是可以作为函数的返回值存在的",[14,13074,9287,13075],{},[555,13076,13077],{},"不要返回局部变量引用",[14,13079,13080],{},"用法：函数调用作为左值",[18,13082,13084],{"className":10203,"code":13083,"language":10205,"meta":23,"style":23},"\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",[25,13085,13086,13091,13099,13114,13120,13124,13128,13133,13141,13158,13164,13168,13172,13180,13184,13189,13203,13223,13242,13246,13251,13264,13284,13302,13306,13322,13326,13345,13363,13367,13377,13381,13389],{"__ignoreMap":23},[28,13087,13088],{"class":30,"line":31},[28,13089,13090],{"class":87},"\u002F\u002F返回局部变量引用\n",[28,13092,13093,13095,13097],{"class":30,"line":48},[28,13094,12828],{"class":34},[28,13096,5850],{"class":2225},[28,13098,11115],{"class":38},[28,13100,13101,13103,13105,13107,13109,13111],{"class":30,"line":84},[28,13102,2247],{"class":34},[28,13104,11131],{"class":38},[28,13106,54],{"class":34},[28,13108,2300],{"class":60},[28,13110,465],{"class":38},[28,13112,13113],{"class":87}," \u002F\u002F局部变量\n",[28,13115,13116,13118],{"class":30,"line":91},[28,13117,4352],{"class":34},[28,13119,1697],{"class":38},[28,13121,13122],{"class":30,"line":97},[28,13123,1830],{"class":38},[28,13125,13126],{"class":30,"line":103},[28,13127,2662],{"emptyLinePlaceholder":336},[28,13129,13130],{"class":30,"line":109},[28,13131,13132],{"class":87},"\u002F\u002F返回静态变量引用\n",[28,13134,13135,13137,13139],{"class":30,"line":118},[28,13136,12828],{"class":34},[28,13138,5919],{"class":2225},[28,13140,11115],{"class":38},[28,13142,13143,13145,13147,13149,13151,13153,13155],{"class":30,"line":124},[28,13144,11282],{"class":34},[28,13146,2644],{"class":34},[28,13148,11131],{"class":38},[28,13150,54],{"class":34},[28,13152,9212],{"class":60},[28,13154,465],{"class":38},[28,13156,13157],{"class":87},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[28,13159,13160,13162],{"class":30,"line":131},[28,13161,4352],{"class":34},[28,13163,1697],{"class":38},[28,13165,13166],{"class":30,"line":137},[28,13167,1830],{"class":38},[28,13169,13170],{"class":30,"line":143},[28,13171,2662],{"emptyLinePlaceholder":336},[28,13173,13174,13176,13178],{"class":30,"line":149},[28,13175,416],{"class":34},[28,13177,2235],{"class":2225},[28,13179,11115],{"class":38},[28,13181,13182],{"class":30,"line":1890},[28,13183,2662],{"emptyLinePlaceholder":336},[28,13185,13186],{"class":30,"line":1904},[28,13187,13188],{"class":87},"    \u002F\u002F不能返回局部变量的引用\n",[28,13190,13191,13194,13197,13199,13201],{"class":30,"line":1909},[28,13192,13193],{"class":34},"    int&",[28,13195,13196],{"class":38}," ref ",[28,13198,54],{"class":34},[28,13200,5850],{"class":2225},[28,13202,5898],{"class":38},[28,13204,13205,13207,13209,13212,13214,13216,13218,13220],{"class":30,"line":1915},[28,13206,6791],{"class":38},[28,13208,1441],{"class":34},[28,13210,13211],{"class":127}," \"ref = \"",[28,13213,1709],{"class":34},[28,13215,13196],{"class":38},[28,13217,1441],{"class":34},[28,13219,11731],{"class":38},[28,13221,13222],{"class":87},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[28,13224,13225,13227,13229,13231,13233,13235,13237,13239],{"class":30,"line":1936},[28,13226,6791],{"class":38},[28,13228,1441],{"class":34},[28,13230,13211],{"class":127},[28,13232,1709],{"class":34},[28,13234,13196],{"class":38},[28,13236,1441],{"class":34},[28,13238,11731],{"class":38},[28,13240,13241],{"class":87},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[28,13243,13244],{"class":30,"line":1941},[28,13245,2662],{"emptyLinePlaceholder":336},[28,13247,13248],{"class":30,"line":1955},[28,13249,13250],{"class":87},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[28,13252,13253,13255,13258,13260,13262],{"class":30,"line":1960},[28,13254,13193],{"class":34},[28,13256,13257],{"class":38}," ref2 ",[28,13259,54],{"class":34},[28,13261,5919],{"class":2225},[28,13263,5898],{"class":38},[28,13265,13266,13268,13270,13273,13275,13277,13279,13281],{"class":30,"line":1989},[28,13267,6791],{"class":38},[28,13269,1441],{"class":34},[28,13271,13272],{"class":127}," \"ref2 = \"",[28,13274,1709],{"class":34},[28,13276,13257],{"class":38},[28,13278,1441],{"class":34},[28,13280,11731],{"class":38},[28,13282,13283],{"class":87}," \u002F\u002F20\n",[28,13285,13286,13288,13290,13292,13294,13296,13298,13300],{"class":30,"line":1994},[28,13287,6791],{"class":38},[28,13289,1441],{"class":34},[28,13291,13272],{"class":127},[28,13293,1709],{"class":34},[28,13295,13257],{"class":38},[28,13297,1441],{"class":34},[28,13299,11731],{"class":38},[28,13301,13283],{"class":87},[28,13303,13304],{"class":30,"line":2011},[28,13305,2662],{"emptyLinePlaceholder":336},[28,13307,13308,13310,13313,13315,13317,13319],{"class":30,"line":2016},[28,13309,5964],{"class":2225},[28,13311,13312],{"class":38},"() ",[28,13314,54],{"class":34},[28,13316,3261],{"class":60},[28,13318,465],{"class":38},[28,13320,13321],{"class":87},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[28,13323,13324],{"class":30,"line":2021},[28,13325,2662],{"emptyLinePlaceholder":336},[28,13327,13328,13330,13332,13334,13336,13338,13340,13342],{"class":30,"line":2026},[28,13329,6791],{"class":38},[28,13331,1441],{"class":34},[28,13333,13272],{"class":127},[28,13335,1709],{"class":34},[28,13337,13257],{"class":38},[28,13339,1441],{"class":34},[28,13341,11731],{"class":38},[28,13343,13344],{"class":87}," \u002F\u002F1000\n",[28,13346,13347,13349,13351,13353,13355,13357,13359,13361],{"class":30,"line":2040},[28,13348,6791],{"class":38},[28,13350,1441],{"class":34},[28,13352,13272],{"class":127},[28,13354,1709],{"class":34},[28,13356,13257],{"class":38},[28,13358,1441],{"class":34},[28,13360,11731],{"class":38},[28,13362,13344],{"class":87},[28,13364,13365],{"class":30,"line":2045},[28,13366,2662],{"emptyLinePlaceholder":336},[28,13368,13369,13371,13373,13375],{"class":30,"line":2839},[28,13370,2565],{"class":2225},[28,13372,413],{"class":38},[28,13374,2570],{"class":127},[28,13376,2981],{"class":38},[28,13378,13379],{"class":30,"line":2853},[28,13380,2662],{"emptyLinePlaceholder":336},[28,13382,13383,13385,13387],{"class":30,"line":2861},[28,13384,4352],{"class":34},[28,13386,4355],{"class":60},[28,13388,1558],{"class":38},[28,13390,13391],{"class":30,"line":2866},[28,13392,1830],{"class":38},[351,13394,13396],{"id":13395},"_65引用的本质","6.5引用的本质",[14,13398,13399,13400],{},"本质：",[555,13401,13402],{},"引用的本质在c++内部实现是一个指针常量.",[18,13404,13406],{"className":401,"code":13405,"language":403,"meta":23,"style":23},"\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",[25,13407,13408,13413,13429,13443,13447,13456,13468,13473,13478,13489,13502,13506,13522,13539,13543,13551,13559],{"__ignoreMap":23},[28,13409,13410],{"class":30,"line":31},[28,13411,13412],{"class":87},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[28,13414,13415,13417,13419,13421,13423,13426],{"class":30,"line":48},[28,13416,5626],{"class":34},[28,13418,11647],{"class":2225},[28,13420,413],{"class":38},[28,13422,12828],{"class":34},[28,13424,13425],{"class":5478}," ref",[28,13427,13428],{"class":38},"){\n",[28,13430,13431,13434,13436,13438,13440],{"class":30,"line":84},[28,13432,13433],{"class":38},"    ref ",[28,13435,54],{"class":34},[28,13437,6016],{"class":60},[28,13439,465],{"class":38},[28,13441,13442],{"class":87}," \u002F\u002F ref是引用，转换为*ref = 100\n",[28,13444,13445],{"class":30,"line":91},[28,13446,1830],{"class":38},[28,13448,13449,13451,13453],{"class":30,"line":97},[28,13450,416],{"class":34},[28,13452,2235],{"class":2225},[28,13454,13455],{"class":38},"(){\n",[28,13457,13458,13460,13462,13464,13466],{"class":30,"line":103},[28,13459,2247],{"class":34},[28,13461,11131],{"class":38},[28,13463,54],{"class":34},[28,13465,2300],{"class":60},[28,13467,1558],{"class":38},[28,13469,13470],{"class":30,"line":109},[28,13471,13472],{"class":38},"    \n",[28,13474,13475],{"class":30,"line":118},[28,13476,13477],{"class":87},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[28,13479,13480,13482,13484,13486],{"class":30,"line":124},[28,13481,13193],{"class":34},[28,13483,13196],{"class":38},[28,13485,54],{"class":34},[28,13487,13488],{"class":38}," a; \n",[28,13490,13491,13493,13495,13497,13499],{"class":30,"line":131},[28,13492,13433],{"class":38},[28,13494,54],{"class":34},[28,13496,9212],{"class":60},[28,13498,465],{"class":38},[28,13500,13501],{"class":87}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[28,13503,13504],{"class":30,"line":137},[28,13505,13472],{"class":38},[28,13507,13508,13510,13512,13514,13516,13518,13520],{"class":30,"line":143},[28,13509,6791],{"class":38},[28,13511,1441],{"class":34},[28,13513,12932],{"class":127},[28,13515,1709],{"class":34},[28,13517,11131],{"class":38},[28,13519,1441],{"class":34},[28,13521,9102],{"class":38},[28,13523,13524,13526,13528,13531,13533,13535,13537],{"class":30,"line":149},[28,13525,6791],{"class":38},[28,13527,1441],{"class":34},[28,13529,13530],{"class":127}," \"ref:\"",[28,13532,1709],{"class":34},[28,13534,13196],{"class":38},[28,13536,1441],{"class":34},[28,13538,9102],{"class":38},[28,13540,13541],{"class":30,"line":1890},[28,13542,13472],{"class":38},[28,13544,13545,13548],{"class":30,"line":1904},[28,13546,13547],{"class":2225},"    func",[28,13549,13550],{"class":38},"(a);\n",[28,13552,13553,13555,13557],{"class":30,"line":1909},[28,13554,4352],{"class":34},[28,13556,4355],{"class":60},[28,13558,1558],{"class":38},[28,13560,13561],{"class":30,"line":1915},[28,13562,1830],{"class":38},[14,13564,11594],{},[363,13566,13567,13570],{},[366,13568,13569],{},"引用的本质，就是一个指针常量",[366,13571,13572],{},"引用一旦初始化，就不可以发生改变",[351,13574,13576],{"id":13575},"_66常量引用","6.6常量引用",[14,13578,13579],{},"作用：常量引用主要用来修饰形参",[14,13581,13582,13583,13586],{},"在函数形参列表中，可以加",[555,13584,13585],{},"const修饰形参","，防止形参改变实参",[18,13588,13590],{"className":401,"code":13589,"language":403,"meta":23,"style":23},"\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",[25,13591,13592,13597,13602,13621,13626,13639,13643,13647,13655,13659,13664,13669,13683,13687,13695,13707,13711,13716,13728,13735,13739,13749,13753,13761],{"__ignoreMap":23},[28,13593,13594],{"class":30,"line":31},[28,13595,13596],{"class":87},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[28,13598,13599],{"class":30,"line":48},[28,13600,13601],{"class":87},"\u002F\u002F加上const就不能修改实参的\n",[28,13603,13604,13606,13609,13611,13613,13616,13619],{"class":30,"line":84},[28,13605,5626],{"class":34},[28,13607,13608],{"class":2225}," showValue",[28,13610,413],{"class":38},[28,13612,7054],{"class":34},[28,13614,13615],{"class":34}," int&",[28,13617,13618],{"class":5478}," v",[28,13620,12704],{"class":38},[28,13622,13623],{"class":30,"line":91},[28,13624,13625],{"class":87},"    \u002F\u002Fv += 100;\n",[28,13627,13628,13630,13632,13635,13637],{"class":30,"line":97},[28,13629,6791],{"class":38},[28,13631,1441],{"class":34},[28,13633,13634],{"class":38}," v ",[28,13636,1441],{"class":34},[28,13638,9102],{"class":38},[28,13640,13641],{"class":30,"line":103},[28,13642,1830],{"class":38},[28,13644,13645],{"class":30,"line":109},[28,13646,2662],{"emptyLinePlaceholder":336},[28,13648,13649,13651,13653],{"class":30,"line":118},[28,13650,416],{"class":34},[28,13652,2235],{"class":2225},[28,13654,11115],{"class":38},[28,13656,13657],{"class":30,"line":124},[28,13658,2662],{"emptyLinePlaceholder":336},[28,13660,13661],{"class":30,"line":131},[28,13662,13663],{"class":87},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[28,13665,13666],{"class":30,"line":137},[28,13667,13668],{"class":87},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[28,13670,13671,13673,13675,13677,13679,13681],{"class":30,"line":143},[28,13672,11483],{"class":34},[28,13674,13615],{"class":34},[28,13676,13196],{"class":38},[28,13678,54],{"class":34},[28,13680,2300],{"class":60},[28,13682,1558],{"class":38},[28,13684,13685],{"class":30,"line":149},[28,13686,2662],{"emptyLinePlaceholder":336},[28,13688,13689,13692],{"class":30,"line":1890},[28,13690,13691],{"class":87},"    \u002F\u002Fref = 100;",[28,13693,13694],{"class":87},"  \u002F\u002F加入const后不可以修改变量\n",[28,13696,13697,13699,13701,13703,13705],{"class":30,"line":1904},[28,13698,6791],{"class":38},[28,13700,1441],{"class":34},[28,13702,13196],{"class":38},[28,13704,1441],{"class":34},[28,13706,9102],{"class":38},[28,13708,13709],{"class":30,"line":1909},[28,13710,2662],{"emptyLinePlaceholder":336},[28,13712,13713],{"class":30,"line":1915},[28,13714,13715],{"class":87},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[28,13717,13718,13720,13722,13724,13726],{"class":30,"line":1936},[28,13719,2247],{"class":34},[28,13721,11131],{"class":38},[28,13723,54],{"class":34},[28,13725,2300],{"class":60},[28,13727,1558],{"class":38},[28,13729,13730,13733],{"class":30,"line":1941},[28,13731,13732],{"class":2225},"    showValue",[28,13734,13550],{"class":38},[28,13736,13737],{"class":30,"line":1955},[28,13738,2662],{"emptyLinePlaceholder":336},[28,13740,13741,13743,13745,13747],{"class":30,"line":1960},[28,13742,2565],{"class":2225},[28,13744,413],{"class":38},[28,13746,2570],{"class":127},[28,13748,2981],{"class":38},[28,13750,13751],{"class":30,"line":1989},[28,13752,2662],{"emptyLinePlaceholder":336},[28,13754,13755,13757,13759],{"class":30,"line":1994},[28,13756,4352],{"class":34},[28,13758,4355],{"class":60},[28,13760,1558],{"class":38},[28,13762,13763],{"class":30,"line":2011},[28,13764,1830],{"class":38},[328,13766,13767],{},"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":23,"searchDepth":48,"depth":48,"links":13769},[13770,13771,13772,13773,13774,13775],{"id":12302,"depth":48,"text":12303},{"id":12481,"depth":48,"text":12482},{"id":12664,"depth":48,"text":12665},{"id":13068,"depth":48,"text":13069},{"id":13395,"depth":48,"text":13396},{"id":13575,"depth":48,"text":13576},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12294,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13782,"title":13783,"body":13784,"description":23,"extension":334,"meta":14865,"navigation":336,"path":14866,"seo":14867,"stem":14868,"__hash__":14869},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13785,"toc":14857},[13786,13789,13793,13796,13801,14033,14035,14046,14050,14053,14061,14165,14168,14172,14175,14179,14182,14187,14209,14215,14542,14545,14549,14557,14854],[10,13787,13783],{"id":13788},"_7函数高级部分",[351,13790,13792],{"id":13791},"_71函数默认参数","7.1函数默认参数",[14,13794,13795],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13797,5443,13798],{},[25,13799,13800],{}," 返回值类型  函数名 （参数= 默认值）{}",[18,13802,13804],{"className":401,"code":13803,"language":403,"meta":23,"style":23},"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",[25,13805,13806,13841,13856,13860,13864,13869,13874,13903,13923,13933,13937,13941,13949,13953,13981,14003,14007,14017,14021,14029],{"__ignoreMap":23},[28,13807,13808,13810,13812,13814,13816,13818,13820,13822,13824,13827,13829,13831,13833,13835,13837,13839],{"class":30,"line":31},[28,13809,416],{"class":34},[28,13811,11647],{"class":2225},[28,13813,413],{"class":38},[28,13815,416],{"class":34},[28,13817,1663],{"class":5478},[28,13819,12697],{"class":38},[28,13821,416],{"class":34},[28,13823,3095],{"class":5478},[28,13825,13826],{"class":34}," =",[28,13828,2300],{"class":60},[28,13830,12697],{"class":38},[28,13832,416],{"class":34},[28,13834,3111],{"class":5478},[28,13836,13826],{"class":34},[28,13838,2300],{"class":60},[28,13840,12704],{"class":38},[28,13842,13843,13845,13847,13849,13851,13853],{"class":30,"line":48},[28,13844,4352],{"class":34},[28,13846,11131],{"class":38},[28,13848,880],{"class":34},[28,13850,11144],{"class":38},[28,13852,880],{"class":34},[28,13854,13855],{"class":38}," c;\n",[28,13857,13858],{"class":30,"line":84},[28,13859,1830],{"class":38},[28,13861,13862],{"class":30,"line":91},[28,13863,2662],{"emptyLinePlaceholder":336},[28,13865,13866],{"class":30,"line":97},[28,13867,13868],{"class":87},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[28,13870,13871],{"class":30,"line":103},[28,13872,13873],{"class":87},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[28,13875,13876,13878,13881,13883,13885,13887,13889,13891,13893,13895,13897,13899,13901],{"class":30,"line":109},[28,13877,416],{"class":34},[28,13879,13880],{"class":2225}," func2",[28,13882,413],{"class":38},[28,13884,416],{"class":34},[28,13886,1663],{"class":5478},[28,13888,13826],{"class":34},[28,13890,2300],{"class":60},[28,13892,12697],{"class":38},[28,13894,416],{"class":34},[28,13896,3095],{"class":5478},[28,13898,13826],{"class":34},[28,13900,2300],{"class":60},[28,13902,2981],{"class":38},[28,13904,13905,13907,13909,13911,13913,13915,13917,13919,13921],{"class":30,"line":118},[28,13906,416],{"class":34},[28,13908,13880],{"class":2225},[28,13910,413],{"class":38},[28,13912,416],{"class":34},[28,13914,1663],{"class":5478},[28,13916,12697],{"class":38},[28,13918,416],{"class":34},[28,13920,3095],{"class":5478},[28,13922,12704],{"class":38},[28,13924,13925,13927,13929,13931],{"class":30,"line":124},[28,13926,4352],{"class":34},[28,13928,11131],{"class":38},[28,13930,880],{"class":34},[28,13932,12725],{"class":38},[28,13934,13935],{"class":30,"line":131},[28,13936,1830],{"class":38},[28,13938,13939],{"class":30,"line":137},[28,13940,2662],{"emptyLinePlaceholder":336},[28,13942,13943,13945,13947],{"class":30,"line":143},[28,13944,416],{"class":34},[28,13946,2235],{"class":2225},[28,13948,11115],{"class":38},[28,13950,13951],{"class":30,"line":149},[28,13952,2662],{"emptyLinePlaceholder":336},[28,13954,13955,13957,13959,13962,13964,13966,13968,13970,13972,13974,13977,13979],{"class":30,"line":1890},[28,13956,6791],{"class":38},[28,13958,1441],{"class":34},[28,13960,13961],{"class":127}," \"ret = \"",[28,13963,1709],{"class":34},[28,13965,11647],{"class":2225},[28,13967,413],{"class":38},[28,13969,1098],{"class":60},[28,13971,12697],{"class":38},[28,13973,1098],{"class":60},[28,13975,13976],{"class":38},") ",[28,13978,1441],{"class":34},[28,13980,9102],{"class":38},[28,13982,13983,13985,13987,13989,13991,13993,13995,13997,13999,14001],{"class":30,"line":1904},[28,13984,6791],{"class":38},[28,13986,1441],{"class":34},[28,13988,13961],{"class":127},[28,13990,1709],{"class":34},[28,13992,11647],{"class":2225},[28,13994,413],{"class":38},[28,13996,713],{"class":60},[28,13998,13976],{"class":38},[28,14000,1441],{"class":34},[28,14002,9102],{"class":38},[28,14004,14005],{"class":30,"line":1909},[28,14006,2662],{"emptyLinePlaceholder":336},[28,14008,14009,14011,14013,14015],{"class":30,"line":1915},[28,14010,2565],{"class":2225},[28,14012,413],{"class":38},[28,14014,2570],{"class":127},[28,14016,2981],{"class":38},[28,14018,14019],{"class":30,"line":1936},[28,14020,2662],{"emptyLinePlaceholder":336},[28,14022,14023,14025,14027],{"class":30,"line":1941},[28,14024,4352],{"class":34},[28,14026,4355],{"class":60},[28,14028,1558],{"class":38},[28,14030,14031],{"class":30,"line":1955},[28,14032,1830],{"class":38},[14,14034,11594],{},[363,14036,14037,14040,14043],{},[366,14038,14039],{},"我传就用我；没传就用你",[366,14041,14042],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[366,14044,14045],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[351,14047,14049],{"id":14048},"_72函数的占位参数","7.2函数的占位参数",[14,14051,14052],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14054,14055,14057,14058],{},[555,14056,5443],{}," ",[25,14059,14060],{},"返回值类型 函数名 (数据类型){}",[18,14062,14064],{"className":401,"code":14063,"language":403,"meta":23,"style":23},"\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",[25,14065,14066,14071,14089,14102,14106,14114,14118,14135,14139,14149,14153,14161],{"__ignoreMap":23},[28,14067,14068],{"class":30,"line":31},[28,14069,14070],{"class":87},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[28,14072,14073,14075,14077,14079,14081,14083,14085,14087],{"class":30,"line":48},[28,14074,5626],{"class":34},[28,14076,11647],{"class":2225},[28,14078,413],{"class":38},[28,14080,416],{"class":34},[28,14082,1663],{"class":5478},[28,14084,12697],{"class":38},[28,14086,416],{"class":34},[28,14088,12704],{"class":38},[28,14090,14091,14093,14095,14098,14100],{"class":30,"line":84},[28,14092,6791],{"class":38},[28,14094,1441],{"class":34},[28,14096,14097],{"class":127}," \"this is func\"",[28,14099,1709],{"class":34},[28,14101,9102],{"class":38},[28,14103,14104],{"class":30,"line":91},[28,14105,1830],{"class":38},[28,14107,14108,14110,14112],{"class":30,"line":97},[28,14109,416],{"class":34},[28,14111,2235],{"class":2225},[28,14113,11115],{"class":38},[28,14115,14116],{"class":30,"line":103},[28,14117,2662],{"emptyLinePlaceholder":336},[28,14119,14120,14122,14124,14126,14128,14130,14132],{"class":30,"line":109},[28,14121,13547],{"class":2225},[28,14123,413],{"class":38},[28,14125,845],{"class":60},[28,14127,64],{"class":38},[28,14129,845],{"class":60},[28,14131,6228],{"class":38},[28,14133,14134],{"class":87}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[28,14136,14137],{"class":30,"line":118},[28,14138,2662],{"emptyLinePlaceholder":336},[28,14140,14141,14143,14145,14147],{"class":30,"line":124},[28,14142,2565],{"class":2225},[28,14144,413],{"class":38},[28,14146,2570],{"class":127},[28,14148,2981],{"class":38},[28,14150,14151],{"class":30,"line":131},[28,14152,2662],{"emptyLinePlaceholder":336},[28,14154,14155,14157,14159],{"class":30,"line":137},[28,14156,4352],{"class":34},[28,14158,4355],{"class":60},[28,14160,1558],{"class":38},[28,14162,14163],{"class":30,"line":143},[28,14164,1830],{"class":38},[14,14166,14167],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[351,14169,14171],{"id":14170},"_73函数重载","7.3函数重载",[14,14173,14174],{},"意思是函数名是可以相同的",[380,14176,14178],{"id":14177},"_731基本语法","7.3.1基本语法",[14,14180,14181],{},"作用：函数名可以相同，提高复用性",[14,14183,14184],{},[555,14185,14186],{},"函数重载满足条件：",[1404,14188,14189,14192,14195],{},[366,14190,14191],{},"同一个作用域下",[366,14193,14194],{},"函数名称相同",[366,14196,14197,14198,14201,14202,14205,14206],{},"函数参数",[555,14199,14200],{},"类型不同","  或者 ",[555,14203,14204],{},"个数不同"," 或者 ",[555,14207,14208],{},"顺序不同",[14,14210,14211,14214],{},[555,14212,14213],{},"注意:","  函数的返回值不可以作为函数重载的条件",[18,14216,14218],{"className":10203,"code":14217,"language":10205,"meta":23,"style":23},"\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",[25,14219,14220,14225,14233,14237,14250,14254,14268,14272,14285,14289,14304,14308,14321,14325,14346,14350,14363,14367,14387,14391,14404,14408,14412,14417,14422,14427,14432,14437,14441,14445,14453,14457,14463,14473,14483,14497,14512,14516,14526,14530,14538],{"__ignoreMap":23},[28,14221,14222],{"class":30,"line":31},[28,14223,14224],{"class":87},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[28,14226,14227,14229,14231],{"class":30,"line":48},[28,14228,5626],{"class":34},[28,14230,11647],{"class":2225},[28,14232,2238],{"class":38},[28,14234,14235],{"class":30,"line":84},[28,14236,1811],{"class":38},[28,14238,14239,14241,14243,14246,14248],{"class":30,"line":91},[28,14240,6791],{"class":38},[28,14242,1441],{"class":34},[28,14244,14245],{"class":127}," \"func 的调用！\"",[28,14247,1709],{"class":34},[28,14249,9102],{"class":38},[28,14251,14252],{"class":30,"line":97},[28,14253,1830],{"class":38},[28,14255,14256,14258,14260,14262,14264,14266],{"class":30,"line":103},[28,14257,5626],{"class":34},[28,14259,11647],{"class":2225},[28,14261,413],{"class":38},[28,14263,416],{"class":34},[28,14265,1663],{"class":5478},[28,14267,81],{"class":38},[28,14269,14270],{"class":30,"line":109},[28,14271,1811],{"class":38},[28,14273,14274,14276,14278,14281,14283],{"class":30,"line":118},[28,14275,6791],{"class":38},[28,14277,1441],{"class":34},[28,14279,14280],{"class":127}," \"func (int a) 的调用！\"",[28,14282,1709],{"class":34},[28,14284,9102],{"class":38},[28,14286,14287],{"class":30,"line":124},[28,14288,1830],{"class":38},[28,14290,14291,14293,14295,14297,14300,14302],{"class":30,"line":131},[28,14292,5626],{"class":34},[28,14294,11647],{"class":2225},[28,14296,413],{"class":38},[28,14298,14299],{"class":34},"double",[28,14301,1663],{"class":5478},[28,14303,81],{"class":38},[28,14305,14306],{"class":30,"line":137},[28,14307,1811],{"class":38},[28,14309,14310,14312,14314,14317,14319],{"class":30,"line":143},[28,14311,6791],{"class":38},[28,14313,1441],{"class":34},[28,14315,14316],{"class":127}," \"func (double a)的调用！\"",[28,14318,1709],{"class":34},[28,14320,9102],{"class":38},[28,14322,14323],{"class":30,"line":149},[28,14324,1830],{"class":38},[28,14326,14327,14329,14331,14333,14335,14337,14340,14342,14344],{"class":30,"line":1890},[28,14328,5626],{"class":34},[28,14330,11647],{"class":2225},[28,14332,413],{"class":38},[28,14334,416],{"class":34},[28,14336,1663],{"class":5478},[28,14338,14339],{"class":38}," ,",[28,14341,14299],{"class":34},[28,14343,3095],{"class":5478},[28,14345,81],{"class":38},[28,14347,14348],{"class":30,"line":1904},[28,14349,1811],{"class":38},[28,14351,14352,14354,14356,14359,14361],{"class":30,"line":1909},[28,14353,6791],{"class":38},[28,14355,1441],{"class":34},[28,14357,14358],{"class":127}," \"func (int a ,double b) 的调用！\"",[28,14360,1709],{"class":34},[28,14362,9102],{"class":38},[28,14364,14365],{"class":30,"line":1915},[28,14366,1830],{"class":38},[28,14368,14369,14371,14373,14375,14377,14379,14381,14383,14385],{"class":30,"line":1936},[28,14370,5626],{"class":34},[28,14372,11647],{"class":2225},[28,14374,413],{"class":38},[28,14376,14299],{"class":34},[28,14378,1663],{"class":5478},[28,14380,14339],{"class":38},[28,14382,416],{"class":34},[28,14384,3095],{"class":5478},[28,14386,81],{"class":38},[28,14388,14389],{"class":30,"line":1941},[28,14390,1811],{"class":38},[28,14392,14393,14395,14397,14400,14402],{"class":30,"line":1955},[28,14394,6791],{"class":38},[28,14396,1441],{"class":34},[28,14398,14399],{"class":127}," \"func (double a ,int b)的调用！\"",[28,14401,1709],{"class":34},[28,14403,9102],{"class":38},[28,14405,14406],{"class":30,"line":1960},[28,14407,1830],{"class":38},[28,14409,14410],{"class":30,"line":1989},[28,14411,2662],{"emptyLinePlaceholder":336},[28,14413,14414],{"class":30,"line":1994},[28,14415,14416],{"class":87},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[28,14418,14419],{"class":30,"line":2011},[28,14420,14421],{"class":87},"\u002F\u002Fint func(double a, int b)\n",[28,14423,14424],{"class":30,"line":2016},[28,14425,14426],{"class":87},"\u002F\u002F{\n",[28,14428,14429],{"class":30,"line":2021},[28,14430,14431],{"class":87},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[28,14433,14434],{"class":30,"line":2026},[28,14435,14436],{"class":87},"\u002F\u002F}\n",[28,14438,14439],{"class":30,"line":2040},[28,14440,2662],{"emptyLinePlaceholder":336},[28,14442,14443],{"class":30,"line":2045},[28,14444,2662],{"emptyLinePlaceholder":336},[28,14446,14447,14449,14451],{"class":30,"line":2839},[28,14448,416],{"class":34},[28,14450,2235],{"class":2225},[28,14452,11115],{"class":38},[28,14454,14455],{"class":30,"line":2853},[28,14456,2662],{"emptyLinePlaceholder":336},[28,14458,14459,14461],{"class":30,"line":2861},[28,14460,13547],{"class":2225},[28,14462,5898],{"class":38},[28,14464,14465,14467,14469,14471],{"class":30,"line":2866},[28,14466,13547],{"class":2225},[28,14468,413],{"class":38},[28,14470,845],{"class":60},[28,14472,2981],{"class":38},[28,14474,14475,14477,14479,14481],{"class":30,"line":2872},[28,14476,13547],{"class":2225},[28,14478,413],{"class":38},[28,14480,459],{"class":60},[28,14482,2981],{"class":38},[28,14484,14485,14487,14489,14491,14493,14495],{"class":30,"line":2878},[28,14486,13547],{"class":2225},[28,14488,413],{"class":38},[28,14490,845],{"class":60},[28,14492,64],{"class":38},[28,14494,459],{"class":60},[28,14496,2981],{"class":38},[28,14498,14499,14501,14503,14505,14508,14510],{"class":30,"line":2883},[28,14500,13547],{"class":2225},[28,14502,413],{"class":38},[28,14504,459],{"class":60},[28,14506,14507],{"class":38}," , ",[28,14509,845],{"class":60},[28,14511,2981],{"class":38},[28,14513,14514],{"class":30,"line":8210},[28,14515,13472],{"class":38},[28,14517,14518,14520,14522,14524],{"class":30,"line":8234},[28,14519,2565],{"class":2225},[28,14521,413],{"class":38},[28,14523,2570],{"class":127},[28,14525,2981],{"class":38},[28,14527,14528],{"class":30,"line":8239},[28,14529,2662],{"emptyLinePlaceholder":336},[28,14531,14532,14534,14536],{"class":30,"line":8245},[28,14533,4352],{"class":34},[28,14535,4355],{"class":60},[28,14537,1558],{"class":38},[28,14539,14540],{"class":30,"line":8272},[28,14541,1830],{"class":38},[14,14543,14544],{},"重点：函数返回值不可以作为函数重载条件！",[380,14546,14548],{"id":14547},"_732注意事项","7.3.2注意事项",[1404,14550,14551,14554],{},[366,14552,14553],{},"引用作为重载条件!!!",[366,14555,14556],{},"函数重载碰到函数默认参数",[18,14558,14560],{"className":401,"code":14559,"language":403,"meta":23,"style":23},"\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",[25,14561,14562,14567,14572,14576,14592,14596,14609,14613,14617,14635,14639,14652,14656,14660,14664,14669,14673,14697,14701,14714,14718,14722,14736,14740,14753,14757,14761,14769,14773,14785,14795,14808,14812,14816,14824,14828,14838,14842,14850],{"__ignoreMap":23},[28,14563,14564],{"class":30,"line":31},[28,14565,14566],{"class":87},"\u002F\u002F函数重载注意事项\n",[28,14568,14569],{"class":30,"line":48},[28,14570,14571],{"class":87},"\u002F\u002F1、引用作为重载条件\n",[28,14573,14574],{"class":30,"line":84},[28,14575,2662],{"emptyLinePlaceholder":336},[28,14577,14578,14580,14582,14584,14586,14588,14590],{"class":30,"line":91},[28,14579,5626],{"class":34},[28,14581,11647],{"class":2225},[28,14583,413],{"class":38},[28,14585,416],{"class":34},[28,14587,10846],{"class":34},[28,14589,51],{"class":5478},[28,14591,81],{"class":38},[28,14593,14594],{"class":30,"line":97},[28,14595,1811],{"class":38},[28,14597,14598,14600,14602,14605,14607],{"class":30,"line":103},[28,14599,6791],{"class":38},[28,14601,1441],{"class":34},[28,14603,14604],{"class":127}," \"func (int &a) 调用 \"",[28,14606,1709],{"class":34},[28,14608,9102],{"class":38},[28,14610,14611],{"class":30,"line":109},[28,14612,1830],{"class":38},[28,14614,14615],{"class":30,"line":118},[28,14616,2662],{"emptyLinePlaceholder":336},[28,14618,14619,14621,14623,14625,14627,14629,14631,14633],{"class":30,"line":124},[28,14620,5626],{"class":34},[28,14622,11647],{"class":2225},[28,14624,413],{"class":38},[28,14626,7054],{"class":34},[28,14628,2644],{"class":34},[28,14630,10846],{"class":34},[28,14632,51],{"class":5478},[28,14634,81],{"class":38},[28,14636,14637],{"class":30,"line":131},[28,14638,1811],{"class":38},[28,14640,14641,14643,14645,14648,14650],{"class":30,"line":137},[28,14642,6791],{"class":38},[28,14644,1441],{"class":34},[28,14646,14647],{"class":127}," \"func (const int &a) 调用 \"",[28,14649,1709],{"class":34},[28,14651,9102],{"class":38},[28,14653,14654],{"class":30,"line":143},[28,14655,1830],{"class":38},[28,14657,14658],{"class":30,"line":149},[28,14659,2662],{"emptyLinePlaceholder":336},[28,14661,14662],{"class":30,"line":1890},[28,14663,2662],{"emptyLinePlaceholder":336},[28,14665,14666],{"class":30,"line":1904},[28,14667,14668],{"class":87},"\u002F\u002F2、函数重载碰到函数默认参数\n",[28,14670,14671],{"class":30,"line":1909},[28,14672,2662],{"emptyLinePlaceholder":336},[28,14674,14675,14677,14679,14681,14683,14685,14687,14689,14691,14693,14695],{"class":30,"line":1915},[28,14676,5626],{"class":34},[28,14678,13880],{"class":2225},[28,14680,413],{"class":38},[28,14682,416],{"class":34},[28,14684,1663],{"class":5478},[28,14686,12697],{"class":38},[28,14688,416],{"class":34},[28,14690,3095],{"class":5478},[28,14692,13826],{"class":34},[28,14694,2300],{"class":60},[28,14696,81],{"class":38},[28,14698,14699],{"class":30,"line":1936},[28,14700,1811],{"class":38},[28,14702,14703,14705,14707,14710,14712],{"class":30,"line":1941},[28,14704,6791],{"class":38},[28,14706,1441],{"class":34},[28,14708,14709],{"class":127}," \"func2(int a, int b = 10) 调用\"",[28,14711,1709],{"class":34},[28,14713,9102],{"class":38},[28,14715,14716],{"class":30,"line":1955},[28,14717,1830],{"class":38},[28,14719,14720],{"class":30,"line":1960},[28,14721,2662],{"emptyLinePlaceholder":336},[28,14723,14724,14726,14728,14730,14732,14734],{"class":30,"line":1989},[28,14725,5626],{"class":34},[28,14727,13880],{"class":2225},[28,14729,413],{"class":38},[28,14731,416],{"class":34},[28,14733,1663],{"class":5478},[28,14735,81],{"class":38},[28,14737,14738],{"class":30,"line":1994},[28,14739,1811],{"class":38},[28,14741,14742,14744,14746,14749,14751],{"class":30,"line":2011},[28,14743,6791],{"class":38},[28,14745,1441],{"class":34},[28,14747,14748],{"class":127}," \"func2(int a) 调用\"",[28,14750,1709],{"class":34},[28,14752,9102],{"class":38},[28,14754,14755],{"class":30,"line":2016},[28,14756,1830],{"class":38},[28,14758,14759],{"class":30,"line":2021},[28,14760,2662],{"emptyLinePlaceholder":336},[28,14762,14763,14765,14767],{"class":30,"line":2026},[28,14764,416],{"class":34},[28,14766,2235],{"class":2225},[28,14768,11115],{"class":38},[28,14770,14771],{"class":30,"line":2040},[28,14772,13472],{"class":38},[28,14774,14775,14777,14779,14781,14783],{"class":30,"line":2045},[28,14776,2247],{"class":34},[28,14778,11131],{"class":38},[28,14780,54],{"class":34},[28,14782,2300],{"class":60},[28,14784,1558],{"class":38},[28,14786,14787,14789,14792],{"class":30,"line":2839},[28,14788,13547],{"class":2225},[28,14790,14791],{"class":38},"(a);",[28,14793,14794],{"class":87}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[28,14796,14797,14799,14801,14803,14805],{"class":30,"line":2853},[28,14798,13547],{"class":2225},[28,14800,413],{"class":38},[28,14802,845],{"class":60},[28,14804,6228],{"class":38},[28,14806,14807],{"class":87},"\u002F\u002F调用有const   10是个常量\n",[28,14809,14810],{"class":30,"line":2861},[28,14811,2662],{"emptyLinePlaceholder":336},[28,14813,14814],{"class":30,"line":2866},[28,14815,2662],{"emptyLinePlaceholder":336},[28,14817,14818,14821],{"class":30,"line":2872},[28,14819,14820],{"class":87},"    \u002F\u002Ffunc2(10);",[28,14822,14823],{"class":87}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[28,14825,14826],{"class":30,"line":2878},[28,14827,2662],{"emptyLinePlaceholder":336},[28,14829,14830,14832,14834,14836],{"class":30,"line":2883},[28,14831,2565],{"class":2225},[28,14833,413],{"class":38},[28,14835,2570],{"class":127},[28,14837,2981],{"class":38},[28,14839,14840],{"class":30,"line":8210},[28,14841,2662],{"emptyLinePlaceholder":336},[28,14843,14844,14846,14848],{"class":30,"line":8234},[28,14845,4352],{"class":34},[28,14847,4355],{"class":60},[28,14849,1558],{"class":38},[28,14851,14852],{"class":30,"line":8239},[28,14853,1830],{"class":38},[328,14855,14856],{},"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":23,"searchDepth":48,"depth":48,"links":14858},[14859,14860,14861],{"id":13791,"depth":48,"text":13792},{"id":14048,"depth":48,"text":14049},{"id":14170,"depth":48,"text":14171,"children":14862},[14863,14864],{"id":14177,"depth":84,"text":14178},{"id":14547,"depth":84,"text":14548},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13783,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14871,"title":14872,"body":14873,"description":23627,"extension":334,"meta":23628,"navigation":336,"path":23629,"seo":23630,"stem":23631,"__hash__":23632},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14874,"toc":23608},[14875,14878,14884,14891,14896,14899,14902,14905,14909,14913,14916,14919,14927,14932,14935,14942,14947,15106,15109,15362,15365,15368,15371,15376,15379,15382,15393,15398,15634,15638,15648,15651,15659,15806,15810,15813,15816,15820,16265,16269,16277,16285,17197,17204,17209,17837,17840,17843,17846,17965,17968,18055,18058,18184,18187,18281,18284,18637,18641,18649,18653,18660,18663,18666,18677,18683,18688,18700,18708,18728,18736,18753,18939,18942,18946,18949,18952,18955,18958,18961,18964,18967,19427,19433,19437,19440,19451,20038,20041,20530,20534,20537,20540,20543,20546,20549,20557,20953,20957,20960,20963,21410,21413,21416,21421,21424,21429,21432,21436,21439,21441,21447,21450,21756,21766,21807,21811,21814,21816,21849,21852,22159,22161,22176,22179,22202,22211,22217,22220,22224,22227,22230,22235,22246,22251,22259,22264,22394,22397,22400,22575,22580,22792,22796,22799,22913,22918,23157,23161,23165,23168,23171,23176,23281,23284,23287,23290,23294,23405,23408,23411,23416,23468,23471,23474,23479,23525,23528,23533,23601,23603,23606],[10,14876,14872],{"id":14877},"_8类和对象",[14,14879,14880,14881],{},"C++面向对象的三大特性为",[555,14882,14883],{},"封装、继承、多态",[14,14885,14886,14887,14890],{},"C++认为",[555,14888,14889],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14892,14893],{},[555,14894,14895],{},"例如：",[14,14897,14898],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14900,14901],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14903,14904],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[351,14906,14908],{"id":14907},"_81封装","8.1封装",[380,14910,14912],{"id":14911},"_811封装的意义","8.1.1封装的意义",[14,14914,14915],{},"封装是C++面向对象三大特性之一",[14,14917,14918],{},"封装的意义：",[1404,14920,14921,14924],{},[366,14922,14923],{},"将属性和行为作为一个整体，表现生活中的事物",[366,14925,14926],{},"将属性和行为加以权限控制",[14,14928,14929],{},[555,14930,14931],{},"封装意义一：",[14,14933,14934],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14936,14937,14057,14939],{},[555,14938,5443],{},[25,14940,14941],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[363,14943,14944],{},[366,14945,14946],{},"**示例1：**设计一个圆类，求圆的周长",[18,14948,14950],{"className":401,"code":14949,"language":403,"meta":23,"style":23},"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",[25,14951,14952,14960,14964,14969,14974,14979,14984,14991,14996,15006,15010,15028,15032,15036,15044,15048,15053,15058,15063,15068,15079,15102],{"__ignoreMap":23},[28,14953,14954,14957],{"class":30,"line":31},[28,14955,14956],{"class":34},"class",[28,14958,14959],{"class":2225}," Circle\n",[28,14961,14962],{"class":30,"line":48},[28,14963,1811],{"class":38},[28,14965,14966],{"class":30,"line":84},[28,14967,14968],{"class":87},"    \u002F\u002F访问权限\n",[28,14970,14971],{"class":30,"line":91},[28,14972,14973],{"class":87},"    \u002F\u002F公共权限\n",[28,14975,14976],{"class":30,"line":97},[28,14977,14978],{"class":34},"public:\n",[28,14980,14981],{"class":30,"line":103},[28,14982,14983],{"class":87},"    \u002F\u002F属性\n",[28,14985,14986,14988],{"class":30,"line":109},[28,14987,2247],{"class":34},[28,14989,14990],{"class":38}," m_r;\n",[28,14992,14993],{"class":30,"line":118},[28,14994,14995],{"class":87},"    \u002F\u002F行为\n",[28,14997,14998,15001,15004],{"class":30,"line":124},[28,14999,15000],{"class":34},"    double",[28,15002,15003],{"class":2225}," calculateZC",[28,15005,2238],{"class":38},[28,15007,15008],{"class":30,"line":131},[28,15009,2292],{"class":38},[28,15011,15012,15015,15018,15020,15023,15025],{"class":30,"line":137},[28,15013,15014],{"class":34},"        return",[28,15016,15017],{"class":60}," 2",[28,15019,854],{"class":34},[28,15021,15022],{"class":38},"PI",[28,15024,854],{"class":34},[28,15026,15027],{"class":38},"m_r;\n",[28,15029,15030],{"class":30,"line":143},[28,15031,2449],{"class":38},[28,15033,15034],{"class":30,"line":149},[28,15035,4257],{"class":38},[28,15037,15038,15040,15042],{"class":30,"line":1890},[28,15039,416],{"class":34},[28,15041,2235],{"class":2225},[28,15043,2238],{"class":38},[28,15045,15046],{"class":30,"line":1904},[28,15047,1811],{"class":38},[28,15049,15050],{"class":30,"line":1909},[28,15051,15052],{"class":87},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[28,15054,15055],{"class":30,"line":1915},[28,15056,15057],{"class":87},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[28,15059,15060],{"class":30,"line":1936},[28,15061,15062],{"class":38},"    Circle c1;\n",[28,15064,15065],{"class":30,"line":1941},[28,15066,15067],{"class":87},"    \u002F\u002F给圆对象 的属性进行赋值\n",[28,15069,15070,15073,15075,15077],{"class":30,"line":1955},[28,15071,15072],{"class":38},"    c1.m_r",[28,15074,54],{"class":34},[28,15076,845],{"class":60},[28,15078,1558],{"class":38},[28,15080,15081,15083,15085,15088,15090,15093,15096,15098,15100],{"class":30,"line":1960},[28,15082,1816],{"class":38},[28,15084,1441],{"class":34},[28,15086,15087],{"class":127},"\"圆的周长\"",[28,15089,1441],{"class":34},[28,15091,15092],{"class":38},"c1.",[28,15094,15095],{"class":2225},"calculateZC",[28,15097,2689],{"class":38},[28,15099,1441],{"class":34},[28,15101,1463],{"class":38},[28,15103,15104],{"class":30,"line":1989},[28,15105,1830],{"class":38},[14,15107,15108],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[18,15110,15112],{"className":401,"code":15111,"language":403,"meta":23,"style":23},"#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",[25,15113,15114,15120,15130,15136,15142,15146,15150,15155,15162,15167,15185,15189,15199,15203,15208,15224,15228,15238,15242,15247,15255,15259,15291,15295,15299,15307,15311,15316,15321,15335,15349,15358],{"__ignoreMap":23},[28,15115,15116,15118],{"class":30,"line":31},[28,15117,2211],{"class":34},[28,15119,2214],{"class":127},[28,15121,15122,15124,15126,15128],{"class":30,"line":48},[28,15123,2219],{"class":34},[28,15125,2222],{"class":34},[28,15127,2226],{"class":2225},[28,15129,1558],{"class":38},[28,15131,15132,15134],{"class":30,"line":84},[28,15133,2211],{"class":34},[28,15135,8011],{"class":127},[28,15137,15138,15140],{"class":30,"line":91},[28,15139,14956],{"class":34},[28,15141,8024],{"class":2225},[28,15143,15144],{"class":30,"line":97},[28,15145,1811],{"class":38},[28,15147,15148],{"class":30,"line":103},[28,15149,14978],{"class":34},[28,15151,15152],{"class":30,"line":109},[28,15153,15154],{"class":38},"    string m_name;\n",[28,15156,15157,15159],{"class":30,"line":118},[28,15158,2247],{"class":34},[28,15160,15161],{"class":38}," m_id;\n",[28,15163,15164],{"class":30,"line":124},[28,15165,15166],{"class":87},"    \u002F\u002F赋值姓名\n",[28,15168,15169,15172,15175,15177,15180,15183],{"class":30,"line":131},[28,15170,15171],{"class":34},"    void",[28,15173,15174],{"class":2225}," setName",[28,15176,413],{"class":38},[28,15178,15179],{"class":2225},"string",[28,15181,15182],{"class":5478}," name",[28,15184,81],{"class":38},[28,15186,15187],{"class":30,"line":137},[28,15188,2292],{"class":38},[28,15190,15191,15194,15196],{"class":30,"line":143},[28,15192,15193],{"class":38},"        m_name",[28,15195,54],{"class":34},[28,15197,15198],{"class":38},"name;\n",[28,15200,15201],{"class":30,"line":149},[28,15202,2449],{"class":38},[28,15204,15205],{"class":30,"line":1890},[28,15206,15207],{"class":87},"    \u002F\u002F赋值学号\n",[28,15209,15210,15212,15215,15217,15219,15222],{"class":30,"line":1904},[28,15211,15171],{"class":34},[28,15213,15214],{"class":2225}," setId",[28,15216,413],{"class":38},[28,15218,416],{"class":34},[28,15220,15221],{"class":5478}," id",[28,15223,81],{"class":38},[28,15225,15226],{"class":30,"line":1909},[28,15227,2292],{"class":38},[28,15229,15230,15233,15235],{"class":30,"line":1915},[28,15231,15232],{"class":38},"        m_id",[28,15234,54],{"class":34},[28,15236,15237],{"class":38},"id;\n",[28,15239,15240],{"class":30,"line":1936},[28,15241,2449],{"class":38},[28,15243,15244],{"class":30,"line":1941},[28,15245,15246],{"class":87},"    \u002F\u002F打印学生信息\n",[28,15248,15249,15251,15253],{"class":30,"line":1955},[28,15250,15171],{"class":34},[28,15252,9877],{"class":2225},[28,15254,2238],{"class":38},[28,15256,15257],{"class":30,"line":1960},[28,15258,2292],{"class":38},[28,15260,15261,15263,15265,15268,15270,15273,15275,15277,15279,15282,15284,15287,15289],{"class":30,"line":1989},[28,15262,3713],{"class":38},[28,15264,1441],{"class":34},[28,15266,15267],{"class":127},"\"姓名：\"",[28,15269,1441],{"class":34},[28,15271,15272],{"class":38},"m_name",[28,15274,1441],{"class":34},[28,15276,4621],{"class":127},[28,15278,1441],{"class":34},[28,15280,15281],{"class":127},"\"学号：\"",[28,15283,1441],{"class":34},[28,15285,15286],{"class":38},"m_id",[28,15288,1441],{"class":34},[28,15290,1463],{"class":38},[28,15292,15293],{"class":30,"line":1994},[28,15294,2449],{"class":38},[28,15296,15297],{"class":30,"line":2011},[28,15298,4257],{"class":38},[28,15300,15301,15303,15305],{"class":30,"line":2016},[28,15302,416],{"class":34},[28,15304,2235],{"class":2225},[28,15306,2238],{"class":38},[28,15308,15309],{"class":30,"line":2021},[28,15310,1811],{"class":38},[28,15312,15313],{"class":30,"line":2026},[28,15314,15315],{"class":87},"    \u002F\u002F实例化\n",[28,15317,15318],{"class":30,"line":2040},[28,15319,15320],{"class":38},"    Student s1;\n",[28,15322,15323,15326,15329,15331,15333],{"class":30,"line":2045},[28,15324,15325],{"class":38},"    s1.",[28,15327,15328],{"class":2225},"setName",[28,15330,413],{"class":38},[28,15332,8178],{"class":127},[28,15334,2981],{"class":38},[28,15336,15337,15339,15342,15344,15347],{"class":30,"line":2839},[28,15338,15325],{"class":38},[28,15340,15341],{"class":2225},"setId",[28,15343,413],{"class":38},[28,15345,15346],{"class":60},"123456",[28,15348,2981],{"class":38},[28,15350,15351,15353,15356],{"class":30,"line":2853},[28,15352,15325],{"class":38},[28,15354,15355],{"class":2225},"printInfo",[28,15357,5898],{"class":38},[28,15359,15360],{"class":30,"line":2861},[28,15361,1830],{"class":38},[14,15363,15364],{},"类中的属性和行为统称为成员",[14,15366,15367],{},"属性：成员属性(成员变量)",[14,15369,15370],{},"方法：成员函数(成员方法)",[14,15372,15373],{},[555,15374,15375],{},"封装意义二：",[14,15377,15378],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15380,15381],{},"访问权限有三种：",[363,15383,15384,15387,15390],{},[366,15385,15386],{},"public        公共权限",[366,15388,15389],{},"protected 保护权限",[366,15391,15392],{},"private      私有权限",[14,15394,15395],{},[555,15396,15397],{},"示例：",[18,15399,15401],{"className":10203,"code":15400,"language":10205,"meta":23,"style":23},"\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",[25,15402,15403,15408,15413,15418,15423,15427,15434,15438,15443,15447,15452,15456,15461,15466,15471,15475,15480,15485,15492,15496,15500,15508,15512,15523,15535,15547,15551,15555,15559,15567,15571,15576,15588,15596,15604,15608,15618,15622,15630],{"__ignoreMap":23},[28,15404,15405],{"class":30,"line":31},[28,15406,15407],{"class":87},"\u002F\u002F三种权限\n",[28,15409,15410],{"class":30,"line":48},[28,15411,15412],{"class":87},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[28,15414,15415],{"class":30,"line":84},[28,15416,15417],{"class":87},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[28,15419,15420],{"class":30,"line":91},[28,15421,15422],{"class":87},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[28,15424,15425],{"class":30,"line":97},[28,15426,2662],{"emptyLinePlaceholder":336},[28,15428,15429,15431],{"class":30,"line":103},[28,15430,14956],{"class":34},[28,15432,15433],{"class":2225}," Person\n",[28,15435,15436],{"class":30,"line":109},[28,15437,1811],{"class":38},[28,15439,15440],{"class":30,"line":118},[28,15441,15442],{"class":87},"    \u002F\u002F姓名  公共权限\n",[28,15444,15445],{"class":30,"line":124},[28,15446,14978],{"class":34},[28,15448,15449],{"class":30,"line":131},[28,15450,15451],{"class":38},"    string m_Name;\n",[28,15453,15454],{"class":30,"line":137},[28,15455,2662],{"emptyLinePlaceholder":336},[28,15457,15458],{"class":30,"line":143},[28,15459,15460],{"class":87},"    \u002F\u002F汽车  保护权限\n",[28,15462,15463],{"class":30,"line":149},[28,15464,15465],{"class":34},"protected:\n",[28,15467,15468],{"class":30,"line":1890},[28,15469,15470],{"class":38},"    string m_Car;\n",[28,15472,15473],{"class":30,"line":1904},[28,15474,2662],{"emptyLinePlaceholder":336},[28,15476,15477],{"class":30,"line":1909},[28,15478,15479],{"class":87},"    \u002F\u002F银行卡密码  私有权限\n",[28,15481,15482],{"class":30,"line":1915},[28,15483,15484],{"class":34},"private:\n",[28,15486,15487,15489],{"class":30,"line":1936},[28,15488,2247],{"class":34},[28,15490,15491],{"class":38}," m_Password;\n",[28,15493,15494],{"class":30,"line":1941},[28,15495,2662],{"emptyLinePlaceholder":336},[28,15497,15498],{"class":30,"line":1955},[28,15499,14978],{"class":34},[28,15501,15502,15504,15506],{"class":30,"line":1960},[28,15503,15171],{"class":34},[28,15505,11647],{"class":2225},[28,15507,2238],{"class":38},[28,15509,15510],{"class":30,"line":1989},[28,15511,2292],{"class":38},[28,15513,15514,15517,15519,15521],{"class":30,"line":1994},[28,15515,15516],{"class":38},"        m_Name ",[28,15518,54],{"class":34},[28,15520,9200],{"class":127},[28,15522,1558],{"class":38},[28,15524,15525,15528,15530,15533],{"class":30,"line":2011},[28,15526,15527],{"class":38},"        m_Car ",[28,15529,54],{"class":34},[28,15531,15532],{"class":127}," \"拖拉机\"",[28,15534,1558],{"class":38},[28,15536,15537,15540,15542,15545],{"class":30,"line":2016},[28,15538,15539],{"class":38},"        m_Password ",[28,15541,54],{"class":34},[28,15543,15544],{"class":60}," 123456",[28,15546,1558],{"class":38},[28,15548,15549],{"class":30,"line":2021},[28,15550,2449],{"class":38},[28,15552,15553],{"class":30,"line":2026},[28,15554,4257],{"class":38},[28,15556,15557],{"class":30,"line":2040},[28,15558,2662],{"emptyLinePlaceholder":336},[28,15560,15561,15563,15565],{"class":30,"line":2045},[28,15562,416],{"class":34},[28,15564,2235],{"class":2225},[28,15566,11115],{"class":38},[28,15568,15569],{"class":30,"line":2839},[28,15570,2662],{"emptyLinePlaceholder":336},[28,15572,15573],{"class":30,"line":2853},[28,15574,15575],{"class":38},"    Person p;\n",[28,15577,15578,15581,15583,15586],{"class":30,"line":2861},[28,15579,15580],{"class":38},"    p.m_Name ",[28,15582,54],{"class":34},[28,15584,15585],{"class":127}," \"李四\"",[28,15587,1558],{"class":38},[28,15589,15590,15593],{"class":30,"line":2866},[28,15591,15592],{"class":87},"    \u002F\u002Fp.m_Car = \"奔驰\";",[28,15594,15595],{"class":87},"  \u002F\u002F保护权限类外访问不到\n",[28,15597,15598,15601],{"class":30,"line":2872},[28,15599,15600],{"class":87},"    \u002F\u002Fp.m_Password = 123;",[28,15602,15603],{"class":87}," \u002F\u002F私有权限类外访问不到\n",[28,15605,15606],{"class":30,"line":2878},[28,15607,2662],{"emptyLinePlaceholder":336},[28,15609,15610,15612,15614,15616],{"class":30,"line":2883},[28,15611,2565],{"class":2225},[28,15613,413],{"class":38},[28,15615,2570],{"class":127},[28,15617,2981],{"class":38},[28,15619,15620],{"class":30,"line":8210},[28,15621,2662],{"emptyLinePlaceholder":336},[28,15623,15624,15626,15628],{"class":30,"line":8234},[28,15625,4352],{"class":34},[28,15627,4355],{"class":60},[28,15629,1558],{"class":38},[28,15631,15632],{"class":30,"line":8239},[28,15633,1830],{"class":38},[380,15635,15637],{"id":15636},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15639,15640,15641,15644,15645],{},"在C++中 struct和class唯一的",[555,15642,15643],{},"区别","就在于 ",[555,15646,15647],{},"默认的访问权限不同",[14,15649,15650],{},"区别：",[1404,15652,15653,15656],{},[366,15654,15655],{},"struct 默认权限为公共",[366,15657,15658],{},"class   默认权限为私有",[18,15660,15662],{"className":10203,"code":15661,"language":10205,"meta":23,"style":23},"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",[25,15663,15664,15671,15675,15685,15689,15693,15700,15704,15714,15718,15722,15730,15734,15739,15753,15757,15762,15776,15780,15790,15794,15802],{"__ignoreMap":23},[28,15665,15666,15668],{"class":30,"line":31},[28,15667,14956],{"class":34},[28,15669,15670],{"class":2225}," C1\n",[28,15672,15673],{"class":30,"line":48},[28,15674,1811],{"class":38},[28,15676,15677,15679,15682],{"class":30,"line":84},[28,15678,2247],{"class":34},[28,15680,15681],{"class":38},"  m_A;",[28,15683,15684],{"class":87}," \u002F\u002F默认是私有权限\n",[28,15686,15687],{"class":30,"line":91},[28,15688,4257],{"class":38},[28,15690,15691],{"class":30,"line":97},[28,15692,2662],{"emptyLinePlaceholder":336},[28,15694,15695,15697],{"class":30,"line":103},[28,15696,8021],{"class":34},[28,15698,15699],{"class":2225}," C2\n",[28,15701,15702],{"class":30,"line":109},[28,15703,1811],{"class":38},[28,15705,15706,15708,15711],{"class":30,"line":118},[28,15707,2247],{"class":34},[28,15709,15710],{"class":38}," m_A;",[28,15712,15713],{"class":87},"  \u002F\u002F默认是公共权限\n",[28,15715,15716],{"class":30,"line":124},[28,15717,4257],{"class":38},[28,15719,15720],{"class":30,"line":131},[28,15721,2662],{"emptyLinePlaceholder":336},[28,15723,15724,15726,15728],{"class":30,"line":137},[28,15725,416],{"class":34},[28,15727,2235],{"class":2225},[28,15729,11115],{"class":38},[28,15731,15732],{"class":30,"line":143},[28,15733,2662],{"emptyLinePlaceholder":336},[28,15735,15736],{"class":30,"line":149},[28,15737,15738],{"class":38},"    C1 c1;\n",[28,15740,15741,15744,15746,15748,15750],{"class":30,"line":1890},[28,15742,15743],{"class":38},"    c1.m_A ",[28,15745,54],{"class":34},[28,15747,2300],{"class":60},[28,15749,465],{"class":38},[28,15751,15752],{"class":87}," \u002F\u002F错误，访问权限是私有\n",[28,15754,15755],{"class":30,"line":1904},[28,15756,2662],{"emptyLinePlaceholder":336},[28,15758,15759],{"class":30,"line":1909},[28,15760,15761],{"class":38},"    C2 c2;\n",[28,15763,15764,15767,15769,15771,15773],{"class":30,"line":1915},[28,15765,15766],{"class":38},"    c2.m_A ",[28,15768,54],{"class":34},[28,15770,2300],{"class":60},[28,15772,465],{"class":38},[28,15774,15775],{"class":87}," \u002F\u002F正确，访问权限是公共\n",[28,15777,15778],{"class":30,"line":1936},[28,15779,2662],{"emptyLinePlaceholder":336},[28,15781,15782,15784,15786,15788],{"class":30,"line":1941},[28,15783,2565],{"class":2225},[28,15785,413],{"class":38},[28,15787,2570],{"class":127},[28,15789,2981],{"class":38},[28,15791,15792],{"class":30,"line":1955},[28,15793,2662],{"emptyLinePlaceholder":336},[28,15795,15796,15798,15800],{"class":30,"line":1960},[28,15797,4352],{"class":34},[28,15799,4355],{"class":60},[28,15801,1558],{"class":38},[28,15803,15804],{"class":30,"line":1989},[28,15805,1830],{"class":38},[380,15807,15809],{"id":15808},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15811,15812],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15814,15815],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15817,15818],{},[555,15819,15397],{},[18,15821,15823],{"className":10203,"code":15822,"language":10205,"meta":23,"style":23},"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",[25,15824,15825,15835,15839,15843,15848,15862,15871,15875,15885,15889,15896,15900,15904,15908,15913,15922,15929,15933,15938,15954,15977,15990,15997,16001,16010,16014,16018,16023,16039,16049,16053,16057,16061,16069,16073,16083,16087,16095,16099,16103,16111,16115,16119,16124,16137,16160,16164,16169,16182,16204,16208,16213,16227,16235,16239,16249,16253,16261],{"__ignoreMap":23},[28,15826,15827,15829,15832],{"class":30,"line":31},[28,15828,14956],{"class":34},[28,15830,15831],{"class":2225}," Person",[28,15833,15834],{"class":38}," {\n",[28,15836,15837],{"class":30,"line":48},[28,15838,14978],{"class":34},[28,15840,15841],{"class":30,"line":84},[28,15842,2662],{"emptyLinePlaceholder":336},[28,15844,15845],{"class":30,"line":91},[28,15846,15847],{"class":87},"    \u002F\u002F姓名设置可读可写\n",[28,15849,15850,15852,15854,15856,15858,15860],{"class":30,"line":97},[28,15851,15171],{"class":34},[28,15853,15174],{"class":2225},[28,15855,413],{"class":38},[28,15857,15179],{"class":2225},[28,15859,15182],{"class":5478},[28,15861,12704],{"class":38},[28,15863,15864,15866,15868],{"class":30,"line":103},[28,15865,15516],{"class":38},[28,15867,54],{"class":34},[28,15869,15870],{"class":38}," name;\n",[28,15872,15873],{"class":30,"line":109},[28,15874,2449],{"class":38},[28,15876,15877,15880,15883],{"class":30,"line":118},[28,15878,15879],{"class":2225},"    string",[28,15881,15882],{"class":2225}," getName",[28,15884,2238],{"class":38},[28,15886,15887],{"class":30,"line":124},[28,15888,2292],{"class":38},[28,15890,15891,15893],{"class":30,"line":131},[28,15892,15014],{"class":34},[28,15894,15895],{"class":38}," m_Name;\n",[28,15897,15898],{"class":30,"line":137},[28,15899,2449],{"class":38},[28,15901,15902],{"class":30,"line":143},[28,15903,2662],{"emptyLinePlaceholder":336},[28,15905,15906],{"class":30,"line":149},[28,15907,2662],{"emptyLinePlaceholder":336},[28,15909,15910],{"class":30,"line":1890},[28,15911,15912],{"class":87},"    \u002F\u002F获取年龄 \n",[28,15914,15915,15917,15920],{"class":30,"line":1904},[28,15916,2247],{"class":34},[28,15918,15919],{"class":2225}," getAge",[28,15921,11115],{"class":38},[28,15923,15924,15926],{"class":30,"line":1909},[28,15925,15014],{"class":34},[28,15927,15928],{"class":38}," m_Age;\n",[28,15930,15931],{"class":30,"line":1915},[28,15932,2449],{"class":38},[28,15934,15935],{"class":30,"line":1936},[28,15936,15937],{"class":87},"    \u002F\u002F设置年龄\n",[28,15939,15940,15942,15945,15947,15949,15952],{"class":30,"line":1941},[28,15941,15171],{"class":34},[28,15943,15944],{"class":2225}," setAge",[28,15946,413],{"class":38},[28,15948,416],{"class":34},[28,15950,15951],{"class":5478}," age",[28,15953,12704],{"class":38},[28,15955,15956,15958,15961,15963,15965,15967,15970,15972,15975],{"class":30,"line":1955},[28,15957,2759],{"class":34},[28,15959,15960],{"class":38}," (age ",[28,15962,1307],{"class":34},[28,15964,4355],{"class":60},[28,15966,3517],{"class":34},[28,15968,15969],{"class":38}," age ",[28,15971,1357],{"class":34},[28,15973,15974],{"class":60}," 150",[28,15976,12704],{"class":38},[28,15978,15979,15981,15983,15986,15988],{"class":30,"line":1960},[28,15980,9981],{"class":38},[28,15982,1441],{"class":34},[28,15984,15985],{"class":127}," \"你个老妖精!\"",[28,15987,1709],{"class":34},[28,15989,9102],{"class":38},[28,15991,15992,15995],{"class":30,"line":1989},[28,15993,15994],{"class":34},"            return",[28,15996,1558],{"class":38},[28,15998,15999],{"class":30,"line":1994},[28,16000,2791],{"class":38},[28,16002,16003,16006,16008],{"class":30,"line":2011},[28,16004,16005],{"class":38},"        m_Age ",[28,16007,54],{"class":34},[28,16009,8059],{"class":38},[28,16011,16012],{"class":30,"line":2016},[28,16013,2449],{"class":38},[28,16015,16016],{"class":30,"line":2021},[28,16017,2662],{"emptyLinePlaceholder":336},[28,16019,16020],{"class":30,"line":2026},[28,16021,16022],{"class":87},"    \u002F\u002F情人设置为只写\n",[28,16024,16025,16027,16030,16032,16034,16037],{"class":30,"line":2040},[28,16026,15171],{"class":34},[28,16028,16029],{"class":2225}," setLover",[28,16031,413],{"class":38},[28,16033,15179],{"class":2225},[28,16035,16036],{"class":5478}," lover",[28,16038,12704],{"class":38},[28,16040,16041,16044,16046],{"class":30,"line":2045},[28,16042,16043],{"class":38},"        m_Lover ",[28,16045,54],{"class":34},[28,16047,16048],{"class":38}," lover;\n",[28,16050,16051],{"class":30,"line":2839},[28,16052,2449],{"class":38},[28,16054,16055],{"class":30,"line":2853},[28,16056,2662],{"emptyLinePlaceholder":336},[28,16058,16059],{"class":30,"line":2861},[28,16060,15484],{"class":34},[28,16062,16063,16066],{"class":30,"line":2866},[28,16064,16065],{"class":38},"    string m_Name;",[28,16067,16068],{"class":87}," \u002F\u002F可读可写  姓名\n",[28,16070,16071],{"class":30,"line":2872},[28,16072,13472],{"class":38},[28,16074,16075,16077,16080],{"class":30,"line":2878},[28,16076,2247],{"class":34},[28,16078,16079],{"class":38}," m_Age;",[28,16081,16082],{"class":87}," \u002F\u002F只读  年龄\n",[28,16084,16085],{"class":30,"line":2883},[28,16086,2662],{"emptyLinePlaceholder":336},[28,16088,16089,16092],{"class":30,"line":8210},[28,16090,16091],{"class":38},"    string m_Lover;",[28,16093,16094],{"class":87}," \u002F\u002F只写  情人\n",[28,16096,16097],{"class":30,"line":8234},[28,16098,4257],{"class":38},[28,16100,16101],{"class":30,"line":8239},[28,16102,2662],{"emptyLinePlaceholder":336},[28,16104,16105,16107,16109],{"class":30,"line":8245},[28,16106,416],{"class":34},[28,16108,2235],{"class":2225},[28,16110,11115],{"class":38},[28,16112,16113],{"class":30,"line":8272},[28,16114,2662],{"emptyLinePlaceholder":336},[28,16116,16117],{"class":30,"line":8277},[28,16118,15575],{"class":38},[28,16120,16121],{"class":30,"line":8283},[28,16122,16123],{"class":87},"    \u002F\u002F姓名设置\n",[28,16125,16126,16129,16131,16133,16135],{"class":30,"line":8295},[28,16127,16128],{"class":38},"    p.",[28,16130,15328],{"class":2225},[28,16132,413],{"class":38},[28,16134,8178],{"class":127},[28,16136,2981],{"class":38},[28,16138,16139,16141,16143,16146,16148,16151,16154,16156,16158],{"class":30,"line":8307},[28,16140,6791],{"class":38},[28,16142,1441],{"class":34},[28,16144,16145],{"class":127}," \"姓名： \"",[28,16147,1709],{"class":34},[28,16149,16150],{"class":38}," p.",[28,16152,16153],{"class":2225},"getName",[28,16155,13312],{"class":38},[28,16157,1441],{"class":34},[28,16159,9102],{"class":38},[28,16161,16162],{"class":30,"line":8319},[28,16163,2662],{"emptyLinePlaceholder":336},[28,16165,16166],{"class":30,"line":9978},[28,16167,16168],{"class":87},"    \u002F\u002F年龄设置\n",[28,16170,16171,16173,16176,16178,16180],{"class":30,"line":10003},[28,16172,16128],{"class":38},[28,16174,16175],{"class":2225},"setAge",[28,16177,413],{"class":38},[28,16179,1054],{"class":60},[28,16181,2981],{"class":38},[28,16183,16184,16186,16188,16191,16193,16195,16198,16200,16202],{"class":30,"line":10026},[28,16185,6791],{"class":38},[28,16187,1441],{"class":34},[28,16189,16190],{"class":127}," \"年龄： \"",[28,16192,1709],{"class":34},[28,16194,16150],{"class":38},[28,16196,16197],{"class":2225},"getAge",[28,16199,13312],{"class":38},[28,16201,1441],{"class":34},[28,16203,9102],{"class":38},[28,16205,16206],{"class":30,"line":10050},[28,16207,2662],{"emptyLinePlaceholder":336},[28,16209,16210],{"class":30,"line":10055},[28,16211,16212],{"class":87},"    \u002F\u002F情人设置\n",[28,16214,16215,16217,16220,16222,16225],{"class":30,"line":10060},[28,16216,16128],{"class":38},[28,16218,16219],{"class":2225},"setLover",[28,16221,413],{"class":38},[28,16223,16224],{"class":127},"\"苍井\"",[28,16226,2981],{"class":38},[28,16228,16229,16232],{"class":30,"line":10065},[28,16230,16231],{"class":87},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[28,16233,16234],{"class":87},"  \u002F\u002F只写属性，不可以读取\n",[28,16236,16237],{"class":30,"line":10074},[28,16238,2662],{"emptyLinePlaceholder":336},[28,16240,16241,16243,16245,16247],{"class":30,"line":10079},[28,16242,2565],{"class":2225},[28,16244,413],{"class":38},[28,16246,2570],{"class":127},[28,16248,2981],{"class":38},[28,16250,16251],{"class":30,"line":10085},[28,16252,2662],{"emptyLinePlaceholder":336},[28,16254,16255,16257,16259],{"class":30,"line":10106},[28,16256,4352],{"class":34},[28,16258,4355],{"class":60},[28,16260,1558],{"class":38},[28,16262,16263],{"class":30,"line":10112},[28,16264,1830],{"class":38},[380,16266,16268],{"id":16267},"_814封装案例","8.1.4封装案例",[363,16270,16271],{},[366,16272,16273,16276],{},[555,16274,16275],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1404,16278,16279,16282],{},[366,16280,16281],{},"求出立方体的面积和体积",[366,16283,16284],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[18,16286,16288],{"className":401,"code":16287,"language":403,"meta":23,"style":23},"#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",[25,16289,16290,16296,16306,16313,16317,16321,16326,16356,16360,16370,16380,16390,16394,16403,16407,16443,16447,16456,16460,16476,16480,16485,16494,16498,16505,16509,16518,16522,16529,16533,16542,16546,16553,16557,16562,16579,16583,16629,16633,16642,16646,16650,16654,16663,16667,16671,16676,16680,16686,16692,16698,16702,16706,16711,16733,16737,16791,16795,16803,16807,16812,16817,16830,16837,16853,16864,16870,16893,16899,16922,16936,16956,16962,16973,16996,17018,17023,17029,17043,17056,17061,17075,17080,17086,17091,17105,17110,17115,17129,17141,17146,17159,17164,17169,17174,17187,17192],{"__ignoreMap":23},[28,16291,16292,16294],{"class":30,"line":31},[28,16293,2211],{"class":34},[28,16295,2214],{"class":127},[28,16297,16298,16300,16302,16304],{"class":30,"line":48},[28,16299,2219],{"class":34},[28,16301,2222],{"class":34},[28,16303,2226],{"class":2225},[28,16305,1558],{"class":38},[28,16307,16308,16310],{"class":30,"line":84},[28,16309,14956],{"class":34},[28,16311,16312],{"class":2225}," Cube\n",[28,16314,16315],{"class":30,"line":91},[28,16316,1811],{"class":38},[28,16318,16319],{"class":30,"line":97},[28,16320,14978],{"class":34},[28,16322,16323],{"class":30,"line":103},[28,16324,16325],{"class":87},"    \u002F\u002F输入长宽高\n",[28,16327,16328,16330,16333,16335,16337,16340,16342,16344,16347,16349,16351,16354],{"class":30,"line":109},[28,16329,15171],{"class":34},[28,16331,16332],{"class":2225}," setLwh",[28,16334,413],{"class":38},[28,16336,416],{"class":34},[28,16338,16339],{"class":5478}," l",[28,16341,64],{"class":38},[28,16343,416],{"class":34},[28,16345,16346],{"class":5478}," w",[28,16348,64],{"class":38},[28,16350,416],{"class":34},[28,16352,16353],{"class":5478}," h",[28,16355,81],{"class":38},[28,16357,16358],{"class":30,"line":118},[28,16359,2292],{"class":38},[28,16361,16362,16365,16367],{"class":30,"line":124},[28,16363,16364],{"class":38},"        m_L",[28,16366,54],{"class":34},[28,16368,16369],{"class":38},"l;\n",[28,16371,16372,16375,16377],{"class":30,"line":131},[28,16373,16374],{"class":38},"        m_W",[28,16376,54],{"class":34},[28,16378,16379],{"class":38},"w;\n",[28,16381,16382,16385,16387],{"class":30,"line":137},[28,16383,16384],{"class":38},"        m_H",[28,16386,54],{"class":34},[28,16388,16389],{"class":38},"h;\n",[28,16391,16392],{"class":30,"line":143},[28,16393,2449],{"class":38},[28,16395,16396,16398,16401],{"class":30,"line":149},[28,16397,2247],{"class":34},[28,16399,16400],{"class":2225}," mianji",[28,16402,2238],{"class":38},[28,16404,16405],{"class":30,"line":1890},[28,16406,2292],{"class":38},[28,16408,16409,16411,16413,16415,16418,16420,16423,16425,16428,16430,16433,16435,16438,16440],{"class":30,"line":1904},[28,16410,15014],{"class":34},[28,16412,15017],{"class":60},[28,16414,854],{"class":34},[28,16416,16417],{"class":38},"(m_L",[28,16419,854],{"class":34},[28,16421,16422],{"class":38},"m_W ",[28,16424,880],{"class":34},[28,16426,16427],{"class":38}," m_L",[28,16429,854],{"class":34},[28,16431,16432],{"class":38},"m_H ",[28,16434,880],{"class":34},[28,16436,16437],{"class":38}," m_W",[28,16439,854],{"class":34},[28,16441,16442],{"class":38},"m_H);\n",[28,16444,16445],{"class":30,"line":1909},[28,16446,2449],{"class":38},[28,16448,16449,16451,16454],{"class":30,"line":1915},[28,16450,2247],{"class":34},[28,16452,16453],{"class":2225}," tiji",[28,16455,2238],{"class":38},[28,16457,16458],{"class":30,"line":1936},[28,16459,2292],{"class":38},[28,16461,16462,16464,16466,16468,16471,16473],{"class":30,"line":1941},[28,16463,15014],{"class":34},[28,16465,16427],{"class":38},[28,16467,854],{"class":34},[28,16469,16470],{"class":38},"m_W",[28,16472,854],{"class":34},[28,16474,16475],{"class":38},"m_H;\n",[28,16477,16478],{"class":30,"line":1955},[28,16479,2449],{"class":38},[28,16481,16482],{"class":30,"line":1960},[28,16483,16484],{"class":87},"    \u002F\u002F获取长宽高\n",[28,16486,16487,16489,16492],{"class":30,"line":1989},[28,16488,2247],{"class":34},[28,16490,16491],{"class":2225}," getLength",[28,16493,2238],{"class":38},[28,16495,16496],{"class":30,"line":1994},[28,16497,2292],{"class":38},[28,16499,16500,16502],{"class":30,"line":2011},[28,16501,15014],{"class":34},[28,16503,16504],{"class":38}," m_L;\n",[28,16506,16507],{"class":30,"line":2016},[28,16508,2449],{"class":38},[28,16510,16511,16513,16516],{"class":30,"line":2021},[28,16512,2247],{"class":34},[28,16514,16515],{"class":2225}," getWidth",[28,16517,2238],{"class":38},[28,16519,16520],{"class":30,"line":2026},[28,16521,2292],{"class":38},[28,16523,16524,16526],{"class":30,"line":2040},[28,16525,15014],{"class":34},[28,16527,16528],{"class":38}," m_W;\n",[28,16530,16531],{"class":30,"line":2045},[28,16532,2449],{"class":38},[28,16534,16535,16537,16540],{"class":30,"line":2839},[28,16536,2247],{"class":34},[28,16538,16539],{"class":2225}," getHeight",[28,16541,2238],{"class":38},[28,16543,16544],{"class":30,"line":2853},[28,16545,2292],{"class":38},[28,16547,16548,16550],{"class":30,"line":2861},[28,16549,15014],{"class":34},[28,16551,16552],{"class":38}," m_H;\n",[28,16554,16555],{"class":30,"line":2866},[28,16556,2449],{"class":38},[28,16558,16559],{"class":30,"line":2872},[28,16560,16561],{"class":87},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[28,16563,16564,16567,16570,16572,16575,16577],{"class":30,"line":2878},[28,16565,16566],{"class":34},"    bool",[28,16568,16569],{"class":2225}," isEqual",[28,16571,413],{"class":38},[28,16573,16574],{"class":2225},"Cube",[28,16576,3111],{"class":5478},[28,16578,81],{"class":38},[28,16580,16581],{"class":30,"line":2883},[28,16582,2292],{"class":38},[28,16584,16585,16587,16590,16593,16595,16597,16600,16602,16605,16608,16610,16612,16615,16617,16619,16622,16624,16626],{"class":30,"line":8210},[28,16586,2759],{"class":34},[28,16588,16589],{"class":38}," (c.",[28,16591,16592],{"class":2225},"getLength",[28,16594,13312],{"class":38},[28,16596,3211],{"class":34},[28,16598,16599],{"class":38}," m_L ",[28,16601,1977],{"class":34},[28,16603,16604],{"class":38}," c.",[28,16606,16607],{"class":2225},"getWidth",[28,16609,13312],{"class":38},[28,16611,3211],{"class":34},[28,16613,16614],{"class":38}," m_W ",[28,16616,1977],{"class":34},[28,16618,16604],{"class":38},[28,16620,16621],{"class":2225},"getHeight",[28,16623,13312],{"class":38},[28,16625,3211],{"class":34},[28,16627,16628],{"class":38}," m_H)\n",[28,16630,16631],{"class":30,"line":8234},[28,16632,2772],{"class":38},[28,16634,16635,16637,16640],{"class":30,"line":8239},[28,16636,15994],{"class":34},[28,16638,16639],{"class":60}," true",[28,16641,1558],{"class":38},[28,16643,16644],{"class":30,"line":8245},[28,16645,2791],{"class":38},[28,16647,16648],{"class":30,"line":8272},[28,16649,2832],{"class":34},[28,16651,16652],{"class":30,"line":8277},[28,16653,2772],{"class":38},[28,16655,16656,16658,16661],{"class":30,"line":8283},[28,16657,15994],{"class":34},[28,16659,16660],{"class":60}," false",[28,16662,1558],{"class":38},[28,16664,16665],{"class":30,"line":8295},[28,16666,2791],{"class":38},[28,16668,16669],{"class":30,"line":8307},[28,16670,2449],{"class":38},[28,16672,16673],{"class":30,"line":8319},[28,16674,16675],{"class":87},"    \u002F\u002F私有属性\n",[28,16677,16678],{"class":30,"line":9978},[28,16679,15484],{"class":34},[28,16681,16682,16684],{"class":30,"line":10003},[28,16683,2247],{"class":34},[28,16685,16504],{"class":38},[28,16687,16688,16690],{"class":30,"line":10026},[28,16689,2247],{"class":34},[28,16691,16528],{"class":38},[28,16693,16694,16696],{"class":30,"line":10050},[28,16695,2247],{"class":34},[28,16697,16552],{"class":38},[28,16699,16700],{"class":30,"line":10055},[28,16701,2662],{"emptyLinePlaceholder":336},[28,16703,16704],{"class":30,"line":10060},[28,16705,4257],{"class":38},[28,16707,16708],{"class":30,"line":10065},[28,16709,16710],{"class":87},"\u002F\u002F全局函数判断两个立方体是否相等\n",[28,16712,16713,16715,16717,16719,16721,16724,16726,16728,16731],{"class":30,"line":10074},[28,16714,1619],{"class":34},[28,16716,16569],{"class":2225},[28,16718,413],{"class":38},[28,16720,16574],{"class":2225},[28,16722,16723],{"class":5478}," c1",[28,16725,64],{"class":38},[28,16727,16574],{"class":2225},[28,16729,16730],{"class":5478}," c2",[28,16732,81],{"class":38},[28,16734,16735],{"class":30,"line":10079},[28,16736,1811],{"class":38},[28,16738,16739,16741,16744,16746,16748,16750,16753,16755,16758,16760,16762,16764,16766,16768,16770,16772,16774,16776,16778,16780,16782,16784,16786,16788],{"class":30,"line":10085},[28,16740,4352],{"class":34},[28,16742,16743],{"class":38}," (c1.",[28,16745,16592],{"class":2225},[28,16747,13312],{"class":38},[28,16749,3211],{"class":34},[28,16751,16752],{"class":38}," c2.",[28,16754,16592],{"class":2225},[28,16756,16757],{"class":38},"()) ",[28,16759,1977],{"class":34},[28,16761,16743],{"class":38},[28,16763,16607],{"class":2225},[28,16765,13312],{"class":38},[28,16767,3211],{"class":34},[28,16769,16752],{"class":38},[28,16771,16607],{"class":2225},[28,16773,16757],{"class":38},[28,16775,1977],{"class":34},[28,16777,16743],{"class":38},[28,16779,16621],{"class":2225},[28,16781,13312],{"class":38},[28,16783,3211],{"class":34},[28,16785,16752],{"class":38},[28,16787,16621],{"class":2225},[28,16789,16790],{"class":38},"());\n",[28,16792,16793],{"class":30,"line":10106},[28,16794,1830],{"class":38},[28,16796,16797,16799,16801],{"class":30,"line":10112},[28,16798,416],{"class":34},[28,16800,2235],{"class":2225},[28,16802,2238],{"class":38},[28,16804,16805],{"class":30,"line":10126},[28,16806,1811],{"class":38},[28,16808,16809],{"class":30,"line":10132},[28,16810,16811],{"class":38},"    Cube c1;\n",[28,16813,16814],{"class":30,"line":10159},[28,16815,16816],{"class":87},"    \u002F\u002F输入立方体的长宽高\n",[28,16818,16819,16821,16823,16826,16828],{"class":30,"line":10168},[28,16820,1816],{"class":38},[28,16822,1441],{"class":34},[28,16824,16825],{"class":127},"\"请输入第一个立方体的长、宽、高：\"",[28,16827,1441],{"class":34},[28,16829,1463],{"class":38},[28,16831,16832,16834],{"class":30,"line":10174},[28,16833,2247],{"class":34},[28,16835,16836],{"class":38}," l,w,h,l1,w1,h1;\n",[28,16838,16839,16841,16843,16845,16847,16849,16851],{"class":30,"line":10182},[28,16840,2274],{"class":38},[28,16842,1694],{"class":34},[28,16844,917],{"class":38},[28,16846,1694],{"class":34},[28,16848,1193],{"class":38},[28,16850,1694],{"class":34},[28,16852,16389],{"class":38},[28,16854,16855,16858,16861],{"class":30,"line":10187},[28,16856,16857],{"class":38},"    c1.",[28,16859,16860],{"class":2225},"setLwh",[28,16862,16863],{"class":38},"(l,w,h);\n",[28,16865,16867],{"class":30,"line":16866},66,[28,16868,16869],{"class":87},"    \u002F\u002F面积\n",[28,16871,16873,16875,16877,16880,16882,16884,16887,16889,16891],{"class":30,"line":16872},67,[28,16874,1816],{"class":38},[28,16876,1441],{"class":34},[28,16878,16879],{"class":127},"\"立方体的表面积为：\"",[28,16881,1441],{"class":34},[28,16883,15092],{"class":38},[28,16885,16886],{"class":2225},"mianji",[28,16888,2689],{"class":38},[28,16890,1441],{"class":34},[28,16892,1463],{"class":38},[28,16894,16896],{"class":30,"line":16895},68,[28,16897,16898],{"class":87},"    \u002F\u002F体积\n",[28,16900,16902,16904,16906,16909,16911,16913,16916,16918,16920],{"class":30,"line":16901},69,[28,16903,1816],{"class":38},[28,16905,1441],{"class":34},[28,16907,16908],{"class":127},"\"立方体的体积为：\"",[28,16910,1441],{"class":34},[28,16912,15092],{"class":38},[28,16914,16915],{"class":2225},"tiji",[28,16917,2689],{"class":38},[28,16919,1441],{"class":34},[28,16921,1463],{"class":38},[28,16923,16925,16927,16929,16932,16934],{"class":30,"line":16924},70,[28,16926,1816],{"class":38},[28,16928,1441],{"class":34},[28,16930,16931],{"class":127},"\"请输入第二个立方体的长、宽、高：\"",[28,16933,1441],{"class":34},[28,16935,1463],{"class":38},[28,16937,16939,16941,16943,16946,16948,16951,16953],{"class":30,"line":16938},71,[28,16940,2274],{"class":38},[28,16942,1694],{"class":34},[28,16944,16945],{"class":38},"l1",[28,16947,1694],{"class":34},[28,16949,16950],{"class":38},"w1",[28,16952,1694],{"class":34},[28,16954,16955],{"class":38},"h1;\n",[28,16957,16959],{"class":30,"line":16958},72,[28,16960,16961],{"class":38},"    Cube c2;\n",[28,16963,16965,16968,16970],{"class":30,"line":16964},73,[28,16966,16967],{"class":38},"    c2.",[28,16969,16860],{"class":2225},[28,16971,16972],{"class":38},"(l1,w1,h1);\n",[28,16974,16976,16978,16980,16983,16985,16988,16990,16992,16994],{"class":30,"line":16975},74,[28,16977,1816],{"class":38},[28,16979,1441],{"class":34},[28,16981,16982],{"class":127},"\"第二个立方体的表面积为：\"",[28,16984,1441],{"class":34},[28,16986,16987],{"class":38},"c2.",[28,16989,16886],{"class":2225},[28,16991,2689],{"class":38},[28,16993,1441],{"class":34},[28,16995,1463],{"class":38},[28,16997,16999,17001,17003,17006,17008,17010,17012,17014,17016],{"class":30,"line":16998},75,[28,17000,1816],{"class":38},[28,17002,1441],{"class":34},[28,17004,17005],{"class":127},"\"第二个立方体的体积为：\"",[28,17007,1441],{"class":34},[28,17009,16987],{"class":38},[28,17011,16915],{"class":2225},[28,17013,2689],{"class":38},[28,17015,1441],{"class":34},[28,17017,1463],{"class":38},[28,17019,17021],{"class":30,"line":17020},76,[28,17022,2662],{"emptyLinePlaceholder":336},[28,17024,17026],{"class":30,"line":17025},77,[28,17027,17028],{"class":87},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[28,17030,17032,17034,17036,17039,17041],{"class":30,"line":17031},78,[28,17033,1816],{"class":38},[28,17035,1441],{"class":34},[28,17037,17038],{"class":127},"\"内部函数判断结果：\"",[28,17040,1441],{"class":34},[28,17042,1463],{"class":38},[28,17044,17046,17048,17050,17053],{"class":30,"line":17045},79,[28,17047,3363],{"class":34},[28,17049,16743],{"class":38},[28,17051,17052],{"class":2225},"isEqual",[28,17054,17055],{"class":38},"(c2))\n",[28,17057,17059],{"class":30,"line":17058},80,[28,17060,2292],{"class":38},[28,17062,17064,17066,17068,17071,17073],{"class":30,"line":17063},81,[28,17065,3713],{"class":38},[28,17067,1441],{"class":34},[28,17069,17070],{"class":127},"\"两个立方体相等\"",[28,17072,1441],{"class":34},[28,17074,1463],{"class":38},[28,17076,17078],{"class":30,"line":17077},82,[28,17079,2449],{"class":38},[28,17081,17083],{"class":30,"line":17082},83,[28,17084,17085],{"class":34},"    else\n",[28,17087,17089],{"class":30,"line":17088},84,[28,17090,2292],{"class":38},[28,17092,17094,17096,17098,17101,17103],{"class":30,"line":17093},85,[28,17095,3713],{"class":38},[28,17097,1441],{"class":34},[28,17099,17100],{"class":127},"\"两个立方体不相等\"",[28,17102,1441],{"class":34},[28,17104,1463],{"class":38},[28,17106,17108],{"class":30,"line":17107},86,[28,17109,2449],{"class":38},[28,17111,17113],{"class":30,"line":17112},87,[28,17114,2662],{"emptyLinePlaceholder":336},[28,17116,17118,17120,17122,17125,17127],{"class":30,"line":17117},88,[28,17119,1816],{"class":38},[28,17121,1441],{"class":34},[28,17123,17124],{"class":127},"\"全局函数判断结果：\"",[28,17126,1441],{"class":34},[28,17128,1463],{"class":38},[28,17130,17132,17134,17136,17138],{"class":30,"line":17131},89,[28,17133,3363],{"class":34},[28,17135,1920],{"class":38},[28,17137,17052],{"class":2225},[28,17139,17140],{"class":38},"(c1, c2))\n",[28,17142,17144],{"class":30,"line":17143},90,[28,17145,2292],{"class":38},[28,17147,17149,17151,17153,17155,17157],{"class":30,"line":17148},91,[28,17150,3713],{"class":38},[28,17152,1441],{"class":34},[28,17154,17070],{"class":127},[28,17156,1441],{"class":34},[28,17158,1463],{"class":38},[28,17160,17162],{"class":30,"line":17161},92,[28,17163,2449],{"class":38},[28,17165,17167],{"class":30,"line":17166},93,[28,17168,17085],{"class":34},[28,17170,17172],{"class":30,"line":17171},94,[28,17173,2292],{"class":38},[28,17175,17177,17179,17181,17183,17185],{"class":30,"line":17176},95,[28,17178,3713],{"class":38},[28,17180,1441],{"class":34},[28,17182,17100],{"class":127},[28,17184,1441],{"class":34},[28,17186,1463],{"class":38},[28,17188,17190],{"class":30,"line":17189},96,[28,17191,2449],{"class":38},[28,17193,17195],{"class":30,"line":17194},97,[28,17196,1830],{"class":38},[363,17198,17199],{"start":48},[366,17200,17201],{},[555,17202,17203],{},"练习案例2：点和圆的关系",[1404,17205,17206],{},[366,17207,17208],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[18,17210,17212],{"className":401,"code":17211,"language":403,"meta":23,"style":23},"#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",[25,17213,17214,17220,17230,17237,17244,17248,17252,17257,17291,17296,17312,17326,17330,17334,17341,17348,17352,17358,17362,17366,17370,17392,17415,17420,17434,17449,17453,17457,17463,17468,17473,17477,17503,17507,17537,17565,17593,17610,17614,17627,17631,17635,17639,17652,17656,17660,17668,17672,17676,17680,17685,17689,17700,17707,17716,17726,17737,17744,17757,17768,17778,17789,17796,17810,17815,17825,17833],{"__ignoreMap":23},[28,17215,17216,17218],{"class":30,"line":31},[28,17217,2211],{"class":34},[28,17219,2214],{"class":127},[28,17221,17222,17224,17226,17228],{"class":30,"line":48},[28,17223,2219],{"class":34},[28,17225,2222],{"class":34},[28,17227,2226],{"class":2225},[28,17229,1558],{"class":38},[28,17231,17232,17234],{"class":30,"line":84},[28,17233,2211],{"class":34},[28,17235,17236],{"class":127},"\u003Ccmath>\n",[28,17238,17239,17241],{"class":30,"line":91},[28,17240,14956],{"class":34},[28,17242,17243],{"class":2225}," Point\n",[28,17245,17246],{"class":30,"line":97},[28,17247,1811],{"class":38},[28,17249,17250],{"class":30,"line":103},[28,17251,14978],{"class":34},[28,17253,17254],{"class":30,"line":109},[28,17255,17256],{"class":87},"    \u002F\u002F赋值\n",[28,17258,17259,17261,17264,17266,17268,17271,17273,17275,17278,17281,17283,17286,17288],{"class":30,"line":118},[28,17260,15171],{"class":34},[28,17262,17263],{"class":2225}," setPoint",[28,17265,413],{"class":38},[28,17267,14299],{"class":34},[28,17269,17270],{"class":5478}," x",[28,17272,12697],{"class":38},[28,17274,14299],{"class":34},[28,17276,17277],{"class":5478}," y",[28,17279,17280],{"class":38},") { m_x ",[28,17282,54],{"class":34},[28,17284,17285],{"class":38}," x; m_y ",[28,17287,54],{"class":34},[28,17289,17290],{"class":38}," y; }\n",[28,17292,17293],{"class":30,"line":124},[28,17294,17295],{"class":87},"    \u002F\u002F获取坐标\n",[28,17297,17298,17300,17303,17306,17309],{"class":30,"line":131},[28,17299,15000],{"class":34},[28,17301,17302],{"class":2225}," getX",[28,17304,17305],{"class":38},"() { ",[28,17307,17308],{"class":34},"return",[28,17310,17311],{"class":38}," m_x; }\n",[28,17313,17314,17316,17319,17321,17323],{"class":30,"line":137},[28,17315,15000],{"class":34},[28,17317,17318],{"class":2225}," getY",[28,17320,17305],{"class":38},[28,17322,17308],{"class":34},[28,17324,17325],{"class":38}," m_y; }\n",[28,17327,17328],{"class":30,"line":143},[28,17329,2662],{"emptyLinePlaceholder":336},[28,17331,17332],{"class":30,"line":149},[28,17333,15484],{"class":34},[28,17335,17336,17338],{"class":30,"line":1890},[28,17337,15000],{"class":34},[28,17339,17340],{"class":38}," m_x;\n",[28,17342,17343,17345],{"class":30,"line":1904},[28,17344,15000],{"class":34},[28,17346,17347],{"class":38}," m_y;\n",[28,17349,17350],{"class":30,"line":1909},[28,17351,4257],{"class":38},[28,17353,17354,17356],{"class":30,"line":1915},[28,17355,14956],{"class":34},[28,17357,14959],{"class":2225},[28,17359,17360],{"class":30,"line":1936},[28,17361,1811],{"class":38},[28,17363,17364],{"class":30,"line":1941},[28,17365,14978],{"class":34},[28,17367,17368],{"class":30,"line":1955},[28,17369,17256],{"class":87},[28,17371,17372,17374,17377,17379,17381,17384,17387,17389],{"class":30,"line":1960},[28,17373,15171],{"class":34},[28,17375,17376],{"class":2225}," setRadius",[28,17378,413],{"class":38},[28,17380,14299],{"class":34},[28,17382,17383],{"class":5478}," r",[28,17385,17386],{"class":38},") { m_r ",[28,17388,54],{"class":34},[28,17390,17391],{"class":38}," r; }\n",[28,17393,17394,17396,17399,17401,17404,17407,17410,17412],{"class":30,"line":1989},[28,17395,15171],{"class":34},[28,17397,17398],{"class":2225}," setCenter",[28,17400,413],{"class":38},[28,17402,17403],{"class":2225},"Point",[28,17405,17406],{"class":5478}," center",[28,17408,17409],{"class":38},") { m_center ",[28,17411,54],{"class":34},[28,17413,17414],{"class":38}," center; }\n",[28,17416,17417],{"class":30,"line":1994},[28,17418,17419],{"class":87},"    \u002F\u002F获取属性\n",[28,17421,17422,17424,17427,17429,17431],{"class":30,"line":2011},[28,17423,15000],{"class":34},[28,17425,17426],{"class":2225}," getRadius",[28,17428,17305],{"class":38},[28,17430,17308],{"class":34},[28,17432,17433],{"class":38}," m_r; }\n",[28,17435,17436,17439,17442,17444,17446],{"class":30,"line":2016},[28,17437,17438],{"class":2225},"    Point",[28,17440,17441],{"class":2225}," getCenter",[28,17443,17305],{"class":38},[28,17445,17308],{"class":34},[28,17447,17448],{"class":38}," m_center; }\n",[28,17450,17451],{"class":30,"line":2021},[28,17452,2662],{"emptyLinePlaceholder":336},[28,17454,17455],{"class":30,"line":2026},[28,17456,15484],{"class":34},[28,17458,17459,17461],{"class":30,"line":2040},[28,17460,15000],{"class":34},[28,17462,14990],{"class":38},[28,17464,17465],{"class":30,"line":2045},[28,17466,17467],{"class":87},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[28,17469,17470],{"class":30,"line":2839},[28,17471,17472],{"class":38},"    Point m_center;\n",[28,17474,17475],{"class":30,"line":2853},[28,17476,4257],{"class":38},[28,17478,17479,17481,17484,17486,17489,17491,17493,17495,17497,17499,17501],{"class":30,"line":2861},[28,17480,5626],{"class":34},[28,17482,17483],{"class":2225}," isInCircle",[28,17485,413],{"class":38},[28,17487,17488],{"class":2225},"Circle",[28,17490,10846],{"class":34},[28,17492,691],{"class":5478},[28,17494,64],{"class":38},[28,17496,17403],{"class":2225},[28,17498,10846],{"class":34},[28,17500,14],{"class":5478},[28,17502,81],{"class":38},[28,17504,17505],{"class":30,"line":2866},[28,17506,1811],{"class":38},[28,17508,17509,17511,17514,17516,17518,17521,17524,17527,17529,17531,17533,17535],{"class":30,"line":2872},[28,17510,15000],{"class":34},[28,17512,17513],{"class":38}," dx ",[28,17515,54],{"class":34},[28,17517,16604],{"class":38},[28,17519,17520],{"class":2225},"getCenter",[28,17522,17523],{"class":38},"().",[28,17525,17526],{"class":2225},"getX",[28,17528,13312],{"class":38},[28,17530,930],{"class":34},[28,17532,16150],{"class":38},[28,17534,17526],{"class":2225},[28,17536,5898],{"class":38},[28,17538,17539,17541,17544,17546,17548,17550,17552,17555,17557,17559,17561,17563],{"class":30,"line":2878},[28,17540,15000],{"class":34},[28,17542,17543],{"class":38}," dy ",[28,17545,54],{"class":34},[28,17547,16604],{"class":38},[28,17549,17520],{"class":2225},[28,17551,17523],{"class":38},[28,17553,17554],{"class":2225},"getY",[28,17556,13312],{"class":38},[28,17558,930],{"class":34},[28,17560,16150],{"class":38},[28,17562,17554],{"class":2225},[28,17564,5898],{"class":38},[28,17566,17567,17569,17572,17574,17577,17580,17582,17584,17586,17588,17590],{"class":30,"line":2883},[28,17568,15000],{"class":34},[28,17570,17571],{"class":38}," distance ",[28,17573,54],{"class":34},[28,17575,17576],{"class":2225}," sqrt",[28,17578,17579],{"class":38},"(dx ",[28,17581,854],{"class":34},[28,17583,17513],{"class":38},[28,17585,880],{"class":34},[28,17587,17543],{"class":38},[28,17589,854],{"class":34},[28,17591,17592],{"class":38}," dy);\n",[28,17594,17595,17597,17600,17602,17604,17607],{"class":30,"line":8210},[28,17596,3363],{"class":34},[28,17598,17599],{"class":38}," (distance ",[28,17601,1307],{"class":34},[28,17603,16604],{"class":38},[28,17605,17606],{"class":2225},"getRadius",[28,17608,17609],{"class":38},"())\n",[28,17611,17612],{"class":30,"line":8234},[28,17613,2292],{"class":38},[28,17615,17616,17618,17620,17623,17625],{"class":30,"line":8239},[28,17617,9931],{"class":38},[28,17619,1441],{"class":34},[28,17621,17622],{"class":127}," \"点在圆内\"",[28,17624,1709],{"class":34},[28,17626,9102],{"class":38},[28,17628,17629],{"class":30,"line":8245},[28,17630,2449],{"class":38},[28,17632,17633],{"class":30,"line":8272},[28,17634,17085],{"class":34},[28,17636,17637],{"class":30,"line":8277},[28,17638,2292],{"class":38},[28,17640,17641,17643,17645,17648,17650],{"class":30,"line":8283},[28,17642,9931],{"class":38},[28,17644,1441],{"class":34},[28,17646,17647],{"class":127}," \"点在圆外\"",[28,17649,1709],{"class":34},[28,17651,9102],{"class":38},[28,17653,17654],{"class":30,"line":8295},[28,17655,2449],{"class":38},[28,17657,17658],{"class":30,"line":8307},[28,17659,1830],{"class":38},[28,17661,17662,17664,17666],{"class":30,"line":8319},[28,17663,416],{"class":34},[28,17665,2235],{"class":2225},[28,17667,2238],{"class":38},[28,17669,17670],{"class":30,"line":9978},[28,17671,1811],{"class":38},[28,17673,17674],{"class":30,"line":10003},[28,17675,15315],{"class":87},[28,17677,17678],{"class":30,"line":10026},[28,17679,15062],{"class":38},[28,17681,17682],{"class":30,"line":10050},[28,17683,17684],{"class":38},"    Point p1;\n",[28,17686,17687],{"class":30,"line":10055},[28,17688,17256],{"class":87},[28,17690,17691,17693,17695,17698],{"class":30,"line":10060},[28,17692,1816],{"class":38},[28,17694,1441],{"class":34},[28,17696,17697],{"class":127},"\"请输入圆的半径：\"",[28,17699,1558],{"class":38},[28,17701,17702,17704],{"class":30,"line":10065},[28,17703,15000],{"class":34},[28,17705,17706],{"class":38}," r;\n",[28,17708,17709,17711,17713],{"class":30,"line":10074},[28,17710,2274],{"class":38},[28,17712,1694],{"class":34},[28,17714,17715],{"class":38},"r;\n",[28,17717,17718,17720,17723],{"class":30,"line":10079},[28,17719,16857],{"class":38},[28,17721,17722],{"class":2225},"setRadius",[28,17724,17725],{"class":38},"(r);\n",[28,17727,17728,17730,17732,17735],{"class":30,"line":10085},[28,17729,1816],{"class":38},[28,17731,1441],{"class":34},[28,17733,17734],{"class":127},"\"请输入圆心坐标：\"",[28,17736,1558],{"class":38},[28,17738,17739,17741],{"class":30,"line":10106},[28,17740,15000],{"class":34},[28,17742,17743],{"class":38}," x, y;\n",[28,17745,17746,17748,17750,17752,17754],{"class":30,"line":10112},[28,17747,2274],{"class":38},[28,17749,1694],{"class":34},[28,17751,185],{"class":38},[28,17753,1694],{"class":34},[28,17755,17756],{"class":38},"y;\n",[28,17758,17759,17762,17765],{"class":30,"line":10126},[28,17760,17761],{"class":38},"    p1.",[28,17763,17764],{"class":2225},"setPoint",[28,17766,17767],{"class":38},"(x, y);\n",[28,17769,17770,17772,17775],{"class":30,"line":10132},[28,17771,16857],{"class":38},[28,17773,17774],{"class":2225},"setCenter",[28,17776,17777],{"class":38},"(p1);\n",[28,17779,17780,17782,17784,17787],{"class":30,"line":10159},[28,17781,1816],{"class":38},[28,17783,1441],{"class":34},[28,17785,17786],{"class":127},"\"请输入测试点坐标：\"",[28,17788,1558],{"class":38},[28,17790,17791,17793],{"class":30,"line":10168},[28,17792,15000],{"class":34},[28,17794,17795],{"class":38}," x1, y1;\n",[28,17797,17798,17800,17802,17805,17807],{"class":30,"line":10174},[28,17799,2274],{"class":38},[28,17801,1694],{"class":34},[28,17803,17804],{"class":38},"x1",[28,17806,1694],{"class":34},[28,17808,17809],{"class":38},"y1;\n",[28,17811,17812],{"class":30,"line":10182},[28,17813,17814],{"class":38},"    Point p2;\n",[28,17816,17817,17820,17822],{"class":30,"line":10187},[28,17818,17819],{"class":38},"    p2.",[28,17821,17764],{"class":2225},[28,17823,17824],{"class":38},"(x1, y1);\n",[28,17826,17827,17830],{"class":30,"line":16866},[28,17828,17829],{"class":2225},"    isInCircle",[28,17831,17832],{"class":38},"(c1, p2);\n",[28,17834,17835],{"class":30,"line":16872},[28,17836,1830],{"class":38},[14,17838,17839],{},"在类中可以让另一个类作为本来的成员",[14,17841,17842],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17844,17845],{},"创建point.h",[18,17847,17849],{"className":401,"code":17848,"language":403,"meta":23,"style":23},"#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",[25,17850,17851,17862,17868,17878,17884,17888,17893,17897,17901,17921,17925,17933,17941,17945,17949,17955,17961],{"__ignoreMap":23},[28,17852,17853,17856,17859],{"class":30,"line":31},[28,17854,17855],{"class":34},"#pragma",[28,17857,17858],{"class":2225}," once",[28,17860,17861],{"class":87}," \u002F\u002F防止头文件重复包含\n",[28,17863,17864,17866],{"class":30,"line":48},[28,17865,2211],{"class":34},[28,17867,2214],{"class":127},[28,17869,17870,17872,17874,17876],{"class":30,"line":84},[28,17871,2219],{"class":34},[28,17873,2222],{"class":34},[28,17875,2226],{"class":2225},[28,17877,1558],{"class":38},[28,17879,17880,17882],{"class":30,"line":91},[28,17881,14956],{"class":34},[28,17883,17243],{"class":2225},[28,17885,17886],{"class":30,"line":97},[28,17887,1811],{"class":38},[28,17889,17890],{"class":30,"line":103},[28,17891,17892],{"class":87},"\u002F\u002F做好声明与变量定义就可以\n",[28,17894,17895],{"class":30,"line":109},[28,17896,14978],{"class":34},[28,17898,17899],{"class":30,"line":118},[28,17900,17256],{"class":87},[28,17902,17903,17905,17907,17909,17911,17913,17915,17917,17919],{"class":30,"line":124},[28,17904,15171],{"class":34},[28,17906,17263],{"class":2225},[28,17908,413],{"class":38},[28,17910,14299],{"class":34},[28,17912,17270],{"class":5478},[28,17914,12697],{"class":38},[28,17916,14299],{"class":34},[28,17918,17277],{"class":5478},[28,17920,2981],{"class":38},[28,17922,17923],{"class":30,"line":131},[28,17924,17295],{"class":87},[28,17926,17927,17929,17931],{"class":30,"line":137},[28,17928,15000],{"class":34},[28,17930,17302],{"class":2225},[28,17932,5898],{"class":38},[28,17934,17935,17937,17939],{"class":30,"line":143},[28,17936,15000],{"class":34},[28,17938,17318],{"class":2225},[28,17940,5898],{"class":38},[28,17942,17943],{"class":30,"line":149},[28,17944,2662],{"emptyLinePlaceholder":336},[28,17946,17947],{"class":30,"line":1890},[28,17948,15484],{"class":34},[28,17950,17951,17953],{"class":30,"line":1904},[28,17952,15000],{"class":34},[28,17954,17340],{"class":38},[28,17956,17957,17959],{"class":30,"line":1909},[28,17958,15000],{"class":34},[28,17960,17347],{"class":38},[28,17962,17963],{"class":30,"line":1915},[28,17964,4257],{"class":38},[14,17966,17967],{},"创建point.cpp",[18,17969,17971],{"className":401,"code":17970,"language":403,"meta":23,"style":23},"#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",[25,17972,17973,17980,17985,18019,18023,18039],{"__ignoreMap":23},[28,17974,17975,17977],{"class":30,"line":31},[28,17976,2211],{"class":34},[28,17978,17979],{"class":127},"\u003Cpoint.h>\n",[28,17981,17982],{"class":30,"line":48},[28,17983,17984],{"class":87},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[28,17986,17987,17989,17992,17995,17997,17999,18001,18003,18005,18007,18009,18011,18013,18015,18017],{"class":30,"line":84},[28,17988,15171],{"class":34},[28,17990,17991],{"class":2225}," Point",[28,17993,17994],{"class":38},"::",[28,17996,17764],{"class":2225},[28,17998,413],{"class":38},[28,18000,14299],{"class":34},[28,18002,17270],{"class":5478},[28,18004,12697],{"class":38},[28,18006,14299],{"class":34},[28,18008,17277],{"class":5478},[28,18010,17280],{"class":38},[28,18012,54],{"class":34},[28,18014,17285],{"class":38},[28,18016,54],{"class":34},[28,18018,17290],{"class":38},[28,18020,18021],{"class":30,"line":91},[28,18022,17295],{"class":87},[28,18024,18025,18027,18029,18031,18033,18035,18037],{"class":30,"line":97},[28,18026,15000],{"class":34},[28,18028,17991],{"class":2225},[28,18030,17994],{"class":38},[28,18032,17526],{"class":2225},[28,18034,17305],{"class":38},[28,18036,17308],{"class":34},[28,18038,17311],{"class":38},[28,18040,18041,18043,18045,18047,18049,18051,18053],{"class":30,"line":103},[28,18042,15000],{"class":34},[28,18044,17991],{"class":2225},[28,18046,17994],{"class":38},[28,18048,17554],{"class":2225},[28,18050,17305],{"class":38},[28,18052,17308],{"class":34},[28,18054,17325],{"class":38},[14,18056,18057],{},"创建circle.h",[18,18059,18061],{"className":401,"code":18060,"language":403,"meta":23,"style":23},"#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",[25,18062,18063,18070,18076,18086,18092,18098,18102,18106,18110,18124,18138,18142,18150,18158,18162,18166,18172,18176,18180],{"__ignoreMap":23},[28,18064,18065,18067],{"class":30,"line":31},[28,18066,17855],{"class":34},[28,18068,18069],{"class":2225}," once\n",[28,18071,18072,18074],{"class":30,"line":48},[28,18073,2211],{"class":34},[28,18075,2214],{"class":127},[28,18077,18078,18080,18082,18084],{"class":30,"line":84},[28,18079,2219],{"class":34},[28,18081,2222],{"class":34},[28,18083,2226],{"class":2225},[28,18085,1558],{"class":38},[28,18087,18088,18090],{"class":30,"line":91},[28,18089,2211],{"class":34},[28,18091,17979],{"class":127},[28,18093,18094,18096],{"class":30,"line":97},[28,18095,14956],{"class":34},[28,18097,14959],{"class":2225},[28,18099,18100],{"class":30,"line":103},[28,18101,1811],{"class":38},[28,18103,18104],{"class":30,"line":109},[28,18105,14978],{"class":34},[28,18107,18108],{"class":30,"line":118},[28,18109,17256],{"class":87},[28,18111,18112,18114,18116,18118,18120,18122],{"class":30,"line":124},[28,18113,15171],{"class":34},[28,18115,17376],{"class":2225},[28,18117,413],{"class":38},[28,18119,14299],{"class":34},[28,18121,17383],{"class":5478},[28,18123,2981],{"class":38},[28,18125,18126,18128,18130,18132,18134,18136],{"class":30,"line":131},[28,18127,15171],{"class":34},[28,18129,17398],{"class":2225},[28,18131,413],{"class":38},[28,18133,17403],{"class":2225},[28,18135,17406],{"class":5478},[28,18137,2981],{"class":38},[28,18139,18140],{"class":30,"line":137},[28,18141,17419],{"class":87},[28,18143,18144,18146,18148],{"class":30,"line":143},[28,18145,15000],{"class":34},[28,18147,17426],{"class":2225},[28,18149,5898],{"class":38},[28,18151,18152,18154,18156],{"class":30,"line":149},[28,18153,17438],{"class":2225},[28,18155,17441],{"class":2225},[28,18157,5898],{"class":38},[28,18159,18160],{"class":30,"line":1890},[28,18161,2662],{"emptyLinePlaceholder":336},[28,18163,18164],{"class":30,"line":1904},[28,18165,15484],{"class":34},[28,18167,18168,18170],{"class":30,"line":1909},[28,18169,15000],{"class":34},[28,18171,14990],{"class":38},[28,18173,18174],{"class":30,"line":1915},[28,18175,17467],{"class":87},[28,18177,18178],{"class":30,"line":1936},[28,18179,17472],{"class":38},[28,18181,18182],{"class":30,"line":1941},[28,18183,4257],{"class":38},[14,18185,18186],{},"创建circle.cpp",[18,18188,18190],{"className":401,"code":18189,"language":403,"meta":23,"style":23},"#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",[25,18191,18192,18199,18222,18244,18249,18265],{"__ignoreMap":23},[28,18193,18194,18196],{"class":30,"line":31},[28,18195,2211],{"class":34},[28,18197,18198],{"class":127},"\u003Ccircle.h>\n",[28,18200,18201,18203,18206,18208,18210,18212,18214,18216,18218,18220],{"class":30,"line":48},[28,18202,5626],{"class":34},[28,18204,18205],{"class":2225}," Circle",[28,18207,17994],{"class":38},[28,18209,17722],{"class":2225},[28,18211,413],{"class":38},[28,18213,14299],{"class":34},[28,18215,17383],{"class":5478},[28,18217,17386],{"class":38},[28,18219,54],{"class":34},[28,18221,17391],{"class":38},[28,18223,18224,18226,18228,18230,18232,18234,18236,18238,18240,18242],{"class":30,"line":84},[28,18225,5626],{"class":34},[28,18227,18205],{"class":2225},[28,18229,17994],{"class":38},[28,18231,17774],{"class":2225},[28,18233,413],{"class":38},[28,18235,17403],{"class":2225},[28,18237,17406],{"class":5478},[28,18239,17409],{"class":38},[28,18241,54],{"class":34},[28,18243,17414],{"class":38},[28,18245,18246],{"class":30,"line":91},[28,18247,18248],{"class":87},"\u002F\u002F获取属性\n",[28,18250,18251,18253,18255,18257,18259,18261,18263],{"class":30,"line":97},[28,18252,14299],{"class":34},[28,18254,18205],{"class":2225},[28,18256,17994],{"class":38},[28,18258,17606],{"class":2225},[28,18260,17305],{"class":38},[28,18262,17308],{"class":34},[28,18264,17433],{"class":38},[28,18266,18267,18269,18271,18273,18275,18277,18279],{"class":30,"line":103},[28,18268,17403],{"class":2225},[28,18270,18205],{"class":2225},[28,18272,17994],{"class":38},[28,18274,17520],{"class":2225},[28,18276,17305],{"class":38},[28,18278,17308],{"class":34},[28,18280,17448],{"class":38},[14,18282,18283],{},"使用封装的类",[18,18285,18287],{"className":401,"code":18286,"language":403,"meta":23,"style":23},"#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",[25,18288,18289,18295,18305,18311,18317,18341,18345,18371,18397,18421,18435,18439,18451,18455,18459,18463,18475,18479,18483,18491,18495,18499,18503,18507,18511,18521,18527,18535,18543,18553,18559,18571,18579,18587,18597,18603,18615,18619,18627,18633],{"__ignoreMap":23},[28,18290,18291,18293],{"class":30,"line":31},[28,18292,2211],{"class":34},[28,18294,2214],{"class":127},[28,18296,18297,18299,18301,18303],{"class":30,"line":48},[28,18298,2219],{"class":34},[28,18300,2222],{"class":34},[28,18302,2226],{"class":2225},[28,18304,1558],{"class":38},[28,18306,18307,18309],{"class":30,"line":84},[28,18308,2211],{"class":34},[28,18310,18198],{"class":127},[28,18312,18313,18315],{"class":30,"line":91},[28,18314,2211],{"class":34},[28,18316,17979],{"class":127},[28,18318,18319,18321,18323,18325,18327,18329,18331,18333,18335,18337,18339],{"class":30,"line":97},[28,18320,5626],{"class":34},[28,18322,17483],{"class":2225},[28,18324,413],{"class":38},[28,18326,17488],{"class":2225},[28,18328,10846],{"class":34},[28,18330,691],{"class":5478},[28,18332,64],{"class":38},[28,18334,17403],{"class":2225},[28,18336,10846],{"class":34},[28,18338,14],{"class":5478},[28,18340,81],{"class":38},[28,18342,18343],{"class":30,"line":103},[28,18344,1811],{"class":38},[28,18346,18347,18349,18351,18353,18355,18357,18359,18361,18363,18365,18367,18369],{"class":30,"line":109},[28,18348,15000],{"class":34},[28,18350,17513],{"class":38},[28,18352,54],{"class":34},[28,18354,16604],{"class":38},[28,18356,17520],{"class":2225},[28,18358,17523],{"class":38},[28,18360,17526],{"class":2225},[28,18362,13312],{"class":38},[28,18364,930],{"class":34},[28,18366,16150],{"class":38},[28,18368,17526],{"class":2225},[28,18370,5898],{"class":38},[28,18372,18373,18375,18377,18379,18381,18383,18385,18387,18389,18391,18393,18395],{"class":30,"line":118},[28,18374,15000],{"class":34},[28,18376,17543],{"class":38},[28,18378,54],{"class":34},[28,18380,16604],{"class":38},[28,18382,17520],{"class":2225},[28,18384,17523],{"class":38},[28,18386,17554],{"class":2225},[28,18388,13312],{"class":38},[28,18390,930],{"class":34},[28,18392,16150],{"class":38},[28,18394,17554],{"class":2225},[28,18396,5898],{"class":38},[28,18398,18399,18401,18403,18405,18407,18409,18411,18413,18415,18417,18419],{"class":30,"line":124},[28,18400,15000],{"class":34},[28,18402,17571],{"class":38},[28,18404,54],{"class":34},[28,18406,17576],{"class":2225},[28,18408,17579],{"class":38},[28,18410,854],{"class":34},[28,18412,17513],{"class":38},[28,18414,880],{"class":34},[28,18416,17543],{"class":38},[28,18418,854],{"class":34},[28,18420,17592],{"class":38},[28,18422,18423,18425,18427,18429,18431,18433],{"class":30,"line":131},[28,18424,3363],{"class":34},[28,18426,17599],{"class":38},[28,18428,1307],{"class":34},[28,18430,16604],{"class":38},[28,18432,17606],{"class":2225},[28,18434,17609],{"class":38},[28,18436,18437],{"class":30,"line":137},[28,18438,2292],{"class":38},[28,18440,18441,18443,18445,18447,18449],{"class":30,"line":143},[28,18442,9931],{"class":38},[28,18444,1441],{"class":34},[28,18446,17622],{"class":127},[28,18448,1709],{"class":34},[28,18450,9102],{"class":38},[28,18452,18453],{"class":30,"line":149},[28,18454,2449],{"class":38},[28,18456,18457],{"class":30,"line":1890},[28,18458,17085],{"class":34},[28,18460,18461],{"class":30,"line":1904},[28,18462,2292],{"class":38},[28,18464,18465,18467,18469,18471,18473],{"class":30,"line":1909},[28,18466,9931],{"class":38},[28,18468,1441],{"class":34},[28,18470,17647],{"class":127},[28,18472,1709],{"class":34},[28,18474,9102],{"class":38},[28,18476,18477],{"class":30,"line":1915},[28,18478,2449],{"class":38},[28,18480,18481],{"class":30,"line":1936},[28,18482,1830],{"class":38},[28,18484,18485,18487,18489],{"class":30,"line":1941},[28,18486,416],{"class":34},[28,18488,2235],{"class":2225},[28,18490,2238],{"class":38},[28,18492,18493],{"class":30,"line":1955},[28,18494,1811],{"class":38},[28,18496,18497],{"class":30,"line":1960},[28,18498,15315],{"class":87},[28,18500,18501],{"class":30,"line":1989},[28,18502,15062],{"class":38},[28,18504,18505],{"class":30,"line":1994},[28,18506,17684],{"class":38},[28,18508,18509],{"class":30,"line":2011},[28,18510,17256],{"class":87},[28,18512,18513,18515,18517,18519],{"class":30,"line":2016},[28,18514,1816],{"class":38},[28,18516,1441],{"class":34},[28,18518,17697],{"class":127},[28,18520,1558],{"class":38},[28,18522,18523,18525],{"class":30,"line":2021},[28,18524,15000],{"class":34},[28,18526,17706],{"class":38},[28,18528,18529,18531,18533],{"class":30,"line":2026},[28,18530,2274],{"class":38},[28,18532,1694],{"class":34},[28,18534,17715],{"class":38},[28,18536,18537,18539,18541],{"class":30,"line":2040},[28,18538,16857],{"class":38},[28,18540,17722],{"class":2225},[28,18542,17725],{"class":38},[28,18544,18545,18547,18549,18551],{"class":30,"line":2045},[28,18546,1816],{"class":38},[28,18548,1441],{"class":34},[28,18550,17734],{"class":127},[28,18552,1558],{"class":38},[28,18554,18555,18557],{"class":30,"line":2839},[28,18556,15000],{"class":34},[28,18558,17743],{"class":38},[28,18560,18561,18563,18565,18567,18569],{"class":30,"line":2853},[28,18562,2274],{"class":38},[28,18564,1694],{"class":34},[28,18566,185],{"class":38},[28,18568,1694],{"class":34},[28,18570,17756],{"class":38},[28,18572,18573,18575,18577],{"class":30,"line":2861},[28,18574,17761],{"class":38},[28,18576,17764],{"class":2225},[28,18578,17767],{"class":38},[28,18580,18581,18583,18585],{"class":30,"line":2866},[28,18582,16857],{"class":38},[28,18584,17774],{"class":2225},[28,18586,17777],{"class":38},[28,18588,18589,18591,18593,18595],{"class":30,"line":2872},[28,18590,1816],{"class":38},[28,18592,1441],{"class":34},[28,18594,17786],{"class":127},[28,18596,1558],{"class":38},[28,18598,18599,18601],{"class":30,"line":2878},[28,18600,15000],{"class":34},[28,18602,17795],{"class":38},[28,18604,18605,18607,18609,18611,18613],{"class":30,"line":2883},[28,18606,2274],{"class":38},[28,18608,1694],{"class":34},[28,18610,17804],{"class":38},[28,18612,1694],{"class":34},[28,18614,17809],{"class":38},[28,18616,18617],{"class":30,"line":8210},[28,18618,17814],{"class":38},[28,18620,18621,18623,18625],{"class":30,"line":8234},[28,18622,17819],{"class":38},[28,18624,17764],{"class":2225},[28,18626,17824],{"class":38},[28,18628,18629,18631],{"class":30,"line":8239},[28,18630,17829],{"class":2225},[28,18632,17832],{"class":38},[28,18634,18635],{"class":30,"line":8245},[28,18636,1830],{"class":38},[351,18638,18640],{"id":18639},"_82对象的初始化清理","8.2对象的初始化清理",[1404,18642,18643,18646],{},[366,18644,18645],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[366,18647,18648],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[380,18650,18652],{"id":18651},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18654,18655,18656,18659],{},"对象的",[555,18657,18658],{},"初始化和清理","也是两个非常重要的安全问题",[14,18661,18662],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18664,18665],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18667,18668,18669,18672,18673,18676],{},"c++利用了",[555,18670,18671],{},"构造函数","和",[555,18674,18675],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18678,18679,18680],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[555,18681,18682],{},"我们不提供构造和析构，编译器会提供",[14,18684,18685],{},[555,18686,18687],{},"编译器提供的构造函数和析构函数是空实现。",[1404,18689,18690,18693],{},[366,18691,18692],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[366,18694,18695,18696,18699],{},"析构函数：主要作用在于对象",[555,18697,18698],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18701,18702,18705],{},[555,18703,18704],{},"构造函数语法：",[25,18706,18707],{},"类名(){}",[363,18709,18710,18713,18716,18719,18722],{},[366,18711,18712],{},"构造函数，没有返回值也不写void",[366,18714,18715],{},"函数名称与类名相同",[366,18717,18718],{},"构造函数可以有参数，因此可以发生重载",[366,18720,18721],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[366,18723,18724,18725,828],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[25,18726,18727],{},"Person(){}",[14,18729,18730,14057,18733],{},[555,18731,18732],{},"析构函数语法：",[25,18734,18735],{},"~类名(){}",[363,18737,18738,18741,18744,18750],{},[366,18739,18740],{},"析构函数，没有返回值也不写void",[366,18742,18743],{},"函数名称与类名相同,在名称前加上符号  ~",[366,18745,18746,18747],{},"析构函数不可以有参数，因此",[555,18748,18749],{},"不可以发生重载",[366,18751,18752],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[18,18754,18756],{"className":401,"code":18755,"language":403,"meta":23,"style":23},"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",[25,18757,18758,18764,18768,18772,18777,18784,18788,18801,18805,18810,18817,18821,18834,18838,18842,18846,18850,18858,18862,18870,18874,18878,18886,18890,18895,18899,18906,18910,18923,18927,18935],{"__ignoreMap":23},[28,18759,18760,18762],{"class":30,"line":31},[28,18761,14956],{"class":34},[28,18763,15433],{"class":2225},[28,18765,18766],{"class":30,"line":48},[28,18767,1811],{"class":38},[28,18769,18770],{"class":30,"line":84},[28,18771,14978],{"class":34},[28,18773,18774],{"class":30,"line":91},[28,18775,18776],{"class":87},"    \u002F\u002F构造函数\n",[28,18778,18779,18782],{"class":30,"line":97},[28,18780,18781],{"class":2225},"    Person",[28,18783,2238],{"class":38},[28,18785,18786],{"class":30,"line":103},[28,18787,2292],{"class":38},[28,18789,18790,18792,18794,18797,18799],{"class":30,"line":109},[28,18791,9931],{"class":38},[28,18793,1441],{"class":34},[28,18795,18796],{"class":127}," \"Person的构造函数调用\"",[28,18798,1709],{"class":34},[28,18800,9102],{"class":38},[28,18802,18803],{"class":30,"line":118},[28,18804,2449],{"class":38},[28,18806,18807],{"class":30,"line":124},[28,18808,18809],{"class":87},"    \u002F\u002F析构函数\n",[28,18811,18812,18815],{"class":30,"line":131},[28,18813,18814],{"class":2225},"    ~Person",[28,18816,2238],{"class":38},[28,18818,18819],{"class":30,"line":137},[28,18820,2292],{"class":38},[28,18822,18823,18825,18827,18830,18832],{"class":30,"line":143},[28,18824,9931],{"class":38},[28,18826,1441],{"class":34},[28,18828,18829],{"class":127}," \"Person的析构函数调用\"",[28,18831,1709],{"class":34},[28,18833,9102],{"class":38},[28,18835,18836],{"class":30,"line":149},[28,18837,2449],{"class":38},[28,18839,18840],{"class":30,"line":1890},[28,18841,2662],{"emptyLinePlaceholder":336},[28,18843,18844],{"class":30,"line":1904},[28,18845,4257],{"class":38},[28,18847,18848],{"class":30,"line":1909},[28,18849,2662],{"emptyLinePlaceholder":336},[28,18851,18852,18854,18856],{"class":30,"line":1915},[28,18853,5626],{"class":34},[28,18855,5850],{"class":2225},[28,18857,2238],{"class":38},[28,18859,18860],{"class":30,"line":1936},[28,18861,1811],{"class":38},[28,18863,18864,18867],{"class":30,"line":1941},[28,18865,18866],{"class":38},"    Person p;",[28,18868,18869],{"class":87},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[28,18871,18872],{"class":30,"line":1955},[28,18873,1830],{"class":38},[28,18875,18876],{"class":30,"line":1960},[28,18877,2662],{"emptyLinePlaceholder":336},[28,18879,18880,18882,18884],{"class":30,"line":1989},[28,18881,416],{"class":34},[28,18883,2235],{"class":2225},[28,18885,11115],{"class":38},[28,18887,18888],{"class":30,"line":1994},[28,18889,13472],{"class":38},[28,18891,18892],{"class":30,"line":2011},[28,18893,18894],{"class":87},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[28,18896,18897],{"class":30,"line":2016},[28,18898,2662],{"emptyLinePlaceholder":336},[28,18900,18901,18903],{"class":30,"line":2021},[28,18902,18866],{"class":38},[28,18904,18905],{"class":87},"\u002F\u002F只有构造函数\n",[28,18907,18908],{"class":30,"line":2026},[28,18909,2662],{"emptyLinePlaceholder":336},[28,18911,18912,18914,18916,18918,18920],{"class":30,"line":2040},[28,18913,2565],{"class":2225},[28,18915,413],{"class":38},[28,18917,2570],{"class":127},[28,18919,6228],{"class":38},[28,18921,18922],{"class":87},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[28,18924,18925],{"class":30,"line":2045},[28,18926,2662],{"emptyLinePlaceholder":336},[28,18928,18929,18931,18933],{"class":30,"line":2839},[28,18930,4352],{"class":34},[28,18932,4355],{"class":60},[28,18934,1558],{"class":38},[28,18936,18937],{"class":30,"line":2853},[28,18938,1830],{"class":38},[14,18940,18941],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[380,18943,18945],{"id":18944},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18947,18948],{},"两种分类方式：",[14,18950,18951],{},"​\t按参数分为： 有参构造和无参构造",[14,18953,18954],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18956,18957],{},"三种调用方式：",[14,18959,18960],{},"​\t括号法",[14,18962,18963],{},"​\t显示法",[14,18965,18966],{},"​\t隐式转换法",[18,18968,18970],{"className":401,"code":18969,"language":403,"meta":23,"style":23},"#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",[25,18971,18972,18978,18988,18993,18998,19003,19008,19012,19020,19024,19028,19032,19038,19042,19055,19059,19071,19075,19084,19097,19101,19105,19111,19115,19128,19132,19137,19153,19157,19162,19171,19184,19188,19194,19198,19203,19211,19215,19220,19224,19232,19236,19241,19246,19251,19256,19261,19265,19270,19275,19280,19285,19289,19294,19299,19315,19327,19332,19336,19341,19346,19351,19355,19360,19374,19387,19391,19399,19403,19409,19415,19423],{"__ignoreMap":23},[28,18973,18974,18976],{"class":30,"line":31},[28,18975,2211],{"class":34},[28,18977,2214],{"class":127},[28,18979,18980,18982,18984,18986],{"class":30,"line":48},[28,18981,2219],{"class":34},[28,18983,2222],{"class":34},[28,18985,2226],{"class":2225},[28,18987,1558],{"class":38},[28,18989,18990],{"class":30,"line":84},[28,18991,18992],{"class":87},"\u002F\u002F1.构造函数的分类及调用\n",[28,18994,18995],{"class":30,"line":91},[28,18996,18997],{"class":87},"\u002F\u002F分类\n",[28,18999,19000],{"class":30,"line":97},[28,19001,19002],{"class":87},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[28,19004,19005],{"class":30,"line":103},[28,19006,19007],{"class":87},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[28,19009,19010],{"class":30,"line":109},[28,19011,2662],{"emptyLinePlaceholder":336},[28,19013,19014,19016,19018],{"class":30,"line":118},[28,19015,14956],{"class":34},[28,19017,15831],{"class":2225},[28,19019,2936],{"class":38},[28,19021,19022],{"class":30,"line":124},[28,19023,1811],{"class":38},[28,19025,19026],{"class":30,"line":131},[28,19027,14978],{"class":34},[28,19029,19030],{"class":30,"line":137},[28,19031,18776],{"class":87},[28,19033,19034,19036],{"class":30,"line":143},[28,19035,18781],{"class":2225},[28,19037,2238],{"class":38},[28,19039,19040],{"class":30,"line":149},[28,19041,2292],{"class":38},[28,19043,19044,19046,19048,19051,19053],{"class":30,"line":1890},[28,19045,3713],{"class":38},[28,19047,1441],{"class":34},[28,19049,19050],{"class":127},"\"Person构造函数无参构造\"",[28,19052,1441],{"class":34},[28,19054,1463],{"class":38},[28,19056,19057],{"class":30,"line":1904},[28,19058,2449],{"class":38},[28,19060,19061,19063,19065,19067,19069],{"class":30,"line":1909},[28,19062,18781],{"class":2225},[28,19064,413],{"class":38},[28,19066,416],{"class":34},[28,19068,1663],{"class":5478},[28,19070,81],{"class":38},[28,19072,19073],{"class":30,"line":1915},[28,19074,2292],{"class":38},[28,19076,19077,19080,19082],{"class":30,"line":1936},[28,19078,19079],{"class":38},"        age",[28,19081,54],{"class":34},[28,19083,6459],{"class":38},[28,19085,19086,19088,19090,19093,19095],{"class":30,"line":1941},[28,19087,3713],{"class":38},[28,19089,1441],{"class":34},[28,19091,19092],{"class":127},"\"Person构造函数有参构造\"",[28,19094,1441],{"class":34},[28,19096,1463],{"class":38},[28,19098,19099],{"class":30,"line":1955},[28,19100,2449],{"class":38},[28,19102,19103],{"class":30,"line":1960},[28,19104,18809],{"class":87},[28,19106,19107,19109],{"class":30,"line":1989},[28,19108,18814],{"class":2225},[28,19110,2238],{"class":38},[28,19112,19113],{"class":30,"line":1994},[28,19114,2292],{"class":38},[28,19116,19117,19119,19121,19124,19126],{"class":30,"line":2011},[28,19118,3713],{"class":38},[28,19120,1441],{"class":34},[28,19122,19123],{"class":127},"\"Person析构函数被调用\"",[28,19125,1441],{"class":34},[28,19127,1463],{"class":38},[28,19129,19130],{"class":30,"line":2016},[28,19131,2449],{"class":38},[28,19133,19134],{"class":30,"line":2021},[28,19135,19136],{"class":87},"    \u002F\u002F拷贝构造函数\n",[28,19138,19139,19141,19143,19145,19147,19149,19151],{"class":30,"line":2026},[28,19140,18781],{"class":2225},[28,19142,413],{"class":38},[28,19144,7054],{"class":34},[28,19146,15831],{"class":2225},[28,19148,10846],{"class":34},[28,19150,14],{"class":5478},[28,19152,81],{"class":38},[28,19154,19155],{"class":30,"line":2040},[28,19156,2292],{"class":38},[28,19158,19159],{"class":30,"line":2045},[28,19160,19161],{"class":87},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[28,19163,19164,19166,19168],{"class":30,"line":2839},[28,19165,19079],{"class":38},[28,19167,54],{"class":34},[28,19169,19170],{"class":38},"p.age;\n",[28,19172,19173,19175,19177,19180,19182],{"class":30,"line":2853},[28,19174,3713],{"class":38},[28,19176,1441],{"class":34},[28,19178,19179],{"class":127},"\"Person拷贝构造函数被调用\"",[28,19181,1441],{"class":34},[28,19183,1463],{"class":38},[28,19185,19186],{"class":30,"line":2861},[28,19187,2449],{"class":38},[28,19189,19190,19192],{"class":30,"line":2866},[28,19191,2247],{"class":34},[28,19193,8059],{"class":38},[28,19195,19196],{"class":30,"line":2872},[28,19197,4257],{"class":38},[28,19199,19200],{"class":30,"line":2878},[28,19201,19202],{"class":87},"\u002F\u002F调用\n",[28,19204,19205,19207,19209],{"class":30,"line":2883},[28,19206,5626],{"class":34},[28,19208,5850],{"class":2225},[28,19210,2238],{"class":38},[28,19212,19213],{"class":30,"line":8210},[28,19214,1811],{"class":38},[28,19216,19217],{"class":30,"line":8234},[28,19218,19219],{"class":87},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[28,19221,19222],{"class":30,"line":8239},[28,19223,1830],{"class":38},[28,19225,19226,19228,19230],{"class":30,"line":8245},[28,19227,5626],{"class":34},[28,19229,5919],{"class":2225},[28,19231,2238],{"class":38},[28,19233,19234],{"class":30,"line":8272},[28,19235,1811],{"class":38},[28,19237,19238],{"class":30,"line":8277},[28,19239,19240],{"class":87},"    \u002F\u002F1.括号法\n",[28,19242,19243],{"class":30,"line":8283},[28,19244,19245],{"class":87},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[28,19247,19248],{"class":30,"line":8295},[28,19249,19250],{"class":87},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[28,19252,19253],{"class":30,"line":8307},[28,19254,19255],{"class":87},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[28,19257,19258],{"class":30,"line":8319},[28,19259,19260],{"class":87},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[28,19262,19263],{"class":30,"line":9978},[28,19264,2662],{"emptyLinePlaceholder":336},[28,19266,19267],{"class":30,"line":10003},[28,19268,19269],{"class":87},"    \u002F\u002F注意事项\n",[28,19271,19272],{"class":30,"line":10026},[28,19273,19274],{"class":87},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[28,19276,19277],{"class":30,"line":10050},[28,19278,19279],{"class":87},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[28,19281,19282],{"class":30,"line":10055},[28,19283,19284],{"class":87},"    \u002F\u002F Person p4();\n",[28,19286,19287],{"class":30,"line":10060},[28,19288,2662],{"emptyLinePlaceholder":336},[28,19290,19291],{"class":30,"line":10065},[28,19292,19293],{"class":87},"    \u002F\u002F2.显示法\n",[28,19295,19296],{"class":30,"line":10074},[28,19297,19298],{"class":38},"    Person p1;\n",[28,19300,19301,19304,19306,19309,19311,19313],{"class":30,"line":10079},[28,19302,19303],{"class":38},"    Person p2",[28,19305,54],{"class":34},[28,19307,19308],{"class":2225},"Person",[28,19310,413],{"class":38},[28,19312,845],{"class":60},[28,19314,2981],{"class":38},[28,19316,19317,19320,19322,19324],{"class":30,"line":10085},[28,19318,19319],{"class":38},"    Person p3",[28,19321,54],{"class":34},[28,19323,19308],{"class":2225},[28,19325,19326],{"class":38},"(p2);\n",[28,19328,19329],{"class":30,"line":10106},[28,19330,19331],{"class":87},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[28,19333,19334],{"class":30,"line":10112},[28,19335,2662],{"emptyLinePlaceholder":336},[28,19337,19338],{"class":30,"line":10126},[28,19339,19340],{"class":87},"    \u002F\u002F 注意事项2\n",[28,19342,19343],{"class":30,"line":10132},[28,19344,19345],{"class":87},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[28,19347,19348],{"class":30,"line":10159},[28,19349,19350],{"class":87},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[28,19352,19353],{"class":30,"line":10168},[28,19354,2662],{"emptyLinePlaceholder":336},[28,19356,19357],{"class":30,"line":10174},[28,19358,19359],{"class":87},"    \u002F\u002F3.隐士转换法\n",[28,19361,19362,19365,19367,19369,19371],{"class":30,"line":10182},[28,19363,19364],{"class":38},"    Person p4",[28,19366,54],{"class":34},[28,19368,845],{"class":60},[28,19370,465],{"class":38},[28,19372,19373],{"class":87},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[28,19375,19376,19379,19381,19384],{"class":30,"line":10187},[28,19377,19378],{"class":38},"    Person p5",[28,19380,54],{"class":34},[28,19382,19383],{"class":38},"p4;",[28,19385,19386],{"class":87}," \u002F\u002F 这里会调用拷贝构造函数\n",[28,19388,19389],{"class":30,"line":16866},[28,19390,1830],{"class":38},[28,19392,19393,19395,19397],{"class":30,"line":16872},[28,19394,416],{"class":34},[28,19396,2235],{"class":2225},[28,19398,2238],{"class":38},[28,19400,19401],{"class":30,"line":16895},[28,19402,1811],{"class":38},[28,19404,19405,19407],{"class":30,"line":16901},[28,19406,5895],{"class":2225},[28,19408,5898],{"class":38},[28,19410,19411,19413],{"class":30,"line":16924},[28,19412,5964],{"class":2225},[28,19414,5898],{"class":38},[28,19416,19417,19419,19421],{"class":30,"line":16938},[28,19418,4352],{"class":34},[28,19420,4355],{"class":60},[28,19422,1558],{"class":38},[28,19424,19425],{"class":30,"line":16958},[28,19426,1830],{"class":38},[14,19428,19429,19432],{},[555,19430,19431],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[380,19434,19436],{"id":19435},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19438,19439],{},"C++中拷贝构造函数调用时机通常有三种情况",[1404,19441,19442,19445,19448],{},[366,19443,19444],{},"使用一个已经创建完毕的对象来初始化一个新对象",[366,19446,19447],{},"值传递的方式给函数参数传值",[366,19449,19450],{},"以值方式返回局部对象",[18,19452,19454],{"className":401,"code":19453,"language":403,"meta":23,"style":23},"#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",[25,19455,19456,19462,19472,19476,19481,19485,19490,19495,19500,19506,19510,19514,19520,19524,19537,19541,19546,19558,19562,19570,19583,19587,19591,19607,19611,19620,19633,19637,19643,19647,19659,19663,19669,19673,19677,19685,19689,19702,19710,19728,19732,19737,19742,19757,19761,19774,19778,19786,19790,19794,19802,19806,19811,19820,19824,19828,19853,19863,19867,19875,19879,19890,19915,19919,19923,19927,19935,19939,19944,19949,19956,19961,19966,19971,19976,19980,19985,19989,19994,19998,20003,20008,20012,20016,20021,20026,20034],{"__ignoreMap":23},[28,19457,19458,19460],{"class":30,"line":31},[28,19459,2211],{"class":34},[28,19461,2214],{"class":127},[28,19463,19464,19466,19468,19470],{"class":30,"line":48},[28,19465,2219],{"class":34},[28,19467,2222],{"class":34},[28,19469,2226],{"class":2225},[28,19471,1558],{"class":38},[28,19473,19474],{"class":30,"line":84},[28,19475,2662],{"emptyLinePlaceholder":336},[28,19477,19478],{"class":30,"line":91},[28,19479,19480],{"class":87},"\u002F\u002F拷贝构造函数调用时机\n",[28,19482,19483],{"class":30,"line":97},[28,19484,2662],{"emptyLinePlaceholder":336},[28,19486,19487],{"class":30,"line":103},[28,19488,19489],{"class":87},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[28,19491,19492],{"class":30,"line":109},[28,19493,19494],{"class":87},"\u002F\u002F2.值传递的方式给函数参数传值\n",[28,19496,19497],{"class":30,"line":118},[28,19498,19499],{"class":87},"\u002F\u002F3.以值方式返回局部对象\n",[28,19501,19502,19504],{"class":30,"line":124},[28,19503,14956],{"class":34},[28,19505,15433],{"class":2225},[28,19507,19508],{"class":30,"line":131},[28,19509,1811],{"class":38},[28,19511,19512],{"class":30,"line":137},[28,19513,14978],{"class":34},[28,19515,19516,19518],{"class":30,"line":143},[28,19517,18781],{"class":2225},[28,19519,2238],{"class":38},[28,19521,19522],{"class":30,"line":149},[28,19523,2292],{"class":38},[28,19525,19526,19528,19530,19533,19535],{"class":30,"line":1890},[28,19527,9931],{"class":38},[28,19529,1441],{"class":34},[28,19531,19532],{"class":127}," \"Person的默认构造函数调用\"",[28,19534,1709],{"class":34},[28,19536,9102],{"class":38},[28,19538,19539],{"class":30,"line":1904},[28,19540,2449],{"class":38},[28,19542,19543],{"class":30,"line":1909},[28,19544,19545],{"class":87},"    \u002F\u002F有参构造\n",[28,19547,19548,19550,19552,19554,19556],{"class":30,"line":1915},[28,19549,18781],{"class":2225},[28,19551,413],{"class":38},[28,19553,416],{"class":34},[28,19555,15951],{"class":5478},[28,19557,81],{"class":38},[28,19559,19560],{"class":30,"line":1936},[28,19561,2292],{"class":38},[28,19563,19564,19566,19568],{"class":30,"line":1941},[28,19565,16005],{"class":38},[28,19567,54],{"class":34},[28,19569,8059],{"class":38},[28,19571,19572,19574,19576,19579,19581],{"class":30,"line":1955},[28,19573,9931],{"class":38},[28,19575,1441],{"class":34},[28,19577,19578],{"class":127}," \"Person的有参构造函数调用\"",[28,19580,1709],{"class":34},[28,19582,9102],{"class":38},[28,19584,19585],{"class":30,"line":1960},[28,19586,2449],{"class":38},[28,19588,19589],{"class":30,"line":1989},[28,19590,19136],{"class":87},[28,19592,19593,19595,19597,19599,19601,19603,19605],{"class":30,"line":1994},[28,19594,18781],{"class":2225},[28,19596,413],{"class":38},[28,19598,7054],{"class":34},[28,19600,15831],{"class":2225},[28,19602,10846],{"class":34},[28,19604,14],{"class":5478},[28,19606,81],{"class":38},[28,19608,19609],{"class":30,"line":2011},[28,19610,2292],{"class":38},[28,19612,19613,19615,19617],{"class":30,"line":2016},[28,19614,16005],{"class":38},[28,19616,54],{"class":34},[28,19618,19619],{"class":38}," p.m_Age;\n",[28,19621,19622,19624,19626,19629,19631],{"class":30,"line":2021},[28,19623,9931],{"class":38},[28,19625,1441],{"class":34},[28,19627,19628],{"class":127}," \"Person的拷贝构造函数调用\"",[28,19630,1709],{"class":34},[28,19632,9102],{"class":38},[28,19634,19635],{"class":30,"line":2026},[28,19636,2449],{"class":38},[28,19638,19639,19641],{"class":30,"line":2040},[28,19640,18814],{"class":2225},[28,19642,2238],{"class":38},[28,19644,19645],{"class":30,"line":2045},[28,19646,2292],{"class":38},[28,19648,19649,19651,19653,19655,19657],{"class":30,"line":2839},[28,19650,9931],{"class":38},[28,19652,1441],{"class":34},[28,19654,18829],{"class":127},[28,19656,1709],{"class":34},[28,19658,9102],{"class":38},[28,19660,19661],{"class":30,"line":2853},[28,19662,2449],{"class":38},[28,19664,19665,19667],{"class":30,"line":2861},[28,19666,2247],{"class":34},[28,19668,15928],{"class":38},[28,19670,19671],{"class":30,"line":2866},[28,19672,4257],{"class":38},[28,19674,19675],{"class":30,"line":2872},[28,19676,19489],{"class":87},[28,19678,19679,19681,19683],{"class":30,"line":2878},[28,19680,5626],{"class":34},[28,19682,5850],{"class":2225},[28,19684,2238],{"class":38},[28,19686,19687],{"class":30,"line":2883},[28,19688,1811],{"class":38},[28,19690,19691,19694,19696,19698,19700],{"class":30,"line":8210},[28,19692,19693],{"class":38},"    Person ",[28,19695,7392],{"class":2225},[28,19697,413],{"class":38},[28,19699,1098],{"class":60},[28,19701,2981],{"class":38},[28,19703,19704,19706,19708],{"class":30,"line":8234},[28,19705,19693],{"class":38},[28,19707,7295],{"class":2225},[28,19709,17777],{"class":38},[28,19711,19712,19714,19716,19719,19721,19724,19726],{"class":30,"line":8239},[28,19713,1816],{"class":38},[28,19715,1441],{"class":34},[28,19717,19718],{"class":127},"\"P2的年龄为：\"",[28,19720,1441],{"class":34},[28,19722,19723],{"class":38},"p2.m_Age",[28,19725,1441],{"class":34},[28,19727,1463],{"class":38},[28,19729,19730],{"class":30,"line":8245},[28,19731,1830],{"class":38},[28,19733,19734],{"class":30,"line":8272},[28,19735,19736],{"class":87},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[28,19738,19739],{"class":30,"line":8277},[28,19740,19741],{"class":87},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[28,19743,19744,19746,19749,19751,19753,19755],{"class":30,"line":8283},[28,19745,5626],{"class":34},[28,19747,19748],{"class":2225}," doWork",[28,19750,413],{"class":38},[28,19752,19308],{"class":2225},[28,19754,7087],{"class":5478},[28,19756,81],{"class":38},[28,19758,19759],{"class":30,"line":8295},[28,19760,1811],{"class":38},[28,19762,19763,19765,19767,19770,19772],{"class":30,"line":8307},[28,19764,6791],{"class":38},[28,19766,1441],{"class":34},[28,19768,19769],{"class":127}," \"doWork函数调用\"",[28,19771,1709],{"class":34},[28,19773,9102],{"class":38},[28,19775,19776],{"class":30,"line":8319},[28,19777,1830],{"class":38},[28,19779,19780,19782,19784],{"class":30,"line":9978},[28,19781,5626],{"class":34},[28,19783,5919],{"class":2225},[28,19785,2238],{"class":38},[28,19787,19788],{"class":30,"line":10003},[28,19789,1811],{"class":38},[28,19791,19792],{"class":30,"line":10026},[28,19793,15575],{"class":38},[28,19795,19796,19799],{"class":30,"line":10050},[28,19797,19798],{"class":2225},"    doWork",[28,19800,19801],{"class":38},"(p);\n",[28,19803,19804],{"class":30,"line":10055},[28,19805,1830],{"class":38},[28,19807,19808],{"class":30,"line":10060},[28,19809,19810],{"class":87},"\u002F\u002F 3.以值方式返回局部对象\n",[28,19812,19813,19815,19818],{"class":30,"line":10065},[28,19814,19308],{"class":2225},[28,19816,19817],{"class":2225}," doWork2",[28,19819,2238],{"class":38},[28,19821,19822],{"class":30,"line":10074},[28,19823,1811],{"class":38},[28,19825,19826],{"class":30,"line":10079},[28,19827,19298],{"class":38},[28,19829,19830,19832,19834,19836,19838,19840,19842,19844,19846,19848,19850],{"class":30,"line":10085},[28,19831,1816],{"class":38},[28,19833,1441],{"class":34},[28,19835,413],{"class":38},[28,19837,416],{"class":34},[28,19839,6780],{"class":34},[28,19841,828],{"class":38},[28,19843,753],{"class":34},[28,19845,7392],{"class":38},[28,19847,1441],{"class":34},[28,19849,1506],{"class":38},[28,19851,19852],{"class":87},"\u002F\u002F打印p1的地址\n",[28,19854,19855,19857,19860],{"class":30,"line":10106},[28,19856,4352],{"class":34},[28,19858,19859],{"class":38}," p1;",[28,19861,19862],{"class":87},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[28,19864,19865],{"class":30,"line":10112},[28,19866,1830],{"class":38},[28,19868,19869,19871,19873],{"class":30,"line":10126},[28,19870,5626],{"class":34},[28,19872,5991],{"class":2225},[28,19874,2238],{"class":38},[28,19876,19877],{"class":30,"line":10132},[28,19878,1811],{"class":38},[28,19880,19881,19884,19886,19888],{"class":30,"line":10159},[28,19882,19883],{"class":38},"    Person p ",[28,19885,54],{"class":34},[28,19887,19817],{"class":2225},[28,19889,5898],{"class":38},[28,19891,19892,19894,19896,19898,19900,19902,19904,19906,19908,19910,19912],{"class":30,"line":10168},[28,19893,1816],{"class":38},[28,19895,1441],{"class":34},[28,19897,413],{"class":38},[28,19899,416],{"class":34},[28,19901,6780],{"class":34},[28,19903,828],{"class":38},[28,19905,753],{"class":34},[28,19907,14],{"class":38},[28,19909,1441],{"class":34},[28,19911,1506],{"class":38},[28,19913,19914],{"class":87},"\u002F\u002F打印p的地址\n",[28,19916,19917],{"class":30,"line":10174},[28,19918,1830],{"class":38},[28,19920,19921],{"class":30,"line":10182},[28,19922,2662],{"emptyLinePlaceholder":336},[28,19924,19925],{"class":30,"line":10187},[28,19926,2662],{"emptyLinePlaceholder":336},[28,19928,19929,19931,19933],{"class":30,"line":16866},[28,19930,416],{"class":34},[28,19932,2235],{"class":2225},[28,19934,2238],{"class":38},[28,19936,19937],{"class":30,"line":16872},[28,19938,1811],{"class":38},[28,19940,19941],{"class":30,"line":16895},[28,19942,19943],{"class":87},"    \u002F\u002F test01();\n",[28,19945,19946],{"class":30,"line":16901},[28,19947,19948],{"class":87},"    \u002F\u002F test02();\n",[28,19950,19951,19954],{"class":30,"line":16924},[28,19952,19953],{"class":2225},"    test03",[28,19955,5898],{"class":38},[28,19957,19958],{"class":30,"line":16938},[28,19959,19960],{"class":87},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[28,19962,19963],{"class":30,"line":16958},[28,19964,19965],{"class":87},"\u002F\u002F 输出结果如下：\n",[28,19967,19968],{"class":30,"line":16964},[28,19969,19970],{"class":87},"\u002F\u002F Person的默认构造函数调用\n",[28,19972,19973],{"class":30,"line":16975},[28,19974,19975],{"class":87},"\u002F\u002F 0x7fffffffceec\n",[28,19977,19978],{"class":30,"line":16998},[28,19979,19975],{"class":87},[28,19981,19982],{"class":30,"line":17020},[28,19983,19984],{"class":87},"\u002F\u002F Person的析构函数调用\n",[28,19986,19987],{"class":30,"line":17025},[28,19988,2662],{"emptyLinePlaceholder":336},[28,19990,19991],{"class":30,"line":17031},[28,19992,19993],{"class":87},"\u002F\u002F 之前的输出结果如下：\n",[28,19995,19996],{"class":30,"line":17045},[28,19997,19970],{"class":87},[28,19999,20000],{"class":30,"line":17058},[28,20001,20002],{"class":87},"\u002F\u002F 地址\n",[28,20004,20005],{"class":30,"line":17063},[28,20006,20007],{"class":87},"\u002F\u002F Person的拷贝构造函数调用\n",[28,20009,20010],{"class":30,"line":17077},[28,20011,19984],{"class":87},[28,20013,20014],{"class":30,"line":17082},[28,20015,20002],{"class":87},[28,20017,20018],{"class":30,"line":17088},[28,20019,20020],{"class":87},"\u002F\u002F (这两次输出的地址也是不同的) \n",[28,20022,20023],{"class":30,"line":17093},[28,20024,20025],{"class":87},"\u002F\u002F Person的析构函数调用     \n",[28,20027,20028,20030,20032],{"class":30,"line":17107},[28,20029,4352],{"class":34},[28,20031,4355],{"class":60},[28,20033,1558],{"class":38},[28,20035,20036],{"class":30,"line":17112},[28,20037,1830],{"class":38},[14,20039,20040],{},"简化版理解",[18,20042,20044],{"className":401,"code":20043,"language":403,"meta":23,"style":23},"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",[25,20045,20046,20054,20058,20064,20077,20088,20092,20104,20117,20125,20129,20145,20158,20167,20171,20176,20182,20195,20199,20203,20210,20214,20218,20223,20231,20235,20251,20264,20277,20281,20286,20294,20298,20302,20307,20312,20328,20336,20343,20349,20353,20357,20362,20370,20374,20378,20401,20408,20412,20416,20424,20428,20438,20460,20464,20468,20472,20480,20484,20489,20494,20500,20504,20514,20518,20526],{"__ignoreMap":23},[28,20047,20048,20050,20052],{"class":30,"line":31},[28,20049,14956],{"class":34},[28,20051,15831],{"class":2225},[28,20053,15834],{"class":38},[28,20055,20056],{"class":30,"line":48},[28,20057,14978],{"class":34},[28,20059,20060,20062],{"class":30,"line":84},[28,20061,18781],{"class":2225},[28,20063,11115],{"class":38},[28,20065,20066,20068,20070,20073,20075],{"class":30,"line":91},[28,20067,9931],{"class":38},[28,20069,1441],{"class":34},[28,20071,20072],{"class":127}," \"无参构造函数!\"",[28,20074,1709],{"class":34},[28,20076,9102],{"class":38},[28,20078,20079,20082,20084,20086],{"class":30,"line":97},[28,20080,20081],{"class":38},"        mAge ",[28,20083,54],{"class":34},[28,20085,4355],{"class":60},[28,20087,1558],{"class":38},[28,20089,20090],{"class":30,"line":103},[28,20091,2449],{"class":38},[28,20093,20094,20096,20098,20100,20102],{"class":30,"line":109},[28,20095,18781],{"class":2225},[28,20097,413],{"class":38},[28,20099,416],{"class":34},[28,20101,15951],{"class":5478},[28,20103,12704],{"class":38},[28,20105,20106,20108,20110,20113,20115],{"class":30,"line":118},[28,20107,9931],{"class":38},[28,20109,1441],{"class":34},[28,20111,20112],{"class":127}," \"有参构造函数!\"",[28,20114,1709],{"class":34},[28,20116,9102],{"class":38},[28,20118,20119,20121,20123],{"class":30,"line":124},[28,20120,20081],{"class":38},[28,20122,54],{"class":34},[28,20124,8059],{"class":38},[28,20126,20127],{"class":30,"line":131},[28,20128,2449],{"class":38},[28,20130,20131,20133,20135,20137,20139,20141,20143],{"class":30,"line":137},[28,20132,18781],{"class":2225},[28,20134,413],{"class":38},[28,20136,7054],{"class":34},[28,20138,15831],{"class":2225},[28,20140,753],{"class":34},[28,20142,7087],{"class":5478},[28,20144,12704],{"class":38},[28,20146,20147,20149,20151,20154,20156],{"class":30,"line":143},[28,20148,9931],{"class":38},[28,20150,1441],{"class":34},[28,20152,20153],{"class":127}," \"拷贝构造函数!\"",[28,20155,1709],{"class":34},[28,20157,9102],{"class":38},[28,20159,20160,20162,20164],{"class":30,"line":149},[28,20161,20081],{"class":38},[28,20163,54],{"class":34},[28,20165,20166],{"class":38}," p.mAge;\n",[28,20168,20169],{"class":30,"line":1890},[28,20170,2449],{"class":38},[28,20172,20173],{"class":30,"line":1904},[28,20174,20175],{"class":87},"    \u002F\u002F析构函数在释放内存之前调用\n",[28,20177,20178,20180],{"class":30,"line":1909},[28,20179,18814],{"class":2225},[28,20181,11115],{"class":38},[28,20183,20184,20186,20188,20191,20193],{"class":30,"line":1915},[28,20185,9931],{"class":38},[28,20187,1441],{"class":34},[28,20189,20190],{"class":127}," \"析构函数!\"",[28,20192,1709],{"class":34},[28,20194,9102],{"class":38},[28,20196,20197],{"class":30,"line":1936},[28,20198,2449],{"class":38},[28,20200,20201],{"class":30,"line":1941},[28,20202,14978],{"class":34},[28,20204,20205,20207],{"class":30,"line":1955},[28,20206,2247],{"class":34},[28,20208,20209],{"class":38}," mAge;\n",[28,20211,20212],{"class":30,"line":1960},[28,20213,4257],{"class":38},[28,20215,20216],{"class":30,"line":1989},[28,20217,2662],{"emptyLinePlaceholder":336},[28,20219,20220],{"class":30,"line":1994},[28,20221,20222],{"class":87},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[28,20224,20225,20227,20229],{"class":30,"line":2011},[28,20226,5626],{"class":34},[28,20228,5850],{"class":2225},[28,20230,11115],{"class":38},[28,20232,20233],{"class":30,"line":2016},[28,20234,2662],{"emptyLinePlaceholder":336},[28,20236,20237,20239,20242,20244,20246,20248],{"class":30,"line":2021},[28,20238,19693],{"class":38},[28,20240,20241],{"class":2225},"man",[28,20243,413],{"class":38},[28,20245,713],{"class":60},[28,20247,6228],{"class":38},[28,20249,20250],{"class":87}," \u002F\u002Fp对象已经创建完毕\n",[28,20252,20253,20255,20258,20261],{"class":30,"line":2026},[28,20254,19693],{"class":38},[28,20256,20257],{"class":2225},"newman",[28,20259,20260],{"class":38},"(man);",[28,20262,20263],{"class":87}," \u002F\u002F调用拷贝构造函数\n",[28,20265,20266,20269,20271,20274],{"class":30,"line":2040},[28,20267,20268],{"class":38},"    Person newman2 ",[28,20270,54],{"class":34},[28,20272,20273],{"class":38}," man;",[28,20275,20276],{"class":87}," \u002F\u002F拷贝构造\n",[28,20278,20279],{"class":30,"line":2045},[28,20280,2662],{"emptyLinePlaceholder":336},[28,20282,20283],{"class":30,"line":2839},[28,20284,20285],{"class":87},"    \u002F\u002FPerson newman3;\n",[28,20287,20288,20291],{"class":30,"line":2853},[28,20289,20290],{"class":87},"    \u002F\u002Fnewman3 = man;",[28,20292,20293],{"class":87}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[28,20295,20296],{"class":30,"line":2861},[28,20297,1830],{"class":38},[28,20299,20300],{"class":30,"line":2866},[28,20301,2662],{"emptyLinePlaceholder":336},[28,20303,20304],{"class":30,"line":2872},[28,20305,20306],{"class":87},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[28,20308,20309],{"class":30,"line":2878},[28,20310,20311],{"class":87},"\u002F\u002F相当于Person p1 = p;\n",[28,20313,20314,20316,20318,20320,20322,20325],{"class":30,"line":2883},[28,20315,5626],{"class":34},[28,20317,19748],{"class":2225},[28,20319,413],{"class":38},[28,20321,19308],{"class":2225},[28,20323,20324],{"class":5478}," p1",[28,20326,20327],{"class":38},") {}\n",[28,20329,20330,20332,20334],{"class":30,"line":8210},[28,20331,5626],{"class":34},[28,20333,5919],{"class":2225},[28,20335,11115],{"class":38},[28,20337,20338,20340],{"class":30,"line":8234},[28,20339,18866],{"class":38},[28,20341,20342],{"class":87}," \u002F\u002F无参构造函数\n",[28,20344,20345,20347],{"class":30,"line":8239},[28,20346,19798],{"class":2225},[28,20348,19801],{"class":38},[28,20350,20351],{"class":30,"line":8245},[28,20352,1830],{"class":38},[28,20354,20355],{"class":30,"line":8272},[28,20356,2662],{"emptyLinePlaceholder":336},[28,20358,20359],{"class":30,"line":8277},[28,20360,20361],{"class":87},"\u002F\u002F3. 以值方式返回局部对象\n",[28,20363,20364,20366,20368],{"class":30,"line":8283},[28,20365,19308],{"class":2225},[28,20367,19817],{"class":2225},[28,20369,2238],{"class":38},[28,20371,20372],{"class":30,"line":8295},[28,20373,1811],{"class":38},[28,20375,20376],{"class":30,"line":8307},[28,20377,19298],{"class":38},[28,20379,20380,20382,20384,20386,20388,20390,20392,20394,20397,20399],{"class":30,"line":8319},[28,20381,6791],{"class":38},[28,20383,1441],{"class":34},[28,20385,1920],{"class":38},[28,20387,416],{"class":34},[28,20389,6780],{"class":34},[28,20391,828],{"class":38},[28,20393,753],{"class":34},[28,20395,20396],{"class":38},"p1 ",[28,20398,1441],{"class":34},[28,20400,9102],{"class":38},[28,20402,20403,20405],{"class":30,"line":9978},[28,20404,4352],{"class":34},[28,20406,20407],{"class":38}," p1;\n",[28,20409,20410],{"class":30,"line":10003},[28,20411,1830],{"class":38},[28,20413,20414],{"class":30,"line":10026},[28,20415,2662],{"emptyLinePlaceholder":336},[28,20417,20418,20420,20422],{"class":30,"line":10050},[28,20419,5626],{"class":34},[28,20421,5991],{"class":2225},[28,20423,2238],{"class":38},[28,20425,20426],{"class":30,"line":10055},[28,20427,1811],{"class":38},[28,20429,20430,20432,20434,20436],{"class":30,"line":10060},[28,20431,19883],{"class":38},[28,20433,54],{"class":34},[28,20435,19817],{"class":2225},[28,20437,5898],{"class":38},[28,20439,20440,20442,20444,20446,20448,20450,20452,20454,20456,20458],{"class":30,"line":10065},[28,20441,6791],{"class":38},[28,20443,1441],{"class":34},[28,20445,1920],{"class":38},[28,20447,416],{"class":34},[28,20449,6780],{"class":34},[28,20451,828],{"class":38},[28,20453,753],{"class":34},[28,20455,11710],{"class":38},[28,20457,1441],{"class":34},[28,20459,9102],{"class":38},[28,20461,20462],{"class":30,"line":10074},[28,20463,1830],{"class":38},[28,20465,20466],{"class":30,"line":10079},[28,20467,2662],{"emptyLinePlaceholder":336},[28,20469,20470],{"class":30,"line":10085},[28,20471,2662],{"emptyLinePlaceholder":336},[28,20473,20474,20476,20478],{"class":30,"line":10106},[28,20475,416],{"class":34},[28,20477,2235],{"class":2225},[28,20479,11115],{"class":38},[28,20481,20482],{"class":30,"line":10112},[28,20483,2662],{"emptyLinePlaceholder":336},[28,20485,20486],{"class":30,"line":10126},[28,20487,20488],{"class":87},"    \u002F\u002Ftest01();\n",[28,20490,20491],{"class":30,"line":10132},[28,20492,20493],{"class":87},"    \u002F\u002Ftest02();\n",[28,20495,20496,20498],{"class":30,"line":10159},[28,20497,19953],{"class":2225},[28,20499,5898],{"class":38},[28,20501,20502],{"class":30,"line":10168},[28,20503,2662],{"emptyLinePlaceholder":336},[28,20505,20506,20508,20510,20512],{"class":30,"line":10174},[28,20507,2565],{"class":2225},[28,20509,413],{"class":38},[28,20511,2570],{"class":127},[28,20513,2981],{"class":38},[28,20515,20516],{"class":30,"line":10182},[28,20517,2662],{"emptyLinePlaceholder":336},[28,20519,20520,20522,20524],{"class":30,"line":10187},[28,20521,4352],{"class":34},[28,20523,4355],{"class":60},[28,20525,1558],{"class":38},[28,20527,20528],{"class":30,"line":16866},[28,20529,1830],{"class":38},[380,20531,20533],{"id":20532},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20535,20536],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20538,20539],{},"1．默认构造函数(无参，函数体为空)",[14,20541,20542],{},"2．默认析构函数(无参，函数体为空)",[14,20544,20545],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20547,20548],{},"构造函数调用规则如下：",[1404,20550,20551,20554],{},[366,20552,20553],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[366,20555,20556],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[18,20558,20560],{"className":401,"code":20559,"language":403,"meta":23,"style":23},"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",[25,20561,20562,20570,20574,20579,20585,20597,20601,20606,20618,20627,20639,20643,20647,20663,20672,20684,20688,20692,20698,20710,20714,20718,20724,20728,20732,20740,20744,20756,20761,20769,20773,20791,20795,20799,20807,20811,20816,20824,20839,20852,20856,20861,20868,20884,20897,20901,20905,20913,20917,20923,20927,20937,20941,20949],{"__ignoreMap":23},[28,20563,20564,20566,20568],{"class":30,"line":31},[28,20565,14956],{"class":34},[28,20567,15831],{"class":2225},[28,20569,15834],{"class":38},[28,20571,20572],{"class":30,"line":48},[28,20573,14978],{"class":34},[28,20575,20576],{"class":30,"line":84},[28,20577,20578],{"class":87},"    \u002F\u002F无参（默认）构造函数\n",[28,20580,20581,20583],{"class":30,"line":91},[28,20582,18781],{"class":2225},[28,20584,11115],{"class":38},[28,20586,20587,20589,20591,20593,20595],{"class":30,"line":97},[28,20588,9931],{"class":38},[28,20590,1441],{"class":34},[28,20592,20072],{"class":127},[28,20594,1709],{"class":34},[28,20596,9102],{"class":38},[28,20598,20599],{"class":30,"line":103},[28,20600,2449],{"class":38},[28,20602,20603],{"class":30,"line":109},[28,20604,20605],{"class":87},"    \u002F\u002F有参构造函数\n",[28,20607,20608,20610,20612,20614,20616],{"class":30,"line":118},[28,20609,18781],{"class":2225},[28,20611,413],{"class":38},[28,20613,416],{"class":34},[28,20615,1663],{"class":5478},[28,20617,12704],{"class":38},[28,20619,20620,20623,20625],{"class":30,"line":124},[28,20621,20622],{"class":38},"        age ",[28,20624,54],{"class":34},[28,20626,1697],{"class":38},[28,20628,20629,20631,20633,20635,20637],{"class":30,"line":131},[28,20630,9931],{"class":38},[28,20632,1441],{"class":34},[28,20634,20112],{"class":127},[28,20636,1709],{"class":34},[28,20638,9102],{"class":38},[28,20640,20641],{"class":30,"line":137},[28,20642,2449],{"class":38},[28,20644,20645],{"class":30,"line":143},[28,20646,19136],{"class":87},[28,20648,20649,20651,20653,20655,20657,20659,20661],{"class":30,"line":149},[28,20650,18781],{"class":2225},[28,20652,413],{"class":38},[28,20654,7054],{"class":34},[28,20656,15831],{"class":2225},[28,20658,753],{"class":34},[28,20660,7087],{"class":5478},[28,20662,12704],{"class":38},[28,20664,20665,20667,20669],{"class":30,"line":1890},[28,20666,20622],{"class":38},[28,20668,54],{"class":34},[28,20670,20671],{"class":38}," p.age;\n",[28,20673,20674,20676,20678,20680,20682],{"class":30,"line":1904},[28,20675,9931],{"class":38},[28,20677,1441],{"class":34},[28,20679,20153],{"class":127},[28,20681,1709],{"class":34},[28,20683,9102],{"class":38},[28,20685,20686],{"class":30,"line":1909},[28,20687,2449],{"class":38},[28,20689,20690],{"class":30,"line":1915},[28,20691,18809],{"class":87},[28,20693,20694,20696],{"class":30,"line":1936},[28,20695,18814],{"class":2225},[28,20697,11115],{"class":38},[28,20699,20700,20702,20704,20706,20708],{"class":30,"line":1941},[28,20701,9931],{"class":38},[28,20703,1441],{"class":34},[28,20705,20190],{"class":127},[28,20707,1709],{"class":34},[28,20709,9102],{"class":38},[28,20711,20712],{"class":30,"line":1955},[28,20713,2449],{"class":38},[28,20715,20716],{"class":30,"line":1960},[28,20717,14978],{"class":34},[28,20719,20720,20722],{"class":30,"line":1989},[28,20721,2247],{"class":34},[28,20723,8059],{"class":38},[28,20725,20726],{"class":30,"line":1994},[28,20727,4257],{"class":38},[28,20729,20730],{"class":30,"line":2011},[28,20731,2662],{"emptyLinePlaceholder":336},[28,20733,20734,20736,20738],{"class":30,"line":2016},[28,20735,5626],{"class":34},[28,20737,5850],{"class":2225},[28,20739,2238],{"class":38},[28,20741,20742],{"class":30,"line":2021},[28,20743,1811],{"class":38},[28,20745,20746,20748,20750,20752,20754],{"class":30,"line":2026},[28,20747,19693],{"class":38},[28,20749,7392],{"class":2225},[28,20751,413],{"class":38},[28,20753,1048],{"class":60},[28,20755,2981],{"class":38},[28,20757,20758],{"class":30,"line":2040},[28,20759,20760],{"class":87},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[28,20762,20763,20765,20767],{"class":30,"line":2045},[28,20764,19693],{"class":38},[28,20766,7295],{"class":2225},[28,20768,17777],{"class":38},[28,20770,20771],{"class":30,"line":2839},[28,20772,2662],{"emptyLinePlaceholder":336},[28,20774,20775,20777,20779,20782,20784,20787,20789],{"class":30,"line":2853},[28,20776,6791],{"class":38},[28,20778,1441],{"class":34},[28,20780,20781],{"class":127}," \"p2的年龄为： \"",[28,20783,1709],{"class":34},[28,20785,20786],{"class":38}," p2.age ",[28,20788,1441],{"class":34},[28,20790,9102],{"class":38},[28,20792,20793],{"class":30,"line":2861},[28,20794,1830],{"class":38},[28,20796,20797],{"class":30,"line":2866},[28,20798,2662],{"emptyLinePlaceholder":336},[28,20800,20801,20803,20805],{"class":30,"line":2872},[28,20802,5626],{"class":34},[28,20804,5919],{"class":2225},[28,20806,2238],{"class":38},[28,20808,20809],{"class":30,"line":2878},[28,20810,1811],{"class":38},[28,20812,20813],{"class":30,"line":2883},[28,20814,20815],{"class":87},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[28,20817,20818,20821],{"class":30,"line":8210},[28,20819,20820],{"class":38},"    Person p1;",[28,20822,20823],{"class":87}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[28,20825,20826,20828,20830,20832,20834,20836],{"class":30,"line":8234},[28,20827,19693],{"class":38},[28,20829,7295],{"class":2225},[28,20831,413],{"class":38},[28,20833,845],{"class":60},[28,20835,6228],{"class":38},[28,20837,20838],{"class":87}," \u002F\u002F用户提供的有参\n",[28,20840,20841,20843,20846,20849],{"class":30,"line":8239},[28,20842,19693],{"class":38},[28,20844,20845],{"class":2225},"p3",[28,20847,20848],{"class":38},"(p2);",[28,20850,20851],{"class":87}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[28,20853,20854],{"class":30,"line":8245},[28,20855,2662],{"emptyLinePlaceholder":336},[28,20857,20858],{"class":30,"line":8272},[28,20859,20860],{"class":87},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[28,20862,20863,20866],{"class":30,"line":8277},[28,20864,20865],{"class":38},"    Person p4;",[28,20867,20823],{"class":87},[28,20869,20870,20872,20875,20877,20879,20881],{"class":30,"line":8283},[28,20871,19693],{"class":38},[28,20873,20874],{"class":2225},"p5",[28,20876,413],{"class":38},[28,20878,845],{"class":60},[28,20880,6228],{"class":38},[28,20882,20883],{"class":87}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[28,20885,20886,20888,20891,20894],{"class":30,"line":8295},[28,20887,19693],{"class":38},[28,20889,20890],{"class":2225},"p6",[28,20892,20893],{"class":38},"(p5);",[28,20895,20896],{"class":87}," \u002F\u002F用户自己提供拷贝构造\n",[28,20898,20899],{"class":30,"line":8307},[28,20900,1830],{"class":38},[28,20902,20903],{"class":30,"line":8319},[28,20904,2662],{"emptyLinePlaceholder":336},[28,20906,20907,20909,20911],{"class":30,"line":9978},[28,20908,416],{"class":34},[28,20910,2235],{"class":2225},[28,20912,11115],{"class":38},[28,20914,20915],{"class":30,"line":10003},[28,20916,2662],{"emptyLinePlaceholder":336},[28,20918,20919,20921],{"class":30,"line":10026},[28,20920,5895],{"class":2225},[28,20922,5898],{"class":38},[28,20924,20925],{"class":30,"line":10050},[28,20926,2662],{"emptyLinePlaceholder":336},[28,20928,20929,20931,20933,20935],{"class":30,"line":10055},[28,20930,2565],{"class":2225},[28,20932,413],{"class":38},[28,20934,2570],{"class":127},[28,20936,2981],{"class":38},[28,20938,20939],{"class":30,"line":10060},[28,20940,2662],{"emptyLinePlaceholder":336},[28,20942,20943,20945,20947],{"class":30,"line":10065},[28,20944,4352],{"class":34},[28,20946,4355],{"class":60},[28,20948,1558],{"class":38},[28,20950,20951],{"class":30,"line":10074},[28,20952,1830],{"class":38},[380,20954,20956],{"id":20955},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20958,20959],{},"浅拷贝：简单的赋值拷贝操作",[14,20961,20962],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[18,20964,20966],{"className":401,"code":20965,"language":403,"meta":23,"style":23},"#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",[25,20967,20968,20974,20984,20990,20994,20998,21003,21009,21013,21026,21030,21034,21041,21045,21055,21070,21083,21087,21092,21097,21113,21117,21130,21135,21140,21145,21154,21159,21174,21178,21182,21186,21192,21196,21201,21216,21220,21231,21245,21249,21258,21262,21268,21280,21284,21292,21296,21313,21344,21352,21380,21384,21388,21396,21400,21406],{"__ignoreMap":23},[28,20969,20970,20972],{"class":30,"line":31},[28,20971,2211],{"class":34},[28,20973,2214],{"class":127},[28,20975,20976,20978,20980,20982],{"class":30,"line":48},[28,20977,2219],{"class":34},[28,20979,2222],{"class":34},[28,20981,2226],{"class":2225},[28,20983,1558],{"class":38},[28,20985,20986,20988],{"class":30,"line":84},[28,20987,14956],{"class":34},[28,20989,15433],{"class":2225},[28,20991,20992],{"class":30,"line":91},[28,20993,1811],{"class":38},[28,20995,20996],{"class":30,"line":97},[28,20997,14978],{"class":34},[28,20999,21000],{"class":30,"line":103},[28,21001,21002],{"class":87},"    \u002F\u002F默认构造函数\n",[28,21004,21005,21007],{"class":30,"line":109},[28,21006,18781],{"class":2225},[28,21008,2238],{"class":38},[28,21010,21011],{"class":30,"line":118},[28,21012,2292],{"class":38},[28,21014,21015,21017,21019,21022,21024],{"class":30,"line":124},[28,21016,3713],{"class":38},[28,21018,1441],{"class":34},[28,21020,21021],{"class":127},"\"默认构造函数\"",[28,21023,1441],{"class":34},[28,21025,1463],{"class":38},[28,21027,21028],{"class":30,"line":131},[28,21029,2449],{"class":38},[28,21031,21032],{"class":30,"line":137},[28,21033,20605],{"class":87},[28,21035,21036,21038],{"class":30,"line":143},[28,21037,18814],{"class":2225},[28,21039,21040],{"class":38},"(int age,int height)\n",[28,21042,21043],{"class":30,"line":149},[28,21044,2292],{"class":38},[28,21046,21047,21050,21052],{"class":30,"line":1890},[28,21048,21049],{"class":38},"        m_Age",[28,21051,54],{"class":34},[28,21053,21054],{"class":38},"age;\n",[28,21056,21057,21060,21062,21064,21067],{"class":30,"line":1904},[28,21058,21059],{"class":38},"        m_Height",[28,21061,11979],{"class":34},[28,21063,2644],{"class":34},[28,21065,21066],{"class":38},"(height);",[28,21068,21069],{"class":87},"\u002F\u002F放到堆区\n",[28,21071,21072,21074,21076,21079,21081],{"class":30,"line":1909},[28,21073,3713],{"class":38},[28,21075,1441],{"class":34},[28,21077,21078],{"class":127},"\"有参构造函数\"",[28,21080,1441],{"class":34},[28,21082,1463],{"class":38},[28,21084,21085],{"class":30,"line":1915},[28,21086,2449],{"class":38},[28,21088,21089],{"class":30,"line":1936},[28,21090,21091],{"class":87},"    \u002F\u002F深拷贝解决上述问题\n",[28,21093,21094],{"class":30,"line":1941},[28,21095,21096],{"class":87},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[28,21098,21099,21101,21103,21105,21107,21109,21111],{"class":30,"line":1955},[28,21100,18781],{"class":2225},[28,21102,413],{"class":38},[28,21104,7054],{"class":34},[28,21106,15831],{"class":2225},[28,21108,10846],{"class":34},[28,21110,14],{"class":5478},[28,21112,81],{"class":38},[28,21114,21115],{"class":30,"line":1960},[28,21116,2292],{"class":38},[28,21118,21119,21121,21123,21126,21128],{"class":30,"line":1989},[28,21120,3713],{"class":38},[28,21122,1441],{"class":34},[28,21124,21125],{"class":127},"\"拷贝构造函数\"",[28,21127,1441],{"class":34},[28,21129,1463],{"class":38},[28,21131,21132],{"class":30,"line":1994},[28,21133,21134],{"class":87},"        \u002F\u002F编译器默认的写如下注释部分\n",[28,21136,21137],{"class":30,"line":2011},[28,21138,21139],{"class":87},"        \u002F\u002Fm_Age=p.m_Age;\n",[28,21141,21142],{"class":30,"line":2016},[28,21143,21144],{"class":87},"        \u002F\u002Fm_Height=p.m_Height;\n",[28,21146,21147,21149,21151],{"class":30,"line":2021},[28,21148,21049],{"class":38},[28,21150,54],{"class":34},[28,21152,21153],{"class":38},"p.m_Age;\n",[28,21155,21156],{"class":30,"line":2026},[28,21157,21158],{"class":87},"        \u002F\u002F深拷贝操作\n",[28,21160,21161,21163,21165,21167,21169,21171],{"class":30,"line":2040},[28,21162,21059],{"class":38},[28,21164,11979],{"class":34},[28,21166,2644],{"class":34},[28,21168,413],{"class":38},[28,21170,854],{"class":34},[28,21172,21173],{"class":38},"p.m_Height);\n",[28,21175,21176],{"class":30,"line":2045},[28,21177,2449],{"class":38},[28,21179,21180],{"class":30,"line":2839},[28,21181,2662],{"emptyLinePlaceholder":336},[28,21183,21184],{"class":30,"line":2853},[28,21185,18809],{"class":87},[28,21187,21188,21190],{"class":30,"line":2861},[28,21189,18814],{"class":2225},[28,21191,2238],{"class":38},[28,21193,21194],{"class":30,"line":2866},[28,21195,2292],{"class":38},[28,21197,21198],{"class":30,"line":2872},[28,21199,21200],{"class":87},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[28,21202,21203,21205,21208,21211,21214],{"class":30,"line":2878},[28,21204,2759],{"class":34},[28,21206,21207],{"class":38},"(m_Height ",[28,21209,21210],{"class":34},"!=",[28,21212,21213],{"class":60}," NULL",[28,21215,81],{"class":38},[28,21217,21218],{"class":30,"line":2883},[28,21219,2772],{"class":38},[28,21221,21222,21225,21228],{"class":30,"line":8210},[28,21223,21224],{"class":34},"            delete",[28,21226,21227],{"class":38}," m_Height;",[28,21229,21230],{"class":87}," \u002F\u002F释放堆区内存\n",[28,21232,21233,21236,21238,21240,21242],{"class":30,"line":8234},[28,21234,21235],{"class":38},"            m_Height",[28,21237,54],{"class":34},[28,21239,2654],{"class":60},[28,21241,465],{"class":38},[28,21243,21244],{"class":87}," \u002F\u002F防止野指针\n",[28,21246,21247],{"class":30,"line":8239},[28,21248,2791],{"class":38},[28,21250,21251,21253,21255],{"class":30,"line":8245},[28,21252,3713],{"class":38},[28,21254,1441],{"class":34},[28,21256,21257],{"class":127},"\"Person的析构函数调用\"\n",[28,21259,21260],{"class":30,"line":8272},[28,21261,2449],{"class":38},[28,21263,21264,21266],{"class":30,"line":8277},[28,21265,2247],{"class":34},[28,21267,15928],{"class":38},[28,21269,21270,21272,21274,21277],{"class":30,"line":8283},[28,21271,2247],{"class":34},[28,21273,6780],{"class":34},[28,21275,21276],{"class":38},"m_Height;",[28,21278,21279],{"class":87}," \u002F\u002F定义一个指针，指向身高\n",[28,21281,21282],{"class":30,"line":8295},[28,21283,4257],{"class":38},[28,21285,21286,21288,21290],{"class":30,"line":8307},[28,21287,5626],{"class":34},[28,21289,5850],{"class":2225},[28,21291,2238],{"class":38},[28,21293,21294],{"class":30,"line":8319},[28,21295,1811],{"class":38},[28,21297,21298,21300,21302,21304,21306,21308,21311],{"class":30,"line":9978},[28,21299,19693],{"class":38},[28,21301,7392],{"class":2225},[28,21303,413],{"class":38},[28,21305,1048],{"class":60},[28,21307,64],{"class":38},[28,21309,21310],{"class":60},"160",[28,21312,2981],{"class":38},[28,21314,21315,21317,21319,21322,21324,21327,21329,21332,21334,21337,21339,21341],{"class":30,"line":10003},[28,21316,1816],{"class":38},[28,21318,1441],{"class":34},[28,21320,21321],{"class":127},"\"p1的年龄为:\"",[28,21323,1441],{"class":34},[28,21325,21326],{"class":38},"p1.m_Age",[28,21328,1441],{"class":34},[28,21330,21331],{"class":127},"\"身高为：\"",[28,21333,6681],{"class":34},[28,21335,21336],{"class":38},"p1.m_Height",[28,21338,1441],{"class":34},[28,21340,1506],{"class":38},[28,21342,21343],{"class":87},"  \u002F\u002F18\n",[28,21345,21346,21348,21350],{"class":30,"line":10026},[28,21347,19693],{"class":38},[28,21349,7295],{"class":2225},[28,21351,17777],{"class":38},[28,21353,21354,21356,21358,21361,21363,21365,21367,21369,21371,21374,21376,21378],{"class":30,"line":10050},[28,21355,1816],{"class":38},[28,21357,1441],{"class":34},[28,21359,21360],{"class":127},"\"p2的年龄为：\"",[28,21362,1441],{"class":34},[28,21364,19723],{"class":38},[28,21366,1441],{"class":34},[28,21368,21331],{"class":127},[28,21370,6681],{"class":34},[28,21372,21373],{"class":38},"p2.m_Height",[28,21375,1441],{"class":34},[28,21377,1506],{"class":38},[28,21379,21343],{"class":87},[28,21381,21382],{"class":30,"line":10055},[28,21383,13472],{"class":38},[28,21385,21386],{"class":30,"line":10060},[28,21387,1830],{"class":38},[28,21389,21390,21392,21394],{"class":30,"line":10065},[28,21391,416],{"class":34},[28,21393,2235],{"class":2225},[28,21395,2238],{"class":38},[28,21397,21398],{"class":30,"line":10074},[28,21399,1811],{"class":38},[28,21401,21402,21404],{"class":30,"line":10079},[28,21403,5895],{"class":2225},[28,21405,5898],{"class":38},[28,21407,21408],{"class":30,"line":10085},[28,21409,1830],{"class":38},[14,21411,21412],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21414,21415],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21417,21418],{},[1727,21419],{"alt":23,"src":21420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21422,21423],{},"浅拷贝问题要使用深拷贝来解决",[14,21425,21426],{},[1727,21427],{"alt":23,"src":21428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21430,21431],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[380,21433,21435],{"id":21434},"_826初始化列表","8.2.6初始化列表",[14,21437,21438],{},"作用：初始化属性",[14,21440,5443],{},[18,21442,21445],{"className":21443,"code":21444,"language":5449},[5447],"构造函数():属性1(值1),属性2(值2).....{}\n",[25,21446,21444],{"__ignoreMap":23},[14,21448,21449],{},"例子",[18,21451,21453],{"className":401,"code":21452,"language":403,"meta":23,"style":23},"#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",[25,21454,21455,21461,21471,21477,21481,21486,21490,21495,21500,21505,21510,21515,21520,21524,21529,21534,21577,21586,21604,21622,21640,21644,21648,21655,21662,21669,21673,21677,21685,21689,21693,21713,21722,21726,21730,21740,21744,21752],{"__ignoreMap":23},[28,21456,21457,21459],{"class":30,"line":31},[28,21458,2211],{"class":34},[28,21460,2214],{"class":127},[28,21462,21463,21465,21467,21469],{"class":30,"line":48},[28,21464,2219],{"class":34},[28,21466,2222],{"class":34},[28,21468,2226],{"class":2225},[28,21470,1558],{"class":38},[28,21472,21473,21475],{"class":30,"line":84},[28,21474,14956],{"class":34},[28,21476,15433],{"class":2225},[28,21478,21479],{"class":30,"line":91},[28,21480,1811],{"class":38},[28,21482,21483],{"class":30,"line":97},[28,21484,21485],{"class":34},"    public:\n",[28,21487,21488],{"class":30,"line":103},[28,21489,2662],{"emptyLinePlaceholder":336},[28,21491,21492],{"class":30,"line":109},[28,21493,21494],{"class":87},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[28,21496,21497],{"class":30,"line":118},[28,21498,21499],{"class":87},"    \u002F\u002FPerson(int a, int b, int c) {\n",[28,21501,21502],{"class":30,"line":124},[28,21503,21504],{"class":87},"    \u002F\u002F  m_A = a;\n",[28,21506,21507],{"class":30,"line":131},[28,21508,21509],{"class":87},"    \u002F\u002F  m_B = b;\n",[28,21511,21512],{"class":30,"line":137},[28,21513,21514],{"class":87},"    \u002F\u002F  m_C = c;\n",[28,21516,21517],{"class":30,"line":143},[28,21518,21519],{"class":87},"    \u002F\u002F}\n",[28,21521,21522],{"class":30,"line":149},[28,21523,2662],{"emptyLinePlaceholder":336},[28,21525,21526],{"class":30,"line":1890},[28,21527,21528],{"class":87},"    \u002F\u002F初始化列表方式初始化\n",[28,21530,21531],{"class":30,"line":1904},[28,21532,21533],{"class":87},"    \u002F\u002F使用有参构造函数\n",[28,21535,21536,21538,21540,21542,21544,21546,21548,21550,21552,21554,21556,21559,21562,21565,21568,21571,21574],{"class":30,"line":1909},[28,21537,18781],{"class":2225},[28,21539,413],{"class":38},[28,21541,416],{"class":34},[28,21543,1663],{"class":5478},[28,21545,12697],{"class":38},[28,21547,416],{"class":34},[28,21549,3095],{"class":5478},[28,21551,12697],{"class":38},[28,21553,416],{"class":34},[28,21555,3111],{"class":5478},[28,21557,21558],{"class":38},") :",[28,21560,21561],{"class":2225},"m_A",[28,21563,21564],{"class":38},"(a), ",[28,21566,21567],{"class":2225},"m_B",[28,21569,21570],{"class":38},"(b), ",[28,21572,21573],{"class":2225},"m_C",[28,21575,21576],{"class":38},"(c) {}\n",[28,21578,21579,21581,21584],{"class":30,"line":1915},[28,21580,15171],{"class":34},[28,21582,21583],{"class":2225}," PrintPerson",[28,21585,11115],{"class":38},[28,21587,21588,21590,21592,21595,21597,21600,21602],{"class":30,"line":1936},[28,21589,9931],{"class":38},[28,21591,1441],{"class":34},[28,21593,21594],{"class":127}," \"mA:\"",[28,21596,1709],{"class":34},[28,21598,21599],{"class":38}," m_A ",[28,21601,1441],{"class":34},[28,21603,9102],{"class":38},[28,21605,21606,21608,21610,21613,21615,21618,21620],{"class":30,"line":1941},[28,21607,9931],{"class":38},[28,21609,1441],{"class":34},[28,21611,21612],{"class":127}," \"mB:\"",[28,21614,1709],{"class":34},[28,21616,21617],{"class":38}," m_B ",[28,21619,1441],{"class":34},[28,21621,9102],{"class":38},[28,21623,21624,21626,21628,21631,21633,21636,21638],{"class":30,"line":1955},[28,21625,9931],{"class":38},[28,21627,1441],{"class":34},[28,21629,21630],{"class":127}," \"mC:\"",[28,21632,1709],{"class":34},[28,21634,21635],{"class":38}," m_C ",[28,21637,1441],{"class":34},[28,21639,9102],{"class":38},[28,21641,21642],{"class":30,"line":1960},[28,21643,2449],{"class":38},[28,21645,21646],{"class":30,"line":1989},[28,21647,15484],{"class":34},[28,21649,21650,21652],{"class":30,"line":1994},[28,21651,2247],{"class":34},[28,21653,21654],{"class":38}," m_A;\n",[28,21656,21657,21659],{"class":30,"line":2011},[28,21658,2247],{"class":34},[28,21660,21661],{"class":38}," m_B;\n",[28,21663,21664,21666],{"class":30,"line":2016},[28,21665,2247],{"class":34},[28,21667,21668],{"class":38}," m_C;\n",[28,21670,21671],{"class":30,"line":2021},[28,21672,4257],{"class":38},[28,21674,21675],{"class":30,"line":2026},[28,21676,2662],{"emptyLinePlaceholder":336},[28,21678,21679,21681,21683],{"class":30,"line":2040},[28,21680,416],{"class":34},[28,21682,2235],{"class":2225},[28,21684,6240],{"class":38},[28,21686,21687],{"class":30,"line":2045},[28,21688,1811],{"class":38},[28,21690,21691],{"class":30,"line":2839},[28,21692,2662],{"emptyLinePlaceholder":336},[28,21694,21695,21697,21699,21701,21703,21705,21707,21709,21711],{"class":30,"line":2853},[28,21696,19693],{"class":38},[28,21698,14],{"class":2225},[28,21700,413],{"class":38},[28,21702,61],{"class":60},[28,21704,12697],{"class":38},[28,21706,211],{"class":60},[28,21708,12697],{"class":38},[28,21710,78],{"class":60},[28,21712,2981],{"class":38},[28,21714,21715,21717,21720],{"class":30,"line":2861},[28,21716,16128],{"class":38},[28,21718,21719],{"class":2225},"PrintPerson",[28,21721,5898],{"class":38},[28,21723,21724],{"class":30,"line":2866},[28,21725,2662],{"emptyLinePlaceholder":336},[28,21727,21728],{"class":30,"line":2872},[28,21729,2662],{"emptyLinePlaceholder":336},[28,21731,21732,21734,21736,21738],{"class":30,"line":2878},[28,21733,2565],{"class":2225},[28,21735,413],{"class":38},[28,21737,2570],{"class":127},[28,21739,2981],{"class":38},[28,21741,21742],{"class":30,"line":2883},[28,21743,2662],{"emptyLinePlaceholder":336},[28,21745,21746,21748,21750],{"class":30,"line":8210},[28,21747,4352],{"class":34},[28,21749,4355],{"class":60},[28,21751,1558],{"class":38},[28,21753,21754],{"class":30,"line":8234},[28,21755,1830],{"class":38},[14,21757,21758,21759,21762,21763],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[555,21760,21761],{},"参数名就是定义的对象属性","，",[555,21764,21765],{},"属性后面的值为有参构造函数的形参",[18,21767,21769],{"className":401,"code":21768,"language":403,"meta":23,"style":23},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[25,21770,21771],{"__ignoreMap":23},[28,21772,21773,21775,21777,21779,21782,21784,21787,21789,21792,21794,21797,21799,21802,21804],{"class":30,"line":31},[28,21774,19308],{"class":2225},[28,21776,413],{"class":38},[28,21778,416],{"class":34},[28,21780,21781],{"class":38}," a.",[28,21783,416],{"class":34},[28,21785,21786],{"class":38}," b,",[28,21788,416],{"class":34},[28,21790,21791],{"class":38}," b):",[28,21793,21561],{"class":2225},[28,21795,21796],{"class":38},"(a),",[28,21798,21567],{"class":2225},[28,21800,21801],{"class":38},"(c),",[28,21803,21573],{"class":2225},[28,21805,21806],{"class":38},"(b) {}\n",[380,21808,21810],{"id":21809},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21812,21813],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21815,14895],{},[18,21817,21819],{"className":401,"code":21818,"language":403,"meta":23,"style":23},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[25,21820,21821,21826,21831,21835,21840,21844],{"__ignoreMap":23},[28,21822,21823],{"class":30,"line":31},[28,21824,21825],{"class":38},"A{};\n",[28,21827,21828],{"class":30,"line":48},[28,21829,21830],{"class":38},"B\n",[28,21832,21833],{"class":30,"line":84},[28,21834,1811],{"class":38},[28,21836,21837],{"class":30,"line":91},[28,21838,21839],{"class":38},"    A a;\n",[28,21841,21842],{"class":30,"line":97},[28,21843,1830],{"class":38},[28,21845,21846],{"class":30,"line":103},[28,21847,21848],{"class":87},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21850,21851],{},"案例",[18,21853,21855],{"className":401,"code":21854,"language":403,"meta":23,"style":23},"\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",[25,21856,21857,21862,21869,21873,21878,21883,21897,21901,21911,21922,21926,21933,21937,21950,21954,21959,21964,21968,21974,21978,21982,21986,22017,22021,22032,22036,22042,22046,22059,22063,22067,22071,22076,22081,22085,22093,22097,22114,22133,22137,22145,22149,22155],{"__ignoreMap":23},[28,21858,21859],{"class":30,"line":31},[28,21860,21861],{"class":87},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[28,21863,21864,21866],{"class":30,"line":48},[28,21865,14956],{"class":34},[28,21867,21868],{"class":2225}," Phone\n",[28,21870,21871],{"class":30,"line":84},[28,21872,1811],{"class":38},[28,21874,21875],{"class":30,"line":91},[28,21876,21877],{"class":38},"public：\n",[28,21879,21880],{"class":30,"line":97},[28,21881,21882],{"class":87},"    \u002F\u002F 赋值(构造函数)\n",[28,21884,21885,21888,21890,21892,21895],{"class":30,"line":103},[28,21886,21887],{"class":2225},"    Phone",[28,21889,413],{"class":38},[28,21891,15179],{"class":2225},[28,21893,21894],{"class":5478}," pName",[28,21896,81],{"class":38},[28,21898,21899],{"class":30,"line":109},[28,21900,2292],{"class":38},[28,21902,21903,21906,21908],{"class":30,"line":118},[28,21904,21905],{"class":38},"        m_pName",[28,21907,54],{"class":34},[28,21909,21910],{"class":38},"pName;\n",[28,21912,21913,21915,21917,21920],{"class":30,"line":124},[28,21914,3713],{"class":38},[28,21916,1441],{"class":34},[28,21918,21919],{"class":127},"\"Phone的构造函数调用\"",[28,21921,1558],{"class":38},[28,21923,21924],{"class":30,"line":131},[28,21925,2449],{"class":38},[28,21927,21928,21931],{"class":30,"line":137},[28,21929,21930],{"class":2225},"    ~Phone",[28,21932,2238],{"class":38},[28,21934,21935],{"class":30,"line":143},[28,21936,2292],{"class":38},[28,21938,21939,21941,21943,21946,21948],{"class":30,"line":149},[28,21940,3713],{"class":38},[28,21942,1441],{"class":34},[28,21944,21945],{"class":127},"\"Phone析构函数调用\"",[28,21947,1441],{"class":34},[28,21949,1463],{"class":38},[28,21951,21952],{"class":30,"line":1890},[28,21953,2449],{"class":38},[28,21955,21956],{"class":30,"line":1904},[28,21957,21958],{"class":87},"    \u002F\u002F\n",[28,21960,21961],{"class":30,"line":1909},[28,21962,21963],{"class":38},"    string m_PName;\n",[28,21965,21966],{"class":30,"line":1915},[28,21967,4257],{"class":38},[28,21969,21970,21972],{"class":30,"line":1936},[28,21971,14956],{"class":34},[28,21973,15433],{"class":2225},[28,21975,21976],{"class":30,"line":1941},[28,21977,1811],{"class":38},[28,21979,21980],{"class":30,"line":1955},[28,21981,14978],{"class":34},[28,21983,21984],{"class":30,"line":1960},[28,21985,17256],{"class":87},[28,21987,21988,21990,21992,21994,21996,21998,22000,22003,22006,22008,22011,22014],{"class":30,"line":1989},[28,21989,18781],{"class":2225},[28,21991,413],{"class":38},[28,21993,15179],{"class":2225},[28,21995,15182],{"class":5478},[28,21997,64],{"class":38},[28,21999,15179],{"class":2225},[28,22001,22002],{"class":5478}," pname",[28,22004,22005],{"class":38},"):",[28,22007,15272],{"class":2225},[28,22009,22010],{"class":38},"(name),m_phone.",[28,22012,22013],{"class":2225},"m_PName",[28,22015,22016],{"class":38},"(pname) \n",[28,22018,22019],{"class":30,"line":1994},[28,22020,2292],{"class":38},[28,22022,22023,22025,22027,22030],{"class":30,"line":2011},[28,22024,3713],{"class":38},[28,22026,1441],{"class":34},[28,22028,22029],{"class":127},"\"Person的构造函数调用\"",[28,22031,1558],{"class":38},[28,22033,22034],{"class":30,"line":2016},[28,22035,2449],{"class":38},[28,22037,22038,22040],{"class":30,"line":2021},[28,22039,18814],{"class":2225},[28,22041,2238],{"class":38},[28,22043,22044],{"class":30,"line":2026},[28,22045,2292],{"class":38},[28,22047,22048,22050,22052,22055,22057],{"class":30,"line":2040},[28,22049,3713],{"class":38},[28,22051,1441],{"class":34},[28,22053,22054],{"class":127},"\"Person析构函数调用\"",[28,22056,1441],{"class":34},[28,22058,1463],{"class":38},[28,22060,22061],{"class":30,"line":2045},[28,22062,2449],{"class":38},[28,22064,22065],{"class":30,"line":2839},[28,22066,8042],{"class":87},[28,22068,22069],{"class":30,"line":2853},[28,22070,15154],{"class":38},[28,22072,22073],{"class":30,"line":2861},[28,22074,22075],{"class":87},"    \u002F\u002F手机\n",[28,22077,22078],{"class":30,"line":2866},[28,22079,22080],{"class":38},"    Phone m_Phone;\n",[28,22082,22083],{"class":30,"line":2872},[28,22084,4257],{"class":38},[28,22086,22087,22089,22091],{"class":30,"line":2878},[28,22088,5626],{"class":34},[28,22090,5850],{"class":2225},[28,22092,2238],{"class":38},[28,22094,22095],{"class":30,"line":2883},[28,22096,1811],{"class":38},[28,22098,22099,22101,22103,22105,22107,22109,22112],{"class":30,"line":8210},[28,22100,19693],{"class":38},[28,22102,14],{"class":2225},[28,22104,413],{"class":38},[28,22106,8178],{"class":127},[28,22108,64],{"class":38},[28,22110,22111],{"class":127},"\"安卓\"",[28,22113,2981],{"class":38},[28,22115,22116,22118,22120,22123,22125,22128,22130],{"class":30,"line":8234},[28,22117,1816],{"class":38},[28,22119,1441],{"class":34},[28,22121,22122],{"class":38},"p.Name",[28,22124,1441],{"class":34},[28,22126,22127],{"class":127},"\"拿着：\"",[28,22129,1441],{"class":34},[28,22131,22132],{"class":38},"p.m_phone.m_PName;\n",[28,22134,22135],{"class":30,"line":8239},[28,22136,1830],{"class":38},[28,22138,22139,22141,22143],{"class":30,"line":8245},[28,22140,416],{"class":34},[28,22142,2235],{"class":2225},[28,22144,2238],{"class":38},[28,22146,22147],{"class":30,"line":8272},[28,22148,1811],{"class":38},[28,22150,22151,22153],{"class":30,"line":8277},[28,22152,5895],{"class":2225},[28,22154,5898],{"class":38},[28,22156,22157],{"class":30,"line":8283},[28,22158,1830],{"class":38},[14,22160,9287],{},[18,22162,22164],{"className":401,"code":22163,"language":403,"meta":23,"style":23},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[25,22165,22166,22171],{"__ignoreMap":23},[28,22167,22168],{"class":30,"line":31},[28,22169,22170],{"class":87},"    \u002F\u002F不需要写这个：\n",[28,22172,22173],{"class":30,"line":48},[28,22174,22175],{"class":87},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22177,22178],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[18,22180,22182],{"className":401,"code":22181,"language":403,"meta":23,"style":23},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[25,22183,22184],{"__ignoreMap":23},[28,22185,22186,22188,22191,22193,22196,22199],{"class":30,"line":31},[28,22187,19308],{"class":2225},[28,22189,22190],{"class":38},"(string name.string pname):",[28,22192,15272],{"class":2225},[28,22194,22195],{"class":38},"(name),",[28,22197,22198],{"class":2225},"m_phone",[28,22200,22201],{"class":38},"(pname) {}\n",[14,22203,22204,22205,54,22208],{},"采用的是隐式转换法，实际为如下：\n",[25,22206,22207],{},"m_phone(pname)",[25,22209,22210],{},"Phone m_phone=pname",[14,22212,22213,22216],{},[555,22214,22215],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22218,22219],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[380,22221,22223],{"id":22222},"_828静态对象","8.2.8静态对象",[14,22225,22226],{},"静态对象在成员对象前static，称为静态对象",[14,22228,22229],{},"静态对象分为两类：",[363,22231,22232],{},[366,22233,22234],{},"静态成员变量",[1404,22236,22237,22240,22243],{},[366,22238,22239],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[366,22241,22242],{},"②在编译阶段分配内存",[366,22244,22245],{},"③类内声明，类外初始化",[363,22247,22248],{"start":48},[366,22249,22250],{},"静态成员函数",[1404,22252,22253,22256],{},[366,22254,22255],{},"①所有对象共享同一个函数",[366,22257,22258],{},"②静态成员函数只能访问静态成员变量",[22260,22261,22263],"h4",{"id":22262},"_8281静态成员变量","8.2.8.1静态成员变量",[18,22265,22267],{"className":401,"code":22266,"language":403,"meta":23,"style":23},"#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",[25,22268,22269,22275,22285,22291,22295,22299,22304,22309,22314,22322,22326,22330,22334,22342,22346,22350,22355,22368,22372,22380,22384,22390],{"__ignoreMap":23},[28,22270,22271,22273],{"class":30,"line":31},[28,22272,2211],{"class":34},[28,22274,2214],{"class":127},[28,22276,22277,22279,22281,22283],{"class":30,"line":48},[28,22278,2219],{"class":34},[28,22280,2222],{"class":34},[28,22282,2226],{"class":2225},[28,22284,1558],{"class":38},[28,22286,22287,22289],{"class":30,"line":84},[28,22288,14956],{"class":34},[28,22290,15433],{"class":2225},[28,22292,22293],{"class":30,"line":91},[28,22294,1811],{"class":38},[28,22296,22297],{"class":30,"line":97},[28,22298,14978],{"class":34},[28,22300,22301],{"class":30,"line":103},[28,22302,22303],{"class":87},"    \u002F\u002F非静态成员变量\n",[28,22305,22306],{"class":30,"line":109},[28,22307,22308],{"class":87},"    \u002F\u002F int m_A;\n",[28,22310,22311],{"class":30,"line":118},[28,22312,22313],{"class":87},"    \u002F\u002F定义静态成员变量\n",[28,22315,22316,22318,22320],{"class":30,"line":124},[28,22317,11282],{"class":34},[28,22319,2644],{"class":34},[28,22321,21654],{"class":38},[28,22323,22324],{"class":30,"line":131},[28,22325,2662],{"emptyLinePlaceholder":336},[28,22327,22328],{"class":30,"line":137},[28,22329,2662],{"emptyLinePlaceholder":336},[28,22331,22332],{"class":30,"line":143},[28,22333,4257],{"class":38},[28,22335,22336,22338,22340],{"class":30,"line":149},[28,22337,5626],{"class":34},[28,22339,5850],{"class":2225},[28,22341,2238],{"class":38},[28,22343,22344],{"class":30,"line":1890},[28,22345,1811],{"class":38},[28,22347,22348],{"class":30,"line":1904},[28,22349,15575],{"class":38},[28,22351,22352],{"class":30,"line":1909},[28,22353,22354],{"class":87},"    \u002F\u002F输出类成员变量这块内存\n",[28,22356,22357,22359,22361,22364,22366],{"class":30,"line":1915},[28,22358,1816],{"class":38},[28,22360,1441],{"class":34},[28,22362,22363],{"class":38},"p.m_A",[28,22365,1441],{"class":34},[28,22367,1463],{"class":38},[28,22369,22370],{"class":30,"line":1936},[28,22371,1830],{"class":38},[28,22373,22374,22376,22378],{"class":30,"line":1941},[28,22375,416],{"class":34},[28,22377,2235],{"class":2225},[28,22379,2238],{"class":38},[28,22381,22382],{"class":30,"line":1955},[28,22383,1811],{"class":38},[28,22385,22386,22388],{"class":30,"line":1960},[28,22387,5895],{"class":2225},[28,22389,2238],{"class":38},[28,22391,22392],{"class":30,"line":1989},[28,22393,1830],{"class":38},[14,22395,22396],{},"此时输出是报错的：无法解析外部命令",[14,22398,22399],{},"解决这一问题：必须用到类内声明，类外初始化操作",[18,22401,22403],{"className":401,"code":22402,"language":403,"meta":23,"style":23},"#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",[25,22404,22405,22411,22421,22427,22431,22435,22440,22448,22452,22457,22472,22480,22484,22488,22493,22498,22510,22515,22526,22531,22536,22549,22553,22561,22565,22571],{"__ignoreMap":23},[28,22406,22407,22409],{"class":30,"line":31},[28,22408,2211],{"class":34},[28,22410,2214],{"class":127},[28,22412,22413,22415,22417,22419],{"class":30,"line":48},[28,22414,2219],{"class":34},[28,22416,2222],{"class":34},[28,22418,2226],{"class":2225},[28,22420,1558],{"class":38},[28,22422,22423,22425],{"class":30,"line":84},[28,22424,14956],{"class":34},[28,22426,15433],{"class":2225},[28,22428,22429],{"class":30,"line":91},[28,22430,1811],{"class":38},[28,22432,22433],{"class":30,"line":97},[28,22434,14978],{"class":34},[28,22436,22437],{"class":30,"line":103},[28,22438,22439],{"class":87},"    \u002F\u002F类内声明\n",[28,22441,22442,22444,22446],{"class":30,"line":109},[28,22443,11282],{"class":34},[28,22445,2644],{"class":34},[28,22447,21654],{"class":38},[28,22449,22450],{"class":30,"line":118},[28,22451,4257],{"class":38},[28,22453,22454],{"class":30,"line":124},[28,22455,22456],{"class":87},"\u002F\u002F类外初始化\n",[28,22458,22459,22461,22463,22466,22468,22470],{"class":30,"line":131},[28,22460,416],{"class":34},[28,22462,15831],{"class":2225},[28,22464,22465],{"class":38},"::m_A",[28,22467,54],{"class":34},[28,22469,845],{"class":60},[28,22471,1558],{"class":38},[28,22473,22474,22476,22478],{"class":30,"line":137},[28,22475,5626],{"class":34},[28,22477,5850],{"class":2225},[28,22479,2238],{"class":38},[28,22481,22482],{"class":30,"line":143},[28,22483,1811],{"class":38},[28,22485,22486],{"class":30,"line":149},[28,22487,15575],{"class":38},[28,22489,22490],{"class":30,"line":1890},[28,22491,22492],{"class":87},"    \u002F\u002F访问变量的原内存空间\n",[28,22494,22495],{"class":30,"line":1904},[28,22496,22497],{"class":87},"    \u002F\u002F100\n",[28,22499,22500,22502,22504,22506,22508],{"class":30,"line":1909},[28,22501,1816],{"class":38},[28,22503,1441],{"class":34},[28,22505,22363],{"class":38},[28,22507,1441],{"class":34},[28,22509,1463],{"class":38},[28,22511,22512],{"class":30,"line":1915},[28,22513,22514],{"class":38},"    Person p2;\n",[28,22516,22517,22520,22522,22524],{"class":30,"line":1936},[28,22518,22519],{"class":38},"    p2.m_A",[28,22521,54],{"class":34},[28,22523,1984],{"class":60},[28,22525,1558],{"class":38},[28,22527,22528],{"class":30,"line":1941},[28,22529,22530],{"class":87},"    \u002F\u002F继续访问这片空间\n",[28,22532,22533],{"class":30,"line":1955},[28,22534,22535],{"class":87},"    \u002F\u002F200\n",[28,22537,22538,22540,22542,22545,22547],{"class":30,"line":1960},[28,22539,1816],{"class":38},[28,22541,1441],{"class":34},[28,22543,22544],{"class":38},"p2.m_A",[28,22546,1441],{"class":34},[28,22548,1463],{"class":38},[28,22550,22551],{"class":30,"line":1989},[28,22552,1830],{"class":38},[28,22554,22555,22557,22559],{"class":30,"line":1994},[28,22556,416],{"class":34},[28,22558,2235],{"class":2225},[28,22560,2238],{"class":38},[28,22562,22563],{"class":30,"line":2011},[28,22564,1811],{"class":38},[28,22566,22567,22569],{"class":30,"line":2016},[28,22568,5895],{"class":2225},[28,22570,5898],{"class":38},[28,22572,22573],{"class":30,"line":2021},[28,22574,1830],{"class":38},[14,22576,22577],{},[555,22578,22579],{},"静态变量的访问",[18,22581,22583],{"className":401,"code":22582,"language":403,"meta":23,"style":23},"#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",[25,22584,22585,22591,22601,22607,22611,22615,22619,22627,22631,22636,22644,22648,22652,22666,22681,22689,22693,22698,22703,22708,22713,22725,22730,22735,22749,22766,22770,22778,22782,22788],{"__ignoreMap":23},[28,22586,22587,22589],{"class":30,"line":31},[28,22588,2211],{"class":34},[28,22590,2214],{"class":127},[28,22592,22593,22595,22597,22599],{"class":30,"line":48},[28,22594,2219],{"class":34},[28,22596,2222],{"class":34},[28,22598,2226],{"class":2225},[28,22600,1558],{"class":38},[28,22602,22603,22605],{"class":30,"line":84},[28,22604,14956],{"class":34},[28,22606,15433],{"class":2225},[28,22608,22609],{"class":30,"line":91},[28,22610,1811],{"class":38},[28,22612,22613],{"class":30,"line":97},[28,22614,14978],{"class":34},[28,22616,22617],{"class":30,"line":103},[28,22618,22439],{"class":87},[28,22620,22621,22623,22625],{"class":30,"line":109},[28,22622,11282],{"class":34},[28,22624,2644],{"class":34},[28,22626,21654],{"class":38},[28,22628,22629],{"class":30,"line":118},[28,22630,15484],{"class":34},[28,22632,22633],{"class":30,"line":124},[28,22634,22635],{"class":87},"    \u002F\u002F静态成员变量也是有访问权限的\n",[28,22637,22638,22640,22642],{"class":30,"line":131},[28,22639,11282],{"class":34},[28,22641,2644],{"class":34},[28,22643,21661],{"class":38},[28,22645,22646],{"class":30,"line":137},[28,22647,4257],{"class":38},[28,22649,22650],{"class":30,"line":143},[28,22651,22456],{"class":87},[28,22653,22654,22656,22658,22660,22662,22664],{"class":30,"line":149},[28,22655,416],{"class":34},[28,22657,15831],{"class":2225},[28,22659,22465],{"class":38},[28,22661,54],{"class":34},[28,22663,845],{"class":60},[28,22665,1558],{"class":38},[28,22667,22668,22670,22672,22675,22677,22679],{"class":30,"line":1890},[28,22669,416],{"class":34},[28,22671,15831],{"class":2225},[28,22673,22674],{"class":38},"::m_B",[28,22676,54],{"class":34},[28,22678,1098],{"class":60},[28,22680,1558],{"class":38},[28,22682,22683,22685,22687],{"class":30,"line":1904},[28,22684,5626],{"class":34},[28,22686,5919],{"class":2225},[28,22688,2238],{"class":38},[28,22690,22691],{"class":30,"line":1909},[28,22692,1811],{"class":38},[28,22694,22695],{"class":30,"line":1915},[28,22696,22697],{"class":87},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[28,22699,22700],{"class":30,"line":1936},[28,22701,22702],{"class":87},"    \u002F\u002F静态成员变量有两种访问方式：\n",[28,22704,22705],{"class":30,"line":1941},[28,22706,22707],{"class":87},"    \u002F\u002F1.通过对象进行访问\n",[28,22709,22710],{"class":30,"line":1955},[28,22711,22712],{"class":38},"    Person p;  \n",[28,22714,22715,22717,22719,22721,22723],{"class":30,"line":1960},[28,22716,1816],{"class":38},[28,22718,1441],{"class":34},[28,22720,22363],{"class":38},[28,22722,1441],{"class":34},[28,22724,1463],{"class":38},[28,22726,22727],{"class":30,"line":1989},[28,22728,22729],{"class":87},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[28,22731,22732],{"class":30,"line":1994},[28,22733,22734],{"class":87},"    \u002F\u002F2.通过类名进行访问\n",[28,22736,22737,22739,22741,22743,22745,22747],{"class":30,"line":2011},[28,22738,1816],{"class":38},[28,22740,1441],{"class":34},[28,22742,19308],{"class":2225},[28,22744,22465],{"class":38},[28,22746,1441],{"class":34},[28,22748,1463],{"class":38},[28,22750,22751,22753,22755,22757,22759,22761,22763],{"class":30,"line":2016},[28,22752,1816],{"class":38},[28,22754,1441],{"class":34},[28,22756,19308],{"class":2225},[28,22758,22674],{"class":38},[28,22760,1441],{"class":34},[28,22762,1506],{"class":38},[28,22764,22765],{"class":87}," \u002F\u002F没有访问权限，报错\n",[28,22767,22768],{"class":30,"line":2021},[28,22769,1830],{"class":38},[28,22771,22772,22774,22776],{"class":30,"line":2026},[28,22773,416],{"class":34},[28,22775,2235],{"class":2225},[28,22777,2238],{"class":38},[28,22779,22780],{"class":30,"line":2040},[28,22781,1811],{"class":38},[28,22783,22784,22786],{"class":30,"line":2045},[28,22785,5964],{"class":2225},[28,22787,5898],{"class":38},[28,22789,22790],{"class":30,"line":2839},[28,22791,1830],{"class":38},[22260,22793,22795],{"id":22794},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22797,22798],{},"1.静态成员函数定义与访问",[18,22800,22802],{"className":401,"code":22801,"language":403,"meta":23,"style":23},"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",[25,22803,22804,22810,22814,22818,22823,22834,22838,22852,22856,22860,22868,22872,22877,22882,22886,22894,22899,22909],{"__ignoreMap":23},[28,22805,22806,22808],{"class":30,"line":31},[28,22807,14956],{"class":34},[28,22809,15433],{"class":2225},[28,22811,22812],{"class":30,"line":48},[28,22813,1811],{"class":38},[28,22815,22816],{"class":30,"line":84},[28,22817,14978],{"class":34},[28,22819,22820],{"class":30,"line":91},[28,22821,22822],{"class":87},"    \u002F\u002F在公共权限下定义静态成员函数\n",[28,22824,22825,22827,22830,22832],{"class":30,"line":97},[28,22826,11282],{"class":34},[28,22828,22829],{"class":34}," void",[28,22831,11647],{"class":2225},[28,22833,2238],{"class":38},[28,22835,22836],{"class":30,"line":103},[28,22837,2292],{"class":38},[28,22839,22840,22843,22845,22848,22850],{"class":30,"line":109},[28,22841,22842],{"class":38},"        coout",[28,22844,1441],{"class":34},[28,22846,22847],{"class":127},"\"静态成员函数的调用\"",[28,22849,1441],{"class":34},[28,22851,1463],{"class":38},[28,22853,22854],{"class":30,"line":118},[28,22855,2449],{"class":38},[28,22857,22858],{"class":30,"line":124},[28,22859,4257],{"class":38},[28,22861,22862,22864,22866],{"class":30,"line":131},[28,22863,5626],{"class":34},[28,22865,5850],{"class":2225},[28,22867,2238],{"class":38},[28,22869,22870],{"class":30,"line":137},[28,22871,1811],{"class":38},[28,22873,22874],{"class":30,"line":143},[28,22875,22876],{"class":87},"    \u002F\u002F静态成员函数的调用方式:\n",[28,22878,22879],{"class":30,"line":149},[28,22880,22881],{"class":87},"    \u002F\u002F1.通过对象访问\n",[28,22883,22884],{"class":30,"line":1890},[28,22885,15575],{"class":38},[28,22887,22888,22890,22892],{"class":30,"line":1904},[28,22889,16128],{"class":38},[28,22891,11813],{"class":2225},[28,22893,5898],{"class":38},[28,22895,22896],{"class":30,"line":1909},[28,22897,22898],{"class":87},"    \u002F\u002F2.通过类名访问\n",[28,22900,22901,22903,22905,22907],{"class":30,"line":1915},[28,22902,18781],{"class":2225},[28,22904,17994],{"class":38},[28,22906,11813],{"class":2225},[28,22908,5898],{"class":38},[28,22910,22911],{"class":30,"line":1936},[28,22912,1830],{"class":38},[363,22914,22915],{"start":48},[366,22916,22917],{},"静态成员函数只能访问静态成员变量",[18,22919,22921],{"className":401,"code":22920,"language":403,"meta":23,"style":23},"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",[25,22922,22923,22929,22933,22937,22941,22951,22955,22969,22974,22986,22990,23001,23011,23015,23019,23023,23033,23037,23050,23054,23058,23062,23066,23080,23088,23092,23096,23100,23104,23112,23116,23126,23131,23135,23143,23147,23153],{"__ignoreMap":23},[28,22924,22925,22927],{"class":30,"line":31},[28,22926,14956],{"class":34},[28,22928,15433],{"class":2225},[28,22930,22931],{"class":30,"line":48},[28,22932,1811],{"class":38},[28,22934,22935],{"class":30,"line":84},[28,22936,14978],{"class":34},[28,22938,22939],{"class":30,"line":91},[28,22940,22822],{"class":87},[28,22942,22943,22945,22947,22949],{"class":30,"line":97},[28,22944,11282],{"class":34},[28,22946,22829],{"class":34},[28,22948,11647],{"class":2225},[28,22950,2238],{"class":38},[28,22952,22953],{"class":30,"line":103},[28,22954,2292],{"class":38},[28,22956,22957,22960,22962,22964,22966],{"class":30,"line":109},[28,22958,22959],{"class":38},"        m_A",[28,22961,54],{"class":34},[28,22963,713],{"class":60},[28,22965,465],{"class":38},[28,22967,22968],{"class":87}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[28,22970,22971],{"class":30,"line":118},[28,22972,22973],{"class":87},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[28,22975,22976,22978,22980,22982,22984],{"class":30,"line":124},[28,22977,22842],{"class":38},[28,22979,1441],{"class":34},[28,22981,22847],{"class":127},[28,22983,1441],{"class":34},[28,22985,1463],{"class":38},[28,22987,22988],{"class":30,"line":131},[28,22989,2449],{"class":38},[28,22991,22992,22994,22996,22998],{"class":30,"line":137},[28,22993,11282],{"class":34},[28,22995,2644],{"class":34},[28,22997,15710],{"class":38},[28,22999,23000],{"class":87}," \u002F\u002F静态成员变量\n",[28,23002,23003,23005,23008],{"class":30,"line":143},[28,23004,2247],{"class":34},[28,23006,23007],{"class":38}," m_B;",[28,23009,23010],{"class":87}," \u002F\u002F非静态成员变量\n",[28,23012,23013],{"class":30,"line":149},[28,23014,2662],{"emptyLinePlaceholder":336},[28,23016,23017],{"class":30,"line":1890},[28,23018,15484],{"class":34},[28,23020,23021],{"class":30,"line":1904},[28,23022,22635],{"class":87},[28,23024,23025,23027,23029,23031],{"class":30,"line":1909},[28,23026,11282],{"class":34},[28,23028,22829],{"class":34},[28,23030,13880],{"class":2225},[28,23032,2238],{"class":38},[28,23034,23035],{"class":30,"line":1915},[28,23036,2292],{"class":38},[28,23038,23039,23041,23043,23046,23048],{"class":30,"line":1936},[28,23040,3713],{"class":38},[28,23042,1441],{"class":34},[28,23044,23045],{"class":127},"\"这是私有权限下的静态函数调用\"",[28,23047,1441],{"class":34},[28,23049,1463],{"class":38},[28,23051,23052],{"class":30,"line":1941},[28,23053,2449],{"class":38},[28,23055,23056],{"class":30,"line":1955},[28,23057,2662],{"emptyLinePlaceholder":336},[28,23059,23060],{"class":30,"line":1960},[28,23061,2662],{"emptyLinePlaceholder":336},[28,23063,23064],{"class":30,"line":1989},[28,23065,4257],{"class":38},[28,23067,23068,23070,23072,23074,23076,23078],{"class":30,"line":1994},[28,23069,416],{"class":34},[28,23071,15831],{"class":2225},[28,23073,22465],{"class":38},[28,23075,54],{"class":34},[28,23077,244],{"class":60},[28,23079,1558],{"class":38},[28,23081,23082,23084,23086],{"class":30,"line":2011},[28,23083,5626],{"class":34},[28,23085,5850],{"class":2225},[28,23087,2238],{"class":38},[28,23089,23090],{"class":30,"line":2016},[28,23091,1811],{"class":38},[28,23093,23094],{"class":30,"line":2021},[28,23095,22876],{"class":87},[28,23097,23098],{"class":30,"line":2026},[28,23099,22881],{"class":87},[28,23101,23102],{"class":30,"line":2040},[28,23103,15575],{"class":38},[28,23105,23106,23108,23110],{"class":30,"line":2045},[28,23107,16128],{"class":38},[28,23109,11813],{"class":2225},[28,23111,5898],{"class":38},[28,23113,23114],{"class":30,"line":2839},[28,23115,22898],{"class":87},[28,23117,23118,23120,23122,23124],{"class":30,"line":2853},[28,23119,18781],{"class":2225},[28,23121,17994],{"class":38},[28,23123,11813],{"class":2225},[28,23125,5898],{"class":38},[28,23127,23128],{"class":30,"line":2861},[28,23129,23130],{"class":87},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[28,23132,23133],{"class":30,"line":2866},[28,23134,1830],{"class":38},[28,23136,23137,23139,23141],{"class":30,"line":2872},[28,23138,416],{"class":34},[28,23140,2235],{"class":2225},[28,23142,2238],{"class":38},[28,23144,23145],{"class":30,"line":2878},[28,23146,1811],{"class":38},[28,23148,23149,23151],{"class":30,"line":2883},[28,23150,5895],{"class":2225},[28,23152,5898],{"class":38},[28,23154,23155],{"class":30,"line":8210},[28,23156,1830],{"class":38},[380,23158,23160],{"id":23159},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22260,23162,23164],{"id":23163},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23166,23167],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23169,23170],{},"只有非静态成员变量才属于类的对象上",[23172,23173,23175],"h5",{"id":23174},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[18,23177,23179],{"className":401,"code":23178,"language":403,"meta":23,"style":23},"#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",[25,23180,23181,23188,23198,23204,23208,23212,23216,23224,23228,23232,23255,23259,23267,23271,23277],{"__ignoreMap":23},[28,23182,23183,23185],{"class":30,"line":31},[28,23184,2211],{"class":34},[28,23186,23187],{"class":127},"\u003Ciostraem>\n",[28,23189,23190,23192,23194,23196],{"class":30,"line":48},[28,23191,2219],{"class":34},[28,23193,2222],{"class":34},[28,23195,2226],{"class":2225},[28,23197,1558],{"class":38},[28,23199,23200,23202],{"class":30,"line":84},[28,23201,14956],{"class":34},[28,23203,15433],{"class":2225},[28,23205,23206],{"class":30,"line":91},[28,23207,1811],{"class":38},[28,23209,23210],{"class":30,"line":97},[28,23211,2662],{"emptyLinePlaceholder":336},[28,23213,23214],{"class":30,"line":103},[28,23215,4257],{"class":38},[28,23217,23218,23220,23222],{"class":30,"line":109},[28,23219,5626],{"class":34},[28,23221,5850],{"class":2225},[28,23223,2238],{"class":38},[28,23225,23226],{"class":30,"line":118},[28,23227,1811],{"class":38},[28,23229,23230],{"class":30,"line":124},[28,23231,15575],{"class":38},[28,23233,23234,23236,23238,23241,23243,23246,23248,23250,23252],{"class":30,"line":131},[28,23235,1816],{"class":38},[28,23237,1441],{"class":34},[28,23239,23240],{"class":127},"\"size of p=\"",[28,23242,1441],{"class":34},[28,23244,23245],{"class":2225},"sizeoif",[28,23247,6801],{"class":38},[28,23249,1441],{"class":34},[28,23251,1506],{"class":38},[28,23253,23254],{"class":87}," \u002F\u002F查看这个空类的占用的内存空间\n",[28,23256,23257],{"class":30,"line":137},[28,23258,1830],{"class":38},[28,23260,23261,23263,23265],{"class":30,"line":143},[28,23262,416],{"class":34},[28,23264,2235],{"class":2225},[28,23266,2238],{"class":38},[28,23268,23269],{"class":30,"line":149},[28,23270,1811],{"class":38},[28,23272,23273,23275],{"class":30,"line":1890},[28,23274,5895],{"class":2225},[28,23276,5898],{"class":38},[28,23278,23279],{"class":30,"line":1904},[28,23280,1830],{"class":38},[14,23282,23283],{},"输出结果为：size of p=1",[14,23285,23286],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23288,23289],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23172,23291,23293],{"id":23292},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[18,23295,23297],{"className":401,"code":23296,"language":403,"meta":23,"style":23},"#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",[25,23298,23299,23305,23315,23323,23327,23336,23340,23348,23352,23356,23375,23379,23383,23391,23395,23401],{"__ignoreMap":23},[28,23300,23301,23303],{"class":30,"line":31},[28,23302,2211],{"class":34},[28,23304,2214],{"class":127},[28,23306,23307,23309,23311,23313],{"class":30,"line":48},[28,23308,2219],{"class":34},[28,23310,2222],{"class":34},[28,23312,2226],{"class":2225},[28,23314,1558],{"class":38},[28,23316,23317,23319,23321],{"class":30,"line":84},[28,23318,14956],{"class":34},[28,23320,15831],{"class":2225},[28,23322,2936],{"class":38},[28,23324,23325],{"class":30,"line":91},[28,23326,1811],{"class":38},[28,23328,23329,23331,23333],{"class":30,"line":97},[28,23330,2247],{"class":34},[28,23332,15710],{"class":38},[28,23334,23335],{"class":87},"\u002F\u002F非静态成员变量\n",[28,23337,23338],{"class":30,"line":103},[28,23339,4257],{"class":38},[28,23341,23342,23344,23346],{"class":30,"line":109},[28,23343,5626],{"class":34},[28,23345,5850],{"class":2225},[28,23347,2238],{"class":38},[28,23349,23350],{"class":30,"line":118},[28,23351,1811],{"class":38},[28,23353,23354],{"class":30,"line":124},[28,23355,15575],{"class":38},[28,23357,23358,23360,23362,23364,23366,23368,23370,23372],{"class":30,"line":131},[28,23359,1816],{"class":38},[28,23361,1441],{"class":34},[28,23363,23240],{"class":127},[28,23365,1637],{"class":34},[28,23367,6801],{"class":38},[28,23369,1441],{"class":34},[28,23371,1506],{"class":38},[28,23373,23374],{"class":87}," \u002F\u002F查看不是空对象时占用多少内存\n",[28,23376,23377],{"class":30,"line":137},[28,23378,2662],{"emptyLinePlaceholder":336},[28,23380,23381],{"class":30,"line":143},[28,23382,1830],{"class":38},[28,23384,23385,23387,23389],{"class":30,"line":149},[28,23386,416],{"class":34},[28,23388,2235],{"class":2225},[28,23390,2238],{"class":38},[28,23392,23393],{"class":30,"line":1890},[28,23394,1811],{"class":38},[28,23396,23397,23399],{"class":30,"line":1904},[28,23398,5895],{"class":2225},[28,23400,5898],{"class":38},[28,23402,23403],{"class":30,"line":1909},[28,23404,1830],{"class":38},[14,23406,23407],{},"输出结果：size of p=4",[14,23409,23410],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[363,23412,23413],{},[366,23414,23415],{},"如果加上非静态成员变量，Person类修改如下",[18,23417,23419],{"className":401,"code":23418,"language":403,"meta":23,"style":23},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[25,23420,23421,23427,23431,23437,23445,23449,23454],{"__ignoreMap":23},[28,23422,23423,23425],{"class":30,"line":31},[28,23424,14956],{"class":34},[28,23426,15433],{"class":2225},[28,23428,23429],{"class":30,"line":48},[28,23430,1811],{"class":38},[28,23432,23433,23435],{"class":30,"line":84},[28,23434,2247],{"class":34},[28,23436,21654],{"class":38},[28,23438,23439,23441,23443],{"class":30,"line":91},[28,23440,11282],{"class":34},[28,23442,2644],{"class":34},[28,23444,21661],{"class":38},[28,23446,23447],{"class":30,"line":97},[28,23448,4257],{"class":38},[28,23450,23451],{"class":30,"line":103},[28,23452,23453],{"class":87},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[28,23455,23456,23458,23460,23462,23464,23466],{"class":30,"line":109},[28,23457,416],{"class":34},[28,23459,15831],{"class":2225},[28,23461,22674],{"class":38},[28,23463,54],{"class":34},[28,23465,244],{"class":60},[28,23467,1558],{"class":38},[14,23469,23470],{},"输出结果：4",[14,23472,23473],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[363,23475,23476],{"start":48},[366,23477,23478],{},"加上非静态成员函数",[18,23480,23482],{"className":401,"code":23481,"language":403,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[25,23483,23484,23491,23495,23501,23509,23513,23517,23521],{"__ignoreMap":23},[28,23485,23486,23488],{"class":30,"line":31},[28,23487,14956],{"class":34},[28,23489,23490],{"class":2225},"  Person\n",[28,23492,23493],{"class":30,"line":48},[28,23494,1811],{"class":38},[28,23496,23497,23499],{"class":30,"line":84},[28,23498,2247],{"class":34},[28,23500,21654],{"class":38},[28,23502,23503,23505,23507],{"class":30,"line":91},[28,23504,15171],{"class":34},[28,23506,11647],{"class":2225},[28,23508,2238],{"class":38},[28,23510,23511],{"class":30,"line":97},[28,23512,2292],{"class":38},[28,23514,23515],{"class":30,"line":103},[28,23516,2662],{"emptyLinePlaceholder":336},[28,23518,23519],{"class":30,"line":109},[28,23520,2449],{"class":38},[28,23522,23523],{"class":30,"line":118},[28,23524,4257],{"class":38},[14,23526,23527],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[363,23529,23530],{"start":84},[366,23531,23532],{},"加上静态成员函数",[18,23534,23536],{"className":401,"code":23535,"language":403,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[25,23537,23538,23544,23548,23554,23562,23566,23570,23574,23585,23589,23593,23597],{"__ignoreMap":23},[28,23539,23540,23542],{"class":30,"line":31},[28,23541,14956],{"class":34},[28,23543,23490],{"class":2225},[28,23545,23546],{"class":30,"line":48},[28,23547,1811],{"class":38},[28,23549,23550,23552],{"class":30,"line":84},[28,23551,2247],{"class":34},[28,23553,21654],{"class":38},[28,23555,23556,23558,23560],{"class":30,"line":91},[28,23557,15171],{"class":34},[28,23559,11647],{"class":2225},[28,23561,2238],{"class":38},[28,23563,23564],{"class":30,"line":97},[28,23565,2292],{"class":38},[28,23567,23568],{"class":30,"line":103},[28,23569,2662],{"emptyLinePlaceholder":336},[28,23571,23572],{"class":30,"line":109},[28,23573,2449],{"class":38},[28,23575,23576,23578,23580,23583],{"class":30,"line":118},[28,23577,11282],{"class":34},[28,23579,22829],{"class":34},[28,23581,23582],{"class":2225}," func1",[28,23584,2238],{"class":38},[28,23586,23587],{"class":30,"line":124},[28,23588,2292],{"class":38},[28,23590,23591],{"class":30,"line":131},[28,23592,2662],{"emptyLinePlaceholder":336},[28,23594,23595],{"class":30,"line":137},[28,23596,2449],{"class":38},[28,23598,23599],{"class":30,"line":143},[28,23600,4257],{"class":38},[14,23602,23470],{},[14,23604,23605],{},"解释：静态成员函数也不属于类上",[328,23607,7936],{},{"title":23,"searchDepth":48,"depth":48,"links":23609},[23610,23616],{"id":14907,"depth":48,"text":14908,"children":23611},[23612,23613,23614,23615],{"id":14911,"depth":84,"text":14912},{"id":15636,"depth":84,"text":15637},{"id":15808,"depth":84,"text":15809},{"id":16267,"depth":84,"text":16268},{"id":18639,"depth":48,"text":18640,"children":23617},[23618,23619,23620,23621,23622,23623,23624,23625,23626],{"id":18651,"depth":84,"text":18652},{"id":18944,"depth":84,"text":18945},{"id":19435,"depth":84,"text":19436},{"id":20532,"depth":84,"text":20533},{"id":20955,"depth":84,"text":20956},{"id":21434,"depth":84,"text":21435},{"id":21809,"depth":84,"text":21810},{"id":22222,"depth":84,"text":22223},{"id":23159,"depth":84,"text":23160},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14872,"description":23627},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23634,"title":403,"body":23635,"description":333,"extension":334,"meta":23639,"navigation":336,"path":23641,"seo":23642,"stem":23643,"__hash__":23644},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23636,"toc":23637},[],{"title":23,"searchDepth":48,"depth":48,"links":23638},[],{"category":23640},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":403,"description":333},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23646,"title":23647,"body":23648,"description":23,"extension":334,"meta":24239,"navigation":336,"path":24240,"seo":24241,"stem":24242,"__hash__":24243},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23649,"toc":24221},[23650,23653,23657,23660,23663,23666,23684,23689,23692,23695,23698,23701,23706,23709,23714,23717,23720,23724,23727,23730,23736,23739,23757,23761,23765,23768,23773,23776,23780,23783,23796,23799,23803,23806,23809,23812,23837,23840,23849,23860,23875,23907,23911,23918,23926,23930,23933,23936,23941,23945,23948,23951,23956,23959,23963,23966,23969,23974,23977,23981,23986,23990,24057,24061,24064,24067,24070,24073,24076,24082,24103,24106,24120,24129,24133,24136,24139,24144,24147,24152,24157,24160,24163,24168,24173,24176,24181,24186,24189,24194,24199,24202,24205,24210,24213,24218],[10,23651,23647],{"id":23652},"_1强化学习基本认识",[351,23654,23656],{"id":23655},"_11什么是强化学习","1.1.什么是强化学习",[14,23658,23659],{},"强化学习有两部分组成：智能体和环境；",[14,23661,23662],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23664,23665],{},"强化学习与监督学习的区别:",[363,23667,23668,23671,23674,23677],{},[366,23669,23670],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[366,23672,23673],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[366,23675,23676],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[366,23678,23679,23680,23683],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[555,23681,23682],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23685,23686],{},[1727,23687],{"alt":23,"src":23688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23690,23691],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23693,23694],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23696,23697],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23699,23700],{},"获取奖励",[14,23702,23703],{},[1727,23704],{"alt":23,"src":23705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23707,23708],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23710,23711],{},[1727,23712],{"alt":23,"src":23713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23715,23716],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23718,23719],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[351,23721,23723],{"id":23722},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23725,23726],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23728,23729],{},"具身智能中的应用",[14,23731,23732,23735],{},[555,23733,23734],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23737,23738],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23740,23741,23742,23745,23746,23749,23750,23753,23754],{},"机器人是",[555,23743,23744],{},"躯体","，深度学习是",[555,23747,23748],{},"神经元****网络","，VLA是",[555,23751,23752],{},"通用的行为逻辑","，而强化学习是",[555,23755,23756],{},"教练",[351,23758,23760],{"id":23759},"_13序列决策","1.3.序列决策",[380,23762,23764],{"id":23763},"_131智能体与环境","1.3.1.智能体与环境",[14,23766,23767],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23769,23770],{},[1727,23771],{"alt":23,"src":23772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23774,23775],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[380,23777,23779],{"id":23778},"_132奖励","1.3.2.奖励",[14,23781,23782],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23784,23785,23786,23795],{},"取某个策略的表现如何。强化学习的目的就是",[555,23787,23788,23789,23794],{},"最大化",[555,23790,23791],{},[555,23792,23793],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23797,23798],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[380,23800,23802],{"id":23801},"_133序列决策","1.3.3.序列决策",[14,23804,23805],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23807,23808],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23810,23811],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23813,23814,23818,23819,23821,23822,23824,23825,23827,23828,14057,23831,14057,23834],{},[23815,23816,23817],"em",{},"Ht"," = ",[23815,23820,994],{},"1*, a",[23815,23823,61],{},", r",[23815,23826,61],{},", . . . ,* ",[23815,23829,23830],{},"ot",[23815,23832,23833],{},", at ,",[23815,23835,23836],{},"rt",[14,23838,23839],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23841,23842,23818,23845,1920,23847,828],{},[23815,23843,23844],{},"st",[23815,23846,462],{},[23815,23848,23817],{},[14,23850,23851,23852,23855,23856,23859],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[555,23853,23854],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[555,23857,23858],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23861,23862,23863,23866,23867,23870,23871,23874],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[555,23864,23865],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[555,23868,23869],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23815,23872,23873],{},"S, A, T, R, Ω, O, γ",")。",[14,23876,23877,23878,23880,23881,23883,23884,413,23886,23889,23890,23892,23893,413,23896,23899,23900,23902,23903,23906],{},"其中 ",[23815,23879,1087],{}," 表示状态空间，为隐变量，",[23815,23882,636],{}," 为动作空间，",[23815,23885,1112],{},[23815,23887,23888],{},"s ′ |s, a",") 为状态转移概率，",[23815,23891,1062],{}," 为奖励函数，",[23815,23894,23895],{},"Ω",[23815,23897,23898],{},"o|s, a",") 为观测概率，",[23815,23901,988],{}," 为观测空间，",[23815,23904,23905],{},"γ"," 为折扣因子。",[351,23908,23910],{"id":23909},"_14动作空间","1.4.动作空间",[14,23912,23913,23914,23917],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[555,23915,23916],{},"动作空间"," ，动作空间分为:",[363,23919,23920,23923],{},[366,23921,23922],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[366,23924,23925],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[351,23927,23929],{"id":23928},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23931,23932],{},"由策略、价值函数、模型三部分组成",[14,23934,23935],{},"这三者组成马尔可夫决策过程",[14,23937,23938],{},[1727,23939],{"alt":23,"src":23940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[380,23942,23944],{"id":23943},"_151策略","1.5.1.策略",[14,23946,23947],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23949,23950],{},"策略可分为两种：",[14,23952,23953],{},[1727,23954],{"alt":23,"src":23955},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23957,23958],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[380,23960,23962],{"id":23961},"_152价值函数","1.5.2.价值函数",[14,23964,23965],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23967,23968],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23970,23971],{},[1727,23972],{"alt":23,"src":23973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23975,23976],{},"进入某个状态采取的最优动作可以通过Q函数得到",[380,23978,23980],{"id":23979},"_153模型","1.5.3.模型",[14,23982,23983],{},[1727,23984],{"alt":23,"src":23985},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[351,23987,23989],{"id":23988},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[543,23991,23992,24003],{},[546,23993,23994],{},[549,23995,23996,24000],{},[552,23997,23999],{"align":23998},"left","类型",[552,24001,24002],{"align":23998},"特点",[590,24004,24005,24015,24025,24035,24047],{},[549,24006,24007,24012],{},[595,24008,24009],{"align":23998},[555,24010,24011],{},"基于价值的智能体",[595,24013,24014],{"align":23998},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[549,24016,24017,24022],{},[595,24018,24019],{"align":23998},[555,24020,24021],{},"基于策略的智能体",[595,24023,24024],{"align":23998},"直接学习策略，没有学习价值函数",[549,24026,24027,24032],{},[595,24028,24029],{"align":23998},[555,24030,24031],{},"演员-评论员智能体",[595,24033,24034],{"align":23998},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[549,24036,24037,24042],{},[595,24038,24039],{"align":23998},[555,24040,24041],{},"有模型强化学习智能体",[595,24043,24044],{"align":23998},[1727,24045],{"alt":23,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[549,24048,24049,24054],{},[595,24050,24051],{"align":23998},[555,24052,24053],{},"免模型强化学习智能体",[595,24055,24056],{"align":23998},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[351,24058,24060],{"id":24059},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24062,24063],{},"学习和规划是序列决策的两个基本问题",[14,24065,24066],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24068,24069],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24071,24072],{},"强化学习用到的库：Gym",[14,24074,24075],{},"Gym可以检验强化学习算法的优劣",[14,24077,24078,24081],{},[555,24079,24080],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[18,24083,24087],{"className":24084,"code":24085,"language":24086,"meta":23,"style":23},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[25,24088,24089],{"__ignoreMap":23},[28,24090,24091,24094,24097,24100],{"class":30,"line":31},[28,24092,24093],{"class":2225},"pip",[28,24095,24096],{"class":127}," install",[28,24098,24099],{"class":127}," gym==",[28,24101,24102],{"class":60},"0.25.2\n",[14,24104,24105],{},"显示图形界面需要",[18,24107,24109],{"className":24084,"code":24108,"language":24086,"meta":23,"style":23},"pip install pygame\n",[25,24110,24111],{"__ignoreMap":23},[28,24112,24113,24115,24117],{"class":30,"line":31},[28,24114,24093],{"class":2225},[28,24116,24096],{"class":127},[28,24118,24119],{"class":127}," pygame\n",[14,24121,24122,24123],{},"有关Gym库的相关文档介绍：",[51,24124,24128],{"href":24125,"rel":24126},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24127],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[351,24130,24132],{"id":24131},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24134,24135],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24137,24138],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24140,24141],{},[1727,24142],{"alt":23,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24145,24146],{},"折扣率需要自己来设定",[14,24148,24149],{},[1727,24150],{"alt":23,"src":24151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[363,24153,24154],{},[366,24155,24156],{},"状态转移函数：",[14,24158,24159],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24161,24162],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24164,24165],{},[1727,24166],{"alt":23,"src":24167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[363,24169,24170],{"start":48},[366,24171,24172],{},"动作价值函数：",[14,24174,24175],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24177,24178],{},[1727,24179],{"alt":23,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[363,24182,24183],{"start":84},[366,24184,24185],{},"最优动作价值函数：",[14,24187,24188],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24190,24191],{},[1727,24192],{"alt":23,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[363,24195,24196],{"start":91},[366,24197,24198],{},"状态价值函数:",[14,24200,24201],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24203,24204],{},"它衡量的是“一个具体动作”的长期价值",[14,24206,24207],{},[1727,24208],{"alt":23,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24211,24212],{},"几个价值函数之间的比较：",[14,24214,24215],{},[1727,24216],{"alt":23,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[328,24219,24220],{},"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":23,"searchDepth":48,"depth":48,"links":24222},[24223,24224,24225,24230,24231,24236,24237,24238],{"id":23655,"depth":48,"text":23656},{"id":23722,"depth":48,"text":23723},{"id":23759,"depth":48,"text":23760,"children":24226},[24227,24228,24229],{"id":23763,"depth":84,"text":23764},{"id":23778,"depth":84,"text":23779},{"id":23801,"depth":84,"text":23802},{"id":23909,"depth":48,"text":23910},{"id":23928,"depth":48,"text":23929,"children":24232},[24233,24234,24235],{"id":23943,"depth":84,"text":23944},{"id":23961,"depth":84,"text":23962},{"id":23979,"depth":84,"text":23980},{"id":23988,"depth":48,"text":23989},{"id":24059,"depth":48,"text":24060},{"id":24131,"depth":48,"text":24132},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23647,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24245,"title":24246,"body":24247,"description":24254,"extension":334,"meta":24265,"navigation":336,"path":24266,"seo":24267,"stem":24268,"__hash__":24269},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24248,"toc":24263},[24249,24252,24255,24260],[10,24250,24246],{"id":24251},"_2马尔可夫决策过程",[14,24253,24254],{},"这是强化学习的基本框架",[14,24256,24257],{},[1727,24258],{"alt":23,"src":24259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24261,24262],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":23,"searchDepth":48,"depth":48,"links":24264},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24246,"description":24254},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24271,"title":24272,"body":24273,"description":23,"extension":334,"meta":24389,"navigation":336,"path":24390,"seo":24391,"stem":24392,"__hash__":24393},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24274,"toc":24384},[24275,24278,24282,24285,24290,24295,24298,24303,24306,24311,24314,24318,24323,24326,24331,24336,24341,24344,24348,24353,24356,24361,24366,24371,24376,24379],[10,24276,24272],{"id":24277},"_3动作价值函数",[351,24279,24281],{"id":24280},"_31dqn","3.1.DQN",[14,24283,24284],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24286,24287],{},[1727,24288],{"alt":23,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24291,24292],{},[1727,24293],{"alt":23,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24296,24297],{},"DQN算法的描述：",[14,24299,24300],{},[1727,24301],{"alt":23,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24304,24305],{},"这里的Dense指的是全连接层",[14,24307,24308],{},[1727,24309],{"alt":23,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24312,24313],{},"当前观测的状态为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算法",[351,24315,24317],{"id":24316},"_32dqn的举例","3.2.DQN的举例",[14,24319,24320],{},[1727,24321],{"alt":23,"src":24322},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24324,24325],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24327,24328],{},[1727,24329],{"alt":23,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24332,24333],{},[1727,24334],{"alt":23,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24337,24338],{},[1727,24339],{"alt":23,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24342,24343],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[351,24345,24347],{"id":24346},"_33td算法","3.3.TD算法",[14,24349,24350],{},[1727,24351],{"alt":23,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24354,24355],{},"强化学习TD算法公式的粗略解释：",[14,24357,24358],{},[1727,24359],{"alt":23,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24362,24363],{},[1727,24364],{"alt":23,"src":24365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24367,24368],{},[1727,24369],{"alt":23,"src":24370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24372,24373],{},[1727,24374],{"alt":23,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24377,24378],{},"TD算法总结：",[14,24380,24381],{},[1727,24382],{"alt":23,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":23,"searchDepth":48,"depth":48,"links":24385},[24386,24387,24388],{"id":24280,"depth":48,"text":24281},{"id":24316,"depth":48,"text":24317},{"id":24346,"depth":48,"text":24347},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24272,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24395,"title":24396,"body":24397,"description":23,"extension":334,"meta":24630,"navigation":336,"path":24631,"seo":24632,"stem":24633,"__hash__":24634},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24398,"toc":24626},[24399,24402,24406,24409,24412,24417,24422,24425,24430,24435,24438,24443,24446,24451,24454,24459,24462,24467,24470,24475,24480,24483,24488,24491,24494,24499,24502,24507,24512,24516,24519,24522,24527,24532,24535,24540,24545,24548,24553,24556,24559,24564,24567,24572,24575,24580,24585,24588,24593,24598,24601,24606,24609,24614,24617],[10,24400,24396],{"id":24401},"_4策略学习",[351,24403,24405],{"id":24404},"_41概念描述","4.1.概念描述",[14,24407,24408],{},"用神经网络（策略网络）近似策略函数",[14,24410,24411],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24413,24414],{},[1727,24415],{"alt":23,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24418,24419],{},[1727,24420],{"alt":23,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24423,24424],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24426,24427],{},[1727,24428],{"alt":23,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24431,24432],{},[1727,24433],{"alt":23,"src":24434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24436,24437],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24439,24440],{},[1727,24441],{"alt":23,"src":24442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24444,24445],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24447,24448],{},[1727,24449],{"alt":23,"src":24450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24452,24453],{},"改进theta要用到策略梯度算法",[14,24455,24456],{},[1727,24457],{"alt":23,"src":24458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24460,24461],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24463,24464],{},[1727,24465],{"alt":23,"src":24466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24468,24469],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24471,24472],{},[1727,24473],{"alt":23,"src":24474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24476,24477],{},[1727,24478],{"alt":23,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24481,24482],{},"梯度公式总结：",[14,24484,24485],{},[1727,24486],{"alt":23,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24489,24490],{},"两个公式的分别应用场景：",[14,24492,24493],{},"对于离散的动作：",[14,24495,24496],{},[1727,24497],{"alt":23,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24500,24501],{},"对于连续的动作：",[14,24503,24504],{},[1727,24505],{"alt":23,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24508,24509],{},[1727,24510],{"alt":23,"src":24511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[351,24513,24515],{"id":24514},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24517,24518],{},"使用蒙特卡洛来近似计算策略梯度",[14,24520,24521],{},"蒙特卡洛法的解释如下：",[14,24523,24524],{},[1727,24525],{"alt":23,"src":24526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24528,24529],{},[1727,24530],{"alt":23,"src":24531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24533,24534],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[363,24536,24537],{},[366,24538,24539],{},"方法一：reinforce算法",[14,24541,24542],{},[1727,24543],{"alt":23,"src":24544},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24546,24547],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[363,24549,24550],{"start":48},[366,24551,24552],{},"方法二：actor-critic算法",[14,24554,24555],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24557,24558],{},"两个网络的构建：",[14,24560,24561],{},[1727,24562],{"alt":23,"src":24563},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24565,24566],{},"actor网路：",[14,24568,24569],{},[1727,24570],{"alt":23,"src":24571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24573,24574],{},"critic网络",[14,24576,24577],{},[1727,24578],{"alt":23,"src":24579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[363,24581,24582],{"start":84},[366,24583,24584],{},"网络的训练",[14,24586,24587],{},"网络描述",[14,24589,24590],{},[1727,24591],{"alt":23,"src":24592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24594,24595],{},[1727,24596],{"alt":23,"src":24597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24599,24600],{},"TD算法更新梯度：",[14,24602,24603],{},[1727,24604],{"alt":23,"src":24605},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24607,24608],{},"策略网络更新梯度：",[14,24610,24611],{},[1727,24612],{"alt":23,"src":24613},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24615,24616],{},"训练整个流程的具体描述：",[14,24618,24619,24622,24623],{},[1727,24620],{"alt":23,"src":24621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1727,24624],{"alt":23,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":23,"searchDepth":48,"depth":48,"links":24627},[24628,24629],{"id":24404,"depth":48,"text":24405},{"id":24514,"depth":48,"text":24515},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24396,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24636,"title":24637,"body":24638,"description":24645,"extension":334,"meta":24695,"navigation":336,"path":24696,"seo":24697,"stem":24698,"__hash__":24699},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24639,"toc":24691},[24640,24643,24646,24650,24653,24658,24662,24665,24670,24673,24678,24683,24686],[10,24641,24637],{"id":24642},"_5alphago算法",[14,24644,24645],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[351,24647,24649],{"id":24648},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24651,24652],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24654,24655],{},[1727,24656],{"alt":23,"src":24657},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[351,24659,24661],{"id":24660},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24663,24664],{},"采用强化学习的方式训练策略网络",[14,24666,24667],{},[1727,24668],{"alt":23,"src":24669},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24671,24672],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24674,24675],{},[1727,24676],{"alt":23,"src":24677},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24679,24680],{},[1727,24681],{"alt":23,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24684,24685],{},"强化学习训练策略网络的总结：",[14,24687,24688],{},[1727,24689],{"alt":23,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":23,"searchDepth":48,"depth":48,"links":24692},[24693,24694],{"id":24648,"depth":48,"text":24649},{"id":24660,"depth":48,"text":24661},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24637,"description":24645},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24701,"title":24702,"body":24703,"description":24710,"extension":334,"meta":24713,"navigation":336,"path":24714,"seo":24715,"stem":24716,"__hash__":24717},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24704,"toc":24711},[24705,24708],[10,24706,24702],{"id":24707},"_6价值网络",[14,24709,24710],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":23,"searchDepth":48,"depth":48,"links":24712},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24702,"description":24710},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24719,"title":24720,"body":24721,"description":24725,"extension":334,"meta":24726,"navigation":336,"path":24727,"seo":24728,"stem":24729,"__hash__":24730},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24722,"toc":24723},[],{"title":23,"searchDepth":48,"depth":48,"links":24724},[],"记录自己的强化学习笔记。",{"category":23640},"\u002Fwiki\u002F2025-12-04",{"title":24720,"description":24725},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24732,"title":24733,"body":24734,"description":333,"extension":334,"meta":24773,"navigation":336,"path":24774,"seo":24775,"stem":24776,"__hash__":24777},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24735,"toc":24771},[24736,24739,24742,24748,24751,24757,24760,24765,24768],[10,24737,24733],{"id":24738},"_1-项目概览与官方资源",[14,24740,24741],{},"官方文档：",[14,24743,24744],{},[51,24745,24746],{"href":24746,"rel":24747},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24127],[14,24749,24750],{},"官方代码仓库：",[14,24752,24753],{},[51,24754,24755],{"href":24755,"rel":24756},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24127],[14,24758,24759],{},"复现大体流程：",[14,24761,24762],{},[1727,24763],{"alt":23,"src":24764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24766,24767],{},"本教程的目标是打通这条链路：",[14,24769,24770],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":23,"searchDepth":48,"depth":48,"links":24772},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24733,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24779,"title":24780,"body":24781,"description":333,"extension":334,"meta":24897,"navigation":336,"path":24898,"seo":24899,"stem":24900,"__hash__":24901},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24782,"toc":24892},[24783,24786,24790,24793,24800,24804,24807,24816,24826,24830,24860,24863,24889],[10,24784,24780],{"id":24785},"_2-环境准备与设备连接",[351,24787,24789],{"id":24788},"_21-系统与环境","2.1 系统与环境",[14,24791,24792],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24794,24795,24796,24799],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[25,24797,24798],{},"lerobot"," 依赖。",[351,24801,24803],{"id":24802},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24805,24806],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[18,24808,24810],{"className":24084,"code":24809,"language":24086,"meta":23,"style":23},"lerobot-find-out\n",[25,24811,24812],{"__ignoreMap":23},[28,24813,24814],{"class":30,"line":31},[28,24815,24809],{"class":2225},[14,24817,24818,24819,617,24822,24825],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[25,24820,24821],{},"\u002Fdev\u002FttyACM0",[25,24823,24824],{},"\u002Fdev\u002FttyACM1","）。",[351,24827,24829],{"id":24828},"_23-串口授权","2.3 串口授权",[18,24831,24833],{"className":24084,"code":24832,"language":24086,"meta":23,"style":23},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[25,24834,24835,24849],{"__ignoreMap":23},[28,24836,24837,24840,24843,24846],{"class":30,"line":31},[28,24838,24839],{"class":2225},"sudo",[28,24841,24842],{"class":127}," chmod",[28,24844,24845],{"class":60}," 666",[28,24847,24848],{"class":127}," \u002Fdev\u002FttyACM0\n",[28,24850,24851,24853,24855,24857],{"class":30,"line":48},[28,24852,24839],{"class":2225},[28,24854,24842],{"class":127},[28,24856,24845],{"class":60},[28,24858,24859],{"class":127}," \u002Fdev\u002FttyACM1\n",[14,24861,24862],{},"说明：",[1404,24864,24865,24870,24876,24886],{},[366,24866,24867,24869],{},[25,24868,24839],{},"：以 root 权限执行命令。",[366,24871,24872,24875],{},[25,24873,24874],{},"chmod","：修改设备节点权限。",[366,24877,24878,24881,24882,24885],{},[25,24879,24880],{},"666","：",[25,24883,24884],{},"rw-rw-rw-","，所有用户可读写。",[366,24887,24888],{},"串口号必须替换为你机器上的真实端口。",[328,24890,24891],{},"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":23,"searchDepth":48,"depth":48,"links":24893},[24894,24895,24896],{"id":24788,"depth":48,"text":24789},{"id":24802,"depth":48,"text":24803},{"id":24828,"depth":48,"text":24829},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24780,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24903,"title":24904,"body":24905,"description":333,"extension":334,"meta":25066,"navigation":336,"path":25067,"seo":25068,"stem":25069,"__hash__":25070},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24906,"toc":25062},[24907,24911,24915,24921,24924,24981,24984,24988,24991,25059],[10,24908,24910],{"id":24909},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[351,24912,24914],{"id":24913},"_31-配置电机-id","3.1 配置电机 ID",[14,24916,24917,24918,24920],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[25,24919,61],{},"，需要改成机械臂链路里不冲突的编号。",[14,24922,24923],{},"方式一：用 LeRobot 命令逐步写入。",[18,24925,24927],{"className":24084,"code":24926,"language":24086,"meta":23,"style":23},"# 主臂舵机配置 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",[25,24928,24929,24934,24942,24949,24954,24958,24963,24969,24976],{"__ignoreMap":23},[28,24930,24931],{"class":30,"line":31},[28,24932,24933],{"class":87},"# 主臂舵机配置 ID\n",[28,24935,24936,24939],{"class":30,"line":48},[28,24937,24938],{"class":2225},"lerobot-setup-motors",[28,24940,24941],{"class":60}," \\\n",[28,24943,24944,24947],{"class":30,"line":84},[28,24945,24946],{"class":60},"  --teleop.type=so101_leader",[28,24948,24941],{"class":60},[28,24950,24951],{"class":30,"line":91},[28,24952,24953],{"class":60},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[28,24955,24956],{"class":30,"line":97},[28,24957,2662],{"emptyLinePlaceholder":336},[28,24959,24960],{"class":30,"line":103},[28,24961,24962],{"class":87},"# 从臂舵机配置 ID\n",[28,24964,24965,24967],{"class":30,"line":109},[28,24966,24938],{"class":2225},[28,24968,24941],{"class":60},[28,24970,24971,24974],{"class":30,"line":118},[28,24972,24973],{"class":60},"  --robot.type=so101_follower",[28,24975,24941],{"class":60},[28,24977,24978],{"class":30,"line":124},[28,24979,24980],{"class":60},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24982,24983],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[351,24985,24987],{"id":24986},"_32-机械臂校准","3.2 机械臂校准",[14,24989,24990],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[18,24992,24994],{"className":24084,"code":24993,"language":24086,"meta":23,"style":23},"# 主臂校准\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",[25,24995,24996,25001,25008,25014,25021,25026,25030,25035,25041,25047,25054],{"__ignoreMap":23},[28,24997,24998],{"class":30,"line":31},[28,24999,25000],{"class":87},"# 主臂校准\n",[28,25002,25003,25006],{"class":30,"line":48},[28,25004,25005],{"class":2225},"lerobot-calibrate",[28,25007,24941],{"class":60},[28,25009,25010,25012],{"class":30,"line":84},[28,25011,24946],{"class":60},[28,25013,24941],{"class":60},[28,25015,25016,25019],{"class":30,"line":91},[28,25017,25018],{"class":60},"  --teleop.port=\u002Fdev\u002FttyACM0",[28,25020,24941],{"class":60},[28,25022,25023],{"class":30,"line":97},[28,25024,25025],{"class":60},"  --teleop.id=my_awesome_leader_arm\n",[28,25027,25028],{"class":30,"line":103},[28,25029,2662],{"emptyLinePlaceholder":336},[28,25031,25032],{"class":30,"line":109},[28,25033,25034],{"class":87},"# 从臂校准\n",[28,25036,25037,25039],{"class":30,"line":118},[28,25038,25005],{"class":2225},[28,25040,24941],{"class":60},[28,25042,25043,25045],{"class":30,"line":124},[28,25044,24973],{"class":60},[28,25046,24941],{"class":60},[28,25048,25049,25052],{"class":30,"line":131},[28,25050,25051],{"class":60},"  --robot.port=\u002Fdev\u002FttyACM1",[28,25053,24941],{"class":60},[28,25055,25056],{"class":30,"line":137},[28,25057,25058],{"class":60},"  --robot.id=my_awesome_follower_arm\n",[328,25060,25061],{},"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":23,"searchDepth":48,"depth":48,"links":25063},[25064,25065],{"id":24913,"depth":48,"text":24914},{"id":24986,"depth":48,"text":24987},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24904,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25072,"title":25073,"body":25074,"description":333,"extension":334,"meta":25265,"navigation":336,"path":25266,"seo":25267,"stem":25268,"__hash__":25269},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25075,"toc":25261},[25076,25079,25083,25130,25134,25147,25210,25213,25258],[10,25077,25073],{"id":25078},"_4-遥操与相机接入",[351,25080,25082],{"id":25081},"_41-不带相机遥操","4.1 不带相机遥操",[18,25084,25086],{"className":24084,"code":25085,"language":24086,"meta":23,"style":23},"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",[25,25087,25088,25095,25101,25107,25114,25120,25126],{"__ignoreMap":23},[28,25089,25090,25093],{"class":30,"line":31},[28,25091,25092],{"class":2225},"lerobot-teleoperate",[28,25094,24941],{"class":60},[28,25096,25097,25099],{"class":30,"line":48},[28,25098,24973],{"class":60},[28,25100,24941],{"class":60},[28,25102,25103,25105],{"class":30,"line":84},[28,25104,25051],{"class":60},[28,25106,24941],{"class":60},[28,25108,25109,25112],{"class":30,"line":91},[28,25110,25111],{"class":60},"  --robot.id=my_awesome_follower_arm",[28,25113,24941],{"class":60},[28,25115,25116,25118],{"class":30,"line":97},[28,25117,24946],{"class":60},[28,25119,24941],{"class":60},[28,25121,25122,25124],{"class":30,"line":103},[28,25123,25018],{"class":60},[28,25125,24941],{"class":60},[28,25127,25128],{"class":30,"line":109},[28,25129,25025],{"class":60},[351,25131,25133],{"id":25132},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[18,25135,25137],{"className":24084,"code":25136,"language":24086,"meta":23,"style":23},"lerobot-find-cameras opencv\n",[25,25138,25139],{"__ignoreMap":23},[28,25140,25141,25144],{"class":30,"line":31},[28,25142,25143],{"class":2225},"lerobot-find-cameras",[28,25145,25146],{"class":127}," opencv\n",[18,25148,25150],{"className":24084,"code":25149,"language":24086,"meta":23,"style":23},"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",[25,25151,25152,25158,25164,25170,25176,25186,25192,25198,25205],{"__ignoreMap":23},[28,25153,25154,25156],{"class":30,"line":31},[28,25155,25092],{"class":2225},[28,25157,24941],{"class":60},[28,25159,25160,25162],{"class":30,"line":48},[28,25161,24973],{"class":60},[28,25163,24941],{"class":60},[28,25165,25166,25168],{"class":30,"line":84},[28,25167,25051],{"class":60},[28,25169,24941],{"class":60},[28,25171,25172,25174],{"class":30,"line":91},[28,25173,25111],{"class":60},[28,25175,24941],{"class":60},[28,25177,25178,25181,25184],{"class":30,"line":97},[28,25179,25180],{"class":60},"  --robot.cameras=",[28,25182,25183],{"class":127},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[28,25185,24941],{"class":60},[28,25187,25188,25190],{"class":30,"line":103},[28,25189,24946],{"class":60},[28,25191,24941],{"class":60},[28,25193,25194,25196],{"class":30,"line":109},[28,25195,25018],{"class":60},[28,25197,24941],{"class":60},[28,25199,25200,25203],{"class":30,"line":118},[28,25201,25202],{"class":60},"  --teleop.id=my_awesome_leader_arm",[28,25204,24941],{"class":60},[28,25206,25207],{"class":30,"line":124},[28,25208,25209],{"class":60},"  --display_data=true\n",[14,25211,25212],{},"相机参数说明：",[1404,25214,25215,25221,25227,25236,25246,25252],{},[366,25216,25217,25220],{},[25,25218,25219],{},"front","：相机名称。",[366,25222,25223,25226],{},[25,25224,25225],{},"type: opencv","：相机驱动类型。",[366,25228,25229,25232,25233,24825],{},[25,25230,25231],{},"index_or_path","：设备编号或设备路径（如 ",[25,25234,25235],{},"\u002Fdev\u002Fvideo4",[366,25237,25238,25241,25242,25245],{},[25,25239,25240],{},"width"," \u002F ",[25,25243,25244],{},"height","：图像分辨率。",[366,25247,25248,25251],{},[25,25249,25250],{},"fps","：采样帧率。",[366,25253,25254,25257],{},[25,25255,25256],{},"--display_data=true","：启用实时可视化。",[328,25259,25260],{},"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":23,"searchDepth":48,"depth":48,"links":25262},[25263,25264],{"id":25081,"depth":48,"text":25082},{"id":25132,"depth":48,"text":25133},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25073,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25271,"title":25272,"body":25273,"description":333,"extension":334,"meta":25445,"navigation":336,"path":25446,"seo":25447,"stem":25448,"__hash__":25449},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25274,"toc":25440},[25275,25279,25283,25288,25293,25296,25338,25344,25348,25397,25402,25406,25409,25417,25422,25427,25432,25437],[10,25276,25278],{"id":25277},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[351,25280,25282],{"id":25281},"_51-生成访问令牌","5.1 生成访问令牌",[14,25284,25285],{},[1727,25286],{"alt":23,"src":25287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25289,25290],{},[1727,25291],{"alt":23,"src":25292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25294,25295],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[18,25297,25299],{"className":24084,"code":25298,"language":24086,"meta":23,"style":23},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[25,25300,25301,25314],{"__ignoreMap":23},[28,25302,25303,25306,25309,25311],{"class":30,"line":31},[28,25304,25305],{"class":34},"export",[28,25307,25308],{"class":38}," HF_TOKEN",[28,25310,54],{"class":34},[28,25312,25313],{"class":127},"\"your_huggingface_token\"\n",[28,25315,25316,25319,25322,25325,25328,25330,25333,25335],{"class":30,"line":48},[28,25317,25318],{"class":2225},"hf",[28,25320,25321],{"class":127}," auth",[28,25323,25324],{"class":127}," login",[28,25326,25327],{"class":60}," --token",[28,25329,9986],{"class":127},[28,25331,25332],{"class":38},"$HF_TOKEN",[28,25334,654],{"class":127},[28,25336,25337],{"class":60}," --add-to-git-credential\n",[14,25339,25340,25343],{},[25,25341,25342],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[351,25345,25347],{"id":25346},"_52-验证登录","5.2 验证登录",[18,25349,25351],{"className":24084,"code":25350,"language":24086,"meta":23,"style":23},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[25,25352,25353,25384],{"__ignoreMap":23},[28,25354,25355,25358,25360,25363,25365,25367,25370,25373,25376,25379,25382],{"class":30,"line":31},[28,25356,25357],{"class":38},"HF_USER",[28,25359,54],{"class":34},[28,25361,25362],{"class":38},"$(",[28,25364,25318],{"class":2225},[28,25366,25321],{"class":127},[28,25368,25369],{"class":127}," whoami",[28,25371,25372],{"class":34}," |",[28,25374,25375],{"class":2225}," head",[28,25377,25378],{"class":60}," -n",[28,25380,25381],{"class":60}," 1",[28,25383,81],{"class":38},[28,25385,25386,25389,25391,25394],{"class":30,"line":48},[28,25387,25388],{"class":60},"echo",[28,25390,9986],{"class":127},[28,25392,25393],{"class":38},"$HF_USER",[28,25395,25396],{"class":127},"\"\n",[14,25398,25399],{},[1727,25400],{"alt":23,"src":25401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[351,25403,25405],{"id":25404},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25407,25408],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1404,25410,25411,25414],{},[366,25412,25413],{},"Dataset Repo（用于上传演示数据）",[366,25415,25416],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25418,25419],{},[1727,25420],{"alt":23,"src":25421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25423,25424],{},[1727,25425],{"alt":23,"src":25426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25428,25429],{},[1727,25430],{"alt":23,"src":25431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25433,25434],{},[1727,25435],{"alt":23,"src":25436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[328,25438,25439],{},"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":23,"searchDepth":48,"depth":48,"links":25441},[25442,25443,25444],{"id":25281,"depth":48,"text":25282},{"id":25346,"depth":48,"text":25347},{"id":25404,"depth":48,"text":25405},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25272,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25451,"title":25452,"body":25453,"description":333,"extension":334,"meta":25650,"navigation":336,"path":25651,"seo":25652,"stem":25653,"__hash__":25654},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25454,"toc":25645},[25455,25459,25463,25559,25567,25572,25576,25592,25595,25599,25642],[10,25456,25458],{"id":25457},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[351,25460,25462],{"id":25461},"_61-录制示教数据","6.1 录制示教数据",[18,25464,25466],{"className":24084,"code":25465,"language":24086,"meta":23,"style":23},"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",[25,25467,25468,25475,25481,25487,25493,25502,25508,25514,25520,25527,25537,25544,25554],{"__ignoreMap":23},[28,25469,25470,25473],{"class":30,"line":31},[28,25471,25472],{"class":2225},"lerobot-record",[28,25474,24941],{"class":60},[28,25476,25477,25479],{"class":30,"line":48},[28,25478,24973],{"class":60},[28,25480,24941],{"class":60},[28,25482,25483,25485],{"class":30,"line":84},[28,25484,25051],{"class":60},[28,25486,24941],{"class":60},[28,25488,25489,25491],{"class":30,"line":91},[28,25490,25111],{"class":60},[28,25492,24941],{"class":60},[28,25494,25495,25497,25500],{"class":30,"line":97},[28,25496,25180],{"class":60},[28,25498,25499],{"class":127},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[28,25501,24941],{"class":60},[28,25503,25504,25506],{"class":30,"line":103},[28,25505,24946],{"class":60},[28,25507,24941],{"class":60},[28,25509,25510,25512],{"class":30,"line":109},[28,25511,25018],{"class":60},[28,25513,24941],{"class":60},[28,25515,25516,25518],{"class":30,"line":118},[28,25517,25202],{"class":60},[28,25519,24941],{"class":60},[28,25521,25522,25525],{"class":30,"line":124},[28,25523,25524],{"class":60},"  --display_data=true",[28,25526,24941],{"class":60},[28,25528,25529,25532,25535],{"class":30,"line":131},[28,25530,25531],{"class":60},"  --dataset.repo_id=",[28,25533,25534],{"class":127},"\"Embodied-AI-6\u002Fso101_test\"",[28,25536,24941],{"class":60},[28,25538,25539,25542],{"class":30,"line":137},[28,25540,25541],{"class":60},"  --dataset.num_episodes=10",[28,25543,24941],{"class":60},[28,25545,25546,25549,25552],{"class":30,"line":143},[28,25547,25548],{"class":60},"  --dataset.single_task=",[28,25550,25551],{"class":127},"\"Grab the green cube\"",[28,25553,24941],{"class":60},[28,25555,25556],{"class":30,"line":149},[28,25557,25558],{"class":60},"  --resume=true\n",[1404,25560,25561],{},[366,25562,25563,25566],{},[25,25564,25565],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25568,25569],{},[1727,25570],{"alt":23,"src":25571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[351,25573,25575],{"id":25574},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[18,25577,25579],{"className":24084,"code":25578,"language":24086,"meta":23,"style":23},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[25,25580,25581],{"__ignoreMap":23},[28,25582,25583,25586,25589],{"class":30,"line":31},[28,25584,25585],{"class":2225},"rm",[28,25587,25588],{"class":60}," -rf",[28,25590,25591],{"class":127}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25593,25594],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[351,25596,25598],{"id":25597},"_63-回放指定-episode","6.3 回放指定 episode",[18,25600,25602],{"className":24084,"code":25601,"language":24086,"meta":23,"style":23},"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",[25,25603,25604,25611,25617,25623,25629,25637],{"__ignoreMap":23},[28,25605,25606,25609],{"class":30,"line":31},[28,25607,25608],{"class":2225},"lerobot-replay",[28,25610,24941],{"class":60},[28,25612,25613,25615],{"class":30,"line":48},[28,25614,24973],{"class":60},[28,25616,24941],{"class":60},[28,25618,25619,25621],{"class":30,"line":84},[28,25620,25051],{"class":60},[28,25622,24941],{"class":60},[28,25624,25625,25627],{"class":30,"line":91},[28,25626,25111],{"class":60},[28,25628,24941],{"class":60},[28,25630,25631,25633,25635],{"class":30,"line":97},[28,25632,25531],{"class":60},[28,25634,25534],{"class":127},[28,25636,24941],{"class":60},[28,25638,25639],{"class":30,"line":103},[28,25640,25641],{"class":60},"  --dataset.episode=0\n",[328,25643,25644],{},"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":23,"searchDepth":48,"depth":48,"links":25646},[25647,25648,25649],{"id":25461,"depth":48,"text":25462},{"id":25574,"depth":48,"text":25575},{"id":25597,"depth":48,"text":25598},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25452,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25656,"title":25657,"body":25658,"description":333,"extension":334,"meta":25786,"navigation":336,"path":25787,"seo":25788,"stem":25789,"__hash__":25790},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25659,"toc":25784},[25660,25664,25727,25730,25777,25782],[10,25661,25663],{"id":25662},"_7-act-模型训练","7. ACT 模型训练",[18,25665,25667],{"className":24084,"code":25666,"language":24086,"meta":23,"style":23},"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",[25,25668,25669,25676,25684,25691,25698,25705,25712,25719],{"__ignoreMap":23},[28,25670,25671,25674],{"class":30,"line":31},[28,25672,25673],{"class":2225},"lerobot-train",[28,25675,24941],{"class":60},[28,25677,25678,25680,25682],{"class":30,"line":48},[28,25679,25531],{"class":60},[28,25681,25534],{"class":127},[28,25683,24941],{"class":60},[28,25685,25686,25689],{"class":30,"line":84},[28,25687,25688],{"class":60},"  --policy.type=act",[28,25690,24941],{"class":60},[28,25692,25693,25696],{"class":30,"line":91},[28,25694,25695],{"class":60},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[28,25697,24941],{"class":60},[28,25699,25700,25703],{"class":30,"line":97},[28,25701,25702],{"class":60},"  --job_name=act_so101_test",[28,25704,24941],{"class":60},[28,25706,25707,25710],{"class":30,"line":103},[28,25708,25709],{"class":60},"  --policy.device=cuda",[28,25711,24941],{"class":60},[28,25713,25714,25717],{"class":30,"line":109},[28,25715,25716],{"class":60},"  --wandb.enable=false",[28,25718,24941],{"class":60},[28,25720,25721,25724],{"class":30,"line":118},[28,25722,25723],{"class":60},"  --policy.repo_id=",[28,25725,25726],{"class":127},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25728,25729],{},"参数说明：",[1404,25731,25732,25738,25744,25750,25756,25765,25771],{},[366,25733,25734,25737],{},[25,25735,25736],{},"--dataset.repo_id","：训练数据集仓库。",[366,25739,25740,25743],{},[25,25741,25742],{},"--policy.type=act","：策略模型类型为 ACT。",[366,25745,25746,25749],{},[25,25747,25748],{},"--output_dir","：本地训练输出目录。",[366,25751,25752,25755],{},[25,25753,25754],{},"--job_name","：训练任务名称。",[366,25757,25758,25761,25762,24825],{},[25,25759,25760],{},"--policy.device","：训练设备（如 ",[25,25763,25764],{},"cuda",[366,25766,25767,25770],{},[25,25768,25769],{},"--wandb.enable","：是否启用 WandB 可视化。",[366,25772,25773,25776],{},[25,25774,25775],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25778,25779],{},[1727,25780],{"alt":23,"src":25781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[328,25783,25644],{},{"title":23,"searchDepth":48,"depth":48,"links":25785},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25657,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25792,"title":25793,"body":25794,"description":333,"extension":334,"meta":25881,"navigation":336,"path":25882,"seo":25883,"stem":25884,"__hash__":25885},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25795,"toc":25879},[25796,25799,25802,25869,25877],[10,25797,25793],{"id":25798},"_8-策略部署与自动采集",[14,25800,25801],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[18,25803,25805],{"className":24084,"code":25804,"language":24086,"meta":23,"style":23},"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",[25,25806,25807,25813,25819,25825,25833,25839,25846,25854,25862],{"__ignoreMap":23},[28,25808,25809,25811],{"class":30,"line":31},[28,25810,25472],{"class":2225},[28,25812,24941],{"class":60},[28,25814,25815,25817],{"class":30,"line":48},[28,25816,24973],{"class":60},[28,25818,24941],{"class":60},[28,25820,25821,25823],{"class":30,"line":84},[28,25822,25051],{"class":60},[28,25824,24941],{"class":60},[28,25826,25827,25829,25831],{"class":30,"line":91},[28,25828,25180],{"class":60},[28,25830,25499],{"class":127},[28,25832,24941],{"class":60},[28,25834,25835,25837],{"class":30,"line":97},[28,25836,25111],{"class":60},[28,25838,24941],{"class":60},[28,25840,25841,25844],{"class":30,"line":103},[28,25842,25843],{"class":60},"  --display_data=false",[28,25845,24941],{"class":60},[28,25847,25848,25850,25852],{"class":30,"line":109},[28,25849,25531],{"class":60},[28,25851,25534],{"class":127},[28,25853,24941],{"class":60},[28,25855,25856,25858,25860],{"class":30,"line":118},[28,25857,25548],{"class":60},[28,25859,25551],{"class":127},[28,25861,24941],{"class":60},[28,25863,25864,25867],{"class":30,"line":124},[28,25865,25866],{"class":60},"  --policy.path=",[28,25868,25726],{"class":127},[1404,25870,25871],{},[366,25872,25873,25876],{},[25,25874,25875],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[328,25878,25644],{},{"title":23,"searchDepth":48,"depth":48,"links":25880},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25793,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25887,"title":25888,"body":25889,"description":333,"extension":334,"meta":25918,"navigation":336,"path":25919,"seo":25920,"stem":25921,"__hash__":25922},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25890,"toc":25916},[25891,25895,25898,25904,25907,25913],[10,25892,25894],{"id":25893},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25896,25897],{},"项目地址：",[14,25899,25900],{},[51,25901,25902],{"href":25902,"rel":25903},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24127],[14,25905,25906],{},"参考教程：",[14,25908,25909],{},[51,25910,25911],{"href":25911,"rel":25912},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24127],[14,25914,25915],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":23,"searchDepth":48,"depth":48,"links":25917},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25888,"description":333},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25924,"title":25925,"body":25926,"description":25930,"extension":334,"meta":25931,"navigation":336,"path":25932,"seo":25933,"stem":25934,"__hash__":25935},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25927,"toc":25928},[],{"title":23,"searchDepth":48,"depth":48,"links":25929},[],"act复现",{"category":23640},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25925,"description":25930},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25937,"title":25938,"body":25939,"description":23,"extension":334,"meta":26241,"navigation":336,"path":26242,"seo":26243,"stem":26244,"__hash__":26245},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25940,"toc":26233},[25941,25944,25948,25958,25965,25972,25975,25982,25985,25988,25992,26004,26008,26054,26057,26060,26063,26066,26069,26073,26111,26117,26121,26175,26180,26183,26186,26191,26194,26199,26202,26205,26209,26212,26215,26219],[10,25942,25938],{"id":25943},"_1简介",[380,25945,25947],{"id":25946},"_11什么是-docker","1.1什么是 Docker？",[14,25949,25950,25951,25954,25955],{},"Docker 是一个开源的 ",[555,25952,25953],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[555,25956,25957],{},"一次构建，到处运行。",[14,25959,25960,25961,25964],{},"“ ",[555,25962,25963],{},"一次构建，到处运行"," ”也就是说：",[363,25966,25967],{},[366,25968,25969],{},[555,25970,25971],{},"之前：",[14,25973,25974],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[363,25976,25977],{},[366,25978,25979],{},[555,25980,25981],{},"使用docker后：",[14,25983,25984],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25986,25987],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[380,25989,25991],{"id":25990},"_12它是怎么工作的","1.2.它是怎么工作的？",[1404,25993,25994,25997],{},[366,25995,25996],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[366,25998,25999,26000,26003],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[555,26001,26002],{},"无论在哪运行都一样稳定"," 。",[380,26005,26007],{"id":26006},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[543,26009,26010,26020],{},[546,26011,26012],{},[549,26013,26014,26017],{},[552,26015,26016],{"align":23998},"概念",[552,26018,26019],{"align":23998},"解释",[590,26021,26022,26030,26038,26046],{},[549,26023,26024,26027],{},[595,26025,26026],{"align":23998},"镜像",[595,26028,26029],{"align":23998},"Image，运行容器的模板，像是一个应用快照",[549,26031,26032,26035],{},[595,26033,26034],{"align":23998},"容器",[595,26036,26037],{"align":23998},"Container，运行中的镜像实例，有自己的文件系统、网络等",[549,26039,26040,26043],{},[595,26041,26042],{"align":23998},"Dockerfile",[595,26044,26045],{"align":23998},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[549,26047,26048,26051],{},[595,26049,26050],{"align":23998},"仓库",[595,26052,26053],{"align":23998},"Registry，存放镜像的地方，比如 Docker Hub",[14,26055,26056],{},"抽象化理解:",[14,26058,26059],{},"Docker镜像≈C++类",[14,26061,26062],{},"Docker容器≈C++类实例(即对象)",[14,26064,26065],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26067,26068],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[380,26070,26072],{"id":26071},"_14类比理解","1.4.类比理解",[543,26074,26075,26085],{},[546,26076,26077],{},[549,26078,26079,26082],{},[552,26080,26081],{"align":23998},"传统部署",[552,26083,26084],{"align":23998},"Docker部署",[590,26086,26087,26095,26103],{},[549,26088,26089,26092],{},[595,26090,26091],{"align":23998},"手动安装依赖、调试版本不一致问题",[595,26093,26094],{"align":23998},"一次打包环境和代码",[549,26096,26097,26100],{},[595,26098,26099],{"align":23998},"程序“裸奔”跑在系统上",[595,26101,26102],{"align":23998},"程序“穿着容器”隔离运行",[549,26104,26105,26108],{},[595,26106,26107],{"align":23998},"容易“在我电脑上能跑”",[595,26109,26110],{"align":23998},"保证“无论在哪都能跑”",[14,26112,26113,26114],{},"就像快递包裹： ",[555,26115,26116],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[380,26118,26120],{"id":26119},"_15docker-的核心优势","1.5.Docker 的核心优势",[543,26122,26123,26133],{},[546,26124,26125],{},[549,26126,26127,26130],{},[552,26128,26129],{"align":23998},"优势",[552,26131,26132],{"align":23998},"说明",[590,26134,26135,26143,26151,26159,26167],{},[549,26136,26137,26140],{},[595,26138,26139],{"align":23998},"轻量级",[595,26141,26142],{"align":23998},"基于系统内核共享，启动速度快，占资源少",[549,26144,26145,26148],{},[595,26146,26147],{"align":23998},"跨平台",[595,26149,26150],{"align":23998},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[549,26152,26153,26156],{},[595,26154,26155],{"align":23998},"易于迁移部署",[595,26157,26158],{"align":23998},"应用和环境一起封装，不怕依赖不一致",[549,26160,26161,26164],{},[595,26162,26163],{"align":23998},"易于版本控制",[595,26165,26166],{"align":23998},"镜像版本可控，支持回滚",[549,26168,26169,26172],{},[595,26170,26171],{"align":23998},"生态丰富",[595,26173,26174],{"align":23998},"Docker Hub 上有成千上万的现成镜像可用",[363,26176,26177],{},[366,26178,26179],{},"在Linux上可以几乎实现无性能损失。",[14,26181,26182],{},"docker里的发行版和本机共用Linux内核。",[14,26184,26185],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[363,26187,26188],{},[366,26189,26190],{},"可以快速部署在绝大多数Linux发行版",[14,26192,26193],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[363,26195,26196],{},[366,26197,26198],{},"配置环境简单",[14,26200,26201],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26203,26204],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[363,26206,26207],{},[366,26208,26171],{},[14,26210,26211],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26213,26214],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[380,26216,26218],{"id":26217},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1404,26220,26221,26224,26227,26230],{},[366,26222,26223],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[366,26225,26226],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[366,26228,26229],{},"微服务架构：每个服务一个容器，灵活组合",[366,26231,26232],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":23,"searchDepth":48,"depth":48,"links":26234},[26235,26236,26237,26238,26239,26240],{"id":25946,"depth":84,"text":25947},{"id":25990,"depth":84,"text":25991},{"id":26006,"depth":84,"text":26007},{"id":26071,"depth":84,"text":26072},{"id":26119,"depth":84,"text":26120},{"id":26217,"depth":84,"text":26218},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25938,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26247,"title":26248,"body":26249,"description":23,"extension":334,"meta":26982,"navigation":336,"path":26983,"seo":26984,"stem":26985,"__hash__":26986},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26250,"toc":26977},[26251,26254,26258,26261,26264,26270,26276,26280,26289,26292,26349,26352,26403,26406,26489,26492,26529,26533,26544,26557,26564,26567,26647,26650,26700,26703,26726,26730,26737,26740,26756,26762,26765,26781,26787,26790,26806,26820,26826,26846,26852,26855,26867,26873,26876,26890,26896,26899,26919,26924,26927,26930,26934,26937,26940,26943,26950,26953,26956,26959,26964,26969,26974],[10,26252,26248],{"id":26253},"_2安装docker",[380,26255,26257],{"id":26256},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26259,26260],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26262,26263],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26265,26266],{},[51,26267,26268],{"href":26268,"rel":26269},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24127],[14,26271,26272],{},[51,26273,26274],{"href":26274,"rel":26275},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24127],[22260,26277,26279],{"id":26278},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26281,26282,26283,26288],{},"以下内容根据 ",[51,26284,26287],{"href":26285,"rel":26286},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24127],"官方文档"," 修改而来。",[14,26290,26291],{},"如果你过去安装过 docker，先删掉：",[18,26293,26295],{"className":24084,"code":26294,"language":24086,"meta":23,"style":23},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[25,26296,26297],{"__ignoreMap":23},[28,26298,26299,26301,26304,26307,26310,26313,26316,26319,26322,26325,26328,26331,26334,26337,26340,26343,26346],{"class":30,"line":31},[28,26300,3287],{"class":34},[28,26302,26303],{"class":38}," pkg ",[28,26305,26306],{"class":34},"in",[28,26308,26309],{"class":127}," docker.io",[28,26311,26312],{"class":127}," docker-doc",[28,26314,26315],{"class":127}," docker-compose",[28,26317,26318],{"class":127}," docker-compose-v2",[28,26320,26321],{"class":127}," podman-docker",[28,26323,26324],{"class":127}," containerd",[28,26326,26327],{"class":127}," runc",[28,26329,26330],{"class":38},"; ",[28,26332,26333],{"class":34},"do",[28,26335,26336],{"class":2225}," sudo",[28,26338,26339],{"class":127}," apt-get",[28,26341,26342],{"class":127}," remove",[28,26344,26345],{"class":38}," $pkg; ",[28,26347,26348],{"class":34},"done\n",[14,26350,26351],{},"首先安装依赖和GPG：",[18,26353,26357],{"className":26354,"code":26355,"language":26356,"meta":23,"style":23},"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",[25,26358,26359,26364,26369,26374,26379,26384,26389,26393,26398],{"__ignoreMap":23},[28,26360,26361],{"class":30,"line":31},[28,26362,26363],{},"# Add Docker's official GPG key:\n",[28,26365,26366],{"class":30,"line":48},[28,26367,26368],{},"sudo apt-get update\n",[28,26370,26371],{"class":30,"line":84},[28,26372,26373],{},"sudo apt-get install ca-certificates curl\n",[28,26375,26376],{"class":30,"line":91},[28,26377,26378],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[28,26380,26381],{"class":30,"line":97},[28,26382,26383],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[28,26385,26386],{"class":30,"line":103},[28,26387,26388],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[28,26390,26391],{"class":30,"line":109},[28,26392,2662],{"emptyLinePlaceholder":336},[28,26394,26395],{"class":30,"line":118},[28,26396,26397],{},"# 如果上面这行报错就弄下面这行\n",[28,26399,26400],{"class":30,"line":124},[28,26401,26402],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26404,26405],{},"信任 Docker 的 GPG 公钥并添加仓库：",[18,26407,26409],{"className":24084,"code":26408,"language":24086,"meta":23,"style":23},"# 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",[25,26410,26411,26416,26422,26439,26472],{"__ignoreMap":23},[28,26412,26413],{"class":30,"line":31},[28,26414,26415],{"class":87},"# Add the repository to Apt sources:\n",[28,26417,26418,26420],{"class":30,"line":48},[28,26419,25388],{"class":60},[28,26421,24941],{"class":60},[28,26423,26424,26427,26430,26433,26436],{"class":30,"line":84},[28,26425,26426],{"class":127},"  \"deb [arch=$(",[28,26428,26429],{"class":2225},"dpkg",[28,26431,26432],{"class":60}," --print-architecture",[28,26434,26435],{"class":127},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[28,26437,26438],{"class":60},"\\\n",[28,26440,26441,26444,26446,26448,26451,26454,26456,26458,26461,26463,26465,26468,26470],{"class":30,"line":91},[28,26442,26443],{"class":127},"  \"",[28,26445,25362],{"class":38},[28,26447,956],{"class":60},[28,26449,26450],{"class":127}," \u002Fetc\u002Fos-release",[28,26452,26453],{"class":38}," && ",[28,26455,25388],{"class":60},[28,26457,9986],{"class":127},[28,26459,26460],{"class":38},"$VERSION_CODENAME",[28,26462,654],{"class":127},[28,26464,828],{"class":38},[28,26466,26467],{"class":127},"\" stable\"",[28,26469,25372],{"class":34},[28,26471,24941],{"class":60},[28,26473,26474,26477,26480,26483,26486],{"class":30,"line":97},[28,26475,26476],{"class":2225},"  sudo",[28,26478,26479],{"class":127}," tee",[28,26481,26482],{"class":127}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[28,26484,26485],{"class":34}," >",[28,26487,26488],{"class":127}," \u002Fdev\u002Fnull\n",[14,26490,26491],{},"最后安装",[18,26493,26495],{"className":24084,"code":26494,"language":24086,"meta":23,"style":23},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26496,26497,26506],{"__ignoreMap":23},[28,26498,26499,26501,26503],{"class":30,"line":31},[28,26500,24839],{"class":2225},[28,26502,26339],{"class":127},[28,26504,26505],{"class":127}," update\n",[28,26507,26508,26510,26512,26514,26517,26520,26523,26526],{"class":30,"line":48},[28,26509,24839],{"class":2225},[28,26511,26339],{"class":127},[28,26513,24096],{"class":127},[28,26515,26516],{"class":127}," docker-ce",[28,26518,26519],{"class":127}," docker-ce-cli",[28,26521,26522],{"class":127}," containerd.io",[28,26524,26525],{"class":127}," docker-buildx-plugin",[28,26527,26528],{"class":127}," docker-compose-plugin\n",[22260,26530,26532],{"id":26531},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26534,26535,26536,26539,26540,26543],{},"查看自己自己包管理工具版本（dnf是 ",[555,26537,26538],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[555,26541,26542],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[18,26545,26547],{"className":24084,"code":26546,"language":24086,"meta":23,"style":23},"dnf --version\n",[25,26548,26549],{"__ignoreMap":23},[28,26550,26551,26554],{"class":30,"line":31},[28,26552,26553],{"class":2225},"dnf",[28,26555,26556],{"class":60}," --version\n",[14,26558,26282,26559,26563],{},[51,26560,26287],{"href":26561,"rel":26562},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24127]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26565,26566],{},"如果你之前安装过 docker，请先删掉",[18,26568,26570],{"className":24084,"code":26569,"language":24086,"meta":23,"style":23},"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",[25,26571,26572,26586,26593,26600,26607,26614,26621,26628,26635,26642],{"__ignoreMap":23},[28,26573,26574,26576,26579,26581,26584],{"class":30,"line":31},[28,26575,24839],{"class":2225},[28,26577,26578],{"class":127}," dnf",[28,26580,26342],{"class":127},[28,26582,26583],{"class":127}," docker",[28,26585,24941],{"class":60},[28,26587,26588,26591],{"class":30,"line":48},[28,26589,26590],{"class":127},"                  docker-client",[28,26592,24941],{"class":60},[28,26594,26595,26598],{"class":30,"line":84},[28,26596,26597],{"class":127},"                  docker-client-latest",[28,26599,24941],{"class":60},[28,26601,26602,26605],{"class":30,"line":91},[28,26603,26604],{"class":127},"                  docker-common",[28,26606,24941],{"class":60},[28,26608,26609,26612],{"class":30,"line":97},[28,26610,26611],{"class":127},"                  docker-latest",[28,26613,24941],{"class":60},[28,26615,26616,26619],{"class":30,"line":103},[28,26617,26618],{"class":127},"                  docker-latest-logrotate",[28,26620,24941],{"class":60},[28,26622,26623,26626],{"class":30,"line":109},[28,26624,26625],{"class":127},"                  docker-logrotate",[28,26627,24941],{"class":60},[28,26629,26630,26633],{"class":30,"line":118},[28,26631,26632],{"class":127},"                  docker-selinux",[28,26634,24941],{"class":60},[28,26636,26637,26640],{"class":30,"line":124},[28,26638,26639],{"class":127},"                  docker-engine-selinux",[28,26641,24941],{"class":60},[28,26643,26644],{"class":30,"line":131},[28,26645,26646],{"class":127},"                  docker-engine\n",[14,26648,26649],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[18,26651,26653],{"className":24084,"code":26652,"language":24086,"meta":23,"style":23},"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",[25,26654,26655,26669,26684],{"__ignoreMap":23},[28,26656,26657,26659,26661,26664,26666],{"class":30,"line":31},[28,26658,24839],{"class":2225},[28,26660,26578],{"class":127},[28,26662,26663],{"class":60}," -y",[28,26665,24096],{"class":127},[28,26667,26668],{"class":127}," dnf-plugins-core\n",[28,26670,26671,26673,26675,26678,26681],{"class":30,"line":48},[28,26672,24839],{"class":2225},[28,26674,26578],{"class":127},[28,26676,26677],{"class":127}," config-manager",[28,26679,26680],{"class":127}," addrepo",[28,26682,26683],{"class":60}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[28,26685,26686,26688,26691,26694,26697],{"class":30,"line":84},[28,26687,24839],{"class":2225},[28,26689,26690],{"class":127}," sed",[28,26692,26693],{"class":60}," -i",[28,26695,26696],{"class":127}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[28,26698,26699],{"class":127}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26701,26702],{},"最后安装：",[18,26704,26706],{"className":24084,"code":26705,"language":24086,"meta":23,"style":23},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26707,26708],{"__ignoreMap":23},[28,26709,26710,26712,26714,26716,26718,26720,26722,26724],{"class":30,"line":31},[28,26711,24839],{"class":2225},[28,26713,26578],{"class":127},[28,26715,24096],{"class":127},[28,26717,26516],{"class":127},[28,26719,26519],{"class":127},[28,26721,26522],{"class":127},[28,26723,26525],{"class":127},[28,26725,26528],{"class":127},[380,26727,26729],{"id":26728},"_22配置环境","2.2.配置环境",[22260,26731,26733,26736],{"id":26732},"_221检查-docker-服务状态",[555,26734,26735],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26738,26739],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[18,26741,26743],{"className":24084,"code":26742,"language":24086,"meta":23,"style":23},"systemctl status docker\n",[25,26744,26745],{"__ignoreMap":23},[28,26746,26747,26750,26753],{"class":30,"line":31},[28,26748,26749],{"class":2225},"systemctl",[28,26751,26752],{"class":127}," status",[28,26754,26755],{"class":127}," docker\n",[22260,26757,26759,26736],{"id":26758},"_222启动-docker-服务",[555,26760,26761],{},"2.2.2.启动 Docker 服务",[14,26763,26764],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[18,26766,26768],{"className":24084,"code":26767,"language":24086,"meta":23,"style":23},"sudo systemctl start docker\n",[25,26769,26770],{"__ignoreMap":23},[28,26771,26772,26774,26777,26779],{"class":30,"line":31},[28,26773,24839],{"class":2225},[28,26775,26776],{"class":127}," systemctl",[28,26778,4446],{"class":127},[28,26780,26755],{"class":127},[22260,26782,26784,26736],{"id":26783},"_223设置-docker-开机自启",[555,26785,26786],{},"2.2.3.设置 Docker 开机自启",[14,26788,26789],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[18,26791,26793],{"className":24084,"code":26792,"language":24086,"meta":23,"style":23},"sudo systemctl enable docker\n",[25,26794,26795],{"__ignoreMap":23},[28,26796,26797,26799,26801,26804],{"class":30,"line":31},[28,26798,24839],{"class":2225},[28,26800,26776],{"class":127},[28,26802,26803],{"class":127}," enable",[28,26805,26755],{"class":127},[22260,26807,26809,14057,26812,14057,26817,26736],{"id":26808},"_224将用户添加到-docker-组",[555,26810,26811],{},"2.2.4.将用户添加到",[555,26813,26814],{},[25,26815,26816],{},"docker",[555,26818,26819],{},"组",[14,26821,26822,26823,26825],{},"使用以下命令将当前用户添加到 ",[25,26824,26816],{}," 组：",[18,26827,26829],{"className":24084,"code":26828,"language":24086,"meta":23,"style":23},"sudo usermod -aG docker $USER\n",[25,26830,26831],{"__ignoreMap":23},[28,26832,26833,26835,26838,26841,26843],{"class":30,"line":31},[28,26834,24839],{"class":2225},[28,26836,26837],{"class":127}," usermod",[28,26839,26840],{"class":60}," -aG",[28,26842,26583],{"class":127},[28,26844,26845],{"class":38}," $USER\n",[22260,26847,26849,26736],{"id":26848},"_225退出并重新登录",[555,26850,26851],{},"2.2.5.退出并重新登录",[14,26853,26854],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[18,26856,26858],{"className":24084,"code":26857,"language":24086,"meta":23,"style":23},"newgrp docker\n",[25,26859,26860],{"__ignoreMap":23},[28,26861,26862,26865],{"class":30,"line":31},[28,26863,26864],{"class":2225},"newgrp",[28,26866,26755],{"class":127},[22260,26868,26870,26736],{"id":26869},"_226重新启动-docker-服务如果需要",[555,26871,26872],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26874,26875],{},"确保 Docker 服务正在运行，可以使用以下命令：",[18,26877,26878],{"className":24084,"code":26767,"language":24086,"meta":23,"style":23},[25,26879,26880],{"__ignoreMap":23},[28,26881,26882,26884,26886,26888],{"class":30,"line":31},[28,26883,24839],{"class":2225},[28,26885,26776],{"class":127},[28,26887,4446],{"class":127},[28,26889,26755],{"class":127},[22260,26891,26893,26736],{"id":26892},"_227重启电脑后检查-docker-服务状态",[555,26894,26895],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26897,26898],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[18,26900,26902],{"className":24084,"code":26901,"language":24086,"meta":23,"style":23},"sudo reboot\nsystemctl status docker\n",[25,26903,26904,26911],{"__ignoreMap":23},[28,26905,26906,26908],{"class":30,"line":31},[28,26907,24839],{"class":2225},[28,26909,26910],{"class":127}," reboot\n",[28,26912,26913,26915,26917],{"class":30,"line":48},[28,26914,26749],{"class":2225},[28,26916,26752],{"class":127},[28,26918,26755],{"class":127},[14,26920,26921],{},[1727,26922],{"alt":23,"src":26923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26925,26926],{},"第三行显示enabled说明开机自启动成功",[14,26928,26929],{},"按q退出",[380,26931,26933],{"id":26932},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26935,26936],{},"优先使用linux来使用docker是比较好的",[14,26938,26939],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26941,26942],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26944,26945,26946],{},"官方下载安装:",[51,26947,26948],{"href":26948,"rel":26949},"https:\u002F\u002Fwww.docker.com\u002F",[24127],[14,26951,26952],{},"Windows的Docker显卡直通与USB直通:",[14,26954,26955],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26957,26958],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26960,26961],{},[1727,26962],{"alt":23,"src":26963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26965,26966],{},[1727,26967],{"alt":23,"src":26968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26970,26971],{},[1727,26972],{"alt":23,"src":26973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[328,26975,26976],{},"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":23,"searchDepth":48,"depth":48,"links":26978},[26979,26980,26981],{"id":26256,"depth":84,"text":26257},{"id":26728,"depth":84,"text":26729},{"id":26932,"depth":84,"text":26933},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26248,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26988,"title":26989,"body":26990,"description":26997,"extension":334,"meta":27690,"navigation":336,"path":27691,"seo":27692,"stem":27693,"__hash__":27694},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26991,"toc":27684},[26992,26995,26998,27002,27007,27012,27015,27043,27048,27057,27060,27065,27069,27076,27081,27087,27091,27094,27098,27103,27195,27200,27218,27223,27244,27249,27265,27269,27274,27303,27308,27354,27359,27403,27411,27428,27433,27449,27454,27468,27471,27474,27477,27480,27509,27512,27517,27521,27524,27527,27533,27536,27539,27542,27604,27611,27616,27619,27637,27641,27644,27661,27664,27667,27681],[10,26993,26989],{"id":26994},"_3docker直通",[14,26996,26997],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[380,26999,27001],{"id":27000},"_31usb直通","3.1.USB直通",[14,27003,27004],{},[1727,27005],{"alt":23,"src":27006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[363,27008,27009],{},[366,27010,27011],{},"方法一(不是很推荐新手)：",[14,27013,27014],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[18,27016,27018],{"className":24084,"code":27017,"language":24086,"meta":23,"style":23},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[25,27019,27020,27028,27033],{"__ignoreMap":23},[28,27021,27022,27025],{"class":30,"line":31},[28,27023,27024],{"class":2225},"ls",[28,27026,27027],{"class":127}," \u002Fdev\n",[28,27029,27030],{"class":30,"line":48},[28,27031,27032],{"class":87},"#例如\n",[28,27034,27035,27038,27040],{"class":30,"line":84},[28,27036,27037],{"class":38},"--device",[28,27039,54],{"class":34},[28,27041,27042],{"class":127},"\u002Fdev\u002Ftty_USB0\n",[363,27044,27045],{"start":48},[366,27046,27047],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[18,27049,27051],{"className":24084,"code":27050,"language":24086,"meta":23,"style":23},"--privileged\n",[25,27052,27053],{"__ignoreMap":23},[28,27054,27055],{"class":30,"line":31},[28,27056,27050],{"class":2225},[14,27058,27059],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27061,27062],{},[1727,27063],{"alt":23,"src":27064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[380,27066,27068],{"id":27067},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27070,27071,27072,27075],{},"NVIDIA Container Toolkit使用户 ",[555,27073,27074],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27077,27078],{},[1727,27079],{"alt":23,"src":27080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27082,27083],{},[51,27084,27085],{"href":27085,"rel":27086},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24127],[22260,27088,27090],{"id":27089},"_321安装","3.2.1.安装",[14,27092,27093],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23172,27095,27097],{"id":27096},"_3211ubuntu","3.2.1.1.Ubuntu",[363,27099,27100],{},[366,27101,27102],{},"配置存储库 并更新",[18,27104,27106],{"className":24084,"code":27105,"language":24086,"meta":23,"style":23},"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",[25,27107,27108,27137,27157,27169,27181,27187],{"__ignoreMap":23},[28,27109,27110,27113,27116,27119,27121,27123,27126,27129,27132,27135],{"class":30,"line":31},[28,27111,27112],{"class":2225},"curl",[28,27114,27115],{"class":60}," -fsSL",[28,27117,27118],{"class":127}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[28,27120,25372],{"class":34},[28,27122,26336],{"class":2225},[28,27124,27125],{"class":127}," gpg",[28,27127,27128],{"class":60}," --dearmor",[28,27130,27131],{"class":60}," -o",[28,27133,27134],{"class":127}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[28,27136,24941],{"class":60},[28,27138,27139,27142,27144,27147,27150,27153,27155],{"class":30,"line":48},[28,27140,27141],{"class":38},"  && ",[28,27143,27112],{"class":2225},[28,27145,27146],{"class":60}," -s",[28,27148,27149],{"class":60}," -L",[28,27151,27152],{"class":127}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[28,27154,25372],{"class":34},[28,27156,24941],{"class":60},[28,27158,27159,27162,27165,27167],{"class":30,"line":84},[28,27160,27161],{"class":2225},"    sed",[28,27163,27164],{"class":127}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[28,27166,25372],{"class":34},[28,27168,24941],{"class":60},[28,27170,27171,27174,27176,27179],{"class":30,"line":91},[28,27172,27173],{"class":2225},"    sudo",[28,27175,26479],{"class":127},[28,27177,27178],{"class":127}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[28,27180,24941],{"class":60},[28,27182,27183,27185],{"class":30,"line":97},[28,27184,27141],{"class":38},[28,27186,26438],{"class":60},[28,27188,27189,27191,27193],{"class":30,"line":103},[28,27190,27173],{"class":2225},[28,27192,26339],{"class":127},[28,27194,26505],{"class":127},[363,27196,27197],{"start":48},[366,27198,27199],{},"安装nvidia-docker2",[18,27201,27203],{"className":24084,"code":27202,"language":24086,"meta":23,"style":23},"sudo apt-get install -y nvidia-docker2\n",[25,27204,27205],{"__ignoreMap":23},[28,27206,27207,27209,27211,27213,27215],{"class":30,"line":31},[28,27208,24839],{"class":2225},[28,27210,26339],{"class":127},[28,27212,24096],{"class":127},[28,27214,26663],{"class":60},[28,27216,27217],{"class":127}," nvidia-docker2\n",[363,27219,27220],{"start":84},[366,27221,27222],{},"使用nvidia-ctk命令配置container runtime",[18,27224,27226],{"className":24084,"code":27225,"language":24086,"meta":23,"style":23},"sudo nvidia-ctk runtime configure --runtime=docker\n",[25,27227,27228],{"__ignoreMap":23},[28,27229,27230,27232,27235,27238,27241],{"class":30,"line":31},[28,27231,24839],{"class":2225},[28,27233,27234],{"class":127}," nvidia-ctk",[28,27236,27237],{"class":127}," runtime",[28,27239,27240],{"class":127}," configure",[28,27242,27243],{"class":60}," --runtime=docker\n",[363,27245,27246],{"start":91},[366,27247,27248],{},"重启docker服务:",[18,27250,27252],{"className":24084,"code":27251,"language":24086,"meta":23,"style":23},"sudo systemctl restart docker\n",[25,27253,27254],{"__ignoreMap":23},[28,27255,27256,27258,27260,27263],{"class":30,"line":31},[28,27257,24839],{"class":2225},[28,27259,26776],{"class":127},[28,27261,27262],{"class":127}," restart",[28,27264,26755],{"class":127},[23172,27266,27268],{"id":27267},"_3212fedora","3.2.1.2.Fedora",[363,27270,27271],{},[366,27272,27273],{},"配置存储库",[18,27275,27277],{"className":24084,"code":27276,"language":24086,"meta":23,"style":23},"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",[25,27278,27279,27294],{"__ignoreMap":23},[28,27280,27281,27283,27285,27287,27290,27292],{"class":30,"line":31},[28,27282,27112],{"class":2225},[28,27284,27146],{"class":60},[28,27286,27149],{"class":60},[28,27288,27289],{"class":127}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[28,27291,25372],{"class":34},[28,27293,24941],{"class":60},[28,27295,27296,27298,27300],{"class":30,"line":48},[28,27297,24839],{"class":2225},[28,27299,26479],{"class":127},[28,27301,27302],{"class":127}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[363,27304,27305],{"start":48},[366,27306,27307],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[18,27309,27311],{"className":24084,"code":27310,"language":24086,"meta":23,"style":23},"# 如果是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",[25,27312,27313,27318,27332,27336,27341],{"__ignoreMap":23},[28,27314,27315],{"class":30,"line":31},[28,27316,27317],{"class":87},"# 如果是RHEL或者Rocky（DNF4）\n",[28,27319,27320,27322,27324,27326,27329],{"class":30,"line":48},[28,27321,24839],{"class":2225},[28,27323,26578],{"class":127},[28,27325,26677],{"class":127},[28,27327,27328],{"class":60}," --add-repo",[28,27330,27331],{"class":127}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,27333,27334],{"class":30,"line":84},[28,27335,2662],{"emptyLinePlaceholder":336},[28,27337,27338],{"class":30,"line":91},[28,27339,27340],{"class":87},"# 如果是Feodra41+（DNF5）\n",[28,27342,27343,27345,27347,27349,27351],{"class":30,"line":97},[28,27344,24839],{"class":2225},[28,27346,26578],{"class":127},[28,27348,26677],{"class":127},[28,27350,26680],{"class":127},[28,27352,27353],{"class":60}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[363,27355,27356],{"start":84},[366,27357,27358],{},"安装NVIDIA Container Toolki包",[18,27360,27362],{"className":24084,"code":27361,"language":24086,"meta":23,"style":23},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[25,27363,27364,27369,27382,27386,27391],{"__ignoreMap":23},[28,27365,27366],{"class":30,"line":31},[28,27367,27368],{"class":87},"# 如果是RHEL或者Rocky\n",[28,27370,27371,27373,27375,27377,27379],{"class":30,"line":48},[28,27372,24839],{"class":2225},[28,27374,26578],{"class":127},[28,27376,24096],{"class":127},[28,27378,26663],{"class":60},[28,27380,27381],{"class":127}," nvidia-container-toolkit\n",[28,27383,27384],{"class":30,"line":84},[28,27385,2662],{"emptyLinePlaceholder":336},[28,27387,27388],{"class":30,"line":91},[28,27389,27390],{"class":87},"# 如果是Fedora\n",[28,27392,27393,27395,27397,27399,27401],{"class":30,"line":97},[28,27394,24839],{"class":2225},[28,27396,26578],{"class":127},[28,27398,24096],{"class":127},[28,27400,26663],{"class":60},[28,27402,27381],{"class":127},[363,27404,27405],{"start":91},[366,27406,27407,27408,27410],{},"安装nvidia-docker2 ： 在Fedora上使用",[25,27409,26553],{},"进行安装",[18,27412,27414],{"className":24084,"code":27413,"language":24086,"meta":23,"style":23},"sudo dnf install -y nvidia-docker2\n",[25,27415,27416],{"__ignoreMap":23},[28,27417,27418,27420,27422,27424,27426],{"class":30,"line":31},[28,27419,24839],{"class":2225},[28,27421,26578],{"class":127},[28,27423,24096],{"class":127},[28,27425,26663],{"class":60},[28,27427,27217],{"class":127},[363,27429,27430],{"start":97},[366,27431,27432],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[18,27434,27435],{"className":24084,"code":27225,"language":24086,"meta":23,"style":23},[25,27436,27437],{"__ignoreMap":23},[28,27438,27439,27441,27443,27445,27447],{"class":30,"line":31},[28,27440,24839],{"class":2225},[28,27442,27234],{"class":127},[28,27444,27237],{"class":127},[28,27446,27240],{"class":127},[28,27448,27243],{"class":60},[363,27450,27451],{"start":103},[366,27452,27453],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[18,27455,27456],{"className":24084,"code":27251,"language":24086,"meta":23,"style":23},[25,27457,27458],{"__ignoreMap":23},[28,27459,27460,27462,27464,27466],{"class":30,"line":31},[28,27461,24839],{"class":2225},[28,27463,26776],{"class":127},[28,27465,27262],{"class":127},[28,27467,26755],{"class":127},[14,27469,27470],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27472,27473],{},"方法：",[14,27475,27476],{},"1️⃣nvidia-smi",[14,27478,27479],{},"2️⃣运行nvidia cuda 容器进行测试",[18,27481,27483],{"className":24084,"code":27482,"language":24086,"meta":23,"style":23},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[25,27484,27485],{"__ignoreMap":23},[28,27486,27487,27489,27491,27494,27497,27500,27503,27506],{"class":30,"line":31},[28,27488,24839],{"class":2225},[28,27490,26583],{"class":127},[28,27492,27493],{"class":127}," run",[28,27495,27496],{"class":60}," --rm",[28,27498,27499],{"class":60}," --gpus",[28,27501,27502],{"class":127}," all",[28,27504,27505],{"class":127}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[28,27507,27508],{"class":127}," nvidia-smi\n",[14,27510,27511],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27513,27514],{},[1727,27515],{"alt":23,"src":27516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[380,27518,27520],{"id":27519},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27522,27523],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27525,27526],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27528,27529],{},[51,27530,27531],{"href":27531,"rel":27532},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24127],[14,27534,27535],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27537,27538],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27540,27541],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[543,27543,27544,27560],{},[546,27545,27546],{},[549,27547,27548,27551,27554,27557],{},[552,27549,27550],{"align":23998},"镜像类型",[552,27552,27553],{"align":23998},"适用场景",[552,27555,27556],{"align":23998},"示例标签",[552,27558,27559],{"align":23998},"大小",[590,27561,27562,27576,27590],{},[549,27563,27564,27567,27570,27573],{},[595,27565,27566],{"align":23998},"base",[595,27568,27569],{"align":23998},"仅需 CUDA 运行时库",[595,27571,27572],{"align":23998},"12.4.0-base-ubuntu22.04",[595,27574,27575],{"align":23998},"~240MB",[549,27577,27578,27581,27584,27587],{},[595,27579,27580],{"align":23998},"runtime",[595,27582,27583],{"align":23998},"部署编译后的应用（含数学库）",[595,27585,27586],{"align":23998},"12.4.0-runtime-ubuntu22.04",[595,27588,27589],{"align":23998},"~2GB",[549,27591,27592,27595,27598,27601],{},[595,27593,27594],{"align":23998},"devel",[595,27596,27597],{"align":23998},"开发环境（含编译工具）",[595,27599,27600],{"align":23998},"12.4.0-devel-ubuntu22.04",[595,27602,27603],{"align":23998},"~3GB",[14,27605,27606,27607,27610],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[25,27608,27609],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27612,27613],{},[1727,27614],{"alt":23,"src":27615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27617,27618],{},"在dockerfile里就可以开头这么写：",[18,27620,27622],{"className":24084,"code":27621,"language":24086,"meta":23,"style":23},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[25,27623,27624,27629],{"__ignoreMap":23},[28,27625,27626],{"class":30,"line":31},[28,27627,27628],{"class":87},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[28,27630,27631,27634],{"class":30,"line":48},[28,27632,27633],{"class":2225},"FROM",[28,27635,27636],{"class":127}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[380,27638,27640],{"id":27639},"_34配置以太网","3.4.配置以太网",[14,27642,27643],{},"指定网络模式",[18,27645,27647],{"className":24084,"code":27646,"language":24086,"meta":23,"style":23},"--net=host \\\n",[25,27648,27649],{"__ignoreMap":23},[28,27650,27651,27654,27656,27659],{"class":30,"line":31},[28,27652,27653],{"class":38},"--net",[28,27655,54],{"class":34},[28,27657,27658],{"class":127},"host",[28,27660,24941],{"class":2225},[14,27662,27663],{},"启动参数里加上这行即可。具体在下方",[14,27665,27666],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1404,27668,27669,27672,27675,27678],{},[366,27670,27671],{},"--net=bridge:默认选项，表示连接到默认的网桥",[366,27673,27674],{},"--net=host:容器使用宿主机的网络",[366,27676,27677],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[366,27679,27680],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[328,27682,27683],{},"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":23,"searchDepth":48,"depth":48,"links":27685},[27686,27687,27688,27689],{"id":27000,"depth":84,"text":27001},{"id":27067,"depth":84,"text":27068},{"id":27519,"depth":84,"text":27520},{"id":27639,"depth":84,"text":27640},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26989,"description":26997},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27696,"title":27697,"body":27698,"description":27705,"extension":334,"meta":27711,"navigation":336,"path":27712,"seo":27713,"stem":27714,"__hash__":27715},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27699,"toc":27709},[27700,27703,27706],[10,27701,27697],{"id":27702},"_4dockerhub换源",[14,27704,27705],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27707,27708],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":23,"searchDepth":48,"depth":48,"links":27710},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27697,"description":27705},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27717,"title":27718,"body":27719,"description":23,"extension":334,"meta":28731,"navigation":336,"path":28732,"seo":28733,"stem":28734,"__hash__":28735},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27720,"toc":28726},[27721,27724,27728,27734,27738,27741,28081,28084,28087,28090,28095,28100,28103,28106,28109,28112,28131,28134,28145,28151,28333,28343,28359,28622,28624,28649,28664,28673,28723],[10,27722,27718],{"id":27723},"_5docker命令学习",[380,27725,27727],{"id":27726},"_51参考文档","5.1.参考文档",[14,27729,27730],{},[51,27731,27732],{"href":27732,"rel":27733},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24127],[380,27735,27737],{"id":27736},"_52常用命令","5.2.常用命令",[14,27739,27740],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[543,27742,27743,27756],{},[546,27744,27745],{},[549,27746,27747,27750,27753],{},[552,27748,27749],{"align":23998},"命令",[552,27751,27752],{"align":23998},"描述",[552,27754,27755],{"align":23998},"示例",[590,27757,27758,27769,27780,27791,27802,27813,27824,27835,27845,27856,27867,27878,27888,27899,27910,27921,27931,27941,27951,27961,27972,27983,27994,28005,28016,28027,28037,28048,28059,28070],{},[549,27759,27760,27763,27766],{},[595,27761,27762],{"align":23998},"docker run",[595,27764,27765],{"align":23998},"创建并启动一个新的容器。",[595,27767,27768],{"align":23998},"docker run -it ubuntu bash",[549,27770,27771,27774,27777],{},[595,27772,27773],{"align":23998},"docker build",[595,27775,27776],{"align":23998},"通过指定的 Dockerfile 创建一个新的镜像。",[595,27778,27779],{"align":23998},"docker build -t myimage .",[549,27781,27782,27785,27788],{},[595,27783,27784],{"align":23998},"docker pull",[595,27786,27787],{"align":23998},"从 Docker 仓库拉取镜像。",[595,27789,27790],{"align":23998},"docker pull ubuntu",[549,27792,27793,27796,27799],{},[595,27794,27795],{"align":23998},"docker push",[595,27797,27798],{"align":23998},"将本地镜像推送到 Docker 仓库。",[595,27800,27801],{"align":23998},"docker push myimage",[549,27803,27804,27807,27810],{},[595,27805,27806],{"align":23998},"docker stop",[595,27808,27809],{"align":23998},"停止一个正在运行的容器。",[595,27811,27812],{"align":23998},"docker stop container_id",[549,27814,27815,27818,27821],{},[595,27816,27817],{"align":23998},"docker start",[595,27819,27820],{"align":23998},"启动一个已经存在的容器。",[595,27822,27823],{"align":23998},"docker start container_id",[549,27825,27826,27829,27832],{},[595,27827,27828],{"align":23998},"docker restart",[595,27830,27831],{"align":23998},"重新启动容器。",[595,27833,27834],{"align":23998},"docker restart container_id",[549,27836,27837,27840,27843],{},[595,27838,27839],{"align":23998},"docker ps",[595,27841,27842],{"align":23998},"列出当前正在运行的容器。",[595,27844,27839],{"align":23998},[549,27846,27847,27850,27853],{},[595,27848,27849],{"align":23998},"docker rm",[595,27851,27852],{"align":23998},"删除一个或多个停止的容器。",[595,27854,27855],{"align":23998},"docker rm container_id",[549,27857,27858,27861,27864],{},[595,27859,27860],{"align":23998},"docker exec",[595,27862,27863],{"align":23998},"在一个正在运行的容器中执行命令。",[595,27865,27866],{"align":23998},"docker exec -it container_id bash",[549,27868,27869,27872,27875],{},[595,27870,27871],{"align":23998},"docker logs",[595,27873,27874],{"align":23998},"查看容器的日志输出。",[595,27876,27877],{"align":23998},"docker logs container_id",[549,27879,27880,27883,27886],{},[595,27881,27882],{"align":23998},"docker images",[595,27884,27885],{"align":23998},"列出本地所有镜像。",[595,27887,27882],{"align":23998},[549,27889,27890,27893,27896],{},[595,27891,27892],{"align":23998},"docker rmi",[595,27894,27895],{"align":23998},"删除一个或多个镜像。",[595,27897,27898],{"align":23998},"docker rmi myimage",[549,27900,27901,27904,27907],{},[595,27902,27903],{"align":23998},"docker network",[595,27905,27906],{"align":23998},"管理 Docker 网络。",[595,27908,27909],{"align":23998},"docker network ls",[549,27911,27912,27915,27918],{},[595,27913,27914],{"align":23998},"docker volume",[595,27916,27917],{"align":23998},"管理 Docker 数据卷。",[595,27919,27920],{"align":23998},"docker volume ls",[549,27922,27923,27926,27929],{},[595,27924,27925],{"align":23998},"docker-compose up",[595,27927,27928],{"align":23998},"启动 docker-compose.yml 中定义的所有服务。",[595,27930,27925],{"align":23998},[549,27932,27933,27936,27939],{},[595,27934,27935],{"align":23998},"docker-compose down",[595,27937,27938],{"align":23998},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[595,27940,27935],{"align":23998},[549,27942,27943,27946,27949],{},[595,27944,27945],{"align":23998},"docker info",[595,27947,27948],{"align":23998},"显示 Docker 系统的详细信息。",[595,27950,27945],{"align":23998},[549,27952,27953,27956,27959],{},[595,27954,27955],{"align":23998},"docker stats",[595,27957,27958],{"align":23998},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[595,27960,27955],{"align":23998},[549,27962,27963,27966,27969],{},[595,27964,27965],{"align":23998},"docker inspect",[595,27967,27968],{"align":23998},"查看容器或镜像的详细信息（JSON 格式）。",[595,27970,27971],{"align":23998},"docker inspect container_id",[549,27973,27974,27977,27980],{},[595,27975,27976],{"align":23998},"docker save",[595,27978,27979],{"align":23998},"将一个镜像保存为 tar 文件。",[595,27981,27982],{"align":23998},"docker save -o myimage.tar myimage",[549,27984,27985,27988,27991],{},[595,27986,27987],{"align":23998},"docker load",[595,27989,27990],{"align":23998},"从 tar 文件中加载镜像。",[595,27992,27993],{"align":23998},"docker load -i myimage.tar",[549,27995,27996,27999,28002],{},[595,27997,27998],{"align":23998},"docker tag",[595,28000,28001],{"align":23998},"为镜像添加标签（tag）。",[595,28003,28004],{"align":23998},"docker tag myimage myimage:v1",[549,28006,28007,28010,28013],{},[595,28008,28009],{"align":23998},"docker buildx build",[595,28011,28012],{"align":23998},"使用 Buildx 构建多架构镜像。",[595,28014,28015],{"align":23998},"docker buildx build -t myimage .",[549,28017,28018,28021,28024],{},[595,28019,28020],{"align":23998},"docker buildx create",[595,28022,28023],{"align":23998},"创建一个新的 Buildx 构建实例。",[595,28025,28026],{"align":23998},"docker buildx create –use",[549,28028,28029,28032,28035],{},[595,28030,28031],{"align":23998},"docker buildx ls",[595,28033,28034],{"align":23998},"列出所有可用的 Buildx 构建实例。",[595,28036,28031],{"align":23998},[549,28038,28039,28042,28045],{},[595,28040,28041],{"align":23998},"docker buildx use",[595,28043,28044],{"align":23998},"设置当前的 Buildx 构建实例。",[595,28046,28047],{"align":23998},"docker buildx use mybuilder",[549,28049,28050,28053,28056],{},[595,28051,28052],{"align":23998},"docker buildx bake",[595,28054,28055],{"align":23998},"使用 Bake 文件批量构建镜像。",[595,28057,28058],{"align":23998},"docker buildx bake -f bake.hcl",[549,28060,28061,28064,28067],{},[595,28062,28063],{"align":23998},"docker buildx build –push",[595,28065,28066],{"align":23998},"构建镜像并推送到镜像仓库。",[595,28068,28069],{"align":23998},"docker buildx build –push -t myimage .",[549,28071,28072,28075,28078],{},[595,28073,28074],{"align":23998},"docker buildx build –platform",[595,28076,28077],{"align":23998},"构建镜像并为多个平台生成支持。",[595,28079,28080],{"align":23998},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28082,28083],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28085,28086],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28088,28089],{},"docker images 可以查看已经下载的镜像",[14,28091,28092],{},[1727,28093],{"alt":23,"src":28094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28096,28097],{},[555,28098,28099],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28101,28102],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28104,28105],{},"docker container logs 查看容器日志",[14,28107,28108],{},"docker top 查看容器里的进程",[14,28110,28111],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[18,28113,28115],{"className":24084,"code":28114,"language":24086,"meta":23,"style":23},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[25,28116,28117],{"__ignoreMap":23},[28,28118,28119,28122,28125,28128],{"class":30,"line":31},[28,28120,28121],{"class":2225},"如：docker",[28,28123,28124],{"class":127}," cp",[28,28126,28127],{"class":127}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[28,28129,28130],{"class":127}," \u002Fmydata\u002Fnginx\n",[14,28132,28133],{},"docker run时在启动容器的时候会有几个常用的选项：",[1404,28135,28136,28139,28142],{},[366,28137,28138],{},"-d选项：表示后台运行",[366,28140,28141],{},"-P选项：随机端口映射",[366,28143,28144],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[380,28146,28148],{"id":28147},"_53run命令的参数非常重要",[555,28149,28150],{},"5.3.run命令的参数（非常重要）",[543,28152,28153,28166],{},[546,28154,28155],{},[549,28156,28157,28160,28163],{},[552,28158,28159],{"align":23998},"参数\u002F配置",[552,28161,28162],{"align":23998},"功能说明",[552,28164,28165],{"align":23998},"重要性与参考依据",[590,28167,28168,28179,28190,28201,28212,28223,28234,28245,28256,28267,28278,28289,28300,28311,28322],{},[549,28169,28170,28173,28176],{},[595,28171,28172],{"align":23998},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[595,28174,28175],{"align":23998},"指定容器名称，便于后续管理",[595,28177,28178],{"align":23998},"替代随机生成的容器名。",[549,28180,28181,28184,28187],{},[595,28182,28183],{"align":23998},"–gpus all",[595,28185,28186],{"align":23998},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[595,28188,28189],{"align":23998},"用于CUDA加速等GPU依赖任务。",[549,28191,28192,28195,28198],{},[595,28193,28194],{"align":23998},"-e NVIDIA_DRIVER_CAPABILITIES=all",[595,28196,28197],{"align":23998},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[595,28199,28200],{"align":23998},"确保容器内GPU功能完整67。",[549,28202,28203,28206,28209],{},[595,28204,28205],{"align":23998},"-dit",[595,28207,28208],{"align":23998},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[595,28210,28211],{"align":23998},"允许容器在后台运行并支持交互操作。",[549,28213,28214,28217,28220],{},[595,28215,28216],{"align":23998},"–privileged",[595,28218,28219],{"align":23998},"赋予容器完全主机权限（可访问设备、内核模块等）",[595,28221,28222],{"align":23998},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[549,28224,28225,28228,28231],{},[595,28226,28227],{"align":23998},"–net=host",[595,28229,28230],{"align":23998},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[595,28232,28233],{"align":23998},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[549,28235,28236,28239,28242],{},[595,28237,28238],{"align":23998},"–group-add audio–group-add video–group-add dialout",[595,28240,28241],{"align":23998},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[595,28243,28244],{"align":23998},"避免权限问题（如避免无法调用摄像头、麦克风）。",[549,28246,28247,28250,28253],{},[595,28248,28249],{"align":23998},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[595,28251,28252],{"align":23998},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[595,28254,28255],{"align":23998},"支持容器内运行图形界面应用（如OpenCV可视化）。",[549,28257,28258,28261,28264],{},[595,28259,28260],{"align":23998},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[595,28262,28263],{"align":23998},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[595,28265,28266],{"align":23998},"实现容器内图形显示。",[549,28268,28269,28272,28275],{},[595,28270,28271],{"align":23998},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[595,28273,28274],{"align":23998},"挂载X11认证文件（只读）",[595,28276,28277],{"align":23998},"确保容器有权连接宿主机显示服务。",[549,28279,28280,28283,28286],{},[595,28281,28282],{"align":23998},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[595,28284,28285],{"align":23998},"挂载Wayland显示协议相关目录",[595,28287,28288],{"align":23998},"支持Wayland协议的图形显示。",[549,28290,28291,28294,28297],{},[595,28292,28293],{"align":23998},"–ulimit nofile=1024:524288",[595,28295,28296],{"align":23998},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[595,28298,28299],{"align":23998},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[549,28301,28302,28305,28308],{},[595,28303,28304],{"align":23998},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[595,28306,28307],{"align":23998},"挂载宿主机用户目录到容器内同名路径",[595,28309,28310],{"align":23998},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[549,28312,28313,28316,28319],{},[595,28314,28315],{"align":23998},"-w \u002Fhome\u002Ftungchiahui",[595,28317,28318],{"align":23998},"设置容器启动后的默认工作目录",[595,28320,28321],{"align":23998},"直接进入项目路径，方便执行命令2324。",[549,28323,28324,28327,28330],{},[595,28325,28326],{"align":23998},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[595,28328,28329],{"align":23998},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[595,28331,28332],{"align":23998},"提供预配置的深度学习与机器人开发环境。",[14,28334,28335,28336,28338,28339,28342],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[25,28337,24839],{},"加不加",[25,28340,28341],{},"sudo -E","都无所谓。",[14,28344,28345,28346,28348,28349,28351,28352,28355,28356,28358],{},"用户已经被加到docker组了，不用",[25,28347,24839],{},"也行跑，其次，",[25,28350,24839],{},"运行的话，你的",[25,28353,28354],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[25,28357,28354],{},"更不可能变了。",[18,28360,28362],{"className":24084,"code":28361,"language":24086,"meta":23,"style":23},"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",[25,28363,28364,28377,28387,28397,28409,28416,28423,28430,28440,28449,28458,28472,28484,28496,28505,28515,28524,28539,28572,28599,28610,28617],{"__ignoreMap":23},[28,28365,28366,28368,28370,28372,28375],{"class":30,"line":31},[28,28367,24839],{"class":2225},[28,28369,26583],{"class":127},[28,28371,27493],{"class":127},[28,28373,28374],{"class":60}," --name=ros_opencv_cuda",[28,28376,24941],{"class":60},[28,28378,28379,28382,28385],{"class":30,"line":48},[28,28380,28381],{"class":38},"--gpus ",[28,28383,28384],{"class":127},"all",[28,28386,24941],{"class":60},[28,28388,28389,28392,28395],{"class":30,"line":84},[28,28390,28391],{"class":38},"-e ",[28,28393,28394],{"class":127},"NVIDIA_DRIVER_CAPABILITIES=all",[28,28396,24941],{"class":60},[28,28398,28399,28401,28404,28407],{"class":30,"line":91},[28,28400,28391],{"class":38},[28,28402,28403],{"class":127},"DISPLAY=",[28,28405,28406],{"class":38},"$DISPLAY ",[28,28408,26438],{"class":60},[28,28410,28411,28414],{"class":30,"line":97},[28,28412,28413],{"class":38},"-dit ",[28,28415,26438],{"class":60},[28,28417,28418,28421],{"class":30,"line":103},[28,28419,28420],{"class":38},"--privileged ",[28,28422,26438],{"class":60},[28,28424,28425,28428],{"class":30,"line":109},[28,28426,28427],{"class":38},"--net=host ",[28,28429,26438],{"class":60},[28,28431,28432,28435,28438],{"class":30,"line":118},[28,28433,28434],{"class":38},"--group-add ",[28,28436,28437],{"class":127},"audio",[28,28439,24941],{"class":60},[28,28441,28442,28444,28447],{"class":30,"line":124},[28,28443,28434],{"class":38},[28,28445,28446],{"class":127},"video",[28,28448,24941],{"class":60},[28,28450,28451,28453,28456],{"class":30,"line":131},[28,28452,28434],{"class":38},[28,28454,28455],{"class":127},"dialout",[28,28457,24941],{"class":60},[28,28459,28460,28462,28465,28467,28470],{"class":30,"line":137},[28,28461,28391],{"class":38},[28,28463,28464],{"class":127},"XAUTHORITY=",[28,28466,28354],{"class":38},[28,28468,28469],{"class":127},"\u002F.Xauthority",[28,28471,24941],{"class":60},[28,28473,28474,28476,28479,28482],{"class":30,"line":143},[28,28475,28391],{"class":38},[28,28477,28478],{"class":127},"WAYLAND_DISPLAY=",[28,28480,28481],{"class":38},"$WAYLAND_DISPLAY ",[28,28483,26438],{"class":60},[28,28485,28486,28488,28491,28494],{"class":30,"line":149},[28,28487,28391],{"class":38},[28,28489,28490],{"class":127},"XDG_RUNTIME_DIR=",[28,28492,28493],{"class":38},"$XDG_RUNTIME_DIR ",[28,28495,26438],{"class":60},[28,28497,28498,28500,28503],{"class":30,"line":1890},[28,28499,28391],{"class":38},[28,28501,28502],{"class":127},"QT_QPA_PLATFORM=xcb",[28,28504,24941],{"class":60},[28,28506,28507,28510,28513],{"class":30,"line":1904},[28,28508,28509],{"class":38},"-v ",[28,28511,28512],{"class":127},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[28,28514,24941],{"class":60},[28,28516,28517,28519,28522],{"class":30,"line":1909},[28,28518,28509],{"class":38},[28,28520,28521],{"class":127},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[28,28523,24941],{"class":60},[28,28525,28526,28529,28532,28534,28537],{"class":30,"line":1915},[28,28527,28528],{"class":38},"-v $HOME",[28,28530,28531],{"class":127},"\u002F.Xauthority:",[28,28533,28354],{"class":38},[28,28535,28536],{"class":127},"\u002F.Xauthority:ro",[28,28538,24941],{"class":60},[28,28540,28541,28543,28546,28548,28551,28554,28556,28559,28561,28563,28565,28567,28570],{"class":30,"line":1936},[28,28542,28509],{"class":38},[28,28544,28545],{"class":127},"\u002Frun\u002Fuser\u002F",[28,28547,25362],{"class":38},[28,28549,28550],{"class":2225},"id",[28,28552,28553],{"class":60}," -u",[28,28555,828],{"class":38},[28,28557,28558],{"class":127},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[28,28560,25362],{"class":38},[28,28562,28550],{"class":2225},[28,28564,28553],{"class":60},[28,28566,828],{"class":38},[28,28568,28569],{"class":127},"\u002Fwayland-0",[28,28571,24941],{"class":60},[28,28573,28574,28576,28578,28580,28582,28584,28586,28589,28591,28593,28595,28597],{"class":30,"line":1941},[28,28575,28509],{"class":38},[28,28577,28545],{"class":127},[28,28579,25362],{"class":38},[28,28581,28550],{"class":2225},[28,28583,28553],{"class":60},[28,28585,828],{"class":38},[28,28587,28588],{"class":127},":\u002Frun\u002Fuser\u002F",[28,28590,25362],{"class":38},[28,28592,28550],{"class":2225},[28,28594,28553],{"class":60},[28,28596,13976],{"class":38},[28,28598,26438],{"class":60},[28,28600,28601,28603,28605,28608],{"class":30,"line":1955},[28,28602,28528],{"class":38},[28,28604,1256],{"class":127},[28,28606,28607],{"class":38},"$HOME ",[28,28609,26438],{"class":60},[28,28611,28612,28615],{"class":30,"line":1960},[28,28613,28614],{"class":38},"-w $HOME ",[28,28616,26438],{"class":60},[28,28618,28619],{"class":30,"line":1989},[28,28620,28621],{"class":38},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28623,9287],{},[363,28625,28626,28634,28637,28640],{},[366,28627,28628,14057,28630,28633],{},[25,28629,28394],{},[25,28631,28632],{},"--gpus all","没有英伟达显卡请注释。",[366,28635,28636],{},"--name后面请自己为容器起名。",[366,28638,28639],{},"最后一行仓库名称请你自己找对应的镜像填上。",[366,28641,28642,28643,28648],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23815,28644,28645],{},[555,28646,28647],{},"请不要加","。",[18,28650,28652],{"className":24084,"code":28651,"language":24086,"meta":23,"style":23},"--ulimit nofile=1024:524288 \\\n",[25,28653,28654],{"__ignoreMap":23},[28,28655,28656,28659,28662],{"class":30,"line":31},[28,28657,28658],{"class":2225},"--ulimit",[28,28660,28661],{"class":127}," nofile=1024:524288",[28,28663,24941],{"class":60},[14,28665,28666,28667,28672],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23815,28668,28669],{},[555,28670,28671],{},"不建议","**.**",[18,28674,28676],{"className":24084,"code":28675,"language":24086,"meta":23,"style":23},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[25,28677,28678,28705,28714],{"__ignoreMap":23},[28,28679,28680,28683,28686,28688,28690,28692,28694,28696,28698,28701,28703],{"class":30,"line":31},[28,28681,28682],{"class":2225},"--user",[28,28684,28685],{"class":38}," $(",[28,28687,28550],{"class":2225},[28,28689,28553],{"class":60},[28,28691,828],{"class":38},[28,28693,1256],{"class":127},[28,28695,25362],{"class":38},[28,28697,28550],{"class":2225},[28,28699,28700],{"class":60}," -g",[28,28702,13976],{"class":38},[28,28704,26438],{"class":60},[28,28706,28707,28709,28712],{"class":30,"line":48},[28,28708,28509],{"class":38},[28,28710,28711],{"class":127},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[28,28713,24941],{"class":60},[28,28715,28716,28718,28721],{"class":30,"line":84},[28,28717,28509],{"class":38},[28,28719,28720],{"class":127},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[28,28722,24941],{"class":60},[328,28724,28725],{},"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":23,"searchDepth":48,"depth":48,"links":28727},[28728,28729,28730],{"id":27726,"depth":84,"text":27727},{"id":27736,"depth":84,"text":27737},{"id":28147,"depth":84,"text":28150},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27718,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28737,"title":28738,"body":28739,"description":23,"extension":334,"meta":30362,"navigation":336,"path":30363,"seo":30364,"stem":30365,"__hash__":30366},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28740,"toc":30357},[28741,28744,28748,28751,28973,28977,28981,28984,29090,29095,29098,29103,29106,29111,29114,29119,29122,29134,29137,29142,29149,29177,29184,29260,29265,29268,29291,29293,29368,29373,29376,29380,29388,29393,29398,29402,29413,29419,29422,29425,29449,29452,29455,29483,29486,29489,29954,29957,29962,29967,29971,29994,29999,30003,30007,30010,30013,30016,30043,30046,30049,30067,30070,30073,30095,30103,30108,30113,30117,30120,30123,30126,30129,30174,30177,30195,30198,30203,30206,30227,30230,30286,30289,30294,30298,30301,30308,30311,30314,30319,30322,30338,30341,30354],[10,28742,28738],{"id":28743},"_6手动创建docker镜像",[380,28745,28747],{"id":28746},"_61dockerfile","6.1.DockerFile",[14,28749,28750],{},"常用命令：",[543,28752,28753,28764],{},[546,28754,28755],{},[549,28756,28757,28760,28762],{},[552,28758,28759],{"align":23998},"指令",[552,28761,26132],{"align":23998},[552,28763,27755],{"align":23998},[590,28765,28766,28776,28792,28803,28814,28825,28836,28847,28858,28872,28886,28897,28911,28922,28933,28947,28962],{},[549,28767,28768,28770,28773],{},[595,28769,27633],{"align":23998},[595,28771,28772],{"align":23998},"指定基础镜像，是 Dockerfile 的起点",[595,28774,28775],{"align":23998},"FROM ubuntu:22.04",[549,28777,28778,28781,28784],{},[595,28779,28780],{"align":23998},"LABEL",[595,28782,28783],{"align":23998},"添加元数据（如作者、版本等）",[595,28785,28786,28787,28791],{"align":23998},"LABEL maintainer=”",[51,28788,28790],{"href":28789},"mailto:you@example.com","you@example.com","”",[549,28793,28794,28797,28800],{},[595,28795,28796],{"align":23998},"ENV",[595,28798,28799],{"align":23998},"设置环境变量",[595,28801,28802],{"align":23998},"ENV PORT=8080",[549,28804,28805,28808,28811],{},[595,28806,28807],{"align":23998},"ARG",[595,28809,28810],{"align":23998},"构建参数，只在构建期间可用",[595,28812,28813],{"align":23998},"ARG VERSION=1.0",[549,28815,28816,28819,28822],{},[595,28817,28818],{"align":23998},"RUN",[595,28820,28821],{"align":23998},"构建镜像时运行命令",[595,28823,28824],{"align":23998},"RUN apt-get update && apt-get install -y curl",[549,28826,28827,28830,28833],{},[595,28828,28829],{"align":23998},"COPY",[595,28831,28832],{"align":23998},"复制文件到镜像中",[595,28834,28835],{"align":23998},"COPY . \u002Fapp",[549,28837,28838,28841,28844],{},[595,28839,28840],{"align":23998},"ADD",[595,28842,28843],{"align":23998},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[595,28845,28846],{"align":23998},"ADD archive.tar.gz \u002Fdata\u002F",[549,28848,28849,28852,28855],{},[595,28850,28851],{"align":23998},"WORKDIR",[595,28853,28854],{"align":23998},"设置工作目录",[595,28856,28857],{"align":23998},"WORKDIR \u002Fopt",[549,28859,28860,28863,28866],{},[595,28861,28862],{"align":23998},"CMD",[595,28864,28865],{"align":23998},"设置容器启动时默认命令（可被 docker run 覆盖）",[595,28867,28868,28869],{"align":23998},"CMD ",[28,28870,28871],{},"“node”, “index.js”",[549,28873,28874,28877,28880],{},[595,28875,28876],{"align":23998},"ENTRYPOINT",[595,28878,28879],{"align":23998},"设置容器启动时固定命令（通常用于 CLI 工具等）",[595,28881,28882,28883],{"align":23998},"ENTRYPOINT ",[28,28884,28885],{},"“python3”",[549,28887,28888,28891,28894],{},[595,28889,28890],{"align":23998},"EXPOSE",[595,28892,28893],{"align":23998},"声明镜像内服务监听的端口（不会自动映射）",[595,28895,28896],{"align":23998},"EXPOSE 80",[549,28898,28899,28902,28905],{},[595,28900,28901],{"align":23998},"VOLUME",[595,28903,28904],{"align":23998},"声明数据卷挂载点",[595,28906,28907,28908],{"align":23998},"VOLUME ",[28,28909,28910],{},"“\u002Fdata”",[549,28912,28913,28916,28919],{},[595,28914,28915],{"align":23998},"USER",[595,28917,28918],{"align":23998},"设置后续命令执行的用户",[595,28920,28921],{"align":23998},"USER appuser",[549,28923,28924,28927,28930],{},[595,28925,28926],{"align":23998},"ONBUILD",[595,28928,28929],{"align":23998},"当镜像作为其他镜像基础镜像时触发的构建指令",[595,28931,28932],{"align":23998},"ONBUILD COPY . \u002Fsrc",[549,28934,28935,28938,28941],{},[595,28936,28937],{"align":23998},"SHELL",[595,28939,28940],{"align":23998},"更改默认 shell，比如将 sh -c 改为 bash -c",[595,28942,28943,28944],{"align":23998},"SHELL ",[28,28945,28946],{},"“\u002Fbin\u002Fbash”, “-c”",[549,28948,28949,28952,28955],{},[595,28950,28951],{"align":23998},"HEALTHCHECK",[595,28953,28954],{"align":23998},"定义容器运行时的健康检查命令",[595,28956,28957,28958],{"align":23998},"`HEALTHCHECK CMD curl –fail ",[51,28959,28960],{"href":28960,"rel":28961},"http:\u002F\u002Flocalhost:8080",[24127],[549,28963,28964,28967,28970],{},[595,28965,28966],{"align":23998},"STOPSIGNAL",[595,28968,28969],{"align":23998},"容器停止时发送的信号",[595,28971,28972],{"align":23998},"STOPSIGNAL SIGKILL",[380,28974,28976],{"id":28975},"_62自己创建容器","6.2.自己创建容器",[22260,28978,28980],{"id":28979},"_621手动创建","6.2.1.手动创建",[14,28982,28983],{},"在x86电脑上编译x86的：",[18,28985,28987],{"className":24084,"code":28986,"language":24086,"meta":23,"style":23},"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",[25,28988,28989,29005,29009,29022,29026,29039,29043,29056,29060,29073,29077],{"__ignoreMap":23},[28,28990,28991,28993,28996,28999,29002],{"class":30,"line":31},[28,28992,26816],{"class":2225},[28,28994,28995],{"class":127}," build",[28,28997,28998],{"class":60}," -t",[28,29000,29001],{"class":127}," ros-melodic-cuda118-cudnn8-bionic:latest",[28,29003,29004],{"class":127}," .\n",[28,29006,29007],{"class":30,"line":48},[28,29008,2662],{"emptyLinePlaceholder":336},[28,29010,29011,29013,29015,29017,29020],{"class":30,"line":84},[28,29012,26816],{"class":2225},[28,29014,28995],{"class":127},[28,29016,28998],{"class":60},[28,29018,29019],{"class":127}," ros-noetic-focal:latest",[28,29021,29004],{"class":127},[28,29023,29024],{"class":30,"line":91},[28,29025,2662],{"emptyLinePlaceholder":336},[28,29027,29028,29030,29032,29034,29037],{"class":30,"line":97},[28,29029,26816],{"class":2225},[28,29031,28995],{"class":127},[28,29033,28998],{"class":60},[28,29035,29036],{"class":127}," ros-humble-jammy:latest",[28,29038,29004],{"class":127},[28,29040,29041],{"class":30,"line":103},[28,29042,2662],{"emptyLinePlaceholder":336},[28,29044,29045,29047,29049,29051,29054],{"class":30,"line":109},[28,29046,26816],{"class":2225},[28,29048,28995],{"class":127},[28,29050,28998],{"class":60},[28,29052,29053],{"class":127}," ros-jazzy-noble:latest",[28,29055,29004],{"class":127},[28,29057,29058],{"class":30,"line":118},[28,29059,2662],{"emptyLinePlaceholder":336},[28,29061,29062,29064,29066,29068,29071],{"class":30,"line":124},[28,29063,26816],{"class":2225},[28,29065,28995],{"class":127},[28,29067,28998],{"class":60},[28,29069,29070],{"class":127}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[28,29072,29004],{"class":127},[28,29074,29075],{"class":30,"line":131},[28,29076,2662],{"emptyLinePlaceholder":336},[28,29078,29079,29081,29083,29085,29088],{"class":30,"line":137},[28,29080,26816],{"class":2225},[28,29082,28995],{"class":127},[28,29084,28998],{"class":60},[28,29086,29087],{"class":127}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[28,29089,29004],{"class":127},[14,29091,29092],{},[1727,29093],{"alt":23,"src":29094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29096,29097],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29099,29100],{},[1727,29101],{"alt":23,"src":29102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29104,29105],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[363,29107,29108],{},[366,29109,29110],{},"创建 Docker Hub 账户",[14,29112,29113],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[363,29115,29116],{"start":48},[366,29117,29118],{},"登录 Docker Hub",[14,29120,29121],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[18,29123,29125],{"className":24084,"code":29124,"language":24086,"meta":23,"style":23},"docker login\n",[25,29126,29127],{"__ignoreMap":23},[28,29128,29129,29131],{"class":30,"line":31},[28,29130,26816],{"class":2225},[28,29132,29133],{"class":127}," login\n",[14,29135,29136],{},"输入你的 Docker Hub 用户名和密码进行验证。",[363,29138,29139],{},[366,29140,29141],{},"为你的镜像打标签",[14,29143,29144,29145,29148],{},"Docker Hub 使用 ",[25,29146,29147],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[18,29150,29152],{"className":24084,"code":29151,"language":24086,"meta":23,"style":23},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[25,29153,29154],{"__ignoreMap":23},[28,29155,29156,29158,29161,29163,29166,29169,29172,29174],{"class":30,"line":31},[28,29157,26816],{"class":2225},[28,29159,29160],{"class":127}," tag",[28,29162,29053],{"class":127},[28,29164,29165],{"class":34}," \u003C",[28,29167,29168],{"class":127},"你的用户",[28,29170,29171],{"class":38},"名",[28,29173,1357],{"class":34},[28,29175,29176],{"class":127},"\u002Fros-jazzy-noble:latest\n",[14,29178,29179,29180,29183],{},"例如，如果你的 Docker Hub 用户名是 ",[25,29181,29182],{},"tungchiahui","，你应该执行：",[18,29185,29187],{"className":24084,"code":29186,"language":24086,"meta":23,"style":23},"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",[25,29188,29189,29200,29204,29215,29219,29230,29234,29245,29249],{"__ignoreMap":23},[28,29190,29191,29193,29195,29197],{"class":30,"line":31},[28,29192,26816],{"class":2225},[28,29194,29160],{"class":127},[28,29196,29019],{"class":127},[28,29198,29199],{"class":127}," tungchiahui\u002Fros-noetic-focal:latest\n",[28,29201,29202],{"class":30,"line":48},[28,29203,2662],{"emptyLinePlaceholder":336},[28,29205,29206,29208,29210,29212],{"class":30,"line":84},[28,29207,26816],{"class":2225},[28,29209,29160],{"class":127},[28,29211,29036],{"class":127},[28,29213,29214],{"class":127}," tungchiahui\u002Fros-humble-jammy:latest\n",[28,29216,29217],{"class":30,"line":91},[28,29218,2662],{"emptyLinePlaceholder":336},[28,29220,29221,29223,29225,29227],{"class":30,"line":97},[28,29222,26816],{"class":2225},[28,29224,29160],{"class":127},[28,29226,29053],{"class":127},[28,29228,29229],{"class":127}," tungchiahui\u002Fros-jazzy-noble:latest\n",[28,29231,29232],{"class":30,"line":103},[28,29233,2662],{"emptyLinePlaceholder":336},[28,29235,29236,29238,29240,29242],{"class":30,"line":109},[28,29237,26816],{"class":2225},[28,29239,29160],{"class":127},[28,29241,29070],{"class":127},[28,29243,29244],{"class":127}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29246,29247],{"class":30,"line":118},[28,29248,2662],{"emptyLinePlaceholder":336},[28,29250,29251,29253,29255,29257],{"class":30,"line":124},[28,29252,26816],{"class":2225},[28,29254,29160],{"class":127},[28,29256,29087],{"class":127},[28,29258,29259],{"class":127}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[363,29261,29262],{"start":48},[366,29263,29264],{},"推送镜像到 Docker Hub",[14,29266,29267],{},"使用以下命令将镜像推送到 Docker Hub：",[18,29269,29271],{"className":24084,"code":29270,"language":24086,"meta":23,"style":23},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[25,29272,29273],{"__ignoreMap":23},[28,29274,29275,29277,29280,29282,29284,29286,29288],{"class":30,"line":31},[28,29276,26816],{"class":2225},[28,29278,29279],{"class":127}," push",[28,29281,29165],{"class":34},[28,29283,29168],{"class":127},[28,29285,29171],{"class":38},[28,29287,1357],{"class":34},[28,29289,29290],{"class":127},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29292,14895],{},[18,29294,29296],{"className":24084,"code":29295,"language":24086,"meta":23,"style":23},"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",[25,29297,29298,29306,29310,29318,29322,29330,29334,29343,29347,29355,29359],{"__ignoreMap":23},[28,29299,29300,29302,29304],{"class":30,"line":31},[28,29301,26816],{"class":2225},[28,29303,29279],{"class":127},[28,29305,29199],{"class":127},[28,29307,29308],{"class":30,"line":48},[28,29309,2662],{"emptyLinePlaceholder":336},[28,29311,29312,29314,29316],{"class":30,"line":84},[28,29313,26816],{"class":2225},[28,29315,29279],{"class":127},[28,29317,29214],{"class":127},[28,29319,29320],{"class":30,"line":91},[28,29321,2662],{"emptyLinePlaceholder":336},[28,29323,29324,29326,29328],{"class":30,"line":97},[28,29325,26816],{"class":2225},[28,29327,29279],{"class":127},[28,29329,29229],{"class":127},[28,29331,29332],{"class":30,"line":103},[28,29333,2662],{"emptyLinePlaceholder":336},[28,29335,29336,29338,29340],{"class":30,"line":109},[28,29337,26816],{"class":2225},[28,29339,29279],{"class":127},[28,29341,29342],{"class":127}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29344,29345],{"class":30,"line":118},[28,29346,2662],{"emptyLinePlaceholder":336},[28,29348,29349,29351,29353],{"class":30,"line":124},[28,29350,26816],{"class":2225},[28,29352,29279],{"class":127},[28,29354,29259],{"class":127},[28,29356,29357],{"class":30,"line":131},[28,29358,2662],{"emptyLinePlaceholder":336},[28,29360,29361,29363,29365],{"class":30,"line":137},[28,29362,26816],{"class":2225},[28,29364,29279],{"class":127},[28,29366,29367],{"class":127}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[363,29369,29370],{"start":84},[366,29371,29372],{},"验证推送成功",[14,29374,29375],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29377,29378],{},[555,29379,4046],{},[1404,29381,29382,29385],{},[366,29383,29384],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[366,29386,29387],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29389,29390],{},[1727,29391],{"alt":23,"src":29392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29394,29395],{},[1727,29396],{"alt":23,"src":29397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22260,29399,29401],{"id":29400},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29403,29404,29405,29408,29409,29412],{},"如果您想在 ",[555,29406,29407],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[555,29410,29411],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29414,29415,29416],{},"1. ",[555,29417,29418],{},"启用 Docker 跨平台构建",[14,29420,29421],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29423,29424],{},"第一步：启用 buildx（只需执行一次）",[18,29426,29428],{"className":24084,"code":29427,"language":24086,"meta":23,"style":23},"docker buildx create --name multiarch_builder --use\n",[25,29429,29430],{"__ignoreMap":23},[28,29431,29432,29434,29437,29440,29443,29446],{"class":30,"line":31},[28,29433,26816],{"class":2225},[28,29435,29436],{"class":127}," buildx",[28,29438,29439],{"class":127}," create",[28,29441,29442],{"class":60}," --name",[28,29444,29445],{"class":127}," multiarch_builder",[28,29447,29448],{"class":60}," --use\n",[14,29450,29451],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29453,29454],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[18,29456,29458],{"className":24084,"code":29457,"language":24086,"meta":23,"style":23},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[25,29459,29460],{"__ignoreMap":23},[28,29461,29462,29464,29466,29468,29471,29474,29477,29480],{"class":30,"line":31},[28,29463,26816],{"class":2225},[28,29465,27493],{"class":127},[28,29467,27496],{"class":60},[28,29469,29470],{"class":60}," --privileged",[28,29472,29473],{"class":127}," multiarch\u002Fqemu-user-static",[28,29475,29476],{"class":60}," --reset",[28,29478,29479],{"class":60}," -p",[28,29481,29482],{"class":127}," yes\n",[14,29484,29485],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29487,29488],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[18,29490,29492],{"className":24084,"code":29491,"language":24086,"meta":23,"style":23},"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",[25,29493,29494,29536,29540,29545,29555,29565,29574,29580,29584,29588,29598,29606,29615,29621,29625,29629,29639,29647,29656,29662,29666,29670,29680,29688,29697,29703,29707,29711,29721,29729,29738,29744,29748,29752,29762,29770,29779,29785,29789,29793,29803,29811,29820,29826,29830,29834,29844,29852,29861,29867,29871,29875,29885,29893,29902,29908,29912,29916,29927,29935,29944,29950],{"__ignoreMap":23},[28,29495,29496,29498,29500,29502,29505,29508,29510,29512,29515,29517,29519,29521,29523,29526,29529,29531,29534],{"class":30,"line":31},[28,29497,26816],{"class":2225},[28,29499,29436],{"class":127},[28,29501,28995],{"class":127},[28,29503,29504],{"class":60}," --platform",[28,29506,29507],{"class":127}," linux\u002Famd64,linux\u002Farm64",[28,29509,28998],{"class":60},[28,29511,29165],{"class":34},[28,29513,29514],{"class":127},"你的镜像",[28,29516,29171],{"class":38},[28,29518,1357],{"class":34},[28,29520,1256],{"class":127},[28,29522,1307],{"class":34},[28,29524,29525],{"class":127},"标",[28,29527,29528],{"class":38},"签",[28,29530,1357],{"class":34},[28,29532,29533],{"class":60}," --push",[28,29535,29004],{"class":127},[28,29537,29538],{"class":30,"line":48},[28,29539,2662],{"emptyLinePlaceholder":336},[28,29541,29542],{"class":30,"line":84},[28,29543,29544],{"class":87},"# 例子：\n",[28,29546,29547,29549,29551,29553],{"class":30,"line":91},[28,29548,26816],{"class":2225},[28,29550,29436],{"class":127},[28,29552,28995],{"class":127},[28,29554,24941],{"class":60},[28,29556,29557,29560,29563],{"class":30,"line":97},[28,29558,29559],{"class":38},"--platform ",[28,29561,29562],{"class":127},"linux\u002Famd64,linux\u002Farm64",[28,29564,24941],{"class":60},[28,29566,29567,29569,29572],{"class":30,"line":103},[28,29568,28998],{"class":60},[28,29570,29571],{"class":127}," tungchiahui\u002Fros:noetic-focal",[28,29573,24941],{"class":60},[28,29575,29576,29578],{"class":30,"line":109},[28,29577,29533],{"class":60},[28,29579,24941],{"class":60},[28,29581,29582],{"class":30,"line":118},[28,29583,29004],{"class":127},[28,29585,29586],{"class":30,"line":124},[28,29587,2662],{"emptyLinePlaceholder":336},[28,29589,29590,29592,29594,29596],{"class":30,"line":131},[28,29591,26816],{"class":2225},[28,29593,29436],{"class":127},[28,29595,28995],{"class":127},[28,29597,24941],{"class":60},[28,29599,29600,29602,29604],{"class":30,"line":137},[28,29601,29559],{"class":38},[28,29603,29562],{"class":127},[28,29605,24941],{"class":60},[28,29607,29608,29610,29613],{"class":30,"line":143},[28,29609,28998],{"class":60},[28,29611,29612],{"class":127}," tungchiahui\u002Fros:humble-jammy",[28,29614,24941],{"class":60},[28,29616,29617,29619],{"class":30,"line":149},[28,29618,29533],{"class":60},[28,29620,24941],{"class":60},[28,29622,29623],{"class":30,"line":1890},[28,29624,29004],{"class":127},[28,29626,29627],{"class":30,"line":1904},[28,29628,2662],{"emptyLinePlaceholder":336},[28,29630,29631,29633,29635,29637],{"class":30,"line":1909},[28,29632,26816],{"class":2225},[28,29634,29436],{"class":127},[28,29636,28995],{"class":127},[28,29638,24941],{"class":60},[28,29640,29641,29643,29645],{"class":30,"line":1915},[28,29642,29559],{"class":38},[28,29644,29562],{"class":127},[28,29646,24941],{"class":60},[28,29648,29649,29651,29654],{"class":30,"line":1936},[28,29650,28998],{"class":60},[28,29652,29653],{"class":127}," tungchiahui\u002Fros:jazzy-noble",[28,29655,24941],{"class":60},[28,29657,29658,29660],{"class":30,"line":1941},[28,29659,29533],{"class":60},[28,29661,24941],{"class":60},[28,29663,29664],{"class":30,"line":1955},[28,29665,29004],{"class":127},[28,29667,29668],{"class":30,"line":1960},[28,29669,2662],{"emptyLinePlaceholder":336},[28,29671,29672,29674,29676,29678],{"class":30,"line":1989},[28,29673,26583],{"class":2225},[28,29675,29436],{"class":127},[28,29677,28995],{"class":127},[28,29679,24941],{"class":60},[28,29681,29682,29684,29686],{"class":30,"line":1994},[28,29683,29559],{"class":38},[28,29685,29562],{"class":127},[28,29687,24941],{"class":60},[28,29689,29690,29692,29695],{"class":30,"line":2011},[28,29691,28998],{"class":60},[28,29693,29694],{"class":127}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[28,29696,24941],{"class":60},[28,29698,29699,29701],{"class":30,"line":2016},[28,29700,29533],{"class":60},[28,29702,24941],{"class":60},[28,29704,29705],{"class":30,"line":2021},[28,29706,29004],{"class":127},[28,29708,29709],{"class":30,"line":2026},[28,29710,2662],{"emptyLinePlaceholder":336},[28,29712,29713,29715,29717,29719],{"class":30,"line":2040},[28,29714,26816],{"class":2225},[28,29716,29436],{"class":127},[28,29718,28995],{"class":127},[28,29720,24941],{"class":60},[28,29722,29723,29725,29727],{"class":30,"line":2045},[28,29724,29559],{"class":38},[28,29726,29562],{"class":127},[28,29728,24941],{"class":60},[28,29730,29731,29733,29736],{"class":30,"line":2839},[28,29732,28998],{"class":60},[28,29734,29735],{"class":127}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[28,29737,24941],{"class":60},[28,29739,29740,29742],{"class":30,"line":2853},[28,29741,29533],{"class":60},[28,29743,24941],{"class":60},[28,29745,29746],{"class":30,"line":2861},[28,29747,29004],{"class":127},[28,29749,29750],{"class":30,"line":2866},[28,29751,2662],{"emptyLinePlaceholder":336},[28,29753,29754,29756,29758,29760],{"class":30,"line":2872},[28,29755,26583],{"class":2225},[28,29757,29436],{"class":127},[28,29759,28995],{"class":127},[28,29761,24941],{"class":60},[28,29763,29764,29766,29768],{"class":30,"line":2878},[28,29765,29559],{"class":38},[28,29767,29562],{"class":127},[28,29769,24941],{"class":60},[28,29771,29772,29774,29777],{"class":30,"line":2883},[28,29773,28998],{"class":60},[28,29775,29776],{"class":127}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[28,29778,24941],{"class":60},[28,29780,29781,29783],{"class":30,"line":8210},[28,29782,29533],{"class":60},[28,29784,24941],{"class":60},[28,29786,29787],{"class":30,"line":8234},[28,29788,29004],{"class":127},[28,29790,29791],{"class":30,"line":8239},[28,29792,2662],{"emptyLinePlaceholder":336},[28,29794,29795,29797,29799,29801],{"class":30,"line":8245},[28,29796,26816],{"class":2225},[28,29798,29436],{"class":127},[28,29800,28995],{"class":127},[28,29802,24941],{"class":60},[28,29804,29805,29807,29809],{"class":30,"line":8272},[28,29806,29559],{"class":38},[28,29808,29562],{"class":127},[28,29810,24941],{"class":60},[28,29812,29813,29815,29818],{"class":30,"line":8277},[28,29814,28998],{"class":60},[28,29816,29817],{"class":127}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[28,29819,24941],{"class":60},[28,29821,29822,29824],{"class":30,"line":8283},[28,29823,29533],{"class":60},[28,29825,24941],{"class":60},[28,29827,29828],{"class":30,"line":8295},[28,29829,29004],{"class":127},[28,29831,29832],{"class":30,"line":8307},[28,29833,2662],{"emptyLinePlaceholder":336},[28,29835,29836,29838,29840,29842],{"class":30,"line":8319},[28,29837,26816],{"class":2225},[28,29839,29436],{"class":127},[28,29841,28995],{"class":127},[28,29843,24941],{"class":60},[28,29845,29846,29848,29850],{"class":30,"line":9978},[28,29847,29559],{"class":38},[28,29849,29562],{"class":127},[28,29851,24941],{"class":60},[28,29853,29854,29856,29859],{"class":30,"line":10003},[28,29855,28998],{"class":60},[28,29857,29858],{"class":127}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29860,24941],{"class":60},[28,29862,29863,29865],{"class":30,"line":10026},[28,29864,29533],{"class":60},[28,29866,24941],{"class":60},[28,29868,29869],{"class":30,"line":10050},[28,29870,29004],{"class":127},[28,29872,29873],{"class":30,"line":10055},[28,29874,2662],{"emptyLinePlaceholder":336},[28,29876,29877,29879,29881,29883],{"class":30,"line":10060},[28,29878,26583],{"class":2225},[28,29880,29436],{"class":127},[28,29882,28995],{"class":127},[28,29884,24941],{"class":60},[28,29886,29887,29889,29891],{"class":30,"line":10065},[28,29888,29559],{"class":38},[28,29890,29562],{"class":127},[28,29892,24941],{"class":60},[28,29894,29895,29897,29900],{"class":30,"line":10074},[28,29896,28998],{"class":60},[28,29898,29899],{"class":127}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[28,29901,24941],{"class":60},[28,29903,29904,29906],{"class":30,"line":10079},[28,29905,29533],{"class":60},[28,29907,24941],{"class":60},[28,29909,29910],{"class":30,"line":10085},[28,29911,29004],{"class":127},[28,29913,29914],{"class":30,"line":10106},[28,29915,2662],{"emptyLinePlaceholder":336},[28,29917,29918,29921,29923,29925],{"class":30,"line":10112},[28,29919,29920],{"class":2225},"  docker",[28,29922,29436],{"class":127},[28,29924,28995],{"class":127},[28,29926,24941],{"class":60},[28,29928,29929,29931,29933],{"class":30,"line":10126},[28,29930,29559],{"class":38},[28,29932,29562],{"class":127},[28,29934,24941],{"class":60},[28,29936,29937,29939,29942],{"class":30,"line":10132},[28,29938,28998],{"class":60},[28,29940,29941],{"class":127}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29943,24941],{"class":60},[28,29945,29946,29948],{"class":30,"line":10159},[28,29947,29533],{"class":60},[28,29949,24941],{"class":60},[28,29951,29952],{"class":30,"line":10168},[28,29953,29004],{"class":127},[14,29955,29956],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29958,29959],{},[1727,29960],{"alt":23,"src":29961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29963,29964],{},[1727,29965],{"alt":23,"src":29966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22260,29968,29970],{"id":29969},"_623清除构建缓存","6.2.3.清除构建缓存",[18,29972,29974],{"className":24084,"code":29973,"language":24086,"meta":23,"style":23},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[25,29975,29976,29981],{"__ignoreMap":23},[28,29977,29978],{"class":30,"line":31},[28,29979,29980],{"class":87},"# 清理BuildKit构建缓存\n",[28,29982,29983,29985,29988,29991],{"class":30,"line":48},[28,29984,26816],{"class":2225},[28,29986,29987],{"class":127}," builder",[28,29989,29990],{"class":127}," prune",[28,29992,29993],{"class":60}," -f\n",[14,29995,29996],{},[1727,29997],{"alt":23,"src":29998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[380,30000,30002],{"id":30001},"_63补充","6.3.补充",[22260,30004,30006],{"id":30005},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30008,30009],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30011,30012],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30014,30015],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[18,30017,30019],{"className":24084,"code":30018,"language":24086,"meta":23,"style":23},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[25,30020,30021,30028],{"__ignoreMap":23},[28,30022,30023,30025],{"class":30,"line":31},[28,30024,27633],{"class":2225},[28,30026,30027],{"class":127}," nginx\n",[28,30029,30030,30032,30035,30038,30040],{"class":30,"line":48},[28,30031,28818],{"class":2225},[28,30033,30034],{"class":127}," echo",[28,30036,30037],{"class":127}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[28,30039,26485],{"class":34},[28,30041,30042],{"class":127}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30044,30045],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30047,30048],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[18,30050,30052],{"className":24084,"code":30051,"language":24086,"meta":23,"style":23},"docker build -t nginx:tuling .\n",[25,30053,30054],{"__ignoreMap":23},[28,30055,30056,30058,30060,30062,30065],{"class":30,"line":31},[28,30057,26816],{"class":2225},[28,30059,28995],{"class":127},[28,30061,28998],{"class":60},[28,30063,30064],{"class":127}," nginx:tuling",[28,30066,29004],{"class":127},[14,30068,30069],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30071,30072],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[18,30074,30076],{"className":24084,"code":30075,"language":24086,"meta":23,"style":23},"docker run -d -p 92:80 nginx:tuling\n",[25,30077,30078],{"__ignoreMap":23},[28,30079,30080,30082,30084,30087,30089,30092],{"class":30,"line":31},[28,30081,26816],{"class":2225},[28,30083,27493],{"class":127},[28,30085,30086],{"class":60}," -d",[28,30088,29479],{"class":60},[28,30090,30091],{"class":127}," 92:80",[28,30093,30094],{"class":127}," nginx:tuling\n",[14,30096,30097,30098],{},"4、访问 ",[51,30099,30102],{"href":30100,"rel":30101},"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",[24127],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30104,30105],{},[1727,30106],{"alt":23,"src":30107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30109,30110],{},[1727,30111],{"alt":23,"src":30112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22260,30114,30116],{"id":30115},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30118,30119],{},"只需要知道大体流程即可",[14,30121,30122],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30124,30125],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30127,30128],{},"2、在Dockerfile中添加以下内容",[18,30130,30132],{"className":26354,"code":30131,"language":26356,"meta":23,"style":23},"# 基于哪个镜像\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",[25,30133,30134,30139,30144,30149,30154,30159,30164,30169],{"__ignoreMap":23},[28,30135,30136],{"class":30,"line":31},[28,30137,30138],{},"# 基于哪个镜像\n",[28,30140,30141],{"class":30,"line":48},[28,30142,30143],{},"From java:8\n",[28,30145,30146],{"class":30,"line":84},[28,30147,30148],{},"# 复制文件到容器\n",[28,30150,30151],{"class":30,"line":91},[28,30152,30153],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[28,30155,30156],{"class":30,"line":97},[28,30157,30158],{},"# 声明需要暴露的端口\n",[28,30160,30161],{"class":30,"line":103},[28,30162,30163],{},"EXPOSE 8877\n",[28,30165,30166],{"class":30,"line":109},[28,30167,30168],{},"# 配置容器启动后执行的命令\n",[28,30170,30171],{"class":30,"line":118},[28,30172,30173],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30175,30176],{},"3、使用docker build命令构建镜像",[18,30178,30180],{"className":24084,"code":30179,"language":24086,"meta":23,"style":23},"docker build -t tulingmall-member:0.0.5 .\n",[25,30181,30182],{"__ignoreMap":23},[28,30183,30184,30186,30188,30190,30193],{"class":30,"line":31},[28,30185,26816],{"class":2225},[28,30187,28995],{"class":127},[28,30189,28998],{"class":60},[28,30191,30192],{"class":127}," tulingmall-member:0.0.5",[28,30194,29004],{"class":127},[14,30196,30197],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30199,30200],{},[1727,30201],{"alt":23,"src":30202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30204,30205],{},"4、启动镜像，加-d可在后台启动",[18,30207,30209],{"className":24084,"code":30208,"language":24086,"meta":23,"style":23},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[25,30210,30211],{"__ignoreMap":23},[28,30212,30213,30215,30217,30219,30221,30224],{"class":30,"line":31},[28,30214,26816],{"class":2225},[28,30216,27493],{"class":127},[28,30218,30086],{"class":60},[28,30220,29479],{"class":60},[28,30222,30223],{"class":127}," 8877:8877",[28,30225,30226],{"class":127}," tulingmall-member:0.0.5\n",[14,30228,30229],{},"加上JVM参数：",[18,30231,30233],{"className":24084,"code":30232,"language":24086,"meta":23,"style":23},"# --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",[25,30234,30235,30240,30255,30265,30274,30281],{"__ignoreMap":23},[28,30236,30237],{"class":30,"line":31},[28,30238,30239],{"class":87},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[28,30241,30242,30244,30246,30249,30251,30253],{"class":30,"line":48},[28,30243,26816],{"class":2225},[28,30245,27493],{"class":127},[28,30247,30248],{"class":60},"  -d",[28,30250,29479],{"class":60},[28,30252,30223],{"class":127},[28,30254,24941],{"class":60},[28,30256,30257,30259,30262],{"class":30,"line":84},[28,30258,28391],{"class":38},[28,30260,30261],{"class":127},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[28,30263,30264],{"class":60},"  \\\n",[28,30266,30267,30269,30272],{"class":30,"line":91},[28,30268,28391],{"class":38},[28,30270,30271],{"class":127},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[28,30273,30264],{"class":60},[28,30275,30276,30279],{"class":30,"line":97},[28,30277,30278],{"class":38},"--cap-add=SYS_PTRACE  ",[28,30280,26438],{"class":60},[28,30282,30283],{"class":30,"line":103},[28,30284,30285],{"class":38},"tulingmall-member:0.0.5\n",[14,30287,30288],{},"5、访问会员服务接口",[14,30290,30291],{},[1727,30292],{"alt":23,"src":30293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22260,30295,30297],{"id":30296},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30299,30300],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30302,30303,30304],{},"阿里云docker镜像仓库：",[51,30305,30306],{"href":30306,"rel":30307},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24127],[14,30309,30310],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30312,30313],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30315,30316],{},[1727,30317],{"alt":23,"src":30318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30320,30321],{},"要把镜像推送到镜像仓库",[18,30323,30325],{"className":24084,"code":30324,"language":24086,"meta":23,"style":23},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30326,30327],{"__ignoreMap":23},[28,30328,30329,30331,30333,30335],{"class":30,"line":31},[28,30330,26816],{"class":2225},[28,30332,29160],{"class":127},[28,30334,30192],{"class":127},[28,30336,30337],{"class":127}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30339,30340],{},"最后将镜像推送到远程仓库",[18,30342,30344],{"className":24084,"code":30343,"language":24086,"meta":23,"style":23},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30345,30346],{"__ignoreMap":23},[28,30347,30348,30350,30352],{"class":30,"line":31},[28,30349,26816],{"class":2225},[28,30351,29279],{"class":127},[28,30353,30337],{"class":127},[328,30355,30356],{},"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":23,"searchDepth":48,"depth":48,"links":30358},[30359,30360,30361],{"id":28746,"depth":84,"text":28747},{"id":28975,"depth":84,"text":28976},{"id":30001,"depth":84,"text":30002},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28738,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30368,"title":30369,"body":30370,"description":23,"extension":334,"meta":30513,"navigation":336,"path":30514,"seo":30515,"stem":30516,"__hash__":30517},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30371,"toc":30511},[30372,30375,30380,30385,30388,30393,30398,30401,30406,30411,30414,30419,30422,30425,30428,30431,30434,30437,30457,30479,30482,30485,30505,30508],[10,30373,30369],{"id":30374},"_7vscode远程开发",[363,30376,30377],{},[366,30378,30379],{},"插件1：微软Docker工具",[14,30381,30382],{},[1727,30383],{"alt":23,"src":30384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30386,30387],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30389,30390],{},[1727,30391],{"alt":23,"src":30392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[363,30394,30395],{"start":48},[366,30396,30397],{},"插件2：微软Docker远程开发工具",[14,30399,30400],{},"下面这是远程开发的插件。",[14,30402,30403],{},[1727,30404],{"alt":23,"src":30405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30407,30408],{},[1727,30409],{"alt":23,"src":30410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30412,30413],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30415,30416],{},[1727,30417],{"alt":23,"src":30418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30420,30421],{},"安装完拓展之后，vscode进行链接：",[14,30423,30424],{},"1.按ctrl+shift+p",[14,30426,30427],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30429,30430],{},"3.选择目前运行的容器",[14,30432,30433],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30435,30436],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[18,30438,30440],{"className":24084,"code":30439,"language":24086,"meta":23,"style":23},"docker run -v 主机目录:容器目录 image-name\n",[25,30441,30442],{"__ignoreMap":23},[28,30443,30444,30446,30448,30451,30454],{"class":30,"line":31},[28,30445,26816],{"class":2225},[28,30447,27493],{"class":127},[28,30449,30450],{"class":60}," -v",[28,30452,30453],{"class":127}," 主机目录:容器目录",[28,30455,30456],{"class":127}," image-name\n",[18,30458,30460],{"className":24084,"code":30459,"language":24086,"meta":23,"style":23},"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",[25,30461,30462],{"__ignoreMap":23},[28,30463,30464,30466,30468,30471,30473,30476],{"class":30,"line":31},[28,30465,26816],{"class":2225},[28,30467,27493],{"class":127},[28,30469,30470],{"class":60}," -it",[28,30472,30450],{"class":60},[28,30474,30475],{"class":127}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[28,30477,30478],{"class":127}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30480,30481],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30483,30484],{},"查看挂载情况：",[18,30486,30488],{"className":24084,"code":30487,"language":24086,"meta":23,"style":23},"mount | grep -i project\n",[25,30489,30490],{"__ignoreMap":23},[28,30491,30492,30495,30497,30500,30502],{"class":30,"line":31},[28,30493,30494],{"class":2225},"mount",[28,30496,25372],{"class":34},[28,30498,30499],{"class":2225}," grep",[28,30501,26693],{"class":60},[28,30503,30504],{"class":127}," project\n",[14,30506,30507],{},"也可以通过ls来进行查看",[328,30509,30510],{},"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":23,"searchDepth":48,"depth":48,"links":30512},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30369,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30519,"title":30520,"body":30521,"description":333,"extension":334,"meta":30525,"navigation":336,"path":30527,"seo":30528,"stem":30529,"__hash__":30530},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30522,"toc":30523},[],{"title":23,"searchDepth":48,"depth":48,"links":30524},[],{"category":30526},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30520,"description":333},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30532,"title":30533,"body":30534,"description":333,"extension":334,"meta":30538,"navigation":336,"path":30539,"seo":30540,"stem":30541,"__hash__":30542},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30535,"toc":30536},[],{"title":23,"searchDepth":48,"depth":48,"links":30537},[],{"category":30526},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30533,"description":333},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30544,"title":30545,"body":30546,"description":333,"extension":334,"meta":30836,"navigation":336,"path":30837,"seo":30838,"stem":30839,"__hash__":30840},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30547,"toc":30834},[30548,30551,30559,30574,30579,30630,30633,30639,30823,30828,30831],[10,30549,30545],{"id":30550},"_1验证深度学习环境",[14,30552,30553,30554],{},"关于环境的安装，看",[51,30555,30558],{"href":30556,"rel":30557},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24127],"Pytorch-->深度学习",[14,30560,30561,30562,30565,30566,30569,30570,30573],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[25,30563,30564],{},"pytorch-cuda=12.4"," 是一个“ ",[555,30567,30568],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[555,30571,30572],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30575,30576],{},[1727,30577],{"alt":23,"src":30578},"\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",[18,30580,30582],{"className":24084,"code":30581,"language":24086,"meta":23,"style":23},"# 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",[25,30583,30584,30589],{"__ignoreMap":23},[28,30585,30586],{"class":30,"line":31},[28,30587,30588],{"class":87},"# CUDA 12.4\n",[28,30590,30591,30594,30596,30599,30602,30605,30608,30611,30613,30616,30619,30622,30625,30627],{"class":30,"line":48},[28,30592,30593],{"class":2225},"conda",[28,30595,24096],{"class":127},[28,30597,30598],{"class":127}," pytorch==",[28,30600,30601],{"class":60},"2.5.1",[28,30603,30604],{"class":127}," torchvision==",[28,30606,30607],{"class":60},"0.20.1",[28,30609,30610],{"class":127}," torchaudio==",[28,30612,30601],{"class":60},[28,30614,30615],{"class":127}," pytorch-cuda=",[28,30617,30618],{"class":60},"12.4",[28,30620,30621],{"class":60}," -c",[28,30623,30624],{"class":127}," pytorch",[28,30626,30621],{"class":60},[28,30628,30629],{"class":127}," nvidia\n",[14,30631,30632],{},"）：",[14,30634,30635],{},[51,30636,30637],{"href":30637,"rel":30638},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24127],[18,30640,30642],{"className":20,"code":30641,"language":22,"meta":23,"style":23},"# 对深度学习环境进行测试\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",[25,30643,30644,30649,30656,30661,30671,30687,30692,30702,30739,30746,30758,30774,30779,30789,30801,30811],{"__ignoreMap":23},[28,30645,30646],{"class":30,"line":31},[28,30647,30648],{"class":87},"# 对深度学习环境进行测试\n",[28,30650,30651,30653],{"class":30,"line":48},[28,30652,35],{"class":34},[28,30654,30655],{"class":38}," torch\n",[28,30657,30658],{"class":30,"line":84},[28,30659,30660],{"class":87},"# 查看cuda是否被激活\n",[28,30662,30663,30666,30668],{"class":30,"line":91},[28,30664,30665],{"class":38},"flag",[28,30667,54],{"class":34},[28,30669,30670],{"class":38},"torch.cuda.is_available()\n",[28,30672,30673,30676,30678,30681,30684],{"class":30,"line":97},[28,30674,30675],{"class":60},"print",[28,30677,413],{"class":38},[28,30679,30680],{"class":127},"\"cuda:\"",[28,30682,30683],{"class":38},", flag)   ",[28,30685,30686],{"class":87},"#返回true的话说明被激活\n",[28,30688,30689],{"class":30,"line":103},[28,30690,30691],{"class":87},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[28,30693,30694,30697,30699],{"class":30,"line":109},[28,30695,30696],{"class":38},"ngpu",[28,30698,54],{"class":34},[28,30700,30701],{"class":60},"1\n",[28,30703,30704,30707,30709,30712,30715,30717,30720,30723,30726,30728,30730,30732,30734,30737],{"class":30,"line":118},[28,30705,30706],{"class":38},"device",[28,30708,54],{"class":34},[28,30710,30711],{"class":38},"torch.device(",[28,30713,30714],{"class":127},"\"cuda:0\"",[28,30716,1966],{"class":34},[28,30718,30719],{"class":38},"(torch.cuda.is_available() ",[28,30721,30722],{"class":34},"and",[28,30724,30725],{"class":38}," ngpu",[28,30727,1357],{"class":34},[28,30729,244],{"class":60},[28,30731,13976],{"class":38},[28,30733,1963],{"class":34},[28,30735,30736],{"class":127}," \"cpu\"",[28,30738,81],{"class":38},[28,30740,30741,30743],{"class":30,"line":124},[28,30742,30675],{"class":60},[28,30744,30745],{"class":38},"(device)\n",[28,30747,30748,30750,30753,30755],{"class":30,"line":131},[28,30749,30675],{"class":60},[28,30751,30752],{"class":38},"(torch.cuda.get_device_name(",[28,30754,244],{"class":60},[28,30756,30757],{"class":38},"))\n",[28,30759,30760,30762,30765,30767,30769,30771],{"class":30,"line":137},[28,30761,30675],{"class":60},[28,30763,30764],{"class":38},"(torch.rand(",[28,30766,78],{"class":60},[28,30768,64],{"class":38},[28,30770,78],{"class":60},[28,30772,30773],{"class":38},").cuda())\n",[28,30775,30776],{"class":30,"line":143},[28,30777,30778],{"class":87},"# 查看cuda和cudnn的版本\n",[28,30780,30781,30784,30786],{"class":30,"line":149},[28,30782,30783],{"class":38},"cuda_version",[28,30785,54],{"class":34},[28,30787,30788],{"class":38},"torch.version.cuda\n",[28,30790,30791,30793,30795,30798],{"class":30,"line":1890},[28,30792,30675],{"class":60},[28,30794,413],{"class":38},[28,30796,30797],{"class":127},"\"cuda version\"",[28,30799,30800],{"class":38},",cuda_version)\n",[28,30802,30803,30806,30808],{"class":30,"line":1904},[28,30804,30805],{"class":38},"cudnn_version",[28,30807,54],{"class":34},[28,30809,30810],{"class":38},"torch.backends.cudnn.version()\n",[28,30812,30813,30815,30817,30820],{"class":30,"line":1909},[28,30814,30675],{"class":60},[28,30816,413],{"class":38},[28,30818,30819],{"class":127},"\"cudnn version\"",[28,30821,30822],{"class":38},",cudnn_version)\n",[14,30824,30825],{},[1727,30826],{"alt":23,"src":30827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30829,30830],{},"cuda:0 指的是一块显卡",[328,30832,30833],{},"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":23,"searchDepth":48,"depth":48,"links":30835},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30545,"description":333},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30842,"title":30843,"body":30844,"description":333,"extension":334,"meta":50644,"navigation":336,"path":50645,"seo":50646,"stem":50647,"__hash__":50648},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30845,"toc":50638},[30846,30849,30853,30857,30860,30865,30870,30873,30878,30883,30888,30891,30895,30900,30904,30909,30912,30917,30920,30923,30926,30929,30934,30937,30942,30947,30952,30957,30960,30964,30967,30972,31576,31581,31584,31589,31592,31595,32055,32058,32061,32064,32067,34118,34121,34126,34131,34926,34929,34934,35712,35716,37375,37379,38093,38097,38101,38106,38111,38116,38119,38124,38129,38134,38139,38144,38148,38153,39435,39440,39443,39446,39449,39604,39607,39610,40826,40831,41526,41530,41534,41539,41544,41547,41552,41557,41562,41567,41572,41577,41582,41587,41592,41597,41602,41607,41612,41617,41622,41627,41632,41637,41642,41647,41652,41657,41662,41667,41672,41677,41682,41687,41692,41697,41701,41705,41708,43186,43190,44837,44841,45535,45539,45542,45545,46089,46092,46096,46099,47496,47500,47503,48081,49868,49872,49875,50635],[10,30847,30843],{"id":30848},"_2经典神经网络",[380,30850,30852],{"id":30851},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22260,30854,30856],{"id":30855},"_211原理介绍","2.1.1.原理介绍",[14,30858,30859],{},"LeNet-5",[363,30861,30862],{},[366,30863,30864],{},"原理",[14,30866,30867],{},[1727,30868],{"alt":23,"src":30869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30871,30872],{},"B是batch批次；C是channel通道",[363,30874,30875],{"start":48},[366,30876,30877],{},"网络参数详细",[14,30879,30880],{},[1727,30881],{"alt":23,"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-004.png",[14,30884,30885],{},[1727,30886],{"alt":23,"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-005.png",[14,30889,30890],{},"AlexNet",[363,30892,30893],{},[366,30894,30864],{},[14,30896,30897],{},[1727,30898],{"alt":23,"src":30899},"\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",[363,30901,30902],{"start":48},[366,30903,30877],{},[14,30905,30906],{},[1727,30907],{"alt":23,"src":30908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30910,30911],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30913,30914],{},[1727,30915],{"alt":23,"src":30916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30918,30919],{},"数据处理中的图像增强操作:",[14,30921,30922],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30924,30925],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30927,30928],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30930,30931],{},[1727,30932],{"alt":23,"src":30933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30935,30936],{},"提升网络精确度的方法：LRN正则化",[14,30938,30939],{},[1727,30940],{"alt":23,"src":30941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30943,30944],{},[1727,30945],{"alt":23,"src":30946},"\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",[363,30948,30949],{"start":84},[366,30950,30951],{},"AlexNet的总结",[14,30953,30954],{},[1727,30955],{"alt":23,"src":30956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30958,30959],{},"比LeNet模型要深一丢丢",[22260,30961,30963],{"id":30962},"_212代码实现","2.1.2.代码实现",[14,30965,30966],{},"（1）LeNet",[363,30968,30969],{},[366,30970,30971],{},"模型搭建",[18,30973,30975],{"className":20,"code":30974,"language":22,"meta":23,"style":23},"# 导入库\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",[25,30976,30977,30982,30988,30993,31006,31011,31023,31027,31047,31052,31057,31068,31073,31092,31096,31101,31150,31162,31167,31196,31231,31258,31263,31275,31280,31300,31319,31338,31342,31347,31357,31374,31385,31400,31411,31422,31437,31452,31463,31470,31474,31488,31493,31516,31521,31526,31531,31535,31540,31545,31555],{"__ignoreMap":23},[28,30978,30979],{"class":30,"line":31},[28,30980,30981],{"class":87},"# 导入库\n",[28,30983,30984,30986],{"class":30,"line":48},[28,30985,35],{"class":34},[28,30987,30655],{"class":38},[28,30989,30990],{"class":30,"line":84},[28,30991,30992],{"class":87},"# 导入神经网络层\n",[28,30994,30995,30998,31001,31003],{"class":30,"line":91},[28,30996,30997],{"class":34},"from",[28,30999,31000],{"class":38}," torch ",[28,31002,35],{"class":34},[28,31004,31005],{"class":38}," nn\n",[28,31007,31008],{"class":30,"line":97},[28,31009,31010],{"class":87},"# 导入展示神经网络参数的包\n",[28,31012,31013,31015,31018,31020],{"class":30,"line":103},[28,31014,30997],{"class":34},[28,31016,31017],{"class":38}," torchsummary ",[28,31019,35],{"class":34},[28,31021,31022],{"class":38}," summary\n",[28,31024,31025],{"class":30,"line":109},[28,31026,2662],{"emptyLinePlaceholder":336},[28,31028,31029,31031,31034,31036,31039,31041,31044],{"class":30,"line":118},[28,31030,14956],{"class":34},[28,31032,31033],{"class":2225}," LeNet",[28,31035,413],{"class":38},[28,31037,31038],{"class":2225},"nn",[28,31040,956],{"class":38},[28,31042,31043],{"class":2225},"Module",[28,31045,31046],{"class":38},"):\n",[28,31048,31049],{"class":30,"line":124},[28,31050,31051],{"class":87},"    # 模型初始化:\n",[28,31053,31054],{"class":30,"line":131},[28,31055,31056],{"class":87},"    # 定义一些网络层和激活函数\n",[28,31058,31059,31062,31065],{"class":30,"line":137},[28,31060,31061],{"class":34},"    def",[28,31063,31064],{"class":60}," __init__",[28,31066,31067],{"class":38},"(self):\n",[28,31069,31070],{"class":30,"line":143},[28,31071,31072],{"class":87},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[28,31074,31075,31078,31081,31084,31087,31090],{"class":30,"line":149},[28,31076,31077],{"class":60},"        super",[28,31079,31080],{"class":38},"(LeNet,",[28,31082,31083],{"class":60},"self",[28,31085,31086],{"class":38},").",[28,31088,31089],{"class":60},"__init__",[28,31091,2238],{"class":38},[28,31093,31094],{"class":30,"line":1890},[28,31095,2662],{"emptyLinePlaceholder":336},[28,31097,31098],{"class":30,"line":1904},[28,31099,31100],{"class":87},"        # 定义网络层\n",[28,31102,31103,31106,31109,31111,31114,31117,31119,31121,31123,31126,31128,31130,31132,31135,31137,31139,31141,31144,31146,31148],{"class":30,"line":1909},[28,31104,31105],{"class":60},"        self",[28,31107,31108],{"class":38},".c1",[28,31110,54],{"class":34},[28,31112,31113],{"class":38},"nn.Conv2d(",[28,31115,31116],{"class":5478},"in_channels",[28,31118,54],{"class":34},[28,31120,61],{"class":60},[28,31122,64],{"class":38},[28,31124,31125],{"class":5478},"out_channels",[28,31127,54],{"class":34},[28,31129,206],{"class":60},[28,31131,64],{"class":38},[28,31133,31134],{"class":5478},"kernel_size",[28,31136,54],{"class":34},[28,31138,721],{"class":60},[28,31140,64],{"class":38},[28,31142,31143],{"class":5478},"padding",[28,31145,54],{"class":34},[28,31147,211],{"class":60},[28,31149,81],{"class":38},[28,31151,31152,31154,31157,31159],{"class":30,"line":1915},[28,31153,31105],{"class":60},[28,31155,31156],{"class":38},".sig",[28,31158,54],{"class":34},[28,31160,31161],{"class":38},"nn.Sigmoid()\n",[28,31163,31164],{"class":30,"line":1936},[28,31165,31166],{"class":87},"        # 定义池化\n",[28,31168,31169,31171,31174,31176,31179,31181,31183,31185,31187,31190,31192,31194],{"class":30,"line":1941},[28,31170,31105],{"class":60},[28,31172,31173],{"class":38},".s2",[28,31175,54],{"class":34},[28,31177,31178],{"class":38},"nn.AvgPool2d(",[28,31180,31134],{"class":5478},[28,31182,54],{"class":34},[28,31184,211],{"class":60},[28,31186,64],{"class":38},[28,31188,31189],{"class":5478},"stride",[28,31191,54],{"class":34},[28,31193,211],{"class":60},[28,31195,81],{"class":38},[28,31197,31198,31200,31203,31205,31207,31209,31211,31213,31215,31217,31219,31221,31223,31225,31227,31229],{"class":30,"line":1955},[28,31199,31105],{"class":60},[28,31201,31202],{"class":38},".c3",[28,31204,54],{"class":34},[28,31206,31113],{"class":38},[28,31208,31116],{"class":5478},[28,31210,54],{"class":34},[28,31212,206],{"class":60},[28,31214,64],{"class":38},[28,31216,31125],{"class":5478},[28,31218,54],{"class":34},[28,31220,999],{"class":60},[28,31222,64],{"class":38},[28,31224,31134],{"class":5478},[28,31226,54],{"class":34},[28,31228,721],{"class":60},[28,31230,81],{"class":38},[28,31232,31233,31235,31238,31240,31242,31244,31246,31248,31250,31252,31254,31256],{"class":30,"line":1960},[28,31234,31105],{"class":60},[28,31236,31237],{"class":38},".s4",[28,31239,54],{"class":34},[28,31241,31178],{"class":38},[28,31243,31134],{"class":5478},[28,31245,54],{"class":34},[28,31247,211],{"class":60},[28,31249,64],{"class":38},[28,31251,31189],{"class":5478},[28,31253,54],{"class":34},[28,31255,211],{"class":60},[28,31257,81],{"class":38},[28,31259,31260],{"class":30,"line":1989},[28,31261,31262],{"class":87},"        # 定义平展层\n",[28,31264,31265,31267,31270,31272],{"class":30,"line":1994},[28,31266,31105],{"class":60},[28,31268,31269],{"class":38},".flatten",[28,31271,54],{"class":34},[28,31273,31274],{"class":38},"nn.Flatten()\n",[28,31276,31277],{"class":30,"line":2011},[28,31278,31279],{"class":87},"        # 定义全连接层\n",[28,31281,31282,31284,31287,31289,31292,31294,31296,31298],{"class":30,"line":2016},[28,31283,31105],{"class":60},[28,31285,31286],{"class":38},".f5",[28,31288,54],{"class":34},[28,31290,31291],{"class":38},"nn.Linear(",[28,31293,4249],{"class":60},[28,31295,64],{"class":38},[28,31297,1215],{"class":60},[28,31299,81],{"class":38},[28,31301,31302,31304,31307,31309,31311,31313,31315,31317],{"class":30,"line":2021},[28,31303,31105],{"class":60},[28,31305,31306],{"class":38},".f6",[28,31308,54],{"class":34},[28,31310,31291],{"class":38},[28,31312,1215],{"class":60},[28,31314,64],{"class":38},[28,31316,1109],{"class":60},[28,31318,81],{"class":38},[28,31320,31321,31323,31326,31328,31330,31332,31334,31336],{"class":30,"line":2026},[28,31322,31105],{"class":60},[28,31324,31325],{"class":38},".f7",[28,31327,54],{"class":34},[28,31329,31291],{"class":38},[28,31331,1109],{"class":60},[28,31333,64],{"class":38},[28,31335,845],{"class":60},[28,31337,81],{"class":38},[28,31339,31340],{"class":30,"line":2040},[28,31341,2662],{"emptyLinePlaceholder":336},[28,31343,31344],{"class":30,"line":2045},[28,31345,31346],{"class":87},"    # 写工具->写前向传播\n",[28,31348,31349,31351,31354],{"class":30,"line":2839},[28,31350,31061],{"class":34},[28,31352,31353],{"class":2225}," forward",[28,31355,31356],{"class":38},"(self,x):\n",[28,31358,31359,31362,31364,31366,31369,31371],{"class":30,"line":2853},[28,31360,31361],{"class":38},"        x",[28,31363,54],{"class":34},[28,31365,31083],{"class":60},[28,31367,31368],{"class":38},".sig(",[28,31370,31083],{"class":60},[28,31372,31373],{"class":38},".c1(x))\n",[28,31375,31376,31378,31380,31382],{"class":30,"line":2861},[28,31377,31361],{"class":38},[28,31379,54],{"class":34},[28,31381,31083],{"class":60},[28,31383,31384],{"class":38},".s2(x)\n",[28,31386,31387,31389,31391,31393,31395,31397],{"class":30,"line":2866},[28,31388,31361],{"class":38},[28,31390,54],{"class":34},[28,31392,31083],{"class":60},[28,31394,31368],{"class":38},[28,31396,31083],{"class":60},[28,31398,31399],{"class":38},".c3(x))\n",[28,31401,31402,31404,31406,31408],{"class":30,"line":2872},[28,31403,31361],{"class":38},[28,31405,54],{"class":34},[28,31407,31083],{"class":60},[28,31409,31410],{"class":38},".s4(x)\n",[28,31412,31413,31415,31417,31419],{"class":30,"line":2878},[28,31414,31361],{"class":38},[28,31416,54],{"class":34},[28,31418,31083],{"class":60},[28,31420,31421],{"class":38},".flatten(x)\n",[28,31423,31424,31426,31428,31430,31432,31434],{"class":30,"line":2883},[28,31425,31361],{"class":38},[28,31427,54],{"class":34},[28,31429,31083],{"class":60},[28,31431,31368],{"class":38},[28,31433,31083],{"class":60},[28,31435,31436],{"class":38},".f5(x))\n",[28,31438,31439,31441,31443,31445,31447,31449],{"class":30,"line":8210},[28,31440,31361],{"class":38},[28,31442,54],{"class":34},[28,31444,31083],{"class":60},[28,31446,31368],{"class":38},[28,31448,31083],{"class":60},[28,31450,31451],{"class":38},".f6(x))\n",[28,31453,31454,31456,31458,31460],{"class":30,"line":8234},[28,31455,31361],{"class":38},[28,31457,54],{"class":34},[28,31459,31083],{"class":60},[28,31461,31462],{"class":38},".f7(x)\n",[28,31464,31465,31467],{"class":30,"line":8239},[28,31466,15014],{"class":34},[28,31468,31469],{"class":38}," x\n",[28,31471,31472],{"class":30,"line":8245},[28,31473,2662],{"emptyLinePlaceholder":336},[28,31475,31476,31478,31481,31483,31486],{"class":30,"line":8272},[28,31477,1796],{"class":34},[28,31479,31480],{"class":60}," __name__",[28,31482,3211],{"class":34},[28,31484,31485],{"class":127},"\"__main__\"",[28,31487,4001],{"class":38},[28,31489,31490],{"class":30,"line":8277},[28,31491,31492],{"class":87},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[28,31494,31495,31498,31500,31502,31505,31507,31510,31512,31514],{"class":30,"line":8283},[28,31496,31497],{"class":38},"    device",[28,31499,54],{"class":34},[28,31501,30711],{"class":38},[28,31503,31504],{"class":127},"\"cuda\"",[28,31506,1966],{"class":34},[28,31508,31509],{"class":38}," torch.cuda.is_available() ",[28,31511,1963],{"class":34},[28,31513,30736],{"class":127},[28,31515,81],{"class":38},[28,31517,31518],{"class":30,"line":8295},[28,31519,31520],{"class":87},"    # 如果就是想指定用cpu用下方代码:\n",[28,31522,31523],{"class":30,"line":8307},[28,31524,31525],{"class":87},"    # device=\"cpu\"\n",[28,31527,31528],{"class":30,"line":8319},[28,31529,31530],{"class":87},"    # print(device)\n",[28,31532,31533],{"class":30,"line":9978},[28,31534,2662],{"emptyLinePlaceholder":336},[28,31536,31537],{"class":30,"line":10003},[28,31538,31539],{"class":87},"    # 实例化模型\n",[28,31541,31542],{"class":30,"line":10026},[28,31543,31544],{"class":87},"    # 将模型放到设备中去运行\n",[28,31546,31547,31550,31552],{"class":30,"line":10050},[28,31548,31549],{"class":38},"    model",[28,31551,54],{"class":34},[28,31553,31554],{"class":38},"LeNet().to(device)\n",[28,31556,31557,31560,31563,31565,31567,31569,31571,31573],{"class":30,"line":10055},[28,31558,31559],{"class":60},"    print",[28,31561,31562],{"class":38},"(summary(model,(",[28,31564,61],{"class":60},[28,31566,64],{"class":38},[28,31568,1298],{"class":60},[28,31570,64],{"class":38},[28,31572,1298],{"class":60},[28,31574,31575],{"class":38},")))\n",[14,31577,31578],{},[1727,31579],{"alt":23,"src":31580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31582,31583],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[363,31585,31586],{"start":48},[366,31587,31588],{},"训练",[14,31590,31591],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31593,31594],{},"在训练之前可以将数据展示看一下",[18,31596,31598],{"className":20,"code":31597,"language":22,"meta":23,"style":23},"# 建立画图的函数，用于展示数据\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",[25,31599,31600,31605,31610,31622,31634,31644,31649,31661,31666,31678,31683,31695,31699,31703,31724,31736,31741,31762,31773,31777,31782,31800,31811,31816,31827,31832,31843,31847,31852,31867,31880,31885,31890,31903,31916,31929,31934,31938,31943,31963,31979,31999,32012,32025,32035,32050],{"__ignoreMap":23},[28,31601,31602],{"class":30,"line":31},[28,31603,31604],{"class":87},"# 建立画图的函数，用于展示数据\n",[28,31606,31607],{"class":30,"line":48},[28,31608,31609],{"class":87},"# torchvision中包含很多内置的数据集\n",[28,31611,31612,31614,31617,31619],{"class":30,"line":84},[28,31613,30997],{"class":34},[28,31615,31616],{"class":38}," sklearn.externals.array_api_compat.torch ",[28,31618,35],{"class":34},[28,31620,31621],{"class":38}," squeeze\n",[28,31623,31624,31626,31629,31631],{"class":30,"line":91},[28,31625,30997],{"class":34},[28,31627,31628],{"class":38}," torchvision.datasets ",[28,31630,35],{"class":34},[28,31632,31633],{"class":38}," FashionMNIST\n",[28,31635,31636,31638,31640,31642],{"class":30,"line":97},[28,31637,35],{"class":34},[28,31639,39],{"class":38},[28,31641,42],{"class":34},[28,31643,45],{"class":38},[28,31645,31646],{"class":30,"line":103},[28,31647,31648],{"class":87},"# 引入处理数据集的包\n",[28,31650,31651,31653,31656,31658],{"class":30,"line":109},[28,31652,30997],{"class":34},[28,31654,31655],{"class":38}," torchvision ",[28,31657,35],{"class":34},[28,31659,31660],{"class":38}," transforms\n",[28,31662,31663],{"class":30,"line":118},[28,31664,31665],{"class":87},"# 从torch库中引入数据处理的包\n",[28,31667,31668,31670,31673,31675],{"class":30,"line":124},[28,31669,35],{"class":34},[28,31671,31672],{"class":38}," torch.utils.data ",[28,31674,42],{"class":34},[28,31676,31677],{"class":38}," Data\n",[28,31679,31680],{"class":30,"line":131},[28,31681,31682],{"class":87},"# 导入画图的库\n",[28,31684,31685,31687,31690,31692],{"class":30,"line":137},[28,31686,35],{"class":34},[28,31688,31689],{"class":38}," matplotlib.pyplot ",[28,31691,42],{"class":34},[28,31693,31694],{"class":38}," plt\n",[28,31696,31697],{"class":30,"line":143},[28,31698,2662],{"emptyLinePlaceholder":336},[28,31700,31701],{"class":30,"line":149},[28,31702,2662],{"emptyLinePlaceholder":336},[28,31704,31705,31708,31710,31713,31716,31718,31721],{"class":30,"line":1890},[28,31706,31707],{"class":38},"train_data",[28,31709,54],{"class":34},[28,31711,31712],{"class":38},"FashionMNIST(",[28,31714,31715],{"class":5478},"root",[28,31717,54],{"class":34},[28,31719,31720],{"class":127},"'.\u002Fdata'",[28,31722,31723],{"class":38},",\n",[28,31725,31726,31729,31731,31734],{"class":30,"line":1904},[28,31727,31728],{"class":5478},"                        train",[28,31730,54],{"class":34},[28,31732,31733],{"class":60},"True",[28,31735,31723],{"class":38},[28,31737,31738],{"class":30,"line":1909},[28,31739,31740],{"class":87},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[28,31742,31743,31746,31748,31751,31754,31756,31759],{"class":30,"line":1915},[28,31744,31745],{"class":5478},"                        transform",[28,31747,54],{"class":34},[28,31749,31750],{"class":38},"transforms.Compose([transforms.Resize(",[28,31752,31753],{"class":5478},"size",[28,31755,54],{"class":34},[28,31757,31758],{"class":60},"224",[28,31760,31761],{"class":38},"),transforms.ToTensor()]),\n",[28,31763,31764,31767,31769,31771],{"class":30,"line":1936},[28,31765,31766],{"class":5478},"                        download",[28,31768,54],{"class":34},[28,31770,31733],{"class":60},[28,31772,81],{"class":38},[28,31774,31775],{"class":30,"line":1941},[28,31776,2662],{"emptyLinePlaceholder":336},[28,31778,31779],{"class":30,"line":1955},[28,31780,31781],{"class":87},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[28,31783,31784,31787,31789,31792,31795,31797],{"class":30,"line":1960},[28,31785,31786],{"class":38},"train_loader",[28,31788,54],{"class":34},[28,31790,31791],{"class":38},"Data.DataLoader(",[28,31793,31794],{"class":5478},"dataset",[28,31796,54],{"class":34},[28,31798,31799],{"class":38},"train_data,\n",[28,31801,31802,31805,31807,31809],{"class":30,"line":1989},[28,31803,31804],{"class":5478},"                             batch_size",[28,31806,54],{"class":34},[28,31808,608],{"class":60},[28,31810,31723],{"class":38},[28,31812,31813],{"class":30,"line":1994},[28,31814,31815],{"class":87},"                             # 数据是否打乱\n",[28,31817,31818,31821,31823,31825],{"class":30,"line":2011},[28,31819,31820],{"class":5478},"                             shuffle",[28,31822,54],{"class":34},[28,31824,31733],{"class":60},[28,31826,31723],{"class":38},[28,31828,31829],{"class":30,"line":2016},[28,31830,31831],{"class":87},"                             # 规定加载数据的进程\n",[28,31833,31834,31837,31839,31841],{"class":30,"line":2021},[28,31835,31836],{"class":5478},"                             num_workers",[28,31838,54],{"class":34},[28,31840,244],{"class":60},[28,31842,81],{"class":38},[28,31844,31845],{"class":30,"line":2026},[28,31846,2662],{"emptyLinePlaceholder":336},[28,31848,31849],{"class":30,"line":2040},[28,31850,31851],{"class":87},"# 获得一个batch的数据\n",[28,31853,31854,31856,31859,31861,31864],{"class":30,"line":2045},[28,31855,3287],{"class":34},[28,31857,31858],{"class":38}," step,(b_x,b_y) ",[28,31860,26306],{"class":34},[28,31862,31863],{"class":60}," enumerate",[28,31865,31866],{"class":38},"(train_loader):\n",[28,31868,31869,31871,31874,31876,31878],{"class":30,"line":2839},[28,31870,3363],{"class":34},[28,31872,31873],{"class":38}," step ",[28,31875,1357],{"class":34},[28,31877,4355],{"class":60},[28,31879,4001],{"class":38},[28,31881,31882],{"class":30,"line":2853},[28,31883,31884],{"class":34},"        break\n",[28,31886,31887],{"class":30,"line":2861},[28,31888,31889],{"class":87},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[28,31891,31892,31895,31897,31900],{"class":30,"line":2866},[28,31893,31894],{"class":38},"batch_x",[28,31896,54],{"class":34},[28,31898,31899],{"class":38},"b_x.squeeze().numpy()  ",[28,31901,31902],{"class":87},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[28,31904,31905,31908,31910,31913],{"class":30,"line":2872},[28,31906,31907],{"class":38},"batch_y",[28,31909,54],{"class":34},[28,31911,31912],{"class":38},"b_y.numpy()   ",[28,31914,31915],{"class":87},"#将张量转换成功numpy数组\n",[28,31917,31918,31921,31923,31926],{"class":30,"line":2878},[28,31919,31920],{"class":38},"class_label",[28,31922,54],{"class":34},[28,31924,31925],{"class":38},"train_data.classes  ",[28,31927,31928],{"class":87},"#训练集标签\n",[28,31930,31931],{"class":30,"line":2883},[28,31932,31933],{"class":87},"# print(class_label)\n",[28,31935,31936],{"class":30,"line":8210},[28,31937,2662],{"emptyLinePlaceholder":336},[28,31939,31940],{"class":30,"line":8234},[28,31941,31942],{"class":87},"# 可视化一个batch的图像\n",[28,31944,31945,31948,31951,31953,31955,31957,31959,31961],{"class":30,"line":8239},[28,31946,31947],{"class":38},"plt.figure(",[28,31949,31950],{"class":5478},"figsize",[28,31952,54],{"class":34},[28,31954,413],{"class":38},[28,31956,897],{"class":60},[28,31958,64],{"class":38},[28,31960,721],{"class":60},[28,31962,30757],{"class":38},[28,31964,31965,31967,31970,31972,31974,31976],{"class":30,"line":8245},[28,31966,3287],{"class":34},[28,31968,31969],{"class":38}," ii ",[28,31971,26306],{"class":34},[28,31973,57],{"class":38},[28,31975,7620],{"class":60},[28,31977,31978],{"class":38},"(batch_y)):\n",[28,31980,31981,31984,31986,31988,31990,31993,31995,31997],{"class":30,"line":8272},[28,31982,31983],{"class":38},"    plt.subplot(",[28,31985,73],{"class":60},[28,31987,64],{"class":38},[28,31989,999],{"class":60},[28,31991,31992],{"class":38},",ii ",[28,31994,880],{"class":34},[28,31996,25381],{"class":60},[28,31998,81],{"class":38},[28,32000,32001,32004,32007,32009],{"class":30,"line":8277},[28,32002,32003],{"class":38},"    plt.imshow(batch_x[ii,:,:],",[28,32005,32006],{"class":5478},"cmap",[28,32008,54],{"class":34},[28,32010,32011],{"class":38},"plt.cm.gray)\n",[28,32013,32014,32017,32019,32021,32023],{"class":30,"line":8283},[28,32015,32016],{"class":38},"    plt.title(class_label[batch_y[ii]],",[28,32018,31753],{"class":5478},[28,32020,54],{"class":34},[28,32022,845],{"class":60},[28,32024,81],{"class":38},[28,32026,32027,32030,32033],{"class":30,"line":8295},[28,32028,32029],{"class":38},"    plt.axis(",[28,32031,32032],{"class":127},"\"off\"",[28,32034,81],{"class":38},[28,32036,32037,32040,32043,32045,32048],{"class":30,"line":8307},[28,32038,32039],{"class":38},"    plt.subplots_adjust(",[28,32041,32042],{"class":5478},"wspace",[28,32044,54],{"class":34},[28,32046,32047],{"class":60},"0.05",[28,32049,81],{"class":38},[28,32051,32052],{"class":30,"line":8319},[28,32053,32054],{"class":38},"plt.show()\n",[14,32056,32057],{},"用matplotlib进行展示的过程可以后续再补",[14,32059,32060],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32062,32063],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32065,32066],{},"模型训练：",[18,32068,32070],{"className":20,"code":32069,"language":22,"meta":23,"style":23},"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",[25,32071,32072,32079,32086,32090,32102,32108,32119,32129,32139,32149,32159,32164,32176,32186,32190,32194,32199,32210,32223,32234,32251,32262,32301,32317,32329,32340,32345,32356,32372,32383,32394,32405,32412,32416,32421,32426,32430,32435,32445,32466,32470,32474,32479,32484,32489,32509,32513,32518,32528,32532,32537,32546,32551,32556,32561,32571,32575,32579,32584,32589,32599,32604,32614,32619,32628,32633,32642,32647,32656,32660,32665,32675,32679,32683,32688,32703,32731,32746,32750,32755,32760,32769,32774,32783,32788,32797,32802,32811,32816,32825,32830,32839,32844,32857,32862,32872,32877,32887,32893,32899,32905,32911,32922,32928,32948,32954,32965,32971,32977,32983,32989,32995,33001,33007,33027,33033,33049,33055,33069,33075,33090,33096,33105,33111,33120,33126,33132,33141,33147,33158,33164,33183,33189,33200,33206,33226,33242,33248,33262,33268,33274,33285,33291,33297,33307,33313,33324,33330,33340,33345,33351,33400,33447,33452,33458,33477,33483,33503,33509,33515,33525,33530,33536,33552,33597,33603,33609,33615,33626,33632,33638,33644,33662,33676,33685,33694,33703,33712,33718,33724,33732,33737,33743,33754,33760,33780,33786,33792,33798,33815,33821,33827,33833,33839,33845,33872,33896,33902,33908,33914,33925,33936,33942,33959,33982,34005,34011,34016,34025,34035,34041,34046,34052,34065,34071,34082,34093,34112],{"__ignoreMap":23},[28,32073,32074,32076],{"class":30,"line":31},[28,32075,35],{"class":34},[28,32077,32078],{"class":38}," copy\n",[28,32080,32081,32083],{"class":30,"line":48},[28,32082,35],{"class":34},[28,32084,32085],{"class":38}," time\n",[28,32087,32088],{"class":30,"line":84},[28,32089,2662],{"emptyLinePlaceholder":336},[28,32091,32092,32094,32097,32099],{"class":30,"line":91},[28,32093,35],{"class":34},[28,32095,32096],{"class":38}," pandas ",[28,32098,42],{"class":34},[28,32100,32101],{"class":38}," pd\n",[28,32103,32104,32106],{"class":30,"line":97},[28,32105,35],{"class":34},[28,32107,30655],{"class":38},[28,32109,32110,32112,32114,32116],{"class":30,"line":103},[28,32111,30997],{"class":34},[28,32113,31672],{"class":38},[28,32115,35],{"class":34},[28,32117,32118],{"class":38}," Dataset\n",[28,32120,32121,32123,32125,32127],{"class":30,"line":109},[28,32122,30997],{"class":34},[28,32124,31628],{"class":38},[28,32126,35],{"class":34},[28,32128,31633],{"class":38},[28,32130,32131,32133,32135,32137],{"class":30,"line":118},[28,32132,30997],{"class":34},[28,32134,31655],{"class":38},[28,32136,35],{"class":34},[28,32138,31660],{"class":38},[28,32140,32141,32143,32145,32147],{"class":30,"line":124},[28,32142,35],{"class":34},[28,32144,31672],{"class":38},[28,32146,42],{"class":34},[28,32148,31677],{"class":38},[28,32150,32151,32153,32155,32157],{"class":30,"line":131},[28,32152,35],{"class":34},[28,32154,31689],{"class":38},[28,32156,42],{"class":34},[28,32158,31694],{"class":38},[28,32160,32161],{"class":30,"line":137},[28,32162,32163],{"class":87},"# 导入模型\n",[28,32165,32166,32168,32171,32173],{"class":30,"line":143},[28,32167,30997],{"class":34},[28,32169,32170],{"class":38}," model ",[28,32172,35],{"class":34},[28,32174,32175],{"class":38}," LeNet\n",[28,32177,32178,32180,32182,32184],{"class":30,"line":149},[28,32179,30997],{"class":34},[28,32181,31000],{"class":38},[28,32183,35],{"class":34},[28,32185,31005],{"class":38},[28,32187,32188],{"class":30,"line":1890},[28,32189,2662],{"emptyLinePlaceholder":336},[28,32191,32192],{"class":30,"line":1904},[28,32193,2662],{"emptyLinePlaceholder":336},[28,32195,32196],{"class":30,"line":1909},[28,32197,32198],{"class":87},"# 处理训练集与验证集函数--->划分数据集\n",[28,32200,32201,32204,32207],{"class":30,"line":1915},[28,32202,32203],{"class":34},"def",[28,32205,32206],{"class":2225}," train_val_data_process",[28,32208,32209],{"class":38},"():\n",[28,32211,32212,32215,32217,32219,32221],{"class":30,"line":1936},[28,32213,32214],{"class":38},"    train_data",[28,32216,54],{"class":34},[28,32218,31712],{"class":38},[28,32220,31720],{"class":127},[28,32222,31723],{"class":38},[28,32224,32225,32228,32230,32232],{"class":30,"line":1941},[28,32226,32227],{"class":5478},"                            train",[28,32229,54],{"class":34},[28,32231,31733],{"class":60},[28,32233,31723],{"class":38},[28,32235,32236,32239,32241,32243,32245,32247,32249],{"class":30,"line":1955},[28,32237,32238],{"class":5478},"                            transform",[28,32240,54],{"class":34},[28,32242,31750],{"class":38},[28,32244,31753],{"class":5478},[28,32246,54],{"class":34},[28,32248,1298],{"class":60},[28,32250,31761],{"class":38},[28,32252,32253,32256,32258,32260],{"class":30,"line":1960},[28,32254,32255],{"class":5478},"                            download",[28,32257,54],{"class":34},[28,32259,31733],{"class":60},[28,32261,81],{"class":38},[28,32263,32264,32267,32269,32272,32275,32277,32280,32282,32284,32287,32289,32291,32294,32296,32298],{"class":30,"line":1989},[28,32265,32266],{"class":38},"    train_data,val_data",[28,32268,54],{"class":34},[28,32270,32271],{"class":38},"Data.random_split(train_data,[",[28,32273,32274],{"class":60},"round",[28,32276,413],{"class":38},[28,32278,32279],{"class":60},"0.8",[28,32281,854],{"class":34},[28,32283,7620],{"class":60},[28,32285,32286],{"class":38},"(train_data)),",[28,32288,32274],{"class":60},[28,32290,413],{"class":38},[28,32292,32293],{"class":60},"0.2",[28,32295,854],{"class":34},[28,32297,7620],{"class":60},[28,32299,32300],{"class":38},"(train_data))])\n",[28,32302,32303,32306,32308,32311,32313,32315],{"class":30,"line":1994},[28,32304,32305],{"class":38},"    train_dataloader ",[28,32307,54],{"class":34},[28,32309,32310],{"class":38}," Data.DataLoader(",[28,32312,31794],{"class":5478},[28,32314,54],{"class":34},[28,32316,31799],{"class":38},[28,32318,32319,32322,32324,32327],{"class":30,"line":2011},[28,32320,32321],{"class":5478},"                                       batch_size",[28,32323,54],{"class":34},[28,32325,32326],{"class":60},"128",[28,32328,31723],{"class":38},[28,32330,32331,32334,32336,32338],{"class":30,"line":2016},[28,32332,32333],{"class":5478},"                                       shuffle",[28,32335,54],{"class":34},[28,32337,31733],{"class":60},[28,32339,31723],{"class":38},[28,32341,32342],{"class":30,"line":2021},[28,32343,32344],{"class":87},"                                       # 规定8个进程\n",[28,32346,32347,32350,32352,32354],{"class":30,"line":2026},[28,32348,32349],{"class":5478},"                                       num_workers",[28,32351,54],{"class":34},[28,32353,794],{"class":60},[28,32355,81],{"class":38},[28,32357,32358,32361,32363,32365,32367,32369],{"class":30,"line":2040},[28,32359,32360],{"class":38},"    val_dataloader",[28,32362,54],{"class":34},[28,32364,31791],{"class":38},[28,32366,31794],{"class":5478},[28,32368,54],{"class":34},[28,32370,32371],{"class":38},"val_data,\n",[28,32373,32374,32377,32379,32381],{"class":30,"line":2045},[28,32375,32376],{"class":5478},"                                   batch_size",[28,32378,54],{"class":34},[28,32380,32326],{"class":60},[28,32382,31723],{"class":38},[28,32384,32385,32388,32390,32392],{"class":30,"line":2839},[28,32386,32387],{"class":5478},"                                   shuffle",[28,32389,54],{"class":34},[28,32391,31733],{"class":60},[28,32393,31723],{"class":38},[28,32395,32396,32399,32401,32403],{"class":30,"line":2853},[28,32397,32398],{"class":5478},"                                   num_workers",[28,32400,54],{"class":34},[28,32402,794],{"class":60},[28,32404,81],{"class":38},[28,32406,32407,32409],{"class":30,"line":2861},[28,32408,4352],{"class":34},[28,32410,32411],{"class":38}," train_dataloader,val_dataloader\n",[28,32413,32414],{"class":30,"line":2866},[28,32415,2662],{"emptyLinePlaceholder":336},[28,32417,32418],{"class":30,"line":2872},[28,32419,32420],{"class":87},"# 验证是否出错\n",[28,32422,32423],{"class":30,"line":2878},[28,32424,32425],{"class":87},"# train_val_data_process()\n",[28,32427,32428],{"class":30,"line":2883},[28,32429,2662],{"emptyLinePlaceholder":336},[28,32431,32432],{"class":30,"line":8210},[28,32433,32434],{"class":87},"# 定义模型训练函数\n",[28,32436,32437,32439,32442],{"class":30,"line":8234},[28,32438,32203],{"class":34},[28,32440,32441],{"class":2225}," train_model_process",[28,32443,32444],{"class":38},"(model,train_dataloader,val_dataloader,num_epochs):\n",[28,32446,32447,32449,32451,32453,32455,32457,32459,32461,32464],{"class":30,"line":8239},[28,32448,31497],{"class":38},[28,32450,54],{"class":34},[28,32452,30711],{"class":38},[28,32454,31504],{"class":127},[28,32456,1966],{"class":34},[28,32458,31509],{"class":38},[28,32460,1963],{"class":34},[28,32462,32463],{"class":127}," 'cpu'",[28,32465,81],{"class":38},[28,32467,32468],{"class":30,"line":8245},[28,32469,2662],{"emptyLinePlaceholder":336},[28,32471,32472],{"class":30,"line":8272},[28,32473,2662],{"emptyLinePlaceholder":336},[28,32475,32476],{"class":30,"line":8277},[28,32477,32478],{"class":87},"    # 定义优化器\n",[28,32480,32481],{"class":30,"line":8283},[28,32482,32483],{"class":87},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[28,32485,32486],{"class":30,"line":8295},[28,32487,32488],{"class":87},"    # lr为学习率\n",[28,32490,32491,32494,32496,32499,32502,32504,32507],{"class":30,"line":8307},[28,32492,32493],{"class":38},"    optimizer",[28,32495,54],{"class":34},[28,32497,32498],{"class":38},"torch.optim.Adam(model.parameters(),",[28,32500,32501],{"class":5478},"lr",[28,32503,54],{"class":34},[28,32505,32506],{"class":60},"0.001",[28,32508,81],{"class":38},[28,32510,32511],{"class":30,"line":8319},[28,32512,2662],{"emptyLinePlaceholder":336},[28,32514,32515],{"class":30,"line":9978},[28,32516,32517],{"class":87},"    # 定义损失函数使用交叉熵损失函数\n",[28,32519,32520,32523,32525],{"class":30,"line":10003},[28,32521,32522],{"class":38},"    criterion",[28,32524,54],{"class":34},[28,32526,32527],{"class":38},"nn.CrossEntropyLoss()\n",[28,32529,32530],{"class":30,"line":10026},[28,32531,2662],{"emptyLinePlaceholder":336},[28,32533,32534],{"class":30,"line":10050},[28,32535,32536],{"class":87},"    # 将模型放到GPU中进行训练\n",[28,32538,32539,32541,32543],{"class":30,"line":10055},[28,32540,31549],{"class":38},[28,32542,54],{"class":34},[28,32544,32545],{"class":38},"model.to(device)\n",[28,32547,32548],{"class":30,"line":10060},[28,32549,32550],{"class":87},"    # 复制当前模型的参数\n",[28,32552,32553],{"class":30,"line":10065},[28,32554,32555],{"class":87},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[28,32557,32558],{"class":30,"line":10074},[28,32559,32560],{"class":87},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[28,32562,32563,32566,32568],{"class":30,"line":10079},[28,32564,32565],{"class":38},"    best_model_wts",[28,32567,54],{"class":34},[28,32569,32570],{"class":38},"copy.deepcopy(model.state_dict())\n",[28,32572,32573],{"class":30,"line":10085},[28,32574,2662],{"emptyLinePlaceholder":336},[28,32576,32577],{"class":30,"line":10106},[28,32578,2662],{"emptyLinePlaceholder":336},[28,32580,32581],{"class":30,"line":10112},[28,32582,32583],{"class":87},"    # 初始化参数\n",[28,32585,32586],{"class":30,"line":10126},[28,32587,32588],{"class":87},"    # 最高准确度\n",[28,32590,32591,32594,32596],{"class":30,"line":10132},[28,32592,32593],{"class":38},"    best_acc",[28,32595,54],{"class":34},[28,32597,32598],{"class":60},"0.0\n",[28,32600,32601],{"class":30,"line":10159},[28,32602,32603],{"class":87},"    # 训练集损失列表\n",[28,32605,32606,32609,32611],{"class":30,"line":10168},[28,32607,32608],{"class":38},"    train_loss_all",[28,32610,54],{"class":34},[28,32612,32613],{"class":38},"[]\n",[28,32615,32616],{"class":30,"line":10174},[28,32617,32618],{"class":87},"    # 验证集函数列表\n",[28,32620,32621,32624,32626],{"class":30,"line":10182},[28,32622,32623],{"class":38},"    val_loss_all",[28,32625,54],{"class":34},[28,32627,32613],{"class":38},[28,32629,32630],{"class":30,"line":10187},[28,32631,32632],{"class":87},"    # 训练集准确度列表\n",[28,32634,32635,32638,32640],{"class":30,"line":16866},[28,32636,32637],{"class":38},"    train_acc_all",[28,32639,54],{"class":34},[28,32641,32613],{"class":38},[28,32643,32644],{"class":30,"line":16872},[28,32645,32646],{"class":87},"    # 验证集准确度列表\n",[28,32648,32649,32652,32654],{"class":30,"line":16895},[28,32650,32651],{"class":38},"    val_acc_all",[28,32653,54],{"class":34},[28,32655,32613],{"class":38},[28,32657,32658],{"class":30,"line":16901},[28,32659,2662],{"emptyLinePlaceholder":336},[28,32661,32662],{"class":30,"line":16924},[28,32663,32664],{"class":87},"    # 保存当前时间--->方便看每轮训练的时间\n",[28,32666,32667,32670,32672],{"class":30,"line":16938},[28,32668,32669],{"class":38},"    since",[28,32671,54],{"class":34},[28,32673,32674],{"class":38},"time.time()\n",[28,32676,32677],{"class":30,"line":16958},[28,32678,2662],{"emptyLinePlaceholder":336},[28,32680,32681],{"class":30,"line":16964},[28,32682,2662],{"emptyLinePlaceholder":336},[28,32684,32685],{"class":30,"line":16975},[28,32686,32687],{"class":87},"    # 准备工作完成--->开始训练模型\n",[28,32689,32690,32692,32695,32697,32700],{"class":30,"line":16998},[28,32691,3463],{"class":34},[28,32693,32694],{"class":38}," epoch ",[28,32696,26306],{"class":34},[28,32698,32699],{"class":60}," range",[28,32701,32702],{"class":38},"(num_epochs):\n",[28,32704,32705,32708,32710,32713,32716,32718,32720,32722,32725,32727,32729],{"class":30,"line":17020},[28,32706,32707],{"class":60},"        print",[28,32709,413],{"class":38},[28,32711,32712],{"class":127},"\"Epoch ",[28,32714,32715],{"class":60},"{}",[28,32717,982],{"class":127},[28,32719,32715],{"class":60},[28,32721,654],{"class":127},[28,32723,32724],{"class":38},".format(epoch,num_epochs",[28,32726,930],{"class":34},[28,32728,61],{"class":60},[28,32730,30757],{"class":38},[28,32732,32733,32735,32737,32740,32742,32744],{"class":30,"line":17025},[28,32734,32707],{"class":60},[28,32736,413],{"class":38},[28,32738,32739],{"class":127},"\"-\"",[28,32741,854],{"class":34},[28,32743,845],{"class":60},[28,32745,81],{"class":38},[28,32747,32748],{"class":30,"line":17031},[28,32749,2662],{"emptyLinePlaceholder":336},[28,32751,32752],{"class":30,"line":17045},[28,32753,32754],{"class":87},"        # 初始化参数\n",[28,32756,32757],{"class":30,"line":17058},[28,32758,32759],{"class":87},"        # 训练集损失函数\n",[28,32761,32762,32765,32767],{"class":30,"line":17063},[28,32763,32764],{"class":38},"        train_loss",[28,32766,54],{"class":34},[28,32768,32598],{"class":60},[28,32770,32771],{"class":30,"line":17077},[28,32772,32773],{"class":87},"        # 训练集准确度\n",[28,32775,32776,32779,32781],{"class":30,"line":17082},[28,32777,32778],{"class":38},"        train_corrects",[28,32780,54],{"class":34},[28,32782,3347],{"class":60},[28,32784,32785],{"class":30,"line":17088},[28,32786,32787],{"class":87},"        # 验证集损失函数\n",[28,32789,32790,32793,32795],{"class":30,"line":17093},[28,32791,32792],{"class":38},"        val_loss",[28,32794,54],{"class":34},[28,32796,32598],{"class":60},[28,32798,32799],{"class":30,"line":17107},[28,32800,32801],{"class":87},"        # 验证集准确度\n",[28,32803,32804,32807,32809],{"class":30,"line":17112},[28,32805,32806],{"class":38},"        val_corrects",[28,32808,54],{"class":34},[28,32810,3347],{"class":60},[28,32812,32813],{"class":30,"line":17117},[28,32814,32815],{"class":87},"        # 训练集样本数量\n",[28,32817,32818,32821,32823],{"class":30,"line":17131},[28,32819,32820],{"class":38},"        train_num",[28,32822,54],{"class":34},[28,32824,3347],{"class":60},[28,32826,32827],{"class":30,"line":17143},[28,32828,32829],{"class":87},"        # 验证集样本数量\n",[28,32831,32832,32835,32837],{"class":30,"line":17148},[28,32833,32834],{"class":38},"        val_num",[28,32836,54],{"class":34},[28,32838,3347],{"class":60},[28,32840,32841],{"class":30,"line":17161},[28,32842,32843],{"class":87},"        # 将数据放到设备,并开始训练\n",[28,32845,32846,32848,32850,32852,32854],{"class":30,"line":17166},[28,32847,3665],{"class":34},[28,32849,31858],{"class":38},[28,32851,26306],{"class":34},[28,32853,31863],{"class":60},[28,32855,32856],{"class":38},"(train_dataloader):\n",[28,32858,32859],{"class":30,"line":17171},[28,32860,32861],{"class":87},"            # 将特征放入到训练设备\n",[28,32863,32864,32867,32869],{"class":30,"line":17176},[28,32865,32866],{"class":38},"            b_x",[28,32868,54],{"class":34},[28,32870,32871],{"class":38},"b_x.to(device)\n",[28,32873,32874],{"class":30,"line":17189},[28,32875,32876],{"class":87},"            # 将标签放入到训练设备当中\n",[28,32878,32879,32882,32884],{"class":30,"line":17194},[28,32880,32881],{"class":38},"            b_y",[28,32883,54],{"class":34},[28,32885,32886],{"class":38},"b_y.to(device)\n",[28,32888,32890],{"class":30,"line":32889},98,[28,32891,32892],{"class":87},"            # 设置模型为训练模式\n",[28,32894,32896],{"class":30,"line":32895},99,[28,32897,32898],{"class":38},"            model.train()\n",[28,32900,32902],{"class":30,"line":32901},100,[28,32903,32904],{"class":87},"            # 将数据放到模型当中,开始前向传播\n",[28,32906,32908],{"class":30,"line":32907},101,[28,32909,32910],{"class":87},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[28,32912,32914,32917,32919],{"class":30,"line":32913},102,[28,32915,32916],{"class":38},"            output",[28,32918,54],{"class":34},[28,32920,32921],{"class":38},"model(b_x)\n",[28,32923,32925],{"class":30,"line":32924},103,[28,32926,32927],{"class":87},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[28,32929,32931,32934,32936,32939,32942,32944,32946],{"class":30,"line":32930},104,[28,32932,32933],{"class":38},"            pre_lab",[28,32935,54],{"class":34},[28,32937,32938],{"class":38},"torch.argmax(output,",[28,32940,32941],{"class":5478},"dim",[28,32943,54],{"class":34},[28,32945,61],{"class":60},[28,32947,81],{"class":38},[28,32949,32951],{"class":30,"line":32950},105,[28,32952,32953],{"class":87},"            # 计算每一个batch的损失函数\n",[28,32955,32957,32960,32962],{"class":30,"line":32956},106,[28,32958,32959],{"class":38},"            loss",[28,32961,54],{"class":34},[28,32963,32964],{"class":38},"criterion(output,b_y)\n",[28,32966,32968],{"class":30,"line":32967},107,[28,32969,32970],{"class":87},"            # 将梯度初始化为0\n",[28,32972,32974],{"class":30,"line":32973},108,[28,32975,32976],{"class":38},"            optimizer.zero_grad()\n",[28,32978,32980],{"class":30,"line":32979},109,[28,32981,32982],{"class":87},"            # 梯度置为0后再进行反向传播\n",[28,32984,32986],{"class":30,"line":32985},110,[28,32987,32988],{"class":38},"            loss.backward()\n",[28,32990,32992],{"class":30,"line":32991},111,[28,32993,32994],{"class":87},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[28,32996,32998],{"class":30,"line":32997},112,[28,32999,33000],{"class":38},"            optimizer.step()\n",[28,33002,33004],{"class":30,"line":33003},113,[28,33005,33006],{"class":87},"            # loss.item()指的是batch的平均损失\n",[28,33008,33010,33013,33015,33018,33020,33023,33025],{"class":30,"line":33009},114,[28,33011,33012],{"class":38},"            train_loss",[28,33014,9739],{"class":34},[28,33016,33017],{"class":38},"loss.item()",[28,33019,854],{"class":34},[28,33021,33022],{"class":38},"b_x.size(",[28,33024,244],{"class":60},[28,33026,81],{"class":38},[28,33028,33030],{"class":30,"line":33029},115,[28,33031,33032],{"class":87},"            # 计算每个批次中正确预测的数量\n",[28,33034,33036,33039,33041,33044,33046],{"class":30,"line":33035},116,[28,33037,33038],{"class":38},"            train_corrects",[28,33040,9739],{"class":34},[28,33042,33043],{"class":38},"torch.sum(pre_lab",[28,33045,3211],{"class":34},[28,33047,33048],{"class":38},"b_y.data)\n",[28,33050,33052],{"class":30,"line":33051},117,[28,33053,33054],{"class":87},"            # 计算目前为止一共处理了多少样本\n",[28,33056,33058,33061,33063,33065,33067],{"class":30,"line":33057},118,[28,33059,33060],{"class":38},"            train_num",[28,33062,9739],{"class":34},[28,33064,33022],{"class":38},[28,33066,244],{"class":60},[28,33068,81],{"class":38},[28,33070,33072],{"class":30,"line":33071},119,[28,33073,33074],{"class":87},"        # 验证数据\n",[28,33076,33078,33080,33083,33085,33087],{"class":30,"line":33077},120,[28,33079,3665],{"class":34},[28,33081,33082],{"class":38}," step ,(b_x,b_y) ",[28,33084,26306],{"class":34},[28,33086,31863],{"class":60},[28,33088,33089],{"class":38},"(val_dataloader):\n",[28,33091,33093],{"class":30,"line":33092},121,[28,33094,33095],{"class":87},"            # 将特征放到验证设备当中\n",[28,33097,33099,33101,33103],{"class":30,"line":33098},122,[28,33100,32866],{"class":38},[28,33102,54],{"class":34},[28,33104,32871],{"class":38},[28,33106,33108],{"class":30,"line":33107},123,[28,33109,33110],{"class":87},"            # 将标签放到放到训练设备当中\n",[28,33112,33114,33116,33118],{"class":30,"line":33113},124,[28,33115,32881],{"class":38},[28,33117,54],{"class":34},[28,33119,32886],{"class":38},[28,33121,33123],{"class":30,"line":33122},125,[28,33124,33125],{"class":87},"            # 开启验证模式，设置模型为评估模式\n",[28,33127,33129],{"class":30,"line":33128},126,[28,33130,33131],{"class":38},"            model.eval()\n",[28,33133,33135,33138],{"class":30,"line":33134},127,[28,33136,33137],{"class":34},"            with",[28,33139,33140],{"class":38}," torch.no_grad():\n",[28,33142,33144],{"class":30,"line":33143},128,[28,33145,33146],{"class":87},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[28,33148,33150,33153,33155],{"class":30,"line":33149},129,[28,33151,33152],{"class":38},"                output ",[28,33154,54],{"class":34},[28,33156,33157],{"class":38}," model(b_x)\n",[28,33159,33161],{"class":30,"line":33160},130,[28,33162,33163],{"class":87},"                # 查找每一行中最大值对应的下标\n",[28,33165,33167,33170,33172,33175,33177,33179,33181],{"class":30,"line":33166},131,[28,33168,33169],{"class":38},"                pre_lab ",[28,33171,54],{"class":34},[28,33173,33174],{"class":38}," torch.argmax(output, ",[28,33176,32941],{"class":5478},[28,33178,54],{"class":34},[28,33180,61],{"class":60},[28,33182,81],{"class":38},[28,33184,33186],{"class":30,"line":33185},132,[28,33187,33188],{"class":87},"                # 计算验证集上的当前 batch 损失\n",[28,33190,33192,33195,33197],{"class":30,"line":33191},133,[28,33193,33194],{"class":38},"                val_batch_loss ",[28,33196,54],{"class":34},[28,33198,33199],{"class":38}," criterion(output, b_y)\n",[28,33201,33203],{"class":30,"line":33202},134,[28,33204,33205],{"class":87},"                # 对损失函数进行累加（按样本数加权）\n",[28,33207,33209,33212,33214,33217,33219,33222,33224],{"class":30,"line":33208},135,[28,33210,33211],{"class":38},"                val_loss ",[28,33213,9739],{"class":34},[28,33215,33216],{"class":38}," val_batch_loss.item() ",[28,33218,854],{"class":34},[28,33220,33221],{"class":38}," b_x.size(",[28,33223,244],{"class":60},[28,33225,81],{"class":38},[28,33227,33229,33232,33234,33237,33239],{"class":30,"line":33228},136,[28,33230,33231],{"class":38},"                val_corrects ",[28,33233,9739],{"class":34},[28,33235,33236],{"class":38}," torch.sum(pre_lab ",[28,33238,3211],{"class":34},[28,33240,33241],{"class":38}," b_y.data)\n",[28,33243,33245],{"class":30,"line":33244},137,[28,33246,33247],{"class":87},"                # 当前用于验证的样本数量\n",[28,33249,33251,33254,33256,33258,33260],{"class":30,"line":33250},138,[28,33252,33253],{"class":38},"            val_num ",[28,33255,9739],{"class":34},[28,33257,33221],{"class":38},[28,33259,244],{"class":60},[28,33261,81],{"class":38},[28,33263,33265],{"class":30,"line":33264},139,[28,33266,33267],{"class":87},"        # 计算并保存每一次迭代的loss值和准确率\n",[28,33269,33271],{"class":30,"line":33270},140,[28,33272,33273],{"class":87},"        # 计算并保存训练集的loss值\n",[28,33275,33277,33280,33282],{"class":30,"line":33276},141,[28,33278,33279],{"class":38},"        train_loss_all.append(train_loss",[28,33281,982],{"class":34},[28,33283,33284],{"class":38},"train_num)\n",[28,33286,33288],{"class":30,"line":33287},142,[28,33289,33290],{"class":87},"        # 取双精度\n",[28,33292,33294],{"class":30,"line":33293},143,[28,33295,33296],{"class":87},"        # 计算并保存训练集的准确率\n",[28,33298,33300,33303,33305],{"class":30,"line":33299},144,[28,33301,33302],{"class":38},"        train_acc_all.append(train_corrects.double().item()",[28,33304,982],{"class":34},[28,33306,33284],{"class":38},[28,33308,33310],{"class":30,"line":33309},145,[28,33311,33312],{"class":87},"        # 计算并保存验证集的loss值\n",[28,33314,33316,33319,33321],{"class":30,"line":33315},146,[28,33317,33318],{"class":38},"        val_loss_all.append(val_loss",[28,33320,982],{"class":34},[28,33322,33323],{"class":38},"val_num)\n",[28,33325,33327],{"class":30,"line":33326},147,[28,33328,33329],{"class":87},"        # 计算并保存验证集的准确率\n",[28,33331,33333,33336,33338],{"class":30,"line":33332},148,[28,33334,33335],{"class":38},"        val_acc_all.append(val_corrects.double().item()",[28,33337,982],{"class":34},[28,33339,33323],{"class":38},[28,33341,33343],{"class":30,"line":33342},149,[28,33344,2662],{"emptyLinePlaceholder":336},[28,33346,33348],{"class":30,"line":33347},150,[28,33349,33350],{"class":87},"        # 打印训练一轮的loss值和准确率\n",[28,33352,33354,33356,33358,33360,33362,33365,33367,33370,33372,33375,33377,33379,33381,33383,33386,33388,33390,33393,33395,33397],{"class":30,"line":33353},151,[28,33355,32707],{"class":60},[28,33357,413],{"class":38},[28,33359,3854],{"class":127},[28,33361,32715],{"class":60},[28,33363,33364],{"class":127},"train loss:",[28,33366,1293],{"class":60},[28,33368,33369],{"class":34},":.4f",[28,33371,1343],{"class":60},[28,33373,33374],{"class":127}," train acc:",[28,33376,1293],{"class":60},[28,33378,33369],{"class":34},[28,33380,1343],{"class":60},[28,33382,3854],{"class":127},[28,33384,33385],{"class":38},".format(epoch,train_loss_all[",[28,33387,930],{"class":34},[28,33389,61],{"class":60},[28,33391,33392],{"class":38},"],train_acc_all[",[28,33394,930],{"class":34},[28,33396,61],{"class":60},[28,33398,33399],{"class":38},"]))\n",[28,33401,33403,33405,33407,33409,33411,33414,33416,33418,33420,33423,33425,33427,33429,33431,33434,33436,33438,33441,33443,33445],{"class":30,"line":33402},152,[28,33404,32707],{"class":60},[28,33406,413],{"class":38},[28,33408,3854],{"class":127},[28,33410,32715],{"class":60},[28,33412,33413],{"class":127},"val loss:",[28,33415,1293],{"class":60},[28,33417,33369],{"class":34},[28,33419,1343],{"class":60},[28,33421,33422],{"class":127}," val acc:",[28,33424,1293],{"class":60},[28,33426,33369],{"class":34},[28,33428,1343],{"class":60},[28,33430,3854],{"class":127},[28,33432,33433],{"class":38},".format(epoch,val_loss_all[",[28,33435,930],{"class":34},[28,33437,61],{"class":60},[28,33439,33440],{"class":38},"],val_acc_all[",[28,33442,930],{"class":34},[28,33444,61],{"class":60},[28,33446,33399],{"class":38},[28,33448,33450],{"class":30,"line":33449},153,[28,33451,2662],{"emptyLinePlaceholder":336},[28,33453,33455],{"class":30,"line":33454},154,[28,33456,33457],{"class":87},"        # 判断准确度--->保存最优模型\n",[28,33459,33461,33463,33466,33468,33470,33472,33474],{"class":30,"line":33460},155,[28,33462,2759],{"class":34},[28,33464,33465],{"class":38}," val_acc_all[",[28,33467,930],{"class":34},[28,33469,61],{"class":60},[28,33471,1337],{"class":38},[28,33473,1357],{"class":34},[28,33475,33476],{"class":38},"best_acc:\n",[28,33478,33480],{"class":30,"line":33479},156,[28,33481,33482],{"class":87},"            # 保存当前模型准确度\n",[28,33484,33486,33489,33491,33493,33496,33498,33500],{"class":30,"line":33485},157,[28,33487,33488],{"class":38},"            best_acc:",[28,33490,451],{"class":60},[28,33492,54],{"class":34},[28,33494,33495],{"class":38},"val_acc_all[",[28,33497,930],{"class":34},[28,33499,61],{"class":60},[28,33501,33502],{"class":38},"]\n",[28,33504,33506],{"class":30,"line":33505},158,[28,33507,33508],{"class":87},"            # 保存当前的准确度\n",[28,33510,33512],{"class":30,"line":33511},159,[28,33513,33514],{"class":87},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[28,33516,33518,33521,33523],{"class":30,"line":33517},160,[28,33519,33520],{"class":38},"            best_model_wts",[28,33522,54],{"class":34},[28,33524,32570],{"class":38},[28,33526,33528],{"class":30,"line":33527},161,[28,33529,2662],{"emptyLinePlaceholder":336},[28,33531,33533],{"class":30,"line":33532},162,[28,33534,33535],{"class":87},"        # 计算耗时\n",[28,33537,33539,33542,33544,33547,33549],{"class":30,"line":33538},163,[28,33540,33541],{"class":38},"        time_use",[28,33543,54],{"class":34},[28,33545,33546],{"class":38},"time.time()",[28,33548,930],{"class":34},[28,33550,33551],{"class":38},"since\n",[28,33553,33555,33557,33559,33562,33564,33567,33569,33571,33573,33575,33577,33580,33583,33586,33588,33591,33593,33595],{"class":30,"line":33554},164,[28,33556,32707],{"class":60},[28,33558,413],{"class":38},[28,33560,33561],{"class":127},"'训练和验证耗费的时间",[28,33563,1293],{"class":60},[28,33565,33566],{"class":34},":.0f",[28,33568,1343],{"class":60},[28,33570,942],{"class":127},[28,33572,1293],{"class":60},[28,33574,33566],{"class":34},[28,33576,1343],{"class":60},[28,33578,33579],{"class":127},"s'",[28,33581,33582],{"class":38},".format(time_use",[28,33584,33585],{"class":34},"\u002F\u002F",[28,33587,1304],{"class":60},[28,33589,33590],{"class":38},",time_use",[28,33592,729],{"class":34},[28,33594,1304],{"class":60},[28,33596,30757],{"class":38},[28,33598,33600],{"class":30,"line":33599},165,[28,33601,33602],{"class":87},"    # 选择最优参数\n",[28,33604,33606],{"class":30,"line":33605},166,[28,33607,33608],{"class":87},"    # 加载最高准确率下的模型参数\n",[28,33610,33612],{"class":30,"line":33611},167,[28,33613,33614],{"class":87},"    # model.load_state_dict(best_model_wts)\n",[28,33616,33618,33621,33624],{"class":30,"line":33617},168,[28,33619,33620],{"class":38},"    torch.save(model.state_dict(best_model_wts), ",[28,33622,33623],{"class":127},"'.\u002Fbest_model.pth'",[28,33625,81],{"class":38},[28,33627,33629],{"class":30,"line":33628},169,[28,33630,33631],{"class":87},"    # 或者写成\n",[28,33633,33635],{"class":30,"line":33634},170,[28,33636,33637],{"class":87},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[28,33639,33641],{"class":30,"line":33640},171,[28,33642,33643],{"class":87},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[28,33645,33647,33650,33652,33655,33658,33660],{"class":30,"line":33646},172,[28,33648,33649],{"class":38},"    train_process",[28,33651,54],{"class":34},[28,33653,33654],{"class":38},"pd.DataFrame(",[28,33656,33657],{"class":5478},"data",[28,33659,54],{"class":34},[28,33661,1811],{"class":38},[28,33663,33665,33668,33670,33673],{"class":30,"line":33664},173,[28,33666,33667],{"class":127},"        \"epoch\"",[28,33669,1256],{"class":38},[28,33671,33672],{"class":60},"range",[28,33674,33675],{"class":38},"(num_epochs),\n",[28,33677,33679,33682],{"class":30,"line":33678},174,[28,33680,33681],{"class":127},"        \"train_loss_all\"",[28,33683,33684],{"class":38},":train_loss_all,\n",[28,33686,33688,33691],{"class":30,"line":33687},175,[28,33689,33690],{"class":127},"        \"val_loss_all\"",[28,33692,33693],{"class":38},":val_loss_all,\n",[28,33695,33697,33700],{"class":30,"line":33696},176,[28,33698,33699],{"class":127},"        \"train_acc_all\"",[28,33701,33702],{"class":38},":train_acc_all,\n",[28,33704,33706,33709],{"class":30,"line":33705},177,[28,33707,33708],{"class":127},"        \"val_acc_all\"",[28,33710,33711],{"class":38},":val_acc_all\n",[28,33713,33715],{"class":30,"line":33714},178,[28,33716,33717],{"class":38},"    })\n",[28,33719,33721],{"class":30,"line":33720},179,[28,33722,33723],{"class":87},"    # 返回训练保存的过程\n",[28,33725,33727,33729],{"class":30,"line":33726},180,[28,33728,4352],{"class":34},[28,33730,33731],{"class":38}," train_process\n",[28,33733,33735],{"class":30,"line":33734},181,[28,33736,2662],{"emptyLinePlaceholder":336},[28,33738,33740],{"class":30,"line":33739},182,[28,33741,33742],{"class":87},"# 将loss值和精度按照图片的形式展示出来\n",[28,33744,33746,33748,33751],{"class":30,"line":33745},183,[28,33747,32203],{"class":34},[28,33749,33750],{"class":2225}," matplot_acc_loss",[28,33752,33753],{"class":38},"(train_process):\n",[28,33755,33757],{"class":30,"line":33756},184,[28,33758,33759],{"class":87},"    # 设置图的大小\n",[28,33761,33763,33766,33768,33770,33772,33774,33776,33778],{"class":30,"line":33762},185,[28,33764,33765],{"class":38},"    plt.figure(",[28,33767,31950],{"class":5478},[28,33769,54],{"class":34},[28,33771,413],{"class":38},[28,33773,897],{"class":60},[28,33775,64],{"class":38},[28,33777,73],{"class":60},[28,33779,30757],{"class":38},[28,33781,33783],{"class":30,"line":33782},186,[28,33784,33785],{"class":87},"    # 设置图中有几张图\n",[28,33787,33789],{"class":30,"line":33788},187,[28,33790,33791],{"class":87},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[28,33793,33795],{"class":30,"line":33794},188,[28,33796,33797],{"class":87},"    # ①loss图\n",[28,33799,33801,33803,33805,33807,33809,33811,33813],{"class":30,"line":33800},189,[28,33802,31983],{"class":38},[28,33804,61],{"class":60},[28,33806,64],{"class":38},[28,33808,211],{"class":60},[28,33810,64],{"class":38},[28,33812,61],{"class":60},[28,33814,81],{"class":38},[28,33816,33818],{"class":30,"line":33817},190,[28,33819,33820],{"class":87},"    # 补充:\n",[28,33822,33824],{"class":30,"line":33823},191,[28,33825,33826],{"class":87},"    # plt.subplot(nrows, ncols, index)\n",[28,33828,33830],{"class":30,"line":33829},192,[28,33831,33832],{"class":87},"    # nrows：行数\n",[28,33834,33836],{"class":30,"line":33835},193,[28,33837,33838],{"class":87},"    # ncols：列数\n",[28,33840,33842],{"class":30,"line":33841},194,[28,33843,33844],{"class":87},"    # index：目前选中第几个子图（从1开始）\n",[28,33846,33848,33851,33854,33857,33860,33862,33865,33867,33870],{"class":30,"line":33847},195,[28,33849,33850],{"class":38},"    plt.plot(train_process[",[28,33852,33853],{"class":127},"\"epoch\"",[28,33855,33856],{"class":38},"],train_process.train_loss_all,",[28,33858,33859],{"class":127},"'ro-'",[28,33861,64],{"class":38},[28,33863,33864],{"class":5478},"label",[28,33866,54],{"class":34},[28,33868,33869],{"class":127},"'train loss'",[28,33871,81],{"class":38},[28,33873,33875,33877,33879,33882,33885,33887,33889,33891,33894],{"class":30,"line":33874},196,[28,33876,33850],{"class":38},[28,33878,33853],{"class":127},[28,33880,33881],{"class":38},"],train_process.val_loss_all,",[28,33883,33884],{"class":127},"'bs--'",[28,33886,64],{"class":38},[28,33888,33864],{"class":5478},[28,33890,54],{"class":34},[28,33892,33893],{"class":127},"'val loss'",[28,33895,81],{"class":38},[28,33897,33899],{"class":30,"line":33898},197,[28,33900,33901],{"class":87},"    # 添加一个图例\n",[28,33903,33905],{"class":30,"line":33904},198,[28,33906,33907],{"class":38},"    plt.legend()\n",[28,33909,33911],{"class":30,"line":33910},199,[28,33912,33913],{"class":87},"    # 给轴添加标签\n",[28,33915,33917,33920,33923],{"class":30,"line":33916},200,[28,33918,33919],{"class":38},"    plt.xlabel(",[28,33921,33922],{"class":127},"'epoch'",[28,33924,81],{"class":38},[28,33926,33928,33931,33934],{"class":30,"line":33927},201,[28,33929,33930],{"class":38},"    plt.ylabel(",[28,33932,33933],{"class":127},"'loss'",[28,33935,81],{"class":38},[28,33937,33939],{"class":30,"line":33938},202,[28,33940,33941],{"class":87},"    # ②准确度图\n",[28,33943,33945,33947,33949,33951,33953,33955,33957],{"class":30,"line":33944},203,[28,33946,31983],{"class":38},[28,33948,61],{"class":60},[28,33950,64],{"class":38},[28,33952,211],{"class":60},[28,33954,64],{"class":38},[28,33956,211],{"class":60},[28,33958,81],{"class":38},[28,33960,33962,33964,33966,33969,33971,33973,33975,33977,33980],{"class":30,"line":33961},204,[28,33963,33850],{"class":38},[28,33965,33853],{"class":127},[28,33967,33968],{"class":38},"],train_process.train_acc_all,",[28,33970,33859],{"class":127},[28,33972,64],{"class":38},[28,33974,33864],{"class":5478},[28,33976,54],{"class":34},[28,33978,33979],{"class":127},"'train acc'",[28,33981,81],{"class":38},[28,33983,33985,33987,33989,33992,33994,33996,33998,34000,34003],{"class":30,"line":33984},205,[28,33986,33850],{"class":38},[28,33988,33853],{"class":127},[28,33990,33991],{"class":38},"],train_process.val_acc_all,",[28,33993,33884],{"class":127},[28,33995,64],{"class":38},[28,33997,33864],{"class":5478},[28,33999,54],{"class":34},[28,34001,34002],{"class":127},"'val acc'",[28,34004,81],{"class":38},[28,34006,34008],{"class":30,"line":34007},206,[28,34009,34010],{"class":87},"    # 添加图例\n",[28,34012,34014],{"class":30,"line":34013},207,[28,34015,33907],{"class":38},[28,34017,34019,34021,34023],{"class":30,"line":34018},208,[28,34020,33919],{"class":38},[28,34022,33853],{"class":127},[28,34024,81],{"class":38},[28,34026,34028,34030,34033],{"class":30,"line":34027},209,[28,34029,33930],{"class":38},[28,34031,34032],{"class":127},"\"acc\"",[28,34034,81],{"class":38},[28,34036,34038],{"class":30,"line":34037},210,[28,34039,34040],{"class":38},"    plt.show()\n",[28,34042,34044],{"class":30,"line":34043},211,[28,34045,2662],{"emptyLinePlaceholder":336},[28,34047,34049],{"class":30,"line":34048},212,[28,34050,34051],{"class":87},"# 正式开始训练:\n",[28,34053,34055,34057,34059,34061,34063],{"class":30,"line":34054},213,[28,34056,1796],{"class":34},[28,34058,31480],{"class":60},[28,34060,3211],{"class":34},[28,34062,31485],{"class":127},[28,34064,4001],{"class":38},[28,34066,34068],{"class":30,"line":34067},214,[28,34069,34070],{"class":87},"    # 将模型实例化\n",[28,34072,34074,34077,34079],{"class":30,"line":34073},215,[28,34075,34076],{"class":38},"    LeNet",[28,34078,54],{"class":34},[28,34080,34081],{"class":38},"LeNet()\n",[28,34083,34085,34088,34090],{"class":30,"line":34084},216,[28,34086,34087],{"class":38},"    train_dataloader,val_dataloader",[28,34089,54],{"class":34},[28,34091,34092],{"class":38},"train_val_data_process()\n",[28,34094,34096,34098,34100,34103,34106,34108,34110],{"class":30,"line":34095},217,[28,34097,33649],{"class":38},[28,34099,54],{"class":34},[28,34101,34102],{"class":38},"train_model_process(LeNet,train_dataloader,val_dataloader,",[28,34104,34105],{"class":5478},"num_epochs",[28,34107,54],{"class":34},[28,34109,1098],{"class":60},[28,34111,81],{"class":38},[28,34113,34115],{"class":30,"line":34114},218,[28,34116,34117],{"class":38},"    matplot_acc_loss(train_process)\n",[14,34119,34120],{},"画图的补充点学习：",[14,34122,34123],{},[1727,34124],{"alt":23,"src":34125},"\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",[363,34127,34128],{"start":84},[366,34129,34130],{},"测试",[18,34132,34134],{"className":20,"code":34133,"language":22,"meta":23,"style":23},"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",[25,34135,34136,34142,34152,34164,34174,34179,34189,34199,34203,34208,34217,34234,34246,34263,34274,34290,34295,34306,34317,34328,34335,34339,34344,34354,34359,34376,34384,34388,34393,34402,34411,34415,34420,34425,34430,34437,34442,34454,34464,34474,34479,34483,34488,34497,34502,34518,34523,34528,34533,34547,34552,34566,34570,34575,34590,34595,34607,34611,34616,34628,34633,34641,34646,34651,34661,34666,34675,34680,34685,34689,34694,34699,34715,34723,34728,34733,34792,34798,34803,34814,34822,34830,34834,34839,34843,34848,34856,34861,34877,34882,34892,34902],{"__ignoreMap":23},[28,34137,34138,34140],{"class":30,"line":31},[28,34139,35],{"class":34},[28,34141,30655],{"class":38},[28,34143,34144,34146,34148,34150],{"class":30,"line":48},[28,34145,35],{"class":34},[28,34147,31672],{"class":38},[28,34149,42],{"class":34},[28,34151,31677],{"class":38},[28,34153,34154,34156,34159,34161],{"class":30,"line":84},[28,34155,30997],{"class":34},[28,34157,34158],{"class":38}," jupyter_client.consoleapp ",[28,34160,35],{"class":34},[28,34162,34163],{"class":38}," classes\n",[28,34165,34166,34168,34170,34172],{"class":30,"line":91},[28,34167,30997],{"class":34},[28,34169,31655],{"class":38},[28,34171,35],{"class":34},[28,34173,31660],{"class":38},[28,34175,34176],{"class":30,"line":97},[28,34177,34178],{"class":87},"# 导入数据集\n",[28,34180,34181,34183,34185,34187],{"class":30,"line":103},[28,34182,30997],{"class":34},[28,34184,31628],{"class":38},[28,34186,35],{"class":34},[28,34188,31633],{"class":38},[28,34190,34191,34193,34195,34197],{"class":30,"line":109},[28,34192,30997],{"class":34},[28,34194,32170],{"class":38},[28,34196,35],{"class":34},[28,34198,32175],{"class":38},[28,34200,34201],{"class":30,"line":118},[28,34202,2662],{"emptyLinePlaceholder":336},[28,34204,34205],{"class":30,"line":124},[28,34206,34207],{"class":87},"# 测试数据处理\n",[28,34209,34210,34212,34215],{"class":30,"line":131},[28,34211,32203],{"class":34},[28,34213,34214],{"class":2225}," test_data_process",[28,34216,32209],{"class":38},[28,34218,34219,34222,34224,34226,34228,34230,34232],{"class":30,"line":137},[28,34220,34221],{"class":38},"    test_data",[28,34223,54],{"class":34},[28,34225,31712],{"class":38},[28,34227,31715],{"class":5478},[28,34229,54],{"class":34},[28,34231,31720],{"class":127},[28,34233,31723],{"class":38},[28,34235,34236,34239,34241,34244],{"class":30,"line":143},[28,34237,34238],{"class":5478},"                           train",[28,34240,54],{"class":34},[28,34242,34243],{"class":60},"False",[28,34245,31723],{"class":38},[28,34247,34248,34251,34253,34255,34257,34259,34261],{"class":30,"line":149},[28,34249,34250],{"class":5478},"                           transform",[28,34252,54],{"class":34},[28,34254,31750],{"class":38},[28,34256,31753],{"class":5478},[28,34258,54],{"class":34},[28,34260,1298],{"class":60},[28,34262,31761],{"class":38},[28,34264,34265,34268,34270,34272],{"class":30,"line":1890},[28,34266,34267],{"class":5478},"                           download",[28,34269,54],{"class":34},[28,34271,31733],{"class":60},[28,34273,81],{"class":38},[28,34275,34276,34279,34281,34283,34285,34287],{"class":30,"line":1904},[28,34277,34278],{"class":38},"    test_dataloader",[28,34280,54],{"class":34},[28,34282,31791],{"class":38},[28,34284,31794],{"class":5478},[28,34286,54],{"class":34},[28,34288,34289],{"class":38},"test_data,\n",[28,34291,34292],{"class":30,"line":1909},[28,34293,34294],{"class":87},"                                    # 这里是一张一张进行测试\n",[28,34296,34297,34300,34302,34304],{"class":30,"line":1915},[28,34298,34299],{"class":5478},"                                    batch_size",[28,34301,54],{"class":34},[28,34303,61],{"class":60},[28,34305,31723],{"class":38},[28,34307,34308,34311,34313,34315],{"class":30,"line":1936},[28,34309,34310],{"class":5478},"                                    shuffle",[28,34312,54],{"class":34},[28,34314,31733],{"class":60},[28,34316,31723],{"class":38},[28,34318,34319,34322,34324,34326],{"class":30,"line":1941},[28,34320,34321],{"class":5478},"                                    num_workers",[28,34323,54],{"class":34},[28,34325,244],{"class":60},[28,34327,81],{"class":38},[28,34329,34330,34332],{"class":30,"line":1955},[28,34331,4352],{"class":34},[28,34333,34334],{"class":38}," test_dataloader\n",[28,34336,34337],{"class":30,"line":1960},[28,34338,2662],{"emptyLinePlaceholder":336},[28,34340,34341],{"class":30,"line":1989},[28,34342,34343],{"class":87},"# 定义模型测试函数\n",[28,34345,34346,34348,34351],{"class":30,"line":1994},[28,34347,32203],{"class":34},[28,34349,34350],{"class":2225}," test_model_process",[28,34352,34353],{"class":38},"(model,test_dataloader):\n",[28,34355,34356],{"class":30,"line":2011},[28,34357,34358],{"class":87},"    # 将模型放到设备当中，先进行判断\n",[28,34360,34361,34363,34365,34367,34369,34371,34373],{"class":30,"line":2016},[28,34362,31497],{"class":38},[28,34364,54],{"class":34},[28,34366,31504],{"class":127},[28,34368,1966],{"class":34},[28,34370,31509],{"class":38},[28,34372,1963],{"class":34},[28,34374,34375],{"class":127}," \"cpu\"\n",[28,34377,34378,34380,34382],{"class":30,"line":2021},[28,34379,31549],{"class":38},[28,34381,54],{"class":34},[28,34383,32545],{"class":38},[28,34385,34386],{"class":30,"line":2026},[28,34387,2662],{"emptyLinePlaceholder":336},[28,34389,34390],{"class":30,"line":2040},[28,34391,34392],{"class":87},"    # 设置初始化参数\n",[28,34394,34395,34398,34400],{"class":30,"line":2045},[28,34396,34397],{"class":38},"    test_corrects",[28,34399,54],{"class":34},[28,34401,32598],{"class":60},[28,34403,34404,34407,34409],{"class":30,"line":2839},[28,34405,34406],{"class":38},"    test_num",[28,34408,54],{"class":34},[28,34410,3347],{"class":60},[28,34412,34413],{"class":30,"line":2853},[28,34414,2662],{"emptyLinePlaceholder":336},[28,34416,34417],{"class":30,"line":2861},[28,34418,34419],{"class":87},"    # 进行模型测试\n",[28,34421,34422],{"class":30,"line":2866},[28,34423,34424],{"class":87},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[28,34426,34427],{"class":30,"line":2872},[28,34428,34429],{"class":87},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[28,34431,34432,34435],{"class":30,"line":2878},[28,34433,34434],{"class":34},"    with",[28,34436,33140],{"class":38},[28,34438,34439],{"class":30,"line":2883},[28,34440,34441],{"class":87},"        # 从数据中进行\n",[28,34443,34444,34446,34449,34451],{"class":30,"line":8210},[28,34445,3665],{"class":34},[28,34447,34448],{"class":38}," test_data_x,test_data_y ",[28,34450,26306],{"class":34},[28,34452,34453],{"class":38}," test_dataloader:\n",[28,34455,34456,34459,34461],{"class":30,"line":8234},[28,34457,34458],{"class":38},"            test_data_x",[28,34460,54],{"class":34},[28,34462,34463],{"class":38},"test_data_x.to(device)\n",[28,34465,34466,34469,34471],{"class":30,"line":8239},[28,34467,34468],{"class":38},"            test_data_y",[28,34470,54],{"class":34},[28,34472,34473],{"class":38},"test_data_y.to(device)\n",[28,34475,34476],{"class":30,"line":8245},[28,34477,34478],{"class":87},"            # 设置为验证模式\n",[28,34480,34481],{"class":30,"line":8272},[28,34482,33131],{"class":38},[28,34484,34485],{"class":30,"line":8277},[28,34486,34487],{"class":87},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[28,34489,34490,34492,34494],{"class":30,"line":8283},[28,34491,32916],{"class":38},[28,34493,54],{"class":34},[28,34495,34496],{"class":38},"model(test_data_x)\n",[28,34498,34499],{"class":30,"line":8295},[28,34500,34501],{"class":87},"            # 查找每一行中最大值对应的下标\n",[28,34503,34504,34506,34508,34510,34512,34514,34516],{"class":30,"line":8307},[28,34505,32933],{"class":38},[28,34507,54],{"class":34},[28,34509,32938],{"class":38},[28,34511,32941],{"class":5478},[28,34513,54],{"class":34},[28,34515,61],{"class":60},[28,34517,81],{"class":38},[28,34519,34520],{"class":30,"line":8319},[28,34521,34522],{"class":87},"            # 计算正确率\n",[28,34524,34525],{"class":30,"line":9978},[28,34526,34527],{"class":87},"            # .data表示是一个不带梯度信息的tensor\n",[28,34529,34530],{"class":30,"line":10003},[28,34531,34532],{"class":87},"            # 如果预测正确，则准确度test_corrects加1\n",[28,34534,34535,34538,34540,34542,34544],{"class":30,"line":10026},[28,34536,34537],{"class":38},"            test_corrects",[28,34539,9739],{"class":34},[28,34541,33043],{"class":38},[28,34543,3211],{"class":34},[28,34545,34546],{"class":38},"test_data_y.data)\n",[28,34548,34549],{"class":30,"line":10050},[28,34550,34551],{"class":87},"            # 将所有的测试样本进行累计\n",[28,34553,34554,34557,34559,34562,34564],{"class":30,"line":10055},[28,34555,34556],{"class":38},"            test_num",[28,34558,9739],{"class":34},[28,34560,34561],{"class":38},"test_data_x.size(",[28,34563,244],{"class":60},[28,34565,81],{"class":38},[28,34567,34568],{"class":30,"line":10060},[28,34569,2662],{"emptyLinePlaceholder":336},[28,34571,34572],{"class":30,"line":10065},[28,34573,34574],{"class":87},"        # 计算准确度\n",[28,34576,34577,34580,34582,34585,34587],{"class":30,"line":10074},[28,34578,34579],{"class":38},"        test_acc",[28,34581,54],{"class":34},[28,34583,34584],{"class":38},"test_corrects.double().item()",[28,34586,982],{"class":34},[28,34588,34589],{"class":38},"test_num\n",[28,34591,34592],{"class":30,"line":10079},[28,34593,34594],{"class":87},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[28,34596,34597,34599,34601,34604],{"class":30,"line":10085},[28,34598,32707],{"class":60},[28,34600,413],{"class":38},[28,34602,34603],{"class":127},"\"测试的准确率：\"",[28,34605,34606],{"class":38},",test_acc)\n",[28,34608,34609],{"class":30,"line":10106},[28,34610,2662],{"emptyLinePlaceholder":336},[28,34612,34613],{"class":30,"line":10112},[28,34614,34615],{"class":87},"# 实现模型的测试功能\n",[28,34617,34618,34620,34622,34624,34626],{"class":30,"line":10126},[28,34619,1796],{"class":34},[28,34621,31480],{"class":60},[28,34623,3211],{"class":34},[28,34625,31485],{"class":127},[28,34627,4001],{"class":38},[28,34629,34630],{"class":30,"line":10132},[28,34631,34632],{"class":87},"    # 加载模型\n",[28,34634,34635,34637,34639],{"class":30,"line":10159},[28,34636,31549],{"class":38},[28,34638,54],{"class":34},[28,34640,34081],{"class":38},[28,34642,34643],{"class":30,"line":10168},[28,34644,34645],{"class":87},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[28,34647,34648],{"class":30,"line":10174},[28,34649,34650],{"class":87},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[28,34652,34653,34656,34659],{"class":30,"line":10182},[28,34654,34655],{"class":38},"    model.load_state_dict(torch.load(",[28,34657,34658],{"class":127},"'best_model.pth'",[28,34660,30757],{"class":38},[28,34662,34663],{"class":30,"line":10187},[28,34664,34665],{"class":87},"    # 数据加载\n",[28,34667,34668,34670,34672],{"class":30,"line":16866},[28,34669,34278],{"class":38},[28,34671,54],{"class":34},[28,34673,34674],{"class":38},"test_data_process()\n",[28,34676,34677],{"class":30,"line":16872},[28,34678,34679],{"class":87},"    # 加载模型测试的函数\n",[28,34681,34682],{"class":30,"line":16895},[28,34683,34684],{"class":38},"    test_model_process(model,test_dataloader)\n",[28,34686,34687],{"class":30,"line":16901},[28,34688,2662],{"emptyLinePlaceholder":336},[28,34690,34691],{"class":30,"line":16924},[28,34692,34693],{"class":87},"    # 验证集推理实现：\n",[28,34695,34696],{"class":30,"line":16938},[28,34697,34698],{"class":87},"    # 加载数据加载的更详细一些\n",[28,34700,34701,34703,34705,34707,34709,34711,34713],{"class":30,"line":16958},[28,34702,31497],{"class":38},[28,34704,54],{"class":34},[28,34706,31504],{"class":127},[28,34708,1966],{"class":34},[28,34710,31509],{"class":38},[28,34712,1963],{"class":34},[28,34714,34375],{"class":127},[28,34716,34717,34719,34721],{"class":30,"line":16964},[28,34718,31549],{"class":38},[28,34720,54],{"class":34},[28,34722,32545],{"class":38},[28,34724,34725],{"class":30,"line":16975},[28,34726,34727],{"class":87},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[28,34729,34730],{"class":30,"line":16998},[28,34731,34732],{"class":87},"    # 顺序不可改变\n",[28,34734,34735,34738,34740,34742,34745,34747,34750,34752,34755,34757,34760,34762,34765,34767,34770,34772,34775,34777,34780,34782,34785,34787,34790],{"class":30,"line":17020},[28,34736,34737],{"class":38},"    classes",[28,34739,54],{"class":34},[28,34741,1287],{"class":38},[28,34743,34744],{"class":127},"'T-shirt\u002Ftop'",[28,34746,64],{"class":38},[28,34748,34749],{"class":127},"'Trouser'",[28,34751,64],{"class":38},[28,34753,34754],{"class":127},"'Pullover'",[28,34756,64],{"class":38},[28,34758,34759],{"class":127},"'Dress'",[28,34761,64],{"class":38},[28,34763,34764],{"class":127},"'Coat'",[28,34766,64],{"class":38},[28,34768,34769],{"class":127},"'Sandal'",[28,34771,64],{"class":38},[28,34773,34774],{"class":127},"'Shirt'",[28,34776,64],{"class":38},[28,34778,34779],{"class":127},"'Sneaker'",[28,34781,64],{"class":38},[28,34783,34784],{"class":127},"'Bag'",[28,34786,64],{"class":38},[28,34788,34789],{"class":127},"'Ankle boot'",[28,34791,33502],{"class":38},[28,34793,34794,34796],{"class":30,"line":17025},[28,34795,34434],{"class":34},[28,34797,33140],{"class":38},[28,34799,34800],{"class":30,"line":17031},[28,34801,34802],{"class":87},"        # 将数据和标签都放到设备当中\n",[28,34804,34805,34807,34810,34812],{"class":30,"line":17045},[28,34806,3665],{"class":34},[28,34808,34809],{"class":38}," b_x,b_y ",[28,34811,26306],{"class":34},[28,34813,34453],{"class":38},[28,34815,34816,34818,34820],{"class":30,"line":17058},[28,34817,32866],{"class":38},[28,34819,54],{"class":34},[28,34821,32871],{"class":38},[28,34823,34824,34826,34828],{"class":30,"line":17063},[28,34825,32881],{"class":38},[28,34827,54],{"class":34},[28,34829,32886],{"class":38},[28,34831,34832],{"class":30,"line":17077},[28,34833,2662],{"emptyLinePlaceholder":336},[28,34835,34836],{"class":30,"line":17082},[28,34837,34838],{"class":87},"            # 设置模型为验证模式\n",[28,34840,34841],{"class":30,"line":17088},[28,34842,33131],{"class":38},[28,34844,34845],{"class":30,"line":17093},[28,34846,34847],{"class":87},"            # 模型推理结果\n",[28,34849,34850,34852,34854],{"class":30,"line":17107},[28,34851,32916],{"class":38},[28,34853,54],{"class":34},[28,34855,32921],{"class":38},[28,34857,34858],{"class":30,"line":17112},[28,34859,34860],{"class":87},"            # 获取最大下标，最大下标就是类别号\n",[28,34862,34863,34865,34867,34869,34871,34873,34875],{"class":30,"line":17117},[28,34864,32933],{"class":38},[28,34866,54],{"class":34},[28,34868,32938],{"class":38},[28,34870,32941],{"class":5478},[28,34872,54],{"class":34},[28,34874,61],{"class":60},[28,34876,81],{"class":38},[28,34878,34879],{"class":30,"line":17131},[28,34880,34881],{"class":87},"            # 取出张量中的数值\n",[28,34883,34884,34887,34889],{"class":30,"line":17143},[28,34885,34886],{"class":38},"            result",[28,34888,54],{"class":34},[28,34890,34891],{"class":38},"pre_lab.item()\n",[28,34893,34894,34897,34899],{"class":30,"line":17148},[28,34895,34896],{"class":38},"            label",[28,34898,54],{"class":34},[28,34900,34901],{"class":38},"b_y.item()\n",[28,34903,34904,34907,34909,34912,34915,34918,34920,34923],{"class":30,"line":17161},[28,34905,34906],{"class":60},"            print",[28,34908,413],{"class":38},[28,34910,34911],{"class":127},"\"预测值：\"",[28,34913,34914],{"class":38},",classes[result],",[28,34916,34917],{"class":127},"\"------\"",[28,34919,64],{"class":38},[28,34921,34922],{"class":127},"\"真实值：\"",[28,34924,34925],{"class":38},",classes[label])\n",[14,34927,34928],{},"（2）AlexNet",[363,34930,34931],{},[366,34932,34933],{},"神经网络构建",[18,34935,34937],{"className":20,"code":34936,"language":22,"meta":23,"style":23},"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",[25,34938,34939,34945,34955,34965,34977,34981,34998,35006,35021,35033,35075,35102,35145,35171,35215,35258,35301,35328,35332,35342,35347,35375,35394,35413,35417,35422,35430,35445,35455,35469,35479,35494,35509,35524,35535,35539,35544,35554,35569,35574,35588,35603,35615,35620,35631,35636,35642,35647,35659,35679,35684,35693],{"__ignoreMap":23},[28,34940,34941,34943],{"class":30,"line":31},[28,34942,35],{"class":34},[28,34944,30655],{"class":38},[28,34946,34947,34949,34951,34953],{"class":30,"line":48},[28,34948,30997],{"class":34},[28,34950,31000],{"class":38},[28,34952,35],{"class":34},[28,34954,31005],{"class":38},[28,34956,34957,34959,34961,34963],{"class":30,"line":84},[28,34958,30997],{"class":34},[28,34960,31017],{"class":38},[28,34962,35],{"class":34},[28,34964,31022],{"class":38},[28,34966,34967,34969,34972,34974],{"class":30,"line":91},[28,34968,35],{"class":34},[28,34970,34971],{"class":38}," torch.nn.functional ",[28,34973,42],{"class":34},[28,34975,34976],{"class":38}," F\n",[28,34978,34979],{"class":30,"line":97},[28,34980,2662],{"emptyLinePlaceholder":336},[28,34982,34983,34985,34988,34990,34992,34994,34996],{"class":30,"line":103},[28,34984,14956],{"class":34},[28,34986,34987],{"class":2225}," AlexNet",[28,34989,413],{"class":38},[28,34991,31038],{"class":2225},[28,34993,956],{"class":38},[28,34995,31043],{"class":2225},[28,34997,31046],{"class":38},[28,34999,35000,35002,35004],{"class":30,"line":109},[28,35001,31061],{"class":34},[28,35003,31064],{"class":60},[28,35005,31067],{"class":38},[28,35007,35008,35010,35013,35015,35017,35019],{"class":30,"line":118},[28,35009,31077],{"class":60},[28,35011,35012],{"class":38},"(AlexNet,",[28,35014,31083],{"class":60},[28,35016,31086],{"class":38},[28,35018,31089],{"class":60},[28,35020,2238],{"class":38},[28,35022,35023,35025,35028,35030],{"class":30,"line":124},[28,35024,31105],{"class":60},[28,35026,35027],{"class":38},".ReLu",[28,35029,54],{"class":34},[28,35031,35032],{"class":38},"nn.ReLU()\n",[28,35034,35035,35037,35039,35041,35043,35045,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071,35073],{"class":30,"line":131},[28,35036,31105],{"class":60},[28,35038,31108],{"class":38},[28,35040,54],{"class":34},[28,35042,31113],{"class":38},[28,35044,31116],{"class":5478},[28,35046,54],{"class":34},[28,35048,61],{"class":60},[28,35050,64],{"class":38},[28,35052,31125],{"class":5478},[28,35054,54],{"class":34},[28,35056,614],{"class":60},[28,35058,64],{"class":38},[28,35060,31134],{"class":5478},[28,35062,54],{"class":34},[28,35064,871],{"class":60},[28,35066,64],{"class":38},[28,35068,31189],{"class":5478},[28,35070,54],{"class":34},[28,35072,73],{"class":60},[28,35074,81],{"class":38},[28,35076,35077,35079,35081,35083,35086,35088,35090,35092,35094,35096,35098,35100],{"class":30,"line":137},[28,35078,31105],{"class":60},[28,35080,31173],{"class":38},[28,35082,54],{"class":34},[28,35084,35085],{"class":38},"nn.MaxPool2d(",[28,35087,31134],{"class":5478},[28,35089,54],{"class":34},[28,35091,78],{"class":60},[28,35093,64],{"class":38},[28,35095,31189],{"class":5478},[28,35097,54],{"class":34},[28,35099,211],{"class":60},[28,35101,81],{"class":38},[28,35103,35104,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124,35127,35129,35131,35133,35135,35137,35139,35141,35143],{"class":30,"line":143},[28,35105,31105],{"class":60},[28,35107,31202],{"class":38},[28,35109,54],{"class":34},[28,35111,31113],{"class":38},[28,35113,31116],{"class":5478},[28,35115,54],{"class":34},[28,35117,614],{"class":60},[28,35119,64],{"class":38},[28,35121,31125],{"class":5478},[28,35123,54],{"class":34},[28,35125,35126],{"class":60},"256",[28,35128,64],{"class":38},[28,35130,31134],{"class":5478},[28,35132,54],{"class":34},[28,35134,721],{"class":60},[28,35136,64],{"class":38},[28,35138,31143],{"class":5478},[28,35140,54],{"class":34},[28,35142,211],{"class":60},[28,35144,81],{"class":38},[28,35146,35147,35149,35151,35153,35155,35157,35159,35161,35163,35165,35167,35169],{"class":30,"line":149},[28,35148,31105],{"class":60},[28,35150,31237],{"class":38},[28,35152,54],{"class":34},[28,35154,35085],{"class":38},[28,35156,31134],{"class":5478},[28,35158,54],{"class":34},[28,35160,78],{"class":60},[28,35162,64],{"class":38},[28,35164,31189],{"class":5478},[28,35166,54],{"class":34},[28,35168,211],{"class":60},[28,35170,81],{"class":38},[28,35172,35173,35175,35178,35180,35182,35184,35186,35188,35190,35192,35194,35197,35199,35201,35203,35205,35207,35209,35211,35213],{"class":30,"line":1890},[28,35174,31105],{"class":60},[28,35176,35177],{"class":38},".c5",[28,35179,54],{"class":34},[28,35181,31113],{"class":38},[28,35183,31116],{"class":5478},[28,35185,54],{"class":34},[28,35187,35126],{"class":60},[28,35189,64],{"class":38},[28,35191,31125],{"class":5478},[28,35193,54],{"class":34},[28,35195,35196],{"class":60},"384",[28,35198,64],{"class":38},[28,35200,31134],{"class":5478},[28,35202,54],{"class":34},[28,35204,78],{"class":60},[28,35206,64],{"class":38},[28,35208,31143],{"class":5478},[28,35210,54],{"class":34},[28,35212,61],{"class":60},[28,35214,81],{"class":38},[28,35216,35217,35219,35222,35224,35226,35228,35230,35232,35234,35236,35238,35240,35242,35244,35246,35248,35250,35252,35254,35256],{"class":30,"line":1904},[28,35218,31105],{"class":60},[28,35220,35221],{"class":38},".c6",[28,35223,54],{"class":34},[28,35225,31113],{"class":38},[28,35227,31116],{"class":5478},[28,35229,54],{"class":34},[28,35231,35196],{"class":60},[28,35233,64],{"class":38},[28,35235,31125],{"class":5478},[28,35237,54],{"class":34},[28,35239,35196],{"class":60},[28,35241,64],{"class":38},[28,35243,31134],{"class":5478},[28,35245,54],{"class":34},[28,35247,78],{"class":60},[28,35249,64],{"class":38},[28,35251,31143],{"class":5478},[28,35253,54],{"class":34},[28,35255,61],{"class":60},[28,35257,81],{"class":38},[28,35259,35260,35262,35265,35267,35269,35271,35273,35275,35277,35279,35281,35283,35285,35287,35289,35291,35293,35295,35297,35299],{"class":30,"line":1909},[28,35261,31105],{"class":60},[28,35263,35264],{"class":38},".c7",[28,35266,54],{"class":34},[28,35268,31113],{"class":38},[28,35270,31116],{"class":5478},[28,35272,54],{"class":34},[28,35274,35196],{"class":60},[28,35276,64],{"class":38},[28,35278,31125],{"class":5478},[28,35280,54],{"class":34},[28,35282,35126],{"class":60},[28,35284,64],{"class":38},[28,35286,31134],{"class":5478},[28,35288,54],{"class":34},[28,35290,78],{"class":60},[28,35292,64],{"class":38},[28,35294,31143],{"class":5478},[28,35296,54],{"class":34},[28,35298,61],{"class":60},[28,35300,81],{"class":38},[28,35302,35303,35305,35308,35310,35312,35314,35316,35318,35320,35322,35324,35326],{"class":30,"line":1915},[28,35304,31105],{"class":60},[28,35306,35307],{"class":38},".s8",[28,35309,54],{"class":34},[28,35311,35085],{"class":38},[28,35313,31134],{"class":5478},[28,35315,54],{"class":34},[28,35317,78],{"class":60},[28,35319,64],{"class":38},[28,35321,31189],{"class":5478},[28,35323,54],{"class":34},[28,35325,211],{"class":60},[28,35327,81],{"class":38},[28,35329,35330],{"class":30,"line":1936},[28,35331,31262],{"class":87},[28,35333,35334,35336,35338,35340],{"class":30,"line":1941},[28,35335,31105],{"class":60},[28,35337,31269],{"class":38},[28,35339,54],{"class":34},[28,35341,31274],{"class":38},[28,35343,35344],{"class":30,"line":1955},[28,35345,35346],{"class":87},"       # 定义全连接层\n",[28,35348,35349,35351,35354,35356,35358,35360,35362,35364,35366,35368,35370,35373],{"class":30,"line":1960},[28,35350,31105],{"class":60},[28,35352,35353],{"class":38},".f1",[28,35355,54],{"class":34},[28,35357,31291],{"class":38},[28,35359,206],{"class":60},[28,35361,854],{"class":34},[28,35363,206],{"class":60},[28,35365,854],{"class":34},[28,35367,35126],{"class":60},[28,35369,64],{"class":38},[28,35371,35372],{"class":60},"4096",[28,35374,81],{"class":38},[28,35376,35377,35379,35382,35384,35386,35388,35390,35392],{"class":30,"line":1989},[28,35378,31105],{"class":60},[28,35380,35381],{"class":38},".f2",[28,35383,54],{"class":34},[28,35385,31291],{"class":38},[28,35387,35372],{"class":60},[28,35389,64],{"class":38},[28,35391,35372],{"class":60},[28,35393,81],{"class":38},[28,35395,35396,35398,35401,35403,35405,35407,35409,35411],{"class":30,"line":1994},[28,35397,31105],{"class":60},[28,35399,35400],{"class":38},".f3",[28,35402,54],{"class":34},[28,35404,31291],{"class":38},[28,35406,35372],{"class":60},[28,35408,64],{"class":38},[28,35410,845],{"class":60},[28,35412,81],{"class":38},[28,35414,35415],{"class":30,"line":2011},[28,35416,2662],{"emptyLinePlaceholder":336},[28,35418,35419],{"class":30,"line":2016},[28,35420,35421],{"class":87},"    # 定义前向传播\n",[28,35423,35424,35426,35428],{"class":30,"line":2021},[28,35425,31061],{"class":34},[28,35427,31353],{"class":2225},[28,35429,31356],{"class":38},[28,35431,35432,35434,35436,35438,35441,35443],{"class":30,"line":2026},[28,35433,31361],{"class":38},[28,35435,54],{"class":34},[28,35437,31083],{"class":60},[28,35439,35440],{"class":38},".ReLu(",[28,35442,31083],{"class":60},[28,35444,31373],{"class":38},[28,35446,35447,35449,35451,35453],{"class":30,"line":2040},[28,35448,31361],{"class":38},[28,35450,54],{"class":34},[28,35452,31083],{"class":60},[28,35454,31384],{"class":38},[28,35456,35457,35459,35461,35463,35465,35467],{"class":30,"line":2045},[28,35458,31361],{"class":38},[28,35460,54],{"class":34},[28,35462,31083],{"class":60},[28,35464,35440],{"class":38},[28,35466,31083],{"class":60},[28,35468,31399],{"class":38},[28,35470,35471,35473,35475,35477],{"class":30,"line":2839},[28,35472,31361],{"class":38},[28,35474,54],{"class":34},[28,35476,31083],{"class":60},[28,35478,31410],{"class":38},[28,35480,35481,35483,35485,35487,35489,35491],{"class":30,"line":2853},[28,35482,31361],{"class":38},[28,35484,54],{"class":34},[28,35486,31083],{"class":60},[28,35488,35440],{"class":38},[28,35490,31083],{"class":60},[28,35492,35493],{"class":38},".c5(x))\n",[28,35495,35496,35498,35500,35502,35504,35506],{"class":30,"line":2861},[28,35497,31361],{"class":38},[28,35499,54],{"class":34},[28,35501,31083],{"class":60},[28,35503,35440],{"class":38},[28,35505,31083],{"class":60},[28,35507,35508],{"class":38},".c6(x))\n",[28,35510,35511,35513,35515,35517,35519,35521],{"class":30,"line":2866},[28,35512,31361],{"class":38},[28,35514,54],{"class":34},[28,35516,31083],{"class":60},[28,35518,35440],{"class":38},[28,35520,31083],{"class":60},[28,35522,35523],{"class":38},".c7(x))\n",[28,35525,35526,35528,35530,35532],{"class":30,"line":2872},[28,35527,31361],{"class":38},[28,35529,54],{"class":34},[28,35531,31083],{"class":60},[28,35533,35534],{"class":38},".s8(x)\n",[28,35536,35537],{"class":30,"line":2878},[28,35538,2662],{"emptyLinePlaceholder":336},[28,35540,35541],{"class":30,"line":2883},[28,35542,35543],{"class":87},"        # 展平加线性全连接层\n",[28,35545,35546,35548,35550,35552],{"class":30,"line":8210},[28,35547,31361],{"class":38},[28,35549,54],{"class":34},[28,35551,31083],{"class":60},[28,35553,31421],{"class":38},[28,35555,35556,35558,35560,35562,35564,35566],{"class":30,"line":8234},[28,35557,31361],{"class":38},[28,35559,54],{"class":34},[28,35561,31083],{"class":60},[28,35563,35440],{"class":38},[28,35565,31083],{"class":60},[28,35567,35568],{"class":38},".f1(x))\n",[28,35570,35571],{"class":30,"line":8239},[28,35572,35573],{"class":87},"        # 还需要dropout对神经元随机进行失活\n",[28,35575,35576,35578,35580,35583,35586],{"class":30,"line":8245},[28,35577,31361],{"class":38},[28,35579,54],{"class":34},[28,35581,35582],{"class":38},"F.dropout(x,",[28,35584,35585],{"class":60},"0.5",[28,35587,81],{"class":38},[28,35589,35590,35592,35594,35596,35598,35600],{"class":30,"line":8272},[28,35591,31361],{"class":38},[28,35593,54],{"class":34},[28,35595,31083],{"class":60},[28,35597,35440],{"class":38},[28,35599,31083],{"class":60},[28,35601,35602],{"class":38},".f2(x))\n",[28,35604,35605,35607,35609,35611,35613],{"class":30,"line":8277},[28,35606,31361],{"class":38},[28,35608,54],{"class":34},[28,35610,35582],{"class":38},[28,35612,35585],{"class":60},[28,35614,81],{"class":38},[28,35616,35617],{"class":30,"line":8283},[28,35618,35619],{"class":87},"        # 直接输出\n",[28,35621,35622,35624,35626,35628],{"class":30,"line":8295},[28,35623,31361],{"class":38},[28,35625,54],{"class":34},[28,35627,31083],{"class":60},[28,35629,35630],{"class":38},".f3(x)\n",[28,35632,35633],{"class":30,"line":8307},[28,35634,35635],{"class":87},"        # 前向传播输出\n",[28,35637,35638,35640],{"class":30,"line":8319},[28,35639,15014],{"class":34},[28,35641,31469],{"class":38},[28,35643,35644],{"class":30,"line":9978},[28,35645,35646],{"class":87},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[28,35648,35649,35651,35653,35655,35657],{"class":30,"line":10003},[28,35650,1796],{"class":34},[28,35652,31480],{"class":60},[28,35654,3211],{"class":34},[28,35656,31485],{"class":127},[28,35658,4001],{"class":38},[28,35660,35661,35663,35665,35667,35669,35671,35673,35675,35677],{"class":30,"line":10026},[28,35662,31497],{"class":38},[28,35664,54],{"class":34},[28,35666,30711],{"class":38},[28,35668,31504],{"class":127},[28,35670,1966],{"class":34},[28,35672,31509],{"class":38},[28,35674,1963],{"class":34},[28,35676,30736],{"class":127},[28,35678,81],{"class":38},[28,35680,35681],{"class":30,"line":10050},[28,35682,35683],{"class":87},"    # 模型实例化，然后将实例化的模型放到设备中\n",[28,35685,35686,35688,35690],{"class":30,"line":10055},[28,35687,31549],{"class":38},[28,35689,54],{"class":34},[28,35691,35692],{"class":38},"AlexNet().to(device)\n",[28,35694,35695,35697,35699,35701,35703,35706,35708,35710],{"class":30,"line":10060},[28,35696,31559],{"class":60},[28,35698,31562],{"class":38},[28,35700,61],{"class":60},[28,35702,64],{"class":38},[28,35704,35705],{"class":60},"227",[28,35707,64],{"class":38},[28,35709,35705],{"class":60},[28,35711,31575],{"class":38},[363,35713,35714],{"start":48},[366,35715,31588],{},[18,35717,35719],{"className":20,"code":35718,"language":22,"meta":23,"style":23},"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",[25,35720,35721,35727,35733,35743,35749,35759,35769,35779,35789,35799,35803,35814,35824,35828,35832,35836,35844,35856,35866,35882,35892,35924,35938,35948,35958,35962,35972,35986,35996,36006,36016,36022,36026,36030,36034,36038,36042,36050,36070,36074,36078,36082,36086,36090,36106,36110,36114,36122,36126,36130,36138,36142,36146,36150,36158,36162,36166,36170,36174,36182,36186,36194,36198,36206,36210,36218,36222,36230,36234,36238,36246,36250,36254,36258,36270,36294,36308,36312,36316,36320,36328,36332,36340,36344,36352,36356,36364,36368,36376,36380,36388,36392,36404,36408,36416,36420,36428,36432,36436,36440,36444,36452,36456,36472,36476,36484,36488,36492,36496,36500,36504,36508,36512,36528,36532,36544,36548,36560,36564,36576,36580,36588,36592,36600,36604,36608,36613,36619,36623,36632,36636,36653,36657,36666,36670,36688,36701,36706,36719,36723,36727,36735,36739,36743,36751,36755,36763,36767,36775,36779,36783,36825,36867,36871,36875,36891,36895,36911,36915,36919,36927,36931,36935,36947,36985,36990,36995,37004,37008,37022,37032,37038,37044,37050,37056,37060,37064,37070,37074,37078,37086,37090,37108,37112,37116,37120,37136,37140,37144,37148,37152,37156,37176,37196,37200,37204,37208,37216,37224,37228,37244,37264,37284,37288,37292,37300,37308,37312,37316,37320,37332,37336,37346,37354,37371],{"__ignoreMap":23},[28,35722,35723,35725],{"class":30,"line":31},[28,35724,35],{"class":34},[28,35726,32078],{"class":38},[28,35728,35729,35731],{"class":30,"line":48},[28,35730,35],{"class":34},[28,35732,32085],{"class":38},[28,35734,35735,35737,35739,35741],{"class":30,"line":84},[28,35736,35],{"class":34},[28,35738,32096],{"class":38},[28,35740,42],{"class":34},[28,35742,32101],{"class":38},[28,35744,35745,35747],{"class":30,"line":91},[28,35746,35],{"class":34},[28,35748,30655],{"class":38},[28,35750,35751,35753,35755,35757],{"class":30,"line":97},[28,35752,30997],{"class":34},[28,35754,31672],{"class":38},[28,35756,35],{"class":34},[28,35758,32118],{"class":38},[28,35760,35761,35763,35765,35767],{"class":30,"line":103},[28,35762,30997],{"class":34},[28,35764,31628],{"class":38},[28,35766,35],{"class":34},[28,35768,31633],{"class":38},[28,35770,35771,35773,35775,35777],{"class":30,"line":109},[28,35772,30997],{"class":34},[28,35774,31655],{"class":38},[28,35776,35],{"class":34},[28,35778,31660],{"class":38},[28,35780,35781,35783,35785,35787],{"class":30,"line":118},[28,35782,35],{"class":34},[28,35784,31672],{"class":38},[28,35786,42],{"class":34},[28,35788,31677],{"class":38},[28,35790,35791,35793,35795,35797],{"class":30,"line":124},[28,35792,35],{"class":34},[28,35794,31689],{"class":38},[28,35796,42],{"class":34},[28,35798,31694],{"class":38},[28,35800,35801],{"class":30,"line":131},[28,35802,32163],{"class":87},[28,35804,35805,35807,35809,35811],{"class":30,"line":137},[28,35806,30997],{"class":34},[28,35808,32170],{"class":38},[28,35810,35],{"class":34},[28,35812,35813],{"class":38}," AlexNet\n",[28,35815,35816,35818,35820,35822],{"class":30,"line":143},[28,35817,30997],{"class":34},[28,35819,31000],{"class":38},[28,35821,35],{"class":34},[28,35823,31005],{"class":38},[28,35825,35826],{"class":30,"line":149},[28,35827,2662],{"emptyLinePlaceholder":336},[28,35829,35830],{"class":30,"line":1890},[28,35831,2662],{"emptyLinePlaceholder":336},[28,35833,35834],{"class":30,"line":1904},[28,35835,32198],{"class":87},[28,35837,35838,35840,35842],{"class":30,"line":1909},[28,35839,32203],{"class":34},[28,35841,32206],{"class":2225},[28,35843,32209],{"class":38},[28,35845,35846,35848,35850,35852,35854],{"class":30,"line":1915},[28,35847,32214],{"class":38},[28,35849,54],{"class":34},[28,35851,31712],{"class":38},[28,35853,31720],{"class":127},[28,35855,31723],{"class":38},[28,35857,35858,35860,35862,35864],{"class":30,"line":1936},[28,35859,32227],{"class":5478},[28,35861,54],{"class":34},[28,35863,31733],{"class":60},[28,35865,31723],{"class":38},[28,35867,35868,35870,35872,35874,35876,35878,35880],{"class":30,"line":1941},[28,35869,32238],{"class":5478},[28,35871,54],{"class":34},[28,35873,31750],{"class":38},[28,35875,31753],{"class":5478},[28,35877,54],{"class":34},[28,35879,35705],{"class":60},[28,35881,31761],{"class":38},[28,35883,35884,35886,35888,35890],{"class":30,"line":1955},[28,35885,32255],{"class":5478},[28,35887,54],{"class":34},[28,35889,31733],{"class":60},[28,35891,81],{"class":38},[28,35893,35894,35896,35898,35900,35902,35904,35906,35908,35910,35912,35914,35916,35918,35920,35922],{"class":30,"line":1960},[28,35895,32266],{"class":38},[28,35897,54],{"class":34},[28,35899,32271],{"class":38},[28,35901,32274],{"class":60},[28,35903,413],{"class":38},[28,35905,32279],{"class":60},[28,35907,854],{"class":34},[28,35909,7620],{"class":60},[28,35911,32286],{"class":38},[28,35913,32274],{"class":60},[28,35915,413],{"class":38},[28,35917,32293],{"class":60},[28,35919,854],{"class":34},[28,35921,7620],{"class":60},[28,35923,32300],{"class":38},[28,35925,35926,35928,35930,35932,35934,35936],{"class":30,"line":1989},[28,35927,32305],{"class":38},[28,35929,54],{"class":34},[28,35931,32310],{"class":38},[28,35933,31794],{"class":5478},[28,35935,54],{"class":34},[28,35937,31799],{"class":38},[28,35939,35940,35942,35944,35946],{"class":30,"line":1994},[28,35941,32321],{"class":5478},[28,35943,54],{"class":34},[28,35945,32326],{"class":60},[28,35947,31723],{"class":38},[28,35949,35950,35952,35954,35956],{"class":30,"line":2011},[28,35951,32333],{"class":5478},[28,35953,54],{"class":34},[28,35955,31733],{"class":60},[28,35957,31723],{"class":38},[28,35959,35960],{"class":30,"line":2016},[28,35961,32344],{"class":87},[28,35963,35964,35966,35968,35970],{"class":30,"line":2021},[28,35965,32349],{"class":5478},[28,35967,54],{"class":34},[28,35969,794],{"class":60},[28,35971,81],{"class":38},[28,35973,35974,35976,35978,35980,35982,35984],{"class":30,"line":2026},[28,35975,32360],{"class":38},[28,35977,54],{"class":34},[28,35979,31791],{"class":38},[28,35981,31794],{"class":5478},[28,35983,54],{"class":34},[28,35985,32371],{"class":38},[28,35987,35988,35990,35992,35994],{"class":30,"line":2040},[28,35989,32376],{"class":5478},[28,35991,54],{"class":34},[28,35993,32326],{"class":60},[28,35995,31723],{"class":38},[28,35997,35998,36000,36002,36004],{"class":30,"line":2045},[28,35999,32387],{"class":5478},[28,36001,54],{"class":34},[28,36003,31733],{"class":60},[28,36005,31723],{"class":38},[28,36007,36008,36010,36012,36014],{"class":30,"line":2839},[28,36009,32398],{"class":5478},[28,36011,54],{"class":34},[28,36013,794],{"class":60},[28,36015,81],{"class":38},[28,36017,36018,36020],{"class":30,"line":2853},[28,36019,4352],{"class":34},[28,36021,32411],{"class":38},[28,36023,36024],{"class":30,"line":2861},[28,36025,2662],{"emptyLinePlaceholder":336},[28,36027,36028],{"class":30,"line":2866},[28,36029,32420],{"class":87},[28,36031,36032],{"class":30,"line":2872},[28,36033,32425],{"class":87},[28,36035,36036],{"class":30,"line":2878},[28,36037,2662],{"emptyLinePlaceholder":336},[28,36039,36040],{"class":30,"line":2883},[28,36041,32434],{"class":87},[28,36043,36044,36046,36048],{"class":30,"line":8210},[28,36045,32203],{"class":34},[28,36047,32441],{"class":2225},[28,36049,32444],{"class":38},[28,36051,36052,36054,36056,36058,36060,36062,36064,36066,36068],{"class":30,"line":8234},[28,36053,31497],{"class":38},[28,36055,54],{"class":34},[28,36057,30711],{"class":38},[28,36059,31504],{"class":127},[28,36061,1966],{"class":34},[28,36063,31509],{"class":38},[28,36065,1963],{"class":34},[28,36067,32463],{"class":127},[28,36069,81],{"class":38},[28,36071,36072],{"class":30,"line":8239},[28,36073,2662],{"emptyLinePlaceholder":336},[28,36075,36076],{"class":30,"line":8245},[28,36077,2662],{"emptyLinePlaceholder":336},[28,36079,36080],{"class":30,"line":8272},[28,36081,32478],{"class":87},[28,36083,36084],{"class":30,"line":8277},[28,36085,32483],{"class":87},[28,36087,36088],{"class":30,"line":8283},[28,36089,32488],{"class":87},[28,36091,36092,36094,36096,36098,36100,36102,36104],{"class":30,"line":8295},[28,36093,32493],{"class":38},[28,36095,54],{"class":34},[28,36097,32498],{"class":38},[28,36099,32501],{"class":5478},[28,36101,54],{"class":34},[28,36103,32506],{"class":60},[28,36105,81],{"class":38},[28,36107,36108],{"class":30,"line":8307},[28,36109,2662],{"emptyLinePlaceholder":336},[28,36111,36112],{"class":30,"line":8319},[28,36113,32517],{"class":87},[28,36115,36116,36118,36120],{"class":30,"line":9978},[28,36117,32522],{"class":38},[28,36119,54],{"class":34},[28,36121,32527],{"class":38},[28,36123,36124],{"class":30,"line":10003},[28,36125,2662],{"emptyLinePlaceholder":336},[28,36127,36128],{"class":30,"line":10026},[28,36129,32536],{"class":87},[28,36131,36132,36134,36136],{"class":30,"line":10050},[28,36133,31549],{"class":38},[28,36135,54],{"class":34},[28,36137,32545],{"class":38},[28,36139,36140],{"class":30,"line":10055},[28,36141,32550],{"class":87},[28,36143,36144],{"class":30,"line":10060},[28,36145,32555],{"class":87},[28,36147,36148],{"class":30,"line":10065},[28,36149,32560],{"class":87},[28,36151,36152,36154,36156],{"class":30,"line":10074},[28,36153,32565],{"class":38},[28,36155,54],{"class":34},[28,36157,32570],{"class":38},[28,36159,36160],{"class":30,"line":10079},[28,36161,2662],{"emptyLinePlaceholder":336},[28,36163,36164],{"class":30,"line":10085},[28,36165,2662],{"emptyLinePlaceholder":336},[28,36167,36168],{"class":30,"line":10106},[28,36169,32583],{"class":87},[28,36171,36172],{"class":30,"line":10112},[28,36173,32588],{"class":87},[28,36175,36176,36178,36180],{"class":30,"line":10126},[28,36177,32593],{"class":38},[28,36179,54],{"class":34},[28,36181,32598],{"class":60},[28,36183,36184],{"class":30,"line":10132},[28,36185,32603],{"class":87},[28,36187,36188,36190,36192],{"class":30,"line":10159},[28,36189,32608],{"class":38},[28,36191,54],{"class":34},[28,36193,32613],{"class":38},[28,36195,36196],{"class":30,"line":10168},[28,36197,32618],{"class":87},[28,36199,36200,36202,36204],{"class":30,"line":10174},[28,36201,32623],{"class":38},[28,36203,54],{"class":34},[28,36205,32613],{"class":38},[28,36207,36208],{"class":30,"line":10182},[28,36209,32632],{"class":87},[28,36211,36212,36214,36216],{"class":30,"line":10187},[28,36213,32637],{"class":38},[28,36215,54],{"class":34},[28,36217,32613],{"class":38},[28,36219,36220],{"class":30,"line":16866},[28,36221,32646],{"class":87},[28,36223,36224,36226,36228],{"class":30,"line":16872},[28,36225,32651],{"class":38},[28,36227,54],{"class":34},[28,36229,32613],{"class":38},[28,36231,36232],{"class":30,"line":16895},[28,36233,2662],{"emptyLinePlaceholder":336},[28,36235,36236],{"class":30,"line":16901},[28,36237,32664],{"class":87},[28,36239,36240,36242,36244],{"class":30,"line":16924},[28,36241,32669],{"class":38},[28,36243,54],{"class":34},[28,36245,32674],{"class":38},[28,36247,36248],{"class":30,"line":16938},[28,36249,2662],{"emptyLinePlaceholder":336},[28,36251,36252],{"class":30,"line":16958},[28,36253,2662],{"emptyLinePlaceholder":336},[28,36255,36256],{"class":30,"line":16964},[28,36257,32687],{"class":87},[28,36259,36260,36262,36264,36266,36268],{"class":30,"line":16975},[28,36261,3463],{"class":34},[28,36263,32694],{"class":38},[28,36265,26306],{"class":34},[28,36267,32699],{"class":60},[28,36269,32702],{"class":38},[28,36271,36272,36274,36276,36278,36280,36282,36284,36286,36288,36290,36292],{"class":30,"line":16998},[28,36273,32707],{"class":60},[28,36275,413],{"class":38},[28,36277,32712],{"class":127},[28,36279,32715],{"class":60},[28,36281,982],{"class":127},[28,36283,32715],{"class":60},[28,36285,654],{"class":127},[28,36287,32724],{"class":38},[28,36289,930],{"class":34},[28,36291,61],{"class":60},[28,36293,30757],{"class":38},[28,36295,36296,36298,36300,36302,36304,36306],{"class":30,"line":17020},[28,36297,32707],{"class":60},[28,36299,413],{"class":38},[28,36301,32739],{"class":127},[28,36303,854],{"class":34},[28,36305,845],{"class":60},[28,36307,81],{"class":38},[28,36309,36310],{"class":30,"line":17025},[28,36311,2662],{"emptyLinePlaceholder":336},[28,36313,36314],{"class":30,"line":17031},[28,36315,32754],{"class":87},[28,36317,36318],{"class":30,"line":17045},[28,36319,32759],{"class":87},[28,36321,36322,36324,36326],{"class":30,"line":17058},[28,36323,32764],{"class":38},[28,36325,54],{"class":34},[28,36327,32598],{"class":60},[28,36329,36330],{"class":30,"line":17063},[28,36331,32773],{"class":87},[28,36333,36334,36336,36338],{"class":30,"line":17077},[28,36335,32778],{"class":38},[28,36337,54],{"class":34},[28,36339,3347],{"class":60},[28,36341,36342],{"class":30,"line":17082},[28,36343,32787],{"class":87},[28,36345,36346,36348,36350],{"class":30,"line":17088},[28,36347,32792],{"class":38},[28,36349,54],{"class":34},[28,36351,32598],{"class":60},[28,36353,36354],{"class":30,"line":17093},[28,36355,32801],{"class":87},[28,36357,36358,36360,36362],{"class":30,"line":17107},[28,36359,32806],{"class":38},[28,36361,54],{"class":34},[28,36363,3347],{"class":60},[28,36365,36366],{"class":30,"line":17112},[28,36367,32815],{"class":87},[28,36369,36370,36372,36374],{"class":30,"line":17117},[28,36371,32820],{"class":38},[28,36373,54],{"class":34},[28,36375,3347],{"class":60},[28,36377,36378],{"class":30,"line":17131},[28,36379,32829],{"class":87},[28,36381,36382,36384,36386],{"class":30,"line":17143},[28,36383,32834],{"class":38},[28,36385,54],{"class":34},[28,36387,3347],{"class":60},[28,36389,36390],{"class":30,"line":17148},[28,36391,32843],{"class":87},[28,36393,36394,36396,36398,36400,36402],{"class":30,"line":17161},[28,36395,3665],{"class":34},[28,36397,31858],{"class":38},[28,36399,26306],{"class":34},[28,36401,31863],{"class":60},[28,36403,32856],{"class":38},[28,36405,36406],{"class":30,"line":17166},[28,36407,32861],{"class":87},[28,36409,36410,36412,36414],{"class":30,"line":17171},[28,36411,32866],{"class":38},[28,36413,54],{"class":34},[28,36415,32871],{"class":38},[28,36417,36418],{"class":30,"line":17176},[28,36419,32876],{"class":87},[28,36421,36422,36424,36426],{"class":30,"line":17189},[28,36423,32881],{"class":38},[28,36425,54],{"class":34},[28,36427,32886],{"class":38},[28,36429,36430],{"class":30,"line":17194},[28,36431,32892],{"class":87},[28,36433,36434],{"class":30,"line":32889},[28,36435,32898],{"class":38},[28,36437,36438],{"class":30,"line":32895},[28,36439,32904],{"class":87},[28,36441,36442],{"class":30,"line":32901},[28,36443,32910],{"class":87},[28,36445,36446,36448,36450],{"class":30,"line":32907},[28,36447,32916],{"class":38},[28,36449,54],{"class":34},[28,36451,32921],{"class":38},[28,36453,36454],{"class":30,"line":32913},[28,36455,32927],{"class":87},[28,36457,36458,36460,36462,36464,36466,36468,36470],{"class":30,"line":32924},[28,36459,32933],{"class":38},[28,36461,54],{"class":34},[28,36463,32938],{"class":38},[28,36465,32941],{"class":5478},[28,36467,54],{"class":34},[28,36469,61],{"class":60},[28,36471,81],{"class":38},[28,36473,36474],{"class":30,"line":32930},[28,36475,32953],{"class":87},[28,36477,36478,36480,36482],{"class":30,"line":32950},[28,36479,32959],{"class":38},[28,36481,54],{"class":34},[28,36483,32964],{"class":38},[28,36485,36486],{"class":30,"line":32956},[28,36487,32970],{"class":87},[28,36489,36490],{"class":30,"line":32967},[28,36491,32976],{"class":38},[28,36493,36494],{"class":30,"line":32973},[28,36495,32982],{"class":87},[28,36497,36498],{"class":30,"line":32979},[28,36499,32988],{"class":38},[28,36501,36502],{"class":30,"line":32985},[28,36503,32994],{"class":87},[28,36505,36506],{"class":30,"line":32991},[28,36507,33000],{"class":38},[28,36509,36510],{"class":30,"line":32997},[28,36511,33006],{"class":87},[28,36513,36514,36516,36518,36520,36522,36524,36526],{"class":30,"line":33003},[28,36515,33012],{"class":38},[28,36517,9739],{"class":34},[28,36519,33017],{"class":38},[28,36521,854],{"class":34},[28,36523,33022],{"class":38},[28,36525,244],{"class":60},[28,36527,81],{"class":38},[28,36529,36530],{"class":30,"line":33009},[28,36531,33032],{"class":87},[28,36533,36534,36536,36538,36540,36542],{"class":30,"line":33029},[28,36535,33038],{"class":38},[28,36537,9739],{"class":34},[28,36539,33043],{"class":38},[28,36541,3211],{"class":34},[28,36543,33048],{"class":38},[28,36545,36546],{"class":30,"line":33035},[28,36547,33054],{"class":87},[28,36549,36550,36552,36554,36556,36558],{"class":30,"line":33051},[28,36551,33060],{"class":38},[28,36553,9739],{"class":34},[28,36555,33022],{"class":38},[28,36557,244],{"class":60},[28,36559,81],{"class":38},[28,36561,36562],{"class":30,"line":33057},[28,36563,33074],{"class":87},[28,36565,36566,36568,36570,36572,36574],{"class":30,"line":33071},[28,36567,3665],{"class":34},[28,36569,33082],{"class":38},[28,36571,26306],{"class":34},[28,36573,31863],{"class":60},[28,36575,33089],{"class":38},[28,36577,36578],{"class":30,"line":33077},[28,36579,33095],{"class":87},[28,36581,36582,36584,36586],{"class":30,"line":33092},[28,36583,32866],{"class":38},[28,36585,54],{"class":34},[28,36587,32871],{"class":38},[28,36589,36590],{"class":30,"line":33098},[28,36591,33110],{"class":87},[28,36593,36594,36596,36598],{"class":30,"line":33107},[28,36595,32881],{"class":38},[28,36597,54],{"class":34},[28,36599,32886],{"class":38},[28,36601,36602],{"class":30,"line":33113},[28,36603,33125],{"class":87},[28,36605,36606],{"class":30,"line":33122},[28,36607,33131],{"class":38},[28,36609,36610],{"class":30,"line":33128},[28,36611,36612],{"class":87},"            # 验证时不计算梯度以节省内存\u002F计算\n",[28,36614,36615,36617],{"class":30,"line":33134},[28,36616,33137],{"class":34},[28,36618,33140],{"class":38},[28,36620,36621],{"class":30,"line":33143},[28,36622,33146],{"class":87},[28,36624,36625,36628,36630],{"class":30,"line":33149},[28,36626,36627],{"class":38},"                output",[28,36629,54],{"class":34},[28,36631,32921],{"class":38},[28,36633,36634],{"class":30,"line":33160},[28,36635,33163],{"class":87},[28,36637,36638,36641,36643,36645,36647,36649,36651],{"class":30,"line":33166},[28,36639,36640],{"class":38},"                pre_lab",[28,36642,54],{"class":34},[28,36644,32938],{"class":38},[28,36646,32941],{"class":5478},[28,36648,54],{"class":34},[28,36650,61],{"class":60},[28,36652,81],{"class":38},[28,36654,36655],{"class":30,"line":33185},[28,36656,33188],{"class":87},[28,36658,36659,36662,36664],{"class":30,"line":33191},[28,36660,36661],{"class":38},"                val_batch_loss",[28,36663,54],{"class":34},[28,36665,32964],{"class":38},[28,36667,36668],{"class":30,"line":33202},[28,36669,33205],{"class":87},[28,36671,36672,36675,36677,36680,36682,36684,36686],{"class":30,"line":33208},[28,36673,36674],{"class":38},"                val_loss",[28,36676,9739],{"class":34},[28,36678,36679],{"class":38},"val_batch_loss.item()",[28,36681,854],{"class":34},[28,36683,33022],{"class":38},[28,36685,244],{"class":60},[28,36687,81],{"class":38},[28,36689,36690,36693,36695,36697,36699],{"class":30,"line":33228},[28,36691,36692],{"class":38},"                val_corrects",[28,36694,9739],{"class":34},[28,36696,33043],{"class":38},[28,36698,3211],{"class":34},[28,36700,33048],{"class":38},[28,36702,36703],{"class":30,"line":33244},[28,36704,36705],{"class":87},"            # 当前用于验证的样本数量\n",[28,36707,36708,36711,36713,36715,36717],{"class":30,"line":33250},[28,36709,36710],{"class":38},"            val_num",[28,36712,9739],{"class":34},[28,36714,33022],{"class":38},[28,36716,244],{"class":60},[28,36718,81],{"class":38},[28,36720,36721],{"class":30,"line":33264},[28,36722,33267],{"class":87},[28,36724,36725],{"class":30,"line":33270},[28,36726,33273],{"class":87},[28,36728,36729,36731,36733],{"class":30,"line":33276},[28,36730,33279],{"class":38},[28,36732,982],{"class":34},[28,36734,33284],{"class":38},[28,36736,36737],{"class":30,"line":33287},[28,36738,33290],{"class":87},[28,36740,36741],{"class":30,"line":33293},[28,36742,33296],{"class":87},[28,36744,36745,36747,36749],{"class":30,"line":33299},[28,36746,33302],{"class":38},[28,36748,982],{"class":34},[28,36750,33284],{"class":38},[28,36752,36753],{"class":30,"line":33309},[28,36754,33312],{"class":87},[28,36756,36757,36759,36761],{"class":30,"line":33315},[28,36758,33318],{"class":38},[28,36760,982],{"class":34},[28,36762,33323],{"class":38},[28,36764,36765],{"class":30,"line":33326},[28,36766,33329],{"class":87},[28,36768,36769,36771,36773],{"class":30,"line":33332},[28,36770,33335],{"class":38},[28,36772,982],{"class":34},[28,36774,33323],{"class":38},[28,36776,36777],{"class":30,"line":33342},[28,36778,2662],{"emptyLinePlaceholder":336},[28,36780,36781],{"class":30,"line":33347},[28,36782,33350],{"class":87},[28,36784,36785,36787,36789,36791,36793,36795,36797,36799,36801,36803,36805,36807,36809,36811,36813,36815,36817,36819,36821,36823],{"class":30,"line":33353},[28,36786,32707],{"class":60},[28,36788,413],{"class":38},[28,36790,3854],{"class":127},[28,36792,32715],{"class":60},[28,36794,33364],{"class":127},[28,36796,1293],{"class":60},[28,36798,33369],{"class":34},[28,36800,1343],{"class":60},[28,36802,33374],{"class":127},[28,36804,1293],{"class":60},[28,36806,33369],{"class":34},[28,36808,1343],{"class":60},[28,36810,3854],{"class":127},[28,36812,33385],{"class":38},[28,36814,930],{"class":34},[28,36816,61],{"class":60},[28,36818,33392],{"class":38},[28,36820,930],{"class":34},[28,36822,61],{"class":60},[28,36824,33399],{"class":38},[28,36826,36827,36829,36831,36833,36835,36837,36839,36841,36843,36845,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865],{"class":30,"line":33402},[28,36828,32707],{"class":60},[28,36830,413],{"class":38},[28,36832,3854],{"class":127},[28,36834,32715],{"class":60},[28,36836,33413],{"class":127},[28,36838,1293],{"class":60},[28,36840,33369],{"class":34},[28,36842,1343],{"class":60},[28,36844,33422],{"class":127},[28,36846,1293],{"class":60},[28,36848,33369],{"class":34},[28,36850,1343],{"class":60},[28,36852,3854],{"class":127},[28,36854,33433],{"class":38},[28,36856,930],{"class":34},[28,36858,61],{"class":60},[28,36860,33440],{"class":38},[28,36862,930],{"class":34},[28,36864,61],{"class":60},[28,36866,33399],{"class":38},[28,36868,36869],{"class":30,"line":33449},[28,36870,2662],{"emptyLinePlaceholder":336},[28,36872,36873],{"class":30,"line":33454},[28,36874,33457],{"class":87},[28,36876,36877,36879,36881,36883,36885,36887,36889],{"class":30,"line":33460},[28,36878,2759],{"class":34},[28,36880,33465],{"class":38},[28,36882,930],{"class":34},[28,36884,61],{"class":60},[28,36886,1337],{"class":38},[28,36888,1357],{"class":34},[28,36890,33476],{"class":38},[28,36892,36893],{"class":30,"line":33479},[28,36894,33482],{"class":87},[28,36896,36897,36899,36901,36903,36905,36907,36909],{"class":30,"line":33485},[28,36898,33488],{"class":38},[28,36900,451],{"class":60},[28,36902,54],{"class":34},[28,36904,33495],{"class":38},[28,36906,930],{"class":34},[28,36908,61],{"class":60},[28,36910,33502],{"class":38},[28,36912,36913],{"class":30,"line":33505},[28,36914,33508],{"class":87},[28,36916,36917],{"class":30,"line":33511},[28,36918,33514],{"class":87},[28,36920,36921,36923,36925],{"class":30,"line":33517},[28,36922,33520],{"class":38},[28,36924,54],{"class":34},[28,36926,32570],{"class":38},[28,36928,36929],{"class":30,"line":33527},[28,36930,2662],{"emptyLinePlaceholder":336},[28,36932,36933],{"class":30,"line":33532},[28,36934,33535],{"class":87},[28,36936,36937,36939,36941,36943,36945],{"class":30,"line":33538},[28,36938,33541],{"class":38},[28,36940,54],{"class":34},[28,36942,33546],{"class":38},[28,36944,930],{"class":34},[28,36946,33551],{"class":38},[28,36948,36949,36951,36953,36955,36957,36959,36961,36963,36965,36967,36969,36971,36973,36975,36977,36979,36981,36983],{"class":30,"line":33554},[28,36950,32707],{"class":60},[28,36952,413],{"class":38},[28,36954,33561],{"class":127},[28,36956,1293],{"class":60},[28,36958,33566],{"class":34},[28,36960,1343],{"class":60},[28,36962,942],{"class":127},[28,36964,1293],{"class":60},[28,36966,33566],{"class":34},[28,36968,1343],{"class":60},[28,36970,33579],{"class":127},[28,36972,33582],{"class":38},[28,36974,33585],{"class":34},[28,36976,1304],{"class":60},[28,36978,33590],{"class":38},[28,36980,729],{"class":34},[28,36982,1304],{"class":60},[28,36984,30757],{"class":38},[28,36986,36987],{"class":30,"line":33599},[28,36988,36989],{"class":87},"    # 选择最优参数并保存\n",[28,36991,36992],{"class":30,"line":33605},[28,36993,36994],{"class":87},"    # 保存最佳模型权重字典\n",[28,36996,36997,37000,37002],{"class":30,"line":33611},[28,36998,36999],{"class":38},"    torch.save(best_model_wts,",[28,37001,33623],{"class":127},[28,37003,81],{"class":38},[28,37005,37006],{"class":30,"line":33617},[28,37007,33643],{"class":87},[28,37009,37010,37012,37014,37016,37018,37020],{"class":30,"line":33628},[28,37011,33649],{"class":38},[28,37013,54],{"class":34},[28,37015,33654],{"class":38},[28,37017,33657],{"class":5478},[28,37019,54],{"class":34},[28,37021,1811],{"class":38},[28,37023,37024,37026,37028,37030],{"class":30,"line":33634},[28,37025,33667],{"class":127},[28,37027,1256],{"class":38},[28,37029,33672],{"class":60},[28,37031,33675],{"class":38},[28,37033,37034,37036],{"class":30,"line":33640},[28,37035,33681],{"class":127},[28,37037,33684],{"class":38},[28,37039,37040,37042],{"class":30,"line":33646},[28,37041,33690],{"class":127},[28,37043,33693],{"class":38},[28,37045,37046,37048],{"class":30,"line":33664},[28,37047,33699],{"class":127},[28,37049,33702],{"class":38},[28,37051,37052,37054],{"class":30,"line":33678},[28,37053,33708],{"class":127},[28,37055,33711],{"class":38},[28,37057,37058],{"class":30,"line":33687},[28,37059,33717],{"class":38},[28,37061,37062],{"class":30,"line":33696},[28,37063,33723],{"class":87},[28,37065,37066,37068],{"class":30,"line":33705},[28,37067,4352],{"class":34},[28,37069,33731],{"class":38},[28,37071,37072],{"class":30,"line":33714},[28,37073,2662],{"emptyLinePlaceholder":336},[28,37075,37076],{"class":30,"line":33720},[28,37077,33742],{"class":87},[28,37079,37080,37082,37084],{"class":30,"line":33726},[28,37081,32203],{"class":34},[28,37083,33750],{"class":2225},[28,37085,33753],{"class":38},[28,37087,37088],{"class":30,"line":33734},[28,37089,33759],{"class":87},[28,37091,37092,37094,37096,37098,37100,37102,37104,37106],{"class":30,"line":33739},[28,37093,33765],{"class":38},[28,37095,31950],{"class":5478},[28,37097,54],{"class":34},[28,37099,413],{"class":38},[28,37101,897],{"class":60},[28,37103,64],{"class":38},[28,37105,73],{"class":60},[28,37107,30757],{"class":38},[28,37109,37110],{"class":30,"line":33745},[28,37111,33785],{"class":87},[28,37113,37114],{"class":30,"line":33756},[28,37115,33791],{"class":87},[28,37117,37118],{"class":30,"line":33762},[28,37119,33797],{"class":87},[28,37121,37122,37124,37126,37128,37130,37132,37134],{"class":30,"line":33782},[28,37123,31983],{"class":38},[28,37125,61],{"class":60},[28,37127,64],{"class":38},[28,37129,211],{"class":60},[28,37131,64],{"class":38},[28,37133,61],{"class":60},[28,37135,81],{"class":38},[28,37137,37138],{"class":30,"line":33788},[28,37139,33820],{"class":87},[28,37141,37142],{"class":30,"line":33794},[28,37143,33826],{"class":87},[28,37145,37146],{"class":30,"line":33800},[28,37147,33832],{"class":87},[28,37149,37150],{"class":30,"line":33817},[28,37151,33838],{"class":87},[28,37153,37154],{"class":30,"line":33823},[28,37155,33844],{"class":87},[28,37157,37158,37160,37162,37164,37166,37168,37170,37172,37174],{"class":30,"line":33829},[28,37159,33850],{"class":38},[28,37161,33853],{"class":127},[28,37163,33856],{"class":38},[28,37165,33859],{"class":127},[28,37167,64],{"class":38},[28,37169,33864],{"class":5478},[28,37171,54],{"class":34},[28,37173,33869],{"class":127},[28,37175,81],{"class":38},[28,37177,37178,37180,37182,37184,37186,37188,37190,37192,37194],{"class":30,"line":33835},[28,37179,33850],{"class":38},[28,37181,33853],{"class":127},[28,37183,33881],{"class":38},[28,37185,33884],{"class":127},[28,37187,64],{"class":38},[28,37189,33864],{"class":5478},[28,37191,54],{"class":34},[28,37193,33893],{"class":127},[28,37195,81],{"class":38},[28,37197,37198],{"class":30,"line":33841},[28,37199,33901],{"class":87},[28,37201,37202],{"class":30,"line":33847},[28,37203,33907],{"class":38},[28,37205,37206],{"class":30,"line":33874},[28,37207,33913],{"class":87},[28,37209,37210,37212,37214],{"class":30,"line":33898},[28,37211,33919],{"class":38},[28,37213,33922],{"class":127},[28,37215,81],{"class":38},[28,37217,37218,37220,37222],{"class":30,"line":33904},[28,37219,33930],{"class":38},[28,37221,33933],{"class":127},[28,37223,81],{"class":38},[28,37225,37226],{"class":30,"line":33910},[28,37227,33941],{"class":87},[28,37229,37230,37232,37234,37236,37238,37240,37242],{"class":30,"line":33916},[28,37231,31983],{"class":38},[28,37233,61],{"class":60},[28,37235,64],{"class":38},[28,37237,211],{"class":60},[28,37239,64],{"class":38},[28,37241,211],{"class":60},[28,37243,81],{"class":38},[28,37245,37246,37248,37250,37252,37254,37256,37258,37260,37262],{"class":30,"line":33927},[28,37247,33850],{"class":38},[28,37249,33853],{"class":127},[28,37251,33968],{"class":38},[28,37253,33859],{"class":127},[28,37255,64],{"class":38},[28,37257,33864],{"class":5478},[28,37259,54],{"class":34},[28,37261,33979],{"class":127},[28,37263,81],{"class":38},[28,37265,37266,37268,37270,37272,37274,37276,37278,37280,37282],{"class":30,"line":33938},[28,37267,33850],{"class":38},[28,37269,33853],{"class":127},[28,37271,33991],{"class":38},[28,37273,33884],{"class":127},[28,37275,64],{"class":38},[28,37277,33864],{"class":5478},[28,37279,54],{"class":34},[28,37281,34002],{"class":127},[28,37283,81],{"class":38},[28,37285,37286],{"class":30,"line":33944},[28,37287,34010],{"class":87},[28,37289,37290],{"class":30,"line":33961},[28,37291,33907],{"class":38},[28,37293,37294,37296,37298],{"class":30,"line":33984},[28,37295,33919],{"class":38},[28,37297,33853],{"class":127},[28,37299,81],{"class":38},[28,37301,37302,37304,37306],{"class":30,"line":34007},[28,37303,33930],{"class":38},[28,37305,34032],{"class":127},[28,37307,81],{"class":38},[28,37309,37310],{"class":30,"line":34013},[28,37311,34040],{"class":38},[28,37313,37314],{"class":30,"line":34018},[28,37315,2662],{"emptyLinePlaceholder":336},[28,37317,37318],{"class":30,"line":34027},[28,37319,34051],{"class":87},[28,37321,37322,37324,37326,37328,37330],{"class":30,"line":34037},[28,37323,1796],{"class":34},[28,37325,31480],{"class":60},[28,37327,3211],{"class":34},[28,37329,31485],{"class":127},[28,37331,4001],{"class":38},[28,37333,37334],{"class":30,"line":34043},[28,37335,34070],{"class":87},[28,37337,37338,37341,37343],{"class":30,"line":34048},[28,37339,37340],{"class":38},"    AlexNet",[28,37342,54],{"class":34},[28,37344,37345],{"class":38},"AlexNet()\n",[28,37347,37348,37350,37352],{"class":30,"line":34054},[28,37349,34087],{"class":38},[28,37351,54],{"class":34},[28,37353,34092],{"class":38},[28,37355,37356,37358,37360,37363,37365,37367,37369],{"class":30,"line":34067},[28,37357,33649],{"class":38},[28,37359,54],{"class":34},[28,37361,37362],{"class":38},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[28,37364,34105],{"class":5478},[28,37366,54],{"class":34},[28,37368,1098],{"class":60},[28,37370,81],{"class":38},[28,37372,37373],{"class":30,"line":34073},[28,37374,34117],{"class":38},[363,37376,37377],{"start":84},[366,37378,34130],{},[18,37380,37382],{"className":20,"code":37381,"language":22,"meta":23,"style":23},"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",[25,37383,37384,37390,37400,37410,37420,37424,37434,37444,37455,37459,37463,37467,37475,37491,37501,37517,37527,37541,37545,37555,37565,37575,37581,37585,37589,37597,37601,37617,37625,37629,37633,37641,37649,37653,37657,37661,37665,37671,37675,37685,37693,37701,37705,37709,37713,37721,37725,37741,37745,37749,37753,37765,37769,37781,37785,37789,37801,37805,37815,37819,37823,37835,37839,37847,37851,37855,37863,37867,37875,37879,37883,37887,37891,37895,37911,37919,37923,37927,37975,37981,37985,37995,38003,38011,38015,38019,38023,38027,38035,38039,38055,38059,38067,38075],{"__ignoreMap":23},[28,37385,37386,37388],{"class":30,"line":31},[28,37387,35],{"class":34},[28,37389,30655],{"class":38},[28,37391,37392,37394,37396,37398],{"class":30,"line":48},[28,37393,35],{"class":34},[28,37395,31672],{"class":38},[28,37397,42],{"class":34},[28,37399,31677],{"class":38},[28,37401,37402,37404,37406,37408],{"class":30,"line":84},[28,37403,30997],{"class":34},[28,37405,34158],{"class":38},[28,37407,35],{"class":34},[28,37409,34163],{"class":38},[28,37411,37412,37414,37416,37418],{"class":30,"line":91},[28,37413,30997],{"class":34},[28,37415,31655],{"class":38},[28,37417,35],{"class":34},[28,37419,31660],{"class":38},[28,37421,37422],{"class":30,"line":97},[28,37423,34178],{"class":87},[28,37425,37426,37428,37430,37432],{"class":30,"line":103},[28,37427,30997],{"class":34},[28,37429,31628],{"class":38},[28,37431,35],{"class":34},[28,37433,31633],{"class":38},[28,37435,37436,37438,37440,37442],{"class":30,"line":109},[28,37437,30997],{"class":34},[28,37439,32170],{"class":38},[28,37441,35],{"class":34},[28,37443,35813],{"class":38},[28,37445,37446,37448,37451,37453],{"class":30,"line":118},[28,37447,30997],{"class":34},[28,37449,37450],{"class":38}," 练习.AlexNet.model ",[28,37452,35],{"class":34},[28,37454,35813],{"class":38},[28,37456,37457],{"class":30,"line":124},[28,37458,2662],{"emptyLinePlaceholder":336},[28,37460,37461],{"class":30,"line":131},[28,37462,2662],{"emptyLinePlaceholder":336},[28,37464,37465],{"class":30,"line":137},[28,37466,34207],{"class":87},[28,37468,37469,37471,37473],{"class":30,"line":143},[28,37470,32203],{"class":34},[28,37472,34214],{"class":2225},[28,37474,32209],{"class":38},[28,37476,37477,37479,37481,37483,37485,37487,37489],{"class":30,"line":149},[28,37478,34221],{"class":38},[28,37480,54],{"class":34},[28,37482,31712],{"class":38},[28,37484,31715],{"class":5478},[28,37486,54],{"class":34},[28,37488,31720],{"class":127},[28,37490,31723],{"class":38},[28,37492,37493,37495,37497,37499],{"class":30,"line":1890},[28,37494,34238],{"class":5478},[28,37496,54],{"class":34},[28,37498,34243],{"class":60},[28,37500,31723],{"class":38},[28,37502,37503,37505,37507,37509,37511,37513,37515],{"class":30,"line":1904},[28,37504,34250],{"class":5478},[28,37506,54],{"class":34},[28,37508,31750],{"class":38},[28,37510,31753],{"class":5478},[28,37512,54],{"class":34},[28,37514,35705],{"class":60},[28,37516,31761],{"class":38},[28,37518,37519,37521,37523,37525],{"class":30,"line":1909},[28,37520,34267],{"class":5478},[28,37522,54],{"class":34},[28,37524,31733],{"class":60},[28,37526,81],{"class":38},[28,37528,37529,37531,37533,37535,37537,37539],{"class":30,"line":1915},[28,37530,34278],{"class":38},[28,37532,54],{"class":34},[28,37534,31791],{"class":38},[28,37536,31794],{"class":5478},[28,37538,54],{"class":34},[28,37540,34289],{"class":38},[28,37542,37543],{"class":30,"line":1936},[28,37544,34294],{"class":87},[28,37546,37547,37549,37551,37553],{"class":30,"line":1941},[28,37548,34299],{"class":5478},[28,37550,54],{"class":34},[28,37552,61],{"class":60},[28,37554,31723],{"class":38},[28,37556,37557,37559,37561,37563],{"class":30,"line":1955},[28,37558,34310],{"class":5478},[28,37560,54],{"class":34},[28,37562,31733],{"class":60},[28,37564,31723],{"class":38},[28,37566,37567,37569,37571,37573],{"class":30,"line":1960},[28,37568,34321],{"class":5478},[28,37570,54],{"class":34},[28,37572,244],{"class":60},[28,37574,81],{"class":38},[28,37576,37577,37579],{"class":30,"line":1989},[28,37578,4352],{"class":34},[28,37580,34334],{"class":38},[28,37582,37583],{"class":30,"line":1994},[28,37584,2662],{"emptyLinePlaceholder":336},[28,37586,37587],{"class":30,"line":2011},[28,37588,34343],{"class":87},[28,37590,37591,37593,37595],{"class":30,"line":2016},[28,37592,32203],{"class":34},[28,37594,34350],{"class":2225},[28,37596,34353],{"class":38},[28,37598,37599],{"class":30,"line":2021},[28,37600,34358],{"class":87},[28,37602,37603,37605,37607,37609,37611,37613,37615],{"class":30,"line":2026},[28,37604,31497],{"class":38},[28,37606,54],{"class":34},[28,37608,31504],{"class":127},[28,37610,1966],{"class":34},[28,37612,31509],{"class":38},[28,37614,1963],{"class":34},[28,37616,34375],{"class":127},[28,37618,37619,37621,37623],{"class":30,"line":2040},[28,37620,31549],{"class":38},[28,37622,54],{"class":34},[28,37624,32545],{"class":38},[28,37626,37627],{"class":30,"line":2045},[28,37628,2662],{"emptyLinePlaceholder":336},[28,37630,37631],{"class":30,"line":2839},[28,37632,34392],{"class":87},[28,37634,37635,37637,37639],{"class":30,"line":2853},[28,37636,34397],{"class":38},[28,37638,54],{"class":34},[28,37640,32598],{"class":60},[28,37642,37643,37645,37647],{"class":30,"line":2861},[28,37644,34406],{"class":38},[28,37646,54],{"class":34},[28,37648,3347],{"class":60},[28,37650,37651],{"class":30,"line":2866},[28,37652,2662],{"emptyLinePlaceholder":336},[28,37654,37655],{"class":30,"line":2872},[28,37656,34419],{"class":87},[28,37658,37659],{"class":30,"line":2878},[28,37660,34424],{"class":87},[28,37662,37663],{"class":30,"line":2883},[28,37664,34429],{"class":87},[28,37666,37667,37669],{"class":30,"line":8210},[28,37668,34434],{"class":34},[28,37670,33140],{"class":38},[28,37672,37673],{"class":30,"line":8234},[28,37674,34441],{"class":87},[28,37676,37677,37679,37681,37683],{"class":30,"line":8239},[28,37678,3665],{"class":34},[28,37680,34448],{"class":38},[28,37682,26306],{"class":34},[28,37684,34453],{"class":38},[28,37686,37687,37689,37691],{"class":30,"line":8245},[28,37688,34458],{"class":38},[28,37690,54],{"class":34},[28,37692,34463],{"class":38},[28,37694,37695,37697,37699],{"class":30,"line":8272},[28,37696,34468],{"class":38},[28,37698,54],{"class":34},[28,37700,34473],{"class":38},[28,37702,37703],{"class":30,"line":8277},[28,37704,34478],{"class":87},[28,37706,37707],{"class":30,"line":8283},[28,37708,33131],{"class":38},[28,37710,37711],{"class":30,"line":8295},[28,37712,34487],{"class":87},[28,37714,37715,37717,37719],{"class":30,"line":8307},[28,37716,32916],{"class":38},[28,37718,54],{"class":34},[28,37720,34496],{"class":38},[28,37722,37723],{"class":30,"line":8319},[28,37724,34501],{"class":87},[28,37726,37727,37729,37731,37733,37735,37737,37739],{"class":30,"line":9978},[28,37728,32933],{"class":38},[28,37730,54],{"class":34},[28,37732,32938],{"class":38},[28,37734,32941],{"class":5478},[28,37736,54],{"class":34},[28,37738,61],{"class":60},[28,37740,81],{"class":38},[28,37742,37743],{"class":30,"line":10003},[28,37744,34522],{"class":87},[28,37746,37747],{"class":30,"line":10026},[28,37748,34527],{"class":87},[28,37750,37751],{"class":30,"line":10050},[28,37752,34532],{"class":87},[28,37754,37755,37757,37759,37761,37763],{"class":30,"line":10055},[28,37756,34537],{"class":38},[28,37758,9739],{"class":34},[28,37760,33043],{"class":38},[28,37762,3211],{"class":34},[28,37764,34546],{"class":38},[28,37766,37767],{"class":30,"line":10060},[28,37768,34551],{"class":87},[28,37770,37771,37773,37775,37777,37779],{"class":30,"line":10065},[28,37772,34556],{"class":38},[28,37774,9739],{"class":34},[28,37776,34561],{"class":38},[28,37778,244],{"class":60},[28,37780,81],{"class":38},[28,37782,37783],{"class":30,"line":10074},[28,37784,2662],{"emptyLinePlaceholder":336},[28,37786,37787],{"class":30,"line":10079},[28,37788,34574],{"class":87},[28,37790,37791,37793,37795,37797,37799],{"class":30,"line":10085},[28,37792,34579],{"class":38},[28,37794,54],{"class":34},[28,37796,34584],{"class":38},[28,37798,982],{"class":34},[28,37800,34589],{"class":38},[28,37802,37803],{"class":30,"line":10106},[28,37804,34594],{"class":87},[28,37806,37807,37809,37811,37813],{"class":30,"line":10112},[28,37808,32707],{"class":60},[28,37810,413],{"class":38},[28,37812,34603],{"class":127},[28,37814,34606],{"class":38},[28,37816,37817],{"class":30,"line":10126},[28,37818,2662],{"emptyLinePlaceholder":336},[28,37820,37821],{"class":30,"line":10132},[28,37822,34615],{"class":87},[28,37824,37825,37827,37829,37831,37833],{"class":30,"line":10159},[28,37826,1796],{"class":34},[28,37828,31480],{"class":60},[28,37830,3211],{"class":34},[28,37832,31485],{"class":127},[28,37834,4001],{"class":38},[28,37836,37837],{"class":30,"line":10168},[28,37838,34632],{"class":87},[28,37840,37841,37843,37845],{"class":30,"line":10174},[28,37842,31549],{"class":38},[28,37844,54],{"class":34},[28,37846,37345],{"class":38},[28,37848,37849],{"class":30,"line":10182},[28,37850,34645],{"class":87},[28,37852,37853],{"class":30,"line":10187},[28,37854,34650],{"class":87},[28,37856,37857,37859,37861],{"class":30,"line":16866},[28,37858,34655],{"class":38},[28,37860,34658],{"class":127},[28,37862,30757],{"class":38},[28,37864,37865],{"class":30,"line":16872},[28,37866,34665],{"class":87},[28,37868,37869,37871,37873],{"class":30,"line":16895},[28,37870,34278],{"class":38},[28,37872,54],{"class":34},[28,37874,34674],{"class":38},[28,37876,37877],{"class":30,"line":16901},[28,37878,34679],{"class":87},[28,37880,37881],{"class":30,"line":16924},[28,37882,34684],{"class":38},[28,37884,37885],{"class":30,"line":16938},[28,37886,2662],{"emptyLinePlaceholder":336},[28,37888,37889],{"class":30,"line":16958},[28,37890,34693],{"class":87},[28,37892,37893],{"class":30,"line":16964},[28,37894,34698],{"class":87},[28,37896,37897,37899,37901,37903,37905,37907,37909],{"class":30,"line":16975},[28,37898,31497],{"class":38},[28,37900,54],{"class":34},[28,37902,31504],{"class":127},[28,37904,1966],{"class":34},[28,37906,31509],{"class":38},[28,37908,1963],{"class":34},[28,37910,34375],{"class":127},[28,37912,37913,37915,37917],{"class":30,"line":16998},[28,37914,31549],{"class":38},[28,37916,54],{"class":34},[28,37918,32545],{"class":38},[28,37920,37921],{"class":30,"line":17020},[28,37922,34727],{"class":87},[28,37924,37925],{"class":30,"line":17025},[28,37926,34732],{"class":87},[28,37928,37929,37931,37933,37935,37937,37939,37941,37943,37945,37947,37949,37951,37953,37955,37957,37959,37961,37963,37965,37967,37969,37971,37973],{"class":30,"line":17031},[28,37930,34737],{"class":38},[28,37932,54],{"class":34},[28,37934,1287],{"class":38},[28,37936,34744],{"class":127},[28,37938,64],{"class":38},[28,37940,34749],{"class":127},[28,37942,64],{"class":38},[28,37944,34754],{"class":127},[28,37946,64],{"class":38},[28,37948,34759],{"class":127},[28,37950,64],{"class":38},[28,37952,34764],{"class":127},[28,37954,64],{"class":38},[28,37956,34769],{"class":127},[28,37958,64],{"class":38},[28,37960,34774],{"class":127},[28,37962,64],{"class":38},[28,37964,34779],{"class":127},[28,37966,64],{"class":38},[28,37968,34784],{"class":127},[28,37970,64],{"class":38},[28,37972,34789],{"class":127},[28,37974,33502],{"class":38},[28,37976,37977,37979],{"class":30,"line":17045},[28,37978,34434],{"class":34},[28,37980,33140],{"class":38},[28,37982,37983],{"class":30,"line":17058},[28,37984,34802],{"class":87},[28,37986,37987,37989,37991,37993],{"class":30,"line":17063},[28,37988,3665],{"class":34},[28,37990,34809],{"class":38},[28,37992,26306],{"class":34},[28,37994,34453],{"class":38},[28,37996,37997,37999,38001],{"class":30,"line":17077},[28,37998,32866],{"class":38},[28,38000,54],{"class":34},[28,38002,32871],{"class":38},[28,38004,38005,38007,38009],{"class":30,"line":17082},[28,38006,32881],{"class":38},[28,38008,54],{"class":34},[28,38010,32886],{"class":38},[28,38012,38013],{"class":30,"line":17088},[28,38014,2662],{"emptyLinePlaceholder":336},[28,38016,38017],{"class":30,"line":17093},[28,38018,34838],{"class":87},[28,38020,38021],{"class":30,"line":17107},[28,38022,33131],{"class":38},[28,38024,38025],{"class":30,"line":17112},[28,38026,34847],{"class":87},[28,38028,38029,38031,38033],{"class":30,"line":17117},[28,38030,32916],{"class":38},[28,38032,54],{"class":34},[28,38034,32921],{"class":38},[28,38036,38037],{"class":30,"line":17131},[28,38038,34860],{"class":87},[28,38040,38041,38043,38045,38047,38049,38051,38053],{"class":30,"line":17143},[28,38042,32933],{"class":38},[28,38044,54],{"class":34},[28,38046,32938],{"class":38},[28,38048,32941],{"class":5478},[28,38050,54],{"class":34},[28,38052,61],{"class":60},[28,38054,81],{"class":38},[28,38056,38057],{"class":30,"line":17148},[28,38058,34881],{"class":87},[28,38060,38061,38063,38065],{"class":30,"line":17161},[28,38062,34886],{"class":38},[28,38064,54],{"class":34},[28,38066,34891],{"class":38},[28,38068,38069,38071,38073],{"class":30,"line":17166},[28,38070,34896],{"class":38},[28,38072,54],{"class":34},[28,38074,34901],{"class":38},[28,38076,38077,38079,38081,38083,38085,38087,38089,38091],{"class":30,"line":17171},[28,38078,34906],{"class":60},[28,38080,413],{"class":38},[28,38082,34911],{"class":127},[28,38084,34914],{"class":38},[28,38086,34917],{"class":127},[28,38088,64],{"class":38},[28,38090,34922],{"class":127},[28,38092,34925],{"class":38},[380,38094,38096],{"id":38095},"_22vgg","2.2.VGG",[22260,38098,38100],{"id":38099},"_221原理","2.2.1.原理",[14,38102,38103],{},[1727,38104],{"alt":23,"src":38105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,38107,38108],{},[1727,38109],{"alt":23,"src":38110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,38112,38113],{},[1727,38114],{"alt":23,"src":38115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,38117,38118],{},"参数详细描述：",[14,38120,38121],{},[1727,38122],{"alt":23,"src":38123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,38125,38126],{},[1727,38127],{"alt":23,"src":38128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,38130,38131],{},[1727,38132],{"alt":23,"src":38133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,38135,38136],{},[1727,38137],{"alt":23,"src":38138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,38140,38141],{},[1727,38142],{"alt":23,"src":38143},"\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",[22260,38145,38147],{"id":38146},"_222代码实现","2.2.2.代码实现",[363,38149,38150],{},[366,38151,38152],{},"网络搭建",[18,38154,38156],{"className":20,"code":38155,"language":22,"meta":23,"style":23},"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",[25,38157,38158,38164,38176,38186,38196,38200,38217,38225,38244,38249,38254,38266,38304,38309,38345,38349,38378,38383,38388,38399,38435,38439,38475,38479,38507,38511,38516,38527,38563,38567,38603,38607,38643,38647,38675,38679,38684,38695,38732,38736,38772,38776,38812,38816,38844,38848,38853,38864,38900,38904,38940,38944,38980,38984,39012,39016,39021,39032,39037,39042,39047,39068,39072,39084,39088,39100,39104,39108,39113,39118,39133,39138,39148,39153,39168,39173,39192,39197,39206,39211,39221,39226,39231,39245,39250,39264,39272,39276,39280,39288,39299,39310,39321,39332,39343,39354,39360,39364,39369,39382,39402,39408,39417],{"__ignoreMap":23},[28,38159,38160,38162],{"class":30,"line":31},[28,38161,35],{"class":34},[28,38163,30655],{"class":38},[28,38165,38166,38168,38171,38173],{"class":30,"line":48},[28,38167,30997],{"class":34},[28,38169,38170],{"class":38}," sympy.core.sympify ",[28,38172,35],{"class":34},[28,38174,38175],{"class":38}," kernS\n",[28,38177,38178,38180,38182,38184],{"class":30,"line":84},[28,38179,30997],{"class":34},[28,38181,31000],{"class":38},[28,38183,35],{"class":34},[28,38185,31005],{"class":38},[28,38187,38188,38190,38192,38194],{"class":30,"line":91},[28,38189,30997],{"class":34},[28,38191,31017],{"class":38},[28,38193,35],{"class":34},[28,38195,31022],{"class":38},[28,38197,38198],{"class":30,"line":97},[28,38199,2662],{"emptyLinePlaceholder":336},[28,38201,38202,38204,38207,38209,38211,38213,38215],{"class":30,"line":103},[28,38203,14956],{"class":34},[28,38205,38206],{"class":2225}," VGG16",[28,38208,413],{"class":38},[28,38210,31038],{"class":2225},[28,38212,956],{"class":38},[28,38214,31043],{"class":2225},[28,38216,31046],{"class":38},[28,38218,38219,38221,38223],{"class":30,"line":109},[28,38220,31061],{"class":34},[28,38222,31064],{"class":60},[28,38224,31067],{"class":38},[28,38226,38227,38229,38231,38234,38236,38238,38240,38242],{"class":30,"line":118},[28,38228,31077],{"class":60},[28,38230,413],{"class":38},[28,38232,38233],{"class":60},"VGG16",[28,38235,12697],{"class":38},[28,38237,31083],{"class":60},[28,38239,31086],{"class":38},[28,38241,31089],{"class":60},[28,38243,2238],{"class":38},[28,38245,38246],{"class":30,"line":124},[28,38247,38248],{"class":87},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[28,38250,38251],{"class":30,"line":131},[28,38252,38253],{"class":87},"        # 这里用的是灰度图\n",[28,38255,38256,38258,38261,38263],{"class":30,"line":137},[28,38257,31105],{"class":60},[28,38259,38260],{"class":38},".block1",[28,38262,54],{"class":34},[28,38264,38265],{"class":38},"nn.Sequential(\n",[28,38267,38268,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301],{"class":30,"line":143},[28,38269,38270],{"class":38},"            nn.Conv2d(",[28,38272,31116],{"class":5478},[28,38274,54],{"class":34},[28,38276,61],{"class":60},[28,38278,64],{"class":38},[28,38280,31125],{"class":5478},[28,38282,54],{"class":34},[28,38284,608],{"class":60},[28,38286,64],{"class":38},[28,38288,31134],{"class":5478},[28,38290,54],{"class":34},[28,38292,78],{"class":60},[28,38294,64],{"class":38},[28,38296,31143],{"class":5478},[28,38298,54],{"class":34},[28,38300,61],{"class":60},[28,38302,38303],{"class":38},"),\n",[28,38305,38306],{"class":30,"line":149},[28,38307,38308],{"class":38},"            nn.ReLU(),\n",[28,38310,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343],{"class":30,"line":1890},[28,38312,38270],{"class":38},[28,38314,31116],{"class":5478},[28,38316,54],{"class":34},[28,38318,608],{"class":60},[28,38320,64],{"class":38},[28,38322,31125],{"class":5478},[28,38324,54],{"class":34},[28,38326,608],{"class":60},[28,38328,64],{"class":38},[28,38330,31134],{"class":5478},[28,38332,54],{"class":34},[28,38334,78],{"class":60},[28,38336,64],{"class":38},[28,38338,31143],{"class":5478},[28,38340,54],{"class":34},[28,38342,61],{"class":60},[28,38344,38303],{"class":38},[28,38346,38347],{"class":30,"line":1904},[28,38348,38308],{"class":38},[28,38350,38351,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376],{"class":30,"line":1909},[28,38352,38353],{"class":38},"            nn.MaxPool2d(",[28,38355,31134],{"class":5478},[28,38357,54],{"class":34},[28,38359,211],{"class":60},[28,38361,64],{"class":38},[28,38363,31189],{"class":5478},[28,38365,54],{"class":34},[28,38367,211],{"class":60},[28,38369,64],{"class":38},[28,38371,31143],{"class":5478},[28,38373,54],{"class":34},[28,38375,244],{"class":60},[28,38377,81],{"class":38},[28,38379,38380],{"class":30,"line":1915},[28,38381,38382],{"class":38},"        )\n",[28,38384,38385],{"class":30,"line":1936},[28,38386,38387],{"class":87},"        # 第二层\n",[28,38389,38390,38392,38395,38397],{"class":30,"line":1941},[28,38391,31105],{"class":60},[28,38393,38394],{"class":38},".block2",[28,38396,54],{"class":34},[28,38398,38265],{"class":38},[28,38400,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433],{"class":30,"line":1955},[28,38402,38270],{"class":38},[28,38404,31116],{"class":5478},[28,38406,54],{"class":34},[28,38408,608],{"class":60},[28,38410,64],{"class":38},[28,38412,31125],{"class":5478},[28,38414,54],{"class":34},[28,38416,32326],{"class":60},[28,38418,64],{"class":38},[28,38420,31134],{"class":5478},[28,38422,54],{"class":34},[28,38424,78],{"class":60},[28,38426,64],{"class":38},[28,38428,31143],{"class":5478},[28,38430,54],{"class":34},[28,38432,61],{"class":60},[28,38434,38303],{"class":38},[28,38436,38437],{"class":30,"line":1960},[28,38438,38308],{"class":38},[28,38440,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473],{"class":30,"line":1989},[28,38442,38270],{"class":38},[28,38444,31116],{"class":5478},[28,38446,54],{"class":34},[28,38448,32326],{"class":60},[28,38450,64],{"class":38},[28,38452,31125],{"class":5478},[28,38454,54],{"class":34},[28,38456,32326],{"class":60},[28,38458,64],{"class":38},[28,38460,31134],{"class":5478},[28,38462,54],{"class":34},[28,38464,78],{"class":60},[28,38466,64],{"class":38},[28,38468,31143],{"class":5478},[28,38470,54],{"class":34},[28,38472,61],{"class":60},[28,38474,38303],{"class":38},[28,38476,38477],{"class":30,"line":1994},[28,38478,38308],{"class":38},[28,38480,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505],{"class":30,"line":2011},[28,38482,38353],{"class":38},[28,38484,31134],{"class":5478},[28,38486,54],{"class":34},[28,38488,211],{"class":60},[28,38490,64],{"class":38},[28,38492,31189],{"class":5478},[28,38494,54],{"class":34},[28,38496,211],{"class":60},[28,38498,64],{"class":38},[28,38500,31143],{"class":5478},[28,38502,54],{"class":34},[28,38504,244],{"class":60},[28,38506,81],{"class":38},[28,38508,38509],{"class":30,"line":2016},[28,38510,38382],{"class":38},[28,38512,38513],{"class":30,"line":2021},[28,38514,38515],{"class":87},"        # 第三层\n",[28,38517,38518,38520,38523,38525],{"class":30,"line":2026},[28,38519,31105],{"class":60},[28,38521,38522],{"class":38},".block3",[28,38524,54],{"class":34},[28,38526,38265],{"class":38},[28,38528,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561],{"class":30,"line":2040},[28,38530,38270],{"class":38},[28,38532,31116],{"class":5478},[28,38534,54],{"class":34},[28,38536,32326],{"class":60},[28,38538,64],{"class":38},[28,38540,31125],{"class":5478},[28,38542,54],{"class":34},[28,38544,35126],{"class":60},[28,38546,64],{"class":38},[28,38548,31134],{"class":5478},[28,38550,54],{"class":34},[28,38552,78],{"class":60},[28,38554,64],{"class":38},[28,38556,31143],{"class":5478},[28,38558,54],{"class":34},[28,38560,61],{"class":60},[28,38562,38303],{"class":38},[28,38564,38565],{"class":30,"line":2045},[28,38566,38308],{"class":38},[28,38568,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601],{"class":30,"line":2839},[28,38570,38270],{"class":38},[28,38572,31116],{"class":5478},[28,38574,54],{"class":34},[28,38576,35126],{"class":60},[28,38578,64],{"class":38},[28,38580,31125],{"class":5478},[28,38582,54],{"class":34},[28,38584,35126],{"class":60},[28,38586,64],{"class":38},[28,38588,31134],{"class":5478},[28,38590,54],{"class":34},[28,38592,78],{"class":60},[28,38594,64],{"class":38},[28,38596,31143],{"class":5478},[28,38598,54],{"class":34},[28,38600,61],{"class":60},[28,38602,38303],{"class":38},[28,38604,38605],{"class":30,"line":2853},[28,38606,38308],{"class":38},[28,38608,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641],{"class":30,"line":2861},[28,38610,38270],{"class":38},[28,38612,31116],{"class":5478},[28,38614,54],{"class":34},[28,38616,35126],{"class":60},[28,38618,64],{"class":38},[28,38620,31125],{"class":5478},[28,38622,54],{"class":34},[28,38624,35126],{"class":60},[28,38626,64],{"class":38},[28,38628,31134],{"class":5478},[28,38630,54],{"class":34},[28,38632,78],{"class":60},[28,38634,64],{"class":38},[28,38636,31143],{"class":5478},[28,38638,54],{"class":34},[28,38640,61],{"class":60},[28,38642,38303],{"class":38},[28,38644,38645],{"class":30,"line":2866},[28,38646,38308],{"class":38},[28,38648,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673],{"class":30,"line":2872},[28,38650,38353],{"class":38},[28,38652,31134],{"class":5478},[28,38654,54],{"class":34},[28,38656,211],{"class":60},[28,38658,64],{"class":38},[28,38660,31189],{"class":5478},[28,38662,54],{"class":34},[28,38664,211],{"class":60},[28,38666,64],{"class":38},[28,38668,31143],{"class":5478},[28,38670,54],{"class":34},[28,38672,244],{"class":60},[28,38674,81],{"class":38},[28,38676,38677],{"class":30,"line":2878},[28,38678,38382],{"class":38},[28,38680,38681],{"class":30,"line":2883},[28,38682,38683],{"class":87},"        # 第四层\n",[28,38685,38686,38688,38691,38693],{"class":30,"line":8210},[28,38687,31105],{"class":60},[28,38689,38690],{"class":38},".block4",[28,38692,54],{"class":34},[28,38694,38265],{"class":38},[28,38696,38697,38699,38701,38703,38705,38707,38709,38711,38714,38716,38718,38720,38722,38724,38726,38728,38730],{"class":30,"line":8234},[28,38698,38270],{"class":38},[28,38700,31116],{"class":5478},[28,38702,54],{"class":34},[28,38704,35126],{"class":60},[28,38706,64],{"class":38},[28,38708,31125],{"class":5478},[28,38710,54],{"class":34},[28,38712,38713],{"class":60},"512",[28,38715,64],{"class":38},[28,38717,31134],{"class":5478},[28,38719,54],{"class":34},[28,38721,78],{"class":60},[28,38723,64],{"class":38},[28,38725,31143],{"class":5478},[28,38727,54],{"class":34},[28,38729,61],{"class":60},[28,38731,38303],{"class":38},[28,38733,38734],{"class":30,"line":8239},[28,38735,38308],{"class":38},[28,38737,38738,38740,38742,38744,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770],{"class":30,"line":8245},[28,38739,38270],{"class":38},[28,38741,31116],{"class":5478},[28,38743,54],{"class":34},[28,38745,38713],{"class":60},[28,38747,64],{"class":38},[28,38749,31125],{"class":5478},[28,38751,54],{"class":34},[28,38753,38713],{"class":60},[28,38755,64],{"class":38},[28,38757,31134],{"class":5478},[28,38759,54],{"class":34},[28,38761,78],{"class":60},[28,38763,64],{"class":38},[28,38765,31143],{"class":5478},[28,38767,54],{"class":34},[28,38769,61],{"class":60},[28,38771,38303],{"class":38},[28,38773,38774],{"class":30,"line":8272},[28,38775,38308],{"class":38},[28,38777,38778,38780,38782,38784,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810],{"class":30,"line":8277},[28,38779,38270],{"class":38},[28,38781,31116],{"class":5478},[28,38783,54],{"class":34},[28,38785,38713],{"class":60},[28,38787,64],{"class":38},[28,38789,31125],{"class":5478},[28,38791,54],{"class":34},[28,38793,38713],{"class":60},[28,38795,64],{"class":38},[28,38797,31134],{"class":5478},[28,38799,54],{"class":34},[28,38801,78],{"class":60},[28,38803,64],{"class":38},[28,38805,31143],{"class":5478},[28,38807,54],{"class":34},[28,38809,61],{"class":60},[28,38811,38303],{"class":38},[28,38813,38814],{"class":30,"line":8283},[28,38815,38308],{"class":38},[28,38817,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842],{"class":30,"line":8295},[28,38819,38353],{"class":38},[28,38821,31134],{"class":5478},[28,38823,54],{"class":34},[28,38825,211],{"class":60},[28,38827,64],{"class":38},[28,38829,31189],{"class":5478},[28,38831,54],{"class":34},[28,38833,211],{"class":60},[28,38835,64],{"class":38},[28,38837,31143],{"class":5478},[28,38839,54],{"class":34},[28,38841,244],{"class":60},[28,38843,81],{"class":38},[28,38845,38846],{"class":30,"line":8307},[28,38847,38382],{"class":38},[28,38849,38850],{"class":30,"line":8319},[28,38851,38852],{"class":87},"        # 第五层\n",[28,38854,38855,38857,38860,38862],{"class":30,"line":9978},[28,38856,31105],{"class":60},[28,38858,38859],{"class":38},".block5",[28,38861,54],{"class":34},[28,38863,38265],{"class":38},[28,38865,38866,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894,38896,38898],{"class":30,"line":10003},[28,38867,38270],{"class":38},[28,38869,31116],{"class":5478},[28,38871,54],{"class":34},[28,38873,38713],{"class":60},[28,38875,64],{"class":38},[28,38877,31125],{"class":5478},[28,38879,54],{"class":34},[28,38881,38713],{"class":60},[28,38883,64],{"class":38},[28,38885,31134],{"class":5478},[28,38887,54],{"class":34},[28,38889,78],{"class":60},[28,38891,64],{"class":38},[28,38893,31143],{"class":5478},[28,38895,54],{"class":34},[28,38897,61],{"class":60},[28,38899,38303],{"class":38},[28,38901,38902],{"class":30,"line":10026},[28,38903,38308],{"class":38},[28,38905,38906,38908,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928,38930,38932,38934,38936,38938],{"class":30,"line":10050},[28,38907,38270],{"class":38},[28,38909,31116],{"class":5478},[28,38911,54],{"class":34},[28,38913,38713],{"class":60},[28,38915,64],{"class":38},[28,38917,31125],{"class":5478},[28,38919,54],{"class":34},[28,38921,38713],{"class":60},[28,38923,64],{"class":38},[28,38925,31134],{"class":5478},[28,38927,54],{"class":34},[28,38929,78],{"class":60},[28,38931,64],{"class":38},[28,38933,31143],{"class":5478},[28,38935,54],{"class":34},[28,38937,61],{"class":60},[28,38939,38303],{"class":38},[28,38941,38942],{"class":30,"line":10055},[28,38943,38308],{"class":38},[28,38945,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970,38972,38974,38976,38978],{"class":30,"line":10060},[28,38947,38270],{"class":38},[28,38949,31116],{"class":5478},[28,38951,54],{"class":34},[28,38953,38713],{"class":60},[28,38955,64],{"class":38},[28,38957,31125],{"class":5478},[28,38959,54],{"class":34},[28,38961,38713],{"class":60},[28,38963,64],{"class":38},[28,38965,31134],{"class":5478},[28,38967,54],{"class":34},[28,38969,78],{"class":60},[28,38971,64],{"class":38},[28,38973,31143],{"class":5478},[28,38975,54],{"class":34},[28,38977,61],{"class":60},[28,38979,38303],{"class":38},[28,38981,38982],{"class":30,"line":10065},[28,38983,38308],{"class":38},[28,38985,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010],{"class":30,"line":10074},[28,38987,38353],{"class":38},[28,38989,31134],{"class":5478},[28,38991,54],{"class":34},[28,38993,211],{"class":60},[28,38995,64],{"class":38},[28,38997,31189],{"class":5478},[28,38999,54],{"class":34},[28,39001,211],{"class":60},[28,39003,64],{"class":38},[28,39005,31143],{"class":5478},[28,39007,54],{"class":34},[28,39009,244],{"class":60},[28,39011,81],{"class":38},[28,39013,39014],{"class":30,"line":10079},[28,39015,38382],{"class":38},[28,39017,39018],{"class":30,"line":10085},[28,39019,39020],{"class":87},"        # 全连接层\n",[28,39022,39023,39025,39028,39030],{"class":30,"line":10106},[28,39024,31105],{"class":60},[28,39026,39027],{"class":38},".block6",[28,39029,54],{"class":34},[28,39031,38265],{"class":38},[28,39033,39034],{"class":30,"line":10112},[28,39035,39036],{"class":87},"            # 平展操作\n",[28,39038,39039],{"class":30,"line":10126},[28,39040,39041],{"class":87},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[28,39043,39044],{"class":30,"line":10132},[28,39045,39046],{"class":38},"            nn.Flatten(),\n",[28,39048,39049,39052,39054,39056,39058,39060,39062,39064,39066],{"class":30,"line":10159},[28,39050,39051],{"class":38},"            nn.Linear(",[28,39053,769],{"class":60},[28,39055,854],{"class":34},[28,39057,769],{"class":60},[28,39059,854],{"class":34},[28,39061,38713],{"class":60},[28,39063,64],{"class":38},[28,39065,35126],{"class":60},[28,39067,38303],{"class":38},[28,39069,39070],{"class":30,"line":10168},[28,39071,38308],{"class":38},[28,39073,39074,39076,39078,39080,39082],{"class":30,"line":10174},[28,39075,39051],{"class":38},[28,39077,35126],{"class":60},[28,39079,64],{"class":38},[28,39081,32326],{"class":60},[28,39083,38303],{"class":38},[28,39085,39086],{"class":30,"line":10182},[28,39087,38308],{"class":38},[28,39089,39090,39092,39094,39096,39098],{"class":30,"line":10187},[28,39091,39051],{"class":38},[28,39093,32326],{"class":60},[28,39095,64],{"class":38},[28,39097,845],{"class":60},[28,39099,81],{"class":38},[28,39101,39102],{"class":30,"line":16866},[28,39103,38382],{"class":38},[28,39105,39106],{"class":30,"line":16872},[28,39107,2662],{"emptyLinePlaceholder":336},[28,39109,39110],{"class":30,"line":16895},[28,39111,39112],{"class":87},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39114,39115],{"class":30,"line":16901},[28,39116,39117],{"class":87},"        # 循环遍历模型\n",[28,39119,39120,39122,39125,39127,39130],{"class":30,"line":16924},[28,39121,3665],{"class":34},[28,39123,39124],{"class":38}," m ",[28,39126,26306],{"class":34},[28,39128,39129],{"class":60}," self",[28,39131,39132],{"class":38},".modules():\n",[28,39134,39135],{"class":30,"line":16938},[28,39136,39137],{"class":87},"            # print(m)\n",[28,39139,39140,39142,39145],{"class":30,"line":16958},[28,39141,4904],{"class":34},[28,39143,39144],{"class":60}," isinstance",[28,39146,39147],{"class":38},"(m,nn.Conv2d):\n",[28,39149,39150],{"class":30,"line":16964},[28,39151,39152],{"class":87},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39154,39155,39158,39161,39163,39166],{"class":30,"line":16975},[28,39156,39157],{"class":38},"                nn.init.kaiming_normal_(m.weight,",[28,39159,39160],{"class":5478},"nonlinearity",[28,39162,54],{"class":34},[28,39164,39165],{"class":127},"'relu'",[28,39167,81],{"class":38},[28,39169,39170],{"class":30,"line":16998},[28,39171,39172],{"class":87},"                # 判断b参数是否存在\n",[28,39174,39175,39178,39181,39184,39187,39190],{"class":30,"line":17020},[28,39176,39177],{"class":34},"                if",[28,39179,39180],{"class":38}," m.bias ",[28,39182,39183],{"class":34},"is",[28,39185,39186],{"class":34}," not",[28,39188,39189],{"class":60}," None",[28,39191,4001],{"class":38},[28,39193,39194],{"class":30,"line":17025},[28,39195,39196],{"class":87},"                    # 如果参数不存在的化初始化b=0\n",[28,39198,39199,39202,39204],{"class":30,"line":17031},[28,39200,39201],{"class":38},"                    nn.init.constant_(m.bias,",[28,39203,244],{"class":60},[28,39205,81],{"class":38},[28,39207,39208],{"class":30,"line":17045},[28,39209,39210],{"class":87},"            # 全连接层初始化\n",[28,39212,39213,39216,39218],{"class":30,"line":17058},[28,39214,39215],{"class":34},"            elif",[28,39217,39144],{"class":60},[28,39219,39220],{"class":38},"(m,nn.Linear):\n",[28,39222,39223],{"class":30,"line":17063},[28,39224,39225],{"class":87},"                # 这个初始化方法是利用的是正太分布的方式\n",[28,39227,39228],{"class":30,"line":17077},[28,39229,39230],{"class":87},"                # 均值为0，方差为0.01\n",[28,39232,39233,39236,39238,39240,39243],{"class":30,"line":17082},[28,39234,39235],{"class":38},"                nn.init.normal_(m.weight,",[28,39237,244],{"class":60},[28,39239,64],{"class":38},[28,39241,39242],{"class":60},"0.01",[28,39244,81],{"class":38},[28,39246,39247],{"class":30,"line":17088},[28,39248,39249],{"class":87},"                # 初始化b参数\n",[28,39251,39252,39254,39256,39258,39260,39262],{"class":30,"line":17093},[28,39253,39177],{"class":34},[28,39255,39180],{"class":38},[28,39257,39183],{"class":34},[28,39259,39186],{"class":34},[28,39261,39189],{"class":60},[28,39263,4001],{"class":38},[28,39265,39266,39268,39270],{"class":30,"line":17107},[28,39267,39201],{"class":38},[28,39269,244],{"class":60},[28,39271,81],{"class":38},[28,39273,39274],{"class":30,"line":17112},[28,39275,2662],{"emptyLinePlaceholder":336},[28,39277,39278],{"class":30,"line":17117},[28,39279,35421],{"class":87},[28,39281,39282,39284,39286],{"class":30,"line":17131},[28,39283,31061],{"class":34},[28,39285,31353],{"class":2225},[28,39287,31356],{"class":38},[28,39289,39290,39292,39294,39296],{"class":30,"line":17143},[28,39291,31361],{"class":38},[28,39293,54],{"class":34},[28,39295,31083],{"class":60},[28,39297,39298],{"class":38},".block1(x)\n",[28,39300,39301,39303,39305,39307],{"class":30,"line":17148},[28,39302,31361],{"class":38},[28,39304,54],{"class":34},[28,39306,31083],{"class":60},[28,39308,39309],{"class":38},".block2(x)\n",[28,39311,39312,39314,39316,39318],{"class":30,"line":17161},[28,39313,31361],{"class":38},[28,39315,54],{"class":34},[28,39317,31083],{"class":60},[28,39319,39320],{"class":38},".block3(x)\n",[28,39322,39323,39325,39327,39329],{"class":30,"line":17166},[28,39324,31361],{"class":38},[28,39326,54],{"class":34},[28,39328,31083],{"class":60},[28,39330,39331],{"class":38},".block4(x)\n",[28,39333,39334,39336,39338,39340],{"class":30,"line":17171},[28,39335,31361],{"class":38},[28,39337,54],{"class":34},[28,39339,31083],{"class":60},[28,39341,39342],{"class":38},".block5(x)\n",[28,39344,39345,39347,39349,39351],{"class":30,"line":17176},[28,39346,31361],{"class":38},[28,39348,54],{"class":34},[28,39350,31083],{"class":60},[28,39352,39353],{"class":38},".block6(x)\n",[28,39355,39356,39358],{"class":30,"line":17189},[28,39357,15014],{"class":34},[28,39359,31469],{"class":38},[28,39361,39362],{"class":30,"line":17194},[28,39363,2662],{"emptyLinePlaceholder":336},[28,39365,39366],{"class":30,"line":32889},[28,39367,39368],{"class":87},"# 验证模型\n",[28,39370,39371,39373,39375,39377,39380],{"class":30,"line":32895},[28,39372,1796],{"class":34},[28,39374,31480],{"class":60},[28,39376,3211],{"class":34},[28,39378,39379],{"class":127},"'__main__'",[28,39381,4001],{"class":38},[28,39383,39384,39386,39388,39390,39392,39394,39396,39398,39400],{"class":30,"line":32901},[28,39385,31497],{"class":38},[28,39387,54],{"class":34},[28,39389,30711],{"class":38},[28,39391,31504],{"class":127},[28,39393,1966],{"class":34},[28,39395,31509],{"class":38},[28,39397,1963],{"class":34},[28,39399,30736],{"class":127},[28,39401,81],{"class":38},[28,39403,39404,39406],{"class":30,"line":32907},[28,39405,31559],{"class":60},[28,39407,30745],{"class":38},[28,39409,39410,39412,39414],{"class":30,"line":32913},[28,39411,31549],{"class":38},[28,39413,54],{"class":34},[28,39415,39416],{"class":38},"VGG16().to(device)\n",[28,39418,39419,39421,39423,39425,39427,39429,39431,39433],{"class":30,"line":32924},[28,39420,31559],{"class":60},[28,39422,31562],{"class":38},[28,39424,61],{"class":60},[28,39426,64],{"class":38},[28,39428,31758],{"class":60},[28,39430,64],{"class":38},[28,39432,31758],{"class":60},[28,39434,31575],{"class":38},[363,39436,39437],{"start":48},[366,39438,39439],{},"训练代码",[14,39441,39442],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39444,39445],{},"解决方式:",[14,39447,39448],{},"①权重初始化",[18,39450,39452],{"className":20,"code":39451,"language":22,"meta":23,"style":23},"# 权重初始化,保证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",[25,39453,39454,39459,39464,39476,39481,39489,39494,39507,39512,39526,39531,39540,39545,39554,39559,39564,39577,39582,39596],{"__ignoreMap":23},[28,39455,39456],{"class":30,"line":31},[28,39457,39458],{"class":87},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39460,39461],{"class":30,"line":48},[28,39462,39463],{"class":87},"# 循环遍历模型\n",[28,39465,39466,39468,39470,39472,39474],{"class":30,"line":84},[28,39467,3287],{"class":34},[28,39469,39124],{"class":38},[28,39471,26306],{"class":34},[28,39473,39129],{"class":60},[28,39475,39132],{"class":38},[28,39477,39478],{"class":30,"line":91},[28,39479,39480],{"class":87},"    # print(m)\n",[28,39482,39483,39485,39487],{"class":30,"line":97},[28,39484,3363],{"class":34},[28,39486,39144],{"class":60},[28,39488,39147],{"class":38},[28,39490,39491],{"class":30,"line":103},[28,39492,39493],{"class":87},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39495,39496,39499,39501,39503,39505],{"class":30,"line":109},[28,39497,39498],{"class":38},"        nn.init.kaiming_normal_(m.weight,",[28,39500,39160],{"class":5478},[28,39502,54],{"class":34},[28,39504,39165],{"class":127},[28,39506,81],{"class":38},[28,39508,39509],{"class":30,"line":118},[28,39510,39511],{"class":87},"        # 判断b参数是否存在\n",[28,39513,39514,39516,39518,39520,39522,39524],{"class":30,"line":124},[28,39515,2759],{"class":34},[28,39517,39180],{"class":38},[28,39519,39183],{"class":34},[28,39521,39186],{"class":34},[28,39523,39189],{"class":60},[28,39525,4001],{"class":38},[28,39527,39528],{"class":30,"line":131},[28,39529,39530],{"class":87},"            # 如果参数不存在的化初始化b=0\n",[28,39532,39533,39536,39538],{"class":30,"line":137},[28,39534,39535],{"class":38},"            nn.init.constant_(m.bias,",[28,39537,244],{"class":60},[28,39539,81],{"class":38},[28,39541,39542],{"class":30,"line":143},[28,39543,39544],{"class":87},"    # 全连接层初始化\n",[28,39546,39547,39550,39552],{"class":30,"line":149},[28,39548,39549],{"class":34},"    elif",[28,39551,39144],{"class":60},[28,39553,39220],{"class":38},[28,39555,39556],{"class":30,"line":1890},[28,39557,39558],{"class":87},"        # 这个初始化方法是利用的是正太分布的方式\n",[28,39560,39561],{"class":30,"line":1904},[28,39562,39563],{"class":87},"        # 均值为0，方差为0.01\n",[28,39565,39566,39569,39571,39573,39575],{"class":30,"line":1909},[28,39567,39568],{"class":38},"        nn.init.normal_(m.weight,",[28,39570,244],{"class":60},[28,39572,64],{"class":38},[28,39574,39242],{"class":60},[28,39576,81],{"class":38},[28,39578,39579],{"class":30,"line":1915},[28,39580,39581],{"class":87},"        # 初始化b参数\n",[28,39583,39584,39586,39588,39590,39592,39594],{"class":30,"line":1936},[28,39585,2759],{"class":34},[28,39587,39180],{"class":38},[28,39589,39183],{"class":34},[28,39591,39186],{"class":34},[28,39593,39189],{"class":60},[28,39595,4001],{"class":38},[28,39597,39598,39600,39602],{"class":30,"line":1941},[28,39599,39535],{"class":38},[28,39601,244],{"class":60},[28,39603,81],{"class":38},[14,39605,39606],{},"②尽可能地增加批次",[14,39608,39609],{},"训练完整代码：",[18,39611,39612],{"className":20,"code":38155,"language":22,"meta":23,"style":23},[25,39613,39614,39620,39630,39640,39650,39654,39670,39678,39696,39700,39704,39714,39750,39754,39790,39794,39822,39826,39830,39840,39876,39880,39916,39920,39948,39952,39956,39966,40002,40006,40042,40046,40082,40086,40114,40118,40122,40132,40168,40172,40208,40212,40248,40252,40280,40284,40288,40298,40334,40338,40374,40378,40414,40418,40446,40450,40454,40464,40468,40472,40476,40496,40500,40512,40516,40528,40532,40536,40540,40544,40556,40560,40568,40572,40584,40588,40602,40606,40614,40618,40626,40630,40634,40646,40650,40664,40672,40676,40680,40688,40698,40708,40718,40728,40738,40748,40754,40758,40762,40774,40794,40800,40808],{"__ignoreMap":23},[28,39615,39616,39618],{"class":30,"line":31},[28,39617,35],{"class":34},[28,39619,30655],{"class":38},[28,39621,39622,39624,39626,39628],{"class":30,"line":48},[28,39623,30997],{"class":34},[28,39625,38170],{"class":38},[28,39627,35],{"class":34},[28,39629,38175],{"class":38},[28,39631,39632,39634,39636,39638],{"class":30,"line":84},[28,39633,30997],{"class":34},[28,39635,31000],{"class":38},[28,39637,35],{"class":34},[28,39639,31005],{"class":38},[28,39641,39642,39644,39646,39648],{"class":30,"line":91},[28,39643,30997],{"class":34},[28,39645,31017],{"class":38},[28,39647,35],{"class":34},[28,39649,31022],{"class":38},[28,39651,39652],{"class":30,"line":97},[28,39653,2662],{"emptyLinePlaceholder":336},[28,39655,39656,39658,39660,39662,39664,39666,39668],{"class":30,"line":103},[28,39657,14956],{"class":34},[28,39659,38206],{"class":2225},[28,39661,413],{"class":38},[28,39663,31038],{"class":2225},[28,39665,956],{"class":38},[28,39667,31043],{"class":2225},[28,39669,31046],{"class":38},[28,39671,39672,39674,39676],{"class":30,"line":109},[28,39673,31061],{"class":34},[28,39675,31064],{"class":60},[28,39677,31067],{"class":38},[28,39679,39680,39682,39684,39686,39688,39690,39692,39694],{"class":30,"line":118},[28,39681,31077],{"class":60},[28,39683,413],{"class":38},[28,39685,38233],{"class":60},[28,39687,12697],{"class":38},[28,39689,31083],{"class":60},[28,39691,31086],{"class":38},[28,39693,31089],{"class":60},[28,39695,2238],{"class":38},[28,39697,39698],{"class":30,"line":124},[28,39699,38248],{"class":87},[28,39701,39702],{"class":30,"line":131},[28,39703,38253],{"class":87},[28,39705,39706,39708,39710,39712],{"class":30,"line":137},[28,39707,31105],{"class":60},[28,39709,38260],{"class":38},[28,39711,54],{"class":34},[28,39713,38265],{"class":38},[28,39715,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748],{"class":30,"line":143},[28,39717,38270],{"class":38},[28,39719,31116],{"class":5478},[28,39721,54],{"class":34},[28,39723,61],{"class":60},[28,39725,64],{"class":38},[28,39727,31125],{"class":5478},[28,39729,54],{"class":34},[28,39731,608],{"class":60},[28,39733,64],{"class":38},[28,39735,31134],{"class":5478},[28,39737,54],{"class":34},[28,39739,78],{"class":60},[28,39741,64],{"class":38},[28,39743,31143],{"class":5478},[28,39745,54],{"class":34},[28,39747,61],{"class":60},[28,39749,38303],{"class":38},[28,39751,39752],{"class":30,"line":149},[28,39753,38308],{"class":38},[28,39755,39756,39758,39760,39762,39764,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788],{"class":30,"line":1890},[28,39757,38270],{"class":38},[28,39759,31116],{"class":5478},[28,39761,54],{"class":34},[28,39763,608],{"class":60},[28,39765,64],{"class":38},[28,39767,31125],{"class":5478},[28,39769,54],{"class":34},[28,39771,608],{"class":60},[28,39773,64],{"class":38},[28,39775,31134],{"class":5478},[28,39777,54],{"class":34},[28,39779,78],{"class":60},[28,39781,64],{"class":38},[28,39783,31143],{"class":5478},[28,39785,54],{"class":34},[28,39787,61],{"class":60},[28,39789,38303],{"class":38},[28,39791,39792],{"class":30,"line":1904},[28,39793,38308],{"class":38},[28,39795,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820],{"class":30,"line":1909},[28,39797,38353],{"class":38},[28,39799,31134],{"class":5478},[28,39801,54],{"class":34},[28,39803,211],{"class":60},[28,39805,64],{"class":38},[28,39807,31189],{"class":5478},[28,39809,54],{"class":34},[28,39811,211],{"class":60},[28,39813,64],{"class":38},[28,39815,31143],{"class":5478},[28,39817,54],{"class":34},[28,39819,244],{"class":60},[28,39821,81],{"class":38},[28,39823,39824],{"class":30,"line":1915},[28,39825,38382],{"class":38},[28,39827,39828],{"class":30,"line":1936},[28,39829,38387],{"class":87},[28,39831,39832,39834,39836,39838],{"class":30,"line":1941},[28,39833,31105],{"class":60},[28,39835,38394],{"class":38},[28,39837,54],{"class":34},[28,39839,38265],{"class":38},[28,39841,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874],{"class":30,"line":1955},[28,39843,38270],{"class":38},[28,39845,31116],{"class":5478},[28,39847,54],{"class":34},[28,39849,608],{"class":60},[28,39851,64],{"class":38},[28,39853,31125],{"class":5478},[28,39855,54],{"class":34},[28,39857,32326],{"class":60},[28,39859,64],{"class":38},[28,39861,31134],{"class":5478},[28,39863,54],{"class":34},[28,39865,78],{"class":60},[28,39867,64],{"class":38},[28,39869,31143],{"class":5478},[28,39871,54],{"class":34},[28,39873,61],{"class":60},[28,39875,38303],{"class":38},[28,39877,39878],{"class":30,"line":1960},[28,39879,38308],{"class":38},[28,39881,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914],{"class":30,"line":1989},[28,39883,38270],{"class":38},[28,39885,31116],{"class":5478},[28,39887,54],{"class":34},[28,39889,32326],{"class":60},[28,39891,64],{"class":38},[28,39893,31125],{"class":5478},[28,39895,54],{"class":34},[28,39897,32326],{"class":60},[28,39899,64],{"class":38},[28,39901,31134],{"class":5478},[28,39903,54],{"class":34},[28,39905,78],{"class":60},[28,39907,64],{"class":38},[28,39909,31143],{"class":5478},[28,39911,54],{"class":34},[28,39913,61],{"class":60},[28,39915,38303],{"class":38},[28,39917,39918],{"class":30,"line":1994},[28,39919,38308],{"class":38},[28,39921,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946],{"class":30,"line":2011},[28,39923,38353],{"class":38},[28,39925,31134],{"class":5478},[28,39927,54],{"class":34},[28,39929,211],{"class":60},[28,39931,64],{"class":38},[28,39933,31189],{"class":5478},[28,39935,54],{"class":34},[28,39937,211],{"class":60},[28,39939,64],{"class":38},[28,39941,31143],{"class":5478},[28,39943,54],{"class":34},[28,39945,244],{"class":60},[28,39947,81],{"class":38},[28,39949,39950],{"class":30,"line":2016},[28,39951,38382],{"class":38},[28,39953,39954],{"class":30,"line":2021},[28,39955,38515],{"class":87},[28,39957,39958,39960,39962,39964],{"class":30,"line":2026},[28,39959,31105],{"class":60},[28,39961,38522],{"class":38},[28,39963,54],{"class":34},[28,39965,38265],{"class":38},[28,39967,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000],{"class":30,"line":2040},[28,39969,38270],{"class":38},[28,39971,31116],{"class":5478},[28,39973,54],{"class":34},[28,39975,32326],{"class":60},[28,39977,64],{"class":38},[28,39979,31125],{"class":5478},[28,39981,54],{"class":34},[28,39983,35126],{"class":60},[28,39985,64],{"class":38},[28,39987,31134],{"class":5478},[28,39989,54],{"class":34},[28,39991,78],{"class":60},[28,39993,64],{"class":38},[28,39995,31143],{"class":5478},[28,39997,54],{"class":34},[28,39999,61],{"class":60},[28,40001,38303],{"class":38},[28,40003,40004],{"class":30,"line":2045},[28,40005,38308],{"class":38},[28,40007,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040],{"class":30,"line":2839},[28,40009,38270],{"class":38},[28,40011,31116],{"class":5478},[28,40013,54],{"class":34},[28,40015,35126],{"class":60},[28,40017,64],{"class":38},[28,40019,31125],{"class":5478},[28,40021,54],{"class":34},[28,40023,35126],{"class":60},[28,40025,64],{"class":38},[28,40027,31134],{"class":5478},[28,40029,54],{"class":34},[28,40031,78],{"class":60},[28,40033,64],{"class":38},[28,40035,31143],{"class":5478},[28,40037,54],{"class":34},[28,40039,61],{"class":60},[28,40041,38303],{"class":38},[28,40043,40044],{"class":30,"line":2853},[28,40045,38308],{"class":38},[28,40047,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080],{"class":30,"line":2861},[28,40049,38270],{"class":38},[28,40051,31116],{"class":5478},[28,40053,54],{"class":34},[28,40055,35126],{"class":60},[28,40057,64],{"class":38},[28,40059,31125],{"class":5478},[28,40061,54],{"class":34},[28,40063,35126],{"class":60},[28,40065,64],{"class":38},[28,40067,31134],{"class":5478},[28,40069,54],{"class":34},[28,40071,78],{"class":60},[28,40073,64],{"class":38},[28,40075,31143],{"class":5478},[28,40077,54],{"class":34},[28,40079,61],{"class":60},[28,40081,38303],{"class":38},[28,40083,40084],{"class":30,"line":2866},[28,40085,38308],{"class":38},[28,40087,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110,40112],{"class":30,"line":2872},[28,40089,38353],{"class":38},[28,40091,31134],{"class":5478},[28,40093,54],{"class":34},[28,40095,211],{"class":60},[28,40097,64],{"class":38},[28,40099,31189],{"class":5478},[28,40101,54],{"class":34},[28,40103,211],{"class":60},[28,40105,64],{"class":38},[28,40107,31143],{"class":5478},[28,40109,54],{"class":34},[28,40111,244],{"class":60},[28,40113,81],{"class":38},[28,40115,40116],{"class":30,"line":2878},[28,40117,38382],{"class":38},[28,40119,40120],{"class":30,"line":2883},[28,40121,38683],{"class":87},[28,40123,40124,40126,40128,40130],{"class":30,"line":8210},[28,40125,31105],{"class":60},[28,40127,38690],{"class":38},[28,40129,54],{"class":34},[28,40131,38265],{"class":38},[28,40133,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166],{"class":30,"line":8234},[28,40135,38270],{"class":38},[28,40137,31116],{"class":5478},[28,40139,54],{"class":34},[28,40141,35126],{"class":60},[28,40143,64],{"class":38},[28,40145,31125],{"class":5478},[28,40147,54],{"class":34},[28,40149,38713],{"class":60},[28,40151,64],{"class":38},[28,40153,31134],{"class":5478},[28,40155,54],{"class":34},[28,40157,78],{"class":60},[28,40159,64],{"class":38},[28,40161,31143],{"class":5478},[28,40163,54],{"class":34},[28,40165,61],{"class":60},[28,40167,38303],{"class":38},[28,40169,40170],{"class":30,"line":8239},[28,40171,38308],{"class":38},[28,40173,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206],{"class":30,"line":8245},[28,40175,38270],{"class":38},[28,40177,31116],{"class":5478},[28,40179,54],{"class":34},[28,40181,38713],{"class":60},[28,40183,64],{"class":38},[28,40185,31125],{"class":5478},[28,40187,54],{"class":34},[28,40189,38713],{"class":60},[28,40191,64],{"class":38},[28,40193,31134],{"class":5478},[28,40195,54],{"class":34},[28,40197,78],{"class":60},[28,40199,64],{"class":38},[28,40201,31143],{"class":5478},[28,40203,54],{"class":34},[28,40205,61],{"class":60},[28,40207,38303],{"class":38},[28,40209,40210],{"class":30,"line":8272},[28,40211,38308],{"class":38},[28,40213,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246],{"class":30,"line":8277},[28,40215,38270],{"class":38},[28,40217,31116],{"class":5478},[28,40219,54],{"class":34},[28,40221,38713],{"class":60},[28,40223,64],{"class":38},[28,40225,31125],{"class":5478},[28,40227,54],{"class":34},[28,40229,38713],{"class":60},[28,40231,64],{"class":38},[28,40233,31134],{"class":5478},[28,40235,54],{"class":34},[28,40237,78],{"class":60},[28,40239,64],{"class":38},[28,40241,31143],{"class":5478},[28,40243,54],{"class":34},[28,40245,61],{"class":60},[28,40247,38303],{"class":38},[28,40249,40250],{"class":30,"line":8283},[28,40251,38308],{"class":38},[28,40253,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278],{"class":30,"line":8295},[28,40255,38353],{"class":38},[28,40257,31134],{"class":5478},[28,40259,54],{"class":34},[28,40261,211],{"class":60},[28,40263,64],{"class":38},[28,40265,31189],{"class":5478},[28,40267,54],{"class":34},[28,40269,211],{"class":60},[28,40271,64],{"class":38},[28,40273,31143],{"class":5478},[28,40275,54],{"class":34},[28,40277,244],{"class":60},[28,40279,81],{"class":38},[28,40281,40282],{"class":30,"line":8307},[28,40283,38382],{"class":38},[28,40285,40286],{"class":30,"line":8319},[28,40287,38852],{"class":87},[28,40289,40290,40292,40294,40296],{"class":30,"line":9978},[28,40291,31105],{"class":60},[28,40293,38859],{"class":38},[28,40295,54],{"class":34},[28,40297,38265],{"class":38},[28,40299,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332],{"class":30,"line":10003},[28,40301,38270],{"class":38},[28,40303,31116],{"class":5478},[28,40305,54],{"class":34},[28,40307,38713],{"class":60},[28,40309,64],{"class":38},[28,40311,31125],{"class":5478},[28,40313,54],{"class":34},[28,40315,38713],{"class":60},[28,40317,64],{"class":38},[28,40319,31134],{"class":5478},[28,40321,54],{"class":34},[28,40323,78],{"class":60},[28,40325,64],{"class":38},[28,40327,31143],{"class":5478},[28,40329,54],{"class":34},[28,40331,61],{"class":60},[28,40333,38303],{"class":38},[28,40335,40336],{"class":30,"line":10026},[28,40337,38308],{"class":38},[28,40339,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372],{"class":30,"line":10050},[28,40341,38270],{"class":38},[28,40343,31116],{"class":5478},[28,40345,54],{"class":34},[28,40347,38713],{"class":60},[28,40349,64],{"class":38},[28,40351,31125],{"class":5478},[28,40353,54],{"class":34},[28,40355,38713],{"class":60},[28,40357,64],{"class":38},[28,40359,31134],{"class":5478},[28,40361,54],{"class":34},[28,40363,78],{"class":60},[28,40365,64],{"class":38},[28,40367,31143],{"class":5478},[28,40369,54],{"class":34},[28,40371,61],{"class":60},[28,40373,38303],{"class":38},[28,40375,40376],{"class":30,"line":10055},[28,40377,38308],{"class":38},[28,40379,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412],{"class":30,"line":10060},[28,40381,38270],{"class":38},[28,40383,31116],{"class":5478},[28,40385,54],{"class":34},[28,40387,38713],{"class":60},[28,40389,64],{"class":38},[28,40391,31125],{"class":5478},[28,40393,54],{"class":34},[28,40395,38713],{"class":60},[28,40397,64],{"class":38},[28,40399,31134],{"class":5478},[28,40401,54],{"class":34},[28,40403,78],{"class":60},[28,40405,64],{"class":38},[28,40407,31143],{"class":5478},[28,40409,54],{"class":34},[28,40411,61],{"class":60},[28,40413,38303],{"class":38},[28,40415,40416],{"class":30,"line":10065},[28,40417,38308],{"class":38},[28,40419,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444],{"class":30,"line":10074},[28,40421,38353],{"class":38},[28,40423,31134],{"class":5478},[28,40425,54],{"class":34},[28,40427,211],{"class":60},[28,40429,64],{"class":38},[28,40431,31189],{"class":5478},[28,40433,54],{"class":34},[28,40435,211],{"class":60},[28,40437,64],{"class":38},[28,40439,31143],{"class":5478},[28,40441,54],{"class":34},[28,40443,244],{"class":60},[28,40445,81],{"class":38},[28,40447,40448],{"class":30,"line":10079},[28,40449,38382],{"class":38},[28,40451,40452],{"class":30,"line":10085},[28,40453,39020],{"class":87},[28,40455,40456,40458,40460,40462],{"class":30,"line":10106},[28,40457,31105],{"class":60},[28,40459,39027],{"class":38},[28,40461,54],{"class":34},[28,40463,38265],{"class":38},[28,40465,40466],{"class":30,"line":10112},[28,40467,39036],{"class":87},[28,40469,40470],{"class":30,"line":10126},[28,40471,39041],{"class":87},[28,40473,40474],{"class":30,"line":10132},[28,40475,39046],{"class":38},[28,40477,40478,40480,40482,40484,40486,40488,40490,40492,40494],{"class":30,"line":10159},[28,40479,39051],{"class":38},[28,40481,769],{"class":60},[28,40483,854],{"class":34},[28,40485,769],{"class":60},[28,40487,854],{"class":34},[28,40489,38713],{"class":60},[28,40491,64],{"class":38},[28,40493,35126],{"class":60},[28,40495,38303],{"class":38},[28,40497,40498],{"class":30,"line":10168},[28,40499,38308],{"class":38},[28,40501,40502,40504,40506,40508,40510],{"class":30,"line":10174},[28,40503,39051],{"class":38},[28,40505,35126],{"class":60},[28,40507,64],{"class":38},[28,40509,32326],{"class":60},[28,40511,38303],{"class":38},[28,40513,40514],{"class":30,"line":10182},[28,40515,38308],{"class":38},[28,40517,40518,40520,40522,40524,40526],{"class":30,"line":10187},[28,40519,39051],{"class":38},[28,40521,32326],{"class":60},[28,40523,64],{"class":38},[28,40525,845],{"class":60},[28,40527,81],{"class":38},[28,40529,40530],{"class":30,"line":16866},[28,40531,38382],{"class":38},[28,40533,40534],{"class":30,"line":16872},[28,40535,2662],{"emptyLinePlaceholder":336},[28,40537,40538],{"class":30,"line":16895},[28,40539,39112],{"class":87},[28,40541,40542],{"class":30,"line":16901},[28,40543,39117],{"class":87},[28,40545,40546,40548,40550,40552,40554],{"class":30,"line":16924},[28,40547,3665],{"class":34},[28,40549,39124],{"class":38},[28,40551,26306],{"class":34},[28,40553,39129],{"class":60},[28,40555,39132],{"class":38},[28,40557,40558],{"class":30,"line":16938},[28,40559,39137],{"class":87},[28,40561,40562,40564,40566],{"class":30,"line":16958},[28,40563,4904],{"class":34},[28,40565,39144],{"class":60},[28,40567,39147],{"class":38},[28,40569,40570],{"class":30,"line":16964},[28,40571,39152],{"class":87},[28,40573,40574,40576,40578,40580,40582],{"class":30,"line":16975},[28,40575,39157],{"class":38},[28,40577,39160],{"class":5478},[28,40579,54],{"class":34},[28,40581,39165],{"class":127},[28,40583,81],{"class":38},[28,40585,40586],{"class":30,"line":16998},[28,40587,39172],{"class":87},[28,40589,40590,40592,40594,40596,40598,40600],{"class":30,"line":17020},[28,40591,39177],{"class":34},[28,40593,39180],{"class":38},[28,40595,39183],{"class":34},[28,40597,39186],{"class":34},[28,40599,39189],{"class":60},[28,40601,4001],{"class":38},[28,40603,40604],{"class":30,"line":17025},[28,40605,39196],{"class":87},[28,40607,40608,40610,40612],{"class":30,"line":17031},[28,40609,39201],{"class":38},[28,40611,244],{"class":60},[28,40613,81],{"class":38},[28,40615,40616],{"class":30,"line":17045},[28,40617,39210],{"class":87},[28,40619,40620,40622,40624],{"class":30,"line":17058},[28,40621,39215],{"class":34},[28,40623,39144],{"class":60},[28,40625,39220],{"class":38},[28,40627,40628],{"class":30,"line":17063},[28,40629,39225],{"class":87},[28,40631,40632],{"class":30,"line":17077},[28,40633,39230],{"class":87},[28,40635,40636,40638,40640,40642,40644],{"class":30,"line":17082},[28,40637,39235],{"class":38},[28,40639,244],{"class":60},[28,40641,64],{"class":38},[28,40643,39242],{"class":60},[28,40645,81],{"class":38},[28,40647,40648],{"class":30,"line":17088},[28,40649,39249],{"class":87},[28,40651,40652,40654,40656,40658,40660,40662],{"class":30,"line":17093},[28,40653,39177],{"class":34},[28,40655,39180],{"class":38},[28,40657,39183],{"class":34},[28,40659,39186],{"class":34},[28,40661,39189],{"class":60},[28,40663,4001],{"class":38},[28,40665,40666,40668,40670],{"class":30,"line":17107},[28,40667,39201],{"class":38},[28,40669,244],{"class":60},[28,40671,81],{"class":38},[28,40673,40674],{"class":30,"line":17112},[28,40675,2662],{"emptyLinePlaceholder":336},[28,40677,40678],{"class":30,"line":17117},[28,40679,35421],{"class":87},[28,40681,40682,40684,40686],{"class":30,"line":17131},[28,40683,31061],{"class":34},[28,40685,31353],{"class":2225},[28,40687,31356],{"class":38},[28,40689,40690,40692,40694,40696],{"class":30,"line":17143},[28,40691,31361],{"class":38},[28,40693,54],{"class":34},[28,40695,31083],{"class":60},[28,40697,39298],{"class":38},[28,40699,40700,40702,40704,40706],{"class":30,"line":17148},[28,40701,31361],{"class":38},[28,40703,54],{"class":34},[28,40705,31083],{"class":60},[28,40707,39309],{"class":38},[28,40709,40710,40712,40714,40716],{"class":30,"line":17161},[28,40711,31361],{"class":38},[28,40713,54],{"class":34},[28,40715,31083],{"class":60},[28,40717,39320],{"class":38},[28,40719,40720,40722,40724,40726],{"class":30,"line":17166},[28,40721,31361],{"class":38},[28,40723,54],{"class":34},[28,40725,31083],{"class":60},[28,40727,39331],{"class":38},[28,40729,40730,40732,40734,40736],{"class":30,"line":17171},[28,40731,31361],{"class":38},[28,40733,54],{"class":34},[28,40735,31083],{"class":60},[28,40737,39342],{"class":38},[28,40739,40740,40742,40744,40746],{"class":30,"line":17176},[28,40741,31361],{"class":38},[28,40743,54],{"class":34},[28,40745,31083],{"class":60},[28,40747,39353],{"class":38},[28,40749,40750,40752],{"class":30,"line":17189},[28,40751,15014],{"class":34},[28,40753,31469],{"class":38},[28,40755,40756],{"class":30,"line":17194},[28,40757,2662],{"emptyLinePlaceholder":336},[28,40759,40760],{"class":30,"line":32889},[28,40761,39368],{"class":87},[28,40763,40764,40766,40768,40770,40772],{"class":30,"line":32895},[28,40765,1796],{"class":34},[28,40767,31480],{"class":60},[28,40769,3211],{"class":34},[28,40771,39379],{"class":127},[28,40773,4001],{"class":38},[28,40775,40776,40778,40780,40782,40784,40786,40788,40790,40792],{"class":30,"line":32901},[28,40777,31497],{"class":38},[28,40779,54],{"class":34},[28,40781,30711],{"class":38},[28,40783,31504],{"class":127},[28,40785,1966],{"class":34},[28,40787,31509],{"class":38},[28,40789,1963],{"class":34},[28,40791,30736],{"class":127},[28,40793,81],{"class":38},[28,40795,40796,40798],{"class":30,"line":32907},[28,40797,31559],{"class":60},[28,40799,30745],{"class":38},[28,40801,40802,40804,40806],{"class":30,"line":32913},[28,40803,31549],{"class":38},[28,40805,54],{"class":34},[28,40807,39416],{"class":38},[28,40809,40810,40812,40814,40816,40818,40820,40822,40824],{"class":30,"line":32924},[28,40811,31559],{"class":60},[28,40813,31562],{"class":38},[28,40815,61],{"class":60},[28,40817,64],{"class":38},[28,40819,31758],{"class":60},[28,40821,64],{"class":38},[28,40823,31758],{"class":60},[28,40825,31575],{"class":38},[363,40827,40828],{"start":84},[366,40829,40830],{},"测试代码",[18,40832,40834],{"className":20,"code":40833,"language":22,"meta":23,"style":23},"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",[25,40835,40836,40842,40852,40862,40866,40876,40887,40891,40895,40899,40907,40923,40933,40949,40959,40973,40977,40987,40997,41007,41013,41017,41021,41029,41033,41049,41057,41061,41065,41073,41081,41085,41089,41093,41097,41103,41107,41117,41125,41133,41137,41141,41145,41153,41157,41173,41177,41181,41185,41197,41201,41213,41217,41221,41233,41237,41247,41251,41255,41267,41271,41280,41284,41288,41296,41300,41308,41312,41316,41320,41324,41328,41344,41352,41356,41360,41408,41414,41418,41428,41436,41444,41448,41452,41456,41460,41468,41472,41488,41492,41500,41508],{"__ignoreMap":23},[28,40837,40838,40840],{"class":30,"line":31},[28,40839,35],{"class":34},[28,40841,30655],{"class":38},[28,40843,40844,40846,40848,40850],{"class":30,"line":48},[28,40845,35],{"class":34},[28,40847,31672],{"class":38},[28,40849,42],{"class":34},[28,40851,31677],{"class":38},[28,40853,40854,40856,40858,40860],{"class":30,"line":84},[28,40855,30997],{"class":34},[28,40857,31655],{"class":38},[28,40859,35],{"class":34},[28,40861,31660],{"class":38},[28,40863,40864],{"class":30,"line":91},[28,40865,34178],{"class":87},[28,40867,40868,40870,40872,40874],{"class":30,"line":97},[28,40869,30997],{"class":34},[28,40871,31628],{"class":38},[28,40873,35],{"class":34},[28,40875,31633],{"class":38},[28,40877,40878,40880,40882,40884],{"class":30,"line":103},[28,40879,30997],{"class":34},[28,40881,32170],{"class":38},[28,40883,35],{"class":34},[28,40885,40886],{"class":60}," VGG16\n",[28,40888,40889],{"class":30,"line":109},[28,40890,2662],{"emptyLinePlaceholder":336},[28,40892,40893],{"class":30,"line":118},[28,40894,2662],{"emptyLinePlaceholder":336},[28,40896,40897],{"class":30,"line":124},[28,40898,34207],{"class":87},[28,40900,40901,40903,40905],{"class":30,"line":131},[28,40902,32203],{"class":34},[28,40904,34214],{"class":2225},[28,40906,32209],{"class":38},[28,40908,40909,40911,40913,40915,40917,40919,40921],{"class":30,"line":137},[28,40910,34221],{"class":38},[28,40912,54],{"class":34},[28,40914,31712],{"class":38},[28,40916,31715],{"class":5478},[28,40918,54],{"class":34},[28,40920,31720],{"class":127},[28,40922,31723],{"class":38},[28,40924,40925,40927,40929,40931],{"class":30,"line":143},[28,40926,34238],{"class":5478},[28,40928,54],{"class":34},[28,40930,34243],{"class":60},[28,40932,31723],{"class":38},[28,40934,40935,40937,40939,40941,40943,40945,40947],{"class":30,"line":149},[28,40936,34250],{"class":5478},[28,40938,54],{"class":34},[28,40940,31750],{"class":38},[28,40942,31753],{"class":5478},[28,40944,54],{"class":34},[28,40946,31758],{"class":60},[28,40948,31761],{"class":38},[28,40950,40951,40953,40955,40957],{"class":30,"line":1890},[28,40952,34267],{"class":5478},[28,40954,54],{"class":34},[28,40956,31733],{"class":60},[28,40958,81],{"class":38},[28,40960,40961,40963,40965,40967,40969,40971],{"class":30,"line":1904},[28,40962,34278],{"class":38},[28,40964,54],{"class":34},[28,40966,31791],{"class":38},[28,40968,31794],{"class":5478},[28,40970,54],{"class":34},[28,40972,34289],{"class":38},[28,40974,40975],{"class":30,"line":1909},[28,40976,34294],{"class":87},[28,40978,40979,40981,40983,40985],{"class":30,"line":1915},[28,40980,34299],{"class":5478},[28,40982,54],{"class":34},[28,40984,61],{"class":60},[28,40986,31723],{"class":38},[28,40988,40989,40991,40993,40995],{"class":30,"line":1936},[28,40990,34310],{"class":5478},[28,40992,54],{"class":34},[28,40994,31733],{"class":60},[28,40996,31723],{"class":38},[28,40998,40999,41001,41003,41005],{"class":30,"line":1941},[28,41000,34321],{"class":5478},[28,41002,54],{"class":34},[28,41004,244],{"class":60},[28,41006,81],{"class":38},[28,41008,41009,41011],{"class":30,"line":1955},[28,41010,4352],{"class":34},[28,41012,34334],{"class":38},[28,41014,41015],{"class":30,"line":1960},[28,41016,2662],{"emptyLinePlaceholder":336},[28,41018,41019],{"class":30,"line":1989},[28,41020,34343],{"class":87},[28,41022,41023,41025,41027],{"class":30,"line":1994},[28,41024,32203],{"class":34},[28,41026,34350],{"class":2225},[28,41028,34353],{"class":38},[28,41030,41031],{"class":30,"line":2011},[28,41032,34358],{"class":87},[28,41034,41035,41037,41039,41041,41043,41045,41047],{"class":30,"line":2016},[28,41036,31497],{"class":38},[28,41038,54],{"class":34},[28,41040,31504],{"class":127},[28,41042,1966],{"class":34},[28,41044,31509],{"class":38},[28,41046,1963],{"class":34},[28,41048,34375],{"class":127},[28,41050,41051,41053,41055],{"class":30,"line":2021},[28,41052,31549],{"class":38},[28,41054,54],{"class":34},[28,41056,32545],{"class":38},[28,41058,41059],{"class":30,"line":2026},[28,41060,2662],{"emptyLinePlaceholder":336},[28,41062,41063],{"class":30,"line":2040},[28,41064,34392],{"class":87},[28,41066,41067,41069,41071],{"class":30,"line":2045},[28,41068,34397],{"class":38},[28,41070,54],{"class":34},[28,41072,32598],{"class":60},[28,41074,41075,41077,41079],{"class":30,"line":2839},[28,41076,34406],{"class":38},[28,41078,54],{"class":34},[28,41080,3347],{"class":60},[28,41082,41083],{"class":30,"line":2853},[28,41084,2662],{"emptyLinePlaceholder":336},[28,41086,41087],{"class":30,"line":2861},[28,41088,34419],{"class":87},[28,41090,41091],{"class":30,"line":2866},[28,41092,34424],{"class":87},[28,41094,41095],{"class":30,"line":2872},[28,41096,34429],{"class":87},[28,41098,41099,41101],{"class":30,"line":2878},[28,41100,34434],{"class":34},[28,41102,33140],{"class":38},[28,41104,41105],{"class":30,"line":2883},[28,41106,34441],{"class":87},[28,41108,41109,41111,41113,41115],{"class":30,"line":8210},[28,41110,3665],{"class":34},[28,41112,34448],{"class":38},[28,41114,26306],{"class":34},[28,41116,34453],{"class":38},[28,41118,41119,41121,41123],{"class":30,"line":8234},[28,41120,34458],{"class":38},[28,41122,54],{"class":34},[28,41124,34463],{"class":38},[28,41126,41127,41129,41131],{"class":30,"line":8239},[28,41128,34468],{"class":38},[28,41130,54],{"class":34},[28,41132,34473],{"class":38},[28,41134,41135],{"class":30,"line":8245},[28,41136,34478],{"class":87},[28,41138,41139],{"class":30,"line":8272},[28,41140,33131],{"class":38},[28,41142,41143],{"class":30,"line":8277},[28,41144,34487],{"class":87},[28,41146,41147,41149,41151],{"class":30,"line":8283},[28,41148,32916],{"class":38},[28,41150,54],{"class":34},[28,41152,34496],{"class":38},[28,41154,41155],{"class":30,"line":8295},[28,41156,34501],{"class":87},[28,41158,41159,41161,41163,41165,41167,41169,41171],{"class":30,"line":8307},[28,41160,32933],{"class":38},[28,41162,54],{"class":34},[28,41164,32938],{"class":38},[28,41166,32941],{"class":5478},[28,41168,54],{"class":34},[28,41170,61],{"class":60},[28,41172,81],{"class":38},[28,41174,41175],{"class":30,"line":8319},[28,41176,34522],{"class":87},[28,41178,41179],{"class":30,"line":9978},[28,41180,34527],{"class":87},[28,41182,41183],{"class":30,"line":10003},[28,41184,34532],{"class":87},[28,41186,41187,41189,41191,41193,41195],{"class":30,"line":10026},[28,41188,34537],{"class":38},[28,41190,9739],{"class":34},[28,41192,33043],{"class":38},[28,41194,3211],{"class":34},[28,41196,34546],{"class":38},[28,41198,41199],{"class":30,"line":10050},[28,41200,34551],{"class":87},[28,41202,41203,41205,41207,41209,41211],{"class":30,"line":10055},[28,41204,34556],{"class":38},[28,41206,9739],{"class":34},[28,41208,34561],{"class":38},[28,41210,244],{"class":60},[28,41212,81],{"class":38},[28,41214,41215],{"class":30,"line":10060},[28,41216,2662],{"emptyLinePlaceholder":336},[28,41218,41219],{"class":30,"line":10065},[28,41220,34574],{"class":87},[28,41222,41223,41225,41227,41229,41231],{"class":30,"line":10074},[28,41224,34579],{"class":38},[28,41226,54],{"class":34},[28,41228,34584],{"class":38},[28,41230,982],{"class":34},[28,41232,34589],{"class":38},[28,41234,41235],{"class":30,"line":10079},[28,41236,34594],{"class":87},[28,41238,41239,41241,41243,41245],{"class":30,"line":10085},[28,41240,32707],{"class":60},[28,41242,413],{"class":38},[28,41244,34603],{"class":127},[28,41246,34606],{"class":38},[28,41248,41249],{"class":30,"line":10106},[28,41250,2662],{"emptyLinePlaceholder":336},[28,41252,41253],{"class":30,"line":10112},[28,41254,34615],{"class":87},[28,41256,41257,41259,41261,41263,41265],{"class":30,"line":10126},[28,41258,1796],{"class":34},[28,41260,31480],{"class":60},[28,41262,3211],{"class":34},[28,41264,31485],{"class":127},[28,41266,4001],{"class":38},[28,41268,41269],{"class":30,"line":10132},[28,41270,34632],{"class":87},[28,41272,41273,41275,41277],{"class":30,"line":10159},[28,41274,31549],{"class":38},[28,41276,54],{"class":34},[28,41278,41279],{"class":38},"VGG16()\n",[28,41281,41282],{"class":30,"line":10168},[28,41283,34645],{"class":87},[28,41285,41286],{"class":30,"line":10174},[28,41287,34650],{"class":87},[28,41289,41290,41292,41294],{"class":30,"line":10182},[28,41291,34655],{"class":38},[28,41293,34658],{"class":127},[28,41295,30757],{"class":38},[28,41297,41298],{"class":30,"line":10187},[28,41299,34665],{"class":87},[28,41301,41302,41304,41306],{"class":30,"line":16866},[28,41303,34278],{"class":38},[28,41305,54],{"class":34},[28,41307,34674],{"class":38},[28,41309,41310],{"class":30,"line":16872},[28,41311,34679],{"class":87},[28,41313,41314],{"class":30,"line":16895},[28,41315,34684],{"class":38},[28,41317,41318],{"class":30,"line":16901},[28,41319,2662],{"emptyLinePlaceholder":336},[28,41321,41322],{"class":30,"line":16924},[28,41323,34693],{"class":87},[28,41325,41326],{"class":30,"line":16938},[28,41327,34698],{"class":87},[28,41329,41330,41332,41334,41336,41338,41340,41342],{"class":30,"line":16958},[28,41331,31497],{"class":38},[28,41333,54],{"class":34},[28,41335,31504],{"class":127},[28,41337,1966],{"class":34},[28,41339,31509],{"class":38},[28,41341,1963],{"class":34},[28,41343,34375],{"class":127},[28,41345,41346,41348,41350],{"class":30,"line":16964},[28,41347,31549],{"class":38},[28,41349,54],{"class":34},[28,41351,32545],{"class":38},[28,41353,41354],{"class":30,"line":16975},[28,41355,34727],{"class":87},[28,41357,41358],{"class":30,"line":16998},[28,41359,34732],{"class":87},[28,41361,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404,41406],{"class":30,"line":17020},[28,41363,34737],{"class":38},[28,41365,54],{"class":34},[28,41367,1287],{"class":38},[28,41369,34744],{"class":127},[28,41371,64],{"class":38},[28,41373,34749],{"class":127},[28,41375,64],{"class":38},[28,41377,34754],{"class":127},[28,41379,64],{"class":38},[28,41381,34759],{"class":127},[28,41383,64],{"class":38},[28,41385,34764],{"class":127},[28,41387,64],{"class":38},[28,41389,34769],{"class":127},[28,41391,64],{"class":38},[28,41393,34774],{"class":127},[28,41395,64],{"class":38},[28,41397,34779],{"class":127},[28,41399,64],{"class":38},[28,41401,34784],{"class":127},[28,41403,64],{"class":38},[28,41405,34789],{"class":127},[28,41407,33502],{"class":38},[28,41409,41410,41412],{"class":30,"line":17025},[28,41411,34434],{"class":34},[28,41413,33140],{"class":38},[28,41415,41416],{"class":30,"line":17031},[28,41417,34802],{"class":87},[28,41419,41420,41422,41424,41426],{"class":30,"line":17045},[28,41421,3665],{"class":34},[28,41423,34809],{"class":38},[28,41425,26306],{"class":34},[28,41427,34453],{"class":38},[28,41429,41430,41432,41434],{"class":30,"line":17058},[28,41431,32866],{"class":38},[28,41433,54],{"class":34},[28,41435,32871],{"class":38},[28,41437,41438,41440,41442],{"class":30,"line":17063},[28,41439,32881],{"class":38},[28,41441,54],{"class":34},[28,41443,32886],{"class":38},[28,41445,41446],{"class":30,"line":17077},[28,41447,2662],{"emptyLinePlaceholder":336},[28,41449,41450],{"class":30,"line":17082},[28,41451,34838],{"class":87},[28,41453,41454],{"class":30,"line":17088},[28,41455,33131],{"class":38},[28,41457,41458],{"class":30,"line":17093},[28,41459,34847],{"class":87},[28,41461,41462,41464,41466],{"class":30,"line":17107},[28,41463,32916],{"class":38},[28,41465,54],{"class":34},[28,41467,32921],{"class":38},[28,41469,41470],{"class":30,"line":17112},[28,41471,34860],{"class":87},[28,41473,41474,41476,41478,41480,41482,41484,41486],{"class":30,"line":17117},[28,41475,32933],{"class":38},[28,41477,54],{"class":34},[28,41479,32938],{"class":38},[28,41481,32941],{"class":5478},[28,41483,54],{"class":34},[28,41485,61],{"class":60},[28,41487,81],{"class":38},[28,41489,41490],{"class":30,"line":17131},[28,41491,34881],{"class":87},[28,41493,41494,41496,41498],{"class":30,"line":17143},[28,41495,34886],{"class":38},[28,41497,54],{"class":34},[28,41499,34891],{"class":38},[28,41501,41502,41504,41506],{"class":30,"line":17148},[28,41503,34896],{"class":38},[28,41505,54],{"class":34},[28,41507,34901],{"class":38},[28,41509,41510,41512,41514,41516,41518,41520,41522,41524],{"class":30,"line":17161},[28,41511,34906],{"class":60},[28,41513,413],{"class":38},[28,41515,34911],{"class":127},[28,41517,34914],{"class":38},[28,41519,34917],{"class":127},[28,41521,64],{"class":38},[28,41523,34922],{"class":127},[28,41525,34925],{"class":38},[380,41527,41529],{"id":41528},"_23googlenet","2.3.GoogLeNet",[22260,41531,41533],{"id":41532},"_231原理","2.3.1.原理",[363,41535,41536],{},[366,41537,41538],{},"网络结构",[14,41540,41541],{},[1727,41542],{"alt":23,"src":41543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41545,41546],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41548,41549],{},[1727,41550],{"alt":23,"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-024.png",[14,41553,41554],{},[1727,41555],{"alt":23,"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-025.png",[14,41558,41559],{},[1727,41560],{"alt":23,"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-026.png",[363,41563,41564],{"start":48},[366,41565,41566],{},"1x1卷积的优点",[14,41568,41569],{},[1727,41570],{"alt":23,"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-027.png",[363,41573,41574],{"start":84},[366,41575,41576],{},"全局平均池化层优点",[14,41578,41579],{},[1727,41580],{"alt":23,"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-028.png",[14,41583,41584],{},[1727,41585],{"alt":23,"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-029.png",[363,41588,41589],{"start":91},[366,41590,41591],{},"参数详细描述",[14,41593,41594],{},[1727,41595],{"alt":23,"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-030.png",[14,41598,41599],{},[1727,41600],{"alt":23,"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-031.png",[14,41603,41604],{},[1727,41605],{"alt":23,"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-032.png",[14,41608,41609],{},[1727,41610],{"alt":23,"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-033.png",[14,41613,41614],{},[1727,41615],{"alt":23,"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-034.png",[14,41618,41619],{},[1727,41620],{"alt":23,"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-035.png",[14,41623,41624],{},[1727,41625],{"alt":23,"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-036.png",[14,41628,41629],{},[1727,41630],{"alt":23,"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-037.png",[14,41633,41634],{},[1727,41635],{"alt":23,"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-038.png",[14,41638,41639],{},[1727,41640],{"alt":23,"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-039.png",[14,41643,41644],{},[1727,41645],{"alt":23,"src":41646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41648,41649],{},[1727,41650],{"alt":23,"src":41651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41653,41654],{},[1727,41655],{"alt":23,"src":41656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41658,41659],{},[1727,41660],{"alt":23,"src":41661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41663,41664],{},[1727,41665],{"alt":23,"src":41666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41668,41669],{},[1727,41670],{"alt":23,"src":41671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41673,41674],{},[1727,41675],{"alt":23,"src":41676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41678,41679],{},[1727,41680],{"alt":23,"src":41681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41683,41684],{},[1727,41685],{"alt":23,"src":41686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41688,41689],{},[1727,41690],{"alt":23,"src":41691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41693,41694],{},[1727,41695],{"alt":23,"src":41696},"\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",[22260,41698,41700],{"id":41699},"_232代码实现","2.3.2.代码实现",[363,41702,41703],{},[366,41704,30971],{},[14,41706,41707],{},"根据原理一步一步搭建即可",[18,41709,41711],{"className":20,"code":41710,"language":22,"meta":23,"style":23},"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",[25,41712,41713,41719,41729,41739,41743,41760,41769,41784,41794,41799,41832,41837,41874,41921,41926,41962,42009,42014,42019,42054,42086,42090,42098,42114,42138,42163,42184,42189,42204,42208,42212,42217,42234,42239,42248,42263,42274,42318,42322,42350,42354,42365,42393,42397,42434,42438,42466,42470,42481,42517,42549,42577,42581,42592,42626,42658,42690,42723,42757,42785,42789,42800,42833,42865,42879,42883,42896,42900,42905,42917,42925,42947,42952,42957,42962,42967,42972,42977,42991,42999,43008,43021,43036,43045,43049,43057,43068,43079,43090,43101,43112,43118,43122,43127,43139,43159,43168],{"__ignoreMap":23},[28,41714,41715,41717],{"class":30,"line":31},[28,41716,35],{"class":34},[28,41718,30655],{"class":38},[28,41720,41721,41723,41725,41727],{"class":30,"line":48},[28,41722,30997],{"class":34},[28,41724,31000],{"class":38},[28,41726,35],{"class":34},[28,41728,31005],{"class":38},[28,41730,41731,41733,41735,41737],{"class":30,"line":84},[28,41732,30997],{"class":34},[28,41734,31017],{"class":38},[28,41736,35],{"class":34},[28,41738,31022],{"class":38},[28,41740,41741],{"class":30,"line":91},[28,41742,2662],{"emptyLinePlaceholder":336},[28,41744,41745,41747,41750,41752,41754,41756,41758],{"class":30,"line":97},[28,41746,14956],{"class":34},[28,41748,41749],{"class":2225}," Inception",[28,41751,413],{"class":38},[28,41753,31038],{"class":2225},[28,41755,956],{"class":38},[28,41757,31043],{"class":2225},[28,41759,31046],{"class":38},[28,41761,41762,41764,41766],{"class":30,"line":103},[28,41763,31061],{"class":34},[28,41765,31064],{"class":60},[28,41767,41768],{"class":38},"(self,in_channels,c1,c2,c3,c4):\n",[28,41770,41771,41773,41776,41778,41780,41782],{"class":30,"line":109},[28,41772,31077],{"class":60},[28,41774,41775],{"class":38},"(Inception,",[28,41777,31083],{"class":60},[28,41779,31086],{"class":38},[28,41781,31089],{"class":60},[28,41783,2238],{"class":38},[28,41785,41786,41788,41790,41792],{"class":30,"line":118},[28,41787,31105],{"class":60},[28,41789,35027],{"class":38},[28,41791,54],{"class":34},[28,41793,35032],{"class":38},[28,41795,41796],{"class":30,"line":124},[28,41797,41798],{"class":87},"        # 路线1：定义1*1卷积\n",[28,41800,41801,41803,41806,41808,41810,41812,41814,41817,41819,41821,41824,41826,41828,41830],{"class":30,"line":131},[28,41802,31105],{"class":60},[28,41804,41805],{"class":38},".p1_1",[28,41807,54],{"class":34},[28,41809,31113],{"class":38},[28,41811,31116],{"class":5478},[28,41813,54],{"class":34},[28,41815,41816],{"class":38},"in_channels,",[28,41818,31125],{"class":5478},[28,41820,54],{"class":34},[28,41822,41823],{"class":38},"c1,",[28,41825,31134],{"class":5478},[28,41827,54],{"class":34},[28,41829,61],{"class":60},[28,41831,81],{"class":38},[28,41833,41834],{"class":30,"line":137},[28,41835,41836],{"class":87},"        # 路线2：定义1*1卷积和3*3\n",[28,41838,41839,41841,41844,41846,41848,41850,41852,41854,41856,41858,41861,41863,41866,41868,41870,41872],{"class":30,"line":143},[28,41840,31105],{"class":60},[28,41842,41843],{"class":38},".p2_1",[28,41845,54],{"class":34},[28,41847,31113],{"class":38},[28,41849,31116],{"class":5478},[28,41851,54],{"class":34},[28,41853,41816],{"class":38},[28,41855,31125],{"class":5478},[28,41857,54],{"class":34},[28,41859,41860],{"class":38},"c2[",[28,41862,244],{"class":60},[28,41864,41865],{"class":38},"],",[28,41867,31134],{"class":5478},[28,41869,54],{"class":34},[28,41871,61],{"class":60},[28,41873,81],{"class":38},[28,41875,41876,41878,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905,41907,41909,41911,41913,41915,41917,41919],{"class":30,"line":149},[28,41877,31105],{"class":60},[28,41879,41880],{"class":38},".p2_2",[28,41882,54],{"class":34},[28,41884,31113],{"class":38},[28,41886,31116],{"class":5478},[28,41888,54],{"class":34},[28,41890,41860],{"class":38},[28,41892,244],{"class":60},[28,41894,41865],{"class":38},[28,41896,31125],{"class":5478},[28,41898,54],{"class":34},[28,41900,41860],{"class":38},[28,41902,61],{"class":60},[28,41904,41865],{"class":38},[28,41906,31134],{"class":5478},[28,41908,54],{"class":34},[28,41910,78],{"class":60},[28,41912,64],{"class":38},[28,41914,31143],{"class":5478},[28,41916,54],{"class":34},[28,41918,61],{"class":60},[28,41920,81],{"class":38},[28,41922,41923],{"class":30,"line":1890},[28,41924,41925],{"class":87},"        # 路线3：定义1*1卷积和5*5\n",[28,41927,41928,41930,41933,41935,41937,41939,41941,41943,41945,41947,41950,41952,41954,41956,41958,41960],{"class":30,"line":1904},[28,41929,31105],{"class":60},[28,41931,41932],{"class":38},".p3_1",[28,41934,54],{"class":34},[28,41936,31113],{"class":38},[28,41938,31116],{"class":5478},[28,41940,54],{"class":34},[28,41942,41816],{"class":38},[28,41944,31125],{"class":5478},[28,41946,54],{"class":34},[28,41948,41949],{"class":38},"c3[",[28,41951,244],{"class":60},[28,41953,41865],{"class":38},[28,41955,31134],{"class":5478},[28,41957,54],{"class":34},[28,41959,61],{"class":60},[28,41961,81],{"class":38},[28,41963,41964,41966,41969,41971,41973,41975,41977,41979,41981,41983,41985,41987,41989,41991,41993,41995,41997,41999,42001,42003,42005,42007],{"class":30,"line":1909},[28,41965,31105],{"class":60},[28,41967,41968],{"class":38},".p3_2",[28,41970,54],{"class":34},[28,41972,31113],{"class":38},[28,41974,31116],{"class":5478},[28,41976,54],{"class":34},[28,41978,41949],{"class":38},[28,41980,244],{"class":60},[28,41982,41865],{"class":38},[28,41984,31125],{"class":5478},[28,41986,54],{"class":34},[28,41988,41949],{"class":38},[28,41990,61],{"class":60},[28,41992,41865],{"class":38},[28,41994,31134],{"class":5478},[28,41996,54],{"class":34},[28,41998,721],{"class":60},[28,42000,64],{"class":38},[28,42002,31143],{"class":5478},[28,42004,54],{"class":34},[28,42006,211],{"class":60},[28,42008,81],{"class":38},[28,42010,42011],{"class":30,"line":1915},[28,42012,42013],{"class":87},"        # 路线4：定义3*3最大池化和1*1卷积\n",[28,42015,42016],{"class":30,"line":1936},[28,42017,42018],{"class":87},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[28,42020,42021,42023,42026,42028,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052],{"class":30,"line":1941},[28,42022,31105],{"class":60},[28,42024,42025],{"class":38},".p4_1",[28,42027,54],{"class":34},[28,42029,35085],{"class":38},[28,42031,31134],{"class":5478},[28,42033,54],{"class":34},[28,42035,78],{"class":60},[28,42037,64],{"class":38},[28,42039,31189],{"class":5478},[28,42041,54],{"class":34},[28,42043,61],{"class":60},[28,42045,64],{"class":38},[28,42047,31143],{"class":5478},[28,42049,54],{"class":34},[28,42051,61],{"class":60},[28,42053,81],{"class":38},[28,42055,42056,42058,42061,42063,42065,42067,42069,42071,42073,42075,42078,42080,42082,42084],{"class":30,"line":1955},[28,42057,31105],{"class":60},[28,42059,42060],{"class":38},".p4_2",[28,42062,54],{"class":34},[28,42064,31113],{"class":38},[28,42066,31116],{"class":5478},[28,42068,54],{"class":34},[28,42070,41816],{"class":38},[28,42072,31125],{"class":5478},[28,42074,54],{"class":34},[28,42076,42077],{"class":38},"c4,",[28,42079,31134],{"class":5478},[28,42081,54],{"class":34},[28,42083,61],{"class":60},[28,42085,81],{"class":38},[28,42087,42088],{"class":30,"line":1960},[28,42089,2662],{"emptyLinePlaceholder":336},[28,42091,42092,42094,42096],{"class":30,"line":1989},[28,42093,31061],{"class":34},[28,42095,31353],{"class":2225},[28,42097,31356],{"class":38},[28,42099,42100,42103,42105,42107,42109,42111],{"class":30,"line":1994},[28,42101,42102],{"class":38},"        p1",[28,42104,54],{"class":34},[28,42106,31083],{"class":60},[28,42108,35440],{"class":38},[28,42110,31083],{"class":60},[28,42112,42113],{"class":38},".p1_1(x))\n",[28,42115,42116,42118,42120,42122,42124,42126,42129,42131,42133,42135],{"class":30,"line":2011},[28,42117,7347],{"class":38},[28,42119,54],{"class":34},[28,42121,31083],{"class":60},[28,42123,35440],{"class":38},[28,42125,31083],{"class":60},[28,42127,42128],{"class":38},".p2_2(",[28,42130,31083],{"class":60},[28,42132,35440],{"class":38},[28,42134,31083],{"class":60},[28,42136,42137],{"class":38},".p2_1(x))))\n",[28,42139,42140,42143,42145,42147,42149,42151,42154,42156,42158,42160],{"class":30,"line":2016},[28,42141,42142],{"class":38},"        p3",[28,42144,54],{"class":34},[28,42146,31083],{"class":60},[28,42148,35440],{"class":38},[28,42150,31083],{"class":60},[28,42152,42153],{"class":38},".p3_2(",[28,42155,31083],{"class":60},[28,42157,35440],{"class":38},[28,42159,31083],{"class":60},[28,42161,42162],{"class":38},".p3_1(x))))\n",[28,42164,42165,42168,42170,42172,42174,42176,42179,42181],{"class":30,"line":2021},[28,42166,42167],{"class":38},"        p4",[28,42169,54],{"class":34},[28,42171,31083],{"class":60},[28,42173,35440],{"class":38},[28,42175,31083],{"class":60},[28,42177,42178],{"class":38},".p4_2(",[28,42180,31083],{"class":60},[28,42182,42183],{"class":38},".p4_1(x)))\n",[28,42185,42186],{"class":30,"line":2026},[28,42187,42188],{"class":87},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[28,42190,42191,42193,42196,42198,42200,42202],{"class":30,"line":2040},[28,42192,15014],{"class":34},[28,42194,42195],{"class":38}," torch.cat((p1,p2,p3,p4),",[28,42197,32941],{"class":5478},[28,42199,54],{"class":34},[28,42201,61],{"class":60},[28,42203,81],{"class":38},[28,42205,42206],{"class":30,"line":2045},[28,42207,2662],{"emptyLinePlaceholder":336},[28,42209,42210],{"class":30,"line":2839},[28,42211,2662],{"emptyLinePlaceholder":336},[28,42213,42214],{"class":30,"line":2853},[28,42215,42216],{"class":87},"# 搭建GoogLeNet网络\n",[28,42218,42219,42221,42224,42226,42228,42230,42232],{"class":30,"line":2861},[28,42220,14956],{"class":34},[28,42222,42223],{"class":2225}," GoogLeNet",[28,42225,413],{"class":38},[28,42227,31038],{"class":2225},[28,42229,956],{"class":38},[28,42231,31043],{"class":2225},[28,42233,31046],{"class":38},[28,42235,42236],{"class":30,"line":2866},[28,42237,42238],{"class":87},"    # 必须把Inception导入到里边\n",[28,42240,42241,42243,42245],{"class":30,"line":2872},[28,42242,31061],{"class":34},[28,42244,31064],{"class":60},[28,42246,42247],{"class":38},"(self,Inception):\n",[28,42249,42250,42252,42255,42257,42259,42261],{"class":30,"line":2878},[28,42251,31077],{"class":60},[28,42253,42254],{"class":38},"(GoogLeNet,",[28,42256,31083],{"class":60},[28,42258,31086],{"class":38},[28,42260,31089],{"class":60},[28,42262,2238],{"class":38},[28,42264,42265,42267,42270,42272],{"class":30,"line":2883},[28,42266,31105],{"class":60},[28,42268,42269],{"class":38},".b1",[28,42271,54],{"class":34},[28,42273,38265],{"class":38},[28,42275,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316],{"class":30,"line":8210},[28,42277,38270],{"class":38},[28,42279,31116],{"class":5478},[28,42281,54],{"class":34},[28,42283,61],{"class":60},[28,42285,64],{"class":38},[28,42287,31125],{"class":5478},[28,42289,54],{"class":34},[28,42291,608],{"class":60},[28,42293,64],{"class":38},[28,42295,31134],{"class":5478},[28,42297,54],{"class":34},[28,42299,769],{"class":60},[28,42301,64],{"class":38},[28,42303,31189],{"class":5478},[28,42305,54],{"class":34},[28,42307,211],{"class":60},[28,42309,64],{"class":38},[28,42311,31143],{"class":5478},[28,42313,54],{"class":34},[28,42315,78],{"class":60},[28,42317,38303],{"class":38},[28,42319,42320],{"class":30,"line":8234},[28,42321,38308],{"class":38},[28,42323,42324,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346,42348],{"class":30,"line":8239},[28,42325,38353],{"class":38},[28,42327,31134],{"class":5478},[28,42329,54],{"class":34},[28,42331,78],{"class":60},[28,42333,64],{"class":38},[28,42335,31189],{"class":5478},[28,42337,54],{"class":34},[28,42339,211],{"class":60},[28,42341,64],{"class":38},[28,42343,31143],{"class":5478},[28,42345,54],{"class":34},[28,42347,61],{"class":60},[28,42349,81],{"class":38},[28,42351,42352],{"class":30,"line":8245},[28,42353,38382],{"class":38},[28,42355,42356,42358,42361,42363],{"class":30,"line":8272},[28,42357,31105],{"class":60},[28,42359,42360],{"class":38},".b2",[28,42362,54],{"class":34},[28,42364,38265],{"class":38},[28,42366,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391],{"class":30,"line":8277},[28,42368,38270],{"class":38},[28,42370,31116],{"class":5478},[28,42372,54],{"class":34},[28,42374,608],{"class":60},[28,42376,64],{"class":38},[28,42378,31125],{"class":5478},[28,42380,54],{"class":34},[28,42382,608],{"class":60},[28,42384,64],{"class":38},[28,42386,31134],{"class":5478},[28,42388,54],{"class":34},[28,42390,61],{"class":60},[28,42392,38303],{"class":38},[28,42394,42395],{"class":30,"line":8283},[28,42396,38308],{"class":38},[28,42398,42399,42401,42403,42405,42407,42409,42411,42413,42416,42418,42420,42422,42424,42426,42428,42430,42432],{"class":30,"line":8295},[28,42400,38270],{"class":38},[28,42402,31116],{"class":5478},[28,42404,54],{"class":34},[28,42406,608],{"class":60},[28,42408,64],{"class":38},[28,42410,31125],{"class":5478},[28,42412,54],{"class":34},[28,42414,42415],{"class":60},"192",[28,42417,64],{"class":38},[28,42419,31134],{"class":5478},[28,42421,54],{"class":34},[28,42423,78],{"class":60},[28,42425,64],{"class":38},[28,42427,31143],{"class":5478},[28,42429,54],{"class":34},[28,42431,61],{"class":60},[28,42433,38303],{"class":38},[28,42435,42436],{"class":30,"line":8307},[28,42437,38308],{"class":38},[28,42439,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464],{"class":30,"line":8319},[28,42441,38353],{"class":38},[28,42443,31134],{"class":5478},[28,42445,54],{"class":34},[28,42447,78],{"class":60},[28,42449,64],{"class":38},[28,42451,31189],{"class":5478},[28,42453,54],{"class":34},[28,42455,211],{"class":60},[28,42457,64],{"class":38},[28,42459,31143],{"class":5478},[28,42461,54],{"class":34},[28,42463,61],{"class":60},[28,42465,81],{"class":38},[28,42467,42468],{"class":30,"line":9978},[28,42469,38382],{"class":38},[28,42471,42472,42474,42477,42479],{"class":30,"line":10003},[28,42473,31105],{"class":60},[28,42475,42476],{"class":38},".b3",[28,42478,54],{"class":34},[28,42480,38265],{"class":38},[28,42482,42483,42486,42488,42490,42492,42495,42497,42499,42501,42504,42506,42508,42510,42513,42515],{"class":30,"line":10026},[28,42484,42485],{"class":38},"            Inception(",[28,42487,42415],{"class":60},[28,42489,64],{"class":38},[28,42491,608],{"class":60},[28,42493,42494],{"class":38},",(",[28,42496,614],{"class":60},[28,42498,64],{"class":38},[28,42500,32326],{"class":60},[28,42502,42503],{"class":38},"),(",[28,42505,999],{"class":60},[28,42507,64],{"class":38},[28,42509,602],{"class":60},[28,42511,42512],{"class":38},"),",[28,42514,602],{"class":60},[28,42516,38303],{"class":38},[28,42518,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547],{"class":30,"line":10050},[28,42520,42485],{"class":38},[28,42522,35126],{"class":60},[28,42524,64],{"class":38},[28,42526,32326],{"class":60},[28,42528,42494],{"class":38},[28,42530,32326],{"class":60},[28,42532,64],{"class":38},[28,42534,42415],{"class":60},[28,42536,42503],{"class":38},[28,42538,602],{"class":60},[28,42540,64],{"class":38},[28,42542,614],{"class":60},[28,42544,42512],{"class":38},[28,42546,608],{"class":60},[28,42548,38303],{"class":38},[28,42550,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575],{"class":30,"line":10055},[28,42552,38353],{"class":38},[28,42554,31134],{"class":5478},[28,42556,54],{"class":34},[28,42558,78],{"class":60},[28,42560,64],{"class":38},[28,42562,31189],{"class":5478},[28,42564,54],{"class":34},[28,42566,211],{"class":60},[28,42568,64],{"class":38},[28,42570,31143],{"class":5478},[28,42572,54],{"class":34},[28,42574,61],{"class":60},[28,42576,81],{"class":38},[28,42578,42579],{"class":30,"line":10060},[28,42580,38382],{"class":38},[28,42582,42583,42585,42588,42590],{"class":30,"line":10065},[28,42584,31105],{"class":60},[28,42586,42587],{"class":38},".b4",[28,42589,54],{"class":34},[28,42591,38265],{"class":38},[28,42593,42594,42596,42599,42601,42603,42605,42607,42609,42612,42614,42616,42618,42620,42622,42624],{"class":30,"line":10074},[28,42595,42485],{"class":38},[28,42597,42598],{"class":60},"480",[28,42600,64],{"class":38},[28,42602,42415],{"class":60},[28,42604,42494],{"class":38},[28,42606,614],{"class":60},[28,42608,64],{"class":38},[28,42610,42611],{"class":60},"208",[28,42613,42503],{"class":38},[28,42615,999],{"class":60},[28,42617,64],{"class":38},[28,42619,1005],{"class":60},[28,42621,42512],{"class":38},[28,42623,608],{"class":60},[28,42625,38303],{"class":38},[28,42627,42628,42630,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":30,"line":10079},[28,42629,42485],{"class":38},[28,42631,38713],{"class":60},[28,42633,64],{"class":38},[28,42635,21310],{"class":60},[28,42637,42494],{"class":38},[28,42639,1016],{"class":60},[28,42641,64],{"class":38},[28,42643,31758],{"class":60},[28,42645,42503],{"class":38},[28,42647,1198],{"class":60},[28,42649,64],{"class":38},[28,42651,608],{"class":60},[28,42653,42512],{"class":38},[28,42655,608],{"class":60},[28,42657,38303],{"class":38},[28,42659,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688],{"class":30,"line":10085},[28,42661,42485],{"class":38},[28,42663,38713],{"class":60},[28,42665,64],{"class":38},[28,42667,32326],{"class":60},[28,42669,42494],{"class":38},[28,42671,32326],{"class":60},[28,42673,64],{"class":38},[28,42675,35126],{"class":60},[28,42677,42503],{"class":38},[28,42679,1198],{"class":60},[28,42681,64],{"class":38},[28,42683,608],{"class":60},[28,42685,42512],{"class":38},[28,42687,608],{"class":60},[28,42689,38303],{"class":38},[28,42691,42692,42694,42696,42698,42700,42702,42704,42706,42709,42711,42713,42715,42717,42719,42721],{"class":30,"line":10106},[28,42693,42485],{"class":38},[28,42695,38713],{"class":60},[28,42697,64],{"class":38},[28,42699,1016],{"class":60},[28,42701,42494],{"class":38},[28,42703,32326],{"class":60},[28,42705,64],{"class":38},[28,42707,42708],{"class":60},"288",[28,42710,42503],{"class":38},[28,42712,602],{"class":60},[28,42714,64],{"class":38},[28,42716,608],{"class":60},[28,42718,42512],{"class":38},[28,42720,608],{"class":60},[28,42722,38303],{"class":38},[28,42724,42725,42727,42730,42732,42734,42736,42738,42740,42743,42745,42747,42749,42751,42753,42755],{"class":30,"line":10112},[28,42726,42485],{"class":38},[28,42728,42729],{"class":60},"528",[28,42731,64],{"class":38},[28,42733,35126],{"class":60},[28,42735,42494],{"class":38},[28,42737,21310],{"class":60},[28,42739,64],{"class":38},[28,42741,42742],{"class":60},"320",[28,42744,42503],{"class":38},[28,42746,602],{"class":60},[28,42748,64],{"class":38},[28,42750,32326],{"class":60},[28,42752,42512],{"class":38},[28,42754,32326],{"class":60},[28,42756,38303],{"class":38},[28,42758,42759,42761,42763,42765,42767,42769,42771,42773,42775,42777,42779,42781,42783],{"class":30,"line":10126},[28,42760,38353],{"class":38},[28,42762,31134],{"class":5478},[28,42764,54],{"class":34},[28,42766,78],{"class":60},[28,42768,64],{"class":38},[28,42770,31189],{"class":5478},[28,42772,54],{"class":34},[28,42774,211],{"class":60},[28,42776,64],{"class":38},[28,42778,31143],{"class":5478},[28,42780,54],{"class":34},[28,42782,61],{"class":60},[28,42784,81],{"class":38},[28,42786,42787],{"class":30,"line":10132},[28,42788,38382],{"class":38},[28,42790,42791,42793,42796,42798],{"class":30,"line":10159},[28,42792,31105],{"class":60},[28,42794,42795],{"class":38},".b5",[28,42797,54],{"class":34},[28,42799,38265],{"class":38},[28,42801,42802,42804,42807,42809,42811,42813,42815,42817,42819,42821,42823,42825,42827,42829,42831],{"class":30,"line":10168},[28,42803,42485],{"class":38},[28,42805,42806],{"class":60},"832",[28,42808,64],{"class":38},[28,42810,35126],{"class":60},[28,42812,42494],{"class":38},[28,42814,21310],{"class":60},[28,42816,64],{"class":38},[28,42818,42742],{"class":60},[28,42820,42503],{"class":38},[28,42822,602],{"class":60},[28,42824,64],{"class":38},[28,42826,32326],{"class":60},[28,42828,42512],{"class":38},[28,42830,32326],{"class":60},[28,42832,38303],{"class":38},[28,42834,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861,42863],{"class":30,"line":10174},[28,42836,42485],{"class":38},[28,42838,42806],{"class":60},[28,42840,64],{"class":38},[28,42842,35196],{"class":60},[28,42844,42494],{"class":38},[28,42846,42415],{"class":60},[28,42848,64],{"class":38},[28,42850,35196],{"class":60},[28,42852,42503],{"class":38},[28,42854,1005],{"class":60},[28,42856,64],{"class":38},[28,42858,32326],{"class":60},[28,42860,42512],{"class":38},[28,42862,32326],{"class":60},[28,42864,38303],{"class":38},[28,42866,42867,42870,42872,42874,42876],{"class":30,"line":10182},[28,42868,42869],{"class":38},"            nn.AdaptiveAvgPool2d((",[28,42871,61],{"class":60},[28,42873,64],{"class":38},[28,42875,61],{"class":60},[28,42877,42878],{"class":38},")),\n",[28,42880,42881],{"class":30,"line":10187},[28,42882,39046],{"class":38},[28,42884,42885,42887,42890,42892,42894],{"class":30,"line":16866},[28,42886,39051],{"class":38},[28,42888,42889],{"class":60},"1024",[28,42891,64],{"class":38},[28,42893,845],{"class":60},[28,42895,81],{"class":38},[28,42897,42898],{"class":30,"line":16872},[28,42899,38382],{"class":38},[28,42901,42902],{"class":30,"line":16895},[28,42903,42904],{"class":87},"        # 对模型参数初始化\n",[28,42906,42907,42909,42911,42913,42915],{"class":30,"line":16901},[28,42908,3665],{"class":34},[28,42910,39124],{"class":38},[28,42912,26306],{"class":34},[28,42914,39129],{"class":60},[28,42916,39132],{"class":38},[28,42918,42919,42921,42923],{"class":30,"line":16924},[28,42920,4904],{"class":34},[28,42922,39144],{"class":60},[28,42924,39147],{"class":38},[28,42926,42927,42929,42932,42934,42937,42939,42941,42943,42945],{"class":30,"line":16938},[28,42928,39157],{"class":38},[28,42930,42931],{"class":5478},"mode",[28,42933,54],{"class":34},[28,42935,42936],{"class":127},"'fan_out'",[28,42938,64],{"class":38},[28,42940,39160],{"class":5478},[28,42942,54],{"class":34},[28,42944,39165],{"class":127},[28,42946,81],{"class":38},[28,42948,42949],{"class":30,"line":16958},[28,42950,42951],{"class":87},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[28,42953,42954],{"class":30,"line":16964},[28,42955,42956],{"class":87},"                # ② mode = 'fan_out'决定使用的fan值：\n",[28,42958,42959],{"class":30,"line":16975},[28,42960,42961],{"class":87},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[28,42963,42964],{"class":30,"line":16998},[28,42965,42966],{"class":87},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[28,42968,42969],{"class":30,"line":17020},[28,42970,42971],{"class":87},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[28,42973,42974],{"class":30,"line":17025},[28,42975,42976],{"class":87},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[28,42978,42979,42981,42983,42985,42987,42989],{"class":30,"line":17031},[28,42980,39177],{"class":34},[28,42982,39180],{"class":38},[28,42984,39183],{"class":34},[28,42986,39186],{"class":34},[28,42988,39189],{"class":60},[28,42990,4001],{"class":38},[28,42992,42993,42995,42997],{"class":30,"line":17045},[28,42994,39201],{"class":38},[28,42996,244],{"class":60},[28,42998,81],{"class":38},[28,43000,43001,43004,43006],{"class":30,"line":17058},[28,43002,43003],{"class":34},"                elif",[28,43005,39144],{"class":60},[28,43007,39220],{"class":38},[28,43009,43010,43013,43015,43017,43019],{"class":30,"line":17063},[28,43011,43012],{"class":38},"                    nn.init.normal_(m.weight,",[28,43014,244],{"class":60},[28,43016,64],{"class":38},[28,43018,39242],{"class":60},[28,43020,81],{"class":38},[28,43022,43023,43026,43028,43030,43032,43034],{"class":30,"line":17077},[28,43024,43025],{"class":34},"                    if",[28,43027,39180],{"class":38},[28,43029,39183],{"class":34},[28,43031,39186],{"class":34},[28,43033,39189],{"class":60},[28,43035,4001],{"class":38},[28,43037,43038,43041,43043],{"class":30,"line":17082},[28,43039,43040],{"class":38},"                        nn.init.constant_(m.bias,",[28,43042,244],{"class":60},[28,43044,81],{"class":38},[28,43046,43047],{"class":30,"line":17088},[28,43048,35421],{"class":87},[28,43050,43051,43053,43055],{"class":30,"line":17093},[28,43052,31061],{"class":34},[28,43054,31353],{"class":2225},[28,43056,31356],{"class":38},[28,43058,43059,43061,43063,43065],{"class":30,"line":17107},[28,43060,31361],{"class":38},[28,43062,54],{"class":34},[28,43064,31083],{"class":60},[28,43066,43067],{"class":38},".b1(x)\n",[28,43069,43070,43072,43074,43076],{"class":30,"line":17112},[28,43071,31361],{"class":38},[28,43073,54],{"class":34},[28,43075,31083],{"class":60},[28,43077,43078],{"class":38},".b2(x)\n",[28,43080,43081,43083,43085,43087],{"class":30,"line":17117},[28,43082,31361],{"class":38},[28,43084,54],{"class":34},[28,43086,31083],{"class":60},[28,43088,43089],{"class":38},".b3(x)\n",[28,43091,43092,43094,43096,43098],{"class":30,"line":17131},[28,43093,31361],{"class":38},[28,43095,54],{"class":34},[28,43097,31083],{"class":60},[28,43099,43100],{"class":38},".b4(x)\n",[28,43102,43103,43105,43107,43109],{"class":30,"line":17143},[28,43104,31361],{"class":38},[28,43106,54],{"class":34},[28,43108,31083],{"class":60},[28,43110,43111],{"class":38},".b5(x)\n",[28,43113,43114,43116],{"class":30,"line":17148},[28,43115,15014],{"class":34},[28,43117,31469],{"class":38},[28,43119,43120],{"class":30,"line":17161},[28,43121,2662],{"emptyLinePlaceholder":336},[28,43123,43124],{"class":30,"line":17166},[28,43125,43126],{"class":87},"# 模型展示\n",[28,43128,43129,43131,43133,43135,43137],{"class":30,"line":17171},[28,43130,1796],{"class":34},[28,43132,31480],{"class":60},[28,43134,3211],{"class":34},[28,43136,31485],{"class":127},[28,43138,4001],{"class":38},[28,43140,43141,43143,43145,43147,43149,43151,43153,43155,43157],{"class":30,"line":17176},[28,43142,31497],{"class":38},[28,43144,54],{"class":34},[28,43146,30711],{"class":38},[28,43148,31504],{"class":127},[28,43150,1966],{"class":34},[28,43152,31509],{"class":38},[28,43154,1963],{"class":34},[28,43156,30736],{"class":127},[28,43158,81],{"class":38},[28,43160,43161,43163,43165],{"class":30,"line":17189},[28,43162,31549],{"class":38},[28,43164,54],{"class":34},[28,43166,43167],{"class":38},"GoogLeNet(Inception).to(device)\n",[28,43169,43170,43172,43174,43176,43178,43180,43182,43184],{"class":30,"line":17194},[28,43171,31559],{"class":60},[28,43173,31562],{"class":38},[28,43175,61],{"class":60},[28,43177,64],{"class":38},[28,43179,31758],{"class":60},[28,43181,64],{"class":38},[28,43183,31758],{"class":60},[28,43185,31575],{"class":38},[363,43187,43188],{"start":48},[366,43189,39439],{},[18,43191,43193],{"className":20,"code":43192,"language":22,"meta":23,"style":23},"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",[25,43194,43195,43201,43207,43217,43223,43233,43243,43253,43263,43273,43277,43288,43298,43302,43306,43310,43318,43330,43340,43356,43366,43398,43412,43422,43432,43436,43446,43460,43470,43480,43490,43496,43500,43504,43508,43512,43516,43524,43544,43548,43552,43556,43560,43564,43580,43584,43588,43596,43600,43604,43612,43616,43620,43624,43632,43636,43640,43644,43648,43656,43660,43668,43672,43680,43684,43692,43696,43704,43708,43712,43720,43724,43728,43732,43744,43768,43782,43786,43790,43794,43802,43806,43814,43818,43826,43830,43838,43842,43850,43854,43862,43866,43878,43882,43890,43894,43902,43906,43910,43914,43918,43926,43930,43946,43950,43958,43962,43966,43970,43974,43978,43982,43986,44002,44006,44018,44022,44034,44038,44050,44054,44062,44066,44074,44078,44082,44086,44092,44096,44104,44108,44124,44128,44136,44140,44156,44168,44172,44184,44188,44192,44200,44204,44208,44216,44220,44228,44232,44240,44244,44248,44290,44332,44336,44340,44356,44360,44376,44380,44384,44392,44396,44400,44412,44450,44454,44458,44466,44470,44484,44494,44500,44506,44512,44518,44522,44526,44532,44536,44540,44548,44552,44570,44574,44578,44582,44598,44602,44606,44610,44614,44618,44638,44658,44662,44666,44670,44678,44686,44690,44706,44726,44746,44750,44754,44762,44770,44774,44778,44782,44794,44798,44808,44816,44833],{"__ignoreMap":23},[28,43196,43197,43199],{"class":30,"line":31},[28,43198,35],{"class":34},[28,43200,32078],{"class":38},[28,43202,43203,43205],{"class":30,"line":48},[28,43204,35],{"class":34},[28,43206,32085],{"class":38},[28,43208,43209,43211,43213,43215],{"class":30,"line":84},[28,43210,35],{"class":34},[28,43212,32096],{"class":38},[28,43214,42],{"class":34},[28,43216,32101],{"class":38},[28,43218,43219,43221],{"class":30,"line":91},[28,43220,35],{"class":34},[28,43222,30655],{"class":38},[28,43224,43225,43227,43229,43231],{"class":30,"line":97},[28,43226,30997],{"class":34},[28,43228,31672],{"class":38},[28,43230,35],{"class":34},[28,43232,32118],{"class":38},[28,43234,43235,43237,43239,43241],{"class":30,"line":103},[28,43236,30997],{"class":34},[28,43238,31628],{"class":38},[28,43240,35],{"class":34},[28,43242,31633],{"class":38},[28,43244,43245,43247,43249,43251],{"class":30,"line":109},[28,43246,30997],{"class":34},[28,43248,31655],{"class":38},[28,43250,35],{"class":34},[28,43252,31660],{"class":38},[28,43254,43255,43257,43259,43261],{"class":30,"line":118},[28,43256,35],{"class":34},[28,43258,31672],{"class":38},[28,43260,42],{"class":34},[28,43262,31677],{"class":38},[28,43264,43265,43267,43269,43271],{"class":30,"line":124},[28,43266,35],{"class":34},[28,43268,31689],{"class":38},[28,43270,42],{"class":34},[28,43272,31694],{"class":38},[28,43274,43275],{"class":30,"line":131},[28,43276,32163],{"class":87},[28,43278,43279,43281,43283,43285],{"class":30,"line":137},[28,43280,30997],{"class":34},[28,43282,32170],{"class":38},[28,43284,35],{"class":34},[28,43286,43287],{"class":38}," GoogLeNet, Inception\n",[28,43289,43290,43292,43294,43296],{"class":30,"line":143},[28,43291,30997],{"class":34},[28,43293,31000],{"class":38},[28,43295,35],{"class":34},[28,43297,31005],{"class":38},[28,43299,43300],{"class":30,"line":149},[28,43301,2662],{"emptyLinePlaceholder":336},[28,43303,43304],{"class":30,"line":1890},[28,43305,2662],{"emptyLinePlaceholder":336},[28,43307,43308],{"class":30,"line":1904},[28,43309,32198],{"class":87},[28,43311,43312,43314,43316],{"class":30,"line":1909},[28,43313,32203],{"class":34},[28,43315,32206],{"class":2225},[28,43317,32209],{"class":38},[28,43319,43320,43322,43324,43326,43328],{"class":30,"line":1915},[28,43321,32214],{"class":38},[28,43323,54],{"class":34},[28,43325,31712],{"class":38},[28,43327,31720],{"class":127},[28,43329,31723],{"class":38},[28,43331,43332,43334,43336,43338],{"class":30,"line":1936},[28,43333,32227],{"class":5478},[28,43335,54],{"class":34},[28,43337,31733],{"class":60},[28,43339,31723],{"class":38},[28,43341,43342,43344,43346,43348,43350,43352,43354],{"class":30,"line":1941},[28,43343,32238],{"class":5478},[28,43345,54],{"class":34},[28,43347,31750],{"class":38},[28,43349,31753],{"class":5478},[28,43351,54],{"class":34},[28,43353,35705],{"class":60},[28,43355,31761],{"class":38},[28,43357,43358,43360,43362,43364],{"class":30,"line":1955},[28,43359,32255],{"class":5478},[28,43361,54],{"class":34},[28,43363,31733],{"class":60},[28,43365,81],{"class":38},[28,43367,43368,43370,43372,43374,43376,43378,43380,43382,43384,43386,43388,43390,43392,43394,43396],{"class":30,"line":1960},[28,43369,32266],{"class":38},[28,43371,54],{"class":34},[28,43373,32271],{"class":38},[28,43375,32274],{"class":60},[28,43377,413],{"class":38},[28,43379,32279],{"class":60},[28,43381,854],{"class":34},[28,43383,7620],{"class":60},[28,43385,32286],{"class":38},[28,43387,32274],{"class":60},[28,43389,413],{"class":38},[28,43391,32293],{"class":60},[28,43393,854],{"class":34},[28,43395,7620],{"class":60},[28,43397,32300],{"class":38},[28,43399,43400,43402,43404,43406,43408,43410],{"class":30,"line":1989},[28,43401,32305],{"class":38},[28,43403,54],{"class":34},[28,43405,32310],{"class":38},[28,43407,31794],{"class":5478},[28,43409,54],{"class":34},[28,43411,31799],{"class":38},[28,43413,43414,43416,43418,43420],{"class":30,"line":1994},[28,43415,32321],{"class":5478},[28,43417,54],{"class":34},[28,43419,602],{"class":60},[28,43421,31723],{"class":38},[28,43423,43424,43426,43428,43430],{"class":30,"line":2011},[28,43425,32333],{"class":5478},[28,43427,54],{"class":34},[28,43429,31733],{"class":60},[28,43431,31723],{"class":38},[28,43433,43434],{"class":30,"line":2016},[28,43435,32344],{"class":87},[28,43437,43438,43440,43442,43444],{"class":30,"line":2021},[28,43439,32349],{"class":5478},[28,43441,54],{"class":34},[28,43443,794],{"class":60},[28,43445,81],{"class":38},[28,43447,43448,43450,43452,43454,43456,43458],{"class":30,"line":2026},[28,43449,32360],{"class":38},[28,43451,54],{"class":34},[28,43453,31791],{"class":38},[28,43455,31794],{"class":5478},[28,43457,54],{"class":34},[28,43459,32371],{"class":38},[28,43461,43462,43464,43466,43468],{"class":30,"line":2040},[28,43463,32376],{"class":5478},[28,43465,54],{"class":34},[28,43467,602],{"class":60},[28,43469,31723],{"class":38},[28,43471,43472,43474,43476,43478],{"class":30,"line":2045},[28,43473,32387],{"class":5478},[28,43475,54],{"class":34},[28,43477,31733],{"class":60},[28,43479,31723],{"class":38},[28,43481,43482,43484,43486,43488],{"class":30,"line":2839},[28,43483,32398],{"class":5478},[28,43485,54],{"class":34},[28,43487,794],{"class":60},[28,43489,81],{"class":38},[28,43491,43492,43494],{"class":30,"line":2853},[28,43493,4352],{"class":34},[28,43495,32411],{"class":38},[28,43497,43498],{"class":30,"line":2861},[28,43499,2662],{"emptyLinePlaceholder":336},[28,43501,43502],{"class":30,"line":2866},[28,43503,32420],{"class":87},[28,43505,43506],{"class":30,"line":2872},[28,43507,32425],{"class":87},[28,43509,43510],{"class":30,"line":2878},[28,43511,2662],{"emptyLinePlaceholder":336},[28,43513,43514],{"class":30,"line":2883},[28,43515,32434],{"class":87},[28,43517,43518,43520,43522],{"class":30,"line":8210},[28,43519,32203],{"class":34},[28,43521,32441],{"class":2225},[28,43523,32444],{"class":38},[28,43525,43526,43528,43530,43532,43534,43536,43538,43540,43542],{"class":30,"line":8234},[28,43527,31497],{"class":38},[28,43529,54],{"class":34},[28,43531,30711],{"class":38},[28,43533,31504],{"class":127},[28,43535,1966],{"class":34},[28,43537,31509],{"class":38},[28,43539,1963],{"class":34},[28,43541,32463],{"class":127},[28,43543,81],{"class":38},[28,43545,43546],{"class":30,"line":8239},[28,43547,2662],{"emptyLinePlaceholder":336},[28,43549,43550],{"class":30,"line":8245},[28,43551,2662],{"emptyLinePlaceholder":336},[28,43553,43554],{"class":30,"line":8272},[28,43555,32478],{"class":87},[28,43557,43558],{"class":30,"line":8277},[28,43559,32483],{"class":87},[28,43561,43562],{"class":30,"line":8283},[28,43563,32488],{"class":87},[28,43565,43566,43568,43570,43572,43574,43576,43578],{"class":30,"line":8295},[28,43567,32493],{"class":38},[28,43569,54],{"class":34},[28,43571,32498],{"class":38},[28,43573,32501],{"class":5478},[28,43575,54],{"class":34},[28,43577,32506],{"class":60},[28,43579,81],{"class":38},[28,43581,43582],{"class":30,"line":8307},[28,43583,2662],{"emptyLinePlaceholder":336},[28,43585,43586],{"class":30,"line":8319},[28,43587,32517],{"class":87},[28,43589,43590,43592,43594],{"class":30,"line":9978},[28,43591,32522],{"class":38},[28,43593,54],{"class":34},[28,43595,32527],{"class":38},[28,43597,43598],{"class":30,"line":10003},[28,43599,2662],{"emptyLinePlaceholder":336},[28,43601,43602],{"class":30,"line":10026},[28,43603,32536],{"class":87},[28,43605,43606,43608,43610],{"class":30,"line":10050},[28,43607,31549],{"class":38},[28,43609,54],{"class":34},[28,43611,32545],{"class":38},[28,43613,43614],{"class":30,"line":10055},[28,43615,32550],{"class":87},[28,43617,43618],{"class":30,"line":10060},[28,43619,32555],{"class":87},[28,43621,43622],{"class":30,"line":10065},[28,43623,32560],{"class":87},[28,43625,43626,43628,43630],{"class":30,"line":10074},[28,43627,32565],{"class":38},[28,43629,54],{"class":34},[28,43631,32570],{"class":38},[28,43633,43634],{"class":30,"line":10079},[28,43635,2662],{"emptyLinePlaceholder":336},[28,43637,43638],{"class":30,"line":10085},[28,43639,2662],{"emptyLinePlaceholder":336},[28,43641,43642],{"class":30,"line":10106},[28,43643,32583],{"class":87},[28,43645,43646],{"class":30,"line":10112},[28,43647,32588],{"class":87},[28,43649,43650,43652,43654],{"class":30,"line":10126},[28,43651,32593],{"class":38},[28,43653,54],{"class":34},[28,43655,32598],{"class":60},[28,43657,43658],{"class":30,"line":10132},[28,43659,32603],{"class":87},[28,43661,43662,43664,43666],{"class":30,"line":10159},[28,43663,32608],{"class":38},[28,43665,54],{"class":34},[28,43667,32613],{"class":38},[28,43669,43670],{"class":30,"line":10168},[28,43671,32618],{"class":87},[28,43673,43674,43676,43678],{"class":30,"line":10174},[28,43675,32623],{"class":38},[28,43677,54],{"class":34},[28,43679,32613],{"class":38},[28,43681,43682],{"class":30,"line":10182},[28,43683,32632],{"class":87},[28,43685,43686,43688,43690],{"class":30,"line":10187},[28,43687,32637],{"class":38},[28,43689,54],{"class":34},[28,43691,32613],{"class":38},[28,43693,43694],{"class":30,"line":16866},[28,43695,32646],{"class":87},[28,43697,43698,43700,43702],{"class":30,"line":16872},[28,43699,32651],{"class":38},[28,43701,54],{"class":34},[28,43703,32613],{"class":38},[28,43705,43706],{"class":30,"line":16895},[28,43707,2662],{"emptyLinePlaceholder":336},[28,43709,43710],{"class":30,"line":16901},[28,43711,32664],{"class":87},[28,43713,43714,43716,43718],{"class":30,"line":16924},[28,43715,32669],{"class":38},[28,43717,54],{"class":34},[28,43719,32674],{"class":38},[28,43721,43722],{"class":30,"line":16938},[28,43723,2662],{"emptyLinePlaceholder":336},[28,43725,43726],{"class":30,"line":16958},[28,43727,2662],{"emptyLinePlaceholder":336},[28,43729,43730],{"class":30,"line":16964},[28,43731,32687],{"class":87},[28,43733,43734,43736,43738,43740,43742],{"class":30,"line":16975},[28,43735,3463],{"class":34},[28,43737,32694],{"class":38},[28,43739,26306],{"class":34},[28,43741,32699],{"class":60},[28,43743,32702],{"class":38},[28,43745,43746,43748,43750,43752,43754,43756,43758,43760,43762,43764,43766],{"class":30,"line":16998},[28,43747,32707],{"class":60},[28,43749,413],{"class":38},[28,43751,32712],{"class":127},[28,43753,32715],{"class":60},[28,43755,982],{"class":127},[28,43757,32715],{"class":60},[28,43759,654],{"class":127},[28,43761,32724],{"class":38},[28,43763,930],{"class":34},[28,43765,61],{"class":60},[28,43767,30757],{"class":38},[28,43769,43770,43772,43774,43776,43778,43780],{"class":30,"line":17020},[28,43771,32707],{"class":60},[28,43773,413],{"class":38},[28,43775,32739],{"class":127},[28,43777,854],{"class":34},[28,43779,845],{"class":60},[28,43781,81],{"class":38},[28,43783,43784],{"class":30,"line":17025},[28,43785,2662],{"emptyLinePlaceholder":336},[28,43787,43788],{"class":30,"line":17031},[28,43789,32754],{"class":87},[28,43791,43792],{"class":30,"line":17045},[28,43793,32759],{"class":87},[28,43795,43796,43798,43800],{"class":30,"line":17058},[28,43797,32764],{"class":38},[28,43799,54],{"class":34},[28,43801,32598],{"class":60},[28,43803,43804],{"class":30,"line":17063},[28,43805,32773],{"class":87},[28,43807,43808,43810,43812],{"class":30,"line":17077},[28,43809,32778],{"class":38},[28,43811,54],{"class":34},[28,43813,3347],{"class":60},[28,43815,43816],{"class":30,"line":17082},[28,43817,32787],{"class":87},[28,43819,43820,43822,43824],{"class":30,"line":17088},[28,43821,32792],{"class":38},[28,43823,54],{"class":34},[28,43825,32598],{"class":60},[28,43827,43828],{"class":30,"line":17093},[28,43829,32801],{"class":87},[28,43831,43832,43834,43836],{"class":30,"line":17107},[28,43833,32806],{"class":38},[28,43835,54],{"class":34},[28,43837,3347],{"class":60},[28,43839,43840],{"class":30,"line":17112},[28,43841,32815],{"class":87},[28,43843,43844,43846,43848],{"class":30,"line":17117},[28,43845,32820],{"class":38},[28,43847,54],{"class":34},[28,43849,3347],{"class":60},[28,43851,43852],{"class":30,"line":17131},[28,43853,32829],{"class":87},[28,43855,43856,43858,43860],{"class":30,"line":17143},[28,43857,32834],{"class":38},[28,43859,54],{"class":34},[28,43861,3347],{"class":60},[28,43863,43864],{"class":30,"line":17148},[28,43865,32843],{"class":87},[28,43867,43868,43870,43872,43874,43876],{"class":30,"line":17161},[28,43869,3665],{"class":34},[28,43871,31858],{"class":38},[28,43873,26306],{"class":34},[28,43875,31863],{"class":60},[28,43877,32856],{"class":38},[28,43879,43880],{"class":30,"line":17166},[28,43881,32861],{"class":87},[28,43883,43884,43886,43888],{"class":30,"line":17171},[28,43885,32866],{"class":38},[28,43887,54],{"class":34},[28,43889,32871],{"class":38},[28,43891,43892],{"class":30,"line":17176},[28,43893,32876],{"class":87},[28,43895,43896,43898,43900],{"class":30,"line":17189},[28,43897,32881],{"class":38},[28,43899,54],{"class":34},[28,43901,32886],{"class":38},[28,43903,43904],{"class":30,"line":17194},[28,43905,32892],{"class":87},[28,43907,43908],{"class":30,"line":32889},[28,43909,32898],{"class":38},[28,43911,43912],{"class":30,"line":32895},[28,43913,32904],{"class":87},[28,43915,43916],{"class":30,"line":32901},[28,43917,32910],{"class":87},[28,43919,43920,43922,43924],{"class":30,"line":32907},[28,43921,32916],{"class":38},[28,43923,54],{"class":34},[28,43925,32921],{"class":38},[28,43927,43928],{"class":30,"line":32913},[28,43929,32927],{"class":87},[28,43931,43932,43934,43936,43938,43940,43942,43944],{"class":30,"line":32924},[28,43933,32933],{"class":38},[28,43935,54],{"class":34},[28,43937,32938],{"class":38},[28,43939,32941],{"class":5478},[28,43941,54],{"class":34},[28,43943,61],{"class":60},[28,43945,81],{"class":38},[28,43947,43948],{"class":30,"line":32930},[28,43949,32953],{"class":87},[28,43951,43952,43954,43956],{"class":30,"line":32950},[28,43953,32959],{"class":38},[28,43955,54],{"class":34},[28,43957,32964],{"class":38},[28,43959,43960],{"class":30,"line":32956},[28,43961,32970],{"class":87},[28,43963,43964],{"class":30,"line":32967},[28,43965,32976],{"class":38},[28,43967,43968],{"class":30,"line":32973},[28,43969,32982],{"class":87},[28,43971,43972],{"class":30,"line":32979},[28,43973,32988],{"class":38},[28,43975,43976],{"class":30,"line":32985},[28,43977,32994],{"class":87},[28,43979,43980],{"class":30,"line":32991},[28,43981,33000],{"class":38},[28,43983,43984],{"class":30,"line":32997},[28,43985,33006],{"class":87},[28,43987,43988,43990,43992,43994,43996,43998,44000],{"class":30,"line":33003},[28,43989,33012],{"class":38},[28,43991,9739],{"class":34},[28,43993,33017],{"class":38},[28,43995,854],{"class":34},[28,43997,33022],{"class":38},[28,43999,244],{"class":60},[28,44001,81],{"class":38},[28,44003,44004],{"class":30,"line":33009},[28,44005,33032],{"class":87},[28,44007,44008,44010,44012,44014,44016],{"class":30,"line":33029},[28,44009,33038],{"class":38},[28,44011,9739],{"class":34},[28,44013,33043],{"class":38},[28,44015,3211],{"class":34},[28,44017,33048],{"class":38},[28,44019,44020],{"class":30,"line":33035},[28,44021,33054],{"class":87},[28,44023,44024,44026,44028,44030,44032],{"class":30,"line":33051},[28,44025,33060],{"class":38},[28,44027,9739],{"class":34},[28,44029,33022],{"class":38},[28,44031,244],{"class":60},[28,44033,81],{"class":38},[28,44035,44036],{"class":30,"line":33057},[28,44037,33074],{"class":87},[28,44039,44040,44042,44044,44046,44048],{"class":30,"line":33071},[28,44041,3665],{"class":34},[28,44043,33082],{"class":38},[28,44045,26306],{"class":34},[28,44047,31863],{"class":60},[28,44049,33089],{"class":38},[28,44051,44052],{"class":30,"line":33077},[28,44053,33095],{"class":87},[28,44055,44056,44058,44060],{"class":30,"line":33092},[28,44057,32866],{"class":38},[28,44059,54],{"class":34},[28,44061,32871],{"class":38},[28,44063,44064],{"class":30,"line":33098},[28,44065,33110],{"class":87},[28,44067,44068,44070,44072],{"class":30,"line":33107},[28,44069,32881],{"class":38},[28,44071,54],{"class":34},[28,44073,32886],{"class":38},[28,44075,44076],{"class":30,"line":33113},[28,44077,33125],{"class":87},[28,44079,44080],{"class":30,"line":33122},[28,44081,33131],{"class":38},[28,44083,44084],{"class":30,"line":33128},[28,44085,36612],{"class":87},[28,44087,44088,44090],{"class":30,"line":33134},[28,44089,33137],{"class":34},[28,44091,33140],{"class":38},[28,44093,44094],{"class":30,"line":33143},[28,44095,33146],{"class":87},[28,44097,44098,44100,44102],{"class":30,"line":33149},[28,44099,36627],{"class":38},[28,44101,54],{"class":34},[28,44103,32921],{"class":38},[28,44105,44106],{"class":30,"line":33160},[28,44107,33163],{"class":87},[28,44109,44110,44112,44114,44116,44118,44120,44122],{"class":30,"line":33166},[28,44111,36640],{"class":38},[28,44113,54],{"class":34},[28,44115,32938],{"class":38},[28,44117,32941],{"class":5478},[28,44119,54],{"class":34},[28,44121,61],{"class":60},[28,44123,81],{"class":38},[28,44125,44126],{"class":30,"line":33185},[28,44127,33188],{"class":87},[28,44129,44130,44132,44134],{"class":30,"line":33191},[28,44131,36661],{"class":38},[28,44133,54],{"class":34},[28,44135,32964],{"class":38},[28,44137,44138],{"class":30,"line":33202},[28,44139,33205],{"class":87},[28,44141,44142,44144,44146,44148,44150,44152,44154],{"class":30,"line":33208},[28,44143,36674],{"class":38},[28,44145,9739],{"class":34},[28,44147,36679],{"class":38},[28,44149,854],{"class":34},[28,44151,33022],{"class":38},[28,44153,244],{"class":60},[28,44155,81],{"class":38},[28,44157,44158,44160,44162,44164,44166],{"class":30,"line":33228},[28,44159,36692],{"class":38},[28,44161,9739],{"class":34},[28,44163,33043],{"class":38},[28,44165,3211],{"class":34},[28,44167,33048],{"class":38},[28,44169,44170],{"class":30,"line":33244},[28,44171,36705],{"class":87},[28,44173,44174,44176,44178,44180,44182],{"class":30,"line":33250},[28,44175,36710],{"class":38},[28,44177,9739],{"class":34},[28,44179,33022],{"class":38},[28,44181,244],{"class":60},[28,44183,81],{"class":38},[28,44185,44186],{"class":30,"line":33264},[28,44187,33267],{"class":87},[28,44189,44190],{"class":30,"line":33270},[28,44191,33273],{"class":87},[28,44193,44194,44196,44198],{"class":30,"line":33276},[28,44195,33279],{"class":38},[28,44197,982],{"class":34},[28,44199,33284],{"class":38},[28,44201,44202],{"class":30,"line":33287},[28,44203,33290],{"class":87},[28,44205,44206],{"class":30,"line":33293},[28,44207,33296],{"class":87},[28,44209,44210,44212,44214],{"class":30,"line":33299},[28,44211,33302],{"class":38},[28,44213,982],{"class":34},[28,44215,33284],{"class":38},[28,44217,44218],{"class":30,"line":33309},[28,44219,33312],{"class":87},[28,44221,44222,44224,44226],{"class":30,"line":33315},[28,44223,33318],{"class":38},[28,44225,982],{"class":34},[28,44227,33323],{"class":38},[28,44229,44230],{"class":30,"line":33326},[28,44231,33329],{"class":87},[28,44233,44234,44236,44238],{"class":30,"line":33332},[28,44235,33335],{"class":38},[28,44237,982],{"class":34},[28,44239,33323],{"class":38},[28,44241,44242],{"class":30,"line":33342},[28,44243,2662],{"emptyLinePlaceholder":336},[28,44245,44246],{"class":30,"line":33347},[28,44247,33350],{"class":87},[28,44249,44250,44252,44254,44256,44258,44260,44262,44264,44266,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288],{"class":30,"line":33353},[28,44251,32707],{"class":60},[28,44253,413],{"class":38},[28,44255,3854],{"class":127},[28,44257,32715],{"class":60},[28,44259,33364],{"class":127},[28,44261,1293],{"class":60},[28,44263,33369],{"class":34},[28,44265,1343],{"class":60},[28,44267,33374],{"class":127},[28,44269,1293],{"class":60},[28,44271,33369],{"class":34},[28,44273,1343],{"class":60},[28,44275,3854],{"class":127},[28,44277,33385],{"class":38},[28,44279,930],{"class":34},[28,44281,61],{"class":60},[28,44283,33392],{"class":38},[28,44285,930],{"class":34},[28,44287,61],{"class":60},[28,44289,33399],{"class":38},[28,44291,44292,44294,44296,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322,44324,44326,44328,44330],{"class":30,"line":33402},[28,44293,32707],{"class":60},[28,44295,413],{"class":38},[28,44297,3854],{"class":127},[28,44299,32715],{"class":60},[28,44301,33413],{"class":127},[28,44303,1293],{"class":60},[28,44305,33369],{"class":34},[28,44307,1343],{"class":60},[28,44309,33422],{"class":127},[28,44311,1293],{"class":60},[28,44313,33369],{"class":34},[28,44315,1343],{"class":60},[28,44317,3854],{"class":127},[28,44319,33433],{"class":38},[28,44321,930],{"class":34},[28,44323,61],{"class":60},[28,44325,33440],{"class":38},[28,44327,930],{"class":34},[28,44329,61],{"class":60},[28,44331,33399],{"class":38},[28,44333,44334],{"class":30,"line":33449},[28,44335,2662],{"emptyLinePlaceholder":336},[28,44337,44338],{"class":30,"line":33454},[28,44339,33457],{"class":87},[28,44341,44342,44344,44346,44348,44350,44352,44354],{"class":30,"line":33460},[28,44343,2759],{"class":34},[28,44345,33465],{"class":38},[28,44347,930],{"class":34},[28,44349,61],{"class":60},[28,44351,1337],{"class":38},[28,44353,1357],{"class":34},[28,44355,33476],{"class":38},[28,44357,44358],{"class":30,"line":33479},[28,44359,33482],{"class":87},[28,44361,44362,44364,44366,44368,44370,44372,44374],{"class":30,"line":33485},[28,44363,33488],{"class":38},[28,44365,451],{"class":60},[28,44367,54],{"class":34},[28,44369,33495],{"class":38},[28,44371,930],{"class":34},[28,44373,61],{"class":60},[28,44375,33502],{"class":38},[28,44377,44378],{"class":30,"line":33505},[28,44379,33508],{"class":87},[28,44381,44382],{"class":30,"line":33511},[28,44383,33514],{"class":87},[28,44385,44386,44388,44390],{"class":30,"line":33517},[28,44387,33520],{"class":38},[28,44389,54],{"class":34},[28,44391,32570],{"class":38},[28,44393,44394],{"class":30,"line":33527},[28,44395,2662],{"emptyLinePlaceholder":336},[28,44397,44398],{"class":30,"line":33532},[28,44399,33535],{"class":87},[28,44401,44402,44404,44406,44408,44410],{"class":30,"line":33538},[28,44403,33541],{"class":38},[28,44405,54],{"class":34},[28,44407,33546],{"class":38},[28,44409,930],{"class":34},[28,44411,33551],{"class":38},[28,44413,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448],{"class":30,"line":33554},[28,44415,32707],{"class":60},[28,44417,413],{"class":38},[28,44419,33561],{"class":127},[28,44421,1293],{"class":60},[28,44423,33566],{"class":34},[28,44425,1343],{"class":60},[28,44427,942],{"class":127},[28,44429,1293],{"class":60},[28,44431,33566],{"class":34},[28,44433,1343],{"class":60},[28,44435,33579],{"class":127},[28,44437,33582],{"class":38},[28,44439,33585],{"class":34},[28,44441,1304],{"class":60},[28,44443,33590],{"class":38},[28,44445,729],{"class":34},[28,44447,1304],{"class":60},[28,44449,30757],{"class":38},[28,44451,44452],{"class":30,"line":33599},[28,44453,36989],{"class":87},[28,44455,44456],{"class":30,"line":33605},[28,44457,36994],{"class":87},[28,44459,44460,44462,44464],{"class":30,"line":33611},[28,44461,36999],{"class":38},[28,44463,33623],{"class":127},[28,44465,81],{"class":38},[28,44467,44468],{"class":30,"line":33617},[28,44469,33643],{"class":87},[28,44471,44472,44474,44476,44478,44480,44482],{"class":30,"line":33628},[28,44473,33649],{"class":38},[28,44475,54],{"class":34},[28,44477,33654],{"class":38},[28,44479,33657],{"class":5478},[28,44481,54],{"class":34},[28,44483,1811],{"class":38},[28,44485,44486,44488,44490,44492],{"class":30,"line":33634},[28,44487,33667],{"class":127},[28,44489,1256],{"class":38},[28,44491,33672],{"class":60},[28,44493,33675],{"class":38},[28,44495,44496,44498],{"class":30,"line":33640},[28,44497,33681],{"class":127},[28,44499,33684],{"class":38},[28,44501,44502,44504],{"class":30,"line":33646},[28,44503,33690],{"class":127},[28,44505,33693],{"class":38},[28,44507,44508,44510],{"class":30,"line":33664},[28,44509,33699],{"class":127},[28,44511,33702],{"class":38},[28,44513,44514,44516],{"class":30,"line":33678},[28,44515,33708],{"class":127},[28,44517,33711],{"class":38},[28,44519,44520],{"class":30,"line":33687},[28,44521,33717],{"class":38},[28,44523,44524],{"class":30,"line":33696},[28,44525,33723],{"class":87},[28,44527,44528,44530],{"class":30,"line":33705},[28,44529,4352],{"class":34},[28,44531,33731],{"class":38},[28,44533,44534],{"class":30,"line":33714},[28,44535,2662],{"emptyLinePlaceholder":336},[28,44537,44538],{"class":30,"line":33720},[28,44539,33742],{"class":87},[28,44541,44542,44544,44546],{"class":30,"line":33726},[28,44543,32203],{"class":34},[28,44545,33750],{"class":2225},[28,44547,33753],{"class":38},[28,44549,44550],{"class":30,"line":33734},[28,44551,33759],{"class":87},[28,44553,44554,44556,44558,44560,44562,44564,44566,44568],{"class":30,"line":33739},[28,44555,33765],{"class":38},[28,44557,31950],{"class":5478},[28,44559,54],{"class":34},[28,44561,413],{"class":38},[28,44563,897],{"class":60},[28,44565,64],{"class":38},[28,44567,73],{"class":60},[28,44569,30757],{"class":38},[28,44571,44572],{"class":30,"line":33745},[28,44573,33785],{"class":87},[28,44575,44576],{"class":30,"line":33756},[28,44577,33791],{"class":87},[28,44579,44580],{"class":30,"line":33762},[28,44581,33797],{"class":87},[28,44583,44584,44586,44588,44590,44592,44594,44596],{"class":30,"line":33782},[28,44585,31983],{"class":38},[28,44587,61],{"class":60},[28,44589,64],{"class":38},[28,44591,211],{"class":60},[28,44593,64],{"class":38},[28,44595,61],{"class":60},[28,44597,81],{"class":38},[28,44599,44600],{"class":30,"line":33788},[28,44601,33820],{"class":87},[28,44603,44604],{"class":30,"line":33794},[28,44605,33826],{"class":87},[28,44607,44608],{"class":30,"line":33800},[28,44609,33832],{"class":87},[28,44611,44612],{"class":30,"line":33817},[28,44613,33838],{"class":87},[28,44615,44616],{"class":30,"line":33823},[28,44617,33844],{"class":87},[28,44619,44620,44622,44624,44626,44628,44630,44632,44634,44636],{"class":30,"line":33829},[28,44621,33850],{"class":38},[28,44623,33853],{"class":127},[28,44625,33856],{"class":38},[28,44627,33859],{"class":127},[28,44629,64],{"class":38},[28,44631,33864],{"class":5478},[28,44633,54],{"class":34},[28,44635,33869],{"class":127},[28,44637,81],{"class":38},[28,44639,44640,44642,44644,44646,44648,44650,44652,44654,44656],{"class":30,"line":33835},[28,44641,33850],{"class":38},[28,44643,33853],{"class":127},[28,44645,33881],{"class":38},[28,44647,33884],{"class":127},[28,44649,64],{"class":38},[28,44651,33864],{"class":5478},[28,44653,54],{"class":34},[28,44655,33893],{"class":127},[28,44657,81],{"class":38},[28,44659,44660],{"class":30,"line":33841},[28,44661,33901],{"class":87},[28,44663,44664],{"class":30,"line":33847},[28,44665,33907],{"class":38},[28,44667,44668],{"class":30,"line":33874},[28,44669,33913],{"class":87},[28,44671,44672,44674,44676],{"class":30,"line":33898},[28,44673,33919],{"class":38},[28,44675,33922],{"class":127},[28,44677,81],{"class":38},[28,44679,44680,44682,44684],{"class":30,"line":33904},[28,44681,33930],{"class":38},[28,44683,33933],{"class":127},[28,44685,81],{"class":38},[28,44687,44688],{"class":30,"line":33910},[28,44689,33941],{"class":87},[28,44691,44692,44694,44696,44698,44700,44702,44704],{"class":30,"line":33916},[28,44693,31983],{"class":38},[28,44695,61],{"class":60},[28,44697,64],{"class":38},[28,44699,211],{"class":60},[28,44701,64],{"class":38},[28,44703,211],{"class":60},[28,44705,81],{"class":38},[28,44707,44708,44710,44712,44714,44716,44718,44720,44722,44724],{"class":30,"line":33927},[28,44709,33850],{"class":38},[28,44711,33853],{"class":127},[28,44713,33968],{"class":38},[28,44715,33859],{"class":127},[28,44717,64],{"class":38},[28,44719,33864],{"class":5478},[28,44721,54],{"class":34},[28,44723,33979],{"class":127},[28,44725,81],{"class":38},[28,44727,44728,44730,44732,44734,44736,44738,44740,44742,44744],{"class":30,"line":33938},[28,44729,33850],{"class":38},[28,44731,33853],{"class":127},[28,44733,33991],{"class":38},[28,44735,33884],{"class":127},[28,44737,64],{"class":38},[28,44739,33864],{"class":5478},[28,44741,54],{"class":34},[28,44743,34002],{"class":127},[28,44745,81],{"class":38},[28,44747,44748],{"class":30,"line":33944},[28,44749,34010],{"class":87},[28,44751,44752],{"class":30,"line":33961},[28,44753,33907],{"class":38},[28,44755,44756,44758,44760],{"class":30,"line":33984},[28,44757,33919],{"class":38},[28,44759,33853],{"class":127},[28,44761,81],{"class":38},[28,44763,44764,44766,44768],{"class":30,"line":34007},[28,44765,33930],{"class":38},[28,44767,34032],{"class":127},[28,44769,81],{"class":38},[28,44771,44772],{"class":30,"line":34013},[28,44773,34040],{"class":38},[28,44775,44776],{"class":30,"line":34018},[28,44777,2662],{"emptyLinePlaceholder":336},[28,44779,44780],{"class":30,"line":34027},[28,44781,34051],{"class":87},[28,44783,44784,44786,44788,44790,44792],{"class":30,"line":34037},[28,44785,1796],{"class":34},[28,44787,31480],{"class":60},[28,44789,3211],{"class":34},[28,44791,31485],{"class":127},[28,44793,4001],{"class":38},[28,44795,44796],{"class":30,"line":34043},[28,44797,34070],{"class":87},[28,44799,44800,44803,44805],{"class":30,"line":34048},[28,44801,44802],{"class":38},"    GoogLeNet",[28,44804,54],{"class":34},[28,44806,44807],{"class":38},"GoogLeNet(Inception)\n",[28,44809,44810,44812,44814],{"class":30,"line":34054},[28,44811,34087],{"class":38},[28,44813,54],{"class":34},[28,44815,34092],{"class":38},[28,44817,44818,44820,44822,44825,44827,44829,44831],{"class":30,"line":34067},[28,44819,33649],{"class":38},[28,44821,54],{"class":34},[28,44823,44824],{"class":38},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[28,44826,34105],{"class":5478},[28,44828,54],{"class":34},[28,44830,1348],{"class":60},[28,44832,81],{"class":38},[28,44834,44835],{"class":30,"line":34073},[28,44836,34117],{"class":38},[363,44838,44839],{"start":84},[366,44840,40830],{},[18,44842,44844],{"className":20,"code":44843,"language":22,"meta":23,"style":23},"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",[25,44845,44846,44852,44862,44872,44876,44886,44897,44901,44905,44909,44917,44933,44943,44959,44969,44983,44987,44997,45007,45017,45023,45027,45031,45039,45043,45059,45067,45071,45075,45083,45091,45095,45099,45103,45107,45113,45117,45127,45135,45143,45147,45151,45155,45163,45167,45183,45187,45191,45195,45207,45211,45223,45227,45231,45243,45247,45257,45261,45265,45277,45281,45289,45293,45297,45305,45309,45317,45321,45325,45329,45333,45337,45353,45361,45365,45369,45417,45423,45427,45437,45445,45453,45457,45461,45465,45469,45477,45481,45497,45501,45509,45517],{"__ignoreMap":23},[28,44847,44848,44850],{"class":30,"line":31},[28,44849,35],{"class":34},[28,44851,30655],{"class":38},[28,44853,44854,44856,44858,44860],{"class":30,"line":48},[28,44855,35],{"class":34},[28,44857,31672],{"class":38},[28,44859,42],{"class":34},[28,44861,31677],{"class":38},[28,44863,44864,44866,44868,44870],{"class":30,"line":84},[28,44865,30997],{"class":34},[28,44867,31655],{"class":38},[28,44869,35],{"class":34},[28,44871,31660],{"class":38},[28,44873,44874],{"class":30,"line":91},[28,44875,34178],{"class":87},[28,44877,44878,44880,44882,44884],{"class":30,"line":97},[28,44879,30997],{"class":34},[28,44881,31628],{"class":38},[28,44883,35],{"class":34},[28,44885,31633],{"class":38},[28,44887,44888,44890,44892,44894],{"class":30,"line":103},[28,44889,30997],{"class":34},[28,44891,32170],{"class":38},[28,44893,35],{"class":34},[28,44895,44896],{"class":38}," GoogLeNet,Inception\n",[28,44898,44899],{"class":30,"line":109},[28,44900,2662],{"emptyLinePlaceholder":336},[28,44902,44903],{"class":30,"line":118},[28,44904,2662],{"emptyLinePlaceholder":336},[28,44906,44907],{"class":30,"line":124},[28,44908,34207],{"class":87},[28,44910,44911,44913,44915],{"class":30,"line":131},[28,44912,32203],{"class":34},[28,44914,34214],{"class":2225},[28,44916,32209],{"class":38},[28,44918,44919,44921,44923,44925,44927,44929,44931],{"class":30,"line":137},[28,44920,34221],{"class":38},[28,44922,54],{"class":34},[28,44924,31712],{"class":38},[28,44926,31715],{"class":5478},[28,44928,54],{"class":34},[28,44930,31720],{"class":127},[28,44932,31723],{"class":38},[28,44934,44935,44937,44939,44941],{"class":30,"line":143},[28,44936,34238],{"class":5478},[28,44938,54],{"class":34},[28,44940,34243],{"class":60},[28,44942,31723],{"class":38},[28,44944,44945,44947,44949,44951,44953,44955,44957],{"class":30,"line":149},[28,44946,34250],{"class":5478},[28,44948,54],{"class":34},[28,44950,31750],{"class":38},[28,44952,31753],{"class":5478},[28,44954,54],{"class":34},[28,44956,35705],{"class":60},[28,44958,31761],{"class":38},[28,44960,44961,44963,44965,44967],{"class":30,"line":1890},[28,44962,34267],{"class":5478},[28,44964,54],{"class":34},[28,44966,31733],{"class":60},[28,44968,81],{"class":38},[28,44970,44971,44973,44975,44977,44979,44981],{"class":30,"line":1904},[28,44972,34278],{"class":38},[28,44974,54],{"class":34},[28,44976,31791],{"class":38},[28,44978,31794],{"class":5478},[28,44980,54],{"class":34},[28,44982,34289],{"class":38},[28,44984,44985],{"class":30,"line":1909},[28,44986,34294],{"class":87},[28,44988,44989,44991,44993,44995],{"class":30,"line":1915},[28,44990,34299],{"class":5478},[28,44992,54],{"class":34},[28,44994,61],{"class":60},[28,44996,31723],{"class":38},[28,44998,44999,45001,45003,45005],{"class":30,"line":1936},[28,45000,34310],{"class":5478},[28,45002,54],{"class":34},[28,45004,31733],{"class":60},[28,45006,31723],{"class":38},[28,45008,45009,45011,45013,45015],{"class":30,"line":1941},[28,45010,34321],{"class":5478},[28,45012,54],{"class":34},[28,45014,244],{"class":60},[28,45016,81],{"class":38},[28,45018,45019,45021],{"class":30,"line":1955},[28,45020,4352],{"class":34},[28,45022,34334],{"class":38},[28,45024,45025],{"class":30,"line":1960},[28,45026,2662],{"emptyLinePlaceholder":336},[28,45028,45029],{"class":30,"line":1989},[28,45030,34343],{"class":87},[28,45032,45033,45035,45037],{"class":30,"line":1994},[28,45034,32203],{"class":34},[28,45036,34350],{"class":2225},[28,45038,34353],{"class":38},[28,45040,45041],{"class":30,"line":2011},[28,45042,34358],{"class":87},[28,45044,45045,45047,45049,45051,45053,45055,45057],{"class":30,"line":2016},[28,45046,31497],{"class":38},[28,45048,54],{"class":34},[28,45050,31504],{"class":127},[28,45052,1966],{"class":34},[28,45054,31509],{"class":38},[28,45056,1963],{"class":34},[28,45058,34375],{"class":127},[28,45060,45061,45063,45065],{"class":30,"line":2021},[28,45062,31549],{"class":38},[28,45064,54],{"class":34},[28,45066,32545],{"class":38},[28,45068,45069],{"class":30,"line":2026},[28,45070,2662],{"emptyLinePlaceholder":336},[28,45072,45073],{"class":30,"line":2040},[28,45074,34392],{"class":87},[28,45076,45077,45079,45081],{"class":30,"line":2045},[28,45078,34397],{"class":38},[28,45080,54],{"class":34},[28,45082,32598],{"class":60},[28,45084,45085,45087,45089],{"class":30,"line":2839},[28,45086,34406],{"class":38},[28,45088,54],{"class":34},[28,45090,3347],{"class":60},[28,45092,45093],{"class":30,"line":2853},[28,45094,2662],{"emptyLinePlaceholder":336},[28,45096,45097],{"class":30,"line":2861},[28,45098,34419],{"class":87},[28,45100,45101],{"class":30,"line":2866},[28,45102,34424],{"class":87},[28,45104,45105],{"class":30,"line":2872},[28,45106,34429],{"class":87},[28,45108,45109,45111],{"class":30,"line":2878},[28,45110,34434],{"class":34},[28,45112,33140],{"class":38},[28,45114,45115],{"class":30,"line":2883},[28,45116,34441],{"class":87},[28,45118,45119,45121,45123,45125],{"class":30,"line":8210},[28,45120,3665],{"class":34},[28,45122,34448],{"class":38},[28,45124,26306],{"class":34},[28,45126,34453],{"class":38},[28,45128,45129,45131,45133],{"class":30,"line":8234},[28,45130,34458],{"class":38},[28,45132,54],{"class":34},[28,45134,34463],{"class":38},[28,45136,45137,45139,45141],{"class":30,"line":8239},[28,45138,34468],{"class":38},[28,45140,54],{"class":34},[28,45142,34473],{"class":38},[28,45144,45145],{"class":30,"line":8245},[28,45146,34478],{"class":87},[28,45148,45149],{"class":30,"line":8272},[28,45150,33131],{"class":38},[28,45152,45153],{"class":30,"line":8277},[28,45154,34487],{"class":87},[28,45156,45157,45159,45161],{"class":30,"line":8283},[28,45158,32916],{"class":38},[28,45160,54],{"class":34},[28,45162,34496],{"class":38},[28,45164,45165],{"class":30,"line":8295},[28,45166,34501],{"class":87},[28,45168,45169,45171,45173,45175,45177,45179,45181],{"class":30,"line":8307},[28,45170,32933],{"class":38},[28,45172,54],{"class":34},[28,45174,32938],{"class":38},[28,45176,32941],{"class":5478},[28,45178,54],{"class":34},[28,45180,61],{"class":60},[28,45182,81],{"class":38},[28,45184,45185],{"class":30,"line":8319},[28,45186,34522],{"class":87},[28,45188,45189],{"class":30,"line":9978},[28,45190,34527],{"class":87},[28,45192,45193],{"class":30,"line":10003},[28,45194,34532],{"class":87},[28,45196,45197,45199,45201,45203,45205],{"class":30,"line":10026},[28,45198,34537],{"class":38},[28,45200,9739],{"class":34},[28,45202,33043],{"class":38},[28,45204,3211],{"class":34},[28,45206,34546],{"class":38},[28,45208,45209],{"class":30,"line":10050},[28,45210,34551],{"class":87},[28,45212,45213,45215,45217,45219,45221],{"class":30,"line":10055},[28,45214,34556],{"class":38},[28,45216,9739],{"class":34},[28,45218,34561],{"class":38},[28,45220,244],{"class":60},[28,45222,81],{"class":38},[28,45224,45225],{"class":30,"line":10060},[28,45226,2662],{"emptyLinePlaceholder":336},[28,45228,45229],{"class":30,"line":10065},[28,45230,34574],{"class":87},[28,45232,45233,45235,45237,45239,45241],{"class":30,"line":10074},[28,45234,34579],{"class":38},[28,45236,54],{"class":34},[28,45238,34584],{"class":38},[28,45240,982],{"class":34},[28,45242,34589],{"class":38},[28,45244,45245],{"class":30,"line":10079},[28,45246,34594],{"class":87},[28,45248,45249,45251,45253,45255],{"class":30,"line":10085},[28,45250,32707],{"class":60},[28,45252,413],{"class":38},[28,45254,34603],{"class":127},[28,45256,34606],{"class":38},[28,45258,45259],{"class":30,"line":10106},[28,45260,2662],{"emptyLinePlaceholder":336},[28,45262,45263],{"class":30,"line":10112},[28,45264,34615],{"class":87},[28,45266,45267,45269,45271,45273,45275],{"class":30,"line":10126},[28,45268,1796],{"class":34},[28,45270,31480],{"class":60},[28,45272,3211],{"class":34},[28,45274,31485],{"class":127},[28,45276,4001],{"class":38},[28,45278,45279],{"class":30,"line":10132},[28,45280,34632],{"class":87},[28,45282,45283,45285,45287],{"class":30,"line":10159},[28,45284,31549],{"class":38},[28,45286,54],{"class":34},[28,45288,44807],{"class":38},[28,45290,45291],{"class":30,"line":10168},[28,45292,34645],{"class":87},[28,45294,45295],{"class":30,"line":10174},[28,45296,34650],{"class":87},[28,45298,45299,45301,45303],{"class":30,"line":10182},[28,45300,34655],{"class":38},[28,45302,34658],{"class":127},[28,45304,30757],{"class":38},[28,45306,45307],{"class":30,"line":10187},[28,45308,34665],{"class":87},[28,45310,45311,45313,45315],{"class":30,"line":16866},[28,45312,34278],{"class":38},[28,45314,54],{"class":34},[28,45316,34674],{"class":38},[28,45318,45319],{"class":30,"line":16872},[28,45320,34679],{"class":87},[28,45322,45323],{"class":30,"line":16895},[28,45324,34684],{"class":38},[28,45326,45327],{"class":30,"line":16901},[28,45328,2662],{"emptyLinePlaceholder":336},[28,45330,45331],{"class":30,"line":16924},[28,45332,34693],{"class":87},[28,45334,45335],{"class":30,"line":16938},[28,45336,34698],{"class":87},[28,45338,45339,45341,45343,45345,45347,45349,45351],{"class":30,"line":16958},[28,45340,31497],{"class":38},[28,45342,54],{"class":34},[28,45344,31504],{"class":127},[28,45346,1966],{"class":34},[28,45348,31509],{"class":38},[28,45350,1963],{"class":34},[28,45352,34375],{"class":127},[28,45354,45355,45357,45359],{"class":30,"line":16964},[28,45356,31549],{"class":38},[28,45358,54],{"class":34},[28,45360,32545],{"class":38},[28,45362,45363],{"class":30,"line":16975},[28,45364,34727],{"class":87},[28,45366,45367],{"class":30,"line":16998},[28,45368,34732],{"class":87},[28,45370,45371,45373,45375,45377,45379,45381,45383,45385,45387,45389,45391,45393,45395,45397,45399,45401,45403,45405,45407,45409,45411,45413,45415],{"class":30,"line":17020},[28,45372,34737],{"class":38},[28,45374,54],{"class":34},[28,45376,1287],{"class":38},[28,45378,34744],{"class":127},[28,45380,64],{"class":38},[28,45382,34749],{"class":127},[28,45384,64],{"class":38},[28,45386,34754],{"class":127},[28,45388,64],{"class":38},[28,45390,34759],{"class":127},[28,45392,64],{"class":38},[28,45394,34764],{"class":127},[28,45396,64],{"class":38},[28,45398,34769],{"class":127},[28,45400,64],{"class":38},[28,45402,34774],{"class":127},[28,45404,64],{"class":38},[28,45406,34779],{"class":127},[28,45408,64],{"class":38},[28,45410,34784],{"class":127},[28,45412,64],{"class":38},[28,45414,34789],{"class":127},[28,45416,33502],{"class":38},[28,45418,45419,45421],{"class":30,"line":17025},[28,45420,34434],{"class":34},[28,45422,33140],{"class":38},[28,45424,45425],{"class":30,"line":17031},[28,45426,34802],{"class":87},[28,45428,45429,45431,45433,45435],{"class":30,"line":17045},[28,45430,3665],{"class":34},[28,45432,34809],{"class":38},[28,45434,26306],{"class":34},[28,45436,34453],{"class":38},[28,45438,45439,45441,45443],{"class":30,"line":17058},[28,45440,32866],{"class":38},[28,45442,54],{"class":34},[28,45444,32871],{"class":38},[28,45446,45447,45449,45451],{"class":30,"line":17063},[28,45448,32881],{"class":38},[28,45450,54],{"class":34},[28,45452,32886],{"class":38},[28,45454,45455],{"class":30,"line":17077},[28,45456,2662],{"emptyLinePlaceholder":336},[28,45458,45459],{"class":30,"line":17082},[28,45460,34838],{"class":87},[28,45462,45463],{"class":30,"line":17088},[28,45464,33131],{"class":38},[28,45466,45467],{"class":30,"line":17093},[28,45468,34847],{"class":87},[28,45470,45471,45473,45475],{"class":30,"line":17107},[28,45472,32916],{"class":38},[28,45474,54],{"class":34},[28,45476,32921],{"class":38},[28,45478,45479],{"class":30,"line":17112},[28,45480,34860],{"class":87},[28,45482,45483,45485,45487,45489,45491,45493,45495],{"class":30,"line":17117},[28,45484,32933],{"class":38},[28,45486,54],{"class":34},[28,45488,32938],{"class":38},[28,45490,32941],{"class":5478},[28,45492,54],{"class":34},[28,45494,61],{"class":60},[28,45496,81],{"class":38},[28,45498,45499],{"class":30,"line":17131},[28,45500,34881],{"class":87},[28,45502,45503,45505,45507],{"class":30,"line":17143},[28,45504,34886],{"class":38},[28,45506,54],{"class":34},[28,45508,34891],{"class":38},[28,45510,45511,45513,45515],{"class":30,"line":17148},[28,45512,34896],{"class":38},[28,45514,54],{"class":34},[28,45516,34901],{"class":38},[28,45518,45519,45521,45523,45525,45527,45529,45531,45533],{"class":30,"line":17161},[28,45520,34906],{"class":60},[28,45522,413],{"class":38},[28,45524,34911],{"class":127},[28,45526,34914],{"class":38},[28,45528,34917],{"class":127},[28,45530,64],{"class":38},[28,45532,34922],{"class":127},[28,45534,34925],{"class":38},[380,45536,45538],{"id":45537},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45540,45541],{},"猫狗分类任务",[14,45543,45544],{},"划分数据集和验证集",[18,45546,45548],{"className":20,"code":45547,"language":22,"meta":23,"style":23},"# 创建脚本，用于划分数据集和验证集\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",[25,45549,45550,45555,45562,45567,45578,45585,45589,45599,45613,45622,45626,45631,45641,45661,45665,45670,45680,45691,45704,45708,45713,45722,45732,45743,45747,45752,45762,45766,45771,45776,45781,45786,45791,45795,45805,45832,45845,45857,45884,45889,45894,45908,45913,45925,45940,45955,45963,45967,45972,45978,45990,46003,46008,46013,46018,46068,46074,46078],{"__ignoreMap":23},[28,45551,45552],{"class":30,"line":31},[28,45553,45554],{"class":87},"# 创建脚本，用于划分数据集和验证集\n",[28,45556,45557,45559],{"class":30,"line":48},[28,45558,35],{"class":34},[28,45560,45561],{"class":38}," os\n",[28,45563,45564],{"class":30,"line":84},[28,45565,45566],{"class":87},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[28,45568,45569,45571,45574,45576],{"class":30,"line":91},[28,45570,30997],{"class":34},[28,45572,45573],{"class":38}," shutil ",[28,45575,35],{"class":34},[28,45577,32078],{"class":38},[28,45579,45580,45582],{"class":30,"line":97},[28,45581,35],{"class":34},[28,45583,45584],{"class":38}," random\n",[28,45586,45587],{"class":30,"line":103},[28,45588,2662],{"emptyLinePlaceholder":336},[28,45590,45591,45593,45596],{"class":30,"line":109},[28,45592,32203],{"class":34},[28,45594,45595],{"class":2225}," mkfile",[28,45597,45598],{"class":38},"(file):\n",[28,45600,45601,45603,45605,45608,45611],{"class":30,"line":118},[28,45602,3363],{"class":34},[28,45604,39186],{"class":34},[28,45606,45607],{"class":38}," os.path.exists(",[28,45609,45610],{"class":5478},"file",[28,45612,31046],{"class":38},[28,45614,45615,45618,45620],{"class":30,"line":124},[28,45616,45617],{"class":38},"        os.makedirs(",[28,45619,45610],{"class":5478},[28,45621,81],{"class":38},[28,45623,45624],{"class":30,"line":131},[28,45625,2662],{"emptyLinePlaceholder":336},[28,45627,45628],{"class":30,"line":137},[28,45629,45630],{"class":87},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[28,45632,45633,45636,45638],{"class":30,"line":143},[28,45634,45635],{"class":38},"file_path",[28,45637,54],{"class":34},[28,45639,45640],{"class":127},"'data_cat_dog'\n",[28,45642,45643,45646,45648,45651,45653,45656,45658],{"class":30,"line":149},[28,45644,45645],{"class":38},"flower_class",[28,45647,54],{"class":34},[28,45649,45650],{"class":38},"[cla ",[28,45652,3287],{"class":34},[28,45654,45655],{"class":38}," cla ",[28,45657,26306],{"class":34},[28,45659,45660],{"class":38}," os.listdir(file_path)]\n",[28,45662,45663],{"class":30,"line":1890},[28,45664,2662],{"emptyLinePlaceholder":336},[28,45666,45667],{"class":30,"line":1904},[28,45668,45669],{"class":87},"# 创建训练集train文件夹\n",[28,45671,45672,45675,45678],{"class":30,"line":1909},[28,45673,45674],{"class":38},"mkfile(",[28,45676,45677],{"class":127},"'data\u002Ftrain'",[28,45679,81],{"class":38},[28,45681,45682,45684,45686,45688],{"class":30,"line":1915},[28,45683,3287],{"class":34},[28,45685,45655],{"class":38},[28,45687,26306],{"class":34},[28,45689,45690],{"class":38}," flower_class:\n",[28,45692,45693,45696,45699,45701],{"class":30,"line":1936},[28,45694,45695],{"class":38},"    mkfile(",[28,45697,45698],{"class":127},"'data\u002Ftrain\u002F'",[28,45700,880],{"class":34},[28,45702,45703],{"class":38},"cla)\n",[28,45705,45706],{"class":30,"line":1941},[28,45707,2662],{"emptyLinePlaceholder":336},[28,45709,45710],{"class":30,"line":1955},[28,45711,45712],{"class":87},"# 创建验证集val文件夹\n",[28,45714,45715,45717,45720],{"class":30,"line":1960},[28,45716,45674],{"class":38},[28,45718,45719],{"class":127},"'data\u002Ftest'",[28,45721,81],{"class":38},[28,45723,45724,45726,45728,45730],{"class":30,"line":1989},[28,45725,3287],{"class":34},[28,45727,45655],{"class":38},[28,45729,26306],{"class":34},[28,45731,45690],{"class":38},[28,45733,45734,45736,45739,45741],{"class":30,"line":1994},[28,45735,45695],{"class":38},[28,45737,45738],{"class":127},"'data\u002Ftest\u002F'",[28,45740,880],{"class":34},[28,45742,45703],{"class":38},[28,45744,45745],{"class":30,"line":2011},[28,45746,2662],{"emptyLinePlaceholder":336},[28,45748,45749],{"class":30,"line":2016},[28,45750,45751],{"class":87},"# 划分比例，训练集：测试集=9：1\n",[28,45753,45754,45757,45759],{"class":30,"line":2021},[28,45755,45756],{"class":38},"split_rate",[28,45758,54],{"class":34},[28,45760,45761],{"class":60},"0.1\n",[28,45763,45764],{"class":30,"line":2026},[28,45765,2662],{"emptyLinePlaceholder":336},[28,45767,45768],{"class":30,"line":2040},[28,45769,45770],{"class":87},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[28,45772,45773],{"class":30,"line":2045},[28,45774,45775],{"class":87},"# cla_path：当前类别的原始图片路径\n",[28,45777,45778],{"class":30,"line":2839},[28,45779,45780],{"class":87},"# images：当前类别下所有图片的文件名列表\n",[28,45782,45783],{"class":30,"line":2853},[28,45784,45785],{"class":87},"# num：该类别图片总数\n",[28,45787,45788],{"class":30,"line":2861},[28,45789,45790],{"class":87},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[28,45792,45793],{"class":30,"line":2866},[28,45794,2662],{"emptyLinePlaceholder":336},[28,45796,45797,45799,45801,45803],{"class":30,"line":2872},[28,45798,3287],{"class":34},[28,45800,45655],{"class":38},[28,45802,26306],{"class":34},[28,45804,45690],{"class":38},[28,45806,45807,45810,45812,45815,45817,45820,45823,45825,45827,45829],{"class":30,"line":2878},[28,45808,45809],{"class":38},"    cla_path ",[28,45811,54],{"class":34},[28,45813,45814],{"class":38}," file_path ",[28,45816,880],{"class":34},[28,45818,45819],{"class":127}," '\u002F'",[28,45821,45822],{"class":34}," +",[28,45824,45655],{"class":38},[28,45826,880],{"class":34},[28,45828,45819],{"class":127},[28,45830,45831],{"class":87},"  # 某一类别的子目录\n",[28,45833,45834,45837,45839,45842],{"class":30,"line":2883},[28,45835,45836],{"class":38},"    images ",[28,45838,54],{"class":34},[28,45840,45841],{"class":38}," os.listdir(cla_path)  ",[28,45843,45844],{"class":87},"# iamges 列表存储了该目录下所有图像的名称\n",[28,45846,45847,45850,45852,45854],{"class":30,"line":8210},[28,45848,45849],{"class":38},"    num ",[28,45851,54],{"class":34},[28,45853,7593],{"class":60},[28,45855,45856],{"class":38},"(images)\n",[28,45858,45859,45862,45864,45867,45869,45871,45873,45876,45878,45881],{"class":30,"line":8234},[28,45860,45861],{"class":38},"    eval_index ",[28,45863,54],{"class":34},[28,45865,45866],{"class":38}," random.sample(images, ",[28,45868,892],{"class":5478},[28,45870,54],{"class":34},[28,45872,416],{"class":60},[28,45874,45875],{"class":38},"(num ",[28,45877,854],{"class":34},[28,45879,45880],{"class":38}," split_rate))  ",[28,45882,45883],{"class":87},"# 从images列表中随机抽取 k 个图像名称\n",[28,45885,45886],{"class":30,"line":8239},[28,45887,45888],{"class":87},"    # 遍历该类别下的所有图片\n",[28,45890,45891],{"class":30,"line":8245},[28,45892,45893],{"class":87},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[28,45895,45896,45898,45901,45903,45905],{"class":30,"line":8272},[28,45897,3463],{"class":34},[28,45899,45900],{"class":38}," index, image ",[28,45902,26306],{"class":34},[28,45904,31863],{"class":60},[28,45906,45907],{"class":38},"(images):\n",[28,45909,45910],{"class":30,"line":8277},[28,45911,45912],{"class":87},"        # eval_index 中保存验证集val的图像名称\n",[28,45914,45915,45917,45920,45922],{"class":30,"line":8283},[28,45916,2759],{"class":34},[28,45918,45919],{"class":38}," image ",[28,45921,26306],{"class":34},[28,45923,45924],{"class":38}," eval_index:\n",[28,45926,45927,45930,45932,45935,45937],{"class":30,"line":8295},[28,45928,45929],{"class":38},"            image_path ",[28,45931,54],{"class":34},[28,45933,45934],{"class":38}," cla_path ",[28,45936,880],{"class":34},[28,45938,45939],{"class":38}," image\n",[28,45941,45942,45945,45947,45950,45952],{"class":30,"line":8307},[28,45943,45944],{"class":38},"            new_path ",[28,45946,54],{"class":34},[28,45948,45949],{"class":127}," 'data\u002Ftest\u002F'",[28,45951,45822],{"class":34},[28,45953,45954],{"class":38}," cla\n",[28,45956,45957,45960],{"class":30,"line":8319},[28,45958,45959],{"class":38},"            copy(image_path, new_path)  ",[28,45961,45962],{"class":87},"# 将选中的图像复制到新路径\n",[28,45964,45965],{"class":30,"line":9978},[28,45966,2662],{"emptyLinePlaceholder":336},[28,45968,45969],{"class":30,"line":10003},[28,45970,45971],{"class":87},"        # 其余的图像保存在训练集train中\n",[28,45973,45974,45976],{"class":30,"line":10026},[28,45975,2796],{"class":34},[28,45977,4001],{"class":38},[28,45979,45980,45982,45984,45986,45988],{"class":30,"line":10050},[28,45981,45929],{"class":38},[28,45983,54],{"class":34},[28,45985,45934],{"class":38},[28,45987,880],{"class":34},[28,45989,45939],{"class":38},[28,45991,45992,45994,45996,45999,46001],{"class":30,"line":10055},[28,45993,45944],{"class":38},[28,45995,54],{"class":34},[28,45997,45998],{"class":127}," 'data\u002Ftrain\u002F'",[28,46000,45822],{"class":34},[28,46002,45954],{"class":38},[28,46004,46005],{"class":30,"line":10060},[28,46006,46007],{"class":38},"            copy(image_path, new_path)\n",[28,46009,46010],{"class":30,"line":10065},[28,46011,46012],{"class":87},"            # 打印进度条信息\n",[28,46014,46015],{"class":30,"line":10074},[28,46016,46017],{"class":87},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[28,46019,46020,46022,46024,46026,46029,46031,46033,46036,46038,46040,46042,46045,46048,46050,46052,46055,46058,46060,46062,46065],{"class":30,"line":10079},[28,46021,32707],{"class":60},[28,46023,413],{"class":38},[28,46025,654],{"class":127},[28,46027,46028],{"class":60},"\\r",[28,46030,1287],{"class":127},[28,46032,32715],{"class":60},[28,46034,46035],{"class":127},"] processing [",[28,46037,32715],{"class":60},[28,46039,982],{"class":127},[28,46041,32715],{"class":60},[28,46043,46044],{"class":127},"]\"",[28,46046,46047],{"class":38},".format(cla, index ",[28,46049,880],{"class":34},[28,46051,25381],{"class":60},[28,46053,46054],{"class":38},", num), ",[28,46056,46057],{"class":5478},"end",[28,46059,54],{"class":34},[28,46061,7914],{"class":127},[28,46063,46064],{"class":38},")  ",[28,46066,46067],{"class":87},"# processing bar\n",[28,46069,46070,46072],{"class":30,"line":10085},[28,46071,31559],{"class":60},[28,46073,2238],{"class":38},[28,46075,46076],{"class":30,"line":10106},[28,46077,2662],{"emptyLinePlaceholder":336},[28,46079,46080,46082,46084,46087],{"class":30,"line":10112},[28,46081,30675],{"class":60},[28,46083,413],{"class":38},[28,46085,46086],{"class":127},"\"processing done!\"",[28,46088,81],{"class":38},[14,46090,46091],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22260,46093,46095],{"id":46094},"_242模型代码","2.4.2.模型代码",[14,46097,46098],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[18,46100,46102],{"className":20,"code":46101,"language":22,"meta":23,"style":23},"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",[25,46103,46104,46110,46120,46130,46134,46150,46158,46172,46182,46186,46216,46220,46254,46300,46304,46338,46384,46388,46392,46426,46456,46460,46468,46482,46504,46526,46544,46548,46562,46566,46570,46586,46590,46598,46612,46622,46666,46670,46698,46702,46712,46740,46744,46780,46784,46812,46816,46826,46858,46890,46918,46922,46932,46964,46996,47028,47060,47092,47120,47124,47134,47166,47198,47210,47214,47226,47230,47234,47246,47254,47274,47278,47282,47286,47290,47294,47298,47312,47320,47328,47340,47354,47362,47366,47374,47384,47394,47404,47414,47424,47430,47434,47438,47450,47470,47478],{"__ignoreMap":23},[28,46105,46106,46108],{"class":30,"line":31},[28,46107,35],{"class":34},[28,46109,30655],{"class":38},[28,46111,46112,46114,46116,46118],{"class":30,"line":48},[28,46113,30997],{"class":34},[28,46115,31000],{"class":38},[28,46117,35],{"class":34},[28,46119,31005],{"class":38},[28,46121,46122,46124,46126,46128],{"class":30,"line":84},[28,46123,30997],{"class":34},[28,46125,31017],{"class":38},[28,46127,35],{"class":34},[28,46129,31022],{"class":38},[28,46131,46132],{"class":30,"line":91},[28,46133,2662],{"emptyLinePlaceholder":336},[28,46135,46136,46138,46140,46142,46144,46146,46148],{"class":30,"line":97},[28,46137,14956],{"class":34},[28,46139,41749],{"class":2225},[28,46141,413],{"class":38},[28,46143,31038],{"class":2225},[28,46145,956],{"class":38},[28,46147,31043],{"class":2225},[28,46149,31046],{"class":38},[28,46151,46152,46154,46156],{"class":30,"line":103},[28,46153,31061],{"class":34},[28,46155,31064],{"class":60},[28,46157,41768],{"class":38},[28,46159,46160,46162,46164,46166,46168,46170],{"class":30,"line":109},[28,46161,31077],{"class":60},[28,46163,41775],{"class":38},[28,46165,31083],{"class":60},[28,46167,31086],{"class":38},[28,46169,31089],{"class":60},[28,46171,2238],{"class":38},[28,46173,46174,46176,46178,46180],{"class":30,"line":118},[28,46175,31105],{"class":60},[28,46177,35027],{"class":38},[28,46179,54],{"class":34},[28,46181,35032],{"class":38},[28,46183,46184],{"class":30,"line":124},[28,46185,41798],{"class":87},[28,46187,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214],{"class":30,"line":131},[28,46189,31105],{"class":60},[28,46191,41805],{"class":38},[28,46193,54],{"class":34},[28,46195,31113],{"class":38},[28,46197,31116],{"class":5478},[28,46199,54],{"class":34},[28,46201,41816],{"class":38},[28,46203,31125],{"class":5478},[28,46205,54],{"class":34},[28,46207,41823],{"class":38},[28,46209,31134],{"class":5478},[28,46211,54],{"class":34},[28,46213,61],{"class":60},[28,46215,81],{"class":38},[28,46217,46218],{"class":30,"line":137},[28,46219,41836],{"class":87},[28,46221,46222,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252],{"class":30,"line":143},[28,46223,31105],{"class":60},[28,46225,41843],{"class":38},[28,46227,54],{"class":34},[28,46229,31113],{"class":38},[28,46231,31116],{"class":5478},[28,46233,54],{"class":34},[28,46235,41816],{"class":38},[28,46237,31125],{"class":5478},[28,46239,54],{"class":34},[28,46241,41860],{"class":38},[28,46243,244],{"class":60},[28,46245,41865],{"class":38},[28,46247,31134],{"class":5478},[28,46249,54],{"class":34},[28,46251,61],{"class":60},[28,46253,81],{"class":38},[28,46255,46256,46258,46260,46262,46264,46266,46268,46270,46272,46274,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298],{"class":30,"line":149},[28,46257,31105],{"class":60},[28,46259,41880],{"class":38},[28,46261,54],{"class":34},[28,46263,31113],{"class":38},[28,46265,31116],{"class":5478},[28,46267,54],{"class":34},[28,46269,41860],{"class":38},[28,46271,244],{"class":60},[28,46273,41865],{"class":38},[28,46275,31125],{"class":5478},[28,46277,54],{"class":34},[28,46279,41860],{"class":38},[28,46281,61],{"class":60},[28,46283,41865],{"class":38},[28,46285,31134],{"class":5478},[28,46287,54],{"class":34},[28,46289,78],{"class":60},[28,46291,64],{"class":38},[28,46293,31143],{"class":5478},[28,46295,54],{"class":34},[28,46297,61],{"class":60},[28,46299,81],{"class":38},[28,46301,46302],{"class":30,"line":1890},[28,46303,41925],{"class":87},[28,46305,46306,46308,46310,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332,46334,46336],{"class":30,"line":1904},[28,46307,31105],{"class":60},[28,46309,41932],{"class":38},[28,46311,54],{"class":34},[28,46313,31113],{"class":38},[28,46315,31116],{"class":5478},[28,46317,54],{"class":34},[28,46319,41816],{"class":38},[28,46321,31125],{"class":5478},[28,46323,54],{"class":34},[28,46325,41949],{"class":38},[28,46327,244],{"class":60},[28,46329,41865],{"class":38},[28,46331,31134],{"class":5478},[28,46333,54],{"class":34},[28,46335,61],{"class":60},[28,46337,81],{"class":38},[28,46339,46340,46342,46344,46346,46348,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382],{"class":30,"line":1909},[28,46341,31105],{"class":60},[28,46343,41968],{"class":38},[28,46345,54],{"class":34},[28,46347,31113],{"class":38},[28,46349,31116],{"class":5478},[28,46351,54],{"class":34},[28,46353,41949],{"class":38},[28,46355,244],{"class":60},[28,46357,41865],{"class":38},[28,46359,31125],{"class":5478},[28,46361,54],{"class":34},[28,46363,41949],{"class":38},[28,46365,61],{"class":60},[28,46367,41865],{"class":38},[28,46369,31134],{"class":5478},[28,46371,54],{"class":34},[28,46373,721],{"class":60},[28,46375,64],{"class":38},[28,46377,31143],{"class":5478},[28,46379,54],{"class":34},[28,46381,211],{"class":60},[28,46383,81],{"class":38},[28,46385,46386],{"class":30,"line":1915},[28,46387,42013],{"class":87},[28,46389,46390],{"class":30,"line":1936},[28,46391,42018],{"class":87},[28,46393,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412,46414,46416,46418,46420,46422,46424],{"class":30,"line":1941},[28,46395,31105],{"class":60},[28,46397,42025],{"class":38},[28,46399,54],{"class":34},[28,46401,35085],{"class":38},[28,46403,31134],{"class":5478},[28,46405,54],{"class":34},[28,46407,78],{"class":60},[28,46409,64],{"class":38},[28,46411,31189],{"class":5478},[28,46413,54],{"class":34},[28,46415,61],{"class":60},[28,46417,64],{"class":38},[28,46419,31143],{"class":5478},[28,46421,54],{"class":34},[28,46423,61],{"class":60},[28,46425,81],{"class":38},[28,46427,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454],{"class":30,"line":1955},[28,46429,31105],{"class":60},[28,46431,42060],{"class":38},[28,46433,54],{"class":34},[28,46435,31113],{"class":38},[28,46437,31116],{"class":5478},[28,46439,54],{"class":34},[28,46441,41816],{"class":38},[28,46443,31125],{"class":5478},[28,46445,54],{"class":34},[28,46447,42077],{"class":38},[28,46449,31134],{"class":5478},[28,46451,54],{"class":34},[28,46453,61],{"class":60},[28,46455,81],{"class":38},[28,46457,46458],{"class":30,"line":1960},[28,46459,2662],{"emptyLinePlaceholder":336},[28,46461,46462,46464,46466],{"class":30,"line":1989},[28,46463,31061],{"class":34},[28,46465,31353],{"class":2225},[28,46467,31356],{"class":38},[28,46469,46470,46472,46474,46476,46478,46480],{"class":30,"line":1994},[28,46471,42102],{"class":38},[28,46473,54],{"class":34},[28,46475,31083],{"class":60},[28,46477,35440],{"class":38},[28,46479,31083],{"class":60},[28,46481,42113],{"class":38},[28,46483,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502],{"class":30,"line":2011},[28,46485,7347],{"class":38},[28,46487,54],{"class":34},[28,46489,31083],{"class":60},[28,46491,35440],{"class":38},[28,46493,31083],{"class":60},[28,46495,42128],{"class":38},[28,46497,31083],{"class":60},[28,46499,35440],{"class":38},[28,46501,31083],{"class":60},[28,46503,42137],{"class":38},[28,46505,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524],{"class":30,"line":2016},[28,46507,42142],{"class":38},[28,46509,54],{"class":34},[28,46511,31083],{"class":60},[28,46513,35440],{"class":38},[28,46515,31083],{"class":60},[28,46517,42153],{"class":38},[28,46519,31083],{"class":60},[28,46521,35440],{"class":38},[28,46523,31083],{"class":60},[28,46525,42162],{"class":38},[28,46527,46528,46530,46532,46534,46536,46538,46540,46542],{"class":30,"line":2021},[28,46529,42167],{"class":38},[28,46531,54],{"class":34},[28,46533,31083],{"class":60},[28,46535,35440],{"class":38},[28,46537,31083],{"class":60},[28,46539,42178],{"class":38},[28,46541,31083],{"class":60},[28,46543,42183],{"class":38},[28,46545,46546],{"class":30,"line":2026},[28,46547,42188],{"class":87},[28,46549,46550,46552,46554,46556,46558,46560],{"class":30,"line":2040},[28,46551,15014],{"class":34},[28,46553,42195],{"class":38},[28,46555,32941],{"class":5478},[28,46557,54],{"class":34},[28,46559,61],{"class":60},[28,46561,81],{"class":38},[28,46563,46564],{"class":30,"line":2045},[28,46565,2662],{"emptyLinePlaceholder":336},[28,46567,46568],{"class":30,"line":2839},[28,46569,42216],{"class":87},[28,46571,46572,46574,46576,46578,46580,46582,46584],{"class":30,"line":2853},[28,46573,14956],{"class":34},[28,46575,42223],{"class":2225},[28,46577,413],{"class":38},[28,46579,31038],{"class":2225},[28,46581,956],{"class":38},[28,46583,31043],{"class":2225},[28,46585,31046],{"class":38},[28,46587,46588],{"class":30,"line":2861},[28,46589,42238],{"class":87},[28,46591,46592,46594,46596],{"class":30,"line":2866},[28,46593,31061],{"class":34},[28,46595,31064],{"class":60},[28,46597,42247],{"class":38},[28,46599,46600,46602,46604,46606,46608,46610],{"class":30,"line":2872},[28,46601,31077],{"class":60},[28,46603,42254],{"class":38},[28,46605,31083],{"class":60},[28,46607,31086],{"class":38},[28,46609,31089],{"class":60},[28,46611,2238],{"class":38},[28,46613,46614,46616,46618,46620],{"class":30,"line":2878},[28,46615,31105],{"class":60},[28,46617,42269],{"class":38},[28,46619,54],{"class":34},[28,46621,38265],{"class":38},[28,46623,46624,46626,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664],{"class":30,"line":2883},[28,46625,38270],{"class":38},[28,46627,31116],{"class":5478},[28,46629,54],{"class":34},[28,46631,78],{"class":60},[28,46633,64],{"class":38},[28,46635,31125],{"class":5478},[28,46637,54],{"class":34},[28,46639,608],{"class":60},[28,46641,64],{"class":38},[28,46643,31134],{"class":5478},[28,46645,54],{"class":34},[28,46647,769],{"class":60},[28,46649,64],{"class":38},[28,46651,31189],{"class":5478},[28,46653,54],{"class":34},[28,46655,211],{"class":60},[28,46657,64],{"class":38},[28,46659,31143],{"class":5478},[28,46661,54],{"class":34},[28,46663,78],{"class":60},[28,46665,38303],{"class":38},[28,46667,46668],{"class":30,"line":8210},[28,46669,38308],{"class":38},[28,46671,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696],{"class":30,"line":8234},[28,46673,38353],{"class":38},[28,46675,31134],{"class":5478},[28,46677,54],{"class":34},[28,46679,78],{"class":60},[28,46681,64],{"class":38},[28,46683,31189],{"class":5478},[28,46685,54],{"class":34},[28,46687,211],{"class":60},[28,46689,64],{"class":38},[28,46691,31143],{"class":5478},[28,46693,54],{"class":34},[28,46695,61],{"class":60},[28,46697,81],{"class":38},[28,46699,46700],{"class":30,"line":8239},[28,46701,38382],{"class":38},[28,46703,46704,46706,46708,46710],{"class":30,"line":8245},[28,46705,31105],{"class":60},[28,46707,42360],{"class":38},[28,46709,54],{"class":34},[28,46711,38265],{"class":38},[28,46713,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738],{"class":30,"line":8272},[28,46715,38270],{"class":38},[28,46717,31116],{"class":5478},[28,46719,54],{"class":34},[28,46721,608],{"class":60},[28,46723,64],{"class":38},[28,46725,31125],{"class":5478},[28,46727,54],{"class":34},[28,46729,608],{"class":60},[28,46731,64],{"class":38},[28,46733,31134],{"class":5478},[28,46735,54],{"class":34},[28,46737,61],{"class":60},[28,46739,38303],{"class":38},[28,46741,46742],{"class":30,"line":8277},[28,46743,38308],{"class":38},[28,46745,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778],{"class":30,"line":8283},[28,46747,38270],{"class":38},[28,46749,31116],{"class":5478},[28,46751,54],{"class":34},[28,46753,608],{"class":60},[28,46755,64],{"class":38},[28,46757,31125],{"class":5478},[28,46759,54],{"class":34},[28,46761,42415],{"class":60},[28,46763,64],{"class":38},[28,46765,31134],{"class":5478},[28,46767,54],{"class":34},[28,46769,78],{"class":60},[28,46771,64],{"class":38},[28,46773,31143],{"class":5478},[28,46775,54],{"class":34},[28,46777,61],{"class":60},[28,46779,38303],{"class":38},[28,46781,46782],{"class":30,"line":8295},[28,46783,38308],{"class":38},[28,46785,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810],{"class":30,"line":8307},[28,46787,38353],{"class":38},[28,46789,31134],{"class":5478},[28,46791,54],{"class":34},[28,46793,78],{"class":60},[28,46795,64],{"class":38},[28,46797,31189],{"class":5478},[28,46799,54],{"class":34},[28,46801,211],{"class":60},[28,46803,64],{"class":38},[28,46805,31143],{"class":5478},[28,46807,54],{"class":34},[28,46809,61],{"class":60},[28,46811,81],{"class":38},[28,46813,46814],{"class":30,"line":8319},[28,46815,38382],{"class":38},[28,46817,46818,46820,46822,46824],{"class":30,"line":9978},[28,46819,31105],{"class":60},[28,46821,42476],{"class":38},[28,46823,54],{"class":34},[28,46825,38265],{"class":38},[28,46827,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":30,"line":10003},[28,46829,42485],{"class":38},[28,46831,42415],{"class":60},[28,46833,64],{"class":38},[28,46835,608],{"class":60},[28,46837,42494],{"class":38},[28,46839,614],{"class":60},[28,46841,64],{"class":38},[28,46843,32326],{"class":60},[28,46845,42503],{"class":38},[28,46847,999],{"class":60},[28,46849,64],{"class":38},[28,46851,602],{"class":60},[28,46853,42512],{"class":38},[28,46855,602],{"class":60},[28,46857,38303],{"class":38},[28,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888],{"class":30,"line":10026},[28,46861,42485],{"class":38},[28,46863,35126],{"class":60},[28,46865,64],{"class":38},[28,46867,32326],{"class":60},[28,46869,42494],{"class":38},[28,46871,32326],{"class":60},[28,46873,64],{"class":38},[28,46875,42415],{"class":60},[28,46877,42503],{"class":38},[28,46879,602],{"class":60},[28,46881,64],{"class":38},[28,46883,614],{"class":60},[28,46885,42512],{"class":38},[28,46887,608],{"class":60},[28,46889,38303],{"class":38},[28,46891,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916],{"class":30,"line":10050},[28,46893,38353],{"class":38},[28,46895,31134],{"class":5478},[28,46897,54],{"class":34},[28,46899,78],{"class":60},[28,46901,64],{"class":38},[28,46903,31189],{"class":5478},[28,46905,54],{"class":34},[28,46907,211],{"class":60},[28,46909,64],{"class":38},[28,46911,31143],{"class":5478},[28,46913,54],{"class":34},[28,46915,61],{"class":60},[28,46917,81],{"class":38},[28,46919,46920],{"class":30,"line":10055},[28,46921,38382],{"class":38},[28,46923,46924,46926,46928,46930],{"class":30,"line":10060},[28,46925,31105],{"class":60},[28,46927,42587],{"class":38},[28,46929,54],{"class":34},[28,46931,38265],{"class":38},[28,46933,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962],{"class":30,"line":10065},[28,46935,42485],{"class":38},[28,46937,42598],{"class":60},[28,46939,64],{"class":38},[28,46941,42415],{"class":60},[28,46943,42494],{"class":38},[28,46945,614],{"class":60},[28,46947,64],{"class":38},[28,46949,42611],{"class":60},[28,46951,42503],{"class":38},[28,46953,999],{"class":60},[28,46955,64],{"class":38},[28,46957,1005],{"class":60},[28,46959,42512],{"class":38},[28,46961,608],{"class":60},[28,46963,38303],{"class":38},[28,46965,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994],{"class":30,"line":10074},[28,46967,42485],{"class":38},[28,46969,38713],{"class":60},[28,46971,64],{"class":38},[28,46973,21310],{"class":60},[28,46975,42494],{"class":38},[28,46977,1016],{"class":60},[28,46979,64],{"class":38},[28,46981,31758],{"class":60},[28,46983,42503],{"class":38},[28,46985,1198],{"class":60},[28,46987,64],{"class":38},[28,46989,608],{"class":60},[28,46991,42512],{"class":38},[28,46993,608],{"class":60},[28,46995,38303],{"class":38},[28,46997,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022,47024,47026],{"class":30,"line":10079},[28,46999,42485],{"class":38},[28,47001,38713],{"class":60},[28,47003,64],{"class":38},[28,47005,32326],{"class":60},[28,47007,42494],{"class":38},[28,47009,32326],{"class":60},[28,47011,64],{"class":38},[28,47013,35126],{"class":60},[28,47015,42503],{"class":38},[28,47017,1198],{"class":60},[28,47019,64],{"class":38},[28,47021,608],{"class":60},[28,47023,42512],{"class":38},[28,47025,608],{"class":60},[28,47027,38303],{"class":38},[28,47029,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048,47050,47052,47054,47056,47058],{"class":30,"line":10085},[28,47031,42485],{"class":38},[28,47033,38713],{"class":60},[28,47035,64],{"class":38},[28,47037,1016],{"class":60},[28,47039,42494],{"class":38},[28,47041,32326],{"class":60},[28,47043,64],{"class":38},[28,47045,42708],{"class":60},[28,47047,42503],{"class":38},[28,47049,602],{"class":60},[28,47051,64],{"class":38},[28,47053,608],{"class":60},[28,47055,42512],{"class":38},[28,47057,608],{"class":60},[28,47059,38303],{"class":38},[28,47061,47062,47064,47066,47068,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090],{"class":30,"line":10106},[28,47063,42485],{"class":38},[28,47065,42729],{"class":60},[28,47067,64],{"class":38},[28,47069,35126],{"class":60},[28,47071,42494],{"class":38},[28,47073,21310],{"class":60},[28,47075,64],{"class":38},[28,47077,42742],{"class":60},[28,47079,42503],{"class":38},[28,47081,602],{"class":60},[28,47083,64],{"class":38},[28,47085,32326],{"class":60},[28,47087,42512],{"class":38},[28,47089,32326],{"class":60},[28,47091,38303],{"class":38},[28,47093,47094,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118],{"class":30,"line":10112},[28,47095,38353],{"class":38},[28,47097,31134],{"class":5478},[28,47099,54],{"class":34},[28,47101,78],{"class":60},[28,47103,64],{"class":38},[28,47105,31189],{"class":5478},[28,47107,54],{"class":34},[28,47109,211],{"class":60},[28,47111,64],{"class":38},[28,47113,31143],{"class":5478},[28,47115,54],{"class":34},[28,47117,61],{"class":60},[28,47119,81],{"class":38},[28,47121,47122],{"class":30,"line":10126},[28,47123,38382],{"class":38},[28,47125,47126,47128,47130,47132],{"class":30,"line":10132},[28,47127,31105],{"class":60},[28,47129,42795],{"class":38},[28,47131,54],{"class":34},[28,47133,38265],{"class":38},[28,47135,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156,47158,47160,47162,47164],{"class":30,"line":10159},[28,47137,42485],{"class":38},[28,47139,42806],{"class":60},[28,47141,64],{"class":38},[28,47143,35126],{"class":60},[28,47145,42494],{"class":38},[28,47147,21310],{"class":60},[28,47149,64],{"class":38},[28,47151,42742],{"class":60},[28,47153,42503],{"class":38},[28,47155,602],{"class":60},[28,47157,64],{"class":38},[28,47159,32326],{"class":60},[28,47161,42512],{"class":38},[28,47163,32326],{"class":60},[28,47165,38303],{"class":38},[28,47167,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188,47190,47192,47194,47196],{"class":30,"line":10168},[28,47169,42485],{"class":38},[28,47171,42806],{"class":60},[28,47173,64],{"class":38},[28,47175,35196],{"class":60},[28,47177,42494],{"class":38},[28,47179,42415],{"class":60},[28,47181,64],{"class":38},[28,47183,35196],{"class":60},[28,47185,42503],{"class":38},[28,47187,1005],{"class":60},[28,47189,64],{"class":38},[28,47191,32326],{"class":60},[28,47193,42512],{"class":38},[28,47195,32326],{"class":60},[28,47197,38303],{"class":38},[28,47199,47200,47202,47204,47206,47208],{"class":30,"line":10174},[28,47201,42869],{"class":38},[28,47203,61],{"class":60},[28,47205,64],{"class":38},[28,47207,61],{"class":60},[28,47209,42878],{"class":38},[28,47211,47212],{"class":30,"line":10182},[28,47213,39046],{"class":38},[28,47215,47216,47218,47220,47222,47224],{"class":30,"line":10187},[28,47217,39051],{"class":38},[28,47219,42889],{"class":60},[28,47221,64],{"class":38},[28,47223,211],{"class":60},[28,47225,81],{"class":38},[28,47227,47228],{"class":30,"line":16866},[28,47229,38382],{"class":38},[28,47231,47232],{"class":30,"line":16872},[28,47233,42904],{"class":87},[28,47235,47236,47238,47240,47242,47244],{"class":30,"line":16895},[28,47237,3665],{"class":34},[28,47239,39124],{"class":38},[28,47241,26306],{"class":34},[28,47243,39129],{"class":60},[28,47245,39132],{"class":38},[28,47247,47248,47250,47252],{"class":30,"line":16901},[28,47249,4904],{"class":34},[28,47251,39144],{"class":60},[28,47253,39147],{"class":38},[28,47255,47256,47258,47260,47262,47264,47266,47268,47270,47272],{"class":30,"line":16924},[28,47257,39157],{"class":38},[28,47259,42931],{"class":5478},[28,47261,54],{"class":34},[28,47263,42936],{"class":127},[28,47265,64],{"class":38},[28,47267,39160],{"class":5478},[28,47269,54],{"class":34},[28,47271,39165],{"class":127},[28,47273,81],{"class":38},[28,47275,47276],{"class":30,"line":16938},[28,47277,42951],{"class":87},[28,47279,47280],{"class":30,"line":16958},[28,47281,42956],{"class":87},[28,47283,47284],{"class":30,"line":16964},[28,47285,42961],{"class":87},[28,47287,47288],{"class":30,"line":16975},[28,47289,42966],{"class":87},[28,47291,47292],{"class":30,"line":16998},[28,47293,42971],{"class":87},[28,47295,47296],{"class":30,"line":17020},[28,47297,42976],{"class":87},[28,47299,47300,47302,47304,47306,47308,47310],{"class":30,"line":17025},[28,47301,39177],{"class":34},[28,47303,39180],{"class":38},[28,47305,39183],{"class":34},[28,47307,39186],{"class":34},[28,47309,39189],{"class":60},[28,47311,4001],{"class":38},[28,47313,47314,47316,47318],{"class":30,"line":17031},[28,47315,39201],{"class":38},[28,47317,244],{"class":60},[28,47319,81],{"class":38},[28,47321,47322,47324,47326],{"class":30,"line":17045},[28,47323,43003],{"class":34},[28,47325,39144],{"class":60},[28,47327,39220],{"class":38},[28,47329,47330,47332,47334,47336,47338],{"class":30,"line":17058},[28,47331,43012],{"class":38},[28,47333,244],{"class":60},[28,47335,64],{"class":38},[28,47337,39242],{"class":60},[28,47339,81],{"class":38},[28,47341,47342,47344,47346,47348,47350,47352],{"class":30,"line":17063},[28,47343,43025],{"class":34},[28,47345,39180],{"class":38},[28,47347,39183],{"class":34},[28,47349,39186],{"class":34},[28,47351,39189],{"class":60},[28,47353,4001],{"class":38},[28,47355,47356,47358,47360],{"class":30,"line":17077},[28,47357,43040],{"class":38},[28,47359,244],{"class":60},[28,47361,81],{"class":38},[28,47363,47364],{"class":30,"line":17082},[28,47365,35421],{"class":87},[28,47367,47368,47370,47372],{"class":30,"line":17088},[28,47369,31061],{"class":34},[28,47371,31353],{"class":2225},[28,47373,31356],{"class":38},[28,47375,47376,47378,47380,47382],{"class":30,"line":17093},[28,47377,31361],{"class":38},[28,47379,54],{"class":34},[28,47381,31083],{"class":60},[28,47383,43067],{"class":38},[28,47385,47386,47388,47390,47392],{"class":30,"line":17107},[28,47387,31361],{"class":38},[28,47389,54],{"class":34},[28,47391,31083],{"class":60},[28,47393,43078],{"class":38},[28,47395,47396,47398,47400,47402],{"class":30,"line":17112},[28,47397,31361],{"class":38},[28,47399,54],{"class":34},[28,47401,31083],{"class":60},[28,47403,43089],{"class":38},[28,47405,47406,47408,47410,47412],{"class":30,"line":17117},[28,47407,31361],{"class":38},[28,47409,54],{"class":34},[28,47411,31083],{"class":60},[28,47413,43100],{"class":38},[28,47415,47416,47418,47420,47422],{"class":30,"line":17131},[28,47417,31361],{"class":38},[28,47419,54],{"class":34},[28,47421,31083],{"class":60},[28,47423,43111],{"class":38},[28,47425,47426,47428],{"class":30,"line":17143},[28,47427,15014],{"class":34},[28,47429,31469],{"class":38},[28,47431,47432],{"class":30,"line":17148},[28,47433,2662],{"emptyLinePlaceholder":336},[28,47435,47436],{"class":30,"line":17161},[28,47437,43126],{"class":87},[28,47439,47440,47442,47444,47446,47448],{"class":30,"line":17166},[28,47441,1796],{"class":34},[28,47443,31480],{"class":60},[28,47445,3211],{"class":34},[28,47447,31485],{"class":127},[28,47449,4001],{"class":38},[28,47451,47452,47454,47456,47458,47460,47462,47464,47466,47468],{"class":30,"line":17171},[28,47453,31497],{"class":38},[28,47455,54],{"class":34},[28,47457,30711],{"class":38},[28,47459,31504],{"class":127},[28,47461,1966],{"class":34},[28,47463,31509],{"class":38},[28,47465,1963],{"class":34},[28,47467,30736],{"class":127},[28,47469,81],{"class":38},[28,47471,47472,47474,47476],{"class":30,"line":17176},[28,47473,31549],{"class":38},[28,47475,54],{"class":34},[28,47477,43167],{"class":38},[28,47479,47480,47482,47484,47486,47488,47490,47492,47494],{"class":30,"line":17189},[28,47481,31559],{"class":60},[28,47483,31562],{"class":38},[28,47485,61],{"class":60},[28,47487,64],{"class":38},[28,47489,31758],{"class":60},[28,47491,64],{"class":38},[28,47493,31758],{"class":60},[28,47495,31575],{"class":38},[22260,47497,47499],{"id":47498},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47501,47502],{},"计算图片的均值与方差，用于训练中归一化处理操作",[18,47504,47506],{"className":20,"code":47505,"language":22,"meta":23,"style":23},"# 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",[25,47507,47508,47513,47526,47531,47537,47542,47552,47556,47561,47571,47575,47580,47590,47607,47611,47616,47628,47640,47671,47680,47690,47700,47704,47709,47724,47728,47733,47738,47743,47753,47758,47783,47787,47792,47807,47811,47824,47828,47833,47838,47843,47848,47853,47863,47873,47896,47904,47912,47920,47924,47936,47940,47945,47949,47953,47960,47980,48004,48011,48025,48030,48035,48039,48053,48057,48069],{"__ignoreMap":23},[28,47509,47510],{"class":30,"line":31},[28,47511,47512],{"class":87},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[28,47514,47515,47517,47520,47523],{"class":30,"line":48},[28,47516,30997],{"class":34},[28,47518,47519],{"class":60}," PIL",[28,47521,47522],{"class":34}," import",[28,47524,47525],{"class":38}," Image\n",[28,47527,47528],{"class":30,"line":84},[28,47529,47530],{"class":87},"# os 用来处理文件夹和文件路径\n",[28,47532,47533,47535],{"class":30,"line":91},[28,47534,35],{"class":34},[28,47536,45561],{"class":38},[28,47538,47539],{"class":30,"line":97},[28,47540,47541],{"class":87},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[28,47543,47544,47546,47548,47550],{"class":30,"line":103},[28,47545,35],{"class":34},[28,47547,39],{"class":38},[28,47549,42],{"class":34},[28,47551,45],{"class":38},[28,47553,47554],{"class":30,"line":109},[28,47555,2662],{"emptyLinePlaceholder":336},[28,47557,47558],{"class":30,"line":118},[28,47559,47560],{"class":87},"# 文件夹路径，包含所有图片文件\n",[28,47562,47563,47566,47568],{"class":30,"line":124},[28,47564,47565],{"class":38},"folder_path ",[28,47567,54],{"class":34},[28,47569,47570],{"class":127}," 'data_cat_dog'\n",[28,47572,47573],{"class":30,"line":131},[28,47574,2662],{"emptyLinePlaceholder":336},[28,47576,47577],{"class":30,"line":137},[28,47578,47579],{"class":87},"# 初始化累积变量\n",[28,47581,47582,47585,47587],{"class":30,"line":143},[28,47583,47584],{"class":38},"total_pixels ",[28,47586,54],{"class":34},[28,47588,47589],{"class":60}," 0\n",[28,47591,47592,47595,47597,47600,47602,47604],{"class":30,"line":149},[28,47593,47594],{"class":38},"sum_normalized_pixel_values ",[28,47596,54],{"class":34},[28,47598,47599],{"class":38}," np.zeros(",[28,47601,78],{"class":60},[28,47603,46064],{"class":38},[28,47605,47606],{"class":87},"# 如果是RGB图像，需要三个通道的均值和方差\n",[28,47608,47609],{"class":30,"line":1890},[28,47610,2662],{"emptyLinePlaceholder":336},[28,47612,47613],{"class":30,"line":1904},[28,47614,47615],{"class":87},"# 遍历文件夹中的图片文件\n",[28,47617,47618,47620,47623,47625],{"class":30,"line":1909},[28,47619,3287],{"class":34},[28,47621,47622],{"class":38}," root, dirs, files ",[28,47624,26306],{"class":34},[28,47626,47627],{"class":38}," os.walk(folder_path):\n",[28,47629,47630,47632,47635,47637],{"class":30,"line":1915},[28,47631,3463],{"class":34},[28,47633,47634],{"class":38}," filename ",[28,47636,26306],{"class":34},[28,47638,47639],{"class":38}," files:\n",[28,47641,47642,47644,47647,47650,47652,47655,47657,47660,47662,47665,47668],{"class":30,"line":1936},[28,47643,2759],{"class":34},[28,47645,47646],{"class":38}," filename.endswith((",[28,47648,47649],{"class":127},"'.jpg'",[28,47651,12697],{"class":38},[28,47653,47654],{"class":127},"'.jpeg'",[28,47656,12697],{"class":38},[28,47658,47659],{"class":127},"'.png'",[28,47661,12697],{"class":38},[28,47663,47664],{"class":127},"'.bmp'",[28,47666,47667],{"class":38},")):  ",[28,47669,47670],{"class":87},"# 可根据实际情况添加其他格式\n",[28,47672,47673,47675,47677],{"class":30,"line":1941},[28,47674,45929],{"class":38},[28,47676,54],{"class":34},[28,47678,47679],{"class":38}," os.path.join(root, filename)\n",[28,47681,47682,47685,47687],{"class":30,"line":1955},[28,47683,47684],{"class":38},"            image ",[28,47686,54],{"class":34},[28,47688,47689],{"class":38}," Image.open(image_path)\n",[28,47691,47692,47695,47697],{"class":30,"line":1960},[28,47693,47694],{"class":38},"            image_array ",[28,47696,54],{"class":34},[28,47698,47699],{"class":38}," np.array(image)\n",[28,47701,47702],{"class":30,"line":1989},[28,47703,2662],{"emptyLinePlaceholder":336},[28,47705,47706],{"class":30,"line":1994},[28,47707,47708],{"class":87},"            # 归一化像素值到0-1之间\n",[28,47710,47711,47714,47716,47719,47721],{"class":30,"line":2011},[28,47712,47713],{"class":38},"            normalized_image_array ",[28,47715,54],{"class":34},[28,47717,47718],{"class":38}," image_array ",[28,47720,982],{"class":34},[28,47722,47723],{"class":60}," 255.0\n",[28,47725,47726],{"class":30,"line":2016},[28,47727,2662],{"emptyLinePlaceholder":336},[28,47729,47730],{"class":30,"line":2021},[28,47731,47732],{"class":87},"            # print(image_path)\n",[28,47734,47735],{"class":30,"line":2026},[28,47736,47737],{"class":87},"            # print(normalized_image_array.shape)\n",[28,47739,47740],{"class":30,"line":2040},[28,47741,47742],{"class":87},"            # 累积归一化后的像素值和像素数量\n",[28,47744,47745,47748,47750],{"class":30,"line":2045},[28,47746,47747],{"class":38},"            total_pixels ",[28,47749,9739],{"class":34},[28,47751,47752],{"class":38}," normalized_image_array.size\n",[28,47754,47755],{"class":30,"line":2839},[28,47756,47757],{"class":87},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[28,47759,47760,47763,47765,47768,47771,47773,47775,47777,47779,47781],{"class":30,"line":2853},[28,47761,47762],{"class":38},"            sum_normalized_pixel_values ",[28,47764,9739],{"class":34},[28,47766,47767],{"class":38}," np.sum(normalized_image_array, ",[28,47769,47770],{"class":5478},"axis",[28,47772,54],{"class":34},[28,47774,413],{"class":38},[28,47776,244],{"class":60},[28,47778,12697],{"class":38},[28,47780,61],{"class":60},[28,47782,30757],{"class":38},[28,47784,47785],{"class":30,"line":2861},[28,47786,2662],{"emptyLinePlaceholder":336},[28,47788,47789],{"class":30,"line":2866},[28,47790,47791],{"class":87},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[28,47793,47794,47797,47799,47802,47804],{"class":30,"line":2872},[28,47795,47796],{"class":38},"mean ",[28,47798,54],{"class":34},[28,47800,47801],{"class":38}," sum_normalized_pixel_values ",[28,47803,982],{"class":34},[28,47805,47806],{"class":38}," total_pixels\n",[28,47808,47809],{"class":30,"line":2878},[28,47810,2662],{"emptyLinePlaceholder":336},[28,47812,47813,47816,47818,47820,47822],{"class":30,"line":2883},[28,47814,47815],{"class":38},"sum_squared_diff ",[28,47817,54],{"class":34},[28,47819,47599],{"class":38},[28,47821,78],{"class":60},[28,47823,81],{"class":38},[28,47825,47826],{"class":30,"line":8210},[28,47827,2662],{"emptyLinePlaceholder":336},[28,47829,47830],{"class":30,"line":8234},[28,47831,47832],{"class":87},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[28,47834,47835],{"class":30,"line":8239},[28,47836,47837],{"class":87},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[28,47839,47840],{"class":30,"line":8245},[28,47841,47842],{"class":87},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[28,47844,47845],{"class":30,"line":8272},[28,47846,47847],{"class":87},"# Image.open(image_path)：打开图片\n",[28,47849,47850],{"class":30,"line":8277},[28,47851,47852],{"class":87},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[28,47854,47855,47857,47859,47861],{"class":30,"line":8283},[28,47856,3287],{"class":34},[28,47858,47622],{"class":38},[28,47860,26306],{"class":34},[28,47862,47627],{"class":38},[28,47864,47865,47867,47869,47871],{"class":30,"line":8295},[28,47866,3463],{"class":34},[28,47868,47634],{"class":38},[28,47870,26306],{"class":34},[28,47872,47639],{"class":38},[28,47874,47875,47877,47879,47881,47883,47885,47887,47889,47891,47893],{"class":30,"line":8307},[28,47876,2759],{"class":34},[28,47878,47646],{"class":38},[28,47880,47649],{"class":127},[28,47882,12697],{"class":38},[28,47884,47654],{"class":127},[28,47886,12697],{"class":38},[28,47888,47659],{"class":127},[28,47890,12697],{"class":38},[28,47892,47664],{"class":127},[28,47894,47895],{"class":38},")):\n",[28,47897,47898,47900,47902],{"class":30,"line":8319},[28,47899,45929],{"class":38},[28,47901,54],{"class":34},[28,47903,47679],{"class":38},[28,47905,47906,47908,47910],{"class":30,"line":9978},[28,47907,47684],{"class":38},[28,47909,54],{"class":34},[28,47911,47689],{"class":38},[28,47913,47914,47916,47918],{"class":30,"line":10003},[28,47915,47694],{"class":38},[28,47917,54],{"class":34},[28,47919,47699],{"class":38},[28,47921,47922],{"class":30,"line":10026},[28,47923,47708],{"class":87},[28,47925,47926,47928,47930,47932,47934],{"class":30,"line":10050},[28,47927,47713],{"class":38},[28,47929,54],{"class":34},[28,47931,47718],{"class":38},[28,47933,982],{"class":34},[28,47935,47723],{"class":60},[28,47937,47938],{"class":30,"line":10055},[28,47939,47737],{"class":87},[28,47941,47942],{"class":30,"line":10060},[28,47943,47944],{"class":87},"            # print(mean.shape)\n",[28,47946,47947],{"class":30,"line":10065},[28,47948,47732],{"class":87},[28,47950,47951],{"class":30,"line":10074},[28,47952,2662],{"emptyLinePlaceholder":336},[28,47954,47955,47958],{"class":30,"line":10079},[28,47956,47957],{"class":34},"            try",[28,47959,4001],{"class":38},[28,47961,47962,47965,47967,47970,47972,47975,47977],{"class":30,"line":10085},[28,47963,47964],{"class":38},"                diff ",[28,47966,54],{"class":34},[28,47968,47969],{"class":38}," (normalized_image_array ",[28,47971,930],{"class":34},[28,47973,47974],{"class":38}," mean) ",[28,47976,10923],{"class":34},[28,47978,47979],{"class":60}," 2\n",[28,47981,47982,47985,47987,47990,47992,47994,47996,47998,48000,48002],{"class":30,"line":10106},[28,47983,47984],{"class":38},"                sum_squared_diff ",[28,47986,9739],{"class":34},[28,47988,47989],{"class":38}," np.sum(diff, ",[28,47991,47770],{"class":5478},[28,47993,54],{"class":34},[28,47995,413],{"class":38},[28,47997,244],{"class":60},[28,47999,12697],{"class":38},[28,48001,61],{"class":60},[28,48003,30757],{"class":38},[28,48005,48006,48009],{"class":30,"line":10112},[28,48007,48008],{"class":34},"            except",[28,48010,4001],{"class":38},[28,48012,48013,48016,48018,48020,48023],{"class":30,"line":10126},[28,48014,48015],{"class":60},"                print",[28,48017,413],{"class":38},[28,48019,462],{"class":34},[28,48021,48022],{"class":127},"\"捕获到自定义异常\"",[28,48024,81],{"class":38},[28,48026,48027],{"class":30,"line":10132},[28,48028,48029],{"class":87},"            # diff = (normalized_image_array - mean) ** 2\n",[28,48031,48032],{"class":30,"line":10159},[28,48033,48034],{"class":87},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[28,48036,48037],{"class":30,"line":10168},[28,48038,2662],{"emptyLinePlaceholder":336},[28,48040,48041,48044,48046,48049,48051],{"class":30,"line":10174},[28,48042,48043],{"class":38},"variance ",[28,48045,54],{"class":34},[28,48047,48048],{"class":38}," sum_squared_diff ",[28,48050,982],{"class":34},[28,48052,47806],{"class":38},[28,48054,48055],{"class":30,"line":10182},[28,48056,2662],{"emptyLinePlaceholder":336},[28,48058,48059,48061,48063,48066],{"class":30,"line":10187},[28,48060,30675],{"class":60},[28,48062,413],{"class":38},[28,48064,48065],{"class":127},"\"Mean:\"",[28,48067,48068],{"class":38},", mean)\n",[28,48070,48071,48073,48075,48078],{"class":30,"line":16866},[28,48072,30675],{"class":60},[28,48074,413],{"class":38},[28,48076,48077],{"class":127},"\"Variance:\"",[28,48079,48080],{"class":38},", variance)\n",[18,48082,48084],{"className":20,"code":48083,"language":22,"meta":23,"style":23},"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",[25,48085,48086,48092,48098,48108,48114,48124,48138,48148,48158,48168,48172,48182,48192,48196,48200,48208,48213,48218,48237,48241,48246,48251,48256,48261,48302,48307,48317,48322,48335,48340,48345,48350,48355,48360,48364,48369,48374,48396,48400,48432,48446,48456,48466,48470,48480,48494,48504,48514,48524,48530,48534,48538,48542,48546,48550,48558,48578,48582,48586,48590,48594,48610,48614,48618,48626,48630,48634,48642,48646,48650,48654,48662,48666,48670,48674,48682,48686,48694,48698,48706,48710,48718,48722,48730,48734,48738,48746,48750,48754,48766,48790,48804,48808,48812,48816,48824,48828,48836,48840,48848,48852,48860,48864,48872,48876,48884,48888,48900,48904,48912,48916,48924,48928,48932,48936,48940,48948,48952,48968,48972,48980,48984,48988,48992,48996,49000,49004,49008,49024,49028,49040,49044,49056,49060,49072,49076,49084,49088,49096,49100,49104,49108,49114,49118,49126,49130,49146,49150,49158,49162,49178,49190,49194,49206,49210,49214,49222,49226,49230,49238,49242,49250,49254,49262,49266,49270,49312,49354,49358,49362,49378,49382,49398,49402,49406,49414,49418,49422,49434,49472,49476,49480,49488,49492,49506,49516,49522,49528,49534,49540,49544,49548,49554,49558,49562,49570,49574,49592,49596,49600,49604,49620,49624,49628,49632,49636,49640,49660,49680,49684,49688,49692,49700,49708,49712,49728,49748,49768,49772,49777,49786,49795,49800,49805,49810,49823,49828,49837,49846,49863],{"__ignoreMap":23},[28,48087,48088,48090],{"class":30,"line":31},[28,48089,35],{"class":34},[28,48091,32078],{"class":38},[28,48093,48094,48096],{"class":30,"line":48},[28,48095,35],{"class":34},[28,48097,32085],{"class":38},[28,48099,48100,48102,48104,48106],{"class":30,"line":84},[28,48101,35],{"class":34},[28,48103,32096],{"class":38},[28,48105,42],{"class":34},[28,48107,32101],{"class":38},[28,48109,48110,48112],{"class":30,"line":91},[28,48111,35],{"class":34},[28,48113,30655],{"class":38},[28,48115,48116,48118,48120,48122],{"class":30,"line":97},[28,48117,30997],{"class":34},[28,48119,31672],{"class":38},[28,48121,35],{"class":34},[28,48123,32118],{"class":38},[28,48125,48126,48128,48130,48132,48135],{"class":30,"line":103},[28,48127,30997],{"class":34},[28,48129,31628],{"class":38},[28,48131,35],{"class":34},[28,48133,48134],{"class":38}," ImageFolder ",[28,48136,48137],{"class":87},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[28,48139,48140,48142,48144,48146],{"class":30,"line":109},[28,48141,30997],{"class":34},[28,48143,31655],{"class":38},[28,48145,35],{"class":34},[28,48147,31660],{"class":38},[28,48149,48150,48152,48154,48156],{"class":30,"line":118},[28,48151,35],{"class":34},[28,48153,31672],{"class":38},[28,48155,42],{"class":34},[28,48157,31677],{"class":38},[28,48159,48160,48162,48164,48166],{"class":30,"line":124},[28,48161,35],{"class":34},[28,48163,31689],{"class":38},[28,48165,42],{"class":34},[28,48167,31694],{"class":38},[28,48169,48170],{"class":30,"line":131},[28,48171,32163],{"class":87},[28,48173,48174,48176,48178,48180],{"class":30,"line":137},[28,48175,30997],{"class":34},[28,48177,32170],{"class":38},[28,48179,35],{"class":34},[28,48181,43287],{"class":38},[28,48183,48184,48186,48188,48190],{"class":30,"line":143},[28,48185,30997],{"class":34},[28,48187,31000],{"class":38},[28,48189,35],{"class":34},[28,48191,31005],{"class":38},[28,48193,48194],{"class":30,"line":149},[28,48195,2662],{"emptyLinePlaceholder":336},[28,48197,48198],{"class":30,"line":1890},[28,48199,32198],{"class":87},[28,48201,48202,48204,48206],{"class":30,"line":1904},[28,48203,32203],{"class":34},[28,48205,32206],{"class":2225},[28,48207,32209],{"class":38},[28,48209,48210],{"class":30,"line":1909},[28,48211,48212],{"class":87},"    # 导入自己的数据集，并进行数据处理\n",[28,48214,48215],{"class":30,"line":1915},[28,48216,48217],{"class":87},"    # 定义数据集的路径\n",[28,48219,48220,48223,48225,48227,48229,48231,48235],{"class":30,"line":1936},[28,48221,48222],{"class":60},"    ROOT_PATH",[28,48224,54],{"class":34},[28,48226,1068],{"class":34},[28,48228,654],{"class":127},[28,48230,956],{"class":60},[28,48232,48234],{"class":48233},"sA_wV","\u002Fdata\u002Ftrain",[28,48236,25396],{"class":127},[28,48238,48239],{"class":30,"line":1941},[28,48240,2662],{"emptyLinePlaceholder":336},[28,48242,48243],{"class":30,"line":1955},[28,48244,48245],{"class":87},"    # 定义归一化方法\n",[28,48247,48248],{"class":30,"line":1960},[28,48249,48250],{"class":87},"    # 这里需要先计算一下数据集的均值和方差\n",[28,48252,48253],{"class":30,"line":1989},[28,48254,48255],{"class":87},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[28,48257,48258],{"class":30,"line":1994},[28,48259,48260],{"class":87},"    # 第一个参数是均值，第二个参数是方差\n",[28,48262,48263,48266,48268,48271,48274,48276,48279,48281,48284,48287,48290,48292,48295,48297,48300],{"class":30,"line":2011},[28,48264,48265],{"class":38},"    normalize",[28,48267,54],{"class":34},[28,48269,48270],{"class":38},"transforms.Normalize([",[28,48272,48273],{"class":60},"0.162",[28,48275,64],{"class":38},[28,48277,48278],{"class":60},"0.151",[28,48280,64],{"class":38},[28,48282,48283],{"class":60},"0.138",[28,48285,48286],{"class":38},"],[",[28,48288,48289],{"class":60},"0.058",[28,48291,64],{"class":38},[28,48293,48294],{"class":60},"0.052",[28,48296,64],{"class":38},[28,48298,48299],{"class":60},"0.048",[28,48301,4919],{"class":38},[28,48303,48304],{"class":30,"line":2016},[28,48305,48306],{"class":87},"    # 定义数据集处理方法变量\n",[28,48308,48309,48312,48314],{"class":30,"line":2021},[28,48310,48311],{"class":38},"    train_transform",[28,48313,54],{"class":34},[28,48315,48316],{"class":38},"transforms.Compose([\n",[28,48318,48319],{"class":30,"line":2026},[28,48320,48321],{"class":87},"        # 调整图像大小为224*224\n",[28,48323,48324,48327,48329,48331,48333],{"class":30,"line":2040},[28,48325,48326],{"class":38},"        transforms.Resize((",[28,48328,31758],{"class":60},[28,48330,64],{"class":38},[28,48332,31758],{"class":60},[28,48334,42878],{"class":38},[28,48336,48337],{"class":30,"line":2045},[28,48338,48339],{"class":87},"        # 将图像转换为张量\n",[28,48341,48342],{"class":30,"line":2839},[28,48343,48344],{"class":38},"        transforms.ToTensor(),\n",[28,48346,48347],{"class":30,"line":2853},[28,48348,48349],{"class":38},"        normalize])\n",[28,48351,48352],{"class":30,"line":2861},[28,48353,48354],{"class":87},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[28,48356,48357],{"class":30,"line":2866},[28,48358,48359],{"class":87},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[28,48361,48362],{"class":30,"line":2872},[28,48363,2662],{"emptyLinePlaceholder":336},[28,48365,48366],{"class":30,"line":2878},[28,48367,48368],{"class":87},"    # 加载数据集\n",[28,48370,48371],{"class":30,"line":2883},[28,48372,48373],{"class":87},"    # 传入数据集路径与处理方法\n",[28,48375,48376,48378,48380,48383,48386,48388,48391,48393],{"class":30,"line":8210},[28,48377,32214],{"class":38},[28,48379,54],{"class":34},[28,48381,48382],{"class":38},"ImageFolder(",[28,48384,48385],{"class":60},"ROOT_PATH",[28,48387,64],{"class":38},[28,48389,48390],{"class":5478},"transform",[28,48392,54],{"class":34},[28,48394,48395],{"class":38},"train_transform)\n",[28,48397,48398],{"class":30,"line":8234},[28,48399,2662],{"emptyLinePlaceholder":336},[28,48401,48402,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428,48430],{"class":30,"line":8239},[28,48403,32266],{"class":38},[28,48405,54],{"class":34},[28,48407,32271],{"class":38},[28,48409,32274],{"class":60},[28,48411,413],{"class":38},[28,48413,32279],{"class":60},[28,48415,854],{"class":34},[28,48417,7620],{"class":60},[28,48419,32286],{"class":38},[28,48421,32274],{"class":60},[28,48423,413],{"class":38},[28,48425,32293],{"class":60},[28,48427,854],{"class":34},[28,48429,7620],{"class":60},[28,48431,32300],{"class":38},[28,48433,48434,48436,48438,48440,48442,48444],{"class":30,"line":8245},[28,48435,32305],{"class":38},[28,48437,54],{"class":34},[28,48439,32310],{"class":38},[28,48441,31794],{"class":5478},[28,48443,54],{"class":34},[28,48445,31799],{"class":38},[28,48447,48448,48450,48452,48454],{"class":30,"line":8272},[28,48449,32321],{"class":5478},[28,48451,54],{"class":34},[28,48453,602],{"class":60},[28,48455,31723],{"class":38},[28,48457,48458,48460,48462,48464],{"class":30,"line":8277},[28,48459,32333],{"class":5478},[28,48461,54],{"class":34},[28,48463,31733],{"class":60},[28,48465,31723],{"class":38},[28,48467,48468],{"class":30,"line":8283},[28,48469,32344],{"class":87},[28,48471,48472,48474,48476,48478],{"class":30,"line":8295},[28,48473,32349],{"class":5478},[28,48475,54],{"class":34},[28,48477,794],{"class":60},[28,48479,81],{"class":38},[28,48481,48482,48484,48486,48488,48490,48492],{"class":30,"line":8307},[28,48483,32360],{"class":38},[28,48485,54],{"class":34},[28,48487,31791],{"class":38},[28,48489,31794],{"class":5478},[28,48491,54],{"class":34},[28,48493,32371],{"class":38},[28,48495,48496,48498,48500,48502],{"class":30,"line":8319},[28,48497,32376],{"class":5478},[28,48499,54],{"class":34},[28,48501,602],{"class":60},[28,48503,31723],{"class":38},[28,48505,48506,48508,48510,48512],{"class":30,"line":9978},[28,48507,32387],{"class":5478},[28,48509,54],{"class":34},[28,48511,31733],{"class":60},[28,48513,31723],{"class":38},[28,48515,48516,48518,48520,48522],{"class":30,"line":10003},[28,48517,32398],{"class":5478},[28,48519,54],{"class":34},[28,48521,794],{"class":60},[28,48523,81],{"class":38},[28,48525,48526,48528],{"class":30,"line":10026},[28,48527,4352],{"class":34},[28,48529,32411],{"class":38},[28,48531,48532],{"class":30,"line":10050},[28,48533,2662],{"emptyLinePlaceholder":336},[28,48535,48536],{"class":30,"line":10055},[28,48537,32420],{"class":87},[28,48539,48540],{"class":30,"line":10060},[28,48541,32425],{"class":87},[28,48543,48544],{"class":30,"line":10065},[28,48545,2662],{"emptyLinePlaceholder":336},[28,48547,48548],{"class":30,"line":10074},[28,48549,32434],{"class":87},[28,48551,48552,48554,48556],{"class":30,"line":10079},[28,48553,32203],{"class":34},[28,48555,32441],{"class":2225},[28,48557,32444],{"class":38},[28,48559,48560,48562,48564,48566,48568,48570,48572,48574,48576],{"class":30,"line":10085},[28,48561,31497],{"class":38},[28,48563,54],{"class":34},[28,48565,30711],{"class":38},[28,48567,31504],{"class":127},[28,48569,1966],{"class":34},[28,48571,31509],{"class":38},[28,48573,1963],{"class":34},[28,48575,32463],{"class":127},[28,48577,81],{"class":38},[28,48579,48580],{"class":30,"line":10106},[28,48581,2662],{"emptyLinePlaceholder":336},[28,48583,48584],{"class":30,"line":10112},[28,48585,32478],{"class":87},[28,48587,48588],{"class":30,"line":10126},[28,48589,32483],{"class":87},[28,48591,48592],{"class":30,"line":10132},[28,48593,32488],{"class":87},[28,48595,48596,48598,48600,48602,48604,48606,48608],{"class":30,"line":10159},[28,48597,32493],{"class":38},[28,48599,54],{"class":34},[28,48601,32498],{"class":38},[28,48603,32501],{"class":5478},[28,48605,54],{"class":34},[28,48607,32506],{"class":60},[28,48609,81],{"class":38},[28,48611,48612],{"class":30,"line":10168},[28,48613,2662],{"emptyLinePlaceholder":336},[28,48615,48616],{"class":30,"line":10174},[28,48617,32517],{"class":87},[28,48619,48620,48622,48624],{"class":30,"line":10182},[28,48621,32522],{"class":38},[28,48623,54],{"class":34},[28,48625,32527],{"class":38},[28,48627,48628],{"class":30,"line":10187},[28,48629,2662],{"emptyLinePlaceholder":336},[28,48631,48632],{"class":30,"line":16866},[28,48633,32536],{"class":87},[28,48635,48636,48638,48640],{"class":30,"line":16872},[28,48637,31549],{"class":38},[28,48639,54],{"class":34},[28,48641,32545],{"class":38},[28,48643,48644],{"class":30,"line":16895},[28,48645,32550],{"class":87},[28,48647,48648],{"class":30,"line":16901},[28,48649,32555],{"class":87},[28,48651,48652],{"class":30,"line":16924},[28,48653,32560],{"class":87},[28,48655,48656,48658,48660],{"class":30,"line":16938},[28,48657,32565],{"class":38},[28,48659,54],{"class":34},[28,48661,32570],{"class":38},[28,48663,48664],{"class":30,"line":16958},[28,48665,2662],{"emptyLinePlaceholder":336},[28,48667,48668],{"class":30,"line":16964},[28,48669,32583],{"class":87},[28,48671,48672],{"class":30,"line":16975},[28,48673,32588],{"class":87},[28,48675,48676,48678,48680],{"class":30,"line":16998},[28,48677,32593],{"class":38},[28,48679,54],{"class":34},[28,48681,32598],{"class":60},[28,48683,48684],{"class":30,"line":17020},[28,48685,32603],{"class":87},[28,48687,48688,48690,48692],{"class":30,"line":17025},[28,48689,32608],{"class":38},[28,48691,54],{"class":34},[28,48693,32613],{"class":38},[28,48695,48696],{"class":30,"line":17031},[28,48697,32618],{"class":87},[28,48699,48700,48702,48704],{"class":30,"line":17045},[28,48701,32623],{"class":38},[28,48703,54],{"class":34},[28,48705,32613],{"class":38},[28,48707,48708],{"class":30,"line":17058},[28,48709,32632],{"class":87},[28,48711,48712,48714,48716],{"class":30,"line":17063},[28,48713,32637],{"class":38},[28,48715,54],{"class":34},[28,48717,32613],{"class":38},[28,48719,48720],{"class":30,"line":17077},[28,48721,32646],{"class":87},[28,48723,48724,48726,48728],{"class":30,"line":17082},[28,48725,32651],{"class":38},[28,48727,54],{"class":34},[28,48729,32613],{"class":38},[28,48731,48732],{"class":30,"line":17088},[28,48733,2662],{"emptyLinePlaceholder":336},[28,48735,48736],{"class":30,"line":17093},[28,48737,32664],{"class":87},[28,48739,48740,48742,48744],{"class":30,"line":17107},[28,48741,32669],{"class":38},[28,48743,54],{"class":34},[28,48745,32674],{"class":38},[28,48747,48748],{"class":30,"line":17112},[28,48749,2662],{"emptyLinePlaceholder":336},[28,48751,48752],{"class":30,"line":17117},[28,48753,32687],{"class":87},[28,48755,48756,48758,48760,48762,48764],{"class":30,"line":17131},[28,48757,3463],{"class":34},[28,48759,32694],{"class":38},[28,48761,26306],{"class":34},[28,48763,32699],{"class":60},[28,48765,32702],{"class":38},[28,48767,48768,48770,48772,48774,48776,48778,48780,48782,48784,48786,48788],{"class":30,"line":17143},[28,48769,32707],{"class":60},[28,48771,413],{"class":38},[28,48773,32712],{"class":127},[28,48775,32715],{"class":60},[28,48777,982],{"class":127},[28,48779,32715],{"class":60},[28,48781,654],{"class":127},[28,48783,32724],{"class":38},[28,48785,930],{"class":34},[28,48787,61],{"class":60},[28,48789,30757],{"class":38},[28,48791,48792,48794,48796,48798,48800,48802],{"class":30,"line":17148},[28,48793,32707],{"class":60},[28,48795,413],{"class":38},[28,48797,32739],{"class":127},[28,48799,854],{"class":34},[28,48801,845],{"class":60},[28,48803,81],{"class":38},[28,48805,48806],{"class":30,"line":17161},[28,48807,2662],{"emptyLinePlaceholder":336},[28,48809,48810],{"class":30,"line":17166},[28,48811,32754],{"class":87},[28,48813,48814],{"class":30,"line":17171},[28,48815,32759],{"class":87},[28,48817,48818,48820,48822],{"class":30,"line":17176},[28,48819,32764],{"class":38},[28,48821,54],{"class":34},[28,48823,32598],{"class":60},[28,48825,48826],{"class":30,"line":17189},[28,48827,32773],{"class":87},[28,48829,48830,48832,48834],{"class":30,"line":17194},[28,48831,32778],{"class":38},[28,48833,54],{"class":34},[28,48835,3347],{"class":60},[28,48837,48838],{"class":30,"line":32889},[28,48839,32787],{"class":87},[28,48841,48842,48844,48846],{"class":30,"line":32895},[28,48843,32792],{"class":38},[28,48845,54],{"class":34},[28,48847,32598],{"class":60},[28,48849,48850],{"class":30,"line":32901},[28,48851,32801],{"class":87},[28,48853,48854,48856,48858],{"class":30,"line":32907},[28,48855,32806],{"class":38},[28,48857,54],{"class":34},[28,48859,3347],{"class":60},[28,48861,48862],{"class":30,"line":32913},[28,48863,32815],{"class":87},[28,48865,48866,48868,48870],{"class":30,"line":32924},[28,48867,32820],{"class":38},[28,48869,54],{"class":34},[28,48871,3347],{"class":60},[28,48873,48874],{"class":30,"line":32930},[28,48875,32829],{"class":87},[28,48877,48878,48880,48882],{"class":30,"line":32950},[28,48879,32834],{"class":38},[28,48881,54],{"class":34},[28,48883,3347],{"class":60},[28,48885,48886],{"class":30,"line":32956},[28,48887,32843],{"class":87},[28,48889,48890,48892,48894,48896,48898],{"class":30,"line":32967},[28,48891,3665],{"class":34},[28,48893,31858],{"class":38},[28,48895,26306],{"class":34},[28,48897,31863],{"class":60},[28,48899,32856],{"class":38},[28,48901,48902],{"class":30,"line":32973},[28,48903,32861],{"class":87},[28,48905,48906,48908,48910],{"class":30,"line":32979},[28,48907,32866],{"class":38},[28,48909,54],{"class":34},[28,48911,32871],{"class":38},[28,48913,48914],{"class":30,"line":32985},[28,48915,32876],{"class":87},[28,48917,48918,48920,48922],{"class":30,"line":32991},[28,48919,32881],{"class":38},[28,48921,54],{"class":34},[28,48923,32886],{"class":38},[28,48925,48926],{"class":30,"line":32997},[28,48927,32892],{"class":87},[28,48929,48930],{"class":30,"line":33003},[28,48931,32898],{"class":38},[28,48933,48934],{"class":30,"line":33009},[28,48935,32904],{"class":87},[28,48937,48938],{"class":30,"line":33029},[28,48939,32910],{"class":87},[28,48941,48942,48944,48946],{"class":30,"line":33035},[28,48943,32916],{"class":38},[28,48945,54],{"class":34},[28,48947,32921],{"class":38},[28,48949,48950],{"class":30,"line":33051},[28,48951,32927],{"class":87},[28,48953,48954,48956,48958,48960,48962,48964,48966],{"class":30,"line":33057},[28,48955,32933],{"class":38},[28,48957,54],{"class":34},[28,48959,32938],{"class":38},[28,48961,32941],{"class":5478},[28,48963,54],{"class":34},[28,48965,61],{"class":60},[28,48967,81],{"class":38},[28,48969,48970],{"class":30,"line":33071},[28,48971,32953],{"class":87},[28,48973,48974,48976,48978],{"class":30,"line":33077},[28,48975,32959],{"class":38},[28,48977,54],{"class":34},[28,48979,32964],{"class":38},[28,48981,48982],{"class":30,"line":33092},[28,48983,32970],{"class":87},[28,48985,48986],{"class":30,"line":33098},[28,48987,32976],{"class":38},[28,48989,48990],{"class":30,"line":33107},[28,48991,32982],{"class":87},[28,48993,48994],{"class":30,"line":33113},[28,48995,32988],{"class":38},[28,48997,48998],{"class":30,"line":33122},[28,48999,32994],{"class":87},[28,49001,49002],{"class":30,"line":33128},[28,49003,33000],{"class":38},[28,49005,49006],{"class":30,"line":33134},[28,49007,33006],{"class":87},[28,49009,49010,49012,49014,49016,49018,49020,49022],{"class":30,"line":33143},[28,49011,33012],{"class":38},[28,49013,9739],{"class":34},[28,49015,33017],{"class":38},[28,49017,854],{"class":34},[28,49019,33022],{"class":38},[28,49021,244],{"class":60},[28,49023,81],{"class":38},[28,49025,49026],{"class":30,"line":33149},[28,49027,33032],{"class":87},[28,49029,49030,49032,49034,49036,49038],{"class":30,"line":33160},[28,49031,33038],{"class":38},[28,49033,9739],{"class":34},[28,49035,33043],{"class":38},[28,49037,3211],{"class":34},[28,49039,33048],{"class":38},[28,49041,49042],{"class":30,"line":33166},[28,49043,33054],{"class":87},[28,49045,49046,49048,49050,49052,49054],{"class":30,"line":33185},[28,49047,33060],{"class":38},[28,49049,9739],{"class":34},[28,49051,33022],{"class":38},[28,49053,244],{"class":60},[28,49055,81],{"class":38},[28,49057,49058],{"class":30,"line":33191},[28,49059,33074],{"class":87},[28,49061,49062,49064,49066,49068,49070],{"class":30,"line":33202},[28,49063,3665],{"class":34},[28,49065,33082],{"class":38},[28,49067,26306],{"class":34},[28,49069,31863],{"class":60},[28,49071,33089],{"class":38},[28,49073,49074],{"class":30,"line":33208},[28,49075,33095],{"class":87},[28,49077,49078,49080,49082],{"class":30,"line":33228},[28,49079,32866],{"class":38},[28,49081,54],{"class":34},[28,49083,32871],{"class":38},[28,49085,49086],{"class":30,"line":33244},[28,49087,33110],{"class":87},[28,49089,49090,49092,49094],{"class":30,"line":33250},[28,49091,32881],{"class":38},[28,49093,54],{"class":34},[28,49095,32886],{"class":38},[28,49097,49098],{"class":30,"line":33264},[28,49099,33125],{"class":87},[28,49101,49102],{"class":30,"line":33270},[28,49103,33131],{"class":38},[28,49105,49106],{"class":30,"line":33276},[28,49107,36612],{"class":87},[28,49109,49110,49112],{"class":30,"line":33287},[28,49111,33137],{"class":34},[28,49113,33140],{"class":38},[28,49115,49116],{"class":30,"line":33293},[28,49117,33146],{"class":87},[28,49119,49120,49122,49124],{"class":30,"line":33299},[28,49121,36627],{"class":38},[28,49123,54],{"class":34},[28,49125,32921],{"class":38},[28,49127,49128],{"class":30,"line":33309},[28,49129,33163],{"class":87},[28,49131,49132,49134,49136,49138,49140,49142,49144],{"class":30,"line":33315},[28,49133,36640],{"class":38},[28,49135,54],{"class":34},[28,49137,32938],{"class":38},[28,49139,32941],{"class":5478},[28,49141,54],{"class":34},[28,49143,61],{"class":60},[28,49145,81],{"class":38},[28,49147,49148],{"class":30,"line":33326},[28,49149,33188],{"class":87},[28,49151,49152,49154,49156],{"class":30,"line":33332},[28,49153,36661],{"class":38},[28,49155,54],{"class":34},[28,49157,32964],{"class":38},[28,49159,49160],{"class":30,"line":33342},[28,49161,33205],{"class":87},[28,49163,49164,49166,49168,49170,49172,49174,49176],{"class":30,"line":33347},[28,49165,36674],{"class":38},[28,49167,9739],{"class":34},[28,49169,36679],{"class":38},[28,49171,854],{"class":34},[28,49173,33022],{"class":38},[28,49175,244],{"class":60},[28,49177,81],{"class":38},[28,49179,49180,49182,49184,49186,49188],{"class":30,"line":33353},[28,49181,36692],{"class":38},[28,49183,9739],{"class":34},[28,49185,33043],{"class":38},[28,49187,3211],{"class":34},[28,49189,33048],{"class":38},[28,49191,49192],{"class":30,"line":33402},[28,49193,36705],{"class":87},[28,49195,49196,49198,49200,49202,49204],{"class":30,"line":33449},[28,49197,36710],{"class":38},[28,49199,9739],{"class":34},[28,49201,33022],{"class":38},[28,49203,244],{"class":60},[28,49205,81],{"class":38},[28,49207,49208],{"class":30,"line":33454},[28,49209,33267],{"class":87},[28,49211,49212],{"class":30,"line":33460},[28,49213,33273],{"class":87},[28,49215,49216,49218,49220],{"class":30,"line":33479},[28,49217,33279],{"class":38},[28,49219,982],{"class":34},[28,49221,33284],{"class":38},[28,49223,49224],{"class":30,"line":33485},[28,49225,33290],{"class":87},[28,49227,49228],{"class":30,"line":33505},[28,49229,33296],{"class":87},[28,49231,49232,49234,49236],{"class":30,"line":33511},[28,49233,33302],{"class":38},[28,49235,982],{"class":34},[28,49237,33284],{"class":38},[28,49239,49240],{"class":30,"line":33517},[28,49241,33312],{"class":87},[28,49243,49244,49246,49248],{"class":30,"line":33527},[28,49245,33318],{"class":38},[28,49247,982],{"class":34},[28,49249,33323],{"class":38},[28,49251,49252],{"class":30,"line":33532},[28,49253,33329],{"class":87},[28,49255,49256,49258,49260],{"class":30,"line":33538},[28,49257,33335],{"class":38},[28,49259,982],{"class":34},[28,49261,33323],{"class":38},[28,49263,49264],{"class":30,"line":33554},[28,49265,2662],{"emptyLinePlaceholder":336},[28,49267,49268],{"class":30,"line":33599},[28,49269,33350],{"class":87},[28,49271,49272,49274,49276,49278,49280,49282,49284,49286,49288,49290,49292,49294,49296,49298,49300,49302,49304,49306,49308,49310],{"class":30,"line":33605},[28,49273,32707],{"class":60},[28,49275,413],{"class":38},[28,49277,3854],{"class":127},[28,49279,32715],{"class":60},[28,49281,33364],{"class":127},[28,49283,1293],{"class":60},[28,49285,33369],{"class":34},[28,49287,1343],{"class":60},[28,49289,33374],{"class":127},[28,49291,1293],{"class":60},[28,49293,33369],{"class":34},[28,49295,1343],{"class":60},[28,49297,3854],{"class":127},[28,49299,33385],{"class":38},[28,49301,930],{"class":34},[28,49303,61],{"class":60},[28,49305,33392],{"class":38},[28,49307,930],{"class":34},[28,49309,61],{"class":60},[28,49311,33399],{"class":38},[28,49313,49314,49316,49318,49320,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352],{"class":30,"line":33611},[28,49315,32707],{"class":60},[28,49317,413],{"class":38},[28,49319,3854],{"class":127},[28,49321,32715],{"class":60},[28,49323,33413],{"class":127},[28,49325,1293],{"class":60},[28,49327,33369],{"class":34},[28,49329,1343],{"class":60},[28,49331,33422],{"class":127},[28,49333,1293],{"class":60},[28,49335,33369],{"class":34},[28,49337,1343],{"class":60},[28,49339,3854],{"class":127},[28,49341,33433],{"class":38},[28,49343,930],{"class":34},[28,49345,61],{"class":60},[28,49347,33440],{"class":38},[28,49349,930],{"class":34},[28,49351,61],{"class":60},[28,49353,33399],{"class":38},[28,49355,49356],{"class":30,"line":33617},[28,49357,2662],{"emptyLinePlaceholder":336},[28,49359,49360],{"class":30,"line":33628},[28,49361,33457],{"class":87},[28,49363,49364,49366,49368,49370,49372,49374,49376],{"class":30,"line":33634},[28,49365,2759],{"class":34},[28,49367,33465],{"class":38},[28,49369,930],{"class":34},[28,49371,61],{"class":60},[28,49373,1337],{"class":38},[28,49375,1357],{"class":34},[28,49377,33476],{"class":38},[28,49379,49380],{"class":30,"line":33640},[28,49381,33482],{"class":87},[28,49383,49384,49386,49388,49390,49392,49394,49396],{"class":30,"line":33646},[28,49385,33488],{"class":38},[28,49387,451],{"class":60},[28,49389,54],{"class":34},[28,49391,33495],{"class":38},[28,49393,930],{"class":34},[28,49395,61],{"class":60},[28,49397,33502],{"class":38},[28,49399,49400],{"class":30,"line":33664},[28,49401,33508],{"class":87},[28,49403,49404],{"class":30,"line":33678},[28,49405,33514],{"class":87},[28,49407,49408,49410,49412],{"class":30,"line":33687},[28,49409,33520],{"class":38},[28,49411,54],{"class":34},[28,49413,32570],{"class":38},[28,49415,49416],{"class":30,"line":33696},[28,49417,2662],{"emptyLinePlaceholder":336},[28,49419,49420],{"class":30,"line":33705},[28,49421,33535],{"class":87},[28,49423,49424,49426,49428,49430,49432],{"class":30,"line":33714},[28,49425,33541],{"class":38},[28,49427,54],{"class":34},[28,49429,33546],{"class":38},[28,49431,930],{"class":34},[28,49433,33551],{"class":38},[28,49435,49436,49438,49440,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470],{"class":30,"line":33720},[28,49437,32707],{"class":60},[28,49439,413],{"class":38},[28,49441,33561],{"class":127},[28,49443,1293],{"class":60},[28,49445,33566],{"class":34},[28,49447,1343],{"class":60},[28,49449,942],{"class":127},[28,49451,1293],{"class":60},[28,49453,33566],{"class":34},[28,49455,1343],{"class":60},[28,49457,33579],{"class":127},[28,49459,33582],{"class":38},[28,49461,33585],{"class":34},[28,49463,1304],{"class":60},[28,49465,33590],{"class":38},[28,49467,729],{"class":34},[28,49469,1304],{"class":60},[28,49471,30757],{"class":38},[28,49473,49474],{"class":30,"line":33726},[28,49475,36989],{"class":87},[28,49477,49478],{"class":30,"line":33734},[28,49479,36994],{"class":87},[28,49481,49482,49484,49486],{"class":30,"line":33739},[28,49483,36999],{"class":38},[28,49485,33623],{"class":127},[28,49487,81],{"class":38},[28,49489,49490],{"class":30,"line":33745},[28,49491,33643],{"class":87},[28,49493,49494,49496,49498,49500,49502,49504],{"class":30,"line":33756},[28,49495,33649],{"class":38},[28,49497,54],{"class":34},[28,49499,33654],{"class":38},[28,49501,33657],{"class":5478},[28,49503,54],{"class":34},[28,49505,1811],{"class":38},[28,49507,49508,49510,49512,49514],{"class":30,"line":33762},[28,49509,33667],{"class":127},[28,49511,1256],{"class":38},[28,49513,33672],{"class":60},[28,49515,33675],{"class":38},[28,49517,49518,49520],{"class":30,"line":33782},[28,49519,33681],{"class":127},[28,49521,33684],{"class":38},[28,49523,49524,49526],{"class":30,"line":33788},[28,49525,33690],{"class":127},[28,49527,33693],{"class":38},[28,49529,49530,49532],{"class":30,"line":33794},[28,49531,33699],{"class":127},[28,49533,33702],{"class":38},[28,49535,49536,49538],{"class":30,"line":33800},[28,49537,33708],{"class":127},[28,49539,33711],{"class":38},[28,49541,49542],{"class":30,"line":33817},[28,49543,33717],{"class":38},[28,49545,49546],{"class":30,"line":33823},[28,49547,33723],{"class":87},[28,49549,49550,49552],{"class":30,"line":33829},[28,49551,4352],{"class":34},[28,49553,33731],{"class":38},[28,49555,49556],{"class":30,"line":33835},[28,49557,2662],{"emptyLinePlaceholder":336},[28,49559,49560],{"class":30,"line":33841},[28,49561,33742],{"class":87},[28,49563,49564,49566,49568],{"class":30,"line":33847},[28,49565,32203],{"class":34},[28,49567,33750],{"class":2225},[28,49569,33753],{"class":38},[28,49571,49572],{"class":30,"line":33874},[28,49573,33759],{"class":87},[28,49575,49576,49578,49580,49582,49584,49586,49588,49590],{"class":30,"line":33898},[28,49577,33765],{"class":38},[28,49579,31950],{"class":5478},[28,49581,54],{"class":34},[28,49583,413],{"class":38},[28,49585,897],{"class":60},[28,49587,64],{"class":38},[28,49589,73],{"class":60},[28,49591,30757],{"class":38},[28,49593,49594],{"class":30,"line":33904},[28,49595,33785],{"class":87},[28,49597,49598],{"class":30,"line":33910},[28,49599,33791],{"class":87},[28,49601,49602],{"class":30,"line":33916},[28,49603,33797],{"class":87},[28,49605,49606,49608,49610,49612,49614,49616,49618],{"class":30,"line":33927},[28,49607,31983],{"class":38},[28,49609,61],{"class":60},[28,49611,64],{"class":38},[28,49613,211],{"class":60},[28,49615,64],{"class":38},[28,49617,61],{"class":60},[28,49619,81],{"class":38},[28,49621,49622],{"class":30,"line":33938},[28,49623,33820],{"class":87},[28,49625,49626],{"class":30,"line":33944},[28,49627,33826],{"class":87},[28,49629,49630],{"class":30,"line":33961},[28,49631,33832],{"class":87},[28,49633,49634],{"class":30,"line":33984},[28,49635,33838],{"class":87},[28,49637,49638],{"class":30,"line":34007},[28,49639,33844],{"class":87},[28,49641,49642,49644,49646,49648,49650,49652,49654,49656,49658],{"class":30,"line":34013},[28,49643,33850],{"class":38},[28,49645,33853],{"class":127},[28,49647,33856],{"class":38},[28,49649,33859],{"class":127},[28,49651,64],{"class":38},[28,49653,33864],{"class":5478},[28,49655,54],{"class":34},[28,49657,33869],{"class":127},[28,49659,81],{"class":38},[28,49661,49662,49664,49666,49668,49670,49672,49674,49676,49678],{"class":30,"line":34018},[28,49663,33850],{"class":38},[28,49665,33853],{"class":127},[28,49667,33881],{"class":38},[28,49669,33884],{"class":127},[28,49671,64],{"class":38},[28,49673,33864],{"class":5478},[28,49675,54],{"class":34},[28,49677,33893],{"class":127},[28,49679,81],{"class":38},[28,49681,49682],{"class":30,"line":34027},[28,49683,33901],{"class":87},[28,49685,49686],{"class":30,"line":34037},[28,49687,33907],{"class":38},[28,49689,49690],{"class":30,"line":34043},[28,49691,33913],{"class":87},[28,49693,49694,49696,49698],{"class":30,"line":34048},[28,49695,33919],{"class":38},[28,49697,33922],{"class":127},[28,49699,81],{"class":38},[28,49701,49702,49704,49706],{"class":30,"line":34054},[28,49703,33930],{"class":38},[28,49705,33933],{"class":127},[28,49707,81],{"class":38},[28,49709,49710],{"class":30,"line":34067},[28,49711,33941],{"class":87},[28,49713,49714,49716,49718,49720,49722,49724,49726],{"class":30,"line":34073},[28,49715,31983],{"class":38},[28,49717,61],{"class":60},[28,49719,64],{"class":38},[28,49721,211],{"class":60},[28,49723,64],{"class":38},[28,49725,211],{"class":60},[28,49727,81],{"class":38},[28,49729,49730,49732,49734,49736,49738,49740,49742,49744,49746],{"class":30,"line":34084},[28,49731,33850],{"class":38},[28,49733,33853],{"class":127},[28,49735,33968],{"class":38},[28,49737,33859],{"class":127},[28,49739,64],{"class":38},[28,49741,33864],{"class":5478},[28,49743,54],{"class":34},[28,49745,33979],{"class":127},[28,49747,81],{"class":38},[28,49749,49750,49752,49754,49756,49758,49760,49762,49764,49766],{"class":30,"line":34095},[28,49751,33850],{"class":38},[28,49753,33853],{"class":127},[28,49755,33991],{"class":38},[28,49757,33884],{"class":127},[28,49759,64],{"class":38},[28,49761,33864],{"class":5478},[28,49763,54],{"class":34},[28,49765,34002],{"class":127},[28,49767,81],{"class":38},[28,49769,49770],{"class":30,"line":34114},[28,49771,34010],{"class":87},[28,49773,49775],{"class":30,"line":49774},219,[28,49776,33907],{"class":38},[28,49778,49780,49782,49784],{"class":30,"line":49779},220,[28,49781,33919],{"class":38},[28,49783,33853],{"class":127},[28,49785,81],{"class":38},[28,49787,49789,49791,49793],{"class":30,"line":49788},221,[28,49790,33930],{"class":38},[28,49792,34032],{"class":127},[28,49794,81],{"class":38},[28,49796,49798],{"class":30,"line":49797},222,[28,49799,34040],{"class":38},[28,49801,49803],{"class":30,"line":49802},223,[28,49804,2662],{"emptyLinePlaceholder":336},[28,49806,49808],{"class":30,"line":49807},224,[28,49809,34051],{"class":87},[28,49811,49813,49815,49817,49819,49821],{"class":30,"line":49812},225,[28,49814,1796],{"class":34},[28,49816,31480],{"class":60},[28,49818,3211],{"class":34},[28,49820,31485],{"class":127},[28,49822,4001],{"class":38},[28,49824,49826],{"class":30,"line":49825},226,[28,49827,34070],{"class":87},[28,49829,49831,49833,49835],{"class":30,"line":49830},227,[28,49832,44802],{"class":38},[28,49834,54],{"class":34},[28,49836,44807],{"class":38},[28,49838,49840,49842,49844],{"class":30,"line":49839},228,[28,49841,34087],{"class":38},[28,49843,54],{"class":34},[28,49845,34092],{"class":38},[28,49847,49849,49851,49853,49855,49857,49859,49861],{"class":30,"line":49848},229,[28,49850,33649],{"class":38},[28,49852,54],{"class":34},[28,49854,44824],{"class":38},[28,49856,34105],{"class":5478},[28,49858,54],{"class":34},[28,49860,1304],{"class":60},[28,49862,81],{"class":38},[28,49864,49866],{"class":30,"line":49865},230,[28,49867,34117],{"class":38},[22260,49869,49871],{"id":49870},"_242测试代码","2.4.2.测试代码",[14,49873,49874],{},"使用测试集进行测试与推理",[18,49876,49878],{"className":20,"code":49877,"language":22,"meta":23,"style":23},"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",[25,49879,49880,49886,49896,49906,49917,49927,49931,49935,49943,49948,49952,49969,49973,49977,49981,49985,49989,50021,50025,50033,50037,50049,50053,50057,50061,50065,50069,50073,50077,50081,50099,50113,50117,50127,50137,50147,50153,50157,50161,50169,50173,50189,50197,50201,50205,50213,50221,50225,50229,50233,50237,50243,50247,50257,50265,50273,50277,50281,50285,50293,50297,50313,50317,50321,50325,50337,50341,50353,50357,50361,50373,50377,50387,50391,50395,50407,50411,50419,50423,50427,50435,50439,50447,50451,50455,50459,50463,50467,50483,50491,50495,50499,50517,50523,50527,50537,50545,50553,50557,50561,50565,50569,50577,50581,50597,50601,50609,50617],{"__ignoreMap":23},[28,49881,49882,49884],{"class":30,"line":31},[28,49883,35],{"class":34},[28,49885,30655],{"class":38},[28,49887,49888,49890,49892,49894],{"class":30,"line":48},[28,49889,35],{"class":34},[28,49891,31672],{"class":38},[28,49893,42],{"class":34},[28,49895,31677],{"class":38},[28,49897,49898,49900,49902,49904],{"class":30,"line":84},[28,49899,30997],{"class":34},[28,49901,31655],{"class":38},[28,49903,35],{"class":34},[28,49905,31660],{"class":38},[28,49907,49908,49910,49912,49914],{"class":30,"line":91},[28,49909,30997],{"class":34},[28,49911,31628],{"class":38},[28,49913,35],{"class":34},[28,49915,49916],{"class":38}," ImageFolder\n",[28,49918,49919,49921,49923,49925],{"class":30,"line":97},[28,49920,30997],{"class":34},[28,49922,32170],{"class":38},[28,49924,35],{"class":34},[28,49926,44896],{"class":38},[28,49928,49929],{"class":30,"line":103},[28,49930,2662],{"emptyLinePlaceholder":336},[28,49932,49933],{"class":30,"line":109},[28,49934,34207],{"class":87},[28,49936,49937,49939,49941],{"class":30,"line":118},[28,49938,32203],{"class":34},[28,49940,34214],{"class":2225},[28,49942,32209],{"class":38},[28,49944,49945],{"class":30,"line":124},[28,49946,49947],{"class":87},"   # 导入自己的数据集，并进行数据处理\n",[28,49949,49950],{"class":30,"line":131},[28,49951,48217],{"class":87},[28,49953,49954,49956,49958,49960,49962,49964,49967],{"class":30,"line":137},[28,49955,48222],{"class":60},[28,49957,54],{"class":34},[28,49959,1068],{"class":34},[28,49961,654],{"class":127},[28,49963,956],{"class":60},[28,49965,49966],{"class":48233},"\u002Fdata\u002Ftest",[28,49968,25396],{"class":127},[28,49970,49971],{"class":30,"line":143},[28,49972,2662],{"emptyLinePlaceholder":336},[28,49974,49975],{"class":30,"line":149},[28,49976,48245],{"class":87},[28,49978,49979],{"class":30,"line":1890},[28,49980,48250],{"class":87},[28,49982,49983],{"class":30,"line":1904},[28,49984,48255],{"class":87},[28,49986,49987],{"class":30,"line":1909},[28,49988,48260],{"class":87},[28,49990,49991,49993,49995,49997,49999,50001,50003,50005,50007,50009,50011,50013,50015,50017,50019],{"class":30,"line":1915},[28,49992,48265],{"class":38},[28,49994,54],{"class":34},[28,49996,48270],{"class":38},[28,49998,48273],{"class":60},[28,50000,64],{"class":38},[28,50002,48278],{"class":60},[28,50004,64],{"class":38},[28,50006,48283],{"class":60},[28,50008,48286],{"class":38},[28,50010,48289],{"class":60},[28,50012,64],{"class":38},[28,50014,48294],{"class":60},[28,50016,64],{"class":38},[28,50018,48299],{"class":60},[28,50020,4919],{"class":38},[28,50022,50023],{"class":30,"line":1936},[28,50024,48306],{"class":87},[28,50026,50027,50029,50031],{"class":30,"line":1941},[28,50028,48311],{"class":38},[28,50030,54],{"class":34},[28,50032,48316],{"class":38},[28,50034,50035],{"class":30,"line":1955},[28,50036,48321],{"class":87},[28,50038,50039,50041,50043,50045,50047],{"class":30,"line":1960},[28,50040,48326],{"class":38},[28,50042,31758],{"class":60},[28,50044,64],{"class":38},[28,50046,31758],{"class":60},[28,50048,42878],{"class":38},[28,50050,50051],{"class":30,"line":1989},[28,50052,48339],{"class":87},[28,50054,50055],{"class":30,"line":1994},[28,50056,48344],{"class":38},[28,50058,50059],{"class":30,"line":2011},[28,50060,48349],{"class":38},[28,50062,50063],{"class":30,"line":2016},[28,50064,48354],{"class":87},[28,50066,50067],{"class":30,"line":2021},[28,50068,48359],{"class":87},[28,50070,50071],{"class":30,"line":2026},[28,50072,2662],{"emptyLinePlaceholder":336},[28,50074,50075],{"class":30,"line":2040},[28,50076,48368],{"class":87},[28,50078,50079],{"class":30,"line":2045},[28,50080,48373],{"class":87},[28,50082,50083,50085,50087,50089,50091,50093,50095,50097],{"class":30,"line":2839},[28,50084,34221],{"class":38},[28,50086,54],{"class":34},[28,50088,48382],{"class":38},[28,50090,48385],{"class":60},[28,50092,64],{"class":38},[28,50094,48390],{"class":5478},[28,50096,54],{"class":34},[28,50098,48395],{"class":38},[28,50100,50101,50103,50105,50107,50109,50111],{"class":30,"line":2853},[28,50102,34278],{"class":38},[28,50104,54],{"class":34},[28,50106,31791],{"class":38},[28,50108,31794],{"class":5478},[28,50110,54],{"class":34},[28,50112,34289],{"class":38},[28,50114,50115],{"class":30,"line":2861},[28,50116,34294],{"class":87},[28,50118,50119,50121,50123,50125],{"class":30,"line":2866},[28,50120,34299],{"class":5478},[28,50122,54],{"class":34},[28,50124,61],{"class":60},[28,50126,31723],{"class":38},[28,50128,50129,50131,50133,50135],{"class":30,"line":2872},[28,50130,34310],{"class":5478},[28,50132,54],{"class":34},[28,50134,31733],{"class":60},[28,50136,31723],{"class":38},[28,50138,50139,50141,50143,50145],{"class":30,"line":2878},[28,50140,34321],{"class":5478},[28,50142,54],{"class":34},[28,50144,244],{"class":60},[28,50146,81],{"class":38},[28,50148,50149,50151],{"class":30,"line":2883},[28,50150,4352],{"class":34},[28,50152,34334],{"class":38},[28,50154,50155],{"class":30,"line":8210},[28,50156,2662],{"emptyLinePlaceholder":336},[28,50158,50159],{"class":30,"line":8234},[28,50160,34343],{"class":87},[28,50162,50163,50165,50167],{"class":30,"line":8239},[28,50164,32203],{"class":34},[28,50166,34350],{"class":2225},[28,50168,34353],{"class":38},[28,50170,50171],{"class":30,"line":8245},[28,50172,34358],{"class":87},[28,50174,50175,50177,50179,50181,50183,50185,50187],{"class":30,"line":8272},[28,50176,31497],{"class":38},[28,50178,54],{"class":34},[28,50180,31504],{"class":127},[28,50182,1966],{"class":34},[28,50184,31509],{"class":38},[28,50186,1963],{"class":34},[28,50188,34375],{"class":127},[28,50190,50191,50193,50195],{"class":30,"line":8277},[28,50192,31549],{"class":38},[28,50194,54],{"class":34},[28,50196,32545],{"class":38},[28,50198,50199],{"class":30,"line":8283},[28,50200,2662],{"emptyLinePlaceholder":336},[28,50202,50203],{"class":30,"line":8295},[28,50204,34392],{"class":87},[28,50206,50207,50209,50211],{"class":30,"line":8307},[28,50208,34397],{"class":38},[28,50210,54],{"class":34},[28,50212,32598],{"class":60},[28,50214,50215,50217,50219],{"class":30,"line":8319},[28,50216,34406],{"class":38},[28,50218,54],{"class":34},[28,50220,3347],{"class":60},[28,50222,50223],{"class":30,"line":9978},[28,50224,2662],{"emptyLinePlaceholder":336},[28,50226,50227],{"class":30,"line":10003},[28,50228,34419],{"class":87},[28,50230,50231],{"class":30,"line":10026},[28,50232,34424],{"class":87},[28,50234,50235],{"class":30,"line":10050},[28,50236,34429],{"class":87},[28,50238,50239,50241],{"class":30,"line":10055},[28,50240,34434],{"class":34},[28,50242,33140],{"class":38},[28,50244,50245],{"class":30,"line":10060},[28,50246,34441],{"class":87},[28,50248,50249,50251,50253,50255],{"class":30,"line":10065},[28,50250,3665],{"class":34},[28,50252,34448],{"class":38},[28,50254,26306],{"class":34},[28,50256,34453],{"class":38},[28,50258,50259,50261,50263],{"class":30,"line":10074},[28,50260,34458],{"class":38},[28,50262,54],{"class":34},[28,50264,34463],{"class":38},[28,50266,50267,50269,50271],{"class":30,"line":10079},[28,50268,34468],{"class":38},[28,50270,54],{"class":34},[28,50272,34473],{"class":38},[28,50274,50275],{"class":30,"line":10085},[28,50276,34478],{"class":87},[28,50278,50279],{"class":30,"line":10106},[28,50280,33131],{"class":38},[28,50282,50283],{"class":30,"line":10112},[28,50284,34487],{"class":87},[28,50286,50287,50289,50291],{"class":30,"line":10126},[28,50288,32916],{"class":38},[28,50290,54],{"class":34},[28,50292,34496],{"class":38},[28,50294,50295],{"class":30,"line":10132},[28,50296,34501],{"class":87},[28,50298,50299,50301,50303,50305,50307,50309,50311],{"class":30,"line":10159},[28,50300,32933],{"class":38},[28,50302,54],{"class":34},[28,50304,32938],{"class":38},[28,50306,32941],{"class":5478},[28,50308,54],{"class":34},[28,50310,61],{"class":60},[28,50312,81],{"class":38},[28,50314,50315],{"class":30,"line":10168},[28,50316,34522],{"class":87},[28,50318,50319],{"class":30,"line":10174},[28,50320,34527],{"class":87},[28,50322,50323],{"class":30,"line":10182},[28,50324,34532],{"class":87},[28,50326,50327,50329,50331,50333,50335],{"class":30,"line":10187},[28,50328,34537],{"class":38},[28,50330,9739],{"class":34},[28,50332,33043],{"class":38},[28,50334,3211],{"class":34},[28,50336,34546],{"class":38},[28,50338,50339],{"class":30,"line":16866},[28,50340,34551],{"class":87},[28,50342,50343,50345,50347,50349,50351],{"class":30,"line":16872},[28,50344,34556],{"class":38},[28,50346,9739],{"class":34},[28,50348,34561],{"class":38},[28,50350,244],{"class":60},[28,50352,81],{"class":38},[28,50354,50355],{"class":30,"line":16895},[28,50356,2662],{"emptyLinePlaceholder":336},[28,50358,50359],{"class":30,"line":16901},[28,50360,34574],{"class":87},[28,50362,50363,50365,50367,50369,50371],{"class":30,"line":16924},[28,50364,34579],{"class":38},[28,50366,54],{"class":34},[28,50368,34584],{"class":38},[28,50370,982],{"class":34},[28,50372,34589],{"class":38},[28,50374,50375],{"class":30,"line":16938},[28,50376,34594],{"class":87},[28,50378,50379,50381,50383,50385],{"class":30,"line":16958},[28,50380,32707],{"class":60},[28,50382,413],{"class":38},[28,50384,34603],{"class":127},[28,50386,34606],{"class":38},[28,50388,50389],{"class":30,"line":16964},[28,50390,2662],{"emptyLinePlaceholder":336},[28,50392,50393],{"class":30,"line":16975},[28,50394,34615],{"class":87},[28,50396,50397,50399,50401,50403,50405],{"class":30,"line":16998},[28,50398,1796],{"class":34},[28,50400,31480],{"class":60},[28,50402,3211],{"class":34},[28,50404,31485],{"class":127},[28,50406,4001],{"class":38},[28,50408,50409],{"class":30,"line":17020},[28,50410,34632],{"class":87},[28,50412,50413,50415,50417],{"class":30,"line":17025},[28,50414,31549],{"class":38},[28,50416,54],{"class":34},[28,50418,44807],{"class":38},[28,50420,50421],{"class":30,"line":17031},[28,50422,34645],{"class":87},[28,50424,50425],{"class":30,"line":17045},[28,50426,34650],{"class":87},[28,50428,50429,50431,50433],{"class":30,"line":17058},[28,50430,34655],{"class":38},[28,50432,34658],{"class":127},[28,50434,30757],{"class":38},[28,50436,50437],{"class":30,"line":17063},[28,50438,34665],{"class":87},[28,50440,50441,50443,50445],{"class":30,"line":17077},[28,50442,34278],{"class":38},[28,50444,54],{"class":34},[28,50446,34674],{"class":38},[28,50448,50449],{"class":30,"line":17082},[28,50450,34679],{"class":87},[28,50452,50453],{"class":30,"line":17088},[28,50454,34684],{"class":38},[28,50456,50457],{"class":30,"line":17093},[28,50458,2662],{"emptyLinePlaceholder":336},[28,50460,50461],{"class":30,"line":17107},[28,50462,34693],{"class":87},[28,50464,50465],{"class":30,"line":17112},[28,50466,34698],{"class":87},[28,50468,50469,50471,50473,50475,50477,50479,50481],{"class":30,"line":17117},[28,50470,31497],{"class":38},[28,50472,54],{"class":34},[28,50474,31504],{"class":127},[28,50476,1966],{"class":34},[28,50478,31509],{"class":38},[28,50480,1963],{"class":34},[28,50482,34375],{"class":127},[28,50484,50485,50487,50489],{"class":30,"line":17131},[28,50486,31549],{"class":38},[28,50488,54],{"class":34},[28,50490,32545],{"class":38},[28,50492,50493],{"class":30,"line":17143},[28,50494,34727],{"class":87},[28,50496,50497],{"class":30,"line":17148},[28,50498,34732],{"class":87},[28,50500,50501,50503,50505,50507,50510,50512,50515],{"class":30,"line":17161},[28,50502,34737],{"class":38},[28,50504,54],{"class":34},[28,50506,1287],{"class":38},[28,50508,50509],{"class":127},"'猫'",[28,50511,64],{"class":38},[28,50513,50514],{"class":127},"'狗'",[28,50516,33502],{"class":38},[28,50518,50519,50521],{"class":30,"line":17166},[28,50520,34434],{"class":34},[28,50522,33140],{"class":38},[28,50524,50525],{"class":30,"line":17171},[28,50526,34802],{"class":87},[28,50528,50529,50531,50533,50535],{"class":30,"line":17176},[28,50530,3665],{"class":34},[28,50532,34809],{"class":38},[28,50534,26306],{"class":34},[28,50536,34453],{"class":38},[28,50538,50539,50541,50543],{"class":30,"line":17189},[28,50540,32866],{"class":38},[28,50542,54],{"class":34},[28,50544,32871],{"class":38},[28,50546,50547,50549,50551],{"class":30,"line":17194},[28,50548,32881],{"class":38},[28,50550,54],{"class":34},[28,50552,32886],{"class":38},[28,50554,50555],{"class":30,"line":32889},[28,50556,2662],{"emptyLinePlaceholder":336},[28,50558,50559],{"class":30,"line":32895},[28,50560,34838],{"class":87},[28,50562,50563],{"class":30,"line":32901},[28,50564,33131],{"class":38},[28,50566,50567],{"class":30,"line":32907},[28,50568,34847],{"class":87},[28,50570,50571,50573,50575],{"class":30,"line":32913},[28,50572,32916],{"class":38},[28,50574,54],{"class":34},[28,50576,32921],{"class":38},[28,50578,50579],{"class":30,"line":32924},[28,50580,34860],{"class":87},[28,50582,50583,50585,50587,50589,50591,50593,50595],{"class":30,"line":32930},[28,50584,32933],{"class":38},[28,50586,54],{"class":34},[28,50588,32938],{"class":38},[28,50590,32941],{"class":5478},[28,50592,54],{"class":34},[28,50594,61],{"class":60},[28,50596,81],{"class":38},[28,50598,50599],{"class":30,"line":32950},[28,50600,34881],{"class":87},[28,50602,50603,50605,50607],{"class":30,"line":32956},[28,50604,34886],{"class":38},[28,50606,54],{"class":34},[28,50608,34891],{"class":38},[28,50610,50611,50613,50615],{"class":30,"line":32967},[28,50612,34896],{"class":38},[28,50614,54],{"class":34},[28,50616,34901],{"class":38},[28,50618,50619,50621,50623,50625,50627,50629,50631,50633],{"class":30,"line":32973},[28,50620,34906],{"class":60},[28,50622,413],{"class":38},[28,50624,34911],{"class":127},[28,50626,34914],{"class":38},[28,50628,34917],{"class":127},[28,50630,64],{"class":38},[28,50632,34922],{"class":127},[28,50634,34925],{"class":38},[328,50636,50637],{},"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":23,"searchDepth":48,"depth":48,"links":50639},[50640,50641,50642,50643],{"id":30851,"depth":84,"text":30852},{"id":38095,"depth":84,"text":38096},{"id":41528,"depth":84,"text":41529},{"id":45537,"depth":84,"text":45538},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30843,"description":333},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50650,"title":50651,"body":50652,"description":333,"extension":334,"meta":50659,"navigation":336,"path":50660,"seo":50661,"stem":50662,"__hash__":50663},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50653,"toc":50657},[50654],[10,50655,50651],{"id":50656},"_3yolo模型学习",{"title":23,"searchDepth":48,"depth":48,"links":50658},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50651,"description":333},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50665,"title":50666,"body":50667,"description":50674,"extension":334,"meta":50675,"navigation":336,"path":50677,"seo":50678,"stem":50679,"__hash__":50680},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50668,"toc":50672},[50669],[14,50670,50671],{},"yolo模型还未补充",{"title":23,"searchDepth":48,"depth":48,"links":50673},[],"深度学习学习",{"category":50676},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50666,"description":50674},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50682,"title":50683,"body":50684,"description":333,"extension":334,"meta":50709,"navigation":336,"path":50710,"seo":50711,"stem":50712,"__hash__":50713},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50685,"toc":50707},[50686,50689,50692,50697,50704],[10,50687,50683],{"id":50688},"_1工具",[14,50690,50691],{},"提示错误插件：有问题会提前报错",[14,50693,50694],{},[1727,50695],{"alt":23,"src":50696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50698,50699],{},[51,50700,50703],{"href":50701,"rel":50702},"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",[24127],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50705,50706],{},"alt键加上下箭头可以实现语句的移动",{"title":23,"searchDepth":48,"depth":48,"links":50708},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50683,"description":333},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50715,"title":50716,"body":50717,"description":333,"extension":334,"meta":53581,"navigation":336,"path":53582,"seo":53583,"stem":53584,"__hash__":53585},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50718,"toc":53532},[50719,50722,50726,50730,50735,50738,50743,50747,50754,50759,50766,50771,50778,50783,50787,50792,50795,50799,50804,50808,50813,50816,50819,50822,50825,50828,50831,50834,50837,50842,50847,50852,50856,50859,50862,50866,50871,50874,50882,50887,50904,50912,50917,50922,50927,50932,50937,50940,50945,50950,50954,50963,50968,50973,50977,50982,50985,50989,50994,51002,51007,51012,51015,51020,51025,51030,51033,51036,51039,51044,51049,51052,51057,51060,51065,51068,51071,51074,51079,51082,51085,51100,51105,51110,51115,51118,51121,51124,51138,51141,51146,51151,51154,51157,51160,51163,51166,51169,51172,51176,51180,51185,51189,51192,51197,51202,51205,51210,51213,51217,51222,51225,51228,51231,51234,51237,51240,51243,51246,51249,51253,51258,51263,51268,51271,51274,51278,51283,51286,51290,51293,51296,51301,51304,51307,51311,51315,51318,51323,51328,51331,51360,51365,51370,51375,51380,51384,51389,51393,51398,51401,51405,51409,51414,51418,51423,51428,51432,51437,51440,51442,51445,51450,51454,51459,51463,51467,51472,51477,51482,51487,51491,51496,51501,51506,51509,51512,51517,51520,51525,51530,51535,51540,51544,52351,52355,52698,52703,52706,52709,52712,52715,52718,52721,52724,52727,52729,52732,52734,52737,52741,52746,52749,52752,52755,52759,52764,52769,52789,52792,52796,52801,52806,52823,52827,52856,52860,52882,52884,52923,52931,52937,52941,52944,52947,52952,52957,52960,52963,52966,52971,52976,52979,52982,52985,52988,52991,52994,52997,53000,53003,53006,53009,53011,53014,53017,53020,53023,53026,53029,53032,53035,53039,53044,53047,53052,53055,53058,53061,53064,53067,53070,53073,53075,53078,53081,53084,53087,53090,53093,53097,53100,53109,53112,53117,53120,53125,53128,53131,53134,53137,53140,53143,53146,53150,53154,53157,53160,53165,53170,53175,53179,53184,53189,53192,53195,53198,53201,53204,53209,53212,53217,53219,53224,53227,53231,53236,53239,53242,53247,53251,53254,53259,53262,53265,53294,53299,53302,53305,53308,53311,53314,53318,53321,53407,53411,53414,53419,53424,53431,53434,53437,53440,53443,53446,53451,53456,53459,53462,53465,53468,53471,53474,53477,53480,53483,53485,53488,53492,53497,53502,53507,53510,53515,53520,53523,53526,53529],[10,50720,50716],{"id":50721},"_2基础语法",[351,50723,50725],{"id":50724},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[380,50727,50729],{"id":50728},"_211-js组成","2.1.1 js组成",[363,50731,50732],{},[366,50733,50734],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50736,50737],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[363,50739,50740],{"start":48},[366,50741,50742],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[380,50744,50746],{"id":50745},"_212-js书写位置","2.1.2 js书写位置",[363,50748,50749],{},[366,50750,50751],{},[555,50752,50753],{},"内部 JavaScript",[14,50755,50756],{},[1727,50757],{"alt":23,"src":50758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[363,50760,50761],{"start":48},[366,50762,50763],{},[555,50764,50765],{},"外部 JavaScript",[14,50767,50768],{},[1727,50769],{"alt":23,"src":50770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[363,50772,50773],{"start":84},[366,50774,50775],{},[555,50776,50777],{},"内联 JavaScript",[14,50779,50780],{},[1727,50781],{"alt":23,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[380,50784,50786],{"id":50785},"_213-javascript注释","2.1.3 JavaScript注释",[14,50788,50789],{},[1727,50790],{"alt":23,"src":50791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50793,50794],{},"alt+shift+a一定要记住！",[380,50796,50798],{"id":50797},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50800,50801],{},[1727,50802],{"alt":23,"src":50803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[380,50805,50807],{"id":50806},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[363,50809,50810],{},[366,50811,50812],{},"输出语法：",[14,50814,50815],{},"①document.write('要出的内容')",[14,50817,50818],{},"向body内输出内容；",[14,50820,50821],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50823,50824],{},"②alert('要出的内容')",[14,50826,50827],{},"页面弹出警告对话框",[14,50829,50830],{},"③console.log('控制台打印')",[14,50832,50833],{},"控制台输出语法，程序员调试使用",[14,50835,50836],{},"输入log就行，自动生成：",[14,50838,50839],{},[1727,50840],{"alt":23,"src":50841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[363,50843,50844],{"start":48},[366,50845,50846],{},"输入语法：",[14,50848,50849],{},[1727,50850],{"alt":23,"src":50851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[380,50853,50855],{"id":50854},"_2116-字面量","21.1.6 字面量",[14,50857,50858],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50860,50861],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[351,50863,50865],{"id":50864},"_22-变量","2.2 变量",[363,50867,50868],{},[366,50869,50870],{},"变量声明",[14,50872,50873],{},"let 变量名",[1404,50875,50876,50879],{},[366,50877,50878],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[366,50880,50881],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[363,50883,50884],{"start":48},[366,50885,50886],{},"变量赋值",[18,50888,50892],{"className":50889,"code":50890,"language":50891,"meta":23,"style":23},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[25,50893,50894,50899],{"__ignoreMap":23},[28,50895,50896],{"class":30,"line":31},[28,50897,50898],{"class":38},"let age\n",[28,50900,50901],{"class":30,"line":48},[28,50902,50903],{"class":38},"age=18\n",[363,50905,50906,50909],{"start":84},[366,50907,50908],{},"连这些（变量的初始化）：let age=18",[366,50910,50911],{},"更新变量",[14,50913,50914],{},[1727,50915],{"alt":23,"src":50916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[363,50918,50919],{"start":97},[366,50920,50921],{},"声明多个变量",[14,50923,50924],{},[1727,50925],{"alt":23,"src":50926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[363,50928,50929],{"start":103},[366,50930,50931],{},"变量命名规则与规范",[14,50933,50934],{},[1727,50935],{"alt":23,"src":50936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50938,50939],{},"遵守小驼峰！",[363,50941,50942],{"start":109},[366,50943,50944],{},"变量拓展-let和var的区别",[14,50946,50947],{},[1727,50948],{"alt":23,"src":50949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[351,50951,50953],{"id":50952},"_23-数组","2.3 数组",[18,50955,50957],{"className":50889,"code":50956,"language":50891,"meta":23,"style":23},"let arr = []\n",[25,50958,50959],{"__ignoreMap":23},[28,50960,50961],{"class":30,"line":31},[28,50962,50956],{"class":38},[14,50964,50965],{},[1727,50966],{"alt":23,"src":50967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50969,50970],{},[1727,50971],{"alt":23,"src":50972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[351,50974,50976],{"id":50975},"_24-常量","2.4 常量",[14,50978,50979],{},[1727,50980],{"alt":23,"src":50981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50983,50984],{},"const — 类似于 let ，但是变量的值无法被修改",[351,50986,50988],{"id":50987},"_25-数据类型","2.5 数据类型",[14,50990,50991],{},[1727,50992],{"alt":23,"src":50993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[363,50995,50996,50999],{},[366,50997,50998],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[366,51000,51001],{},"算数运算符：",[14,51003,51004],{},[1727,51005],{"alt":23,"src":51006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[363,51008,51009],{"start":84},[366,51010,51011],{},"数字类型（Number）",[14,51013,51014],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51016,51017],{},[1727,51018],{"alt":23,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[363,51021,51022],{"start":91},[366,51023,51024],{},"字符串类型（string）",[14,51026,51027],{},[1727,51028],{"alt":23,"src":51029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51031,51032],{},"反引号也是可以使用的",[14,51034,51035],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51037,51038],{},"例如：document.write(\"我今年\"+age+\"岁\")",[363,51040,51041],{"start":97},[366,51042,51043],{},"模板字符串",[14,51045,51046],{},[1727,51047],{"alt":23,"src":51048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51050,51051],{},"类似于python的字符串格式化",[363,51053,51054],{"start":103},[366,51055,51056],{},"布尔类型",[14,51058,51059],{},"true 和 false",[363,51061,51062],{"start":109},[366,51063,51064],{},"未定义类型（underfined）",[14,51066,51067],{},"表示没有赋值",[14,51069,51070],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51072,51073],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[363,51075,51076],{"start":118},[366,51077,51078],{},"null（空类型）",[14,51080,51081],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51083,51084],{},"赋值了，但是内容为空",[18,51086,51088],{"className":50889,"code":51087,"language":50891,"meta":23,"style":23},"typeof null\n输出的是'object'，是一个对象数据类型\n",[25,51089,51090,51095],{"__ignoreMap":23},[28,51091,51092],{"class":30,"line":31},[28,51093,51094],{"class":38},"typeof null\n",[28,51096,51097],{"class":30,"line":48},[28,51098,51099],{"class":38},"输出的是'object'，是一个对象数据类型\n",[363,51101,51102],{"start":124},[366,51103,51104],{},"控制台检测数据类型",[14,51106,51107],{},[1727,51108],{"alt":23,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[363,51111,51112],{"start":131},[366,51113,51114],{},"类型转换",[14,51116,51117],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51119,51120],{},"转换方式：隐式转换和显示转换",[14,51122,51123],{},"①隐式转换",[1404,51125,51126,51129,51132,51135],{},[366,51127,51128],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[366,51130,51131],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[366,51133,51134],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[366,51136,51137],{},"任何数据和字符串相加结果都是字符串",[14,51139,51140],{},"②显示转换",[14,51142,51143],{},[1727,51144],{"alt":23,"src":51145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51147,51148],{},[1727,51149],{"alt":23,"src":51150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51152,51153],{},"在输入的时候要用好隐式转换，简单写起来",[14,51155,51156],{},"let num = +prompt(’请输入数字：‘)",[14,51158,51159],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51161,51162],{},"console.log(parseInt('12.333px'))",[14,51164,51165],{},"输出为：12",[14,51167,51168],{},"console.log(parseInt('a'a'a12.333px'))",[14,51170,51171],{},"输出：NaN",[351,51173,51175],{"id":51174},"_26-运算符","2.6 运算符",[380,51177,51179],{"id":51178},"_261-赋值运算符","2.6.1 赋值运算符",[14,51181,51182],{},[1727,51183],{"alt":23,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[380,51186,51188],{"id":51187},"_262-一元运算符","2.6.2 一元运算符",[14,51190,51191],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51193,51194],{},[1727,51195],{"alt":23,"src":51196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51198,51199],{},[1727,51200],{"alt":23,"src":51201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51203,51204],{},"两者的区别：",[14,51206,51207],{},[1727,51208],{"alt":23,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51211,51212],{},"前置先自加；后置后加，代码执行完之后再加",[380,51214,51216],{"id":51215},"_263-比较运算符","2.6.3 比较运算符",[14,51218,51219],{},[1727,51220],{"alt":23,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51223,51224],{},"比较运算符也有隐式转换",[14,51226,51227],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51229,51230],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51232,51233],{},"要使用三等，开发的时候",[14,51235,51236],{},"NaN不等于任何人，包括它自己",[14,51238,51239],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51241,51242],{},"7\u002F10=0.7",[14,51244,51245],{},"最后：0.5+0.2=0.7",[14,51247,51248],{},"字符串比较，比较的是字符对应的ASCII码",[380,51250,51252],{"id":51251},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51254,51255],{},[1727,51256],{"alt":23,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51259,51260],{},[1727,51261],{"alt":23,"src":51262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51264,51265],{},[1727,51266],{"alt":23,"src":51267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51269,51270],{},"上述题目选D",[14,51272,51273],{},"与真2假1；或真1假2",[380,51275,51277],{"id":51276},"_265-运算符优先级","2.6.5 运算符优先级",[14,51279,51280],{},[1727,51281],{"alt":23,"src":51282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51284,51285],{},"先算逻辑与，后算逻辑或",[351,51287,51289],{"id":51288},"_27-语句","2.7 语句",[14,51291,51292],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51294,51295],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51297,51298],{},[1727,51299],{"alt":23,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51302,51303],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51305,51306],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[380,51308,51310],{"id":51309},"_271-分支语句","2.7.1 分支语句",[22260,51312,51314],{"id":51313},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51316,51317],{},"if语句单行简单的话，可以不写{}，写在一行就行",[363,51319,51320],{},[366,51321,51322],{},"单分支语句",[14,51324,51325],{},[1727,51326],{"alt":23,"src":51327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51329,51330],{},"除了0，所有数字都为真",[18,51332,51334],{"className":50889,"code":51333,"language":50891,"meta":23,"style":23},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[25,51335,51336,51341,51346,51351,51355],{"__ignoreMap":23},[28,51337,51338],{"class":30,"line":31},[28,51339,51340],{"class":38},"if（0) {\n",[28,51342,51343],{"class":30,"line":48},[28,51344,51345],{"class":38},"    let a=1\n",[28,51347,51348],{"class":30,"line":84},[28,51349,51350],{"class":38},"    alert(typeof a)\n",[28,51352,51353],{"class":30,"line":91},[28,51354,1830],{"class":38},[28,51356,51357],{"class":30,"line":97},[28,51358,51359],{"class":38},"不输出，括号为假\n",[363,51361,51362],{"start":48},[366,51363,51364],{},"双分支语句",[14,51366,51367],{},[1727,51368],{"alt":23,"src":51369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[363,51371,51372],{"start":84},[366,51373,51374],{},"多分支语句",[14,51376,51377],{},[1727,51378],{"alt":23,"src":51379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22260,51381,51383],{"id":51382},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51385,51386],{},[1727,51387],{"alt":23,"src":51388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22260,51390,51392],{"id":51391},"_2713-switch语句","2.7.1.3 switch语句",[14,51394,51395],{},[1727,51396],{"alt":23,"src":51397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51399,51400],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[380,51402,51404],{"id":51403},"_272-循环语句","2.7.2 循环语句",[22260,51406,51408],{"id":51407},"_2721-断点演示","2.7.2.1 断点演示",[14,51410,51411],{},[1727,51412],{"alt":23,"src":51413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22260,51415,51417],{"id":51416},"_2722-while循环","2.7.2.2 while循环",[14,51419,51420],{},[1727,51421],{"alt":23,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51424,51425],{},[1727,51426],{"alt":23,"src":51427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22260,51429,51431],{"id":51430},"_2723-for循环","2.7.2.3 for循环",[14,51433,51434],{},[1727,51435],{"alt":23,"src":51436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51438,51439],{},"for(;;) {",[14,51441,1343],{},[14,51443,51444],{},"表示无限循环",[14,51446,51447],{},[1727,51448],{"alt":23,"src":51449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22260,51451,51453],{"id":51452},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51455,51456],{},[1727,51457],{"alt":23,"src":51458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[351,51460,51462],{"id":51461},"_28-数组","2.8 数组",[380,51464,51466],{"id":51465},"_281-基础认识","2.8.1 基础认识",[14,51468,51469],{},[1727,51470],{"alt":23,"src":51471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51473,51474],{},[1727,51475],{"alt":23,"src":51476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51478,51479],{},[1727,51480],{"alt":23,"src":51481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51483,51484],{},[1727,51485],{"alt":23,"src":51486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[380,51488,51490],{"id":51489},"_282-操作数组","2.8.2 操作数组",[14,51492,51493],{},[1727,51494],{"alt":23,"src":51495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[363,51497,51498],{},[366,51499,51500],{},"添加元素",[14,51502,51503],{},[1727,51504],{"alt":23,"src":51505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51507,51508],{},"console.log(arr.push('green'))",[14,51510,51511],{},"输出结果：为新数组的长度",[14,51513,51514],{},[1727,51515],{"alt":23,"src":51516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51518,51519],{},"push用的非常多，一定要记住",[363,51521,51522],{},[366,51523,51524],{},"删除元素",[14,51526,51527],{},[1727,51528],{"alt":23,"src":51529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51531,51532],{},[1727,51533],{"alt":23,"src":51534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51536,51537],{},[1727,51538],{"alt":23,"src":51539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[380,51541,51543],{"id":51542},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[18,51545,51547],{"className":50889,"code":51546,"language":50891,"meta":23,"style":23},"\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",[25,51548,51549,51564,51580,51584,51593,51611,51635,51657,51671,51679,51686,51698,51709,51713,51717,51724,51736,51751,51764,51783,51800,51815,51827,51839,51851,51855,51859,51870,51880,51892,51904,51916,51927,51931,51935,51947,51951,51965,51969,51973,51984,51998,52010,52024,52028,52037,52046,52050,52059,52063,52072,52077,52082,52095,52123,52128,52133,52158,52163,52167,52172,52177,52192,52196,52201,52231,52243,52259,52275,52289,52294,52301,52305,52310,52323,52331,52339,52343],{"__ignoreMap":23},[28,51550,51551,51554,51558,51561],{"class":30,"line":31},[28,51552,51553],{"class":38},"\u003C!",[28,51555,51557],{"class":51556},"s9eBZ","DOCTYPE",[28,51559,51560],{"class":2225}," html",[28,51562,51563],{"class":38},">\n",[28,51565,51566,51568,51570,51573,51575,51578],{"class":30,"line":48},[28,51567,1307],{"class":38},[28,51569,50891],{"class":51556},[28,51571,51572],{"class":2225}," lang",[28,51574,54],{"class":38},[28,51576,51577],{"class":127},"\"en\"",[28,51579,51563],{"class":38},[28,51581,51582],{"class":30,"line":84},[28,51583,2662],{"emptyLinePlaceholder":336},[28,51585,51586,51588,51591],{"class":30,"line":91},[28,51587,1307],{"class":38},[28,51589,51590],{"class":51556},"head",[28,51592,51563],{"class":38},[28,51594,51595,51598,51601,51604,51606,51609],{"class":30,"line":97},[28,51596,51597],{"class":38},"    \u003C",[28,51599,51600],{"class":51556},"meta",[28,51602,51603],{"class":2225}," charset",[28,51605,54],{"class":38},[28,51607,51608],{"class":127},"\"UTF-8\"",[28,51610,51563],{"class":38},[28,51612,51613,51615,51617,51620,51622,51625,51628,51630,51633],{"class":30,"line":103},[28,51614,51597],{"class":38},[28,51616,51600],{"class":51556},[28,51618,51619],{"class":2225}," http-equiv",[28,51621,54],{"class":38},[28,51623,51624],{"class":127},"\"X-UA-Compatible\"",[28,51626,51627],{"class":2225}," content",[28,51629,54],{"class":38},[28,51631,51632],{"class":127},"\"IE=edge\"",[28,51634,51563],{"class":38},[28,51636,51637,51639,51641,51643,51645,51648,51650,51652,51655],{"class":30,"line":109},[28,51638,51597],{"class":38},[28,51640,51600],{"class":51556},[28,51642,15182],{"class":2225},[28,51644,54],{"class":38},[28,51646,51647],{"class":127},"\"viewport\"",[28,51649,51627],{"class":2225},[28,51651,54],{"class":38},[28,51653,51654],{"class":127},"\"width=device-width, initial-scale=1.0\"",[28,51656,51563],{"class":38},[28,51658,51659,51661,51664,51667,51669],{"class":30,"line":118},[28,51660,51597],{"class":38},[28,51662,51663],{"class":51556},"title",[28,51665,51666],{"class":38},">Document\u003C\u002F",[28,51668,51663],{"class":51556},[28,51670,51563],{"class":38},[28,51672,51673,51675,51677],{"class":30,"line":124},[28,51674,51597],{"class":38},[28,51676,328],{"class":51556},[28,51678,51563],{"class":38},[28,51680,51681,51684],{"class":30,"line":131},[28,51682,51683],{"class":51556},"        *",[28,51685,15834],{"class":38},[28,51687,51688,51691,51694,51696],{"class":30,"line":137},[28,51689,51690],{"class":60},"            margin",[28,51692,51693],{"class":38},": ",[28,51695,244],{"class":60},[28,51697,1558],{"class":38},[28,51699,51700,51703,51705,51707],{"class":30,"line":143},[28,51701,51702],{"class":60},"            padding",[28,51704,51693],{"class":38},[28,51706,244],{"class":60},[28,51708,1558],{"class":38},[28,51710,51711],{"class":30,"line":149},[28,51712,2791],{"class":38},[28,51714,51715],{"class":30,"line":1890},[28,51716,2662],{"emptyLinePlaceholder":336},[28,51718,51719,51722],{"class":30,"line":1904},[28,51720,51721],{"class":2225},"        .box",[28,51723,15834],{"class":38},[28,51725,51726,51729,51731,51734],{"class":30,"line":1909},[28,51727,51728],{"class":60},"            display",[28,51730,51693],{"class":38},[28,51732,51733],{"class":60},"flex",[28,51735,1558],{"class":38},[28,51737,51738,51741,51743,51746,51749],{"class":30,"line":1915},[28,51739,51740],{"class":60},"            width",[28,51742,51693],{"class":38},[28,51744,51745],{"class":60},"700",[28,51747,51748],{"class":34},"px",[28,51750,1558],{"class":38},[28,51752,51753,51756,51758,51760,51762],{"class":30,"line":1936},[28,51754,51755],{"class":60},"            height",[28,51757,51693],{"class":38},[28,51759,4235],{"class":60},[28,51761,51748],{"class":34},[28,51763,1558],{"class":38},[28,51765,51766,51769,51771,51773,51775,51778,51781],{"class":30,"line":1941},[28,51767,51768],{"class":60},"            border-left",[28,51770,51693],{"class":38},[28,51772,61],{"class":60},[28,51774,51748],{"class":34},[28,51776,51777],{"class":60}," solid",[28,51779,51780],{"class":60}," pink",[28,51782,1558],{"class":38},[28,51784,51785,51788,51790,51792,51794,51796,51798],{"class":30,"line":1955},[28,51786,51787],{"class":60},"            border-bottom",[28,51789,51693],{"class":38},[28,51791,61],{"class":60},[28,51793,51748],{"class":34},[28,51795,51777],{"class":60},[28,51797,51780],{"class":60},[28,51799,1558],{"class":38},[28,51801,51802,51804,51806,51808,51810,51813],{"class":30,"line":1960},[28,51803,51690],{"class":60},[28,51805,51693],{"class":38},[28,51807,1054],{"class":60},[28,51809,51748],{"class":34},[28,51811,51812],{"class":60}," auto",[28,51814,1558],{"class":38},[28,51816,51817,51820,51822,51825],{"class":30,"line":1989},[28,51818,51819],{"class":60},"            justify-content",[28,51821,51693],{"class":38},[28,51823,51824],{"class":60},"space-around",[28,51826,1558],{"class":38},[28,51828,51829,51832,51834,51837],{"class":30,"line":1994},[28,51830,51831],{"class":60},"            align-items",[28,51833,51693],{"class":38},[28,51835,51836],{"class":60},"flex-end",[28,51838,1558],{"class":38},[28,51840,51841,51844,51846,51849],{"class":30,"line":2011},[28,51842,51843],{"class":60},"            text-align",[28,51845,51693],{"class":38},[28,51847,51848],{"class":60},"center",[28,51850,1558],{"class":38},[28,51852,51853],{"class":30,"line":2016},[28,51854,2791],{"class":38},[28,51856,51857],{"class":30,"line":2021},[28,51858,2662],{"emptyLinePlaceholder":336},[28,51860,51861,51863,51865,51868],{"class":30,"line":2026},[28,51862,51721],{"class":2225},[28,51864,1357],{"class":34},[28,51866,51867],{"class":51556},"div",[28,51869,15834],{"class":38},[28,51871,51872,51874,51876,51878],{"class":30,"line":2040},[28,51873,51728],{"class":60},[28,51875,51693],{"class":38},[28,51877,51733],{"class":60},[28,51879,1558],{"class":38},[28,51881,51882,51884,51886,51888,51890],{"class":30,"line":2045},[28,51883,51740],{"class":60},[28,51885,51693],{"class":38},[28,51887,1054],{"class":60},[28,51889,51748],{"class":34},[28,51891,1558],{"class":38},[28,51893,51894,51897,51899,51902],{"class":30,"line":2839},[28,51895,51896],{"class":60},"            background-color",[28,51898,51693],{"class":38},[28,51900,51901],{"class":60},"pink",[28,51903,1558],{"class":38},[28,51905,51906,51909,51911,51914],{"class":30,"line":2853},[28,51907,51908],{"class":60},"            flex-direction",[28,51910,51693],{"class":38},[28,51912,51913],{"class":60},"column",[28,51915,1558],{"class":38},[28,51917,51918,51920,51922,51925],{"class":30,"line":2861},[28,51919,51819],{"class":60},[28,51921,51693],{"class":38},[28,51923,51924],{"class":60},"space-between",[28,51926,1558],{"class":38},[28,51928,51929],{"class":30,"line":2866},[28,51930,2791],{"class":38},[28,51932,51933],{"class":30,"line":2872},[28,51934,2662],{"emptyLinePlaceholder":336},[28,51936,51937,51939,51942,51945],{"class":30,"line":2878},[28,51938,51721],{"class":2225},[28,51940,51941],{"class":51556}," div",[28,51943,51944],{"class":51556}," span",[28,51946,15834],{"class":38},[28,51948,51949],{"class":30,"line":2883},[28,51950,2662],{"emptyLinePlaceholder":336},[28,51952,51953,51956,51958,51961,51963],{"class":30,"line":8210},[28,51954,51955],{"class":60},"            margin-top",[28,51957,51693],{"class":38},[28,51959,51960],{"class":60},"-20",[28,51962,51748],{"class":34},[28,51964,1558],{"class":38},[28,51966,51967],{"class":30,"line":8234},[28,51968,2791],{"class":38},[28,51970,51971],{"class":30,"line":8239},[28,51972,2662],{"emptyLinePlaceholder":336},[28,51974,51975,51977,51979,51982],{"class":30,"line":8245},[28,51976,51721],{"class":2225},[28,51978,51941],{"class":51556},[28,51980,51981],{"class":51556}," h4",[28,51983,15834],{"class":38},[28,51985,51986,51989,51991,51994,51996],{"class":30,"line":8272},[28,51987,51988],{"class":60},"            margin-bottom",[28,51990,51693],{"class":38},[28,51992,51993],{"class":60},"-35",[28,51995,51748],{"class":34},[28,51997,1558],{"class":38},[28,51999,52000,52002,52004,52006,52008],{"class":30,"line":8277},[28,52001,51740],{"class":60},[28,52003,51693],{"class":38},[28,52005,756],{"class":60},[28,52007,51748],{"class":34},[28,52009,1558],{"class":38},[28,52011,52012,52015,52017,52020,52022],{"class":30,"line":8283},[28,52013,52014],{"class":60},"            margin-left",[28,52016,51693],{"class":38},[28,52018,52019],{"class":60},"-10",[28,52021,51748],{"class":34},[28,52023,1558],{"class":38},[28,52025,52026],{"class":30,"line":8295},[28,52027,2791],{"class":38},[28,52029,52030,52033,52035],{"class":30,"line":8307},[28,52031,52032],{"class":38},"    \u003C\u002F",[28,52034,328],{"class":51556},[28,52036,51563],{"class":38},[28,52038,52039,52042,52044],{"class":30,"line":8319},[28,52040,52041],{"class":38},"\u003C\u002F",[28,52043,51590],{"class":51556},[28,52045,51563],{"class":38},[28,52047,52048],{"class":30,"line":9978},[28,52049,2662],{"emptyLinePlaceholder":336},[28,52051,52052,52054,52057],{"class":30,"line":10003},[28,52053,1307],{"class":38},[28,52055,52056],{"class":51556},"body",[28,52058,51563],{"class":38},[28,52060,52061],{"class":30,"line":10026},[28,52062,2662],{"emptyLinePlaceholder":336},[28,52064,52065,52067,52070],{"class":30,"line":10050},[28,52066,51597],{"class":38},[28,52068,52069],{"class":51556},"script",[28,52071,51563],{"class":38},[28,52073,52074],{"class":30,"line":10055},[28,52075,52076],{"class":87},"        \u002F\u002F 1. 四次弹框效果\n",[28,52078,52079],{"class":30,"line":10060},[28,52080,52081],{"class":87},"        \u002F\u002F 声明一个新的数组\n",[28,52083,52084,52087,52090,52092],{"class":30,"line":10065},[28,52085,52086],{"class":34},"        let",[28,52088,52089],{"class":38}," arr ",[28,52091,54],{"class":34},[28,52093,52094],{"class":38}," []\n",[28,52096,52097,52099,52101,52104,52106,52108,52110,52112,52114,52117,52119,52121],{"class":30,"line":10074},[28,52098,3665],{"class":34},[28,52100,1920],{"class":38},[28,52102,52103],{"class":34},"let",[28,52105,9700],{"class":38},[28,52107,54],{"class":34},[28,52109,25381],{"class":60},[28,52111,9707],{"class":38},[28,52113,1853],{"class":34},[28,52115,52116],{"class":60}," 4",[28,52118,3476],{"class":38},[28,52120,2554],{"class":34},[28,52122,12704],{"class":38},[28,52124,52125],{"class":30,"line":10079},[28,52126,52127],{"class":87},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[28,52129,52130],{"class":30,"line":10085},[28,52131,52132],{"class":87},"            \u002F\u002F arr.push(num)\n",[28,52134,52135,52138,52141,52143,52146,52148,52151,52153,52156],{"class":30,"line":10106},[28,52136,52137],{"class":38},"            arr.",[28,52139,52140],{"class":2225},"push",[28,52142,413],{"class":38},[28,52144,52145],{"class":2225},"prompt",[28,52147,413],{"class":38},[28,52149,52150],{"class":127},"`请输入第${",[28,52152,840],{"class":38},[28,52154,52155],{"class":127},"}季度的数据:`",[28,52157,30757],{"class":38},[28,52159,52160],{"class":30,"line":10112},[28,52161,52162],{"class":87},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[28,52164,52165],{"class":30,"line":10126},[28,52166,2791],{"class":38},[28,52168,52169],{"class":30,"line":10132},[28,52170,52171],{"class":87},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[28,52173,52174],{"class":30,"line":10159},[28,52175,52176],{"class":87},"        \u002F\u002F 盒子开头\n",[28,52178,52179,52182,52185,52187,52190],{"class":30,"line":10168},[28,52180,52181],{"class":38},"        document.",[28,52183,52184],{"class":2225},"write",[28,52186,413],{"class":38},[28,52188,52189],{"class":127},"` \u003Cdiv class=\"box\">`",[28,52191,81],{"class":38},[28,52193,52194],{"class":30,"line":10174},[28,52195,2662],{"emptyLinePlaceholder":336},[28,52197,52198],{"class":30,"line":10182},[28,52199,52200],{"class":87},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[28,52202,52203,52205,52207,52209,52211,52213,52215,52217,52219,52222,52225,52227,52229],{"class":30,"line":10187},[28,52204,3665],{"class":34},[28,52206,1920],{"class":38},[28,52208,52103],{"class":34},[28,52210,9700],{"class":38},[28,52212,54],{"class":34},[28,52214,4355],{"class":60},[28,52216,9707],{"class":38},[28,52218,1307],{"class":34},[28,52220,52221],{"class":38}," arr.",[28,52223,52224],{"class":60},"length",[28,52226,3476],{"class":38},[28,52228,2554],{"class":34},[28,52230,12704],{"class":38},[28,52232,52233,52236,52238,52240],{"class":30,"line":16866},[28,52234,52235],{"class":38},"            document.",[28,52237,52184],{"class":2225},[28,52239,413],{"class":38},[28,52241,52242],{"class":127},"`\n",[28,52244,52245,52248,52250,52252,52254,52256],{"class":30,"line":16872},[28,52246,52247],{"class":127},"              \u003Cdiv style=\"height: ${",[28,52249,4142],{"class":38},[28,52251,1287],{"class":127},[28,52253,840],{"class":38},[28,52255,1337],{"class":127},[28,52257,52258],{"class":127},"}px;\">\n",[28,52260,52261,52264,52266,52268,52270,52272],{"class":30,"line":16895},[28,52262,52263],{"class":127},"                \u003Cspan>${",[28,52265,4142],{"class":38},[28,52267,1287],{"class":127},[28,52269,840],{"class":38},[28,52271,1337],{"class":127},[28,52273,52274],{"class":127},"}\u003C\u002Fspan>\n",[28,52276,52277,52280,52282,52284,52286],{"class":30,"line":16901},[28,52278,52279],{"class":127},"                \u003Ch4>第${",[28,52281,840],{"class":38},[28,52283,45822],{"class":34},[28,52285,25381],{"class":60},[28,52287,52288],{"class":127},"}季度\u003C\u002Fh4>\n",[28,52290,52291],{"class":30,"line":16924},[28,52292,52293],{"class":127},"              \u003C\u002Fdiv>          \n",[28,52295,52296,52299],{"class":30,"line":16938},[28,52297,52298],{"class":127},"            `",[28,52300,81],{"class":38},[28,52302,52303],{"class":30,"line":16958},[28,52304,2791],{"class":38},[28,52306,52307],{"class":30,"line":16964},[28,52308,52309],{"class":87},"        \u002F\u002F 盒子结尾\n",[28,52311,52312,52314,52316,52318,52321],{"class":30,"line":16975},[28,52313,52181],{"class":38},[28,52315,52184],{"class":2225},[28,52317,413],{"class":38},[28,52319,52320],{"class":127},"` \u003C\u002Fdiv>`",[28,52322,81],{"class":38},[28,52324,52325,52327,52329],{"class":30,"line":16998},[28,52326,52032],{"class":38},[28,52328,52069],{"class":51556},[28,52330,51563],{"class":38},[28,52332,52333,52335,52337],{"class":30,"line":17020},[28,52334,52041],{"class":38},[28,52336,52056],{"class":51556},[28,52338,51563],{"class":38},[28,52340,52341],{"class":30,"line":17025},[28,52342,2662],{"emptyLinePlaceholder":336},[28,52344,52345,52347,52349],{"class":30,"line":17031},[28,52346,52041],{"class":38},[28,52348,50891],{"class":51556},[28,52350,51563],{"class":38},[380,52352,52354],{"id":52353},"_284-冒泡排序","2.8.4 冒泡排序",[18,52356,52358],{"className":50889,"code":52357,"language":50891,"meta":23,"style":23},"\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",[25,52359,52360,52370,52384,52388,52396,52411,52431,52443,52451,52455,52463,52471,52503,52536,52573,52578,52597,52602,52615,52630,52646,52650,52655,52659,52669,52678,52686,52690],{"__ignoreMap":23},[28,52361,52362,52364,52366,52368],{"class":30,"line":31},[28,52363,51553],{"class":38},[28,52365,51557],{"class":51556},[28,52367,51560],{"class":2225},[28,52369,51563],{"class":38},[28,52371,52372,52374,52376,52378,52380,52382],{"class":30,"line":48},[28,52373,1307],{"class":38},[28,52375,50891],{"class":51556},[28,52377,51572],{"class":2225},[28,52379,54],{"class":38},[28,52381,51577],{"class":127},[28,52383,51563],{"class":38},[28,52385,52386],{"class":30,"line":84},[28,52387,2662],{"emptyLinePlaceholder":336},[28,52389,52390,52392,52394],{"class":30,"line":91},[28,52391,1307],{"class":38},[28,52393,51590],{"class":51556},[28,52395,51563],{"class":38},[28,52397,52398,52401,52403,52405,52407,52409],{"class":30,"line":97},[28,52399,52400],{"class":38},"  \u003C",[28,52402,51600],{"class":51556},[28,52404,51603],{"class":2225},[28,52406,54],{"class":38},[28,52408,51608],{"class":127},[28,52410,51563],{"class":38},[28,52412,52413,52415,52417,52419,52421,52423,52425,52427,52429],{"class":30,"line":103},[28,52414,52400],{"class":38},[28,52416,51600],{"class":51556},[28,52418,15182],{"class":2225},[28,52420,54],{"class":38},[28,52422,51647],{"class":127},[28,52424,51627],{"class":2225},[28,52426,54],{"class":38},[28,52428,51654],{"class":127},[28,52430,51563],{"class":38},[28,52432,52433,52435,52437,52439,52441],{"class":30,"line":109},[28,52434,52400],{"class":38},[28,52436,51663],{"class":51556},[28,52438,51666],{"class":38},[28,52440,51663],{"class":51556},[28,52442,51563],{"class":38},[28,52444,52445,52447,52449],{"class":30,"line":118},[28,52446,52041],{"class":38},[28,52448,51590],{"class":51556},[28,52450,51563],{"class":38},[28,52452,52453],{"class":30,"line":124},[28,52454,2662],{"emptyLinePlaceholder":336},[28,52456,52457,52459,52461],{"class":30,"line":131},[28,52458,1307],{"class":38},[28,52460,52056],{"class":51556},[28,52462,51563],{"class":38},[28,52464,52465,52467,52469],{"class":30,"line":137},[28,52466,52400],{"class":38},[28,52468,52069],{"class":51556},[28,52470,51563],{"class":38},[28,52472,52473,52476,52478,52480,52483,52485,52487,52489,52491,52493,52495,52497,52499,52501],{"class":30,"line":143},[28,52474,52475],{"class":34},"    let",[28,52477,52089],{"class":38},[28,52479,54],{"class":34},[28,52481,52482],{"class":38}," [",[28,52484,721],{"class":60},[28,52486,12697],{"class":38},[28,52488,73],{"class":60},[28,52490,12697],{"class":38},[28,52492,78],{"class":60},[28,52494,12697],{"class":38},[28,52496,211],{"class":60},[28,52498,12697],{"class":38},[28,52500,61],{"class":60},[28,52502,33502],{"class":38},[28,52504,52505,52507,52509,52511,52513,52515,52517,52519,52521,52523,52525,52528,52530,52532,52534],{"class":30,"line":149},[28,52506,3463],{"class":34},[28,52508,1920],{"class":38},[28,52510,52103],{"class":34},[28,52512,9700],{"class":38},[28,52514,54],{"class":34},[28,52516,4355],{"class":60},[28,52518,9707],{"class":38},[28,52520,1307],{"class":34},[28,52522,52221],{"class":38},[28,52524,52224],{"class":60},[28,52526,52527],{"class":34}," -",[28,52529,25381],{"class":60},[28,52531,3476],{"class":38},[28,52533,2554],{"class":34},[28,52535,12704],{"class":38},[28,52537,52538,52541,52543,52545,52547,52549,52551,52553,52555,52557,52559,52561,52563,52565,52567,52569,52571],{"class":30,"line":1890},[28,52539,52540],{"class":34},"      for",[28,52542,1920],{"class":38},[28,52544,52103],{"class":34},[28,52546,9762],{"class":38},[28,52548,54],{"class":34},[28,52550,4355],{"class":60},[28,52552,9769],{"class":38},[28,52554,1307],{"class":34},[28,52556,52221],{"class":38},[28,52558,52224],{"class":60},[28,52560,52527],{"class":34},[28,52562,9700],{"class":38},[28,52564,930],{"class":34},[28,52566,25381],{"class":60},[28,52568,9776],{"class":38},[28,52570,2554],{"class":34},[28,52572,12704],{"class":38},[28,52574,52575],{"class":30,"line":1904},[28,52576,52577],{"class":87},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[28,52579,52580,52582,52585,52587,52590,52592,52594],{"class":30,"line":1909},[28,52581,2759],{"class":34},[28,52583,52584],{"class":38}," (arr[j] ",[28,52586,1357],{"class":34},[28,52588,52589],{"class":38}," arr[j ",[28,52591,880],{"class":34},[28,52593,25381],{"class":60},[28,52595,52596],{"class":38},"]) {\n",[28,52598,52599],{"class":30,"line":1915},[28,52600,52601],{"class":87},"          \u002F\u002F 交换两个变量\n",[28,52603,52604,52607,52610,52612],{"class":30,"line":1936},[28,52605,52606],{"class":34},"          let",[28,52608,52609],{"class":38}," tmp ",[28,52611,54],{"class":34},[28,52613,52614],{"class":38}," arr[j]\n",[28,52616,52617,52620,52622,52624,52626,52628],{"class":30,"line":1941},[28,52618,52619],{"class":38},"          arr[j] ",[28,52621,54],{"class":34},[28,52623,52589],{"class":38},[28,52625,880],{"class":34},[28,52627,25381],{"class":60},[28,52629,33502],{"class":38},[28,52631,52632,52635,52637,52639,52641,52643],{"class":30,"line":1955},[28,52633,52634],{"class":38},"          arr[j ",[28,52636,880],{"class":34},[28,52638,25381],{"class":60},[28,52640,4705],{"class":38},[28,52642,54],{"class":34},[28,52644,52645],{"class":38}," tmp\n",[28,52647,52648],{"class":30,"line":1960},[28,52649,2791],{"class":38},[28,52651,52652],{"class":30,"line":1989},[28,52653,52654],{"class":38},"      }\n",[28,52656,52657],{"class":30,"line":1994},[28,52658,2449],{"class":38},[28,52660,52661,52664,52666],{"class":30,"line":2011},[28,52662,52663],{"class":38},"    document.",[28,52665,52184],{"class":2225},[28,52667,52668],{"class":38},"(arr)\n",[28,52670,52671,52674,52676],{"class":30,"line":2016},[28,52672,52673],{"class":38},"  \u003C\u002F",[28,52675,52069],{"class":51556},[28,52677,51563],{"class":38},[28,52679,52680,52682,52684],{"class":30,"line":2021},[28,52681,52041],{"class":38},[28,52683,52056],{"class":51556},[28,52685,51563],{"class":38},[28,52687,52688],{"class":30,"line":2026},[28,52689,2662],{"emptyLinePlaceholder":336},[28,52691,52692,52694,52696],{"class":30,"line":2040},[28,52693,52041],{"class":38},[28,52695,50891],{"class":51556},[28,52697,51563],{"class":38},[14,52699,52700],{},[1727,52701],{"alt":23,"src":52702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52704,52705],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52707,52708],{},"let arr = [4, 2, 5, 1, 3]",[14,52710,52711],{},"\u002F\u002F 1.升序排列写法",[14,52713,52714],{},"arr.sort(function (a, b) {",[14,52716,52717],{},"return a - b",[14,52719,52720],{},"})",[14,52722,52723],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52725,52726],{},"\u002F\u002F 降序排列写法",[14,52728,52714],{},[14,52730,52731],{},"return b - a",[14,52733,52720],{},[14,52735,52736],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[351,52738,52740],{"id":52739},"_29-函数","2.9 函数",[14,52742,52743],{},[1727,52744],{"alt":23,"src":52745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52747,52748],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52750,52751],{},"函数的声明用function",[14,52753,52754],{},"函数里边可以嵌套函数",[380,52756,52758],{"id":52757},"_291-函数传参","2.9.1 函数传参",[14,52760,52761],{},[1727,52762],{"alt":23,"src":52763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52765,52766],{},[1727,52767],{"alt":23,"src":52768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1404,52770,52771,52774,52777,52780,52783,52786],{},[366,52772,52773],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[366,52775,52776],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[366,52778,52779],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[366,52781,52782],{},"开发中尽量保持形参和实参个数一致",[366,52784,52785],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[366,52787,52788],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52790,52791],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[380,52793,52795],{"id":52794},"_292-函数的返回值","2.9.2 函数的返回值",[14,52797,52798],{},[1727,52799],{"alt":23,"src":52800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52802,52803],{},[1727,52804],{"alt":23,"src":52805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1404,52807,52808,52811,52814,52817,52820],{},[366,52809,52810],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[366,52812,52813],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[366,52815,52816],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[366,52818,52819],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[366,52821,52822],{},"断点调试:进入函数内部看执行过程F11",[380,52824,52826],{"id":52825},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[18,52828,52830],{"className":50889,"code":52829,"language":50891,"meta":23,"style":23},"    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",[25,52831,52832,52837,52842,52846,52851],{"__ignoreMap":23},[28,52833,52834],{"class":30,"line":31},[28,52835,52836],{"class":38},"    function fn(a, b) {\n",[28,52838,52839],{"class":30,"line":48},[28,52840,52841],{"class":38},"      console.log(a + b);\n",[28,52843,52844],{"class":30,"line":84},[28,52845,2449],{"class":38},[28,52847,52848],{"class":30,"line":91},[28,52849,52850],{"class":38},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[28,52852,52853],{"class":30,"line":97},[28,52854,52855],{"class":38},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[380,52857,52859],{"id":52858},"_294-作用域","2.9.4 作用域",[1404,52861,52862,52868,52873,52876,52879],{},[366,52863,52864,52865],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[555,52866,52867],{},"作用域",[366,52869,52870],{},[555,52871,52872],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[366,52874,52875],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[366,52877,52878],{},"函数内部可以直接所使用全局变量",[366,52880,52881],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52883,14895],{},[18,52885,52887],{"className":50889,"code":52886,"language":50891,"meta":23,"style":23},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[25,52888,52889,52894,52899,52903,52908,52913,52918],{"__ignoreMap":23},[28,52890,52891],{"class":30,"line":31},[28,52892,52893],{"class":38},"    function fun() {\n",[28,52895,52896],{"class":30,"line":48},[28,52897,52898],{"class":38},"      num = 10\n",[28,52900,52901],{"class":30,"line":84},[28,52902,2449],{"class":38},[28,52904,52905],{"class":30,"line":91},[28,52906,52907],{"class":38},"    fun()\n",[28,52909,52910],{"class":30,"line":97},[28,52911,52912],{"class":38},"    console.log(num)\n",[28,52914,52915],{"class":30,"line":103},[28,52916,52917],{"class":38},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[28,52919,52920],{"class":30,"line":109},[28,52921,52922],{"class":38},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1404,52924,52925,52928],{},[366,52926,52927],{},"函数内部的形参可以看做是局部变量",[366,52929,52930],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52932,52933,52934],{},"变量访问原则： ",[555,52935,52936],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[380,52938,52940],{"id":52939},"_295-匿名函数","2.9.5 匿名函数",[14,52942,52943],{},"函数可以分为具名函数和匿名函数",[14,52945,52946],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[363,52948,52949],{},[366,52950,52951],{},"函数表达式",[14,52953,52954],{},[1727,52955],{"alt":23,"src":52956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52958,52959],{},"里边也可以写参数",[14,52961,52962],{},"具名函数调用位置可以随意调整；",[14,52964,52965],{},"匿名函数函数表达式形式只能在声明后才可以使用",[363,52967,52968],{"start":48},[366,52969,52970],{},"立即执行函数",[14,52972,52973],{},[1727,52974],{"alt":23,"src":52975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52977,52978],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52980,52981],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52983,52984],{},"(function () {})();",[14,52986,52987],{},"不要落下最后的;",[14,52989,52990],{},"立即执行函数必须要加;",[14,52992,52993],{},"分号写前写后都没问题",[14,52995,52996],{},"写前：",[14,52998,52999],{},"(function() {})()",[14,53001,53002],{},";(function () {})();",[14,53004,53005],{},"写后:",[14,53007,53008],{},"(function() {})();",[14,53010,52984],{},[14,53012,53013],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53015,53016],{},"还有一种写法：",[14,53018,53019],{},"(function(){}());",[14,53021,53022],{},"或者:",[14,53024,53025],{},"!function(){}();",[14,53027,53028],{},"立即执行函数有时候也是可以加名字的：",[14,53030,53031],{},"(function flexible(window,document) {}(window,document));",[14,53033,53034],{},"省一些调用方法",[380,53036,53038],{"id":53037},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53040,53041],{},[1727,53042],{"alt":23,"src":53043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53045,53046],{},"这样就不用非得给x,y初始化了",[14,53048,53049],{},[1727,53050],{"alt":23,"src":53051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53053,53054],{},"代码执行时先看左边",[14,53056,53057],{},"例如：console.log(false && 3+5)",[14,53059,53060],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53062,53063],{},"&&都是真时，就返回最后一个真值",[14,53065,53066],{},"console.log(11 && 22)",[14,53068,53069],{},"输出22",[14,53071,53072],{},"逻辑与：遇真则真",[14,53074,14895],{},[14,53076,53077],{},"let age=1",[14,53079,53080],{},"console.log(11 || age++)",[14,53082,53083],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53085,53086],{},"console.log(11 || 22)",[14,53088,53089],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53091,53092],{},"||如果都是假的话，就取最后一个假的值了",[380,53094,53096],{"id":53095},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53098,53099],{},"显示转换：",[14,53101,53102,53105,53106],{},[555,53103,53104],{},"记忆","： ",[555,53107,53108],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53110,53111],{},"空字符串为假，其他字符串全为真",[14,53113,53114],{},[1727,53115],{"alt":23,"src":53116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53118,53119],{},"隐式转换：",[14,53121,53122],{},[1727,53123],{"alt":23,"src":53124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53126,53127],{},"隐式转换:",[14,53129,53130],{},"null+3=3",[14,53132,53133],{},"undefined+3=NaN",[14,53135,53136],{},"null==undefined 输出true,他两个都当0看",[14,53138,53139],{},"null===undefined 输出false",[14,53141,53142],{},"undefined做任何操作都是NaN",[14,53144,53145],{},"NaN不等于NaN，NaN表示计算错误",[351,53147,53149],{"id":53148},"_210-对象","2.10 对象",[380,53151,53153],{"id":53152},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53155,53156],{},"对象也是一种数据类型，里边的数据是无序的",[14,53158,53159],{},"对象由属性和方法组成",[14,53161,53162],{},[1727,53163],{"alt":23,"src":53164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53166,53167],{},[1727,53168],{"alt":23,"src":53169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53171,53172],{},[1727,53173],{"alt":23,"src":53174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[380,53176,53178],{"id":53177},"_2102-对象属性","2.10.2 对象属性",[14,53180,53181],{},[1727,53182],{"alt":23,"src":53183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[363,53185,53186],{},[366,53187,53188],{},"查询对象",[14,53190,53191],{},"对象名.属性 goods.uname",[14,53193,53194],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53196,53197],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53199,53200],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53202,53203],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[363,53205,53206],{"start":48},[366,53207,53208],{},"重新赋值",[14,53210,53211],{},"对象名.属性=新值",[363,53213,53214],{"start":84},[366,53215,53216],{},"增加新数据",[14,53218,53211],{},[363,53220,53221],{"start":91},[366,53222,53223],{},"删除对象中的属性",[14,53225,53226],{},"delete 对象名.属性",[380,53228,53230],{"id":53229},"_2103-对象方法","2.10.3 对象方法",[14,53232,53233],{},[1727,53234],{"alt":23,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53237,53238],{},"后边跟的是匿名函数",[14,53240,53241],{},"对象外面的叫函数；对象内部的叫方法",[14,53243,53244],{},[1727,53245],{"alt":23,"src":53246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[380,53248,53250],{"id":53249},"_2104-遍历对象","2.10.4 遍历对象",[14,53252,53253],{},"理解为加括号的python字典遍历",[14,53255,53256],{},[1727,53257],{"alt":23,"src":53258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53260,53261],{},"k是字符串类型",[14,53263,53264],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[18,53266,53268],{"className":50889,"code":53267,"language":50891,"meta":23,"style":23},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[25,53269,53270,53275,53280,53285,53290],{"__ignoreMap":23},[28,53271,53272],{"class":30,"line":31},[28,53273,53274],{"class":38},"   let arr = [1, 2, 3]\n",[28,53276,53277],{"class":30,"line":48},[28,53278,53279],{"class":38},"    for (let k in arr) {\n",[28,53281,53282],{"class":30,"line":84},[28,53283,53284],{"class":38},"      console.log(k)\n",[28,53286,53287],{"class":30,"line":91},[28,53288,53289],{"class":38},"      console.log(arr[k])\n",[28,53291,53292],{"class":30,"line":97},[28,53293,2449],{"class":38},[14,53295,53296],{},[1727,53297],{"alt":23,"src":53298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53300,53301],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53303,53304],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53306,53307],{},"for in 得到的k是属性名",[52069,53309,53310],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53312,53313],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[380,53315,53317],{"id":53316},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53319,53320],{},"数组中放对象信息",[18,53322,53326],{"className":53323,"code":53324,"language":53325,"meta":23,"style":23},"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",[25,53327,53328,53336,53341,53346,53351,53356,53361,53366,53371,53376,53381,53386,53391,53395,53399],{"__ignoreMap":23},[28,53329,53330,53332,53334],{"class":30,"line":31},[28,53331,1307],{"class":38},[28,53333,52069],{"class":51556},[28,53335,51563],{"class":38},[28,53337,53338],{"class":30,"line":48},[28,53339,53340],{"class":38},"    let students = [\n",[28,53342,53343],{"class":30,"line":84},[28,53344,53345],{"class":38},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[28,53347,53348],{"class":30,"line":91},[28,53349,53350],{"class":38},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[28,53352,53353],{"class":30,"line":97},[28,53354,53355],{"class":38},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[28,53357,53358],{"class":30,"line":103},[28,53359,53360],{"class":38},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[28,53362,53363],{"class":30,"line":109},[28,53364,53365],{"class":38},"    ]\n",[28,53367,53368],{"class":30,"line":118},[28,53369,53370],{"class":38},"    for (let i = 0; i \u003C students.length; i++) {\n",[28,53372,53373],{"class":30,"line":124},[28,53374,53375],{"class":38},"      for (let k in students[i]) {\n",[28,53377,53378],{"class":30,"line":131},[28,53379,53380],{"class":38},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[28,53382,53383],{"class":30,"line":137},[28,53384,53385],{"class":38},"        \u002F\u002F输出每个人的名字：\n",[28,53387,53388],{"class":30,"line":143},[28,53389,53390],{"class":38},"        \u002F\u002Fconsole.log(students[i].name)\n",[28,53392,53393],{"class":30,"line":149},[28,53394,52654],{"class":38},[28,53396,53397],{"class":30,"line":1890},[28,53398,2449],{"class":38},[28,53400,53401,53403,53405],{"class":30,"line":1904},[28,53402,52673],{"class":38},[28,53404,52069],{"class":51556},[28,53406,51563],{"class":38},[380,53408,53410],{"id":53409},"_2106-内置对象","2.10.6 内置对象",[14,53412,53413],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[363,53415,53416],{},[366,53417,53418],{},"数学对象Math",[14,53420,53421],{},[1727,53422],{"alt":23,"src":53423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53425,53426],{},[51,53427,53430],{"href":53428,"rel":53429},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24127],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53432,53433],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53435,53436],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53438,53439],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53441,53442],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53444,53445],{},"null属于对象数据类型",[363,53447,53448],{"start":48},[366,53449,53450],{},"生成任意范围随机数",[14,53452,53453],{},[1727,53454],{"alt":23,"src":53455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53457,53458],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53460,53461],{},"乘以几就取不到几",[14,53463,53464],{},"取数组中的随机元素：",[14,53466,53467],{},"let arr = ['red', 'green', 'blue']",[14,53469,53470],{},"let random = Math.floor(Math.random() * arr.length)",[14,53472,53473],{},"console.log(arr[random])",[14,53475,53476],{},"这个函数得到的是全闭区间",[14,53478,53479],{},"function getRandom(N, M) {",[14,53481,53482],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53484,1343],{},[14,53486,53487],{},"console.log(getRandom(4, 8))",[380,53489,53491],{"id":53490},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53493,53494],{},[1727,53495],{"alt":23,"src":53496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53498,53499],{},[1727,53500],{"alt":23,"src":53501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53503,53504],{},[1727,53505],{"alt":23,"src":53506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53508,53509],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53511,53512],{},[1727,53513],{"alt":23,"src":53514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53516,53517],{},[1727,53518],{"alt":23,"src":53519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53521,53522],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53524,53525],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53527,53528],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[328,53530,53531],{},"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":23,"searchDepth":48,"depth":48,"links":53533},[53534,53542,53543,53544,53545,53546,53553,53557,53563,53572],{"id":50724,"depth":48,"text":50725,"children":53535},[53536,53537,53538,53539,53540,53541],{"id":50728,"depth":84,"text":50729},{"id":50745,"depth":84,"text":50746},{"id":50785,"depth":84,"text":50786},{"id":50797,"depth":84,"text":50798},{"id":50806,"depth":84,"text":50807},{"id":50854,"depth":84,"text":50855},{"id":50864,"depth":48,"text":50865},{"id":50952,"depth":48,"text":50953},{"id":50975,"depth":48,"text":50976},{"id":50987,"depth":48,"text":50988},{"id":51174,"depth":48,"text":51175,"children":53547},[53548,53549,53550,53551,53552],{"id":51178,"depth":84,"text":51179},{"id":51187,"depth":84,"text":51188},{"id":51215,"depth":84,"text":51216},{"id":51251,"depth":84,"text":51252},{"id":51276,"depth":84,"text":51277},{"id":51288,"depth":48,"text":51289,"children":53554},[53555,53556],{"id":51309,"depth":84,"text":51310},{"id":51403,"depth":84,"text":51404},{"id":51461,"depth":48,"text":51462,"children":53558},[53559,53560,53561,53562],{"id":51465,"depth":84,"text":51466},{"id":51489,"depth":84,"text":51490},{"id":51542,"depth":84,"text":51543},{"id":52353,"depth":84,"text":52354},{"id":52739,"depth":48,"text":52740,"children":53564},[53565,53566,53567,53568,53569,53570,53571],{"id":52757,"depth":84,"text":52758},{"id":52794,"depth":84,"text":52795},{"id":52825,"depth":84,"text":52826},{"id":52858,"depth":84,"text":52859},{"id":52939,"depth":84,"text":52940},{"id":53037,"depth":84,"text":53038},{"id":53095,"depth":84,"text":53096},{"id":53148,"depth":48,"text":53149,"children":53573},[53574,53575,53576,53577,53578,53579,53580],{"id":53152,"depth":84,"text":53153},{"id":53177,"depth":84,"text":53178},{"id":53229,"depth":84,"text":53230},{"id":53249,"depth":84,"text":53250},{"id":53316,"depth":84,"text":53317},{"id":53409,"depth":84,"text":53410},{"id":53490,"depth":84,"text":53491},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50716,"description":333},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53587,"title":53588,"body":53589,"description":333,"extension":334,"meta":76929,"navigation":336,"path":76930,"seo":76931,"stem":76932,"__hash__":76933},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53590,"toc":76869},[53591,53594,53597,53600,53605,53608,53611,53614,53618,53622,53628,53633,53641,53648,53651,53655,53660,53665,53670,53673,53676,53687,53690,53694,53697,53700,53705,53710,53715,53718,53721,53813,53816,53821,53824,53829,53832,53835,53840,53843,53848,53852,53855,53869,53873,53878,53881,53884,53888,53893,53896,53900,53904,53909,53913,53918,53921,53924,53927,53930,53933,53936,53941,53946,53974,53977,53980,53983,53988,53991,53994,53997,54000,54004,54033,54037,54042,54047,54050,54053,54056,54061,54176,54181,54186,54347,54352,54355,54359,54364,54369,54372,54375,54378,54381,54384,54387,54390,54393,54396,54399,54402,54405,54408,54411,54413,54416,54419,54422,54427,54431,54828,54831,54837,54841,54846,56128,56133,56136,56139,56142,56147,57343,57347,57353,57358,57361,57366,57371,57375,57379,57384,57387,57392,57395,57398,57402,58310,58313,58317,58538,58541,58544,58547,58773,58776,59000,59003,59007,59012,59015,59018,59246,59249,59282,59285,59289,59294,59298,59301,59304,59307,59310,59313,59316,59319,59324,60604,60608,60611,61704,61708,61711,61714,61717,61720,61724,61727,61730,61732,61740,63221,63225,63228,63231,63234,63443,63446,63450,63454,63459,63464,63467,63470,63475,63479,63484,63487,63596,63600,63605,63610,63613,63616,63620,63625,63630,63635,63638,63641,63652,63655,63660,63665,63668,63671,63744,63748,63753,63756,63758,63769,63773,63778,65104,65107,65110,65113,65115,65118,65121,65124,65127,65130,65133,65136,65139,65142,65145,65148,65151,65153,65155,65158,65162,66256,66259,66262,66278,66292,66295,66300,66306,66311,66315,66319,66324,66328,66333,66775,66780,66783,66787,66792,66795,66798,66802,66807,66811,66816,66821,66825,66830,66835,66838,66843,66848,66852,66857,66862,66966,66969,66973,66978,67344,67347,67350,67353,67356,67359,67362,67365,67368,68664,68668,68673,68678,68681,68684,68687,68690,68692,68697,68702,68705,68709,68714,68719,68724,68727,68730,68733,68736,68739,68744,68747,68751,68756,68761,68765,68770,68773,68778,68781,68784,68787,68790,68793,68798,68801,68804,68807,68810,68814,68819,68822,68826,68831,68834,68837,68841,68870,68873,68877,68881,68886,68890,68895,68898,68901,68904,68907,68910,68913,68916,68919,68922,68925,68928,68931,68934,68937,68941,68946,68951,68954,68958,68962,68967,68970,68974,68977,68980,68985,68990,68995,69000,69005,69008,69011,69016,69021,69025,69030,69033,69038,69041,69044,69047,69050,69055,69058,69067,69071,69076,69079,69082,69086,69089,69094,69098,69101,69107,69113,69117,69143,69146,70707,70710,71206,71209,71214,71219,71224,71228,71233,71238,71243,71247,71252,71255,71258,71261,71264,71268,71271,71276,71279,71284,71288,71293,71296,71301,71306,71311,71314,71317,71322,71327,71330,71333,71337,71340,71345,71348,71353,71356,71361,71366,71371,71374,71379,71444,71447,71458,71462,71467,71639,71643,71648,71651,71654,71657,71661,71672,71676,71679,71684,71689,71692,71695,71698,71701,71704,71706,71709,71712,71715,71720,71723,71728,71731,71735,71738,71741,71755,71759,71762,71817,71822,71825,71828,71833,71836,71840,71845,71975,71979,71984,71989,72070,72075,72079,72082,72087,72092,72098,72101,72104,72107,72111,72116,72119,72130,72134,72151,75198,75202,75205,75208,75211,75232,75236,75239,75247,75250,75255,75258,75261,75266,75271,75275,75296,75300,75305,75308,75311,75314,75317,75321,75326,75329,75333,75338,75341,75346,75349,75354,75357,75362,76565,76569,76574,76577,76582,76866],[10,53592,53588],{"id":53593},"_3web-apis",[14,53595,53596],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53598,53599],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53601,53602],{},[1727,53603],{"alt":23,"src":53604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53606,53607],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53609,53610],{},"建议数组和对象使用 const 来声明",[14,53612,53613],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[351,53615,53617],{"id":53616},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[380,53619,53621],{"id":53620},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53623,53624,53627],{},[25,53625,53626],{},"document"," = HTML 文件解析后的对象化表示；",[14,53629,53630,53632],{},[25,53631,53626],{}," ≠ HTML 文件本身",[14,53634,53635,53640],{},[555,53636,53637],{},[25,53638,53639],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53642,53643,53647],{},[555,53644,53645],{},[25,53646,53626],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53649,53650],{},"document实际上为window.document的简写",[380,53652,53654],{"id":53653},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53656,53657],{},[1727,53658],{"alt":23,"src":53659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53661,53662],{},[1727,53663],{"alt":23,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53666,53667],{},[1727,53668],{"alt":23,"src":53669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53671,53672],{},"console.dir()",[14,53674,53675],{},"dir用来打印对象",[1404,53677,53678,53681,53684],{},[366,53679,53680],{},"任何一个标签，都是一个对象",[366,53682,53683],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[366,53685,53686],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53688,53689],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[380,53691,53693],{"id":53692},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53695,53696],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53698,53699],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53701,53702],{},[555,53703,53704],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[363,53706,53707],{},[366,53708,53709],{},"利用CSS选择器来获取标签元素",[14,53711,53712],{},[1727,53713],{"alt":23,"src":53714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53716,53717],{},"里边的选择器必须必须加引号！！！",[14,53719,53720],{},"只选择第一个元素",[18,53722,53724],{"className":53323,"code":53723,"language":53325,"meta":23,"style":23},"\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",[25,53725,53726,53734,53755,53774,53782,53787,53792,53797,53805],{"__ignoreMap":23},[28,53727,53728,53730,53732],{"class":30,"line":31},[28,53729,1307],{"class":38},[28,53731,52056],{"class":51556},[28,53733,51563],{"class":38},[28,53735,53736,53738,53740,53743,53745,53748,53751,53753],{"class":30,"line":48},[28,53737,52400],{"class":38},[28,53739,51867],{"class":51556},[28,53741,53742],{"class":2225}," class",[28,53744,54],{"class":38},[28,53746,53747],{"class":127},"\"box\"",[28,53749,53750],{"class":38},">123\u003C\u002F",[28,53752,51867],{"class":51556},[28,53754,51563],{"class":38},[28,53756,53757,53759,53761,53763,53765,53767,53770,53772],{"class":30,"line":84},[28,53758,52400],{"class":38},[28,53760,51867],{"class":51556},[28,53762,53742],{"class":2225},[28,53764,54],{"class":38},[28,53766,53747],{"class":127},[28,53768,53769],{"class":38},">456\u003C\u002F",[28,53771,51867],{"class":51556},[28,53773,51563],{"class":38},[28,53775,53776,53778,53780],{"class":30,"line":91},[28,53777,52400],{"class":38},[28,53779,52069],{"class":51556},[28,53781,51563],{"class":38},[28,53783,53784],{"class":30,"line":97},[28,53785,53786],{"class":38},"    \u002F\u002F 1.获取匹配的第一个元素\n",[28,53788,53789],{"class":30,"line":103},[28,53790,53791],{"class":38},"    const box = document.querySelector('div')\n",[28,53793,53794],{"class":30,"line":109},[28,53795,53796],{"class":38},"    console.dir(box)\n",[28,53798,53799,53801,53803],{"class":30,"line":118},[28,53800,52673],{"class":38},[28,53802,52069],{"class":51556},[28,53804,51563],{"class":38},[28,53806,53807,53809,53811],{"class":30,"line":124},[28,53808,52041],{"class":38},[28,53810,52056],{"class":51556},[28,53812,51563],{"class":38},[14,53814,53815],{},"只选123，不选456",[14,53817,53818],{},[1727,53819],{"alt":23,"src":53820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53822,53823],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53825,53826],{},[1727,53827],{"alt":23,"src":53828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53830,53831],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53833,53834],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[363,53836,53837],{"start":48},[366,53838,53839],{},"其他方法来获取标签元素",[14,53841,53842],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53844,53845],{},[1727,53846],{"alt":23,"src":53847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[380,53849,53851],{"id":53850},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53853,53854],{},"设置修改DOM元素内容有两种方式：",[1404,53856,53857,53860,53863,53866],{},[366,53858,53859],{},"元素.innerText=''",[366,53861,53862],{},"元素.innerHTML=''",[366,53864,53865],{},"不写字符串输出数字也是可以的",[366,53867,53868],{},"元素.innerHtml=1",[22260,53870,53872],{"id":53871},"_3131-innertext","3.1.3.1 innerText",[14,53874,53875],{},[1727,53876],{"alt":23,"src":53877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53879,53880],{},"思路：实现了修改盒子中的内容！",[14,53882,53883],{},"它只显示纯文本，不解析标签",[22260,53885,53887],{"id":53886},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53889,53890],{},[1727,53891],{"alt":23,"src":53892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53894,53895],{},"相比于innerText，他的强大之处在于可以解析标签",[380,53897,53899],{"id":53898},"_314-操作元素属性","3.1.4 操作元素属性",[22260,53901,53903],{"id":53902},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53905,53906],{},[1727,53907],{"alt":23,"src":53908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22260,53910,53912],{"id":53911},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53914,53915],{},[1727,53916],{"alt":23,"src":53917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53919,53920],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53922,53923],{},"div.style.backgroundColor = 'hotpink'",[14,53925,53926],{},"如果按照css的写法，-表示减，就会出错",[14,53928,53929],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53931,53932],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53934,53935],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53937,53938],{},[1727,53939],{"alt":23,"src":53940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53942,53943],{},[1727,53944],{"alt":23,"src":53945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[363,53947,53948,53951,53954,53957,53960,53963],{},[366,53949,53950],{},"className这个方式就是修改很多样式的时候来使用的！",[366,53952,53953],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[366,53955,53956],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[366,53958,53959],{},"className为属性名，如果还用class的话就导致与关键字冲突",[366,53961,53962],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[366,53964,53965,53966,53971],{},"解析标签的时候就变为了",[51867,53967],{"className":53968},[53969,53970],"nav","box",[53972,53973],"br",{},[14,53975,53976],{},"例子：",[51867,53978],{"className":53979},[53969],[52069,53981,53982],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53984,53985],{},[1727,53986],{"alt":23,"src":53987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53989,53990],{},"追加和删除类名用classList",[14,53992,53993],{},"常用于类似于开关的操作",[14,53995,53996],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53998,53999],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22260,54001,54003],{"id":54002},"_3143-牢记点","3.1.4.3 牢记点",[363,54005,54006,54009,54012,54015,54018,54021,54024,54027,54030],{},[366,54007,54008],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[366,54010,54011],{},"使用style属性操作css时不要忘记引号",[366,54013,54014],{},"使用className或者classList时也不要忘记引号",[366,54016,54017],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[366,54019,54020],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[366,54022,54023],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[366,54025,54026],{},"若： let arr=['1','2',3] arr[0]=1",[366,54028,54029],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[366,54031,54032],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[380,54034,54036],{"id":54035},"_315-操作表单元素","3.1.5 操作表单元素",[363,54038,54039],{},[366,54040,54041],{},"天生的属性",[14,54043,54044],{},[1727,54045],{"alt":23,"src":54046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54048,54049],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54051,54052],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54054,54055],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54057,54058],{},[1727,54059],{"alt":23,"src":54060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[18,54062,54064],{"className":50889,"code":54063,"language":50891,"meta":23,"style":23},"在复选框中如果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",[25,54065,54066,54071,54103,54108,54113,54118,54123,54127,54132,54137,54154,54166,54171],{"__ignoreMap":23},[28,54067,54068],{"class":30,"line":31},[28,54069,54070],{"class":38},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[28,54072,54073,54075,54078,54081,54083,54086,54088,54090,54092,54094,54096,54098,54101],{"class":30,"line":48},[28,54074,1307],{"class":38},[28,54076,54077],{"class":51556},"input",[28,54079,54080],{"class":2225}," type",[28,54082,54],{"class":38},[28,54084,54085],{"class":127},"\"checkbox\"",[28,54087,15182],{"class":2225},[28,54089,54],{"class":38},[28,54091,7914],{"class":127},[28,54093,15221],{"class":2225},[28,54095,54],{"class":38},[28,54097,7914],{"class":127},[28,54099,54100],{"class":2225}," checked",[28,54102,51563],{"class":38},[28,54104,54105],{"class":30,"line":84},[28,54106,54107],{"class":38},"不选的话：\n",[28,54109,54110],{"class":30,"line":91},[28,54111,54112],{"class":38},"const input = document.querySelector('input')\n",[28,54114,54115],{"class":30,"line":97},[28,54116,54117],{"class":38},"input.checked=false\n",[28,54119,54120],{"class":30,"line":103},[28,54121,54122],{"class":38},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[28,54124,54125],{"class":30,"line":109},[28,54126,2662],{"emptyLinePlaceholder":336},[28,54128,54129],{"class":30,"line":118},[28,54130,54131],{"class":38},"禁用按钮：\n",[28,54133,54134],{"class":30,"line":124},[28,54135,54136],{"class":38},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[28,54138,54139,54141,54144,54147,54150,54152],{"class":30,"line":131},[28,54140,1307],{"class":38},[28,54142,54143],{"class":51556},"button",[28,54145,54146],{"class":2225}," disabled",[28,54148,54149],{"class":38},">点击\u003C\u002F",[28,54151,54143],{"class":51556},[28,54153,51563],{"class":38},[28,54155,54156,54158,54160,54162,54164],{"class":30,"line":137},[28,54157,1307],{"class":38},[28,54159,54143],{"class":51556},[28,54161,54149],{"class":38},[28,54163,54143],{"class":51556},[28,54165,51563],{"class":38},[28,54167,54168],{"class":30,"line":143},[28,54169,54170],{"class":38},"const bt = document.querySelector('button')\n",[28,54172,54173],{"class":30,"line":149},[28,54174,54175],{"class":38},"bt.disabled = false\n",[363,54177,54178],{"start":48},[366,54179,54180],{},"自定义属性",[14,54182,54183],{},[1727,54184],{"alt":23,"src":54185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[18,54187,54189],{"className":53323,"code":54188,"language":53325,"meta":23,"style":23},"\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",[25,54190,54191,54199,54227,54246,54265,54284,54303,54311,54316,54321,54326,54331,54339],{"__ignoreMap":23},[28,54192,54193,54195,54197],{"class":30,"line":31},[28,54194,1307],{"class":38},[28,54196,52056],{"class":51556},[28,54198,51563],{"class":38},[28,54200,54201,54203,54205,54208,54210,54212,54215,54217,54220,54223,54225],{"class":30,"line":48},[28,54202,52400],{"class":38},[28,54204,51867],{"class":51556},[28,54206,54207],{"class":2225}," data-id",[28,54209,54],{"class":38},[28,54211,3940],{"class":127},[28,54213,54214],{"class":2225}," data-spm",[28,54216,54],{"class":38},[28,54218,54219],{"class":127},"\"我不知道\"",[28,54221,54222],{"class":38},">1\u003C\u002F",[28,54224,51867],{"class":51556},[28,54226,51563],{"class":38},[28,54228,54229,54231,54233,54235,54237,54239,54242,54244],{"class":30,"line":84},[28,54230,52400],{"class":38},[28,54232,51867],{"class":51556},[28,54234,54207],{"class":2225},[28,54236,54],{"class":38},[28,54238,3963],{"class":127},[28,54240,54241],{"class":38},">2\u003C\u002F",[28,54243,51867],{"class":51556},[28,54245,51563],{"class":38},[28,54247,54248,54250,54252,54254,54256,54258,54261,54263],{"class":30,"line":91},[28,54249,52400],{"class":38},[28,54251,51867],{"class":51556},[28,54253,54207],{"class":2225},[28,54255,54],{"class":38},[28,54257,3976],{"class":127},[28,54259,54260],{"class":38},">3\u003C\u002F",[28,54262,51867],{"class":51556},[28,54264,51563],{"class":38},[28,54266,54267,54269,54271,54273,54275,54277,54280,54282],{"class":30,"line":97},[28,54268,52400],{"class":38},[28,54270,51867],{"class":51556},[28,54272,54207],{"class":2225},[28,54274,54],{"class":38},[28,54276,3989],{"class":127},[28,54278,54279],{"class":38},">4\u003C\u002F",[28,54281,51867],{"class":51556},[28,54283,51563],{"class":38},[28,54285,54286,54288,54290,54292,54294,54296,54299,54301],{"class":30,"line":103},[28,54287,52400],{"class":38},[28,54289,51867],{"class":51556},[28,54291,54207],{"class":2225},[28,54293,54],{"class":38},[28,54295,4010],{"class":127},[28,54297,54298],{"class":38},">5\u003C\u002F",[28,54300,51867],{"class":51556},[28,54302,51563],{"class":38},[28,54304,54305,54307,54309],{"class":30,"line":109},[28,54306,52400],{"class":38},[28,54308,52069],{"class":51556},[28,54310,51563],{"class":38},[28,54312,54313],{"class":30,"line":118},[28,54314,54315],{"class":38},"    const one = document.querySelector('div')\n",[28,54317,54318],{"class":30,"line":124},[28,54319,54320],{"class":38},"    console.log(one.dataset)\n",[28,54322,54323],{"class":30,"line":131},[28,54324,54325],{"class":38},"    console.log(one.dataset.id)\n",[28,54327,54328],{"class":30,"line":137},[28,54329,54330],{"class":38},"    console.log(one.dataset.spm)\n",[28,54332,54333,54335,54337],{"class":30,"line":143},[28,54334,52673],{"class":38},[28,54336,52069],{"class":51556},[28,54338,51563],{"class":38},[28,54340,54341,54343,54345],{"class":30,"line":149},[28,54342,52041],{"class":38},[28,54344,52056],{"class":51556},[28,54346,51563],{"class":38},[14,54348,54349],{},[1727,54350],{"alt":23,"src":54351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54353,54354],{},"document.querySelector选择的是第一个对象（元素）",[380,54356,54358],{"id":54357},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54360,54361],{},[1727,54362],{"alt":23,"src":54363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54365,54366],{},[1727,54367],{"alt":23,"src":54368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54370,54371],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52069,54373,54374],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54376,54377],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52069,54379,54380],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54382,54383],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54385,54386],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54388,54389],{},"单位为毫秒！！！",[14,54391,54392],{},"可以搭配匿名函数来用！！！",[14,54394,54395],{},"setInterval(function () {",[14,54397,54398],{},"alert('两秒执行一次')",[14,54400,54401],{},"}, 2000)",[14,54403,54404],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54406,54407],{},"function fn() {",[14,54409,54410],{},"document.write(1)",[14,54412,1343],{},[14,54414,54415],{},"setInterval(fn, 1000)",[14,54417,54418],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54420,54421],{},"setInterval('fn()', 1000)",[14,54423,54424],{},[1727,54425],{"alt":23,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22260,54428,54430],{"id":54429},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[18,54432,54434],{"className":50889,"code":54433,"language":50891,"meta":23,"style":23},"\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",[25,54435,54436,54446,54460,54464,54472,54486,54506,54518,54526,54530,54538,54575,54580,54585,54590,54598,54606,54628,54636,54641,54663,54668,54673,54684,54689,54709,54717,54732,54747,54758,54763,54773,54783,54787,54796,54800,54808,54816,54820],{"__ignoreMap":23},[28,54437,54438,54440,54442,54444],{"class":30,"line":31},[28,54439,51553],{"class":38},[28,54441,51557],{"class":51556},[28,54443,51560],{"class":2225},[28,54445,51563],{"class":38},[28,54447,54448,54450,54452,54454,54456,54458],{"class":30,"line":48},[28,54449,1307],{"class":38},[28,54451,50891],{"class":51556},[28,54453,51572],{"class":2225},[28,54455,54],{"class":38},[28,54457,51577],{"class":127},[28,54459,51563],{"class":38},[28,54461,54462],{"class":30,"line":84},[28,54463,2662],{"emptyLinePlaceholder":336},[28,54465,54466,54468,54470],{"class":30,"line":91},[28,54467,1307],{"class":38},[28,54469,51590],{"class":51556},[28,54471,51563],{"class":38},[28,54473,54474,54476,54478,54480,54482,54484],{"class":30,"line":97},[28,54475,52400],{"class":38},[28,54477,51600],{"class":51556},[28,54479,51603],{"class":2225},[28,54481,54],{"class":38},[28,54483,51608],{"class":127},[28,54485,51563],{"class":38},[28,54487,54488,54490,54492,54494,54496,54498,54500,54502,54504],{"class":30,"line":103},[28,54489,52400],{"class":38},[28,54491,51600],{"class":51556},[28,54493,15182],{"class":2225},[28,54495,54],{"class":38},[28,54497,51647],{"class":127},[28,54499,51627],{"class":2225},[28,54501,54],{"class":38},[28,54503,51654],{"class":127},[28,54505,51563],{"class":38},[28,54507,54508,54510,54512,54514,54516],{"class":30,"line":109},[28,54509,52400],{"class":38},[28,54511,51663],{"class":51556},[28,54513,51666],{"class":38},[28,54515,51663],{"class":51556},[28,54517,51563],{"class":38},[28,54519,54520,54522,54524],{"class":30,"line":118},[28,54521,52041],{"class":38},[28,54523,51590],{"class":51556},[28,54525,51563],{"class":38},[28,54527,54528],{"class":30,"line":124},[28,54529,2662],{"emptyLinePlaceholder":336},[28,54531,54532,54534,54536],{"class":30,"line":131},[28,54533,1307],{"class":38},[28,54535,52056],{"class":51556},[28,54537,51563],{"class":38},[28,54539,54540,54542,54545,54547,54549,54551,54553,54555,54557,54560,54562,54565,54568,54570,54573],{"class":30,"line":137},[28,54541,52400],{"class":38},[28,54543,54544],{"class":51556},"textarea",[28,54546,15182],{"class":2225},[28,54548,54],{"class":38},[28,54550,7914],{"class":127},[28,54552,15221],{"class":2225},[28,54554,54],{"class":38},[28,54556,7914],{"class":127},[28,54558,54559],{"class":2225}," cols",[28,54561,54],{"class":38},[28,54563,54564],{"class":127},"\"30\"",[28,54566,54567],{"class":2225}," rows",[28,54569,54],{"class":38},[28,54571,54572],{"class":127},"\"10\"",[28,54574,51563],{"class":38},[28,54576,54577],{"class":30,"line":143},[28,54578,54579],{"class":38},"        用户注册协议\n",[28,54581,54582],{"class":30,"line":149},[28,54583,54584],{"class":38},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[28,54586,54587],{"class":30,"line":1890},[28,54588,54589],{"class":38},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[28,54591,54592,54594,54596],{"class":30,"line":1904},[28,54593,52032],{"class":38},[28,54595,54544],{"class":51556},[28,54597,51563],{"class":38},[28,54599,54600,54602,54604],{"class":30,"line":1909},[28,54601,52400],{"class":38},[28,54603,53972],{"class":51556},[28,54605,51563],{"class":38},[28,54607,54608,54610,54612,54614,54616,54619,54621,54624,54626],{"class":30,"line":1915},[28,54609,52400],{"class":38},[28,54611,54143],{"class":51556},[28,54613,53742],{"class":2225},[28,54615,54],{"class":38},[28,54617,54618],{"class":127},"\"btn\"",[28,54620,54146],{"class":2225},[28,54622,54623],{"class":38},">我已经阅读用户协议(5)\u003C\u002F",[28,54625,54143],{"class":51556},[28,54627,51563],{"class":38},[28,54629,54630,54632,54634],{"class":30,"line":1936},[28,54631,52400],{"class":38},[28,54633,52069],{"class":51556},[28,54635,51563],{"class":38},[28,54637,54638],{"class":30,"line":1941},[28,54639,54640],{"class":87},"    \u002F\u002F 1. 获取元素\n",[28,54642,54643,54645,54648,54650,54653,54656,54658,54661],{"class":30,"line":1955},[28,54644,11483],{"class":34},[28,54646,54647],{"class":60}," btn",[28,54649,13826],{"class":34},[28,54651,54652],{"class":38}," document.",[28,54654,54655],{"class":2225},"querySelector",[28,54657,413],{"class":38},[28,54659,54660],{"class":127},"'.btn'",[28,54662,81],{"class":38},[28,54664,54665],{"class":30,"line":1960},[28,54666,54667],{"class":87},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[28,54669,54670],{"class":30,"line":1989},[28,54671,54672],{"class":87},"    \u002F\u002F 2. 倒计时\n",[28,54674,54675,54677,54679,54681],{"class":30,"line":1994},[28,54676,52475],{"class":34},[28,54678,9700],{"class":38},[28,54680,54],{"class":34},[28,54682,54683],{"class":60}," 5\n",[28,54685,54686],{"class":30,"line":2011},[28,54687,54688],{"class":87},"    \u002F\u002F 2.1 开启定时器\n",[28,54690,54691,54693,54696,54698,54701,54703,54706],{"class":30,"line":2016},[28,54692,52475],{"class":34},[28,54694,54695],{"class":38}," n ",[28,54697,54],{"class":34},[28,54699,54700],{"class":2225}," setInterval",[28,54702,413],{"class":38},[28,54704,54705],{"class":34},"function",[28,54707,54708],{"class":38}," () {\n",[28,54710,54711,54714],{"class":30,"line":2021},[28,54712,54713],{"class":38},"      i",[28,54715,54716],{"class":34},"--\n",[28,54718,54719,54722,54724,54727,54729],{"class":30,"line":2026},[28,54720,54721],{"class":38},"      btn.innerHTML ",[28,54723,54],{"class":34},[28,54725,54726],{"class":127}," `我已经阅读用户协议(${",[28,54728,840],{"class":38},[28,54730,54731],{"class":127},"})`\n",[28,54733,54734,54737,54740,54743,54745],{"class":30,"line":2040},[28,54735,54736],{"class":34},"      if",[28,54738,54739],{"class":38}," (i ",[28,54741,54742],{"class":34},"===",[28,54744,4355],{"class":60},[28,54746,12704],{"class":38},[28,54748,54749,54752,54755],{"class":30,"line":2045},[28,54750,54751],{"class":2225},"        clearInterval",[28,54753,54754],{"class":38},"(n)  ",[28,54756,54757],{"class":87},"\u002F\u002F 关闭定时器\n",[28,54759,54760],{"class":30,"line":2839},[28,54761,54762],{"class":87},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[28,54764,54765,54768,54770],{"class":30,"line":2853},[28,54766,54767],{"class":38},"        btn.disabled ",[28,54769,54],{"class":34},[28,54771,54772],{"class":60}," false\n",[28,54774,54775,54778,54780],{"class":30,"line":2861},[28,54776,54777],{"class":38},"        btn.innerHTML ",[28,54779,54],{"class":34},[28,54781,54782],{"class":127}," '同意'\n",[28,54784,54785],{"class":30,"line":2866},[28,54786,52654],{"class":38},[28,54788,54789,54792,54794],{"class":30,"line":2872},[28,54790,54791],{"class":38},"    }, ",[28,54793,6672],{"class":60},[28,54795,81],{"class":38},[28,54797,54798],{"class":30,"line":2878},[28,54799,2662],{"emptyLinePlaceholder":336},[28,54801,54802,54804,54806],{"class":30,"line":2883},[28,54803,52673],{"class":38},[28,54805,52069],{"class":51556},[28,54807,51563],{"class":38},[28,54809,54810,54812,54814],{"class":30,"line":8210},[28,54811,52041],{"class":38},[28,54813,52056],{"class":51556},[28,54815,51563],{"class":38},[28,54817,54818],{"class":30,"line":8234},[28,54819,2662],{"emptyLinePlaceholder":336},[28,54821,54822,54824,54826],{"class":30,"line":8239},[28,54823,52041],{"class":38},[28,54825,50891],{"class":51556},[28,54827,51563],{"class":38},[14,54829,54830],{},"不要一直想着用死循环,避免死循环",[14,54832,54833,54836],{},[25,54834,54835],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22260,54838,54840],{"id":54839},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[363,54842,54843],{},[366,54844,54845],{},"法1",[18,54847,54849],{"className":50889,"code":54848,"language":50891,"meta":23,"style":23},"\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",[25,54850,54851,54861,54875,54879,54887,54901,54921,54933,54941,54947,54958,54969,54973,54977,54984,54996,55000,55004,55011,55023,55037,55050,55064,55068,55072,55079,55090,55101,55112,55124,55136,55148,55152,55156,55164,55174,55187,55199,55212,55216,55220,55227,55237,55249,55261,55272,55283,55293,55305,55317,55321,55325,55334,55346,55358,55386,55399,55403,55407,55414,55425,55429,55437,55445,55449,55457,55471,55486,55510,55518,55533,55546,55554,55575,55587,55599,55611,55623,55635,55647,55659,55668,55676,55684,55692,55704,55727,55746,55765,55784,55803,55822,55841,55861,55865,55885,55904,55924,55945,55956,55973,55983,55993,56003,56008,56013,56018,56023,56048,56061,56065,56088,56092,56100,56108,56116,56120],{"__ignoreMap":23},[28,54852,54853,54855,54857,54859],{"class":30,"line":31},[28,54854,51553],{"class":38},[28,54856,51557],{"class":51556},[28,54858,51560],{"class":2225},[28,54860,51563],{"class":38},[28,54862,54863,54865,54867,54869,54871,54873],{"class":30,"line":48},[28,54864,1307],{"class":38},[28,54866,50891],{"class":51556},[28,54868,51572],{"class":2225},[28,54870,54],{"class":38},[28,54872,51577],{"class":127},[28,54874,51563],{"class":38},[28,54876,54877],{"class":30,"line":84},[28,54878,2662],{"emptyLinePlaceholder":336},[28,54880,54881,54883,54885],{"class":30,"line":91},[28,54882,1307],{"class":38},[28,54884,51590],{"class":51556},[28,54886,51563],{"class":38},[28,54888,54889,54891,54893,54895,54897,54899],{"class":30,"line":97},[28,54890,52400],{"class":38},[28,54892,51600],{"class":51556},[28,54894,51603],{"class":2225},[28,54896,54],{"class":38},[28,54898,51608],{"class":127},[28,54900,51563],{"class":38},[28,54902,54903,54905,54907,54909,54911,54913,54915,54917,54919],{"class":30,"line":103},[28,54904,52400],{"class":38},[28,54906,51600],{"class":51556},[28,54908,15182],{"class":2225},[28,54910,54],{"class":38},[28,54912,51647],{"class":127},[28,54914,51627],{"class":2225},[28,54916,54],{"class":38},[28,54918,51654],{"class":127},[28,54920,51563],{"class":38},[28,54922,54923,54925,54927,54929,54931],{"class":30,"line":109},[28,54924,52400],{"class":38},[28,54926,51663],{"class":51556},[28,54928,51666],{"class":38},[28,54930,51663],{"class":51556},[28,54932,51563],{"class":38},[28,54934,54935,54937,54939],{"class":30,"line":118},[28,54936,52400],{"class":38},[28,54938,328],{"class":51556},[28,54940,51563],{"class":38},[28,54942,54943,54945],{"class":30,"line":124},[28,54944,6665],{"class":51556},[28,54946,15834],{"class":38},[28,54948,54949,54952,54954,54956],{"class":30,"line":131},[28,54950,54951],{"class":60},"      padding",[28,54953,51693],{"class":38},[28,54955,244],{"class":60},[28,54957,1558],{"class":38},[28,54959,54960,54963,54965,54967],{"class":30,"line":137},[28,54961,54962],{"class":60},"      margin",[28,54964,51693],{"class":38},[28,54966,244],{"class":60},[28,54968,1558],{"class":38},[28,54970,54971],{"class":30,"line":143},[28,54972,2449],{"class":38},[28,54974,54975],{"class":30,"line":149},[28,54976,2662],{"emptyLinePlaceholder":336},[28,54978,54979,54982],{"class":30,"line":1890},[28,54980,54981],{"class":51556},"    li",[28,54983,15834],{"class":38},[28,54985,54986,54989,54991,54994],{"class":30,"line":1904},[28,54987,54988],{"class":60},"      list-style",[28,54990,51693],{"class":38},[28,54992,54993],{"class":60},"none",[28,54995,1558],{"class":38},[28,54997,54998],{"class":30,"line":1909},[28,54999,2449],{"class":38},[28,55001,55002],{"class":30,"line":1915},[28,55003,2662],{"emptyLinePlaceholder":336},[28,55005,55006,55009],{"class":30,"line":1936},[28,55007,55008],{"class":2225},"    .box",[28,55010,15834],{"class":38},[28,55012,55013,55016,55018,55021],{"class":30,"line":1941},[28,55014,55015],{"class":60},"      position",[28,55017,51693],{"class":38},[28,55019,55020],{"class":60},"relative",[28,55022,1558],{"class":38},[28,55024,55025,55028,55030,55033,55035],{"class":30,"line":1955},[28,55026,55027],{"class":60},"      width",[28,55029,51693],{"class":38},[28,55031,55032],{"class":60},"976",[28,55034,51748],{"class":34},[28,55036,1558],{"class":38},[28,55038,55039,55042,55044,55046,55048],{"class":30,"line":1960},[28,55040,55041],{"class":60},"      height",[28,55043,51693],{"class":38},[28,55045,1804],{"class":60},[28,55047,51748],{"class":34},[28,55049,1558],{"class":38},[28,55051,55052,55054,55056,55058,55060,55062],{"class":30,"line":1989},[28,55053,54962],{"class":60},[28,55055,51693],{"class":38},[28,55057,713],{"class":60},[28,55059,51748],{"class":34},[28,55061,51812],{"class":60},[28,55063,1558],{"class":38},[28,55065,55066],{"class":30,"line":1994},[28,55067,2449],{"class":38},[28,55069,55070],{"class":30,"line":2011},[28,55071,2662],{"emptyLinePlaceholder":336},[28,55073,55074,55077],{"class":30,"line":2016},[28,55075,55076],{"class":2225},"    .slider-footer",[28,55078,15834],{"class":38},[28,55080,55081,55083,55085,55088],{"class":30,"line":2021},[28,55082,55015],{"class":60},[28,55084,51693],{"class":38},[28,55086,55087],{"class":60},"absolute",[28,55089,1558],{"class":38},[28,55091,55092,55095,55097,55099],{"class":30,"line":2026},[28,55093,55094],{"class":60},"      left",[28,55096,51693],{"class":38},[28,55098,244],{"class":60},[28,55100,1558],{"class":38},[28,55102,55103,55106,55108,55110],{"class":30,"line":2040},[28,55104,55105],{"class":60},"      bottom",[28,55107,51693],{"class":38},[28,55109,244],{"class":60},[28,55111,1558],{"class":38},[28,55113,55114,55116,55118,55120,55122],{"class":30,"line":2045},[28,55115,55027],{"class":60},[28,55117,51693],{"class":38},[28,55119,713],{"class":60},[28,55121,729],{"class":34},[28,55123,1558],{"class":38},[28,55125,55126,55128,55130,55132,55134],{"class":30,"line":2839},[28,55127,55041],{"class":60},[28,55129,51693],{"class":38},[28,55131,973],{"class":60},[28,55133,729],{"class":34},[28,55135,1558],{"class":38},[28,55137,55138,55141,55143,55146],{"class":30,"line":2853},[28,55139,55140],{"class":60},"      background-color",[28,55142,51693],{"class":38},[28,55144,55145],{"class":60},"skyblue",[28,55147,1558],{"class":38},[28,55149,55150],{"class":30,"line":2861},[28,55151,2449],{"class":38},[28,55153,55154],{"class":30,"line":2866},[28,55155,2662],{"emptyLinePlaceholder":336},[28,55157,55158,55160,55162],{"class":30,"line":2872},[28,55159,55076],{"class":2225},[28,55161,7087],{"class":51556},[28,55163,15834],{"class":38},[28,55165,55166,55168,55170,55172],{"class":30,"line":2878},[28,55167,55015],{"class":60},[28,55169,51693],{"class":38},[28,55171,55087],{"class":60},[28,55173,1558],{"class":38},[28,55175,55176,55179,55181,55183,55185],{"class":30,"line":2883},[28,55177,55178],{"class":60},"      font-size",[28,55180,51693],{"class":38},[28,55182,1298],{"class":60},[28,55184,51748],{"class":34},[28,55186,1558],{"class":38},[28,55188,55189,55191,55193,55195,55197],{"class":30,"line":8210},[28,55190,55094],{"class":60},[28,55192,51693],{"class":38},[28,55194,1098],{"class":60},[28,55196,51748],{"class":34},[28,55198,1558],{"class":38},[28,55200,55201,55204,55206,55208,55210],{"class":30,"line":8234},[28,55202,55203],{"class":60},"      top",[28,55205,51693],{"class":38},[28,55207,721],{"class":60},[28,55209,51748],{"class":34},[28,55211,1558],{"class":38},[28,55213,55214],{"class":30,"line":8239},[28,55215,2449],{"class":38},[28,55217,55218],{"class":30,"line":8245},[28,55219,2662],{"emptyLinePlaceholder":336},[28,55221,55222,55225],{"class":30,"line":8272},[28,55223,55224],{"class":51556},"    ul",[28,55226,15834],{"class":38},[28,55228,55229,55231,55233,55235],{"class":30,"line":8277},[28,55230,55015],{"class":60},[28,55232,51693],{"class":38},[28,55234,55087],{"class":60},[28,55236,1558],{"class":38},[28,55238,55239,55241,55243,55245,55247],{"class":30,"line":8283},[28,55240,55203],{"class":60},[28,55242,51693],{"class":38},[28,55244,1179],{"class":60},[28,55246,51748],{"class":34},[28,55248,1558],{"class":38},[28,55250,55251,55253,55255,55257,55259],{"class":30,"line":8295},[28,55252,55094],{"class":60},[28,55254,51693],{"class":38},[28,55256,1098],{"class":60},[28,55258,51748],{"class":34},[28,55260,1558],{"class":38},[28,55262,55263,55266,55268,55270],{"class":30,"line":8307},[28,55264,55265],{"class":60},"      display",[28,55267,51693],{"class":38},[28,55269,51733],{"class":60},[28,55271,1558],{"class":38},[28,55273,55274,55277,55279,55281],{"class":30,"line":8319},[28,55275,55276],{"class":60},"      justify-content",[28,55278,51693],{"class":38},[28,55280,51924],{"class":60},[28,55282,1558],{"class":38},[28,55284,55285,55287,55289,55291],{"class":30,"line":9978},[28,55286,55015],{"class":60},[28,55288,51693],{"class":38},[28,55290,55087],{"class":60},[28,55292,1558],{"class":38},[28,55294,55295,55297,55299,55301,55303],{"class":30,"line":10003},[28,55296,55027],{"class":60},[28,55298,51693],{"class":38},[28,55300,4254],{"class":60},[28,55302,51748],{"class":34},[28,55304,1558],{"class":38},[28,55306,55307,55309,55311,55313,55315],{"class":30,"line":10026},[28,55308,55041],{"class":60},[28,55310,51693],{"class":38},[28,55312,1098],{"class":60},[28,55314,51748],{"class":34},[28,55316,1558],{"class":38},[28,55318,55319],{"class":30,"line":10050},[28,55320,2449],{"class":38},[28,55322,55323],{"class":30,"line":10055},[28,55324,2662],{"emptyLinePlaceholder":336},[28,55326,55327,55329,55332],{"class":30,"line":10060},[28,55328,55224],{"class":51556},[28,55330,55331],{"class":51556}," li",[28,55333,15834],{"class":38},[28,55335,55336,55338,55340,55342,55344],{"class":30,"line":10065},[28,55337,55027],{"class":60},[28,55339,51693],{"class":38},[28,55341,1098],{"class":60},[28,55343,51748],{"class":34},[28,55345,1558],{"class":38},[28,55347,55348,55350,55352,55354,55356],{"class":30,"line":10074},[28,55349,55041],{"class":60},[28,55351,51693],{"class":38},[28,55353,1098],{"class":60},[28,55355,51748],{"class":34},[28,55357,1558],{"class":38},[28,55359,55360,55362,55364,55367,55369,55371,55373,55375,55377,55379,55381,55384],{"class":30,"line":10079},[28,55361,55140],{"class":60},[28,55363,51693],{"class":38},[28,55365,55366],{"class":60},"rgba",[28,55368,413],{"class":38},[28,55370,244],{"class":60},[28,55372,12697],{"class":38},[28,55374,244],{"class":60},[28,55376,12697],{"class":38},[28,55378,244],{"class":60},[28,55380,12697],{"class":38},[28,55382,55383],{"class":60},".4",[28,55385,2981],{"class":38},[28,55387,55388,55391,55393,55395,55397],{"class":30,"line":10085},[28,55389,55390],{"class":60},"      border-radius",[28,55392,51693],{"class":38},[28,55394,845],{"class":60},[28,55396,51748],{"class":34},[28,55398,1558],{"class":38},[28,55400,55401],{"class":30,"line":10106},[28,55402,2449],{"class":38},[28,55404,55405],{"class":30,"line":10112},[28,55406,2662],{"emptyLinePlaceholder":336},[28,55408,55409,55412],{"class":30,"line":10126},[28,55410,55411],{"class":2225},"    .activate",[28,55413,15834],{"class":38},[28,55415,55416,55418,55420,55423],{"class":30,"line":10132},[28,55417,55140],{"class":60},[28,55419,51693],{"class":38},[28,55421,55422],{"class":60},"#f7f7f7",[28,55424,1558],{"class":38},[28,55426,55427],{"class":30,"line":10159},[28,55428,2449],{"class":38},[28,55430,55431,55433,55435],{"class":30,"line":10168},[28,55432,52673],{"class":38},[28,55434,328],{"class":51556},[28,55436,51563],{"class":38},[28,55438,55439,55441,55443],{"class":30,"line":10174},[28,55440,52041],{"class":38},[28,55442,51590],{"class":51556},[28,55444,51563],{"class":38},[28,55446,55447],{"class":30,"line":10182},[28,55448,2662],{"emptyLinePlaceholder":336},[28,55450,55451,55453,55455],{"class":30,"line":10187},[28,55452,1307],{"class":38},[28,55454,52056],{"class":51556},[28,55456,51563],{"class":38},[28,55458,55459,55461,55463,55465,55467,55469],{"class":30,"line":16866},[28,55460,52400],{"class":38},[28,55462,51867],{"class":51556},[28,55464,53742],{"class":2225},[28,55466,54],{"class":38},[28,55468,53747],{"class":127},[28,55470,51563],{"class":38},[28,55472,55473,55475,55477,55479,55481,55484],{"class":30,"line":16872},[28,55474,51597],{"class":38},[28,55476,51867],{"class":51556},[28,55478,53742],{"class":2225},[28,55480,54],{"class":38},[28,55482,55483],{"class":127},"\"slider-wrapper\"",[28,55485,51563],{"class":38},[28,55487,55488,55491,55493,55496,55498,55501,55504,55506,55508],{"class":30,"line":16895},[28,55489,55490],{"class":38},"      \u003C",[28,55492,1727],{"class":51556},[28,55494,55495],{"class":2225}," src",[28,55497,54],{"class":38},[28,55499,55500],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,55502,55503],{"class":2225}," alt",[28,55505,54],{"class":38},[28,55507,7914],{"class":127},[28,55509,51563],{"class":38},[28,55511,55512,55514,55516],{"class":30,"line":16901},[28,55513,52032],{"class":38},[28,55515,51867],{"class":51556},[28,55517,51563],{"class":38},[28,55519,55520,55522,55524,55526,55528,55531],{"class":30,"line":16924},[28,55521,51597],{"class":38},[28,55523,51867],{"class":51556},[28,55525,53742],{"class":2225},[28,55527,54],{"class":38},[28,55529,55530],{"class":127},"\"slider-footer\"",[28,55532,51563],{"class":38},[28,55534,55535,55537,55539,55542,55544],{"class":30,"line":16938},[28,55536,55490],{"class":38},[28,55538,14],{"class":51556},[28,55540,55541],{"class":38},">对人类来说会不会太超前了?\u003C\u002F",[28,55543,14],{"class":51556},[28,55545,51563],{"class":38},[28,55547,55548,55550,55552],{"class":30,"line":16958},[28,55549,55490],{"class":38},[28,55551,1404],{"class":51556},[28,55553,51563],{"class":38},[28,55555,55556,55559,55561,55563,55565,55568,55571,55573],{"class":30,"line":16964},[28,55557,55558],{"class":38},"        \u003C",[28,55560,366],{"class":51556},[28,55562,53742],{"class":2225},[28,55564,54],{"class":38},[28,55566,55567],{"class":127},"\"activate\"",[28,55569,55570],{"class":38},">\u003C\u002F",[28,55572,366],{"class":51556},[28,55574,51563],{"class":38},[28,55576,55577,55579,55581,55583,55585],{"class":30,"line":16975},[28,55578,55558],{"class":38},[28,55580,366],{"class":51556},[28,55582,55570],{"class":38},[28,55584,366],{"class":51556},[28,55586,51563],{"class":38},[28,55588,55589,55591,55593,55595,55597],{"class":30,"line":16998},[28,55590,55558],{"class":38},[28,55592,366],{"class":51556},[28,55594,55570],{"class":38},[28,55596,366],{"class":51556},[28,55598,51563],{"class":38},[28,55600,55601,55603,55605,55607,55609],{"class":30,"line":17020},[28,55602,55558],{"class":38},[28,55604,366],{"class":51556},[28,55606,55570],{"class":38},[28,55608,366],{"class":51556},[28,55610,51563],{"class":38},[28,55612,55613,55615,55617,55619,55621],{"class":30,"line":17025},[28,55614,55558],{"class":38},[28,55616,366],{"class":51556},[28,55618,55570],{"class":38},[28,55620,366],{"class":51556},[28,55622,51563],{"class":38},[28,55624,55625,55627,55629,55631,55633],{"class":30,"line":17031},[28,55626,55558],{"class":38},[28,55628,366],{"class":51556},[28,55630,55570],{"class":38},[28,55632,366],{"class":51556},[28,55634,51563],{"class":38},[28,55636,55637,55639,55641,55643,55645],{"class":30,"line":17045},[28,55638,55558],{"class":38},[28,55640,366],{"class":51556},[28,55642,55570],{"class":38},[28,55644,366],{"class":51556},[28,55646,51563],{"class":38},[28,55648,55649,55651,55653,55655,55657],{"class":30,"line":17058},[28,55650,55558],{"class":38},[28,55652,366],{"class":51556},[28,55654,55570],{"class":38},[28,55656,366],{"class":51556},[28,55658,51563],{"class":38},[28,55660,55661,55664,55666],{"class":30,"line":17063},[28,55662,55663],{"class":38},"      \u003C\u002F",[28,55665,1404],{"class":51556},[28,55667,51563],{"class":38},[28,55669,55670,55672,55674],{"class":30,"line":17077},[28,55671,52032],{"class":38},[28,55673,51867],{"class":51556},[28,55675,51563],{"class":38},[28,55677,55678,55680,55682],{"class":30,"line":17082},[28,55679,52673],{"class":38},[28,55681,51867],{"class":51556},[28,55683,51563],{"class":38},[28,55685,55686,55688,55690],{"class":30,"line":17088},[28,55687,52400],{"class":38},[28,55689,52069],{"class":51556},[28,55691,51563],{"class":38},[28,55693,55694,55696,55699,55701],{"class":30,"line":17093},[28,55695,11483],{"class":34},[28,55697,55698],{"class":60}," arrImage",[28,55700,13826],{"class":34},[28,55702,55703],{"class":38}," [\n",[28,55705,55706,55709,55712,55715,55718,55721,55724],{"class":30,"line":17107},[28,55707,55708],{"class":38},"      { url: ",[28,55710,55711],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[28,55713,55714],{"class":38},", title: ",[28,55716,55717],{"class":127},"'对人类来说会不会太超前了?'",[28,55719,55720],{"class":38},", color: ",[28,55722,55723],{"class":127},"'rgba(100,67,68)'",[28,55725,55726],{"class":38}," },\n",[28,55728,55729,55731,55734,55736,55739,55741,55744],{"class":30,"line":17112},[28,55730,55708],{"class":38},[28,55732,55733],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[28,55735,55714],{"class":38},[28,55737,55738],{"class":127},"'开启剑与雪的黑暗传说!'",[28,55740,55720],{"class":38},[28,55742,55743],{"class":127},"'rgba(43,35,26)'",[28,55745,55726],{"class":38},[28,55747,55748,55750,55753,55755,55758,55760,55763],{"class":30,"line":17117},[28,55749,55708],{"class":38},[28,55751,55752],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[28,55754,55714],{"class":38},[28,55756,55757],{"class":127},"'真正的jo厨出现了!'",[28,55759,55720],{"class":38},[28,55761,55762],{"class":127},"'rgba(36,31,33)'",[28,55764,55726],{"class":38},[28,55766,55767,55769,55772,55774,55777,55779,55782],{"class":30,"line":17131},[28,55768,55708],{"class":38},[28,55770,55771],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[28,55773,55714],{"class":38},[28,55775,55776],{"class":127},"'李玉刚:让世界通过b站看到东方大国文化'",[28,55778,55720],{"class":38},[28,55780,55781],{"class":127},"'rgba(139,98,66)'",[28,55783,55726],{"class":38},[28,55785,55786,55788,55791,55793,55796,55798,55801],{"class":30,"line":17143},[28,55787,55708],{"class":38},[28,55789,55790],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[28,55792,55714],{"class":38},[28,55794,55795],{"class":127},"'快来分享你的寒假日常吧'",[28,55797,55720],{"class":38},[28,55799,55800],{"class":127},"'rgba(67,90,92)'",[28,55802,55726],{"class":38},[28,55804,55805,55807,55810,55812,55815,55817,55820],{"class":30,"line":17148},[28,55806,55708],{"class":38},[28,55808,55809],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[28,55811,55714],{"class":38},[28,55813,55814],{"class":127},"'哔哩哔哩小年YEAR'",[28,55816,55720],{"class":38},[28,55818,55819],{"class":127},"'rgba(166,131,143)'",[28,55821,55726],{"class":38},[28,55823,55824,55826,55829,55831,55834,55836,55839],{"class":30,"line":17161},[28,55825,55708],{"class":38},[28,55827,55828],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[28,55830,55714],{"class":38},[28,55832,55833],{"class":127},"'一站式解决你的电脑配置问题'",[28,55835,55720],{"class":38},[28,55837,55838],{"class":127},"'rgba(53,29,25)'",[28,55840,55726],{"class":38},[28,55842,55843,55845,55848,55850,55853,55855,55858],{"class":30,"line":17166},[28,55844,55708],{"class":38},[28,55846,55847],{"class":127},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[28,55849,55714],{"class":38},[28,55851,55852],{"class":127},"'谁不想和小猫咪贴贴呢?'",[28,55854,55720],{"class":38},[28,55856,55857],{"class":127},"'rgba(99,72,114)'",[28,55859,55860],{"class":38}," }\n",[28,55862,55863],{"class":30,"line":17171},[28,55864,53365],{"class":38},[28,55866,55867,55869,55872,55874,55876,55878,55880,55883],{"class":30,"line":17176},[28,55868,11483],{"class":34},[28,55870,55871],{"class":60}," img",[28,55873,13826],{"class":34},[28,55875,54652],{"class":38},[28,55877,54655],{"class":2225},[28,55879,413],{"class":38},[28,55881,55882],{"class":127},"'.slider-wrapper img'",[28,55884,81],{"class":38},[28,55886,55887,55889,55891,55893,55895,55897,55899,55902],{"class":30,"line":17189},[28,55888,11483],{"class":34},[28,55890,7087],{"class":60},[28,55892,13826],{"class":34},[28,55894,54652],{"class":38},[28,55896,54655],{"class":2225},[28,55898,413],{"class":38},[28,55900,55901],{"class":127},"'.slider-footer p'",[28,55903,81],{"class":38},[28,55905,55906,55908,55911,55913,55915,55917,55919,55922],{"class":30,"line":17194},[28,55907,11483],{"class":34},[28,55909,55910],{"class":60}," color",[28,55912,13826],{"class":34},[28,55914,54652],{"class":38},[28,55916,54655],{"class":2225},[28,55918,413],{"class":38},[28,55920,55921],{"class":127},"'.slider-footer'",[28,55923,81],{"class":38},[28,55925,55926,55928,55931,55933,55935,55938,55940,55943],{"class":30,"line":32889},[28,55927,11483],{"class":34},[28,55929,55930],{"class":60}," lis",[28,55932,13826],{"class":34},[28,55934,54652],{"class":38},[28,55936,55937],{"class":2225},"querySelectorAll",[28,55939,413],{"class":38},[28,55941,55942],{"class":127},"'.slider-footer ul li'",[28,55944,81],{"class":38},[28,55946,55947,55949,55951,55953],{"class":30,"line":32895},[28,55948,52475],{"class":34},[28,55950,9700],{"class":38},[28,55952,54],{"class":34},[28,55954,55955],{"class":60}," 1\n",[28,55957,55958,55960,55963,55965,55967,55969,55971],{"class":30,"line":32901},[28,55959,52475],{"class":34},[28,55961,55962],{"class":38}," timer ",[28,55964,54],{"class":34},[28,55966,54700],{"class":2225},[28,55968,413],{"class":38},[28,55970,54705],{"class":34},[28,55972,54708],{"class":38},[28,55974,55975,55978,55980],{"class":30,"line":32907},[28,55976,55977],{"class":38},"      img.src ",[28,55979,54],{"class":34},[28,55981,55982],{"class":38}," arrImage[i].url\n",[28,55984,55985,55988,55990],{"class":30,"line":32913},[28,55986,55987],{"class":38},"      p.innerHTML ",[28,55989,54],{"class":34},[28,55991,55992],{"class":38}," arrImage[i].title\n",[28,55994,55995,55998,56000],{"class":30,"line":32924},[28,55996,55997],{"class":38},"      color.style.backgroundColor ",[28,55999,54],{"class":34},[28,56001,56002],{"class":38}," arrImage[i].color\n",[28,56004,56005],{"class":30,"line":32930},[28,56006,56007],{"class":87},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[28,56009,56010],{"class":30,"line":32950},[28,56011,56012],{"class":87},"      \u002F\u002F li.classList.add('activate')\n",[28,56014,56015],{"class":30,"line":32956},[28,56016,56017],{"class":87},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[28,56019,56020],{"class":30,"line":32967},[28,56021,56022],{"class":87},"      \u002F\u002F lis[i].classList.remove('activate')\n",[28,56024,56025,56028,56030,56032,56035,56038,56041,56043,56046],{"class":30,"line":32973},[28,56026,56027],{"class":38},"      document.",[28,56029,54655],{"class":2225},[28,56031,413],{"class":38},[28,56033,56034],{"class":127},"'.activate'",[28,56036,56037],{"class":38},")?.classList.",[28,56039,56040],{"class":2225},"toggle",[28,56042,413],{"class":38},[28,56044,56045],{"class":127},"'activate'",[28,56047,81],{"class":38},[28,56049,56050,56053,56055,56057,56059],{"class":30,"line":32979},[28,56051,56052],{"class":38},"      lis[i].classList.",[28,56054,5596],{"class":2225},[28,56056,413],{"class":38},[28,56058,56045],{"class":127},[28,56060,81],{"class":38},[28,56062,56063],{"class":30,"line":32985},[28,56064,2662],{"emptyLinePlaceholder":336},[28,56066,56067,56070,56072,56074,56076,56078,56080,56082,56085],{"class":30,"line":32991},[28,56068,56069],{"class":38},"      i ",[28,56071,54],{"class":34},[28,56073,54739],{"class":38},[28,56075,880],{"class":34},[28,56077,25381],{"class":60},[28,56079,13976],{"class":38},[28,56081,729],{"class":34},[28,56083,56084],{"class":38}," arrImage.",[28,56086,56087],{"class":60},"length\n",[28,56089,56090],{"class":30,"line":32997},[28,56091,2662],{"emptyLinePlaceholder":336},[28,56093,56094,56096,56098],{"class":30,"line":33003},[28,56095,54791],{"class":38},[28,56097,6672],{"class":60},[28,56099,81],{"class":38},[28,56101,56102,56104,56106],{"class":30,"line":33009},[28,56103,52673],{"class":38},[28,56105,52069],{"class":51556},[28,56107,51563],{"class":38},[28,56109,56110,56112,56114],{"class":30,"line":33029},[28,56111,52041],{"class":38},[28,56113,52056],{"class":51556},[28,56115,51563],{"class":38},[28,56117,56118],{"class":30,"line":33035},[28,56119,2662],{"emptyLinePlaceholder":336},[28,56121,56122,56124,56126],{"class":30,"line":33051},[28,56123,52041],{"class":38},[28,56125,50891],{"class":51556},[28,56127,51563],{"class":38},[14,56129,56130],{},[1727,56131],{"alt":23,"src":56132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56134,56135],{},"?.就是短路保护,确保输出正常进行",[14,56137,56138],{},"不要忘记取余%,有时候可以用",[14,56140,56141],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[363,56143,56144],{"start":48},[366,56145,56146],{},"法2",[18,56148,56150],{"className":50889,"code":56149,"language":50891,"meta":23,"style":23},"\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",[25,56151,56152,56162,56176,56180,56188,56202,56222,56234,56242,56248,56258,56268,56272,56276,56282,56292,56296,56300,56306,56316,56328,56340,56354,56358,56362,56368,56378,56388,56398,56410,56422,56432,56436,56440,56448,56458,56470,56482,56494,56498,56502,56508,56518,56530,56542,56552,56562,56572,56584,56596,56600,56604,56612,56624,56636,56662,56674,56678,56682,56688,56698,56702,56710,56718,56722,56730,56744,56758,56778,56786,56800,56812,56820,56838,56850,56862,56874,56886,56898,56910,56922,56930,56938,56946,56954,56965,56981,56997,57013,57029,57045,57061,57077,57093,57097,57102,57120,57138,57148,57153,57158,57169,57175,57190,57199,57203,57208,57217,57222,57231,57236,57241,57246,57269,57299,57303,57311,57315,57323,57331,57335],{"__ignoreMap":23},[28,56153,56154,56156,56158,56160],{"class":30,"line":31},[28,56155,51553],{"class":38},[28,56157,51557],{"class":51556},[28,56159,51560],{"class":2225},[28,56161,51563],{"class":38},[28,56163,56164,56166,56168,56170,56172,56174],{"class":30,"line":48},[28,56165,1307],{"class":38},[28,56167,50891],{"class":51556},[28,56169,51572],{"class":2225},[28,56171,54],{"class":38},[28,56173,51577],{"class":127},[28,56175,51563],{"class":38},[28,56177,56178],{"class":30,"line":84},[28,56179,2662],{"emptyLinePlaceholder":336},[28,56181,56182,56184,56186],{"class":30,"line":91},[28,56183,1307],{"class":38},[28,56185,51590],{"class":51556},[28,56187,51563],{"class":38},[28,56189,56190,56192,56194,56196,56198,56200],{"class":30,"line":97},[28,56191,52400],{"class":38},[28,56193,51600],{"class":51556},[28,56195,51603],{"class":2225},[28,56197,54],{"class":38},[28,56199,51608],{"class":127},[28,56201,51563],{"class":38},[28,56203,56204,56206,56208,56210,56212,56214,56216,56218,56220],{"class":30,"line":103},[28,56205,52400],{"class":38},[28,56207,51600],{"class":51556},[28,56209,15182],{"class":2225},[28,56211,54],{"class":38},[28,56213,51647],{"class":127},[28,56215,51627],{"class":2225},[28,56217,54],{"class":38},[28,56219,51654],{"class":127},[28,56221,51563],{"class":38},[28,56223,56224,56226,56228,56230,56232],{"class":30,"line":109},[28,56225,52400],{"class":38},[28,56227,51663],{"class":51556},[28,56229,51666],{"class":38},[28,56231,51663],{"class":51556},[28,56233,51563],{"class":38},[28,56235,56236,56238,56240],{"class":30,"line":118},[28,56237,52400],{"class":38},[28,56239,328],{"class":51556},[28,56241,51563],{"class":38},[28,56243,56244,56246],{"class":30,"line":124},[28,56245,6665],{"class":51556},[28,56247,15834],{"class":38},[28,56249,56250,56252,56254,56256],{"class":30,"line":131},[28,56251,54951],{"class":60},[28,56253,51693],{"class":38},[28,56255,244],{"class":60},[28,56257,1558],{"class":38},[28,56259,56260,56262,56264,56266],{"class":30,"line":137},[28,56261,54962],{"class":60},[28,56263,51693],{"class":38},[28,56265,244],{"class":60},[28,56267,1558],{"class":38},[28,56269,56270],{"class":30,"line":143},[28,56271,2449],{"class":38},[28,56273,56274],{"class":30,"line":149},[28,56275,2662],{"emptyLinePlaceholder":336},[28,56277,56278,56280],{"class":30,"line":1890},[28,56279,54981],{"class":51556},[28,56281,15834],{"class":38},[28,56283,56284,56286,56288,56290],{"class":30,"line":1904},[28,56285,54988],{"class":60},[28,56287,51693],{"class":38},[28,56289,54993],{"class":60},[28,56291,1558],{"class":38},[28,56293,56294],{"class":30,"line":1909},[28,56295,2449],{"class":38},[28,56297,56298],{"class":30,"line":1915},[28,56299,2662],{"emptyLinePlaceholder":336},[28,56301,56302,56304],{"class":30,"line":1936},[28,56303,55008],{"class":2225},[28,56305,15834],{"class":38},[28,56307,56308,56310,56312,56314],{"class":30,"line":1941},[28,56309,55015],{"class":60},[28,56311,51693],{"class":38},[28,56313,55020],{"class":60},[28,56315,1558],{"class":38},[28,56317,56318,56320,56322,56324,56326],{"class":30,"line":1955},[28,56319,55027],{"class":60},[28,56321,51693],{"class":38},[28,56323,55032],{"class":60},[28,56325,51748],{"class":34},[28,56327,1558],{"class":38},[28,56329,56330,56332,56334,56336,56338],{"class":30,"line":1960},[28,56331,55041],{"class":60},[28,56333,51693],{"class":38},[28,56335,1804],{"class":60},[28,56337,51748],{"class":34},[28,56339,1558],{"class":38},[28,56341,56342,56344,56346,56348,56350,56352],{"class":30,"line":1989},[28,56343,54962],{"class":60},[28,56345,51693],{"class":38},[28,56347,713],{"class":60},[28,56349,51748],{"class":34},[28,56351,51812],{"class":60},[28,56353,1558],{"class":38},[28,56355,56356],{"class":30,"line":1994},[28,56357,2449],{"class":38},[28,56359,56360],{"class":30,"line":2011},[28,56361,2662],{"emptyLinePlaceholder":336},[28,56363,56364,56366],{"class":30,"line":2016},[28,56365,55076],{"class":2225},[28,56367,15834],{"class":38},[28,56369,56370,56372,56374,56376],{"class":30,"line":2021},[28,56371,55015],{"class":60},[28,56373,51693],{"class":38},[28,56375,55087],{"class":60},[28,56377,1558],{"class":38},[28,56379,56380,56382,56384,56386],{"class":30,"line":2026},[28,56381,55094],{"class":60},[28,56383,51693],{"class":38},[28,56385,244],{"class":60},[28,56387,1558],{"class":38},[28,56389,56390,56392,56394,56396],{"class":30,"line":2040},[28,56391,55105],{"class":60},[28,56393,51693],{"class":38},[28,56395,244],{"class":60},[28,56397,1558],{"class":38},[28,56399,56400,56402,56404,56406,56408],{"class":30,"line":2045},[28,56401,55027],{"class":60},[28,56403,51693],{"class":38},[28,56405,713],{"class":60},[28,56407,729],{"class":34},[28,56409,1558],{"class":38},[28,56411,56412,56414,56416,56418,56420],{"class":30,"line":2839},[28,56413,55041],{"class":60},[28,56415,51693],{"class":38},[28,56417,973],{"class":60},[28,56419,729],{"class":34},[28,56421,1558],{"class":38},[28,56423,56424,56426,56428,56430],{"class":30,"line":2853},[28,56425,55140],{"class":60},[28,56427,51693],{"class":38},[28,56429,55145],{"class":60},[28,56431,1558],{"class":38},[28,56433,56434],{"class":30,"line":2861},[28,56435,2449],{"class":38},[28,56437,56438],{"class":30,"line":2866},[28,56439,2662],{"emptyLinePlaceholder":336},[28,56441,56442,56444,56446],{"class":30,"line":2872},[28,56443,55076],{"class":2225},[28,56445,7087],{"class":51556},[28,56447,15834],{"class":38},[28,56449,56450,56452,56454,56456],{"class":30,"line":2878},[28,56451,55015],{"class":60},[28,56453,51693],{"class":38},[28,56455,55087],{"class":60},[28,56457,1558],{"class":38},[28,56459,56460,56462,56464,56466,56468],{"class":30,"line":2883},[28,56461,55178],{"class":60},[28,56463,51693],{"class":38},[28,56465,1298],{"class":60},[28,56467,51748],{"class":34},[28,56469,1558],{"class":38},[28,56471,56472,56474,56476,56478,56480],{"class":30,"line":8210},[28,56473,55094],{"class":60},[28,56475,51693],{"class":38},[28,56477,1098],{"class":60},[28,56479,51748],{"class":34},[28,56481,1558],{"class":38},[28,56483,56484,56486,56488,56490,56492],{"class":30,"line":8234},[28,56485,55203],{"class":60},[28,56487,51693],{"class":38},[28,56489,721],{"class":60},[28,56491,51748],{"class":34},[28,56493,1558],{"class":38},[28,56495,56496],{"class":30,"line":8239},[28,56497,2449],{"class":38},[28,56499,56500],{"class":30,"line":8245},[28,56501,2662],{"emptyLinePlaceholder":336},[28,56503,56504,56506],{"class":30,"line":8272},[28,56505,55224],{"class":51556},[28,56507,15834],{"class":38},[28,56509,56510,56512,56514,56516],{"class":30,"line":8277},[28,56511,55015],{"class":60},[28,56513,51693],{"class":38},[28,56515,55087],{"class":60},[28,56517,1558],{"class":38},[28,56519,56520,56522,56524,56526,56528],{"class":30,"line":8283},[28,56521,55203],{"class":60},[28,56523,51693],{"class":38},[28,56525,1179],{"class":60},[28,56527,51748],{"class":34},[28,56529,1558],{"class":38},[28,56531,56532,56534,56536,56538,56540],{"class":30,"line":8295},[28,56533,55094],{"class":60},[28,56535,51693],{"class":38},[28,56537,1098],{"class":60},[28,56539,51748],{"class":34},[28,56541,1558],{"class":38},[28,56543,56544,56546,56548,56550],{"class":30,"line":8307},[28,56545,55265],{"class":60},[28,56547,51693],{"class":38},[28,56549,51733],{"class":60},[28,56551,1558],{"class":38},[28,56553,56554,56556,56558,56560],{"class":30,"line":8319},[28,56555,55276],{"class":60},[28,56557,51693],{"class":38},[28,56559,51924],{"class":60},[28,56561,1558],{"class":38},[28,56563,56564,56566,56568,56570],{"class":30,"line":9978},[28,56565,55015],{"class":60},[28,56567,51693],{"class":38},[28,56569,55087],{"class":60},[28,56571,1558],{"class":38},[28,56573,56574,56576,56578,56580,56582],{"class":30,"line":10003},[28,56575,55027],{"class":60},[28,56577,51693],{"class":38},[28,56579,4254],{"class":60},[28,56581,51748],{"class":34},[28,56583,1558],{"class":38},[28,56585,56586,56588,56590,56592,56594],{"class":30,"line":10026},[28,56587,55041],{"class":60},[28,56589,51693],{"class":38},[28,56591,1098],{"class":60},[28,56593,51748],{"class":34},[28,56595,1558],{"class":38},[28,56597,56598],{"class":30,"line":10050},[28,56599,2449],{"class":38},[28,56601,56602],{"class":30,"line":10055},[28,56603,2662],{"emptyLinePlaceholder":336},[28,56605,56606,56608,56610],{"class":30,"line":10060},[28,56607,55224],{"class":51556},[28,56609,55331],{"class":51556},[28,56611,15834],{"class":38},[28,56613,56614,56616,56618,56620,56622],{"class":30,"line":10065},[28,56615,55027],{"class":60},[28,56617,51693],{"class":38},[28,56619,1098],{"class":60},[28,56621,51748],{"class":34},[28,56623,1558],{"class":38},[28,56625,56626,56628,56630,56632,56634],{"class":30,"line":10074},[28,56627,55041],{"class":60},[28,56629,51693],{"class":38},[28,56631,1098],{"class":60},[28,56633,51748],{"class":34},[28,56635,1558],{"class":38},[28,56637,56638,56640,56642,56644,56646,56648,56650,56652,56654,56656,56658,56660],{"class":30,"line":10079},[28,56639,55140],{"class":60},[28,56641,51693],{"class":38},[28,56643,55366],{"class":60},[28,56645,413],{"class":38},[28,56647,244],{"class":60},[28,56649,12697],{"class":38},[28,56651,244],{"class":60},[28,56653,12697],{"class":38},[28,56655,244],{"class":60},[28,56657,12697],{"class":38},[28,56659,55383],{"class":60},[28,56661,2981],{"class":38},[28,56663,56664,56666,56668,56670,56672],{"class":30,"line":10085},[28,56665,55390],{"class":60},[28,56667,51693],{"class":38},[28,56669,845],{"class":60},[28,56671,51748],{"class":34},[28,56673,1558],{"class":38},[28,56675,56676],{"class":30,"line":10106},[28,56677,2449],{"class":38},[28,56679,56680],{"class":30,"line":10112},[28,56681,2662],{"emptyLinePlaceholder":336},[28,56683,56684,56686],{"class":30,"line":10126},[28,56685,55411],{"class":2225},[28,56687,15834],{"class":38},[28,56689,56690,56692,56694,56696],{"class":30,"line":10132},[28,56691,55140],{"class":60},[28,56693,51693],{"class":38},[28,56695,55422],{"class":60},[28,56697,1558],{"class":38},[28,56699,56700],{"class":30,"line":10159},[28,56701,2449],{"class":38},[28,56703,56704,56706,56708],{"class":30,"line":10168},[28,56705,52673],{"class":38},[28,56707,328],{"class":51556},[28,56709,51563],{"class":38},[28,56711,56712,56714,56716],{"class":30,"line":10174},[28,56713,52041],{"class":38},[28,56715,51590],{"class":51556},[28,56717,51563],{"class":38},[28,56719,56720],{"class":30,"line":10182},[28,56721,2662],{"emptyLinePlaceholder":336},[28,56723,56724,56726,56728],{"class":30,"line":10187},[28,56725,1307],{"class":38},[28,56727,52056],{"class":51556},[28,56729,51563],{"class":38},[28,56731,56732,56734,56736,56738,56740,56742],{"class":30,"line":16866},[28,56733,52400],{"class":38},[28,56735,51867],{"class":51556},[28,56737,53742],{"class":2225},[28,56739,54],{"class":38},[28,56741,53747],{"class":127},[28,56743,51563],{"class":38},[28,56745,56746,56748,56750,56752,56754,56756],{"class":30,"line":16872},[28,56747,51597],{"class":38},[28,56749,51867],{"class":51556},[28,56751,53742],{"class":2225},[28,56753,54],{"class":38},[28,56755,55483],{"class":127},[28,56757,51563],{"class":38},[28,56759,56760,56762,56764,56766,56768,56770,56772,56774,56776],{"class":30,"line":16895},[28,56761,55490],{"class":38},[28,56763,1727],{"class":51556},[28,56765,55495],{"class":2225},[28,56767,54],{"class":38},[28,56769,55500],{"class":127},[28,56771,55503],{"class":2225},[28,56773,54],{"class":38},[28,56775,7914],{"class":127},[28,56777,51563],{"class":38},[28,56779,56780,56782,56784],{"class":30,"line":16901},[28,56781,52032],{"class":38},[28,56783,51867],{"class":51556},[28,56785,51563],{"class":38},[28,56787,56788,56790,56792,56794,56796,56798],{"class":30,"line":16924},[28,56789,51597],{"class":38},[28,56791,51867],{"class":51556},[28,56793,53742],{"class":2225},[28,56795,54],{"class":38},[28,56797,55530],{"class":127},[28,56799,51563],{"class":38},[28,56801,56802,56804,56806,56808,56810],{"class":30,"line":16938},[28,56803,55490],{"class":38},[28,56805,14],{"class":51556},[28,56807,55541],{"class":38},[28,56809,14],{"class":51556},[28,56811,51563],{"class":38},[28,56813,56814,56816,56818],{"class":30,"line":16958},[28,56815,55490],{"class":38},[28,56817,1404],{"class":51556},[28,56819,51563],{"class":38},[28,56821,56822,56824,56826,56828,56830,56832,56834,56836],{"class":30,"line":16964},[28,56823,55558],{"class":38},[28,56825,366],{"class":51556},[28,56827,53742],{"class":2225},[28,56829,54],{"class":38},[28,56831,55567],{"class":127},[28,56833,55570],{"class":38},[28,56835,366],{"class":51556},[28,56837,51563],{"class":38},[28,56839,56840,56842,56844,56846,56848],{"class":30,"line":16975},[28,56841,55558],{"class":38},[28,56843,366],{"class":51556},[28,56845,55570],{"class":38},[28,56847,366],{"class":51556},[28,56849,51563],{"class":38},[28,56851,56852,56854,56856,56858,56860],{"class":30,"line":16998},[28,56853,55558],{"class":38},[28,56855,366],{"class":51556},[28,56857,55570],{"class":38},[28,56859,366],{"class":51556},[28,56861,51563],{"class":38},[28,56863,56864,56866,56868,56870,56872],{"class":30,"line":17020},[28,56865,55558],{"class":38},[28,56867,366],{"class":51556},[28,56869,55570],{"class":38},[28,56871,366],{"class":51556},[28,56873,51563],{"class":38},[28,56875,56876,56878,56880,56882,56884],{"class":30,"line":17025},[28,56877,55558],{"class":38},[28,56879,366],{"class":51556},[28,56881,55570],{"class":38},[28,56883,366],{"class":51556},[28,56885,51563],{"class":38},[28,56887,56888,56890,56892,56894,56896],{"class":30,"line":17031},[28,56889,55558],{"class":38},[28,56891,366],{"class":51556},[28,56893,55570],{"class":38},[28,56895,366],{"class":51556},[28,56897,51563],{"class":38},[28,56899,56900,56902,56904,56906,56908],{"class":30,"line":17045},[28,56901,55558],{"class":38},[28,56903,366],{"class":51556},[28,56905,55570],{"class":38},[28,56907,366],{"class":51556},[28,56909,51563],{"class":38},[28,56911,56912,56914,56916,56918,56920],{"class":30,"line":17058},[28,56913,55558],{"class":38},[28,56915,366],{"class":51556},[28,56917,55570],{"class":38},[28,56919,366],{"class":51556},[28,56921,51563],{"class":38},[28,56923,56924,56926,56928],{"class":30,"line":17063},[28,56925,55663],{"class":38},[28,56927,1404],{"class":51556},[28,56929,51563],{"class":38},[28,56931,56932,56934,56936],{"class":30,"line":17077},[28,56933,52032],{"class":38},[28,56935,51867],{"class":51556},[28,56937,51563],{"class":38},[28,56939,56940,56942,56944],{"class":30,"line":17082},[28,56941,52673],{"class":38},[28,56943,51867],{"class":51556},[28,56945,51563],{"class":38},[28,56947,56948,56950,56952],{"class":30,"line":17088},[28,56949,52400],{"class":38},[28,56951,52069],{"class":51556},[28,56953,51563],{"class":38},[28,56955,56956,56958,56961,56963],{"class":30,"line":17093},[28,56957,11483],{"class":34},[28,56959,56960],{"class":60}," sliderData",[28,56962,13826],{"class":34},[28,56964,55703],{"class":38},[28,56966,56967,56969,56971,56973,56975,56977,56979],{"class":30,"line":17107},[28,56968,55708],{"class":38},[28,56970,55711],{"class":127},[28,56972,55714],{"class":38},[28,56974,55717],{"class":127},[28,56976,55720],{"class":38},[28,56978,55723],{"class":127},[28,56980,55726],{"class":38},[28,56982,56983,56985,56987,56989,56991,56993,56995],{"class":30,"line":17112},[28,56984,55708],{"class":38},[28,56986,55733],{"class":127},[28,56988,55714],{"class":38},[28,56990,55738],{"class":127},[28,56992,55720],{"class":38},[28,56994,55743],{"class":127},[28,56996,55726],{"class":38},[28,56998,56999,57001,57003,57005,57007,57009,57011],{"class":30,"line":17117},[28,57000,55708],{"class":38},[28,57002,55752],{"class":127},[28,57004,55714],{"class":38},[28,57006,55757],{"class":127},[28,57008,55720],{"class":38},[28,57010,55762],{"class":127},[28,57012,55726],{"class":38},[28,57014,57015,57017,57019,57021,57023,57025,57027],{"class":30,"line":17131},[28,57016,55708],{"class":38},[28,57018,55771],{"class":127},[28,57020,55714],{"class":38},[28,57022,55776],{"class":127},[28,57024,55720],{"class":38},[28,57026,55781],{"class":127},[28,57028,55726],{"class":38},[28,57030,57031,57033,57035,57037,57039,57041,57043],{"class":30,"line":17143},[28,57032,55708],{"class":38},[28,57034,55790],{"class":127},[28,57036,55714],{"class":38},[28,57038,55795],{"class":127},[28,57040,55720],{"class":38},[28,57042,55800],{"class":127},[28,57044,55726],{"class":38},[28,57046,57047,57049,57051,57053,57055,57057,57059],{"class":30,"line":17148},[28,57048,55708],{"class":38},[28,57050,55809],{"class":127},[28,57052,55714],{"class":38},[28,57054,55814],{"class":127},[28,57056,55720],{"class":38},[28,57058,55819],{"class":127},[28,57060,55726],{"class":38},[28,57062,57063,57065,57067,57069,57071,57073,57075],{"class":30,"line":17161},[28,57064,55708],{"class":38},[28,57066,55828],{"class":127},[28,57068,55714],{"class":38},[28,57070,55833],{"class":127},[28,57072,55720],{"class":38},[28,57074,55838],{"class":127},[28,57076,55726],{"class":38},[28,57078,57079,57081,57083,57085,57087,57089,57091],{"class":30,"line":17166},[28,57080,55708],{"class":38},[28,57082,55847],{"class":127},[28,57084,55714],{"class":38},[28,57086,55852],{"class":127},[28,57088,55720],{"class":38},[28,57090,55857],{"class":127},[28,57092,55860],{"class":38},[28,57094,57095],{"class":30,"line":17171},[28,57096,53365],{"class":38},[28,57098,57099],{"class":30,"line":17176},[28,57100,57101],{"class":87},"    \u002F\u002F 1.获取元素\n",[28,57103,57104,57106,57108,57110,57112,57114,57116,57118],{"class":30,"line":17189},[28,57105,11483],{"class":34},[28,57107,55871],{"class":60},[28,57109,13826],{"class":34},[28,57111,54652],{"class":38},[28,57113,54655],{"class":2225},[28,57115,413],{"class":38},[28,57117,55882],{"class":127},[28,57119,81],{"class":38},[28,57121,57122,57124,57126,57128,57130,57132,57134,57136],{"class":30,"line":17194},[28,57123,11483],{"class":34},[28,57125,7087],{"class":60},[28,57127,13826],{"class":34},[28,57129,54652],{"class":38},[28,57131,54655],{"class":2225},[28,57133,413],{"class":38},[28,57135,55901],{"class":127},[28,57137,81],{"class":38},[28,57139,57140,57142,57144,57146],{"class":30,"line":32889},[28,57141,52475],{"class":34},[28,57143,9700],{"class":38},[28,57145,54],{"class":34},[28,57147,47589],{"class":60},[28,57149,57150],{"class":30,"line":32895},[28,57151,57152],{"class":87},"    \u002F\u002F 2.开启定时器\n",[28,57154,57155],{"class":30,"line":32901},[28,57156,57157],{"class":87},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[28,57159,57160,57163,57165,57167],{"class":30,"line":32907},[28,57161,57162],{"class":2225},"    setInterval",[28,57164,413],{"class":38},[28,57166,54705],{"class":34},[28,57168,54708],{"class":38},[28,57170,57171,57173],{"class":30,"line":32913},[28,57172,54713],{"class":38},[28,57174,2964],{"class":34},[28,57176,57177,57179,57181,57183,57186,57188],{"class":30,"line":32924},[28,57178,54736],{"class":34},[28,57180,54739],{"class":38},[28,57182,1972],{"class":34},[28,57184,57185],{"class":38}," sliderData.",[28,57187,52224],{"class":60},[28,57189,12704],{"class":38},[28,57191,57192,57195,57197],{"class":30,"line":32930},[28,57193,57194],{"class":38},"        i ",[28,57196,54],{"class":34},[28,57198,47589],{"class":60},[28,57200,57201],{"class":30,"line":32950},[28,57202,52654],{"class":38},[28,57204,57205],{"class":30,"line":32956},[28,57206,57207],{"class":87},"      \u002F\u002F 更换图片路径\n",[28,57209,57210,57212,57214],{"class":30,"line":32967},[28,57211,55977],{"class":38},[28,57213,54],{"class":34},[28,57215,57216],{"class":38}," sliderData[i].url\n",[28,57218,57219],{"class":30,"line":32973},[28,57220,57221],{"class":87},"      \u002F\u002F 把文字写到p里面\n",[28,57223,57224,57226,57228],{"class":30,"line":32979},[28,57225,55987],{"class":38},[28,57227,54],{"class":34},[28,57229,57230],{"class":38}," sliderData[i].title\n",[28,57232,57233],{"class":30,"line":32985},[28,57234,57235],{"class":87},"      \u002F\u002F 小圆点\n",[28,57237,57238],{"class":30,"line":32991},[28,57239,57240],{"class":87},"      \u002F\u002F 先删除以前的active\n",[28,57242,57243],{"class":30,"line":32997},[28,57244,57245],{"class":87},"      \u002F\u002F 只让当前li添加active\n",[28,57247,57248,57250,57252,57254,57257,57260,57263,57265,57267],{"class":30,"line":33003},[28,57249,56027],{"class":38},[28,57251,54655],{"class":2225},[28,57253,413],{"class":38},[28,57255,57256],{"class":127},"'.slider-footer .activate'",[28,57258,57259],{"class":38},").classList.",[28,57261,57262],{"class":2225},"remove",[28,57264,413],{"class":38},[28,57266,56045],{"class":127},[28,57268,81],{"class":38},[28,57270,57271,57273,57275,57277,57280,57282,57284,57286,57289,57291,57293,57295,57297],{"class":30,"line":33009},[28,57272,56027],{"class":38},[28,57274,54655],{"class":2225},[28,57276,413],{"class":38},[28,57278,57279],{"class":127},"`.slider-footer ul li:nth-child(${",[28,57281,840],{"class":38},[28,57283,45822],{"class":34},[28,57285,25381],{"class":60},[28,57287,57288],{"class":127},"})`",[28,57290,57259],{"class":38},[28,57292,5596],{"class":2225},[28,57294,413],{"class":38},[28,57296,56045],{"class":127},[28,57298,81],{"class":38},[28,57300,57301],{"class":30,"line":33029},[28,57302,2662],{"emptyLinePlaceholder":336},[28,57304,57305,57307,57309],{"class":30,"line":33035},[28,57306,54791],{"class":38},[28,57308,6672],{"class":60},[28,57310,81],{"class":38},[28,57312,57313],{"class":30,"line":33051},[28,57314,2662],{"emptyLinePlaceholder":336},[28,57316,57317,57319,57321],{"class":30,"line":33057},[28,57318,52673],{"class":38},[28,57320,52069],{"class":51556},[28,57322,51563],{"class":38},[28,57324,57325,57327,57329],{"class":30,"line":33071},[28,57326,52041],{"class":38},[28,57328,52056],{"class":51556},[28,57330,51563],{"class":38},[28,57332,57333],{"class":30,"line":33077},[28,57334,2662],{"emptyLinePlaceholder":336},[28,57336,57337,57339,57341],{"class":30,"line":33092},[28,57338,52041],{"class":38},[28,57340,50891],{"class":51556},[28,57342,51563],{"class":38},[380,57344,57346],{"id":57345},"_317-重要知识点","3.1.7 重要知识点",[14,57348,57349,57350],{},"浏览器在渲染文本时， ",[555,57351,57352],{},"没有空格或换行符就没有“断行点”",[14,57354,57355],{},[1727,57356],{"alt":23,"src":57357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57359,57360],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57362,57363],{},[1727,57364],{"alt":23,"src":57365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57367,57368],{},[1727,57369],{"alt":23,"src":57370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[351,57372,57374],{"id":57373},"_32-dom事件基础","3.2 DOM事件基础",[380,57376,57378],{"id":57377},"_321-事件监听","3.2.1 事件监听",[14,57380,57381],{},[1727,57382],{"alt":23,"src":57383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57385,57386],{},"事件监听有响应的发生",[14,57388,57389],{},[1727,57390],{"alt":23,"src":57391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57393,57394],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57396,57397],{},"对于有名函数,要执行的函数名后边不要加()",[380,57399,57401],{"id":57400},"_322-随机点名案例","3.2.2 随机点名案例",[18,57403,57405],{"className":50889,"code":57404,"language":50891,"meta":23,"style":23},"\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",[25,57406,57407,57417,57431,57435,57443,57457,57477,57489,57497,57503,57513,57523,57527,57531,57538,57549,57553,57557,57563,57575,57589,57599,57611,57624,57628,57632,57639,57643,57656,57668,57680,57684,57688,57692,57699,57709,57713,57717,57726,57738,57750,57765,57769,57777,57785,57789,57797,57810,57824,57837,57857,57865,57880,57900,57920,57928,57932,57940,57945,57981,58001,58006,58025,58030,58041,58046,58057,58062,58081,58096,58101,58127,58137,58146,58151,58167,58172,58177,58182,58197,58201,58205,58210,58229,58246,58254,58259,58274,58278,58282,58290,58298,58302],{"__ignoreMap":23},[28,57408,57409,57411,57413,57415],{"class":30,"line":31},[28,57410,51553],{"class":38},[28,57412,51557],{"class":51556},[28,57414,51560],{"class":2225},[28,57416,51563],{"class":38},[28,57418,57419,57421,57423,57425,57427,57429],{"class":30,"line":48},[28,57420,1307],{"class":38},[28,57422,50891],{"class":51556},[28,57424,51572],{"class":2225},[28,57426,54],{"class":38},[28,57428,51577],{"class":127},[28,57430,51563],{"class":38},[28,57432,57433],{"class":30,"line":84},[28,57434,2662],{"emptyLinePlaceholder":336},[28,57436,57437,57439,57441],{"class":30,"line":91},[28,57438,1307],{"class":38},[28,57440,51590],{"class":51556},[28,57442,51563],{"class":38},[28,57444,57445,57447,57449,57451,57453,57455],{"class":30,"line":97},[28,57446,52400],{"class":38},[28,57448,51600],{"class":51556},[28,57450,51603],{"class":2225},[28,57452,54],{"class":38},[28,57454,51608],{"class":127},[28,57456,51563],{"class":38},[28,57458,57459,57461,57463,57465,57467,57469,57471,57473,57475],{"class":30,"line":103},[28,57460,52400],{"class":38},[28,57462,51600],{"class":51556},[28,57464,15182],{"class":2225},[28,57466,54],{"class":38},[28,57468,51647],{"class":127},[28,57470,51627],{"class":2225},[28,57472,54],{"class":38},[28,57474,51654],{"class":127},[28,57476,51563],{"class":38},[28,57478,57479,57481,57483,57485,57487],{"class":30,"line":109},[28,57480,52400],{"class":38},[28,57482,51663],{"class":51556},[28,57484,51666],{"class":38},[28,57486,51663],{"class":51556},[28,57488,51563],{"class":38},[28,57490,57491,57493,57495],{"class":30,"line":118},[28,57492,52400],{"class":38},[28,57494,328],{"class":51556},[28,57496,51563],{"class":38},[28,57498,57499,57501],{"class":30,"line":124},[28,57500,6665],{"class":51556},[28,57502,15834],{"class":38},[28,57504,57505,57507,57509,57511],{"class":30,"line":131},[28,57506,54962],{"class":60},[28,57508,51693],{"class":38},[28,57510,244],{"class":60},[28,57512,1558],{"class":38},[28,57514,57515,57517,57519,57521],{"class":30,"line":137},[28,57516,54951],{"class":60},[28,57518,51693],{"class":38},[28,57520,244],{"class":60},[28,57522,1558],{"class":38},[28,57524,57525],{"class":30,"line":143},[28,57526,2449],{"class":38},[28,57528,57529],{"class":30,"line":149},[28,57530,2662],{"emptyLinePlaceholder":336},[28,57532,57533,57536],{"class":30,"line":1890},[28,57534,57535],{"class":51556},"    h2",[28,57537,15834],{"class":38},[28,57539,57540,57543,57545,57547],{"class":30,"line":1904},[28,57541,57542],{"class":60},"      text-align",[28,57544,51693],{"class":38},[28,57546,51848],{"class":60},[28,57548,1558],{"class":38},[28,57550,57551],{"class":30,"line":1909},[28,57552,2449],{"class":38},[28,57554,57555],{"class":30,"line":1915},[28,57556,2662],{"emptyLinePlaceholder":336},[28,57558,57559,57561],{"class":30,"line":1936},[28,57560,55008],{"class":2225},[28,57562,15834],{"class":38},[28,57564,57565,57567,57569,57571,57573],{"class":30,"line":1941},[28,57566,55027],{"class":60},[28,57568,51693],{"class":38},[28,57570,1804],{"class":60},[28,57572,51748],{"class":34},[28,57574,1558],{"class":38},[28,57576,57577,57579,57581,57583,57585,57587],{"class":30,"line":1955},[28,57578,54962],{"class":60},[28,57580,51693],{"class":38},[28,57582,1054],{"class":60},[28,57584,51748],{"class":34},[28,57586,51812],{"class":60},[28,57588,1558],{"class":38},[28,57590,57591,57593,57595,57597],{"class":30,"line":1960},[28,57592,55265],{"class":60},[28,57594,51693],{"class":38},[28,57596,51733],{"class":60},[28,57598,1558],{"class":38},[28,57600,57601,57603,57605,57607,57609],{"class":30,"line":1989},[28,57602,55178],{"class":60},[28,57604,51693],{"class":38},[28,57606,1222],{"class":60},[28,57608,51748],{"class":34},[28,57610,1558],{"class":38},[28,57612,57613,57616,57618,57620,57622],{"class":30,"line":1994},[28,57614,57615],{"class":60},"      line-height",[28,57617,51693],{"class":38},[28,57619,800],{"class":60},[28,57621,51748],{"class":34},[28,57623,1558],{"class":38},[28,57625,57626],{"class":30,"line":2011},[28,57627,2449],{"class":38},[28,57629,57630],{"class":30,"line":2016},[28,57631,2662],{"emptyLinePlaceholder":336},[28,57633,57634,57637],{"class":30,"line":2021},[28,57635,57636],{"class":2225},"    .qs",[28,57638,15834],{"class":38},[28,57640,57641],{"class":30,"line":2026},[28,57642,2662],{"emptyLinePlaceholder":336},[28,57644,57645,57647,57649,57652,57654],{"class":30,"line":2040},[28,57646,55027],{"class":60},[28,57648,51693],{"class":38},[28,57650,57651],{"class":60},"450",[28,57653,51748],{"class":34},[28,57655,1558],{"class":38},[28,57657,57658,57660,57662,57664,57666],{"class":30,"line":2045},[28,57659,55041],{"class":60},[28,57661,51693],{"class":38},[28,57663,800],{"class":60},[28,57665,51748],{"class":34},[28,57667,1558],{"class":38},[28,57669,57670,57673,57675,57678],{"class":30,"line":2839},[28,57671,57672],{"class":60},"      color",[28,57674,51693],{"class":38},[28,57676,57677],{"class":60},"red",[28,57679,1558],{"class":38},[28,57681,57682],{"class":30,"line":2853},[28,57683,2662],{"emptyLinePlaceholder":336},[28,57685,57686],{"class":30,"line":2861},[28,57687,2449],{"class":38},[28,57689,57690],{"class":30,"line":2866},[28,57691,2662],{"emptyLinePlaceholder":336},[28,57693,57694,57697],{"class":30,"line":2872},[28,57695,57696],{"class":2225},"    .btns",[28,57698,15834],{"class":38},[28,57700,57701,57703,57705,57707],{"class":30,"line":2878},[28,57702,57542],{"class":60},[28,57704,51693],{"class":38},[28,57706,51848],{"class":60},[28,57708,1558],{"class":38},[28,57710,57711],{"class":30,"line":2883},[28,57712,2449],{"class":38},[28,57714,57715],{"class":30,"line":8210},[28,57716,2662],{"emptyLinePlaceholder":336},[28,57718,57719,57721,57724],{"class":30,"line":8234},[28,57720,57696],{"class":2225},[28,57722,57723],{"class":51556}," button",[28,57725,15834],{"class":38},[28,57727,57728,57730,57732,57734,57736],{"class":30,"line":8239},[28,57729,55027],{"class":60},[28,57731,51693],{"class":38},[28,57733,1215],{"class":60},[28,57735,51748],{"class":34},[28,57737,1558],{"class":38},[28,57739,57740,57742,57744,57746,57748],{"class":30,"line":8245},[28,57741,55041],{"class":60},[28,57743,51693],{"class":38},[28,57745,676],{"class":60},[28,57747,51748],{"class":34},[28,57749,1558],{"class":38},[28,57751,57752,57754,57756,57758,57761,57763],{"class":30,"line":8272},[28,57753,54962],{"class":60},[28,57755,51693],{"class":38},[28,57757,244],{"class":60},[28,57759,57760],{"class":60}," 50",[28,57762,51748],{"class":34},[28,57764,1558],{"class":38},[28,57766,57767],{"class":30,"line":8277},[28,57768,2449],{"class":38},[28,57770,57771,57773,57775],{"class":30,"line":8283},[28,57772,52673],{"class":38},[28,57774,328],{"class":51556},[28,57776,51563],{"class":38},[28,57778,57779,57781,57783],{"class":30,"line":8295},[28,57780,52041],{"class":38},[28,57782,51590],{"class":51556},[28,57784,51563],{"class":38},[28,57786,57787],{"class":30,"line":8307},[28,57788,2662],{"emptyLinePlaceholder":336},[28,57790,57791,57793,57795],{"class":30,"line":8319},[28,57792,1307],{"class":38},[28,57794,52056],{"class":51556},[28,57796,51563],{"class":38},[28,57798,57799,57801,57803,57806,57808],{"class":30,"line":9978},[28,57800,52400],{"class":38},[28,57802,351],{"class":51556},[28,57804,57805],{"class":38},">随机点名\u003C\u002F",[28,57807,351],{"class":51556},[28,57809,51563],{"class":38},[28,57811,57812,57814,57816,57818,57820,57822],{"class":30,"line":10003},[28,57813,52400],{"class":38},[28,57815,51867],{"class":51556},[28,57817,53742],{"class":2225},[28,57819,54],{"class":38},[28,57821,53747],{"class":127},[28,57823,51563],{"class":38},[28,57825,57826,57828,57830,57833,57835],{"class":30,"line":10026},[28,57827,51597],{"class":38},[28,57829,28],{"class":51556},[28,57831,57832],{"class":38},">名字是：\u003C\u002F",[28,57834,28],{"class":51556},[28,57836,51563],{"class":38},[28,57838,57839,57841,57843,57845,57847,57850,57853,57855],{"class":30,"line":10050},[28,57840,51597],{"class":38},[28,57842,51867],{"class":51556},[28,57844,53742],{"class":2225},[28,57846,54],{"class":38},[28,57848,57849],{"class":127},"\"qs\"",[28,57851,57852],{"class":38},">这里显示姓名\u003C\u002F",[28,57854,51867],{"class":51556},[28,57856,51563],{"class":38},[28,57858,57859,57861,57863],{"class":30,"line":10055},[28,57860,52673],{"class":38},[28,57862,51867],{"class":51556},[28,57864,51563],{"class":38},[28,57866,57867,57869,57871,57873,57875,57878],{"class":30,"line":10060},[28,57868,52400],{"class":38},[28,57870,51867],{"class":51556},[28,57872,53742],{"class":2225},[28,57874,54],{"class":38},[28,57876,57877],{"class":127},"\"btns\"",[28,57879,51563],{"class":38},[28,57881,57882,57884,57886,57888,57890,57893,57896,57898],{"class":30,"line":10065},[28,57883,51597],{"class":38},[28,57885,54143],{"class":51556},[28,57887,53742],{"class":2225},[28,57889,54],{"class":38},[28,57891,57892],{"class":127},"\"start\"",[28,57894,57895],{"class":38},">开始\u003C\u002F",[28,57897,54143],{"class":51556},[28,57899,51563],{"class":38},[28,57901,57902,57904,57906,57908,57910,57913,57916,57918],{"class":30,"line":10074},[28,57903,51597],{"class":38},[28,57905,54143],{"class":51556},[28,57907,53742],{"class":2225},[28,57909,54],{"class":38},[28,57911,57912],{"class":127},"\"end\"",[28,57914,57915],{"class":38},">结束\u003C\u002F",[28,57917,54143],{"class":51556},[28,57919,51563],{"class":38},[28,57921,57922,57924,57926],{"class":30,"line":10079},[28,57923,52673],{"class":38},[28,57925,51867],{"class":51556},[28,57927,51563],{"class":38},[28,57929,57930],{"class":30,"line":10085},[28,57931,2662],{"emptyLinePlaceholder":336},[28,57933,57934,57936,57938],{"class":30,"line":10106},[28,57935,52400],{"class":38},[28,57937,52069],{"class":51556},[28,57939,51563],{"class":38},[28,57941,57942],{"class":30,"line":10112},[28,57943,57944],{"class":87},"    \u002F\u002F 数据数组\n",[28,57946,57947,57949,57952,57954,57956,57959,57961,57964,57966,57969,57971,57974,57976,57979],{"class":30,"line":10126},[28,57948,11483],{"class":34},[28,57950,57951],{"class":60}," arr",[28,57953,13826],{"class":34},[28,57955,52482],{"class":38},[28,57957,57958],{"class":127},"'马超'",[28,57960,12697],{"class":38},[28,57962,57963],{"class":127},"'黄忠'",[28,57965,12697],{"class":38},[28,57967,57968],{"class":127},"'赵云'",[28,57970,12697],{"class":38},[28,57972,57973],{"class":127},"'关羽'",[28,57975,12697],{"class":38},[28,57977,57978],{"class":127},"'张飞'",[28,57980,33502],{"class":38},[28,57982,57983,57985,57988,57990,57992,57994,57996,57999],{"class":30,"line":10132},[28,57984,11483],{"class":34},[28,57986,57987],{"class":60}," qs",[28,57989,13826],{"class":34},[28,57991,54652],{"class":38},[28,57993,54655],{"class":2225},[28,57995,413],{"class":38},[28,57997,57998],{"class":127},"'.qs'",[28,58000,81],{"class":38},[28,58002,58003],{"class":30,"line":10159},[28,58004,58005],{"class":87},"    \u002F\u002F 1.业务1.开始按钮模块\n",[28,58007,58008,58010,58012,58014,58016,58018,58020,58023],{"class":30,"line":10168},[28,58009,11483],{"class":34},[28,58011,4446],{"class":60},[28,58013,13826],{"class":34},[28,58015,54652],{"class":38},[28,58017,54655],{"class":2225},[28,58019,413],{"class":38},[28,58021,58022],{"class":127},"'.start'",[28,58024,81],{"class":38},[28,58026,58027],{"class":30,"line":10174},[28,58028,58029],{"class":87},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[28,58031,58032,58034,58037,58039],{"class":30,"line":10182},[28,58033,52475],{"class":34},[28,58035,58036],{"class":38}," timerId ",[28,58038,54],{"class":34},[28,58040,47589],{"class":60},[28,58042,58043],{"class":30,"line":10187},[28,58044,58045],{"class":87},"    \u002F\u002F 随机号要全局变量\n",[28,58047,58048,58050,58053,58055],{"class":30,"line":16866},[28,58049,52475],{"class":34},[28,58051,58052],{"class":38}," random ",[28,58054,54],{"class":34},[28,58056,47589],{"class":60},[28,58058,58059],{"class":30,"line":16872},[28,58060,58061],{"class":87},"    \u002F\u002F 1.1 添加点击事件\n",[28,58063,58064,58067,58070,58072,58075,58077,58079],{"class":30,"line":16895},[28,58065,58066],{"class":38},"    start.",[28,58068,58069],{"class":2225},"addEventListener",[28,58071,413],{"class":38},[28,58073,58074],{"class":127},"'click'",[28,58076,12697],{"class":38},[28,58078,54705],{"class":34},[28,58080,54708],{"class":38},[28,58082,58083,58086,58088,58090,58092,58094],{"class":30,"line":16901},[28,58084,58085],{"class":38},"      timerId ",[28,58087,54],{"class":34},[28,58089,54700],{"class":2225},[28,58091,413],{"class":38},[28,58093,54705],{"class":34},[28,58095,54708],{"class":38},[28,58097,58098],{"class":30,"line":16924},[28,58099,58100],{"class":87},"        \u002F\u002F 随机数\n",[28,58102,58103,58106,58108,58111,58114,58117,58119,58121,58123,58125],{"class":30,"line":16938},[28,58104,58105],{"class":38},"        random ",[28,58107,54],{"class":34},[28,58109,58110],{"class":2225}," parseInt",[28,58112,58113],{"class":38},"(Math.",[28,58115,58116],{"class":2225},"random",[28,58118,13312],{"class":38},[28,58120,854],{"class":34},[28,58122,52221],{"class":38},[28,58124,52224],{"class":60},[28,58126,81],{"class":38},[28,58128,58129,58132,58134],{"class":30,"line":16958},[28,58130,58131],{"class":38},"        qs.innerHTML ",[28,58133,54],{"class":34},[28,58135,58136],{"class":38}," arr[random]\n",[28,58138,58139,58142,58144],{"class":30,"line":16964},[28,58140,58141],{"class":38},"      }, ",[28,58143,676],{"class":60},[28,58145,81],{"class":38},[28,58147,58148],{"class":30,"line":16975},[28,58149,58150],{"class":87},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[28,58152,58153,58155,58158,58160,58163,58165],{"class":30,"line":16998},[28,58154,54736],{"class":34},[28,58156,58157],{"class":38}," (arr.",[28,58159,52224],{"class":60},[28,58161,58162],{"class":34}," ===",[28,58164,25381],{"class":60},[28,58166,12704],{"class":38},[28,58168,58169],{"class":30,"line":17020},[28,58170,58171],{"class":87},"        \u002F\u002F start.disabled = true\n",[28,58173,58174],{"class":30,"line":17025},[28,58175,58176],{"class":87},"        \u002F\u002F end.disabled = true\n",[28,58178,58179],{"class":30,"line":17031},[28,58180,58181],{"class":87},"        \u002F\u002F 可以合起来写\n",[28,58183,58184,58187,58189,58192,58194],{"class":30,"line":17045},[28,58185,58186],{"class":38},"        start.disabled ",[28,58188,54],{"class":34},[28,58190,58191],{"class":38}," end.disabled ",[28,58193,54],{"class":34},[28,58195,58196],{"class":60}," true\n",[28,58198,58199],{"class":30,"line":17058},[28,58200,52654],{"class":38},[28,58202,58203],{"class":30,"line":17063},[28,58204,33717],{"class":38},[28,58206,58207],{"class":30,"line":17077},[28,58208,58209],{"class":87},"    \u002F\u002F 1.2 关闭按钮模块\n",[28,58211,58212,58214,58216,58218,58220,58222,58224,58227],{"class":30,"line":17082},[28,58213,11483],{"class":34},[28,58215,4462],{"class":60},[28,58217,13826],{"class":34},[28,58219,54652],{"class":38},[28,58221,54655],{"class":2225},[28,58223,413],{"class":38},[28,58225,58226],{"class":127},"'.end'",[28,58228,81],{"class":38},[28,58230,58231,58234,58236,58238,58240,58242,58244],{"class":30,"line":17088},[28,58232,58233],{"class":38},"    end.",[28,58235,58069],{"class":2225},[28,58237,413],{"class":38},[28,58239,58074],{"class":127},[28,58241,12697],{"class":38},[28,58243,54705],{"class":34},[28,58245,54708],{"class":38},[28,58247,58248,58251],{"class":30,"line":17093},[28,58249,58250],{"class":2225},"      clearInterval",[28,58252,58253],{"class":38},"(timerId)\n",[28,58255,58256],{"class":30,"line":17107},[28,58257,58258],{"class":87},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[28,58260,58261,58264,58267,58270,58272],{"class":30,"line":17112},[28,58262,58263],{"class":38},"      arr.",[28,58265,58266],{"class":2225},"splice",[28,58268,58269],{"class":38},"(random, ",[28,58271,61],{"class":60},[28,58273,81],{"class":38},[28,58275,58276],{"class":30,"line":17117},[28,58277,33717],{"class":38},[28,58279,58280],{"class":30,"line":17131},[28,58281,2662],{"emptyLinePlaceholder":336},[28,58283,58284,58286,58288],{"class":30,"line":17143},[28,58285,52673],{"class":38},[28,58287,52069],{"class":51556},[28,58289,51563],{"class":38},[28,58291,58292,58294,58296],{"class":30,"line":17148},[28,58293,52041],{"class":38},[28,58295,52056],{"class":51556},[28,58297,51563],{"class":38},[28,58299,58300],{"class":30,"line":17161},[28,58301,2662],{"emptyLinePlaceholder":336},[28,58303,58304,58306,58308],{"class":30,"line":17166},[28,58305,52041],{"class":38},[28,58307,50891],{"class":51556},[28,58309,51563],{"class":38},[14,58311,58312],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[380,58314,58316],{"id":58315},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[18,58318,58320],{"className":50889,"code":58319,"language":50891,"meta":23,"style":23},"\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",[25,58321,58322,58332,58346,58350,58358,58372,58392,58404,58412,58416,58424,58436,58444,58463,58480,58496,58506,58510,58518,58526,58530],{"__ignoreMap":23},[28,58323,58324,58326,58328,58330],{"class":30,"line":31},[28,58325,51553],{"class":38},[28,58327,51557],{"class":51556},[28,58329,51560],{"class":2225},[28,58331,51563],{"class":38},[28,58333,58334,58336,58338,58340,58342,58344],{"class":30,"line":48},[28,58335,1307],{"class":38},[28,58337,50891],{"class":51556},[28,58339,51572],{"class":2225},[28,58341,54],{"class":38},[28,58343,51577],{"class":127},[28,58345,51563],{"class":38},[28,58347,58348],{"class":30,"line":84},[28,58349,2662],{"emptyLinePlaceholder":336},[28,58351,58352,58354,58356],{"class":30,"line":91},[28,58353,1307],{"class":38},[28,58355,51590],{"class":51556},[28,58357,51563],{"class":38},[28,58359,58360,58362,58364,58366,58368,58370],{"class":30,"line":97},[28,58361,52400],{"class":38},[28,58363,51600],{"class":51556},[28,58365,51603],{"class":2225},[28,58367,54],{"class":38},[28,58369,51608],{"class":127},[28,58371,51563],{"class":38},[28,58373,58374,58376,58378,58380,58382,58384,58386,58388,58390],{"class":30,"line":103},[28,58375,52400],{"class":38},[28,58377,51600],{"class":51556},[28,58379,15182],{"class":2225},[28,58381,54],{"class":38},[28,58383,51647],{"class":127},[28,58385,51627],{"class":2225},[28,58387,54],{"class":38},[28,58389,51654],{"class":127},[28,58391,51563],{"class":38},[28,58393,58394,58396,58398,58400,58402],{"class":30,"line":109},[28,58395,52400],{"class":38},[28,58397,51663],{"class":51556},[28,58399,51666],{"class":38},[28,58401,51663],{"class":51556},[28,58403,51563],{"class":38},[28,58405,58406,58408,58410],{"class":30,"line":118},[28,58407,52041],{"class":38},[28,58409,51590],{"class":51556},[28,58411,51563],{"class":38},[28,58413,58414],{"class":30,"line":124},[28,58415,2662],{"emptyLinePlaceholder":336},[28,58417,58418,58420,58422],{"class":30,"line":131},[28,58419,1307],{"class":38},[28,58421,52056],{"class":51556},[28,58423,51563],{"class":38},[28,58425,58426,58428,58430,58432,58434],{"class":30,"line":137},[28,58427,52400],{"class":38},[28,58429,54143],{"class":51556},[28,58431,54149],{"class":38},[28,58433,54143],{"class":51556},[28,58435,51563],{"class":38},[28,58437,58438,58440,58442],{"class":30,"line":143},[28,58439,52400],{"class":38},[28,58441,52069],{"class":51556},[28,58443,51563],{"class":38},[28,58445,58446,58448,58450,58452,58454,58456,58458,58461],{"class":30,"line":149},[28,58447,11483],{"class":34},[28,58449,54647],{"class":60},[28,58451,13826],{"class":34},[28,58453,54652],{"class":38},[28,58455,54655],{"class":2225},[28,58457,413],{"class":38},[28,58459,58460],{"class":127},"'button'",[28,58462,81],{"class":38},[28,58464,58465,58468,58470,58472,58474,58476,58478],{"class":30,"line":1890},[28,58466,58467],{"class":38},"    btn.",[28,58469,58069],{"class":2225},[28,58471,413],{"class":38},[28,58473,58074],{"class":127},[28,58475,12697],{"class":38},[28,58477,54705],{"class":34},[28,58479,54708],{"class":38},[28,58481,58482,58485,58487,58489,58492,58494],{"class":30,"line":1904},[28,58483,58484],{"class":34},"      const",[28,58486,2502],{"class":60},[28,58488,13826],{"class":34},[28,58490,58491],{"class":38}," Math.",[28,58493,58116],{"class":2225},[28,58495,2238],{"class":38},[28,58497,58498,58501,58504],{"class":30,"line":1909},[28,58499,58500],{"class":38},"      console.",[28,58502,58503],{"class":2225},"log",[28,58505,425],{"class":38},[28,58507,58508],{"class":30,"line":1915},[28,58509,33717],{"class":38},[28,58511,58512,58514,58516],{"class":30,"line":1936},[28,58513,52673],{"class":38},[28,58515,52069],{"class":51556},[28,58517,51563],{"class":38},[28,58519,58520,58522,58524],{"class":30,"line":1941},[28,58521,52041],{"class":38},[28,58523,52056],{"class":51556},[28,58525,51563],{"class":38},[28,58527,58528],{"class":30,"line":1955},[28,58529,2662],{"emptyLinePlaceholder":336},[28,58531,58532,58534,58536],{"class":30,"line":1960},[28,58533,52041],{"class":38},[28,58535,50891],{"class":51556},[28,58537,51563],{"class":38},[14,58539,58540],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58542,58543],{},"常量不可以重新赋值",[14,58545,58546],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[18,58548,58550],{"className":50889,"code":58549,"language":50891,"meta":23,"style":23},"\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",[25,58551,58552,58562,58576,58580,58588,58602,58622,58634,58642,58646,58654,58666,58674,58685,58703,58719,58733,58741,58745,58753,58761,58765],{"__ignoreMap":23},[28,58553,58554,58556,58558,58560],{"class":30,"line":31},[28,58555,51553],{"class":38},[28,58557,51557],{"class":51556},[28,58559,51560],{"class":2225},[28,58561,51563],{"class":38},[28,58563,58564,58566,58568,58570,58572,58574],{"class":30,"line":48},[28,58565,1307],{"class":38},[28,58567,50891],{"class":51556},[28,58569,51572],{"class":2225},[28,58571,54],{"class":38},[28,58573,51577],{"class":127},[28,58575,51563],{"class":38},[28,58577,58578],{"class":30,"line":84},[28,58579,2662],{"emptyLinePlaceholder":336},[28,58581,58582,58584,58586],{"class":30,"line":91},[28,58583,1307],{"class":38},[28,58585,51590],{"class":51556},[28,58587,51563],{"class":38},[28,58589,58590,58592,58594,58596,58598,58600],{"class":30,"line":97},[28,58591,52400],{"class":38},[28,58593,51600],{"class":51556},[28,58595,51603],{"class":2225},[28,58597,54],{"class":38},[28,58599,51608],{"class":127},[28,58601,51563],{"class":38},[28,58603,58604,58606,58608,58610,58612,58614,58616,58618,58620],{"class":30,"line":103},[28,58605,52400],{"class":38},[28,58607,51600],{"class":51556},[28,58609,15182],{"class":2225},[28,58611,54],{"class":38},[28,58613,51647],{"class":127},[28,58615,51627],{"class":2225},[28,58617,54],{"class":38},[28,58619,51654],{"class":127},[28,58621,51563],{"class":38},[28,58623,58624,58626,58628,58630,58632],{"class":30,"line":109},[28,58625,52400],{"class":38},[28,58627,51663],{"class":51556},[28,58629,51666],{"class":38},[28,58631,51663],{"class":51556},[28,58633,51563],{"class":38},[28,58635,58636,58638,58640],{"class":30,"line":118},[28,58637,52041],{"class":38},[28,58639,51590],{"class":51556},[28,58641,51563],{"class":38},[28,58643,58644],{"class":30,"line":124},[28,58645,2662],{"emptyLinePlaceholder":336},[28,58647,58648,58650,58652],{"class":30,"line":131},[28,58649,1307],{"class":38},[28,58651,52056],{"class":51556},[28,58653,51563],{"class":38},[28,58655,58656,58658,58660,58662,58664],{"class":30,"line":137},[28,58657,52400],{"class":38},[28,58659,54143],{"class":51556},[28,58661,54149],{"class":38},[28,58663,54143],{"class":51556},[28,58665,51563],{"class":38},[28,58667,58668,58670,58672],{"class":30,"line":143},[28,58669,52400],{"class":38},[28,58671,52069],{"class":51556},[28,58673,51563],{"class":38},[28,58675,58676,58678,58680,58682],{"class":30,"line":149},[28,58677,11483],{"class":34},[28,58679,2502],{"class":60},[28,58681,13826],{"class":34},[28,58683,58684],{"class":60}," 10\n",[28,58686,58687,58689,58691,58693,58695,58697,58699,58701],{"class":30,"line":1890},[28,58688,11483],{"class":34},[28,58690,54647],{"class":60},[28,58692,13826],{"class":34},[28,58694,54652],{"class":38},[28,58696,54655],{"class":2225},[28,58698,413],{"class":38},[28,58700,58460],{"class":127},[28,58702,81],{"class":38},[28,58704,58705,58707,58709,58711,58713,58715,58717],{"class":30,"line":1904},[28,58706,58467],{"class":38},[28,58708,58069],{"class":2225},[28,58710,413],{"class":38},[28,58712,58074],{"class":127},[28,58714,12697],{"class":38},[28,58716,54705],{"class":34},[28,58718,54708],{"class":38},[28,58720,58721,58723,58725,58727,58729,58731],{"class":30,"line":1909},[28,58722,58484],{"class":34},[28,58724,2502],{"class":60},[28,58726,13826],{"class":34},[28,58728,58491],{"class":38},[28,58730,58116],{"class":2225},[28,58732,2238],{"class":38},[28,58734,58735,58737,58739],{"class":30,"line":1915},[28,58736,58500],{"class":38},[28,58738,58503],{"class":2225},[28,58740,425],{"class":38},[28,58742,58743],{"class":30,"line":1936},[28,58744,33717],{"class":38},[28,58746,58747,58749,58751],{"class":30,"line":1941},[28,58748,52673],{"class":38},[28,58750,52069],{"class":51556},[28,58752,51563],{"class":38},[28,58754,58755,58757,58759],{"class":30,"line":1955},[28,58756,52041],{"class":38},[28,58758,52056],{"class":51556},[28,58760,51563],{"class":38},[28,58762,58763],{"class":30,"line":1960},[28,58764,2662],{"emptyLinePlaceholder":336},[28,58766,58767,58769,58771],{"class":30,"line":1989},[28,58768,52041],{"class":38},[28,58770,50891],{"class":51556},[28,58772,51563],{"class":38},[14,58774,58775],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[18,58777,58779],{"className":50889,"code":58778,"language":50891,"meta":23,"style":23},"\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",[25,58780,58781,58791,58805,58809,58817,58831,58851,58863,58871,58875,58883,58895,58903,58913,58931,58947,58960,58968,58972,58980,58988,58992],{"__ignoreMap":23},[28,58782,58783,58785,58787,58789],{"class":30,"line":31},[28,58784,51553],{"class":38},[28,58786,51557],{"class":51556},[28,58788,51560],{"class":2225},[28,58790,51563],{"class":38},[28,58792,58793,58795,58797,58799,58801,58803],{"class":30,"line":48},[28,58794,1307],{"class":38},[28,58796,50891],{"class":51556},[28,58798,51572],{"class":2225},[28,58800,54],{"class":38},[28,58802,51577],{"class":127},[28,58804,51563],{"class":38},[28,58806,58807],{"class":30,"line":84},[28,58808,2662],{"emptyLinePlaceholder":336},[28,58810,58811,58813,58815],{"class":30,"line":91},[28,58812,1307],{"class":38},[28,58814,51590],{"class":51556},[28,58816,51563],{"class":38},[28,58818,58819,58821,58823,58825,58827,58829],{"class":30,"line":97},[28,58820,52400],{"class":38},[28,58822,51600],{"class":51556},[28,58824,51603],{"class":2225},[28,58826,54],{"class":38},[28,58828,51608],{"class":127},[28,58830,51563],{"class":38},[28,58832,58833,58835,58837,58839,58841,58843,58845,58847,58849],{"class":30,"line":103},[28,58834,52400],{"class":38},[28,58836,51600],{"class":51556},[28,58838,15182],{"class":2225},[28,58840,54],{"class":38},[28,58842,51647],{"class":127},[28,58844,51627],{"class":2225},[28,58846,54],{"class":38},[28,58848,51654],{"class":127},[28,58850,51563],{"class":38},[28,58852,58853,58855,58857,58859,58861],{"class":30,"line":109},[28,58854,52400],{"class":38},[28,58856,51663],{"class":51556},[28,58858,51666],{"class":38},[28,58860,51663],{"class":51556},[28,58862,51563],{"class":38},[28,58864,58865,58867,58869],{"class":30,"line":118},[28,58866,52041],{"class":38},[28,58868,51590],{"class":51556},[28,58870,51563],{"class":38},[28,58872,58873],{"class":30,"line":124},[28,58874,2662],{"emptyLinePlaceholder":336},[28,58876,58877,58879,58881],{"class":30,"line":131},[28,58878,1307],{"class":38},[28,58880,52056],{"class":51556},[28,58882,51563],{"class":38},[28,58884,58885,58887,58889,58891,58893],{"class":30,"line":137},[28,58886,52400],{"class":38},[28,58888,54143],{"class":51556},[28,58890,54149],{"class":38},[28,58892,54143],{"class":51556},[28,58894,51563],{"class":38},[28,58896,58897,58899,58901],{"class":30,"line":143},[28,58898,52400],{"class":38},[28,58900,52069],{"class":51556},[28,58902,51563],{"class":38},[28,58904,58905,58907,58909,58911],{"class":30,"line":149},[28,58906,11483],{"class":34},[28,58908,2502],{"class":60},[28,58910,13826],{"class":34},[28,58912,58684],{"class":60},[28,58914,58915,58917,58919,58921,58923,58925,58927,58929],{"class":30,"line":1890},[28,58916,11483],{"class":34},[28,58918,54647],{"class":60},[28,58920,13826],{"class":34},[28,58922,54652],{"class":38},[28,58924,54655],{"class":2225},[28,58926,413],{"class":38},[28,58928,58460],{"class":127},[28,58930,81],{"class":38},[28,58932,58933,58935,58937,58939,58941,58943,58945],{"class":30,"line":1904},[28,58934,58467],{"class":38},[28,58936,58069],{"class":2225},[28,58938,413],{"class":38},[28,58940,58074],{"class":127},[28,58942,12697],{"class":38},[28,58944,54705],{"class":34},[28,58946,54708],{"class":38},[28,58948,58949,58952,58954,58956,58958],{"class":30,"line":1909},[28,58950,58951],{"class":38},"      num ",[28,58953,54],{"class":34},[28,58955,58491],{"class":38},[28,58957,58116],{"class":2225},[28,58959,2238],{"class":38},[28,58961,58962,58964,58966],{"class":30,"line":1915},[28,58963,58500],{"class":38},[28,58965,58503],{"class":2225},[28,58967,425],{"class":38},[28,58969,58970],{"class":30,"line":1936},[28,58971,33717],{"class":38},[28,58973,58974,58976,58978],{"class":30,"line":1941},[28,58975,52673],{"class":38},[28,58977,52069],{"class":51556},[28,58979,51563],{"class":38},[28,58981,58982,58984,58986],{"class":30,"line":1955},[28,58983,52041],{"class":38},[28,58985,52056],{"class":51556},[28,58987,51563],{"class":38},[28,58989,58990],{"class":30,"line":1960},[28,58991,2662],{"emptyLinePlaceholder":336},[28,58993,58994,58996,58998],{"class":30,"line":1989},[28,58995,52041],{"class":38},[28,58997,50891],{"class":51556},[28,58999,51563],{"class":38},[14,59001,59002],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[380,59004,59006],{"id":59005},"_324-事件监听版本","3.2.4 事件监听版本",[14,59008,59009],{},[1727,59010],{"alt":23,"src":59011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59013,59014],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59016,59017],{},"这种方式会覆盖前边的事件监听:",[18,59019,59021],{"className":50889,"code":59020,"language":50891,"meta":23,"style":23},"\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",[25,59022,59023,59033,59047,59051,59059,59073,59093,59105,59113,59117,59125,59137,59145,59163,59177,59188,59192,59204,59214,59218,59226,59234,59238],{"__ignoreMap":23},[28,59024,59025,59027,59029,59031],{"class":30,"line":31},[28,59026,51553],{"class":38},[28,59028,51557],{"class":51556},[28,59030,51560],{"class":2225},[28,59032,51563],{"class":38},[28,59034,59035,59037,59039,59041,59043,59045],{"class":30,"line":48},[28,59036,1307],{"class":38},[28,59038,50891],{"class":51556},[28,59040,51572],{"class":2225},[28,59042,54],{"class":38},[28,59044,51577],{"class":127},[28,59046,51563],{"class":38},[28,59048,59049],{"class":30,"line":84},[28,59050,2662],{"emptyLinePlaceholder":336},[28,59052,59053,59055,59057],{"class":30,"line":91},[28,59054,1307],{"class":38},[28,59056,51590],{"class":51556},[28,59058,51563],{"class":38},[28,59060,59061,59063,59065,59067,59069,59071],{"class":30,"line":97},[28,59062,52400],{"class":38},[28,59064,51600],{"class":51556},[28,59066,51603],{"class":2225},[28,59068,54],{"class":38},[28,59070,51608],{"class":127},[28,59072,51563],{"class":38},[28,59074,59075,59077,59079,59081,59083,59085,59087,59089,59091],{"class":30,"line":103},[28,59076,52400],{"class":38},[28,59078,51600],{"class":51556},[28,59080,15182],{"class":2225},[28,59082,54],{"class":38},[28,59084,51647],{"class":127},[28,59086,51627],{"class":2225},[28,59088,54],{"class":38},[28,59090,51654],{"class":127},[28,59092,51563],{"class":38},[28,59094,59095,59097,59099,59101,59103],{"class":30,"line":109},[28,59096,52400],{"class":38},[28,59098,51663],{"class":51556},[28,59100,51666],{"class":38},[28,59102,51663],{"class":51556},[28,59104,51563],{"class":38},[28,59106,59107,59109,59111],{"class":30,"line":118},[28,59108,52041],{"class":38},[28,59110,51590],{"class":51556},[28,59112,51563],{"class":38},[28,59114,59115],{"class":30,"line":124},[28,59116,2662],{"emptyLinePlaceholder":336},[28,59118,59119,59121,59123],{"class":30,"line":131},[28,59120,1307],{"class":38},[28,59122,52056],{"class":51556},[28,59124,51563],{"class":38},[28,59126,59127,59129,59131,59133,59135],{"class":30,"line":137},[28,59128,52400],{"class":38},[28,59130,54143],{"class":51556},[28,59132,54149],{"class":38},[28,59134,54143],{"class":51556},[28,59136,51563],{"class":38},[28,59138,59139,59141,59143],{"class":30,"line":143},[28,59140,52400],{"class":38},[28,59142,52069],{"class":51556},[28,59144,51563],{"class":38},[28,59146,59147,59149,59151,59153,59155,59157,59159,59161],{"class":30,"line":149},[28,59148,11483],{"class":34},[28,59150,54647],{"class":60},[28,59152,13826],{"class":34},[28,59154,54652],{"class":38},[28,59156,54655],{"class":2225},[28,59158,413],{"class":38},[28,59160,58460],{"class":127},[28,59162,81],{"class":38},[28,59164,59165,59167,59170,59172,59175],{"class":30,"line":1890},[28,59166,58467],{"class":38},[28,59168,59169],{"class":2225},"onclick",[28,59171,13826],{"class":34},[28,59173,59174],{"class":34}," function",[28,59176,54708],{"class":38},[28,59178,59179,59182,59184,59186],{"class":30,"line":1904},[28,59180,59181],{"class":2225},"      alert",[28,59183,413],{"class":38},[28,59185,871],{"class":60},[28,59187,81],{"class":38},[28,59189,59190],{"class":30,"line":1909},[28,59191,2449],{"class":38},[28,59193,59194,59196,59198,59200,59202],{"class":30,"line":1915},[28,59195,58467],{"class":38},[28,59197,59169],{"class":2225},[28,59199,13826],{"class":34},[28,59201,59174],{"class":34},[28,59203,54708],{"class":38},[28,59205,59206,59208,59210,59212],{"class":30,"line":1936},[28,59207,59181],{"class":2225},[28,59209,413],{"class":38},[28,59211,1148],{"class":60},[28,59213,81],{"class":38},[28,59215,59216],{"class":30,"line":1941},[28,59217,2449],{"class":38},[28,59219,59220,59222,59224],{"class":30,"line":1955},[28,59221,52673],{"class":38},[28,59223,52069],{"class":51556},[28,59225,51563],{"class":38},[28,59227,59228,59230,59232],{"class":30,"line":1960},[28,59229,52041],{"class":38},[28,59231,52056],{"class":51556},[28,59233,51563],{"class":38},[28,59235,59236],{"class":30,"line":1989},[28,59237,2662],{"emptyLinePlaceholder":336},[28,59239,59240,59242,59244],{"class":30,"line":1994},[28,59241,52041],{"class":38},[28,59243,50891],{"class":51556},[28,59245,51563],{"class":38},[14,59247,59248],{},"只要点击就输出结果为22,前边11被覆盖了",[18,59250,59252],{"className":50889,"code":59251,"language":50891,"meta":23,"style":23},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[25,59253,59254,59259,59264,59268,59273,59278],{"__ignoreMap":23},[28,59255,59256],{"class":30,"line":31},[28,59257,59258],{"class":38},"  btn.addEventListener('click', function () {\n",[28,59260,59261],{"class":30,"line":48},[28,59262,59263],{"class":38},"      alert(11)\n",[28,59265,59266],{"class":30,"line":84},[28,59267,33717],{"class":38},[28,59269,59270],{"class":30,"line":91},[28,59271,59272],{"class":38},"    btn.addEventListener('click', function () {\n",[28,59274,59275],{"class":30,"line":97},[28,59276,59277],{"class":38},"      alert(22)\n",[28,59279,59280],{"class":30,"line":103},[28,59281,33717],{"class":38},[14,59283,59284],{},"点击第一次输出11,第二次点击为22",[380,59286,59288],{"id":59287},"_325-事件类型","3.2.5 事件类型",[14,59290,59291],{},[1727,59292],{"alt":23,"src":59293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22260,59295,59297],{"id":59296},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59299,59300],{},"补充知识:",[14,59302,59303],{},"轮播图自动播放模块,可以使用",[14,59305,59306],{},"let timerId = setInterval(function () {",[14,59308,59309],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59311,59312],{},"用js方法模拟进行点击事件,click必须加()",[14,59314,59315],{},"next.click()",[14,59317,59318],{},"}, 1000)",[14,59320,59321],{},[1727,59322],{"alt":23,"src":59323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[18,59325,59327],{"className":53323,"code":59326,"language":53325,"meta":23,"style":23},"\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",[25,59328,59329,59333,59343,59357,59361,59369,59384,59404,59424,59437,59445,59450,59455,59459,59463,59468,59473,59478,59483,59487,59491,59496,59501,59506,59510,59514,59519,59523,59528,59533,59537,59541,59546,59551,59556,59561,59566,59570,59574,59579,59584,59589,59594,59599,59603,59607,59612,59617,59622,59627,59632,59637,59642,59647,59652,59657,59661,59665,59670,59675,59679,59683,59688,59693,59697,59702,59707,59711,59715,59720,59724,59729,59734,59738,59743,59747,59751,59756,59761,59766,59771,59776,59781,59786,59790,59794,59798,59803,59808,59813,59818,59822,59830,59838,59842,59850,59865,59879,59900,59908,59922,59935,59950,59969,59981,59993,60005,60017,60029,60041,60053,60061,60076,60100,60124,60132,60140,60148,60156,60161,60166,60171,60176,60181,60186,60191,60196,60201,60206,60210,60215,60220,60225,60230,60235,60240,60245,60250,60255,60259,60264,60269,60274,60279,60284,60289,60294,60299,60304,60309,60314,60319,60323,60327,60332,60337,60342,60346,60351,60356,60361,60366,60371,60375,60380,60384,60388,60392,60396,60400,60404,60409,60414,60419,60424,60429,60434,60439,60444,60449,60453,60457,60462,60467,60472,60477,60482,60486,60491,60496,60501,60506,60511,60516,60520,60524,60529,60533,60538,60542,60547,60552,60557,60562,60567,60572,60576,60584,60592,60596],{"__ignoreMap":23},[28,59330,59331],{"class":30,"line":31},[28,59332,2662],{"emptyLinePlaceholder":336},[28,59334,59335,59337,59339,59341],{"class":30,"line":48},[28,59336,51553],{"class":38},[28,59338,51557],{"class":34},[28,59340,51560],{"class":60},[28,59342,51563],{"class":38},[28,59344,59345,59347,59349,59351,59353,59355],{"class":30,"line":84},[28,59346,1307],{"class":38},[28,59348,50891],{"class":51556},[28,59350,51572],{"class":2225},[28,59352,54],{"class":38},[28,59354,51577],{"class":127},[28,59356,51563],{"class":38},[28,59358,59359],{"class":30,"line":91},[28,59360,2662],{"emptyLinePlaceholder":336},[28,59362,59363,59365,59367],{"class":30,"line":97},[28,59364,1307],{"class":38},[28,59366,51590],{"class":51556},[28,59368,51563],{"class":38},[28,59370,59371,59373,59375,59377,59379,59381],{"class":30,"line":103},[28,59372,52400],{"class":38},[28,59374,51600],{"class":51556},[28,59376,51603],{"class":2225},[28,59378,54],{"class":38},[28,59380,51608],{"class":127},[28,59382,59383],{"class":38}," \u002F>\n",[28,59385,59386,59388,59390,59392,59394,59396,59398,59400,59402],{"class":30,"line":109},[28,59387,52400],{"class":38},[28,59389,51600],{"class":51556},[28,59391,51619],{"class":2225},[28,59393,54],{"class":38},[28,59395,51624],{"class":127},[28,59397,51627],{"class":2225},[28,59399,54],{"class":38},[28,59401,51632],{"class":127},[28,59403,59383],{"class":38},[28,59405,59406,59408,59410,59412,59414,59416,59418,59420,59422],{"class":30,"line":118},[28,59407,52400],{"class":38},[28,59409,51600],{"class":51556},[28,59411,15182],{"class":2225},[28,59413,54],{"class":38},[28,59415,51647],{"class":127},[28,59417,51627],{"class":2225},[28,59419,54],{"class":38},[28,59421,51654],{"class":127},[28,59423,59383],{"class":38},[28,59425,59426,59428,59430,59433,59435],{"class":30,"line":124},[28,59427,52400],{"class":38},[28,59429,51663],{"class":51556},[28,59431,59432],{"class":38},">轮播图点击切换\u003C\u002F",[28,59434,51663],{"class":51556},[28,59436,51563],{"class":38},[28,59438,59439,59441,59443],{"class":30,"line":131},[28,59440,52400],{"class":38},[28,59442,328],{"class":51556},[28,59444,51563],{"class":38},[28,59446,59447],{"class":30,"line":137},[28,59448,59449],{"class":38},"    * {\n",[28,59451,59452],{"class":30,"line":143},[28,59453,59454],{"class":38},"      box-sizing: border-box;\n",[28,59456,59457],{"class":30,"line":149},[28,59458,2449],{"class":38},[28,59460,59461],{"class":30,"line":1890},[28,59462,2662],{"emptyLinePlaceholder":336},[28,59464,59465],{"class":30,"line":1904},[28,59466,59467],{"class":38},"    .slider {\n",[28,59469,59470],{"class":30,"line":1909},[28,59471,59472],{"class":38},"      width: 560px;\n",[28,59474,59475],{"class":30,"line":1915},[28,59476,59477],{"class":38},"      height: 400px;\n",[28,59479,59480],{"class":30,"line":1936},[28,59481,59482],{"class":38},"      overflow: hidden;\n",[28,59484,59485],{"class":30,"line":1941},[28,59486,2449],{"class":38},[28,59488,59489],{"class":30,"line":1955},[28,59490,2662],{"emptyLinePlaceholder":336},[28,59492,59493],{"class":30,"line":1960},[28,59494,59495],{"class":38},"    .slider-wrapper {\n",[28,59497,59498],{"class":30,"line":1989},[28,59499,59500],{"class":38},"      width: 100%;\n",[28,59502,59503],{"class":30,"line":1994},[28,59504,59505],{"class":38},"      height: 320px;\n",[28,59507,59508],{"class":30,"line":2011},[28,59509,2449],{"class":38},[28,59511,59512],{"class":30,"line":2016},[28,59513,2662],{"emptyLinePlaceholder":336},[28,59515,59516],{"class":30,"line":2021},[28,59517,59518],{"class":38},"    .slider-wrapper img {\n",[28,59520,59521],{"class":30,"line":2026},[28,59522,59500],{"class":38},[28,59524,59525],{"class":30,"line":2040},[28,59526,59527],{"class":38},"      height: 100%;\n",[28,59529,59530],{"class":30,"line":2045},[28,59531,59532],{"class":38},"      display: block;\n",[28,59534,59535],{"class":30,"line":2839},[28,59536,2449],{"class":38},[28,59538,59539],{"class":30,"line":2853},[28,59540,2662],{"emptyLinePlaceholder":336},[28,59542,59543],{"class":30,"line":2861},[28,59544,59545],{"class":38},"    .slider-footer {\n",[28,59547,59548],{"class":30,"line":2866},[28,59549,59550],{"class":38},"      height: 80px;\n",[28,59552,59553],{"class":30,"line":2872},[28,59554,59555],{"class":38},"      background-color: rgb(100, 67, 68);\n",[28,59557,59558],{"class":30,"line":2878},[28,59559,59560],{"class":38},"      padding: 12px 12px 0 12px;\n",[28,59562,59563],{"class":30,"line":2883},[28,59564,59565],{"class":38},"      position: relative;\n",[28,59567,59568],{"class":30,"line":8210},[28,59569,2449],{"class":38},[28,59571,59572],{"class":30,"line":8234},[28,59573,2662],{"emptyLinePlaceholder":336},[28,59575,59576],{"class":30,"line":8239},[28,59577,59578],{"class":38},"    .slider-footer .toggle {\n",[28,59580,59581],{"class":30,"line":8245},[28,59582,59583],{"class":38},"      position: absolute;\n",[28,59585,59586],{"class":30,"line":8272},[28,59587,59588],{"class":38},"      right: 0;\n",[28,59590,59591],{"class":30,"line":8277},[28,59592,59593],{"class":38},"      top: 12px;\n",[28,59595,59596],{"class":30,"line":8283},[28,59597,59598],{"class":38},"      display: flex;\n",[28,59600,59601],{"class":30,"line":8295},[28,59602,2449],{"class":38},[28,59604,59605],{"class":30,"line":8307},[28,59606,2662],{"emptyLinePlaceholder":336},[28,59608,59609],{"class":30,"line":8319},[28,59610,59611],{"class":38},"    .slider-footer .toggle button {\n",[28,59613,59614],{"class":30,"line":9978},[28,59615,59616],{"class":38},"      margin-right: 12px;\n",[28,59618,59619],{"class":30,"line":10003},[28,59620,59621],{"class":38},"      width: 28px;\n",[28,59623,59624],{"class":30,"line":10026},[28,59625,59626],{"class":38},"      height: 28px;\n",[28,59628,59629],{"class":30,"line":10050},[28,59630,59631],{"class":38},"      appearance: none;\n",[28,59633,59634],{"class":30,"line":10055},[28,59635,59636],{"class":38},"      border: none;\n",[28,59638,59639],{"class":30,"line":10060},[28,59640,59641],{"class":38},"      background: rgba(255, 255, 255, 0.1);\n",[28,59643,59644],{"class":30,"line":10065},[28,59645,59646],{"class":38},"      color: #fff;\n",[28,59648,59649],{"class":30,"line":10074},[28,59650,59651],{"class":38},"      border-radius: 4px;\n",[28,59653,59654],{"class":30,"line":10079},[28,59655,59656],{"class":38},"      cursor: pointer;\n",[28,59658,59659],{"class":30,"line":10085},[28,59660,2449],{"class":38},[28,59662,59663],{"class":30,"line":10106},[28,59664,2662],{"emptyLinePlaceholder":336},[28,59666,59667],{"class":30,"line":10112},[28,59668,59669],{"class":38},"    .slider-footer .toggle button:hover {\n",[28,59671,59672],{"class":30,"line":10126},[28,59673,59674],{"class":38},"      background: rgba(255, 255, 255, 0.2);\n",[28,59676,59677],{"class":30,"line":10132},[28,59678,2449],{"class":38},[28,59680,59681],{"class":30,"line":10159},[28,59682,2662],{"emptyLinePlaceholder":336},[28,59684,59685],{"class":30,"line":10168},[28,59686,59687],{"class":38},"    .slider-footer p {\n",[28,59689,59690],{"class":30,"line":10174},[28,59691,59692],{"class":38},"      margin: 0;\n",[28,59694,59695],{"class":30,"line":10182},[28,59696,59646],{"class":38},[28,59698,59699],{"class":30,"line":10187},[28,59700,59701],{"class":38},"      font-size: 18px;\n",[28,59703,59704],{"class":30,"line":16866},[28,59705,59706],{"class":38},"      margin-bottom: 10px;\n",[28,59708,59709],{"class":30,"line":16872},[28,59710,2449],{"class":38},[28,59712,59713],{"class":30,"line":16895},[28,59714,2662],{"emptyLinePlaceholder":336},[28,59716,59717],{"class":30,"line":16901},[28,59718,59719],{"class":38},"    .slider-indicator {\n",[28,59721,59722],{"class":30,"line":16924},[28,59723,59692],{"class":38},[28,59725,59726],{"class":30,"line":16938},[28,59727,59728],{"class":38},"      padding: 0;\n",[28,59730,59731],{"class":30,"line":16958},[28,59732,59733],{"class":38},"      list-style: none;\n",[28,59735,59736],{"class":30,"line":16964},[28,59737,59598],{"class":38},[28,59739,59740],{"class":30,"line":16975},[28,59741,59742],{"class":38},"      align-items: center;\n",[28,59744,59745],{"class":30,"line":16998},[28,59746,2449],{"class":38},[28,59748,59749],{"class":30,"line":17020},[28,59750,2662],{"emptyLinePlaceholder":336},[28,59752,59753],{"class":30,"line":17025},[28,59754,59755],{"class":38},"    .slider-indicator li {\n",[28,59757,59758],{"class":30,"line":17031},[28,59759,59760],{"class":38},"      width: 8px;\n",[28,59762,59763],{"class":30,"line":17045},[28,59764,59765],{"class":38},"      height: 8px;\n",[28,59767,59768],{"class":30,"line":17058},[28,59769,59770],{"class":38},"      margin: 4px;\n",[28,59772,59773],{"class":30,"line":17063},[28,59774,59775],{"class":38},"      border-radius: 50%;\n",[28,59777,59778],{"class":30,"line":17077},[28,59779,59780],{"class":38},"      background: #fff;\n",[28,59782,59783],{"class":30,"line":17082},[28,59784,59785],{"class":38},"      opacity: 0.4;\n",[28,59787,59788],{"class":30,"line":17088},[28,59789,59656],{"class":38},[28,59791,59792],{"class":30,"line":17093},[28,59793,2449],{"class":38},[28,59795,59796],{"class":30,"line":17107},[28,59797,2662],{"emptyLinePlaceholder":336},[28,59799,59800],{"class":30,"line":17112},[28,59801,59802],{"class":38},"    .slider-indicator li.active {\n",[28,59804,59805],{"class":30,"line":17117},[28,59806,59807],{"class":38},"      width: 12px;\n",[28,59809,59810],{"class":30,"line":17131},[28,59811,59812],{"class":38},"      height: 12px;\n",[28,59814,59815],{"class":30,"line":17143},[28,59816,59817],{"class":38},"      opacity: 1;\n",[28,59819,59820],{"class":30,"line":17148},[28,59821,2449],{"class":38},[28,59823,59824,59826,59828],{"class":30,"line":17161},[28,59825,52673],{"class":38},[28,59827,328],{"class":51556},[28,59829,51563],{"class":38},[28,59831,59832,59834,59836],{"class":30,"line":17166},[28,59833,52041],{"class":38},[28,59835,51590],{"class":51556},[28,59837,51563],{"class":38},[28,59839,59840],{"class":30,"line":17171},[28,59841,2662],{"emptyLinePlaceholder":336},[28,59843,59844,59846,59848],{"class":30,"line":17176},[28,59845,1307],{"class":38},[28,59847,52056],{"class":51556},[28,59849,51563],{"class":38},[28,59851,59852,59854,59856,59858,59860,59863],{"class":30,"line":17189},[28,59853,52400],{"class":38},[28,59855,51867],{"class":51556},[28,59857,53742],{"class":2225},[28,59859,54],{"class":38},[28,59861,59862],{"class":127},"\"slider\"",[28,59864,51563],{"class":38},[28,59866,59867,59869,59871,59873,59875,59877],{"class":30,"line":17194},[28,59868,51597],{"class":38},[28,59870,51867],{"class":51556},[28,59872,53742],{"class":2225},[28,59874,54],{"class":38},[28,59876,55483],{"class":127},[28,59878,51563],{"class":38},[28,59880,59881,59883,59885,59887,59889,59892,59894,59896,59898],{"class":30,"line":32889},[28,59882,55490],{"class":38},[28,59884,1727],{"class":51556},[28,59886,55495],{"class":2225},[28,59888,54],{"class":38},[28,59890,59891],{"class":127},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,59893,55503],{"class":2225},[28,59895,54],{"class":38},[28,59897,7914],{"class":127},[28,59899,59383],{"class":38},[28,59901,59902,59904,59906],{"class":30,"line":32895},[28,59903,52032],{"class":38},[28,59905,51867],{"class":51556},[28,59907,51563],{"class":38},[28,59909,59910,59912,59914,59916,59918,59920],{"class":30,"line":32901},[28,59911,51597],{"class":38},[28,59913,51867],{"class":51556},[28,59915,53742],{"class":2225},[28,59917,54],{"class":38},[28,59919,55530],{"class":127},[28,59921,51563],{"class":38},[28,59923,59924,59926,59928,59931,59933],{"class":30,"line":32907},[28,59925,55490],{"class":38},[28,59927,14],{"class":51556},[28,59929,59930],{"class":38},">对人类来说会不会太超前了？\u003C\u002F",[28,59932,14],{"class":51556},[28,59934,51563],{"class":38},[28,59936,59937,59939,59941,59943,59945,59948],{"class":30,"line":32913},[28,59938,55490],{"class":38},[28,59940,1404],{"class":51556},[28,59942,53742],{"class":2225},[28,59944,54],{"class":38},[28,59946,59947],{"class":127},"\"slider-indicator\"",[28,59949,51563],{"class":38},[28,59951,59952,59954,59956,59958,59960,59963,59965,59967],{"class":30,"line":32924},[28,59953,55558],{"class":38},[28,59955,366],{"class":51556},[28,59957,53742],{"class":2225},[28,59959,54],{"class":38},[28,59961,59962],{"class":127},"\"active\"",[28,59964,55570],{"class":38},[28,59966,366],{"class":51556},[28,59968,51563],{"class":38},[28,59970,59971,59973,59975,59977,59979],{"class":30,"line":32930},[28,59972,55558],{"class":38},[28,59974,366],{"class":51556},[28,59976,55570],{"class":38},[28,59978,366],{"class":51556},[28,59980,51563],{"class":38},[28,59982,59983,59985,59987,59989,59991],{"class":30,"line":32950},[28,59984,55558],{"class":38},[28,59986,366],{"class":51556},[28,59988,55570],{"class":38},[28,59990,366],{"class":51556},[28,59992,51563],{"class":38},[28,59994,59995,59997,59999,60001,60003],{"class":30,"line":32956},[28,59996,55558],{"class":38},[28,59998,366],{"class":51556},[28,60000,55570],{"class":38},[28,60002,366],{"class":51556},[28,60004,51563],{"class":38},[28,60006,60007,60009,60011,60013,60015],{"class":30,"line":32967},[28,60008,55558],{"class":38},[28,60010,366],{"class":51556},[28,60012,55570],{"class":38},[28,60014,366],{"class":51556},[28,60016,51563],{"class":38},[28,60018,60019,60021,60023,60025,60027],{"class":30,"line":32973},[28,60020,55558],{"class":38},[28,60022,366],{"class":51556},[28,60024,55570],{"class":38},[28,60026,366],{"class":51556},[28,60028,51563],{"class":38},[28,60030,60031,60033,60035,60037,60039],{"class":30,"line":32979},[28,60032,55558],{"class":38},[28,60034,366],{"class":51556},[28,60036,55570],{"class":38},[28,60038,366],{"class":51556},[28,60040,51563],{"class":38},[28,60042,60043,60045,60047,60049,60051],{"class":30,"line":32985},[28,60044,55558],{"class":38},[28,60046,366],{"class":51556},[28,60048,55570],{"class":38},[28,60050,366],{"class":51556},[28,60052,51563],{"class":38},[28,60054,60055,60057,60059],{"class":30,"line":32991},[28,60056,55663],{"class":38},[28,60058,1404],{"class":51556},[28,60060,51563],{"class":38},[28,60062,60063,60065,60067,60069,60071,60074],{"class":30,"line":32997},[28,60064,55490],{"class":38},[28,60066,51867],{"class":51556},[28,60068,53742],{"class":2225},[28,60070,54],{"class":38},[28,60072,60073],{"class":127},"\"toggle\"",[28,60075,51563],{"class":38},[28,60077,60078,60080,60082,60084,60086,60089,60091,60094,60096,60098],{"class":30,"line":33003},[28,60079,55558],{"class":38},[28,60081,54143],{"class":51556},[28,60083,53742],{"class":2225},[28,60085,54],{"class":38},[28,60087,60088],{"class":127},"\"prev\"",[28,60090,1357],{"class":38},[28,60092,60093],{"class":60},"&lt;",[28,60095,52041],{"class":38},[28,60097,54143],{"class":51556},[28,60099,51563],{"class":38},[28,60101,60102,60104,60106,60108,60110,60113,60115,60118,60120,60122],{"class":30,"line":33009},[28,60103,55558],{"class":38},[28,60105,54143],{"class":51556},[28,60107,53742],{"class":2225},[28,60109,54],{"class":38},[28,60111,60112],{"class":127},"\"next\"",[28,60114,1357],{"class":38},[28,60116,60117],{"class":60},"&gt;",[28,60119,52041],{"class":38},[28,60121,54143],{"class":51556},[28,60123,51563],{"class":38},[28,60125,60126,60128,60130],{"class":30,"line":33029},[28,60127,55663],{"class":38},[28,60129,51867],{"class":51556},[28,60131,51563],{"class":38},[28,60133,60134,60136,60138],{"class":30,"line":33035},[28,60135,52032],{"class":38},[28,60137,51867],{"class":51556},[28,60139,51563],{"class":38},[28,60141,60142,60144,60146],{"class":30,"line":33051},[28,60143,52673],{"class":38},[28,60145,51867],{"class":51556},[28,60147,51563],{"class":38},[28,60149,60150,60152,60154],{"class":30,"line":33057},[28,60151,52400],{"class":38},[28,60153,52069],{"class":51556},[28,60155,51563],{"class":38},[28,60157,60158],{"class":30,"line":33071},[28,60159,60160],{"class":38},"    \u002F\u002F 1. 初始数据\n",[28,60162,60163],{"class":30,"line":33077},[28,60164,60165],{"class":38},"    const data = [\n",[28,60167,60168],{"class":30,"line":33092},[28,60169,60170],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[28,60172,60173],{"class":30,"line":33098},[28,60174,60175],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[28,60177,60178],{"class":30,"line":33107},[28,60179,60180],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[28,60182,60183],{"class":30,"line":33113},[28,60184,60185],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[28,60187,60188],{"class":30,"line":33122},[28,60189,60190],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[28,60192,60193],{"class":30,"line":33128},[28,60194,60195],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[28,60197,60198],{"class":30,"line":33134},[28,60199,60200],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[28,60202,60203],{"class":30,"line":33143},[28,60204,60205],{"class":38},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[28,60207,60208],{"class":30,"line":33149},[28,60209,53365],{"class":38},[28,60211,60212],{"class":30,"line":33160},[28,60213,60214],{"class":38},"    \u002F\u002F 获取元素\n",[28,60216,60217],{"class":30,"line":33166},[28,60218,60219],{"class":38},"    const img = document.querySelector('.slider-wrapper img')\n",[28,60221,60222],{"class":30,"line":33185},[28,60223,60224],{"class":38},"    const p = document.querySelector('.slider-footer p')\n",[28,60226,60227],{"class":30,"line":33191},[28,60228,60229],{"class":38},"    const footer = document.querySelector('.slider-footer')\n",[28,60231,60232],{"class":30,"line":33202},[28,60233,60234],{"class":38},"    \u002F\u002F 1. 右按钮业务\n",[28,60236,60237],{"class":30,"line":33208},[28,60238,60239],{"class":38},"    \u002F\u002F 1.1 获取右侧按钮 \n",[28,60241,60242],{"class":30,"line":33228},[28,60243,60244],{"class":38},"    const next = document.querySelector('.next')\n",[28,60246,60247],{"class":30,"line":33244},[28,60248,60249],{"class":38},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[28,60251,60252],{"class":30,"line":33250},[28,60253,60254],{"class":38},"    \u002F\u002F 1.2 注册点击事件\n",[28,60256,60257],{"class":30,"line":33264},[28,60258,2662],{"emptyLinePlaceholder":336},[28,60260,60261],{"class":30,"line":33270},[28,60262,60263],{"class":38},"    next.addEventListener('click', function () {\n",[28,60265,60266],{"class":30,"line":33276},[28,60267,60268],{"class":38},"      \u002F\u002F console.log(11)\n",[28,60270,60271],{"class":30,"line":33287},[28,60272,60273],{"class":38},"      i++\n",[28,60275,60276],{"class":30,"line":33293},[28,60277,60278],{"class":38},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[28,60280,60281],{"class":30,"line":33299},[28,60282,60283],{"class":38},"      \u002F\u002F if (i >= 8) {\n",[28,60285,60286],{"class":30,"line":33309},[28,60287,60288],{"class":38},"      \u002F\u002F   i = 0\n",[28,60290,60291],{"class":30,"line":33315},[28,60292,60293],{"class":38},"      \u002F\u002F }\n",[28,60295,60296],{"class":30,"line":33326},[28,60297,60298],{"class":38},"      i = i >= data.length ? 0 : i\n",[28,60300,60301],{"class":30,"line":33332},[28,60302,60303],{"class":38},"      \u002F\u002F 1.3 得到对应的对象\n",[28,60305,60306],{"class":30,"line":33342},[28,60307,60308],{"class":38},"      \u002F\u002F console.log(data[i])\n",[28,60310,60311],{"class":30,"line":33347},[28,60312,60313],{"class":38},"      \u002F\u002F 调用函数\n",[28,60315,60316],{"class":30,"line":33353},[28,60317,60318],{"class":38},"      toggle()\n",[28,60320,60321],{"class":30,"line":33402},[28,60322,33717],{"class":38},[28,60324,60325],{"class":30,"line":33449},[28,60326,2662],{"emptyLinePlaceholder":336},[28,60328,60329],{"class":30,"line":33454},[28,60330,60331],{"class":38},"    \u002F\u002F 2. 左侧按钮业务\n",[28,60333,60334],{"class":30,"line":33460},[28,60335,60336],{"class":38},"    \u002F\u002F 2.1 获取左侧按钮 \n",[28,60338,60339],{"class":30,"line":33479},[28,60340,60341],{"class":38},"    const prev = document.querySelector('.prev')\n",[28,60343,60344],{"class":30,"line":33485},[28,60345,60254],{"class":38},[28,60347,60348],{"class":30,"line":33505},[28,60349,60350],{"class":38},"    prev.addEventListener('click', function () {\n",[28,60352,60353],{"class":30,"line":33511},[28,60354,60355],{"class":38},"      i--\n",[28,60357,60358],{"class":30,"line":33517},[28,60359,60360],{"class":38},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[28,60362,60363],{"class":30,"line":33527},[28,60364,60365],{"class":38},"      \u002F\u002F if (i \u003C 0) {\n",[28,60367,60368],{"class":30,"line":33532},[28,60369,60370],{"class":38},"      \u002F\u002F   i = 7\n",[28,60372,60373],{"class":30,"line":33538},[28,60374,60293],{"class":38},[28,60376,60377],{"class":30,"line":33554},[28,60378,60379],{"class":38},"      i = i \u003C 0 ? data.length - 1 : i\n",[28,60381,60382],{"class":30,"line":33599},[28,60383,60303],{"class":38},[28,60385,60386],{"class":30,"line":33605},[28,60387,60308],{"class":38},[28,60389,60390],{"class":30,"line":33611},[28,60391,60313],{"class":38},[28,60393,60394],{"class":30,"line":33617},[28,60395,60318],{"class":38},[28,60397,60398],{"class":30,"line":33628},[28,60399,33717],{"class":38},[28,60401,60402],{"class":30,"line":33634},[28,60403,2662],{"emptyLinePlaceholder":336},[28,60405,60406],{"class":30,"line":33640},[28,60407,60408],{"class":38},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[28,60410,60411],{"class":30,"line":33646},[28,60412,60413],{"class":38},"    function toggle() {\n",[28,60415,60416],{"class":30,"line":33664},[28,60417,60418],{"class":38},"      \u002F\u002F 1.4 渲染对应的数据\n",[28,60420,60421],{"class":30,"line":33678},[28,60422,60423],{"class":38},"      img.src = data[i].url\n",[28,60425,60426],{"class":30,"line":33687},[28,60427,60428],{"class":38},"      p.innerHTML = data[i].title\n",[28,60430,60431],{"class":30,"line":33696},[28,60432,60433],{"class":38},"      footer.style.backgroundColor = data[i].color\n",[28,60435,60436],{"class":30,"line":33705},[28,60437,60438],{"class":38},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[28,60440,60441],{"class":30,"line":33714},[28,60442,60443],{"class":38},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[28,60445,60446],{"class":30,"line":33720},[28,60447,60448],{"class":38},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[28,60450,60451],{"class":30,"line":33726},[28,60452,2449],{"class":38},[28,60454,60455],{"class":30,"line":33734},[28,60456,2662],{"emptyLinePlaceholder":336},[28,60458,60459],{"class":30,"line":33739},[28,60460,60461],{"class":38},"    \u002F\u002F 3. 自动播放模块\n",[28,60463,60464],{"class":30,"line":33745},[28,60465,60466],{"class":38},"    let timerId = setInterval(function () {\n",[28,60468,60469],{"class":30,"line":33756},[28,60470,60471],{"class":38},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60473,60474],{"class":30,"line":33762},[28,60475,60476],{"class":38},"      next.click()\n",[28,60478,60479],{"class":30,"line":33782},[28,60480,60481],{"class":38},"    }, 1000)\n",[28,60483,60484],{"class":30,"line":33788},[28,60485,2662],{"emptyLinePlaceholder":336},[28,60487,60488],{"class":30,"line":33794},[28,60489,60490],{"class":38},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[28,60492,60493],{"class":30,"line":33800},[28,60494,60495],{"class":38},"    const slider = document.querySelector('.slider')\n",[28,60497,60498],{"class":30,"line":33817},[28,60499,60500],{"class":38},"    \u002F\u002F 注册事件\n",[28,60502,60503],{"class":30,"line":33823},[28,60504,60505],{"class":38},"    slider.addEventListener('mouseenter', function () {\n",[28,60507,60508],{"class":30,"line":33829},[28,60509,60510],{"class":38},"      \u002F\u002F 停止定时器\n",[28,60512,60513],{"class":30,"line":33835},[28,60514,60515],{"class":38},"      clearInterval(timerId)\n",[28,60517,60518],{"class":30,"line":33841},[28,60519,33717],{"class":38},[28,60521,60522],{"class":30,"line":33847},[28,60523,2662],{"emptyLinePlaceholder":336},[28,60525,60526],{"class":30,"line":33874},[28,60527,60528],{"class":38},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[28,60530,60531],{"class":30,"line":33898},[28,60532,60500],{"class":38},[28,60534,60535],{"class":30,"line":33904},[28,60536,60537],{"class":38},"    slider.addEventListener('mouseleave', function () {\n",[28,60539,60540],{"class":30,"line":33910},[28,60541,60510],{"class":38},[28,60543,60544],{"class":30,"line":33916},[28,60545,60546],{"class":38},"      if (timerId) clearInterval(timerId)\n",[28,60548,60549],{"class":30,"line":33927},[28,60550,60551],{"class":38},"      \u002F\u002F 开启定时器\n",[28,60553,60554],{"class":30,"line":33938},[28,60555,60556],{"class":38},"      timerId = setInterval(function () {\n",[28,60558,60559],{"class":30,"line":33944},[28,60560,60561],{"class":38},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60563,60564],{"class":30,"line":33961},[28,60565,60566],{"class":38},"        next.click()\n",[28,60568,60569],{"class":30,"line":33984},[28,60570,60571],{"class":38},"      }, 1000)\n",[28,60573,60574],{"class":30,"line":34007},[28,60575,33717],{"class":38},[28,60577,60578,60580,60582],{"class":30,"line":34013},[28,60579,52673],{"class":38},[28,60581,52069],{"class":51556},[28,60583,51563],{"class":38},[28,60585,60586,60588,60590],{"class":30,"line":34018},[28,60587,52041],{"class":38},[28,60589,52056],{"class":51556},[28,60591,51563],{"class":38},[28,60593,60594],{"class":30,"line":34027},[28,60595,2662],{"emptyLinePlaceholder":336},[28,60597,60598,60600,60602],{"class":30,"line":34037},[28,60599,52041],{"class":38},[28,60601,50891],{"class":51556},[28,60603,51563],{"class":38},[22260,60605,60607],{"id":60606},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60609,60610],{},"小米搜索框案例：",[18,60612,60614],{"className":50889,"code":60613,"language":50891,"meta":23,"style":23},"\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",[25,60615,60616,60626,60640,60644,60652,60666,60686,60706,60718,60726,60732,60742,60752,60764,60768,60772,60779,60783,60794,60798,60802,60809,60820,60833,60847,60851,60855,60864,60876,60888,60902,60915,60928,60946,60957,60961,60965,60974,60991,60995,60999,61006,61016,61026,61037,61050,61062,61078,61089,61101,61105,61109,61117,61128,61145,61157,61169,61180,61184,61188,61199,61210,61214,61222,61226,61234,61238,61246,61261,61284,61299,61330,61357,61384,61411,61438,61465,61492,61501,61509,61517,61522,61542,61562,61567,61572,61590,61595,61605,61610,61624,61629,61634,61651,61660,61672,61676,61684,61692,61696],{"__ignoreMap":23},[28,60617,60618,60620,60622,60624],{"class":30,"line":31},[28,60619,51553],{"class":38},[28,60621,51557],{"class":51556},[28,60623,51560],{"class":2225},[28,60625,51563],{"class":38},[28,60627,60628,60630,60632,60634,60636,60638],{"class":30,"line":48},[28,60629,1307],{"class":38},[28,60631,50891],{"class":51556},[28,60633,51572],{"class":2225},[28,60635,54],{"class":38},[28,60637,51577],{"class":127},[28,60639,51563],{"class":38},[28,60641,60642],{"class":30,"line":84},[28,60643,2662],{"emptyLinePlaceholder":336},[28,60645,60646,60648,60650],{"class":30,"line":91},[28,60647,1307],{"class":38},[28,60649,51590],{"class":51556},[28,60651,51563],{"class":38},[28,60653,60654,60656,60658,60660,60662,60664],{"class":30,"line":97},[28,60655,51597],{"class":38},[28,60657,51600],{"class":51556},[28,60659,51603],{"class":2225},[28,60661,54],{"class":38},[28,60663,51608],{"class":127},[28,60665,51563],{"class":38},[28,60667,60668,60670,60672,60674,60676,60678,60680,60682,60684],{"class":30,"line":103},[28,60669,51597],{"class":38},[28,60671,51600],{"class":51556},[28,60673,51619],{"class":2225},[28,60675,54],{"class":38},[28,60677,51624],{"class":127},[28,60679,51627],{"class":2225},[28,60681,54],{"class":38},[28,60683,51632],{"class":127},[28,60685,51563],{"class":38},[28,60687,60688,60690,60692,60694,60696,60698,60700,60702,60704],{"class":30,"line":109},[28,60689,51597],{"class":38},[28,60691,51600],{"class":51556},[28,60693,15182],{"class":2225},[28,60695,54],{"class":38},[28,60697,51647],{"class":127},[28,60699,51627],{"class":2225},[28,60701,54],{"class":38},[28,60703,51654],{"class":127},[28,60705,51563],{"class":38},[28,60707,60708,60710,60712,60714,60716],{"class":30,"line":118},[28,60709,51597],{"class":38},[28,60711,51663],{"class":51556},[28,60713,51666],{"class":38},[28,60715,51663],{"class":51556},[28,60717,51563],{"class":38},[28,60719,60720,60722,60724],{"class":30,"line":124},[28,60721,51597],{"class":38},[28,60723,328],{"class":51556},[28,60725,51563],{"class":38},[28,60727,60728,60730],{"class":30,"line":131},[28,60729,51683],{"class":51556},[28,60731,15834],{"class":38},[28,60733,60734,60736,60738,60740],{"class":30,"line":137},[28,60735,51690],{"class":60},[28,60737,51693],{"class":38},[28,60739,244],{"class":60},[28,60741,1558],{"class":38},[28,60743,60744,60746,60748,60750],{"class":30,"line":143},[28,60745,51702],{"class":60},[28,60747,51693],{"class":38},[28,60749,244],{"class":60},[28,60751,1558],{"class":38},[28,60753,60754,60757,60759,60762],{"class":30,"line":149},[28,60755,60756],{"class":60},"            box-sizing",[28,60758,51693],{"class":38},[28,60760,60761],{"class":60},"border-box",[28,60763,1558],{"class":38},[28,60765,60766],{"class":30,"line":1890},[28,60767,2791],{"class":38},[28,60769,60770],{"class":30,"line":1904},[28,60771,2662],{"emptyLinePlaceholder":336},[28,60773,60774,60777],{"class":30,"line":1909},[28,60775,60776],{"class":51556},"        ul",[28,60778,15834],{"class":38},[28,60780,60781],{"class":30,"line":1915},[28,60782,2662],{"emptyLinePlaceholder":336},[28,60784,60785,60788,60790,60792],{"class":30,"line":1936},[28,60786,60787],{"class":60},"            list-style",[28,60789,51693],{"class":38},[28,60791,54993],{"class":60},[28,60793,1558],{"class":38},[28,60795,60796],{"class":30,"line":1941},[28,60797,2791],{"class":38},[28,60799,60800],{"class":30,"line":1955},[28,60801,2662],{"emptyLinePlaceholder":336},[28,60803,60804,60807],{"class":30,"line":1960},[28,60805,60806],{"class":2225},"        .mi",[28,60808,15834],{"class":38},[28,60810,60811,60814,60816,60818],{"class":30,"line":1989},[28,60812,60813],{"class":60},"            position",[28,60815,51693],{"class":38},[28,60817,55020],{"class":60},[28,60819,1558],{"class":38},[28,60821,60822,60824,60826,60829,60831],{"class":30,"line":1994},[28,60823,51740],{"class":60},[28,60825,51693],{"class":38},[28,60827,60828],{"class":60},"223",[28,60830,51748],{"class":34},[28,60832,1558],{"class":38},[28,60834,60835,60837,60839,60841,60843,60845],{"class":30,"line":2011},[28,60836,51690],{"class":60},[28,60838,51693],{"class":38},[28,60840,713],{"class":60},[28,60842,51748],{"class":34},[28,60844,51812],{"class":60},[28,60846,1558],{"class":38},[28,60848,60849],{"class":30,"line":2016},[28,60850,2791],{"class":38},[28,60852,60853],{"class":30,"line":2021},[28,60854,2662],{"emptyLinePlaceholder":336},[28,60856,60857,60859,60862],{"class":30,"line":2026},[28,60858,60806],{"class":2225},[28,60860,60861],{"class":51556}," input",[28,60863,15834],{"class":38},[28,60865,60866,60868,60870,60872,60874],{"class":30,"line":2040},[28,60867,51740],{"class":60},[28,60869,51693],{"class":38},[28,60871,60828],{"class":60},[28,60873,51748],{"class":34},[28,60875,1558],{"class":38},[28,60877,60878,60880,60882,60884,60886],{"class":30,"line":2045},[28,60879,51755],{"class":60},[28,60881,51693],{"class":38},[28,60883,1005],{"class":60},[28,60885,51748],{"class":34},[28,60887,1558],{"class":38},[28,60889,60890,60892,60894,60896,60898,60900],{"class":30,"line":2839},[28,60891,51702],{"class":60},[28,60893,51693],{"class":38},[28,60895,244],{"class":60},[28,60897,2300],{"class":60},[28,60899,51748],{"class":34},[28,60901,1558],{"class":38},[28,60903,60904,60907,60909,60911,60913],{"class":30,"line":2853},[28,60905,60906],{"class":60},"            font-size",[28,60908,51693],{"class":38},[28,60910,947],{"class":60},[28,60912,51748],{"class":34},[28,60914,1558],{"class":38},[28,60916,60917,60920,60922,60924,60926],{"class":30,"line":2861},[28,60918,60919],{"class":60},"            line-height",[28,60921,51693],{"class":38},[28,60923,1005],{"class":60},[28,60925,51748],{"class":34},[28,60927,1558],{"class":38},[28,60929,60930,60933,60935,60937,60939,60941,60944],{"class":30,"line":2866},[28,60931,60932],{"class":60},"            border",[28,60934,51693],{"class":38},[28,60936,61],{"class":60},[28,60938,51748],{"class":34},[28,60940,51777],{"class":60},[28,60942,60943],{"class":60}," #e0e0e0",[28,60945,1558],{"class":38},[28,60947,60948,60951,60953,60955],{"class":30,"line":2872},[28,60949,60950],{"class":60},"            outline",[28,60952,51693],{"class":38},[28,60954,54993],{"class":60},[28,60956,1558],{"class":38},[28,60958,60959],{"class":30,"line":2878},[28,60960,2791],{"class":38},[28,60962,60963],{"class":30,"line":2883},[28,60964,2662],{"emptyLinePlaceholder":336},[28,60966,60967,60969,60972],{"class":30,"line":8210},[28,60968,60806],{"class":2225},[28,60970,60971],{"class":2225}," .search",[28,60973,15834],{"class":38},[28,60975,60976,60978,60980,60982,60984,60986,60989],{"class":30,"line":8234},[28,60977,60932],{"class":60},[28,60979,51693],{"class":38},[28,60981,61],{"class":60},[28,60983,51748],{"class":34},[28,60985,51777],{"class":60},[28,60987,60988],{"class":60}," #ff6700",[28,60990,1558],{"class":38},[28,60992,60993],{"class":30,"line":8239},[28,60994,2791],{"class":38},[28,60996,60997],{"class":30,"line":8245},[28,60998,2662],{"emptyLinePlaceholder":336},[28,61000,61001,61004],{"class":30,"line":8272},[28,61002,61003],{"class":2225},"        .result-list",[28,61005,15834],{"class":38},[28,61007,61008,61010,61012,61014],{"class":30,"line":8277},[28,61009,51728],{"class":60},[28,61011,51693],{"class":38},[28,61013,54993],{"class":60},[28,61015,1558],{"class":38},[28,61017,61018,61020,61022,61024],{"class":30,"line":8283},[28,61019,60813],{"class":60},[28,61021,51693],{"class":38},[28,61023,55087],{"class":60},[28,61025,1558],{"class":38},[28,61027,61028,61031,61033,61035],{"class":30,"line":8295},[28,61029,61030],{"class":60},"            left",[28,61032,51693],{"class":38},[28,61034,244],{"class":60},[28,61036,1558],{"class":38},[28,61038,61039,61042,61044,61046,61048],{"class":30,"line":8307},[28,61040,61041],{"class":60},"            top",[28,61043,51693],{"class":38},[28,61045,1005],{"class":60},[28,61047,51748],{"class":34},[28,61049,1558],{"class":38},[28,61051,61052,61054,61056,61058,61060],{"class":30,"line":8319},[28,61053,51740],{"class":60},[28,61055,51693],{"class":38},[28,61057,60828],{"class":60},[28,61059,51748],{"class":34},[28,61061,1558],{"class":38},[28,61063,61064,61066,61068,61070,61072,61074,61076],{"class":30,"line":9978},[28,61065,60932],{"class":60},[28,61067,51693],{"class":38},[28,61069,61],{"class":60},[28,61071,51748],{"class":34},[28,61073,51777],{"class":60},[28,61075,60988],{"class":60},[28,61077,1558],{"class":38},[28,61079,61080,61083,61085,61087],{"class":30,"line":10003},[28,61081,61082],{"class":60},"            border-top",[28,61084,51693],{"class":38},[28,61086,244],{"class":60},[28,61088,1558],{"class":38},[28,61090,61091,61094,61096,61099],{"class":30,"line":10026},[28,61092,61093],{"class":60},"            background",[28,61095,51693],{"class":38},[28,61097,61098],{"class":60},"#fff",[28,61100,1558],{"class":38},[28,61102,61103],{"class":30,"line":10050},[28,61104,2791],{"class":38},[28,61106,61107],{"class":30,"line":10055},[28,61108,2662],{"emptyLinePlaceholder":336},[28,61110,61111,61113,61115],{"class":30,"line":10060},[28,61112,61003],{"class":2225},[28,61114,1663],{"class":51556},[28,61116,15834],{"class":38},[28,61118,61119,61121,61123,61126],{"class":30,"line":10065},[28,61120,51728],{"class":60},[28,61122,51693],{"class":38},[28,61124,61125],{"class":60},"block",[28,61127,1558],{"class":38},[28,61129,61130,61132,61134,61136,61138,61141,61143],{"class":30,"line":10074},[28,61131,51702],{"class":60},[28,61133,51693],{"class":38},[28,61135,206],{"class":60},[28,61137,51748],{"class":34},[28,61139,61140],{"class":60}," 15",[28,61142,51748],{"class":34},[28,61144,1558],{"class":38},[28,61146,61147,61149,61151,61153,61155],{"class":30,"line":10079},[28,61148,60906],{"class":60},[28,61150,51693],{"class":38},[28,61152,897],{"class":60},[28,61154,51748],{"class":34},[28,61156,1558],{"class":38},[28,61158,61159,61162,61164,61167],{"class":30,"line":10085},[28,61160,61161],{"class":60},"            color",[28,61163,51693],{"class":38},[28,61165,61166],{"class":60},"#424242",[28,61168,1558],{"class":38},[28,61170,61171,61174,61176,61178],{"class":30,"line":10106},[28,61172,61173],{"class":60},"            text-decoration",[28,61175,51693],{"class":38},[28,61177,54993],{"class":60},[28,61179,1558],{"class":38},[28,61181,61182],{"class":30,"line":10112},[28,61183,2791],{"class":38},[28,61185,61186],{"class":30,"line":10126},[28,61187,2662],{"emptyLinePlaceholder":336},[28,61189,61190,61192,61194,61197],{"class":30,"line":10132},[28,61191,61003],{"class":2225},[28,61193,1663],{"class":51556},[28,61195,61196],{"class":2225},":hover",[28,61198,15834],{"class":38},[28,61200,61201,61203,61205,61208],{"class":30,"line":10159},[28,61202,51896],{"class":60},[28,61204,51693],{"class":38},[28,61206,61207],{"class":60},"#eee",[28,61209,1558],{"class":38},[28,61211,61212],{"class":30,"line":10168},[28,61213,2791],{"class":38},[28,61215,61216,61218,61220],{"class":30,"line":10174},[28,61217,52032],{"class":38},[28,61219,328],{"class":51556},[28,61221,51563],{"class":38},[28,61223,61224],{"class":30,"line":10182},[28,61225,2662],{"emptyLinePlaceholder":336},[28,61227,61228,61230,61232],{"class":30,"line":10187},[28,61229,52041],{"class":38},[28,61231,51590],{"class":51556},[28,61233,51563],{"class":38},[28,61235,61236],{"class":30,"line":16866},[28,61237,2662],{"emptyLinePlaceholder":336},[28,61239,61240,61242,61244],{"class":30,"line":16872},[28,61241,1307],{"class":38},[28,61243,52056],{"class":51556},[28,61245,51563],{"class":38},[28,61247,61248,61250,61252,61254,61256,61259],{"class":30,"line":16895},[28,61249,51597],{"class":38},[28,61251,51867],{"class":51556},[28,61253,53742],{"class":2225},[28,61255,54],{"class":38},[28,61257,61258],{"class":127},"\"mi\"",[28,61260,51563],{"class":38},[28,61262,61263,61265,61267,61269,61271,61274,61277,61279,61282],{"class":30,"line":16901},[28,61264,55558],{"class":38},[28,61266,54077],{"class":51556},[28,61268,54080],{"class":2225},[28,61270,54],{"class":38},[28,61272,61273],{"class":127},"\"search\"",[28,61275,61276],{"class":2225}," placeholder",[28,61278,54],{"class":38},[28,61280,61281],{"class":127},"\"小米笔记本\"",[28,61283,51563],{"class":38},[28,61285,61286,61288,61290,61292,61294,61297],{"class":30,"line":16924},[28,61287,55558],{"class":38},[28,61289,1404],{"class":51556},[28,61291,53742],{"class":2225},[28,61293,54],{"class":38},[28,61295,61296],{"class":127},"\"result-list\"",[28,61298,51563],{"class":38},[28,61300,61301,61304,61306,61309,61311,61314,61316,61319,61322,61324,61326,61328],{"class":30,"line":16938},[28,61302,61303],{"class":38},"            \u003C",[28,61305,366],{"class":51556},[28,61307,61308],{"class":38},">\u003C",[28,61310,51],{"class":51556},[28,61312,61313],{"class":2225}," href",[28,61315,54],{"class":38},[28,61317,61318],{"class":127},"\"#\"",[28,61320,61321],{"class":38},">全部商品\u003C\u002F",[28,61323,51],{"class":51556},[28,61325,55570],{"class":38},[28,61327,366],{"class":51556},[28,61329,51563],{"class":38},[28,61331,61332,61334,61336,61338,61340,61342,61344,61346,61349,61351,61353,61355],{"class":30,"line":16958},[28,61333,61303],{"class":38},[28,61335,366],{"class":51556},[28,61337,61308],{"class":38},[28,61339,51],{"class":51556},[28,61341,61313],{"class":2225},[28,61343,54],{"class":38},[28,61345,61318],{"class":127},[28,61347,61348],{"class":38},">小米11\u003C\u002F",[28,61350,51],{"class":51556},[28,61352,55570],{"class":38},[28,61354,366],{"class":51556},[28,61356,51563],{"class":38},[28,61358,61359,61361,61363,61365,61367,61369,61371,61373,61376,61378,61380,61382],{"class":30,"line":16964},[28,61360,61303],{"class":38},[28,61362,366],{"class":51556},[28,61364,61308],{"class":38},[28,61366,51],{"class":51556},[28,61368,61313],{"class":2225},[28,61370,54],{"class":38},[28,61372,61318],{"class":127},[28,61374,61375],{"class":38},">小米10S\u003C\u002F",[28,61377,51],{"class":51556},[28,61379,55570],{"class":38},[28,61381,366],{"class":51556},[28,61383,51563],{"class":38},[28,61385,61386,61388,61390,61392,61394,61396,61398,61400,61403,61405,61407,61409],{"class":30,"line":16975},[28,61387,61303],{"class":38},[28,61389,366],{"class":51556},[28,61391,61308],{"class":38},[28,61393,51],{"class":51556},[28,61395,61313],{"class":2225},[28,61397,54],{"class":38},[28,61399,61318],{"class":127},[28,61401,61402],{"class":38},">小米笔记本\u003C\u002F",[28,61404,51],{"class":51556},[28,61406,55570],{"class":38},[28,61408,366],{"class":51556},[28,61410,51563],{"class":38},[28,61412,61413,61415,61417,61419,61421,61423,61425,61427,61430,61432,61434,61436],{"class":30,"line":16998},[28,61414,61303],{"class":38},[28,61416,366],{"class":51556},[28,61418,61308],{"class":38},[28,61420,51],{"class":51556},[28,61422,61313],{"class":2225},[28,61424,54],{"class":38},[28,61426,61318],{"class":127},[28,61428,61429],{"class":38},">小米手机\u003C\u002F",[28,61431,51],{"class":51556},[28,61433,55570],{"class":38},[28,61435,366],{"class":51556},[28,61437,51563],{"class":38},[28,61439,61440,61442,61444,61446,61448,61450,61452,61454,61457,61459,61461,61463],{"class":30,"line":17020},[28,61441,61303],{"class":38},[28,61443,366],{"class":51556},[28,61445,61308],{"class":38},[28,61447,51],{"class":51556},[28,61449,61313],{"class":2225},[28,61451,54],{"class":38},[28,61453,61318],{"class":127},[28,61455,61456],{"class":38},">黑鲨4\u003C\u002F",[28,61458,51],{"class":51556},[28,61460,55570],{"class":38},[28,61462,366],{"class":51556},[28,61464,51563],{"class":38},[28,61466,61467,61469,61471,61473,61475,61477,61479,61481,61484,61486,61488,61490],{"class":30,"line":17025},[28,61468,61303],{"class":38},[28,61470,366],{"class":51556},[28,61472,61308],{"class":38},[28,61474,51],{"class":51556},[28,61476,61313],{"class":2225},[28,61478,54],{"class":38},[28,61480,61318],{"class":127},[28,61482,61483],{"class":38},">空调\u003C\u002F",[28,61485,51],{"class":51556},[28,61487,55570],{"class":38},[28,61489,366],{"class":51556},[28,61491,51563],{"class":38},[28,61493,61494,61497,61499],{"class":30,"line":17031},[28,61495,61496],{"class":38},"        \u003C\u002F",[28,61498,1404],{"class":51556},[28,61500,51563],{"class":38},[28,61502,61503,61505,61507],{"class":30,"line":17045},[28,61504,52032],{"class":38},[28,61506,51867],{"class":51556},[28,61508,51563],{"class":38},[28,61510,61511,61513,61515],{"class":30,"line":17058},[28,61512,51597],{"class":38},[28,61514,52069],{"class":51556},[28,61516,51563],{"class":38},[28,61518,61519],{"class":30,"line":17063},[28,61520,61521],{"class":87},"        \u002F\u002F 1. 获取元素\n",[28,61523,61524,61527,61529,61531,61533,61535,61537,61540],{"class":30,"line":17077},[28,61525,61526],{"class":34},"        const",[28,61528,60861],{"class":60},[28,61530,13826],{"class":34},[28,61532,54652],{"class":38},[28,61534,54655],{"class":2225},[28,61536,413],{"class":38},[28,61538,61539],{"class":127},"'[type=search]'",[28,61541,81],{"class":38},[28,61543,61544,61546,61549,61551,61553,61555,61557,61560],{"class":30,"line":17082},[28,61545,61526],{"class":34},[28,61547,61548],{"class":60}," ul",[28,61550,13826],{"class":34},[28,61552,54652],{"class":38},[28,61554,54655],{"class":2225},[28,61556,413],{"class":38},[28,61558,61559],{"class":127},"'.result-list'",[28,61561,81],{"class":38},[28,61563,61564],{"class":30,"line":17088},[28,61565,61566],{"class":87},"        \u002F\u002F console.log(input)\n",[28,61568,61569],{"class":30,"line":17093},[28,61570,61571],{"class":87},"        \u002F\u002F 2. 监听事件 获得焦点\n",[28,61573,61574,61577,61579,61581,61584,61586,61588],{"class":30,"line":17107},[28,61575,61576],{"class":38},"        input.",[28,61578,58069],{"class":2225},[28,61580,413],{"class":38},[28,61582,61583],{"class":127},"'focus'",[28,61585,12697],{"class":38},[28,61587,54705],{"class":34},[28,61589,54708],{"class":38},[28,61591,61592],{"class":30,"line":17112},[28,61593,61594],{"class":87},"            \u002F\u002F ul显示\n",[28,61596,61597,61600,61602],{"class":30,"line":17117},[28,61598,61599],{"class":38},"            ul.style.display ",[28,61601,54],{"class":34},[28,61603,61604],{"class":127}," 'block'\n",[28,61606,61607],{"class":30,"line":17131},[28,61608,61609],{"class":87},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[28,61611,61612,61615,61617,61619,61622],{"class":30,"line":17143},[28,61613,61614],{"class":38},"            input.classList.",[28,61616,5596],{"class":2225},[28,61618,413],{"class":38},[28,61620,61621],{"class":127},"'search'",[28,61623,81],{"class":38},[28,61625,61626],{"class":30,"line":17148},[28,61627,61628],{"class":38},"        })\n",[28,61630,61631],{"class":30,"line":17161},[28,61632,61633],{"class":87},"        \u002F\u002F 3. 监听事件 失去焦点\n",[28,61635,61636,61638,61640,61642,61645,61647,61649],{"class":30,"line":17166},[28,61637,61576],{"class":38},[28,61639,58069],{"class":2225},[28,61641,413],{"class":38},[28,61643,61644],{"class":127},"'blur'",[28,61646,12697],{"class":38},[28,61648,54705],{"class":34},[28,61650,54708],{"class":38},[28,61652,61653,61655,61657],{"class":30,"line":17171},[28,61654,61599],{"class":38},[28,61656,54],{"class":34},[28,61658,61659],{"class":127}," 'none'\n",[28,61661,61662,61664,61666,61668,61670],{"class":30,"line":17176},[28,61663,61614],{"class":38},[28,61665,57262],{"class":2225},[28,61667,413],{"class":38},[28,61669,61621],{"class":127},[28,61671,81],{"class":38},[28,61673,61674],{"class":30,"line":17189},[28,61675,61628],{"class":38},[28,61677,61678,61680,61682],{"class":30,"line":17194},[28,61679,52032],{"class":38},[28,61681,52069],{"class":51556},[28,61683,51563],{"class":38},[28,61685,61686,61688,61690],{"class":30,"line":32889},[28,61687,52041],{"class":38},[28,61689,52056],{"class":51556},[28,61691,51563],{"class":38},[28,61693,61694],{"class":30,"line":32895},[28,61695,2662],{"emptyLinePlaceholder":336},[28,61697,61698,61700,61702],{"class":30,"line":32901},[28,61699,52041],{"class":38},[28,61701,50891],{"class":51556},[28,61703,51563],{"class":38},[22260,61705,61707],{"id":61706},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61709,61710],{},"评论字数统计案例",[14,61712,61713],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61715,61716],{},"牢记focus伪类选择器",[51600,61718],{"charSet":61719},"UTF-8",[51600,61721],{"name":61722,"content":61723},"viewport","width=device-width, initial-scale=1.0",[51663,61725,61726],{},"Document",[328,61728,61729],{},"\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",[54077,61731],{"type":5449},[1404,61733,61734,61737],{},[366,61735,61736],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[366,61738,61739],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[18,61741,61743],{"className":50889,"code":61742,"language":50891,"meta":23,"style":23},"\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",[25,61744,61745,61755,61769,61773,61781,61795,61815,61835,61848,61856,61863,61876,61890,61900,61910,61914,61918,61925,61937,61949,61961,61973,62002,62015,62019,62023,62032,62043,62055,62066,62077,62089,62100,62112,62128,62140,62144,62148,62159,62170,62180,62192,62196,62200,62208,62219,62229,62240,62252,62265,62277,62289,62293,62297,62306,62318,62329,62342,62353,62367,62371,62375,62382,62394,62406,62416,62420,62424,62433,62445,62455,62459,62463,62474,62484,62503,62516,62520,62524,62534,62544,62548,62552,62563,62574,62586,62598,62602,62606,62617,62628,62642,62646,62650,62661,62671,62683,62687,62695,62703,62707,62715,62730,62749,62789,62802,62810,62824,62844,62852,62867,62890,62908,62923,62943,62963,62983,62991,62999,63007,63015,63035,63055,63060,63077,63086,63090,63095,63111,63119,63123,63128,63145,63150,63175,63179,63183,63188,63193,63201,63209,63213],{"__ignoreMap":23},[28,61746,61747,61749,61751,61753],{"class":30,"line":31},[28,61748,51553],{"class":38},[28,61750,51557],{"class":51556},[28,61752,51560],{"class":2225},[28,61754,51563],{"class":38},[28,61756,61757,61759,61761,61763,61765,61767],{"class":30,"line":48},[28,61758,1307],{"class":38},[28,61760,50891],{"class":51556},[28,61762,51572],{"class":2225},[28,61764,54],{"class":38},[28,61766,51577],{"class":127},[28,61768,51563],{"class":38},[28,61770,61771],{"class":30,"line":84},[28,61772,2662],{"emptyLinePlaceholder":336},[28,61774,61775,61777,61779],{"class":30,"line":91},[28,61776,1307],{"class":38},[28,61778,51590],{"class":51556},[28,61780,51563],{"class":38},[28,61782,61783,61785,61787,61789,61791,61793],{"class":30,"line":97},[28,61784,52400],{"class":38},[28,61786,51600],{"class":51556},[28,61788,51603],{"class":2225},[28,61790,54],{"class":38},[28,61792,51608],{"class":127},[28,61794,51563],{"class":38},[28,61796,61797,61799,61801,61803,61805,61807,61809,61811,61813],{"class":30,"line":103},[28,61798,52400],{"class":38},[28,61800,51600],{"class":51556},[28,61802,51619],{"class":2225},[28,61804,54],{"class":38},[28,61806,51624],{"class":127},[28,61808,51627],{"class":2225},[28,61810,54],{"class":38},[28,61812,51632],{"class":127},[28,61814,51563],{"class":38},[28,61816,61817,61819,61821,61823,61825,61827,61829,61831,61833],{"class":30,"line":109},[28,61818,52400],{"class":38},[28,61820,51600],{"class":51556},[28,61822,15182],{"class":2225},[28,61824,54],{"class":38},[28,61826,51647],{"class":127},[28,61828,51627],{"class":2225},[28,61830,54],{"class":38},[28,61832,51654],{"class":127},[28,61834,51563],{"class":38},[28,61836,61837,61839,61841,61844,61846],{"class":30,"line":118},[28,61838,52400],{"class":38},[28,61840,51663],{"class":51556},[28,61842,61843],{"class":38},">评论回车发布\u003C\u002F",[28,61845,51663],{"class":51556},[28,61847,51563],{"class":38},[28,61849,61850,61852,61854],{"class":30,"line":124},[28,61851,52400],{"class":38},[28,61853,328],{"class":51556},[28,61855,51563],{"class":38},[28,61857,61858,61861],{"class":30,"line":131},[28,61859,61860],{"class":2225},"    .wrapper",[28,61862,15834],{"class":38},[28,61864,61865,61868,61870,61872,61874],{"class":30,"line":137},[28,61866,61867],{"class":60},"      min-width",[28,61869,51693],{"class":38},[28,61871,4249],{"class":60},[28,61873,51748],{"class":34},[28,61875,1558],{"class":38},[28,61877,61878,61881,61883,61886,61888],{"class":30,"line":143},[28,61879,61880],{"class":60},"      max-width",[28,61882,51693],{"class":38},[28,61884,61885],{"class":60},"800",[28,61887,51748],{"class":34},[28,61889,1558],{"class":38},[28,61891,61892,61894,61896,61898],{"class":30,"line":149},[28,61893,55265],{"class":60},[28,61895,51693],{"class":38},[28,61897,51733],{"class":60},[28,61899,1558],{"class":38},[28,61901,61902,61904,61906,61908],{"class":30,"line":1890},[28,61903,55276],{"class":60},[28,61905,51693],{"class":38},[28,61907,51836],{"class":60},[28,61909,1558],{"class":38},[28,61911,61912],{"class":30,"line":1904},[28,61913,2449],{"class":38},[28,61915,61916],{"class":30,"line":1909},[28,61917,2662],{"emptyLinePlaceholder":336},[28,61919,61920,61923],{"class":30,"line":1915},[28,61921,61922],{"class":2225},"    .avatar",[28,61924,15834],{"class":38},[28,61926,61927,61929,61931,61933,61935],{"class":30,"line":1936},[28,61928,55027],{"class":60},[28,61930,51693],{"class":38},[28,61932,1005],{"class":60},[28,61934,51748],{"class":34},[28,61936,1558],{"class":38},[28,61938,61939,61941,61943,61945,61947],{"class":30,"line":1941},[28,61940,55041],{"class":60},[28,61942,51693],{"class":38},[28,61944,1005],{"class":60},[28,61946,51748],{"class":34},[28,61948,1558],{"class":38},[28,61950,61951,61953,61955,61957,61959],{"class":30,"line":1955},[28,61952,55390],{"class":60},[28,61954,51693],{"class":38},[28,61956,1054],{"class":60},[28,61958,729],{"class":34},[28,61960,1558],{"class":38},[28,61962,61963,61966,61968,61971],{"class":30,"line":1960},[28,61964,61965],{"class":60},"      overflow",[28,61967,51693],{"class":38},[28,61969,61970],{"class":60},"hidden",[28,61972,1558],{"class":38},[28,61974,61975,61978,61980,61983,61985,61988,61990,61993,61995,61997,62000],{"class":30,"line":1989},[28,61976,61977],{"class":60},"      background",[28,61979,51693],{"class":38},[28,61981,61982],{"class":60},"url",[28,61984,413],{"class":38},[28,61986,61987],{"class":5478},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[28,61989,13976],{"class":38},[28,61991,61992],{"class":60},"no-repeat",[28,61994,17406],{"class":60},[28,61996,25241],{"class":38},[28,61998,61999],{"class":60},"cover",[28,62001,1558],{"class":38},[28,62003,62004,62007,62009,62011,62013],{"class":30,"line":1994},[28,62005,62006],{"class":60},"      margin-right",[28,62008,51693],{"class":38},[28,62010,1098],{"class":60},[28,62012,51748],{"class":34},[28,62014,1558],{"class":38},[28,62016,62017],{"class":30,"line":2011},[28,62018,2449],{"class":38},[28,62020,62021],{"class":30,"line":2016},[28,62022,2662],{"emptyLinePlaceholder":336},[28,62024,62025,62027,62030],{"class":30,"line":2021},[28,62026,61860],{"class":2225},[28,62028,62029],{"class":51556}," textarea",[28,62031,15834],{"class":38},[28,62033,62034,62037,62039,62041],{"class":30,"line":2026},[28,62035,62036],{"class":60},"      outline",[28,62038,51693],{"class":38},[28,62040,54993],{"class":60},[28,62042,1558],{"class":38},[28,62044,62045,62048,62050,62053],{"class":30,"line":2040},[28,62046,62047],{"class":60},"      border-color",[28,62049,51693],{"class":38},[28,62051,62052],{"class":60},"transparent",[28,62054,1558],{"class":38},[28,62056,62057,62060,62062,62064],{"class":30,"line":2045},[28,62058,62059],{"class":60},"      resize",[28,62061,51693],{"class":38},[28,62063,54993],{"class":60},[28,62065,1558],{"class":38},[28,62067,62068,62070,62072,62075],{"class":30,"line":2839},[28,62069,61977],{"class":60},[28,62071,51693],{"class":38},[28,62073,62074],{"class":60},"#f5f5f5",[28,62076,1558],{"class":38},[28,62078,62079,62081,62083,62085,62087],{"class":30,"line":2853},[28,62080,55390],{"class":60},[28,62082,51693],{"class":38},[28,62084,73],{"class":60},[28,62086,51748],{"class":34},[28,62088,1558],{"class":38},[28,62090,62091,62094,62096,62098],{"class":30,"line":2861},[28,62092,62093],{"class":60},"      flex",[28,62095,51693],{"class":38},[28,62097,61],{"class":60},[28,62099,1558],{"class":38},[28,62101,62102,62104,62106,62108,62110],{"class":30,"line":2866},[28,62103,54951],{"class":60},[28,62105,51693],{"class":38},[28,62107,845],{"class":60},[28,62109,51748],{"class":34},[28,62111,1558],{"class":38},[28,62113,62114,62117,62119,62121,62124,62126],{"class":30,"line":2872},[28,62115,62116],{"class":60},"      transition",[28,62118,51693],{"class":38},[28,62120,28384],{"class":60},[28,62122,62123],{"class":60}," 0.5",[28,62125,1093],{"class":34},[28,62127,1558],{"class":38},[28,62129,62130,62132,62134,62136,62138],{"class":30,"line":2878},[28,62131,55041],{"class":60},[28,62133,51693],{"class":38},[28,62135,1348],{"class":60},[28,62137,51748],{"class":34},[28,62139,1558],{"class":38},[28,62141,62142],{"class":30,"line":2883},[28,62143,2449],{"class":38},[28,62145,62146],{"class":30,"line":8210},[28,62147,2662],{"emptyLinePlaceholder":336},[28,62149,62150,62152,62154,62157],{"class":30,"line":8234},[28,62151,61860],{"class":2225},[28,62153,62029],{"class":51556},[28,62155,62156],{"class":2225},":focus",[28,62158,15834],{"class":38},[28,62160,62161,62163,62165,62168],{"class":30,"line":8239},[28,62162,62047],{"class":60},[28,62164,51693],{"class":38},[28,62166,62167],{"class":60},"#e4e4e4",[28,62169,1558],{"class":38},[28,62171,62172,62174,62176,62178],{"class":30,"line":8245},[28,62173,61977],{"class":60},[28,62175,51693],{"class":38},[28,62177,61098],{"class":60},[28,62179,1558],{"class":38},[28,62181,62182,62184,62186,62188,62190],{"class":30,"line":8272},[28,62183,55041],{"class":60},[28,62185,51693],{"class":38},[28,62187,1054],{"class":60},[28,62189,51748],{"class":34},[28,62191,1558],{"class":38},[28,62193,62194],{"class":30,"line":8277},[28,62195,2449],{"class":38},[28,62197,62198],{"class":30,"line":8283},[28,62199,2662],{"emptyLinePlaceholder":336},[28,62201,62202,62204,62206],{"class":30,"line":8295},[28,62203,61860],{"class":2225},[28,62205,57723],{"class":51556},[28,62207,15834],{"class":38},[28,62209,62210,62212,62214,62217],{"class":30,"line":8307},[28,62211,61977],{"class":60},[28,62213,51693],{"class":38},[28,62215,62216],{"class":60},"#00aeec",[28,62218,1558],{"class":38},[28,62220,62221,62223,62225,62227],{"class":30,"line":8319},[28,62222,57672],{"class":60},[28,62224,51693],{"class":38},[28,62226,61098],{"class":60},[28,62228,1558],{"class":38},[28,62230,62231,62234,62236,62238],{"class":30,"line":9978},[28,62232,62233],{"class":60},"      border",[28,62235,51693],{"class":38},[28,62237,54993],{"class":60},[28,62239,1558],{"class":38},[28,62241,62242,62244,62246,62248,62250],{"class":30,"line":10003},[28,62243,55390],{"class":60},[28,62245,51693],{"class":38},[28,62247,73],{"class":60},[28,62249,51748],{"class":34},[28,62251,1558],{"class":38},[28,62253,62254,62257,62259,62261,62263],{"class":30,"line":10026},[28,62255,62256],{"class":60},"      margin-left",[28,62258,51693],{"class":38},[28,62260,845],{"class":60},[28,62262,51748],{"class":34},[28,62264,1558],{"class":38},[28,62266,62267,62269,62271,62273,62275],{"class":30,"line":10050},[28,62268,55027],{"class":60},[28,62270,51693],{"class":38},[28,62272,756],{"class":60},[28,62274,51748],{"class":34},[28,62276,1558],{"class":38},[28,62278,62279,62282,62284,62287],{"class":30,"line":10055},[28,62280,62281],{"class":60},"      cursor",[28,62283,51693],{"class":38},[28,62285,62286],{"class":60},"pointer",[28,62288,1558],{"class":38},[28,62290,62291],{"class":30,"line":10060},[28,62292,2449],{"class":38},[28,62294,62295],{"class":30,"line":10065},[28,62296,2662],{"emptyLinePlaceholder":336},[28,62298,62299,62301,62304],{"class":30,"line":10074},[28,62300,61860],{"class":2225},[28,62302,62303],{"class":2225}," .total",[28,62305,15834],{"class":38},[28,62307,62308,62310,62312,62314,62316],{"class":30,"line":10079},[28,62309,62006],{"class":60},[28,62311,51693],{"class":38},[28,62313,1010],{"class":60},[28,62315,51748],{"class":34},[28,62317,1558],{"class":38},[28,62319,62320,62322,62324,62327],{"class":30,"line":10085},[28,62321,57672],{"class":60},[28,62323,51693],{"class":38},[28,62325,62326],{"class":60},"#999",[28,62328,1558],{"class":38},[28,62330,62331,62334,62336,62338,62340],{"class":30,"line":10106},[28,62332,62333],{"class":60},"      margin-top",[28,62335,51693],{"class":38},[28,62337,721],{"class":60},[28,62339,51748],{"class":34},[28,62341,1558],{"class":38},[28,62343,62344,62347,62349,62351],{"class":30,"line":10112},[28,62345,62346],{"class":60},"      opacity",[28,62348,51693],{"class":38},[28,62350,244],{"class":60},[28,62352,1558],{"class":38},[28,62354,62355,62357,62359,62361,62363,62365],{"class":30,"line":10126},[28,62356,62116],{"class":60},[28,62358,51693],{"class":38},[28,62360,28384],{"class":60},[28,62362,62123],{"class":60},[28,62364,1093],{"class":34},[28,62366,1558],{"class":38},[28,62368,62369],{"class":30,"line":10132},[28,62370,2449],{"class":38},[28,62372,62373],{"class":30,"line":10159},[28,62374,2662],{"emptyLinePlaceholder":336},[28,62376,62377,62380],{"class":30,"line":10168},[28,62378,62379],{"class":2225},"    .list",[28,62381,15834],{"class":38},[28,62383,62384,62386,62388,62390,62392],{"class":30,"line":10174},[28,62385,61867],{"class":60},[28,62387,51693],{"class":38},[28,62389,4249],{"class":60},[28,62391,51748],{"class":34},[28,62393,1558],{"class":38},[28,62395,62396,62398,62400,62402,62404],{"class":30,"line":10182},[28,62397,61880],{"class":60},[28,62399,51693],{"class":38},[28,62401,61885],{"class":60},[28,62403,51748],{"class":34},[28,62405,1558],{"class":38},[28,62407,62408,62410,62412,62414],{"class":30,"line":10187},[28,62409,55265],{"class":60},[28,62411,51693],{"class":38},[28,62413,51733],{"class":60},[28,62415,1558],{"class":38},[28,62417,62418],{"class":30,"line":16866},[28,62419,2449],{"class":38},[28,62421,62422],{"class":30,"line":16872},[28,62423,2662],{"emptyLinePlaceholder":336},[28,62425,62426,62428,62431],{"class":30,"line":16895},[28,62427,62379],{"class":2225},[28,62429,62430],{"class":2225}," .item",[28,62432,15834],{"class":38},[28,62434,62435,62437,62439,62441,62443],{"class":30,"line":16901},[28,62436,55027],{"class":60},[28,62438,51693],{"class":38},[28,62440,713],{"class":60},[28,62442,729],{"class":34},[28,62444,1558],{"class":38},[28,62446,62447,62449,62451,62453],{"class":30,"line":16924},[28,62448,55265],{"class":60},[28,62450,51693],{"class":38},[28,62452,51733],{"class":60},[28,62454,1558],{"class":38},[28,62456,62457],{"class":30,"line":16938},[28,62458,2449],{"class":38},[28,62460,62461],{"class":30,"line":16958},[28,62462,2662],{"emptyLinePlaceholder":336},[28,62464,62465,62467,62469,62472],{"class":30,"line":16964},[28,62466,62379],{"class":2225},[28,62468,62430],{"class":2225},[28,62470,62471],{"class":2225}," .info",[28,62473,15834],{"class":38},[28,62475,62476,62478,62480,62482],{"class":30,"line":16975},[28,62477,62093],{"class":60},[28,62479,51693],{"class":38},[28,62481,61],{"class":60},[28,62483,1558],{"class":38},[28,62485,62486,62489,62491,62493,62495,62498,62501],{"class":30,"line":16998},[28,62487,62488],{"class":60},"      border-bottom",[28,62490,51693],{"class":38},[28,62492,61],{"class":60},[28,62494,51748],{"class":34},[28,62496,62497],{"class":60}," dashed",[28,62499,62500],{"class":60}," #e4e4e4",[28,62502,1558],{"class":38},[28,62504,62505,62508,62510,62512,62514],{"class":30,"line":17020},[28,62506,62507],{"class":60},"      padding-bottom",[28,62509,51693],{"class":38},[28,62511,845],{"class":60},[28,62513,51748],{"class":34},[28,62515,1558],{"class":38},[28,62517,62518],{"class":30,"line":17025},[28,62519,2449],{"class":38},[28,62521,62522],{"class":30,"line":17031},[28,62523,2662],{"emptyLinePlaceholder":336},[28,62525,62526,62528,62530,62532],{"class":30,"line":17045},[28,62527,62379],{"class":2225},[28,62529,62430],{"class":2225},[28,62531,7087],{"class":51556},[28,62533,15834],{"class":38},[28,62535,62536,62538,62540,62542],{"class":30,"line":17058},[28,62537,54962],{"class":60},[28,62539,51693],{"class":38},[28,62541,244],{"class":60},[28,62543,1558],{"class":38},[28,62545,62546],{"class":30,"line":17063},[28,62547,2449],{"class":38},[28,62549,62550],{"class":30,"line":17077},[28,62551,2662],{"emptyLinePlaceholder":336},[28,62553,62554,62556,62558,62561],{"class":30,"line":17082},[28,62555,62379],{"class":2225},[28,62557,62430],{"class":2225},[28,62559,62560],{"class":2225}," .name",[28,62562,15834],{"class":38},[28,62564,62565,62567,62569,62572],{"class":30,"line":17088},[28,62566,57672],{"class":60},[28,62568,51693],{"class":38},[28,62570,62571],{"class":60},"#FB7299",[28,62573,1558],{"class":38},[28,62575,62576,62578,62580,62582,62584],{"class":30,"line":17093},[28,62577,55178],{"class":60},[28,62579,51693],{"class":38},[28,62581,947],{"class":60},[28,62583,51748],{"class":34},[28,62585,1558],{"class":38},[28,62587,62588,62591,62593,62596],{"class":30,"line":17107},[28,62589,62590],{"class":60},"      font-weight",[28,62592,51693],{"class":38},[28,62594,62595],{"class":60},"bold",[28,62597,1558],{"class":38},[28,62599,62600],{"class":30,"line":17112},[28,62601,2449],{"class":38},[28,62603,62604],{"class":30,"line":17117},[28,62605,2662],{"emptyLinePlaceholder":336},[28,62607,62608,62610,62612,62615],{"class":30,"line":17131},[28,62609,62379],{"class":2225},[28,62611,62430],{"class":2225},[28,62613,62614],{"class":2225}," .text",[28,62616,15834],{"class":38},[28,62618,62619,62621,62623,62626],{"class":30,"line":17143},[28,62620,57672],{"class":60},[28,62622,51693],{"class":38},[28,62624,62625],{"class":60},"#333",[28,62627,1558],{"class":38},[28,62629,62630,62632,62634,62636,62638,62640],{"class":30,"line":17148},[28,62631,54951],{"class":60},[28,62633,51693],{"class":38},[28,62635,845],{"class":60},[28,62637,51748],{"class":34},[28,62639,4355],{"class":60},[28,62641,1558],{"class":38},[28,62643,62644],{"class":30,"line":17161},[28,62645,2449],{"class":38},[28,62647,62648],{"class":30,"line":17166},[28,62649,2662],{"emptyLinePlaceholder":336},[28,62651,62652,62654,62656,62659],{"class":30,"line":17171},[28,62653,62379],{"class":2225},[28,62655,62430],{"class":2225},[28,62657,62658],{"class":2225}," .time",[28,62660,15834],{"class":38},[28,62662,62663,62665,62667,62669],{"class":30,"line":17176},[28,62664,57672],{"class":60},[28,62666,51693],{"class":38},[28,62668,62326],{"class":60},[28,62670,1558],{"class":38},[28,62672,62673,62675,62677,62679,62681],{"class":30,"line":17189},[28,62674,55178],{"class":60},[28,62676,51693],{"class":38},[28,62678,897],{"class":60},[28,62680,51748],{"class":34},[28,62682,1558],{"class":38},[28,62684,62685],{"class":30,"line":17194},[28,62686,2449],{"class":38},[28,62688,62689,62691,62693],{"class":30,"line":32889},[28,62690,52673],{"class":38},[28,62692,328],{"class":51556},[28,62694,51563],{"class":38},[28,62696,62697,62699,62701],{"class":30,"line":32895},[28,62698,52041],{"class":38},[28,62700,51590],{"class":51556},[28,62702,51563],{"class":38},[28,62704,62705],{"class":30,"line":32901},[28,62706,2662],{"emptyLinePlaceholder":336},[28,62708,62709,62711,62713],{"class":30,"line":32907},[28,62710,1307],{"class":38},[28,62712,52056],{"class":51556},[28,62714,51563],{"class":38},[28,62716,62717,62719,62721,62723,62725,62728],{"class":30,"line":32913},[28,62718,52400],{"class":38},[28,62720,51867],{"class":51556},[28,62722,53742],{"class":2225},[28,62724,54],{"class":38},[28,62726,62727],{"class":127},"\"wrapper\"",[28,62729,51563],{"class":38},[28,62731,62732,62734,62736,62738,62740,62743,62745,62747],{"class":30,"line":32924},[28,62733,51597],{"class":38},[28,62735,840],{"class":51556},[28,62737,53742],{"class":2225},[28,62739,54],{"class":38},[28,62741,62742],{"class":127},"\"avatar\"",[28,62744,55570],{"class":38},[28,62746,840],{"class":51556},[28,62748,51563],{"class":38},[28,62750,62751,62753,62755,62757,62759,62762,62764,62766,62769,62771,62773,62775,62778,62780,62783,62785,62787],{"class":30,"line":32930},[28,62752,51597],{"class":38},[28,62754,54544],{"class":51556},[28,62756,15221],{"class":2225},[28,62758,54],{"class":38},[28,62760,62761],{"class":127},"\"tx\"",[28,62763,61276],{"class":2225},[28,62765,54],{"class":38},[28,62767,62768],{"class":127},"\"发一条友善的评论\"",[28,62770,54567],{"class":2225},[28,62772,54],{"class":38},[28,62774,3963],{"class":127},[28,62776,62777],{"class":2225}," maxlength",[28,62779,54],{"class":38},[28,62781,62782],{"class":127},"\"200\"",[28,62784,55570],{"class":38},[28,62786,54544],{"class":51556},[28,62788,51563],{"class":38},[28,62790,62791,62793,62795,62798,62800],{"class":30,"line":32950},[28,62792,51597],{"class":38},[28,62794,54143],{"class":51556},[28,62796,62797],{"class":38},">发布\u003C\u002F",[28,62799,54143],{"class":51556},[28,62801,51563],{"class":38},[28,62803,62804,62806,62808],{"class":30,"line":32956},[28,62805,52673],{"class":38},[28,62807,51867],{"class":51556},[28,62809,51563],{"class":38},[28,62811,62812,62814,62816,62818,62820,62822],{"class":30,"line":32967},[28,62813,52400],{"class":38},[28,62815,51867],{"class":51556},[28,62817,53742],{"class":2225},[28,62819,54],{"class":38},[28,62821,62727],{"class":127},[28,62823,51563],{"class":38},[28,62825,62826,62828,62830,62832,62834,62837,62840,62842],{"class":30,"line":32973},[28,62827,51597],{"class":38},[28,62829,28],{"class":51556},[28,62831,53742],{"class":2225},[28,62833,54],{"class":38},[28,62835,62836],{"class":127},"\"total\"",[28,62838,62839],{"class":38},">0\u002F200字\u003C\u002F",[28,62841,28],{"class":51556},[28,62843,51563],{"class":38},[28,62845,62846,62848,62850],{"class":30,"line":32979},[28,62847,52673],{"class":38},[28,62849,51867],{"class":51556},[28,62851,51563],{"class":38},[28,62853,62854,62856,62858,62860,62862,62865],{"class":30,"line":32985},[28,62855,52400],{"class":38},[28,62857,51867],{"class":51556},[28,62859,53742],{"class":2225},[28,62861,54],{"class":38},[28,62863,62864],{"class":127},"\"list\"",[28,62866,51563],{"class":38},[28,62868,62869,62871,62873,62875,62877,62880,62883,62885,62888],{"class":30,"line":32991},[28,62870,51597],{"class":38},[28,62872,51867],{"class":51556},[28,62874,53742],{"class":2225},[28,62876,54],{"class":38},[28,62878,62879],{"class":127},"\"item\"",[28,62881,62882],{"class":2225}," style",[28,62884,54],{"class":38},[28,62886,62887],{"class":127},"\"display: none;\"",[28,62889,51563],{"class":38},[28,62891,62892,62894,62896,62898,62900,62902,62904,62906],{"class":30,"line":32997},[28,62893,55490],{"class":38},[28,62895,840],{"class":51556},[28,62897,53742],{"class":2225},[28,62899,54],{"class":38},[28,62901,62742],{"class":127},[28,62903,55570],{"class":38},[28,62905,840],{"class":51556},[28,62907,51563],{"class":38},[28,62909,62910,62912,62914,62916,62918,62921],{"class":30,"line":33003},[28,62911,55490],{"class":38},[28,62913,51867],{"class":51556},[28,62915,53742],{"class":2225},[28,62917,54],{"class":38},[28,62919,62920],{"class":127},"\"info\"",[28,62922,51563],{"class":38},[28,62924,62925,62927,62929,62931,62933,62936,62939,62941],{"class":30,"line":33009},[28,62926,55558],{"class":38},[28,62928,14],{"class":51556},[28,62930,53742],{"class":2225},[28,62932,54],{"class":38},[28,62934,62935],{"class":127},"\"name\"",[28,62937,62938],{"class":38},">清风徐来\u003C\u002F",[28,62940,14],{"class":51556},[28,62942,51563],{"class":38},[28,62944,62945,62947,62949,62951,62953,62956,62959,62961],{"class":30,"line":33029},[28,62946,55558],{"class":38},[28,62948,14],{"class":51556},[28,62950,53742],{"class":2225},[28,62952,54],{"class":38},[28,62954,62955],{"class":127},"\"text\"",[28,62957,62958],{"class":38},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[28,62960,14],{"class":51556},[28,62962,51563],{"class":38},[28,62964,62965,62967,62969,62971,62973,62976,62979,62981],{"class":30,"line":33035},[28,62966,55558],{"class":38},[28,62968,14],{"class":51556},[28,62970,53742],{"class":2225},[28,62972,54],{"class":38},[28,62974,62975],{"class":127},"\"time\"",[28,62977,62978],{"class":38},">2022-10-10 20:29:21\u003C\u002F",[28,62980,14],{"class":51556},[28,62982,51563],{"class":38},[28,62984,62985,62987,62989],{"class":30,"line":33051},[28,62986,55663],{"class":38},[28,62988,51867],{"class":51556},[28,62990,51563],{"class":38},[28,62992,62993,62995,62997],{"class":30,"line":33057},[28,62994,52032],{"class":38},[28,62996,51867],{"class":51556},[28,62998,51563],{"class":38},[28,63000,63001,63003,63005],{"class":30,"line":33071},[28,63002,52673],{"class":38},[28,63004,51867],{"class":51556},[28,63006,51563],{"class":38},[28,63008,63009,63011,63013],{"class":30,"line":33077},[28,63010,52400],{"class":38},[28,63012,52069],{"class":51556},[28,63014,51563],{"class":38},[28,63016,63017,63019,63022,63024,63026,63028,63030,63033],{"class":30,"line":33092},[28,63018,11483],{"class":34},[28,63020,63021],{"class":60}," tx",[28,63023,13826],{"class":34},[28,63025,54652],{"class":38},[28,63027,54655],{"class":2225},[28,63029,413],{"class":38},[28,63031,63032],{"class":127},"'#tx'",[28,63034,81],{"class":38},[28,63036,63037,63039,63042,63044,63046,63048,63050,63053],{"class":30,"line":33098},[28,63038,11483],{"class":34},[28,63040,63041],{"class":60}," total",[28,63043,13826],{"class":34},[28,63045,54652],{"class":38},[28,63047,54655],{"class":2225},[28,63049,413],{"class":38},[28,63051,63052],{"class":127},"'.total'",[28,63054,81],{"class":38},[28,63056,63057],{"class":30,"line":33107},[28,63058,63059],{"class":87},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[28,63061,63062,63065,63067,63069,63071,63073,63075],{"class":30,"line":33113},[28,63063,63064],{"class":38},"    tx.",[28,63066,58069],{"class":2225},[28,63068,413],{"class":38},[28,63070,61583],{"class":127},[28,63072,12697],{"class":38},[28,63074,54705],{"class":34},[28,63076,54708],{"class":38},[28,63078,63079,63082,63084],{"class":30,"line":33122},[28,63080,63081],{"class":38},"      total.style.opacity ",[28,63083,54],{"class":34},[28,63085,55955],{"class":60},[28,63087,63088],{"class":30,"line":33128},[28,63089,33717],{"class":38},[28,63091,63092],{"class":30,"line":33134},[28,63093,63094],{"class":87},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[28,63096,63097,63099,63101,63103,63105,63107,63109],{"class":30,"line":33143},[28,63098,63064],{"class":38},[28,63100,58069],{"class":2225},[28,63102,413],{"class":38},[28,63104,61644],{"class":127},[28,63106,12697],{"class":38},[28,63108,54705],{"class":34},[28,63110,54708],{"class":38},[28,63112,63113,63115,63117],{"class":30,"line":33149},[28,63114,63081],{"class":38},[28,63116,54],{"class":34},[28,63118,47589],{"class":60},[28,63120,63121],{"class":30,"line":33160},[28,63122,33717],{"class":38},[28,63124,63125],{"class":30,"line":33166},[28,63126,63127],{"class":87},"    \u002F\u002F 3. 检测用户输入\n",[28,63129,63130,63132,63134,63136,63139,63141,63143],{"class":30,"line":33185},[28,63131,63064],{"class":38},[28,63133,58069],{"class":2225},[28,63135,413],{"class":38},[28,63137,63138],{"class":127},"'input'",[28,63140,12697],{"class":38},[28,63142,54705],{"class":34},[28,63144,54708],{"class":38},[28,63146,63147],{"class":30,"line":33191},[28,63148,63149],{"class":87},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[28,63151,63152,63155,63157,63160,63163,63165,63168,63170,63172],{"class":30,"line":33202},[28,63153,63154],{"class":38},"      total.innerHTML ",[28,63156,54],{"class":34},[28,63158,63159],{"class":127}," `${",[28,63161,63162],{"class":38},"tx",[28,63164,956],{"class":127},[28,63166,63167],{"class":38},"value",[28,63169,956],{"class":127},[28,63171,52224],{"class":60},[28,63173,63174],{"class":127},"}\u002F200字`\n",[28,63176,63177],{"class":30,"line":33208},[28,63178,33717],{"class":38},[28,63180,63181],{"class":30,"line":33228},[28,63182,2662],{"emptyLinePlaceholder":336},[28,63184,63185],{"class":30,"line":33244},[28,63186,63187],{"class":87},"    \u002F\u002F const str = 'andy'\n",[28,63189,63190],{"class":30,"line":33250},[28,63191,63192],{"class":87},"    \u002F\u002F console.log(str.length)\n",[28,63194,63195,63197,63199],{"class":30,"line":33264},[28,63196,52673],{"class":38},[28,63198,52069],{"class":51556},[28,63200,51563],{"class":38},[28,63202,63203,63205,63207],{"class":30,"line":33270},[28,63204,52041],{"class":38},[28,63206,52056],{"class":51556},[28,63208,51563],{"class":38},[28,63210,63211],{"class":30,"line":33276},[28,63212,2662],{"emptyLinePlaceholder":336},[28,63214,63215,63217,63219],{"class":30,"line":33287},[28,63216,52041],{"class":38},[28,63218,50891],{"class":51556},[28,63220,51563],{"class":38},[22260,63222,63224],{"id":63223},"_3254-change事件","3.2.5.4 change事件",[14,63226,63227],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63229,63230],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63232,63233],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[18,63235,63237],{"className":50889,"code":63236,"language":50891,"meta":23,"style":23},"\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",[25,63238,63239,63249,63263,63267,63275,63289,63309,63321,63329,63333,63341,63355,63363,63381,63399,63411,63415,63423,63431,63435],{"__ignoreMap":23},[28,63240,63241,63243,63245,63247],{"class":30,"line":31},[28,63242,51553],{"class":38},[28,63244,51557],{"class":51556},[28,63246,51560],{"class":2225},[28,63248,51563],{"class":38},[28,63250,63251,63253,63255,63257,63259,63261],{"class":30,"line":48},[28,63252,1307],{"class":38},[28,63254,50891],{"class":51556},[28,63256,51572],{"class":2225},[28,63258,54],{"class":38},[28,63260,51577],{"class":127},[28,63262,51563],{"class":38},[28,63264,63265],{"class":30,"line":84},[28,63266,2662],{"emptyLinePlaceholder":336},[28,63268,63269,63271,63273],{"class":30,"line":91},[28,63270,1307],{"class":38},[28,63272,51590],{"class":51556},[28,63274,51563],{"class":38},[28,63276,63277,63279,63281,63283,63285,63287],{"class":30,"line":97},[28,63278,52400],{"class":38},[28,63280,51600],{"class":51556},[28,63282,51603],{"class":2225},[28,63284,54],{"class":38},[28,63286,51608],{"class":127},[28,63288,51563],{"class":38},[28,63290,63291,63293,63295,63297,63299,63301,63303,63305,63307],{"class":30,"line":103},[28,63292,52400],{"class":38},[28,63294,51600],{"class":51556},[28,63296,15182],{"class":2225},[28,63298,54],{"class":38},[28,63300,51647],{"class":127},[28,63302,51627],{"class":2225},[28,63304,54],{"class":38},[28,63306,51654],{"class":127},[28,63308,51563],{"class":38},[28,63310,63311,63313,63315,63317,63319],{"class":30,"line":109},[28,63312,52400],{"class":38},[28,63314,51663],{"class":51556},[28,63316,51666],{"class":38},[28,63318,51663],{"class":51556},[28,63320,51563],{"class":38},[28,63322,63323,63325,63327],{"class":30,"line":118},[28,63324,52041],{"class":38},[28,63326,51590],{"class":51556},[28,63328,51563],{"class":38},[28,63330,63331],{"class":30,"line":124},[28,63332,2662],{"emptyLinePlaceholder":336},[28,63334,63335,63337,63339],{"class":30,"line":131},[28,63336,1307],{"class":38},[28,63338,52056],{"class":51556},[28,63340,51563],{"class":38},[28,63342,63343,63345,63347,63349,63351,63353],{"class":30,"line":137},[28,63344,52400],{"class":38},[28,63346,54077],{"class":51556},[28,63348,54080],{"class":2225},[28,63350,54],{"class":38},[28,63352,62955],{"class":127},[28,63354,51563],{"class":38},[28,63356,63357,63359,63361],{"class":30,"line":143},[28,63358,52400],{"class":38},[28,63360,52069],{"class":51556},[28,63362,51563],{"class":38},[28,63364,63365,63367,63369,63371,63373,63375,63377,63379],{"class":30,"line":149},[28,63366,11483],{"class":34},[28,63368,60861],{"class":60},[28,63370,13826],{"class":34},[28,63372,54652],{"class":38},[28,63374,54655],{"class":2225},[28,63376,413],{"class":38},[28,63378,63138],{"class":127},[28,63380,81],{"class":38},[28,63382,63383,63386,63388,63390,63393,63395,63397],{"class":30,"line":1890},[28,63384,63385],{"class":38},"    input.",[28,63387,58069],{"class":2225},[28,63389,413],{"class":38},[28,63391,63392],{"class":127},"'change'",[28,63394,12697],{"class":38},[28,63396,54705],{"class":34},[28,63398,54708],{"class":38},[28,63400,63401,63403,63405,63407,63409],{"class":30,"line":1904},[28,63402,58500],{"class":38},[28,63404,58503],{"class":2225},[28,63406,413],{"class":38},[28,63408,991],{"class":60},[28,63410,81],{"class":38},[28,63412,63413],{"class":30,"line":1909},[28,63414,33717],{"class":38},[28,63416,63417,63419,63421],{"class":30,"line":1915},[28,63418,52673],{"class":38},[28,63420,52069],{"class":51556},[28,63422,51563],{"class":38},[28,63424,63425,63427,63429],{"class":30,"line":1936},[28,63426,52041],{"class":38},[28,63428,52056],{"class":51556},[28,63430,51563],{"class":38},[28,63432,63433],{"class":30,"line":1941},[28,63434,2662],{"emptyLinePlaceholder":336},[28,63436,63437,63439,63441],{"class":30,"line":1955},[28,63438,52041],{"class":38},[28,63440,50891],{"class":51556},[28,63442,51563],{"class":38},[14,63444,63445],{},"总结：内容发生改变才回去触发",[380,63447,63449],{"id":63448},"_326-事件对象","3.2.6 事件对象",[22260,63451,63453],{"id":63452},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63455,63456],{},[1727,63457],{"alt":23,"src":63458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63460,63461],{},[1727,63462],{"alt":23,"src":63463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63465,63466],{},"点击一次，就输出了事件对象，它是个对象",[14,63468,63469],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63471,63472],{},[1727,63473],{"alt":23,"src":63474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22260,63476,63478],{"id":63477},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63480,63481],{},[1727,63482],{"alt":23,"src":63483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63485,63486],{},"实现按特殊字符才是实现打印输出效果：",[18,63488,63490],{"className":53323,"code":63489,"language":53325,"meta":23,"style":23},"\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",[25,63491,63492,63500,63505,63519,63527,63532,63537,63542,63547,63552,63557,63562,63567,63572,63576,63580,63588],{"__ignoreMap":23},[28,63493,63494,63496,63498],{"class":30,"line":31},[28,63495,1307],{"class":38},[28,63497,52056],{"class":51556},[28,63499,51563],{"class":38},[28,63501,63502],{"class":30,"line":48},[28,63503,63504],{"class":87},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[28,63506,63507,63509,63511,63513,63515,63517],{"class":30,"line":84},[28,63508,52400],{"class":38},[28,63510,54077],{"class":51556},[28,63512,54080],{"class":2225},[28,63514,54],{"class":38},[28,63516,62955],{"class":127},[28,63518,51563],{"class":38},[28,63520,63521,63523,63525],{"class":30,"line":91},[28,63522,52400],{"class":38},[28,63524,52069],{"class":51556},[28,63526,51563],{"class":38},[28,63528,63529],{"class":30,"line":97},[28,63530,63531],{"class":38},"    \u002F\u002F const btn = document.querySelector('button')\n",[28,63533,63534],{"class":30,"line":103},[28,63535,63536],{"class":38},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[28,63538,63539],{"class":30,"line":109},[28,63540,63541],{"class":38},"    \u002F\u002F   console.log(e);\n",[28,63543,63544],{"class":30,"line":118},[28,63545,63546],{"class":38},"    \u002F\u002F })\n",[28,63548,63549],{"class":30,"line":124},[28,63550,63551],{"class":38},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[28,63553,63554],{"class":30,"line":131},[28,63555,63556],{"class":38},"    const input = document.querySelector('input')\n",[28,63558,63559],{"class":30,"line":137},[28,63560,63561],{"class":38},"    input.addEventListener('keyup', function (e) {\n",[28,63563,63564],{"class":30,"line":143},[28,63565,63566],{"class":38},"      if (e.key === 'Enter') {\n",[28,63568,63569],{"class":30,"line":149},[28,63570,63571],{"class":38},"        console.log('我按下了回车键')\n",[28,63573,63574],{"class":30,"line":1890},[28,63575,52654],{"class":38},[28,63577,63578],{"class":30,"line":1904},[28,63579,33717],{"class":38},[28,63581,63582,63584,63586],{"class":30,"line":1909},[28,63583,52673],{"class":38},[28,63585,52069],{"class":51556},[28,63587,51563],{"class":38},[28,63589,63590,63592,63594],{"class":30,"line":1915},[28,63591,52041],{"class":38},[28,63593,52056],{"class":51556},[28,63595,51563],{"class":38},[22260,63597,63599],{"id":63598},"_3263-trim方法","3.2.6.3 trim方法",[14,63601,63602],{},[1727,63603],{"alt":23,"src":63604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63606,63607],{},[1727,63608],{"alt":23,"src":63609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63611,63612],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63614,63615],{},"str.trim()",[380,63617,63619],{"id":63618},"_327-环境对象","3.2.7 环境对象",[14,63621,63622],{},[1727,63623],{"alt":23,"src":63624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63626,63627],{},[1727,63628],{"alt":23,"src":63629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63631,63632],{},[1727,63633],{"alt":23,"src":63634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63636,63637],{},"实际函数调用是window.fn()",[14,63639,63640],{},"普通函数里面this指向的是window",[1404,63642,63643,63646,63649],{},[366,63644,63645],{},"在普通函数下，this指向的是window",[366,63647,63648],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[366,63650,63651],{},"箭头函数没有this",[14,63653,63654],{},"粗略记法就是：谁调用，this就指向谁",[14,63656,63657],{},[1727,63658],{"alt":23,"src":63659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63661,63662],{},[1727,63663],{"alt":23,"src":63664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63666,63667],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63669,63670],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[18,63672,63674],{"className":53323,"code":63673,"language":53325,"meta":23,"style":23},"\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",[25,63675,63676,63684,63696,63704,63709,63714,63719,63724,63728,63736],{"__ignoreMap":23},[28,63677,63678,63680,63682],{"class":30,"line":31},[28,63679,1307],{"class":38},[28,63681,52056],{"class":51556},[28,63683,51563],{"class":38},[28,63685,63686,63688,63690,63692,63694],{"class":30,"line":48},[28,63687,52400],{"class":38},[28,63689,54143],{"class":51556},[28,63691,54149],{"class":38},[28,63693,54143],{"class":51556},[28,63695,51563],{"class":38},[28,63697,63698,63700,63702],{"class":30,"line":84},[28,63699,52400],{"class":38},[28,63701,52069],{"class":51556},[28,63703,51563],{"class":38},[28,63705,63706],{"class":30,"line":91},[28,63707,63708],{"class":38},"    const button = document.querySelector('button')\n",[28,63710,63711],{"class":30,"line":97},[28,63712,63713],{"class":38},"    button.addEventListener('click', function () {\n",[28,63715,63716],{"class":30,"line":103},[28,63717,63718],{"class":38},"      \u002F\u002F console.log(this);\n",[28,63720,63721],{"class":30,"line":109},[28,63722,63723],{"class":38},"      this.style.color = 'pink'\n",[28,63725,63726],{"class":30,"line":118},[28,63727,33717],{"class":38},[28,63729,63730,63732,63734],{"class":30,"line":124},[28,63731,52673],{"class":38},[28,63733,52069],{"class":51556},[28,63735,51563],{"class":38},[28,63737,63738,63740,63742],{"class":30,"line":131},[28,63739,52041],{"class":38},[28,63741,52056],{"class":51556},[28,63743,51563],{"class":38},[380,63745,63747],{"id":63746},"_328-回调函数","3.2.8 回调函数",[14,63749,63750],{},[1727,63751],{"alt":23,"src":63752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63754,63755],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63757,11594],{},[1404,63759,63760,63763,63766],{},[366,63761,63762],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[366,63764,63765],{},"回调函数本质还是函数，只不过把它当成参数使用",[366,63767,63768],{},"使用匿名函数做为回调函数比较常见",[380,63770,63772],{"id":63771},"_329-tab栏切换","3.2.9 tab栏切换",[14,63774,63775],{},[1727,63776],{"alt":23,"src":63777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[18,63779,63781],{"className":50889,"code":63780,"language":50891,"meta":23,"style":23},"\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",[25,63782,63783,63793,63807,63811,63819,63833,63853,63873,63886,63894,63900,63910,63920,63924,63928,63935,63948,63961,63973,63989,63993,63997,64004,64016,64028,64040,64050,64060,64064,64068,64077,64089,64100,64112,64116,64120,64128,64138,64148,64158,64162,64166,64176,64190,64202,64206,64210,64222,64233,64250,64260,64264,64268,64283,64294,64304,64308,64312,64319,64334,64338,64342,64350,64360,64364,64368,64377,64387,64391,64399,64407,64411,64419,64434,64449,64462,64470,64504,64531,64558,64585,64612,64620,64628,64643,64680,64715,64750,64785,64820,64828,64836,64844,64849,64854,64874,64879,64908,64913,64918,64936,64941,64946,64951,64973,64978,64994,64998,65003,65008,65029,65034,65063,65067,65072,65076,65084,65092,65096],{"__ignoreMap":23},[28,63784,63785,63787,63789,63791],{"class":30,"line":31},[28,63786,51553],{"class":38},[28,63788,51557],{"class":51556},[28,63790,51560],{"class":2225},[28,63792,51563],{"class":38},[28,63794,63795,63797,63799,63801,63803,63805],{"class":30,"line":48},[28,63796,1307],{"class":38},[28,63798,50891],{"class":51556},[28,63800,51572],{"class":2225},[28,63802,54],{"class":38},[28,63804,51577],{"class":127},[28,63806,51563],{"class":38},[28,63808,63809],{"class":30,"line":84},[28,63810,2662],{"emptyLinePlaceholder":336},[28,63812,63813,63815,63817],{"class":30,"line":91},[28,63814,1307],{"class":38},[28,63816,51590],{"class":51556},[28,63818,51563],{"class":38},[28,63820,63821,63823,63825,63827,63829,63831],{"class":30,"line":97},[28,63822,52400],{"class":38},[28,63824,51600],{"class":51556},[28,63826,51603],{"class":2225},[28,63828,54],{"class":38},[28,63830,51608],{"class":127},[28,63832,59383],{"class":38},[28,63834,63835,63837,63839,63841,63843,63845,63847,63849,63851],{"class":30,"line":103},[28,63836,52400],{"class":38},[28,63838,51600],{"class":51556},[28,63840,51619],{"class":2225},[28,63842,54],{"class":38},[28,63844,51624],{"class":127},[28,63846,51627],{"class":2225},[28,63848,54],{"class":38},[28,63850,51632],{"class":127},[28,63852,59383],{"class":38},[28,63854,63855,63857,63859,63861,63863,63865,63867,63869,63871],{"class":30,"line":109},[28,63856,52400],{"class":38},[28,63858,51600],{"class":51556},[28,63860,15182],{"class":2225},[28,63862,54],{"class":38},[28,63864,51647],{"class":127},[28,63866,51627],{"class":2225},[28,63868,54],{"class":38},[28,63870,51654],{"class":127},[28,63872,59383],{"class":38},[28,63874,63875,63877,63879,63882,63884],{"class":30,"line":118},[28,63876,52400],{"class":38},[28,63878,51663],{"class":51556},[28,63880,63881],{"class":38},">tab栏切换\u003C\u002F",[28,63883,51663],{"class":51556},[28,63885,51563],{"class":38},[28,63887,63888,63890,63892],{"class":30,"line":124},[28,63889,52400],{"class":38},[28,63891,328],{"class":51556},[28,63893,51563],{"class":38},[28,63895,63896,63898],{"class":30,"line":131},[28,63897,6665],{"class":51556},[28,63899,15834],{"class":38},[28,63901,63902,63904,63906,63908],{"class":30,"line":137},[28,63903,54962],{"class":60},[28,63905,51693],{"class":38},[28,63907,244],{"class":60},[28,63909,1558],{"class":38},[28,63911,63912,63914,63916,63918],{"class":30,"line":143},[28,63913,54951],{"class":60},[28,63915,51693],{"class":38},[28,63917,244],{"class":60},[28,63919,1558],{"class":38},[28,63921,63922],{"class":30,"line":149},[28,63923,2449],{"class":38},[28,63925,63926],{"class":30,"line":1890},[28,63927,2662],{"emptyLinePlaceholder":336},[28,63929,63930,63933],{"class":30,"line":1904},[28,63931,63932],{"class":2225},"    .tab",[28,63934,15834],{"class":38},[28,63936,63937,63939,63941,63944,63946],{"class":30,"line":1909},[28,63938,55027],{"class":60},[28,63940,51693],{"class":38},[28,63942,63943],{"class":60},"590",[28,63945,51748],{"class":34},[28,63947,1558],{"class":38},[28,63949,63950,63952,63954,63957,63959],{"class":30,"line":1915},[28,63951,55041],{"class":60},[28,63953,51693],{"class":38},[28,63955,63956],{"class":60},"340",[28,63958,51748],{"class":34},[28,63960,1558],{"class":38},[28,63962,63963,63965,63967,63969,63971],{"class":30,"line":1936},[28,63964,54962],{"class":60},[28,63966,51693],{"class":38},[28,63968,1098],{"class":60},[28,63970,51748],{"class":34},[28,63972,1558],{"class":38},[28,63974,63975,63977,63979,63981,63983,63985,63987],{"class":30,"line":1941},[28,63976,62233],{"class":60},[28,63978,51693],{"class":38},[28,63980,61],{"class":60},[28,63982,51748],{"class":34},[28,63984,51777],{"class":60},[28,63986,62500],{"class":60},[28,63988,1558],{"class":38},[28,63990,63991],{"class":30,"line":1955},[28,63992,2449],{"class":38},[28,63994,63995],{"class":30,"line":1960},[28,63996,2662],{"emptyLinePlaceholder":336},[28,63998,63999,64002],{"class":30,"line":1989},[28,64000,64001],{"class":2225},"    .tab-nav",[28,64003,15834],{"class":38},[28,64005,64006,64008,64010,64012,64014],{"class":30,"line":1994},[28,64007,55027],{"class":60},[28,64009,51693],{"class":38},[28,64011,713],{"class":60},[28,64013,729],{"class":34},[28,64015,1558],{"class":38},[28,64017,64018,64020,64022,64024,64026],{"class":30,"line":2011},[28,64019,55041],{"class":60},[28,64021,51693],{"class":38},[28,64023,1304],{"class":60},[28,64025,51748],{"class":34},[28,64027,1558],{"class":38},[28,64029,64030,64032,64034,64036,64038],{"class":30,"line":2016},[28,64031,57615],{"class":60},[28,64033,51693],{"class":38},[28,64035,1304],{"class":60},[28,64037,51748],{"class":34},[28,64039,1558],{"class":38},[28,64041,64042,64044,64046,64048],{"class":30,"line":2021},[28,64043,55265],{"class":60},[28,64045,51693],{"class":38},[28,64047,51733],{"class":60},[28,64049,1558],{"class":38},[28,64051,64052,64054,64056,64058],{"class":30,"line":2026},[28,64053,55276],{"class":60},[28,64055,51693],{"class":38},[28,64057,51924],{"class":60},[28,64059,1558],{"class":38},[28,64061,64062],{"class":30,"line":2040},[28,64063,2449],{"class":38},[28,64065,64066],{"class":30,"line":2045},[28,64067,2662],{"emptyLinePlaceholder":336},[28,64069,64070,64072,64075],{"class":30,"line":2839},[28,64071,64001],{"class":2225},[28,64073,64074],{"class":51556}," h3",[28,64076,15834],{"class":38},[28,64078,64079,64081,64083,64085,64087],{"class":30,"line":2853},[28,64080,55178],{"class":60},[28,64082,51693],{"class":38},[28,64084,1198],{"class":60},[28,64086,51748],{"class":34},[28,64088,1558],{"class":38},[28,64090,64091,64093,64095,64098],{"class":30,"line":2861},[28,64092,62590],{"class":60},[28,64094,51693],{"class":38},[28,64096,64097],{"class":60},"normal",[28,64099,1558],{"class":38},[28,64101,64102,64104,64106,64108,64110],{"class":30,"line":2866},[28,64103,62256],{"class":60},[28,64105,51693],{"class":38},[28,64107,1098],{"class":60},[28,64109,51748],{"class":34},[28,64111,1558],{"class":38},[28,64113,64114],{"class":30,"line":2872},[28,64115,2449],{"class":38},[28,64117,64118],{"class":30,"line":2878},[28,64119,2662],{"emptyLinePlaceholder":336},[28,64121,64122,64124,64126],{"class":30,"line":2883},[28,64123,64001],{"class":2225},[28,64125,61548],{"class":51556},[28,64127,15834],{"class":38},[28,64129,64130,64132,64134,64136],{"class":30,"line":8210},[28,64131,54988],{"class":60},[28,64133,51693],{"class":38},[28,64135,54993],{"class":60},[28,64137,1558],{"class":38},[28,64139,64140,64142,64144,64146],{"class":30,"line":8234},[28,64141,55265],{"class":60},[28,64143,51693],{"class":38},[28,64145,51733],{"class":60},[28,64147,1558],{"class":38},[28,64149,64150,64152,64154,64156],{"class":30,"line":8239},[28,64151,55276],{"class":60},[28,64153,51693],{"class":38},[28,64155,51836],{"class":60},[28,64157,1558],{"class":38},[28,64159,64160],{"class":30,"line":8245},[28,64161,2449],{"class":38},[28,64163,64164],{"class":30,"line":8272},[28,64165,2662],{"emptyLinePlaceholder":336},[28,64167,64168,64170,64172,64174],{"class":30,"line":8277},[28,64169,64001],{"class":2225},[28,64171,61548],{"class":51556},[28,64173,55331],{"class":51556},[28,64175,15834],{"class":38},[28,64177,64178,64180,64182,64184,64186,64188],{"class":30,"line":8283},[28,64179,54962],{"class":60},[28,64181,51693],{"class":38},[28,64183,244],{"class":60},[28,64185,9212],{"class":60},[28,64187,51748],{"class":34},[28,64189,1558],{"class":38},[28,64191,64192,64194,64196,64198,64200],{"class":30,"line":8295},[28,64193,55178],{"class":60},[28,64195,51693],{"class":38},[28,64197,947],{"class":60},[28,64199,51748],{"class":34},[28,64201,1558],{"class":38},[28,64203,64204],{"class":30,"line":8307},[28,64205,2449],{"class":38},[28,64207,64208],{"class":30,"line":8319},[28,64209,2662],{"emptyLinePlaceholder":336},[28,64211,64212,64214,64216,64218,64220],{"class":30,"line":9978},[28,64213,64001],{"class":2225},[28,64215,61548],{"class":51556},[28,64217,55331],{"class":51556},[28,64219,1663],{"class":51556},[28,64221,15834],{"class":38},[28,64223,64224,64227,64229,64231],{"class":30,"line":10003},[28,64225,64226],{"class":60},"      text-decoration",[28,64228,51693],{"class":38},[28,64230,54993],{"class":60},[28,64232,1558],{"class":38},[28,64234,64235,64237,64239,64241,64243,64245,64248],{"class":30,"line":10026},[28,64236,62488],{"class":60},[28,64238,51693],{"class":38},[28,64240,211],{"class":60},[28,64242,51748],{"class":34},[28,64244,51777],{"class":60},[28,64246,64247],{"class":60}," transparent",[28,64249,1558],{"class":38},[28,64251,64252,64254,64256,64258],{"class":30,"line":10050},[28,64253,57672],{"class":60},[28,64255,51693],{"class":38},[28,64257,62625],{"class":60},[28,64259,1558],{"class":38},[28,64261,64262],{"class":30,"line":10055},[28,64263,2449],{"class":38},[28,64265,64266],{"class":30,"line":10060},[28,64267,2662],{"emptyLinePlaceholder":336},[28,64269,64270,64272,64274,64276,64278,64281],{"class":30,"line":10065},[28,64271,64001],{"class":2225},[28,64273,61548],{"class":51556},[28,64275,55331],{"class":51556},[28,64277,1663],{"class":51556},[28,64279,64280],{"class":2225},".active",[28,64282,15834],{"class":38},[28,64284,64285,64287,64289,64292],{"class":30,"line":10074},[28,64286,62047],{"class":60},[28,64288,51693],{"class":38},[28,64290,64291],{"class":60},"#e1251b",[28,64293,1558],{"class":38},[28,64295,64296,64298,64300,64302],{"class":30,"line":10079},[28,64297,57672],{"class":60},[28,64299,51693],{"class":38},[28,64301,64291],{"class":60},[28,64303,1558],{"class":38},[28,64305,64306],{"class":30,"line":10085},[28,64307,2449],{"class":38},[28,64309,64310],{"class":30,"line":10106},[28,64311,2662],{"emptyLinePlaceholder":336},[28,64313,64314,64317],{"class":30,"line":10112},[28,64315,64316],{"class":2225},"    .tab-content",[28,64318,15834],{"class":38},[28,64320,64321,64323,64325,64327,64330,64332],{"class":30,"line":10126},[28,64322,54951],{"class":60},[28,64324,51693],{"class":38},[28,64326,244],{"class":60},[28,64328,64329],{"class":60}," 16",[28,64331,51748],{"class":34},[28,64333,1558],{"class":38},[28,64335,64336],{"class":30,"line":10132},[28,64337,2449],{"class":38},[28,64339,64340],{"class":30,"line":10159},[28,64341,2662],{"emptyLinePlaceholder":336},[28,64343,64344,64346,64348],{"class":30,"line":10168},[28,64345,64316],{"class":2225},[28,64347,62430],{"class":2225},[28,64349,15834],{"class":38},[28,64351,64352,64354,64356,64358],{"class":30,"line":10174},[28,64353,55265],{"class":60},[28,64355,51693],{"class":38},[28,64357,54993],{"class":60},[28,64359,1558],{"class":38},[28,64361,64362],{"class":30,"line":10182},[28,64363,2449],{"class":38},[28,64365,64366],{"class":30,"line":10187},[28,64367,2662],{"emptyLinePlaceholder":336},[28,64369,64370,64372,64375],{"class":30,"line":16866},[28,64371,64316],{"class":2225},[28,64373,64374],{"class":2225}," .item.active",[28,64376,15834],{"class":38},[28,64378,64379,64381,64383,64385],{"class":30,"line":16872},[28,64380,55265],{"class":60},[28,64382,51693],{"class":38},[28,64384,61125],{"class":60},[28,64386,1558],{"class":38},[28,64388,64389],{"class":30,"line":16895},[28,64390,2449],{"class":38},[28,64392,64393,64395,64397],{"class":30,"line":16901},[28,64394,52673],{"class":38},[28,64396,328],{"class":51556},[28,64398,51563],{"class":38},[28,64400,64401,64403,64405],{"class":30,"line":16924},[28,64402,52041],{"class":38},[28,64404,51590],{"class":51556},[28,64406,51563],{"class":38},[28,64408,64409],{"class":30,"line":16938},[28,64410,2662],{"emptyLinePlaceholder":336},[28,64412,64413,64415,64417],{"class":30,"line":16958},[28,64414,1307],{"class":38},[28,64416,52056],{"class":51556},[28,64418,51563],{"class":38},[28,64420,64421,64423,64425,64427,64429,64432],{"class":30,"line":16964},[28,64422,52400],{"class":38},[28,64424,51867],{"class":51556},[28,64426,53742],{"class":2225},[28,64428,54],{"class":38},[28,64430,64431],{"class":127},"\"tab\"",[28,64433,51563],{"class":38},[28,64435,64436,64438,64440,64442,64444,64447],{"class":30,"line":16975},[28,64437,51597],{"class":38},[28,64439,51867],{"class":51556},[28,64441,53742],{"class":2225},[28,64443,54],{"class":38},[28,64445,64446],{"class":127},"\"tab-nav\"",[28,64448,51563],{"class":38},[28,64450,64451,64453,64455,64458,64460],{"class":30,"line":16998},[28,64452,55490],{"class":38},[28,64454,380],{"class":51556},[28,64456,64457],{"class":38},">每日特价\u003C\u002F",[28,64459,380],{"class":51556},[28,64461,51563],{"class":38},[28,64463,64464,64466,64468],{"class":30,"line":17020},[28,64465,55490],{"class":38},[28,64467,1404],{"class":51556},[28,64469,51563],{"class":38},[28,64471,64472,64474,64476,64478,64480,64482,64484,64486,64488,64490,64493,64496,64498,64500,64502],{"class":30,"line":17025},[28,64473,55558],{"class":38},[28,64475,366],{"class":51556},[28,64477,61308],{"class":38},[28,64479,51],{"class":51556},[28,64481,53742],{"class":2225},[28,64483,54],{"class":38},[28,64485,59962],{"class":127},[28,64487,61313],{"class":2225},[28,64489,54],{"class":38},[28,64491,64492],{"class":127},"\"javascript:;\"",[28,64494,64495],{"class":38},">精选\u003C\u002F",[28,64497,51],{"class":51556},[28,64499,55570],{"class":38},[28,64501,366],{"class":51556},[28,64503,51563],{"class":38},[28,64505,64506,64508,64510,64512,64514,64516,64518,64520,64523,64525,64527,64529],{"class":30,"line":17031},[28,64507,55558],{"class":38},[28,64509,366],{"class":51556},[28,64511,61308],{"class":38},[28,64513,51],{"class":51556},[28,64515,61313],{"class":2225},[28,64517,54],{"class":38},[28,64519,64492],{"class":127},[28,64521,64522],{"class":38},">美食\u003C\u002F",[28,64524,51],{"class":51556},[28,64526,55570],{"class":38},[28,64528,366],{"class":51556},[28,64530,51563],{"class":38},[28,64532,64533,64535,64537,64539,64541,64543,64545,64547,64550,64552,64554,64556],{"class":30,"line":17045},[28,64534,55558],{"class":38},[28,64536,366],{"class":51556},[28,64538,61308],{"class":38},[28,64540,51],{"class":51556},[28,64542,61313],{"class":2225},[28,64544,54],{"class":38},[28,64546,64492],{"class":127},[28,64548,64549],{"class":38},">百货\u003C\u002F",[28,64551,51],{"class":51556},[28,64553,55570],{"class":38},[28,64555,366],{"class":51556},[28,64557,51563],{"class":38},[28,64559,64560,64562,64564,64566,64568,64570,64572,64574,64577,64579,64581,64583],{"class":30,"line":17058},[28,64561,55558],{"class":38},[28,64563,366],{"class":51556},[28,64565,61308],{"class":38},[28,64567,51],{"class":51556},[28,64569,61313],{"class":2225},[28,64571,54],{"class":38},[28,64573,64492],{"class":127},[28,64575,64576],{"class":38},">个护\u003C\u002F",[28,64578,51],{"class":51556},[28,64580,55570],{"class":38},[28,64582,366],{"class":51556},[28,64584,51563],{"class":38},[28,64586,64587,64589,64591,64593,64595,64597,64599,64601,64604,64606,64608,64610],{"class":30,"line":17063},[28,64588,55558],{"class":38},[28,64590,366],{"class":51556},[28,64592,61308],{"class":38},[28,64594,51],{"class":51556},[28,64596,61313],{"class":2225},[28,64598,54],{"class":38},[28,64600,64492],{"class":127},[28,64602,64603],{"class":38},">预告\u003C\u002F",[28,64605,51],{"class":51556},[28,64607,55570],{"class":38},[28,64609,366],{"class":51556},[28,64611,51563],{"class":38},[28,64613,64614,64616,64618],{"class":30,"line":17077},[28,64615,55663],{"class":38},[28,64617,1404],{"class":51556},[28,64619,51563],{"class":38},[28,64621,64622,64624,64626],{"class":30,"line":17082},[28,64623,52032],{"class":38},[28,64625,51867],{"class":51556},[28,64627,51563],{"class":38},[28,64629,64630,64632,64634,64636,64638,64641],{"class":30,"line":17088},[28,64631,51597],{"class":38},[28,64633,51867],{"class":51556},[28,64635,53742],{"class":2225},[28,64637,54],{"class":38},[28,64639,64640],{"class":127},"\"tab-content\"",[28,64642,51563],{"class":38},[28,64644,64645,64647,64649,64651,64653,64656,64658,64660,64662,64664,64667,64669,64671,64673,64676,64678],{"class":30,"line":17093},[28,64646,55490],{"class":38},[28,64648,51867],{"class":51556},[28,64650,53742],{"class":2225},[28,64652,54],{"class":38},[28,64654,64655],{"class":127},"\"item active\"",[28,64657,61308],{"class":38},[28,64659,1727],{"class":51556},[28,64661,55495],{"class":2225},[28,64663,54],{"class":38},[28,64665,64666],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[28,64668,55503],{"class":2225},[28,64670,54],{"class":38},[28,64672,7914],{"class":127},[28,64674,64675],{"class":38}," \u002F>\u003C\u002F",[28,64677,51867],{"class":51556},[28,64679,51563],{"class":38},[28,64681,64682,64684,64686,64688,64690,64692,64694,64696,64698,64700,64703,64705,64707,64709,64711,64713],{"class":30,"line":17107},[28,64683,55490],{"class":38},[28,64685,51867],{"class":51556},[28,64687,53742],{"class":2225},[28,64689,54],{"class":38},[28,64691,62879],{"class":127},[28,64693,61308],{"class":38},[28,64695,1727],{"class":51556},[28,64697,55495],{"class":2225},[28,64699,54],{"class":38},[28,64701,64702],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[28,64704,55503],{"class":2225},[28,64706,54],{"class":38},[28,64708,7914],{"class":127},[28,64710,64675],{"class":38},[28,64712,51867],{"class":51556},[28,64714,51563],{"class":38},[28,64716,64717,64719,64721,64723,64725,64727,64729,64731,64733,64735,64738,64740,64742,64744,64746,64748],{"class":30,"line":17112},[28,64718,55490],{"class":38},[28,64720,51867],{"class":51556},[28,64722,53742],{"class":2225},[28,64724,54],{"class":38},[28,64726,62879],{"class":127},[28,64728,61308],{"class":38},[28,64730,1727],{"class":51556},[28,64732,55495],{"class":2225},[28,64734,54],{"class":38},[28,64736,64737],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[28,64739,55503],{"class":2225},[28,64741,54],{"class":38},[28,64743,7914],{"class":127},[28,64745,64675],{"class":38},[28,64747,51867],{"class":51556},[28,64749,51563],{"class":38},[28,64751,64752,64754,64756,64758,64760,64762,64764,64766,64768,64770,64773,64775,64777,64779,64781,64783],{"class":30,"line":17117},[28,64753,55490],{"class":38},[28,64755,51867],{"class":51556},[28,64757,53742],{"class":2225},[28,64759,54],{"class":38},[28,64761,62879],{"class":127},[28,64763,61308],{"class":38},[28,64765,1727],{"class":51556},[28,64767,55495],{"class":2225},[28,64769,54],{"class":38},[28,64771,64772],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[28,64774,55503],{"class":2225},[28,64776,54],{"class":38},[28,64778,7914],{"class":127},[28,64780,64675],{"class":38},[28,64782,51867],{"class":51556},[28,64784,51563],{"class":38},[28,64786,64787,64789,64791,64793,64795,64797,64799,64801,64803,64805,64808,64810,64812,64814,64816,64818],{"class":30,"line":17131},[28,64788,55490],{"class":38},[28,64790,51867],{"class":51556},[28,64792,53742],{"class":2225},[28,64794,54],{"class":38},[28,64796,62879],{"class":127},[28,64798,61308],{"class":38},[28,64800,1727],{"class":51556},[28,64802,55495],{"class":2225},[28,64804,54],{"class":38},[28,64806,64807],{"class":127},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[28,64809,55503],{"class":2225},[28,64811,54],{"class":38},[28,64813,7914],{"class":127},[28,64815,64675],{"class":38},[28,64817,51867],{"class":51556},[28,64819,51563],{"class":38},[28,64821,64822,64824,64826],{"class":30,"line":17143},[28,64823,52032],{"class":38},[28,64825,51867],{"class":51556},[28,64827,51563],{"class":38},[28,64829,64830,64832,64834],{"class":30,"line":17148},[28,64831,52673],{"class":38},[28,64833,51867],{"class":51556},[28,64835,51563],{"class":38},[28,64837,64838,64840,64842],{"class":30,"line":17161},[28,64839,52400],{"class":38},[28,64841,52069],{"class":51556},[28,64843,51563],{"class":38},[28,64845,64846],{"class":30,"line":17166},[28,64847,64848],{"class":87},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[28,64850,64851],{"class":30,"line":17171},[28,64852,64853],{"class":87},"    \u002F\u002F 1.1 获取 a 元素 \n",[28,64855,64856,64858,64861,64863,64865,64867,64869,64872],{"class":30,"line":17176},[28,64857,11483],{"class":34},[28,64859,64860],{"class":60}," as",[28,64862,13826],{"class":34},[28,64864,54652],{"class":38},[28,64866,55937],{"class":2225},[28,64868,413],{"class":38},[28,64870,64871],{"class":127},"'.tab-nav a'",[28,64873,81],{"class":38},[28,64875,64876],{"class":30,"line":17189},[28,64877,64878],{"class":87},"    \u002F\u002F console.log(as) \n",[28,64880,64881,64883,64885,64887,64889,64891,64893,64895,64897,64900,64902,64904,64906],{"class":30,"line":17194},[28,64882,3463],{"class":34},[28,64884,1920],{"class":38},[28,64886,52103],{"class":34},[28,64888,9700],{"class":38},[28,64890,54],{"class":34},[28,64892,4355],{"class":60},[28,64894,9707],{"class":38},[28,64896,1307],{"class":34},[28,64898,64899],{"class":38}," as.",[28,64901,52224],{"class":60},[28,64903,3476],{"class":38},[28,64905,2554],{"class":34},[28,64907,12704],{"class":38},[28,64909,64910],{"class":30,"line":32889},[28,64911,64912],{"class":87},"      \u002F\u002F console.log(as[i])\n",[28,64914,64915],{"class":30,"line":32895},[28,64916,64917],{"class":87},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[28,64919,64920,64923,64925,64927,64930,64932,64934],{"class":30,"line":32901},[28,64921,64922],{"class":38},"      as[i].",[28,64924,58069],{"class":2225},[28,64926,413],{"class":38},[28,64928,64929],{"class":127},"'mouseenter'",[28,64931,12697],{"class":38},[28,64933,54705],{"class":34},[28,64935,54708],{"class":38},[28,64937,64938],{"class":30,"line":32907},[28,64939,64940],{"class":87},"        \u002F\u002F console.log('鼠标经过')\n",[28,64942,64943],{"class":30,"line":32913},[28,64944,64945],{"class":87},"        \u002F\u002F 排他思想  \n",[28,64947,64948],{"class":30,"line":32924},[28,64949,64950],{"class":87},"        \u002F\u002F 干掉别人 移除类active\n",[28,64952,64953,64955,64957,64959,64962,64964,64966,64968,64971],{"class":30,"line":32930},[28,64954,52181],{"class":38},[28,64956,54655],{"class":2225},[28,64958,413],{"class":38},[28,64960,64961],{"class":127},"'.tab-nav .active'",[28,64963,57259],{"class":38},[28,64965,57262],{"class":2225},[28,64967,413],{"class":38},[28,64969,64970],{"class":127},"'active'",[28,64972,81],{"class":38},[28,64974,64975],{"class":30,"line":32950},[28,64976,64977],{"class":87},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[28,64979,64980,64983,64986,64988,64990,64992],{"class":30,"line":32956},[28,64981,64982],{"class":60},"        this",[28,64984,64985],{"class":38},".classList.",[28,64987,5596],{"class":2225},[28,64989,413],{"class":38},[28,64991,64970],{"class":127},[28,64993,81],{"class":38},[28,64995,64996],{"class":30,"line":32967},[28,64997,2662],{"emptyLinePlaceholder":336},[28,64999,65000],{"class":30,"line":32973},[28,65001,65002],{"class":87},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[28,65004,65005],{"class":30,"line":32979},[28,65006,65007],{"class":87},"        \u002F\u002F 干掉别人\n",[28,65009,65010,65012,65014,65016,65019,65021,65023,65025,65027],{"class":30,"line":32985},[28,65011,52181],{"class":38},[28,65013,54655],{"class":2225},[28,65015,413],{"class":38},[28,65017,65018],{"class":127},"'.tab-content .active'",[28,65020,57259],{"class":38},[28,65022,57262],{"class":2225},[28,65024,413],{"class":38},[28,65026,64970],{"class":127},[28,65028,81],{"class":38},[28,65030,65031],{"class":30,"line":32991},[28,65032,65033],{"class":87},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[28,65035,65036,65038,65040,65042,65045,65047,65049,65051,65053,65055,65057,65059,65061],{"class":30,"line":32997},[28,65037,52181],{"class":38},[28,65039,54655],{"class":2225},[28,65041,413],{"class":38},[28,65043,65044],{"class":127},"`.tab-content .item:nth-child(${",[28,65046,840],{"class":38},[28,65048,45822],{"class":34},[28,65050,25381],{"class":60},[28,65052,57288],{"class":127},[28,65054,57259],{"class":38},[28,65056,5596],{"class":2225},[28,65058,413],{"class":38},[28,65060,64970],{"class":127},[28,65062,81],{"class":38},[28,65064,65065],{"class":30,"line":33003},[28,65066,2662],{"emptyLinePlaceholder":336},[28,65068,65069],{"class":30,"line":33009},[28,65070,65071],{"class":38},"      })\n",[28,65073,65074],{"class":30,"line":33029},[28,65075,2449],{"class":38},[28,65077,65078,65080,65082],{"class":30,"line":33035},[28,65079,52673],{"class":38},[28,65081,52069],{"class":51556},[28,65083,51563],{"class":38},[28,65085,65086,65088,65090],{"class":30,"line":33051},[28,65087,52041],{"class":38},[28,65089,52056],{"class":51556},[28,65091,51563],{"class":38},[28,65093,65094],{"class":30,"line":33057},[28,65095,2662],{"emptyLinePlaceholder":336},[28,65097,65098,65100,65102],{"class":30,"line":33071},[28,65099,52041],{"class":38},[28,65101,50891],{"class":51556},[28,65103,51563],{"class":38},[14,65105,65106],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65108,65109],{},"在监听事件中，this指向的就是他的调用者",[14,65111,65112],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65114,53976],{},[14,65116,65117],{},"(function () {",[14,65119,65120],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65122,65123],{},"list.addEventListener('click', function (e) {",[14,65125,65126],{},"if (e.target.tagName === 'A') {",[14,65128,65129],{},"\u002F\u002F 排他思想",[14,65131,65132],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65134,65135],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65137,65138],{},"\u002F\u002F console.log(old);",[14,65140,65141],{},"\u002F\u002F 判断",[14,65143,65144],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65146,65147],{},"if (old) old.classList.remove('active')",[14,65149,65150],{},"e.target.classList.add('active')",[14,65152,1343],{},[14,65154,52720],{},[14,65156,65157],{},"})();",[380,65159,65161],{"id":65160},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[18,65163,65165],{"className":50889,"code":65164,"language":50891,"meta":23,"style":23},"\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",[25,65166,65167,65177,65181,65189,65193,65207,65221,65233,65241,65247,65257,65267,65271,65275,65282,65294,65305,65322,65335,65349,65359,65363,65367,65374,65385,65403,65413,65425,65429,65433,65440,65457,65468,65480,65484,65488,65495,65507,65511,65519,65527,65531,65539,65547,65555,65570,65614,65622,65635,65648,65661,65669,65677,65685,65713,65721,65733,65746,65759,65767,65775,65783,65809,65817,65830,65842,65855,65863,65871,65879,65905,65913,65926,65938,65951,65959,65967,65975,65980,66000,66005,66025,66030,66047,66052,66060,66065,66094,66107,66111,66115,66120,66124,66152,66157,66174,66179,66184,66189,66194,66220,66224,66228,66236,66244,66248],{"__ignoreMap":23},[28,65168,65169,65171,65173,65175],{"class":30,"line":31},[28,65170,51553],{"class":38},[28,65172,51557],{"class":51556},[28,65174,51560],{"class":2225},[28,65176,51563],{"class":38},[28,65178,65179],{"class":30,"line":48},[28,65180,2662],{"emptyLinePlaceholder":336},[28,65182,65183,65185,65187],{"class":30,"line":84},[28,65184,1307],{"class":38},[28,65186,50891],{"class":51556},[28,65188,51563],{"class":38},[28,65190,65191],{"class":30,"line":91},[28,65192,2662],{"emptyLinePlaceholder":336},[28,65194,65195,65197,65199,65201,65203,65205],{"class":30,"line":97},[28,65196,1307],{"class":38},[28,65198,51590],{"class":51556},[28,65200,51572],{"class":2225},[28,65202,54],{"class":38},[28,65204,51577],{"class":127},[28,65206,51563],{"class":38},[28,65208,65209,65211,65213,65215,65217,65219],{"class":30,"line":103},[28,65210,52400],{"class":38},[28,65212,51600],{"class":51556},[28,65214,51603],{"class":2225},[28,65216,54],{"class":38},[28,65218,51608],{"class":127},[28,65220,51563],{"class":38},[28,65222,65223,65225,65227,65229,65231],{"class":30,"line":109},[28,65224,52400],{"class":38},[28,65226,51663],{"class":51556},[28,65228,55570],{"class":38},[28,65230,51663],{"class":51556},[28,65232,51563],{"class":38},[28,65234,65235,65237,65239],{"class":30,"line":118},[28,65236,52400],{"class":38},[28,65238,328],{"class":51556},[28,65240,51563],{"class":38},[28,65242,65243,65245],{"class":30,"line":124},[28,65244,6665],{"class":51556},[28,65246,15834],{"class":38},[28,65248,65249,65251,65253,65255],{"class":30,"line":131},[28,65250,54962],{"class":60},[28,65252,51693],{"class":38},[28,65254,244],{"class":60},[28,65256,1558],{"class":38},[28,65258,65259,65261,65263,65265],{"class":30,"line":137},[28,65260,54951],{"class":60},[28,65262,51693],{"class":38},[28,65264,244],{"class":60},[28,65266,1558],{"class":38},[28,65268,65269],{"class":30,"line":143},[28,65270,2449],{"class":38},[28,65272,65273],{"class":30,"line":149},[28,65274,2662],{"emptyLinePlaceholder":336},[28,65276,65277,65280],{"class":30,"line":1890},[28,65278,65279],{"class":51556},"    table",[28,65281,15834],{"class":38},[28,65283,65284,65287,65289,65292],{"class":30,"line":1904},[28,65285,65286],{"class":60},"      border-collapse",[28,65288,51693],{"class":38},[28,65290,65291],{"class":60},"collapse",[28,65293,1558],{"class":38},[28,65295,65296,65299,65301,65303],{"class":30,"line":1909},[28,65297,65298],{"class":60},"      border-spacing",[28,65300,51693],{"class":38},[28,65302,244],{"class":60},[28,65304,1558],{"class":38},[28,65306,65307,65309,65311,65313,65315,65317,65320],{"class":30,"line":1915},[28,65308,62233],{"class":60},[28,65310,51693],{"class":38},[28,65312,61],{"class":60},[28,65314,51748],{"class":34},[28,65316,51777],{"class":60},[28,65318,65319],{"class":60}," #c0c0c0",[28,65321,1558],{"class":38},[28,65323,65324,65326,65328,65331,65333],{"class":30,"line":1936},[28,65325,55027],{"class":60},[28,65327,51693],{"class":38},[28,65329,65330],{"class":60},"500",[28,65332,51748],{"class":34},[28,65334,1558],{"class":38},[28,65336,65337,65339,65341,65343,65345,65347],{"class":30,"line":1941},[28,65338,54962],{"class":60},[28,65340,51693],{"class":38},[28,65342,713],{"class":60},[28,65344,51748],{"class":34},[28,65346,51812],{"class":60},[28,65348,1558],{"class":38},[28,65350,65351,65353,65355,65357],{"class":30,"line":1955},[28,65352,57542],{"class":60},[28,65354,51693],{"class":38},[28,65356,51848],{"class":60},[28,65358,1558],{"class":38},[28,65360,65361],{"class":30,"line":1960},[28,65362,2449],{"class":38},[28,65364,65365],{"class":30,"line":1989},[28,65366,2662],{"emptyLinePlaceholder":336},[28,65368,65369,65372],{"class":30,"line":1994},[28,65370,65371],{"class":51556},"    th",[28,65373,15834],{"class":38},[28,65375,65376,65378,65380,65383],{"class":30,"line":2011},[28,65377,55140],{"class":60},[28,65379,51693],{"class":38},[28,65381,65382],{"class":60},"#09c",[28,65384,1558],{"class":38},[28,65386,65387,65390,65392,65394,65396,65398,65401],{"class":30,"line":2016},[28,65388,65389],{"class":60},"      font",[28,65391,51693],{"class":38},[28,65393,62595],{"class":60},[28,65395,64329],{"class":60},[28,65397,51748],{"class":34},[28,65399,65400],{"class":127}," \"微软雅黑\"",[28,65402,1558],{"class":38},[28,65404,65405,65407,65409,65411],{"class":30,"line":2021},[28,65406,57672],{"class":60},[28,65408,51693],{"class":38},[28,65410,61098],{"class":60},[28,65412,1558],{"class":38},[28,65414,65415,65417,65419,65421,65423],{"class":30,"line":2026},[28,65416,55041],{"class":60},[28,65418,51693],{"class":38},[28,65420,1198],{"class":60},[28,65422,51748],{"class":34},[28,65424,1558],{"class":38},[28,65426,65427],{"class":30,"line":2040},[28,65428,2449],{"class":38},[28,65430,65431],{"class":30,"line":2045},[28,65432,2662],{"emptyLinePlaceholder":336},[28,65434,65435,65438],{"class":30,"line":2839},[28,65436,65437],{"class":51556},"    td",[28,65439,15834],{"class":38},[28,65441,65442,65444,65446,65448,65450,65452,65455],{"class":30,"line":2853},[28,65443,62233],{"class":60},[28,65445,51693],{"class":38},[28,65447,61],{"class":60},[28,65449,51748],{"class":34},[28,65451,51777],{"class":60},[28,65453,65454],{"class":60}," #d0d0d0",[28,65456,1558],{"class":38},[28,65458,65459,65461,65463,65466],{"class":30,"line":2861},[28,65460,57672],{"class":60},[28,65462,51693],{"class":38},[28,65464,65465],{"class":60},"#404060",[28,65467,1558],{"class":38},[28,65469,65470,65472,65474,65476,65478],{"class":30,"line":2866},[28,65471,54951],{"class":60},[28,65473,51693],{"class":38},[28,65475,845],{"class":60},[28,65477,51748],{"class":34},[28,65479,1558],{"class":38},[28,65481,65482],{"class":30,"line":2872},[28,65483,2449],{"class":38},[28,65485,65486],{"class":30,"line":2878},[28,65487,2662],{"emptyLinePlaceholder":336},[28,65489,65490,65493],{"class":30,"line":2883},[28,65491,65492],{"class":2225},"    .allCheck",[28,65494,15834],{"class":38},[28,65496,65497,65499,65501,65503,65505],{"class":30,"line":8210},[28,65498,55027],{"class":60},[28,65500,51693],{"class":38},[28,65502,1010],{"class":60},[28,65504,51748],{"class":34},[28,65506,1558],{"class":38},[28,65508,65509],{"class":30,"line":8234},[28,65510,2449],{"class":38},[28,65512,65513,65515,65517],{"class":30,"line":8239},[28,65514,52673],{"class":38},[28,65516,328],{"class":51556},[28,65518,51563],{"class":38},[28,65520,65521,65523,65525],{"class":30,"line":8245},[28,65522,52041],{"class":38},[28,65524,51590],{"class":51556},[28,65526,51563],{"class":38},[28,65528,65529],{"class":30,"line":8272},[28,65530,2662],{"emptyLinePlaceholder":336},[28,65532,65533,65535,65537],{"class":30,"line":8277},[28,65534,1307],{"class":38},[28,65536,52056],{"class":51556},[28,65538,51563],{"class":38},[28,65540,65541,65543,65545],{"class":30,"line":8283},[28,65542,52400],{"class":38},[28,65544,543],{"class":51556},[28,65546,51563],{"class":38},[28,65548,65549,65551,65553],{"class":30,"line":8295},[28,65550,51597],{"class":38},[28,65552,549],{"class":51556},[28,65554,51563],{"class":38},[28,65556,65557,65559,65561,65563,65565,65568],{"class":30,"line":8307},[28,65558,55490],{"class":38},[28,65560,552],{"class":51556},[28,65562,53742],{"class":2225},[28,65564,54],{"class":38},[28,65566,65567],{"class":127},"\"allCheck\"",[28,65569,51563],{"class":38},[28,65571,65572,65574,65576,65578,65580,65582,65584,65586,65588,65590,65592,65595,65598,65600,65602,65604,65607,65610,65612],{"class":30,"line":8319},[28,65573,55558],{"class":38},[28,65575,54077],{"class":51556},[28,65577,54080],{"class":2225},[28,65579,54],{"class":38},[28,65581,54085],{"class":127},[28,65583,15182],{"class":2225},[28,65585,54],{"class":38},[28,65587,7914],{"class":127},[28,65589,15221],{"class":2225},[28,65591,54],{"class":38},[28,65593,65594],{"class":127},"\"checkAll\"",[28,65596,65597],{"class":38},"> \u003C",[28,65599,28],{"class":51556},[28,65601,53742],{"class":2225},[28,65603,54],{"class":38},[28,65605,65606],{"class":127},"\"all\"",[28,65608,65609],{"class":38},">全选\u003C\u002F",[28,65611,28],{"class":51556},[28,65613,51563],{"class":38},[28,65615,65616,65618,65620],{"class":30,"line":9978},[28,65617,55663],{"class":38},[28,65619,552],{"class":51556},[28,65621,51563],{"class":38},[28,65623,65624,65626,65628,65631,65633],{"class":30,"line":10003},[28,65625,55490],{"class":38},[28,65627,552],{"class":51556},[28,65629,65630],{"class":38},">商品\u003C\u002F",[28,65632,552],{"class":51556},[28,65634,51563],{"class":38},[28,65636,65637,65639,65641,65644,65646],{"class":30,"line":10026},[28,65638,55490],{"class":38},[28,65640,552],{"class":51556},[28,65642,65643],{"class":38},">商家\u003C\u002F",[28,65645,552],{"class":51556},[28,65647,51563],{"class":38},[28,65649,65650,65652,65654,65657,65659],{"class":30,"line":10050},[28,65651,55490],{"class":38},[28,65653,552],{"class":51556},[28,65655,65656],{"class":38},">价格\u003C\u002F",[28,65658,552],{"class":51556},[28,65660,51563],{"class":38},[28,65662,65663,65665,65667],{"class":30,"line":10055},[28,65664,52032],{"class":38},[28,65666,549],{"class":51556},[28,65668,51563],{"class":38},[28,65670,65671,65673,65675],{"class":30,"line":10060},[28,65672,51597],{"class":38},[28,65674,549],{"class":51556},[28,65676,51563],{"class":38},[28,65678,65679,65681,65683],{"class":30,"line":10065},[28,65680,55490],{"class":38},[28,65682,595],{"class":51556},[28,65684,51563],{"class":38},[28,65686,65687,65689,65691,65693,65695,65697,65699,65701,65704,65706,65708,65711],{"class":30,"line":10074},[28,65688,55558],{"class":38},[28,65690,54077],{"class":51556},[28,65692,54080],{"class":2225},[28,65694,54],{"class":38},[28,65696,54085],{"class":127},[28,65698,15182],{"class":2225},[28,65700,54],{"class":38},[28,65702,65703],{"class":127},"\"check\"",[28,65705,53742],{"class":2225},[28,65707,54],{"class":38},[28,65709,65710],{"class":127},"\"ck\"",[28,65712,51563],{"class":38},[28,65714,65715,65717,65719],{"class":30,"line":10079},[28,65716,55663],{"class":38},[28,65718,595],{"class":51556},[28,65720,51563],{"class":38},[28,65722,65723,65725,65727,65729,65731],{"class":30,"line":10085},[28,65724,55490],{"class":38},[28,65726,595],{"class":51556},[28,65728,61429],{"class":38},[28,65730,595],{"class":51556},[28,65732,51563],{"class":38},[28,65734,65735,65737,65739,65742,65744],{"class":30,"line":10106},[28,65736,55490],{"class":38},[28,65738,595],{"class":51556},[28,65740,65741],{"class":38},">小米\u003C\u002F",[28,65743,595],{"class":51556},[28,65745,51563],{"class":38},[28,65747,65748,65750,65752,65755,65757],{"class":30,"line":10112},[28,65749,55490],{"class":38},[28,65751,595],{"class":51556},[28,65753,65754],{"class":38},">￥1999\u003C\u002F",[28,65756,595],{"class":51556},[28,65758,51563],{"class":38},[28,65760,65761,65763,65765],{"class":30,"line":10126},[28,65762,52032],{"class":38},[28,65764,549],{"class":51556},[28,65766,51563],{"class":38},[28,65768,65769,65771,65773],{"class":30,"line":10132},[28,65770,51597],{"class":38},[28,65772,549],{"class":51556},[28,65774,51563],{"class":38},[28,65776,65777,65779,65781],{"class":30,"line":10159},[28,65778,55490],{"class":38},[28,65780,595],{"class":51556},[28,65782,51563],{"class":38},[28,65784,65785,65787,65789,65791,65793,65795,65797,65799,65801,65803,65805,65807],{"class":30,"line":10168},[28,65786,55558],{"class":38},[28,65788,54077],{"class":51556},[28,65790,54080],{"class":2225},[28,65792,54],{"class":38},[28,65794,54085],{"class":127},[28,65796,15182],{"class":2225},[28,65798,54],{"class":38},[28,65800,65703],{"class":127},[28,65802,53742],{"class":2225},[28,65804,54],{"class":38},[28,65806,65710],{"class":127},[28,65808,51563],{"class":38},[28,65810,65811,65813,65815],{"class":30,"line":10174},[28,65812,55663],{"class":38},[28,65814,595],{"class":51556},[28,65816,51563],{"class":38},[28,65818,65819,65821,65823,65826,65828],{"class":30,"line":10182},[28,65820,55490],{"class":38},[28,65822,595],{"class":51556},[28,65824,65825],{"class":38},">小米净水器\u003C\u002F",[28,65827,595],{"class":51556},[28,65829,51563],{"class":38},[28,65831,65832,65834,65836,65838,65840],{"class":30,"line":10187},[28,65833,55490],{"class":38},[28,65835,595],{"class":51556},[28,65837,65741],{"class":38},[28,65839,595],{"class":51556},[28,65841,51563],{"class":38},[28,65843,65844,65846,65848,65851,65853],{"class":30,"line":16866},[28,65845,55490],{"class":38},[28,65847,595],{"class":51556},[28,65849,65850],{"class":38},">￥4999\u003C\u002F",[28,65852,595],{"class":51556},[28,65854,51563],{"class":38},[28,65856,65857,65859,65861],{"class":30,"line":16872},[28,65858,52032],{"class":38},[28,65860,549],{"class":51556},[28,65862,51563],{"class":38},[28,65864,65865,65867,65869],{"class":30,"line":16895},[28,65866,51597],{"class":38},[28,65868,549],{"class":51556},[28,65870,51563],{"class":38},[28,65872,65873,65875,65877],{"class":30,"line":16901},[28,65874,55490],{"class":38},[28,65876,595],{"class":51556},[28,65878,51563],{"class":38},[28,65880,65881,65883,65885,65887,65889,65891,65893,65895,65897,65899,65901,65903],{"class":30,"line":16924},[28,65882,55558],{"class":38},[28,65884,54077],{"class":51556},[28,65886,54080],{"class":2225},[28,65888,54],{"class":38},[28,65890,54085],{"class":127},[28,65892,15182],{"class":2225},[28,65894,54],{"class":38},[28,65896,65703],{"class":127},[28,65898,53742],{"class":2225},[28,65900,54],{"class":38},[28,65902,65710],{"class":127},[28,65904,51563],{"class":38},[28,65906,65907,65909,65911],{"class":30,"line":16938},[28,65908,55663],{"class":38},[28,65910,595],{"class":51556},[28,65912,51563],{"class":38},[28,65914,65915,65917,65919,65922,65924],{"class":30,"line":16958},[28,65916,55490],{"class":38},[28,65918,595],{"class":51556},[28,65920,65921],{"class":38},">小米电视\u003C\u002F",[28,65923,595],{"class":51556},[28,65925,51563],{"class":38},[28,65927,65928,65930,65932,65934,65936],{"class":30,"line":16964},[28,65929,55490],{"class":38},[28,65931,595],{"class":51556},[28,65933,65741],{"class":38},[28,65935,595],{"class":51556},[28,65937,51563],{"class":38},[28,65939,65940,65942,65944,65947,65949],{"class":30,"line":16975},[28,65941,55490],{"class":38},[28,65943,595],{"class":51556},[28,65945,65946],{"class":38},">￥5999\u003C\u002F",[28,65948,595],{"class":51556},[28,65950,51563],{"class":38},[28,65952,65953,65955,65957],{"class":30,"line":16998},[28,65954,52032],{"class":38},[28,65956,549],{"class":51556},[28,65958,51563],{"class":38},[28,65960,65961,65963,65965],{"class":30,"line":17020},[28,65962,52673],{"class":38},[28,65964,543],{"class":51556},[28,65966,51563],{"class":38},[28,65968,65969,65971,65973],{"class":30,"line":17025},[28,65970,52400],{"class":38},[28,65972,52069],{"class":51556},[28,65974,51563],{"class":38},[28,65976,65977],{"class":30,"line":17031},[28,65978,65979],{"class":87},"    \u002F\u002F 1. 获取大复选框\n",[28,65981,65982,65984,65987,65989,65991,65993,65995,65998],{"class":30,"line":17045},[28,65983,11483],{"class":34},[28,65985,65986],{"class":60}," checkAll",[28,65988,13826],{"class":34},[28,65990,54652],{"class":38},[28,65992,54655],{"class":2225},[28,65994,413],{"class":38},[28,65996,65997],{"class":127},"'#checkAll'",[28,65999,81],{"class":38},[28,66001,66002],{"class":30,"line":17058},[28,66003,66004],{"class":87},"    \u002F\u002F 2. 获取所有的小复选框\n",[28,66006,66007,66009,66012,66014,66016,66018,66020,66023],{"class":30,"line":17063},[28,66008,11483],{"class":34},[28,66010,66011],{"class":60}," cks",[28,66013,13826],{"class":34},[28,66015,54652],{"class":38},[28,66017,55937],{"class":2225},[28,66019,413],{"class":38},[28,66021,66022],{"class":127},"'.ck'",[28,66024,81],{"class":38},[28,66026,66027],{"class":30,"line":17077},[28,66028,66029],{"class":87},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[28,66031,66032,66035,66037,66039,66041,66043,66045],{"class":30,"line":17082},[28,66033,66034],{"class":38},"    checkAll.",[28,66036,58069],{"class":2225},[28,66038,413],{"class":38},[28,66040,58074],{"class":127},[28,66042,12697],{"class":38},[28,66044,54705],{"class":34},[28,66046,54708],{"class":38},[28,66048,66049],{"class":30,"line":17088},[28,66050,66051],{"class":87},"      \u002F\u002F 得到当前大复选框的选中状态\n",[28,66053,66054,66057],{"class":30,"line":17093},[28,66055,66056],{"class":87},"      \u002F\u002F console.log(checkAll.checked)",[28,66058,66059],{"class":87},"  \u002F\u002F 得到 是 true 或者是 false\n",[28,66061,66062],{"class":30,"line":17107},[28,66063,66064],{"class":87},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[28,66066,66067,66069,66071,66073,66075,66077,66079,66081,66083,66086,66088,66090,66092],{"class":30,"line":17112},[28,66068,52540],{"class":34},[28,66070,1920],{"class":38},[28,66072,52103],{"class":34},[28,66074,9700],{"class":38},[28,66076,54],{"class":34},[28,66078,4355],{"class":60},[28,66080,9707],{"class":38},[28,66082,1307],{"class":34},[28,66084,66085],{"class":38}," cks.",[28,66087,52224],{"class":60},[28,66089,3476],{"class":38},[28,66091,2554],{"class":34},[28,66093,12704],{"class":38},[28,66095,66096,66099,66101,66104],{"class":30,"line":17117},[28,66097,66098],{"class":38},"        cks[i].checked ",[28,66100,54],{"class":34},[28,66102,66103],{"class":60}," this",[28,66105,66106],{"class":38},".checked\n",[28,66108,66109],{"class":30,"line":17131},[28,66110,52654],{"class":38},[28,66112,66113],{"class":30,"line":17143},[28,66114,33717],{"class":38},[28,66116,66117],{"class":30,"line":17148},[28,66118,66119],{"class":87},"    \u002F\u002F 5. 小复选框控制大复选框\n",[28,66121,66122],{"class":30,"line":17161},[28,66123,2662],{"emptyLinePlaceholder":336},[28,66125,66126,66128,66130,66132,66134,66136,66138,66140,66142,66144,66146,66148,66150],{"class":30,"line":17166},[28,66127,3463],{"class":34},[28,66129,1920],{"class":38},[28,66131,52103],{"class":34},[28,66133,9700],{"class":38},[28,66135,54],{"class":34},[28,66137,4355],{"class":60},[28,66139,9707],{"class":38},[28,66141,1307],{"class":34},[28,66143,66085],{"class":38},[28,66145,52224],{"class":60},[28,66147,3476],{"class":38},[28,66149,2554],{"class":34},[28,66151,12704],{"class":38},[28,66153,66154],{"class":30,"line":17171},[28,66155,66156],{"class":87},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[28,66158,66159,66162,66164,66166,66168,66170,66172],{"class":30,"line":17176},[28,66160,66161],{"class":38},"      cks[i].",[28,66163,58069],{"class":2225},[28,66165,413],{"class":38},[28,66167,58074],{"class":127},[28,66169,12697],{"class":38},[28,66171,54705],{"class":34},[28,66173,54708],{"class":38},[28,66175,66176],{"class":30,"line":17189},[28,66177,66178],{"class":87},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[28,66180,66181],{"class":30,"line":17194},[28,66182,66183],{"class":87},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[28,66185,66186],{"class":30,"line":32889},[28,66187,66188],{"class":87},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[28,66190,66191],{"class":30,"line":32895},[28,66192,66193],{"class":87},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[28,66195,66196,66199,66201,66203,66205,66207,66210,66212,66214,66216,66218],{"class":30,"line":32901},[28,66197,66198],{"class":38},"        checkAll.checked ",[28,66200,54],{"class":34},[28,66202,54652],{"class":38},[28,66204,55937],{"class":2225},[28,66206,413],{"class":38},[28,66208,66209],{"class":127},"'.ck:checked'",[28,66211,31086],{"class":38},[28,66213,52224],{"class":60},[28,66215,58162],{"class":34},[28,66217,66085],{"class":38},[28,66219,56087],{"class":60},[28,66221,66222],{"class":30,"line":32907},[28,66223,65071],{"class":38},[28,66225,66226],{"class":30,"line":32913},[28,66227,2449],{"class":38},[28,66229,66230,66232,66234],{"class":30,"line":32924},[28,66231,52673],{"class":38},[28,66233,52069],{"class":51556},[28,66235,51563],{"class":38},[28,66237,66238,66240,66242],{"class":30,"line":32930},[28,66239,52041],{"class":38},[28,66241,52056],{"class":51556},[28,66243,51563],{"class":38},[28,66245,66246],{"class":30,"line":32950},[28,66247,2662],{"emptyLinePlaceholder":336},[28,66249,66250,66252,66254],{"class":30,"line":32956},[28,66251,52041],{"class":38},[28,66253,50891],{"class":51556},[28,66255,51563],{"class":38},[14,66257,66258],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66260,66261],{},"用好之间比较得到的布尔值！！！",[14,66263,66264,66265,66268,66269,1920,66272,982,66274,66277],{},"在 JS 里访问的时候，",[25,66266,66267],{},"checkbox.checked"," 是一个 ",[555,66270,66271],{},"布尔值",[25,66273,1627],{},[25,66275,66276],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66279,66280,66281,66284,66285],{},"HTML 的 ",[25,66282,66283],{},"checked=\"checked\""," 只是 ",[555,66286,66287,66288,66291],{},"初始值；JS 的 ",[25,66289,66290],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66293,66294],{},"：checked是一个伪类选择器",[14,66296,66297],{},[1727,66298],{"alt":23,"src":66299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66301,66302,66305],{},[66303,66304],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66307,66308],{},[1727,66309],{"alt":23,"src":66310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[351,66312,66314],{"id":66313},"_33-dom事件进阶","3.3 DOM事件进阶",[380,66316,66318],{"id":66317},"_331-事件流","3.3.1 事件流",[14,66320,66321],{},[1727,66322],{"alt":23,"src":66323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22260,66325,66327],{"id":66326},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66329,66330],{},[1727,66331],{"alt":23,"src":66332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[18,66334,66336],{"className":50889,"code":66335,"language":50891,"meta":23,"style":23},"\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",[25,66337,66338,66348,66362,66366,66374,66388,66408,66420,66428,66435,66447,66459,66469,66473,66477,66484,66496,66508,66518,66522,66530,66538,66542,66550,66565,66584,66592,66600,66620,66640,66656,66667,66675,66692,66703,66711,66728,66739,66747,66755,66763,66767],{"__ignoreMap":23},[28,66339,66340,66342,66344,66346],{"class":30,"line":31},[28,66341,51553],{"class":38},[28,66343,51557],{"class":51556},[28,66345,51560],{"class":2225},[28,66347,51563],{"class":38},[28,66349,66350,66352,66354,66356,66358,66360],{"class":30,"line":48},[28,66351,1307],{"class":38},[28,66353,50891],{"class":51556},[28,66355,51572],{"class":2225},[28,66357,54],{"class":38},[28,66359,51577],{"class":127},[28,66361,51563],{"class":38},[28,66363,66364],{"class":30,"line":84},[28,66365,2662],{"emptyLinePlaceholder":336},[28,66367,66368,66370,66372],{"class":30,"line":91},[28,66369,1307],{"class":38},[28,66371,51590],{"class":51556},[28,66373,51563],{"class":38},[28,66375,66376,66378,66380,66382,66384,66386],{"class":30,"line":97},[28,66377,52400],{"class":38},[28,66379,51600],{"class":51556},[28,66381,51603],{"class":2225},[28,66383,54],{"class":38},[28,66385,51608],{"class":127},[28,66387,51563],{"class":38},[28,66389,66390,66392,66394,66396,66398,66400,66402,66404,66406],{"class":30,"line":103},[28,66391,52400],{"class":38},[28,66393,51600],{"class":51556},[28,66395,15182],{"class":2225},[28,66397,54],{"class":38},[28,66399,51647],{"class":127},[28,66401,51627],{"class":2225},[28,66403,54],{"class":38},[28,66405,51654],{"class":127},[28,66407,51563],{"class":38},[28,66409,66410,66412,66414,66416,66418],{"class":30,"line":109},[28,66411,52400],{"class":38},[28,66413,51663],{"class":51556},[28,66415,51666],{"class":38},[28,66417,51663],{"class":51556},[28,66419,51563],{"class":38},[28,66421,66422,66424,66426],{"class":30,"line":118},[28,66423,52400],{"class":38},[28,66425,328],{"class":51556},[28,66427,51563],{"class":38},[28,66429,66430,66433],{"class":30,"line":124},[28,66431,66432],{"class":2225},"    .father",[28,66434,15834],{"class":38},[28,66436,66437,66439,66441,66443,66445],{"class":30,"line":131},[28,66438,55027],{"class":60},[28,66440,51693],{"class":38},[28,66442,65330],{"class":60},[28,66444,51748],{"class":34},[28,66446,1558],{"class":38},[28,66448,66449,66451,66453,66455,66457],{"class":30,"line":137},[28,66450,55041],{"class":60},[28,66452,51693],{"class":38},[28,66454,65330],{"class":60},[28,66456,51748],{"class":34},[28,66458,1558],{"class":38},[28,66460,66461,66463,66465,66467],{"class":30,"line":143},[28,66462,55140],{"class":60},[28,66464,51693],{"class":38},[28,66466,51901],{"class":60},[28,66468,1558],{"class":38},[28,66470,66471],{"class":30,"line":149},[28,66472,2449],{"class":38},[28,66474,66475],{"class":30,"line":1890},[28,66476,2662],{"emptyLinePlaceholder":336},[28,66478,66479,66482],{"class":30,"line":1904},[28,66480,66481],{"class":2225},"    .son",[28,66483,15834],{"class":38},[28,66485,66486,66488,66490,66492,66494],{"class":30,"line":1909},[28,66487,55027],{"class":60},[28,66489,51693],{"class":38},[28,66491,1984],{"class":60},[28,66493,51748],{"class":34},[28,66495,1558],{"class":38},[28,66497,66498,66500,66502,66504,66506],{"class":30,"line":1915},[28,66499,55041],{"class":60},[28,66501,51693],{"class":38},[28,66503,1984],{"class":60},[28,66505,51748],{"class":34},[28,66507,1558],{"class":38},[28,66509,66510,66512,66514,66516],{"class":30,"line":1936},[28,66511,55140],{"class":60},[28,66513,51693],{"class":38},[28,66515,55145],{"class":60},[28,66517,1558],{"class":38},[28,66519,66520],{"class":30,"line":1941},[28,66521,2449],{"class":38},[28,66523,66524,66526,66528],{"class":30,"line":1955},[28,66525,52673],{"class":38},[28,66527,328],{"class":51556},[28,66529,51563],{"class":38},[28,66531,66532,66534,66536],{"class":30,"line":1960},[28,66533,52041],{"class":38},[28,66535,51590],{"class":51556},[28,66537,51563],{"class":38},[28,66539,66540],{"class":30,"line":1989},[28,66541,2662],{"emptyLinePlaceholder":336},[28,66543,66544,66546,66548],{"class":30,"line":1994},[28,66545,1307],{"class":38},[28,66547,52056],{"class":51556},[28,66549,51563],{"class":38},[28,66551,66552,66554,66556,66558,66560,66563],{"class":30,"line":2011},[28,66553,52400],{"class":38},[28,66555,51867],{"class":51556},[28,66557,53742],{"class":2225},[28,66559,54],{"class":38},[28,66561,66562],{"class":127},"\"father\"",[28,66564,51563],{"class":38},[28,66566,66567,66569,66571,66573,66575,66578,66580,66582],{"class":30,"line":2016},[28,66568,51597],{"class":38},[28,66570,51867],{"class":51556},[28,66572,53742],{"class":2225},[28,66574,54],{"class":38},[28,66576,66577],{"class":127},"\"son\"",[28,66579,55570],{"class":38},[28,66581,51867],{"class":51556},[28,66583,51563],{"class":38},[28,66585,66586,66588,66590],{"class":30,"line":2021},[28,66587,52673],{"class":38},[28,66589,51867],{"class":51556},[28,66591,51563],{"class":38},[28,66593,66594,66596,66598],{"class":30,"line":2026},[28,66595,52400],{"class":38},[28,66597,52069],{"class":51556},[28,66599,51563],{"class":38},[28,66601,66602,66604,66607,66609,66611,66613,66615,66618],{"class":30,"line":2040},[28,66603,11483],{"class":34},[28,66605,66606],{"class":60}," fa",[28,66608,13826],{"class":34},[28,66610,54652],{"class":38},[28,66612,54655],{"class":2225},[28,66614,413],{"class":38},[28,66616,66617],{"class":127},"'.father'",[28,66619,81],{"class":38},[28,66621,66622,66624,66627,66629,66631,66633,66635,66638],{"class":30,"line":2045},[28,66623,11483],{"class":34},[28,66625,66626],{"class":60}," son",[28,66628,13826],{"class":34},[28,66630,54652],{"class":38},[28,66632,54655],{"class":2225},[28,66634,413],{"class":38},[28,66636,66637],{"class":127},"'.son'",[28,66639,81],{"class":38},[28,66641,66642,66644,66646,66648,66650,66652,66654],{"class":30,"line":2839},[28,66643,52663],{"class":38},[28,66645,58069],{"class":2225},[28,66647,413],{"class":38},[28,66649,58074],{"class":127},[28,66651,12697],{"class":38},[28,66653,54705],{"class":34},[28,66655,54708],{"class":38},[28,66657,66658,66660,66662,66665],{"class":30,"line":2853},[28,66659,59181],{"class":2225},[28,66661,413],{"class":38},[28,66663,66664],{"class":127},"'woshiu1'",[28,66666,81],{"class":38},[28,66668,66669,66671,66673],{"class":30,"line":2861},[28,66670,54791],{"class":38},[28,66672,1627],{"class":60},[28,66674,81],{"class":38},[28,66676,66677,66680,66682,66684,66686,66688,66690],{"class":30,"line":2866},[28,66678,66679],{"class":38},"    fa.",[28,66681,58069],{"class":2225},[28,66683,413],{"class":38},[28,66685,58074],{"class":127},[28,66687,12697],{"class":38},[28,66689,54705],{"class":34},[28,66691,54708],{"class":38},[28,66693,66694,66696,66698,66701],{"class":30,"line":2872},[28,66695,59181],{"class":2225},[28,66697,413],{"class":38},[28,66699,66700],{"class":127},"'1'",[28,66702,81],{"class":38},[28,66704,66705,66707,66709],{"class":30,"line":2878},[28,66706,54791],{"class":38},[28,66708,1627],{"class":60},[28,66710,81],{"class":38},[28,66712,66713,66716,66718,66720,66722,66724,66726],{"class":30,"line":2883},[28,66714,66715],{"class":38},"    son.",[28,66717,58069],{"class":2225},[28,66719,413],{"class":38},[28,66721,58074],{"class":127},[28,66723,12697],{"class":38},[28,66725,54705],{"class":34},[28,66727,54708],{"class":38},[28,66729,66730,66732,66734,66737],{"class":30,"line":8210},[28,66731,59181],{"class":2225},[28,66733,413],{"class":38},[28,66735,66736],{"class":127},"'2'",[28,66738,81],{"class":38},[28,66740,66741,66743,66745],{"class":30,"line":8234},[28,66742,54791],{"class":38},[28,66744,1627],{"class":60},[28,66746,81],{"class":38},[28,66748,66749,66751,66753],{"class":30,"line":8239},[28,66750,52673],{"class":38},[28,66752,52069],{"class":51556},[28,66754,51563],{"class":38},[28,66756,66757,66759,66761],{"class":30,"line":8245},[28,66758,52041],{"class":38},[28,66760,52056],{"class":51556},[28,66762,51563],{"class":38},[28,66764,66765],{"class":30,"line":8272},[28,66766,2662],{"emptyLinePlaceholder":336},[28,66768,66769,66771,66773],{"class":30,"line":8277},[28,66770,52041],{"class":38},[28,66772,50891],{"class":51556},[28,66774,51563],{"class":38},[14,66776,66777],{},[1727,66778],{"alt":23,"src":66779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66781,66782],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22260,66784,66786],{"id":66785},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66788,66789],{},[1727,66790],{"alt":23,"src":66791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66793,66794],{},"反着来",[14,66796,66797],{},"注意是同名事件，比如都是‘click’",[22260,66799,66801],{"id":66800},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66803,66804],{},[1727,66805],{"alt":23,"src":66806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22260,66808,66810],{"id":66809},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66812,66813],{},[1727,66814],{"alt":23,"src":66815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66817,66818],{},[1727,66819],{"alt":23,"src":66820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22260,66822,66824],{"id":66823},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[363,66826,66827],{},[366,66828,66829],{},"事件类型的区别",[14,66831,66832],{},[1727,66833],{"alt":23,"src":66834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66836,66837],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[363,66839,66840],{"start":48},[366,66841,66842],{},"注册事件的区别",[14,66844,66845],{},[1727,66846],{"alt":23,"src":66847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22260,66849,66851],{"id":66850},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66853,66854],{},[1727,66855],{"alt":23,"src":66856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66858,66859],{},[1727,66860],{"alt":23,"src":66861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[18,66863,66865],{"className":53323,"code":66864,"language":53325,"meta":23,"style":23},"\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",[25,66866,66867,66875,66892,66915,66923,66928,66933,66938,66942,66950,66958],{"__ignoreMap":23},[28,66868,66869,66871,66873],{"class":30,"line":31},[28,66870,1307],{"class":38},[28,66872,52056],{"class":51556},[28,66874,51563],{"class":38},[28,66876,66877,66879,66882,66885,66887,66890],{"class":30,"line":48},[28,66878,52400],{"class":38},[28,66880,66881],{"class":51556},"form",[28,66883,66884],{"class":2225}," action",[28,66886,54],{"class":38},[28,66888,66889],{"class":127},"\"http:\u002F\u002Fwww.itcast.cn\"",[28,66891,51563],{"class":38},[28,66893,66894,66896,66898,66900,66902,66905,66908,66910,66913],{"class":30,"line":84},[28,66895,51597],{"class":38},[28,66897,54077],{"class":51556},[28,66899,54080],{"class":2225},[28,66901,54],{"class":38},[28,66903,66904],{"class":127},"\"submit\"",[28,66906,66907],{"class":2225}," value",[28,66909,54],{"class":38},[28,66911,66912],{"class":127},"\"免费注册\"",[28,66914,51563],{"class":38},[28,66916,66917,66919,66921],{"class":30,"line":91},[28,66918,51597],{"class":38},[28,66920,52069],{"class":51556},[28,66922,51563],{"class":38},[28,66924,66925],{"class":30,"line":97},[28,66926,66927],{"class":38},"      const form = document.querySelector('form')\n",[28,66929,66930],{"class":30,"line":103},[28,66931,66932],{"class":38},"      form.addEventListener('submit', function (e) {\n",[28,66934,66935],{"class":30,"line":109},[28,66936,66937],{"class":38},"        e.preventDefault()\n",[28,66939,66940],{"class":30,"line":118},[28,66941,65071],{"class":38},[28,66943,66944,66946,66948],{"class":30,"line":124},[28,66945,52032],{"class":38},[28,66947,52069],{"class":51556},[28,66949,51563],{"class":38},[28,66951,66952,66954,66956],{"class":30,"line":131},[28,66953,52673],{"class":38},[28,66955,66881],{"class":51556},[28,66957,51563],{"class":38},[28,66959,66960,66962,66964],{"class":30,"line":137},[28,66961,52041],{"class":38},[28,66963,52056],{"class":51556},[28,66965,51563],{"class":38},[14,66967,66968],{},"点击不在跳转！！！",[380,66970,66972],{"id":66971},"_332-事件委托","3.3.2 事件委托",[14,66974,66975],{},[1727,66976],{"alt":23,"src":66977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[18,66979,66981],{"className":50889,"code":66980,"language":50891,"meta":23,"style":23},"\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",[25,66982,66983,66993,67007,67011,67019,67033,67053,67065,67073,67077,67085,67093,67105,67117,67129,67141,67153,67166,67174,67182,67187,67206,67227,67232,67237,67242,67247,67256,67260,67270,67274,67279,67284,67298,67308,67312,67316,67324,67332,67336],{"__ignoreMap":23},[28,66984,66985,66987,66989,66991],{"class":30,"line":31},[28,66986,51553],{"class":38},[28,66988,51557],{"class":51556},[28,66990,51560],{"class":2225},[28,66992,51563],{"class":38},[28,66994,66995,66997,66999,67001,67003,67005],{"class":30,"line":48},[28,66996,1307],{"class":38},[28,66998,50891],{"class":51556},[28,67000,51572],{"class":2225},[28,67002,54],{"class":38},[28,67004,51577],{"class":127},[28,67006,51563],{"class":38},[28,67008,67009],{"class":30,"line":84},[28,67010,2662],{"emptyLinePlaceholder":336},[28,67012,67013,67015,67017],{"class":30,"line":91},[28,67014,1307],{"class":38},[28,67016,51590],{"class":51556},[28,67018,51563],{"class":38},[28,67020,67021,67023,67025,67027,67029,67031],{"class":30,"line":97},[28,67022,52400],{"class":38},[28,67024,51600],{"class":51556},[28,67026,51603],{"class":2225},[28,67028,54],{"class":38},[28,67030,51608],{"class":127},[28,67032,51563],{"class":38},[28,67034,67035,67037,67039,67041,67043,67045,67047,67049,67051],{"class":30,"line":103},[28,67036,52400],{"class":38},[28,67038,51600],{"class":51556},[28,67040,15182],{"class":2225},[28,67042,54],{"class":38},[28,67044,51647],{"class":127},[28,67046,51627],{"class":2225},[28,67048,54],{"class":38},[28,67050,51654],{"class":127},[28,67052,51563],{"class":38},[28,67054,67055,67057,67059,67061,67063],{"class":30,"line":109},[28,67056,52400],{"class":38},[28,67058,51663],{"class":51556},[28,67060,51666],{"class":38},[28,67062,51663],{"class":51556},[28,67064,51563],{"class":38},[28,67066,67067,67069,67071],{"class":30,"line":118},[28,67068,52041],{"class":38},[28,67070,51590],{"class":51556},[28,67072,51563],{"class":38},[28,67074,67075],{"class":30,"line":124},[28,67076,2662],{"emptyLinePlaceholder":336},[28,67078,67079,67081,67083],{"class":30,"line":131},[28,67080,1307],{"class":38},[28,67082,52056],{"class":51556},[28,67084,51563],{"class":38},[28,67086,67087,67089,67091],{"class":30,"line":137},[28,67088,52400],{"class":38},[28,67090,1404],{"class":51556},[28,67092,51563],{"class":38},[28,67094,67095,67097,67099,67101,67103],{"class":30,"line":143},[28,67096,51597],{"class":38},[28,67098,366],{"class":51556},[28,67100,54222],{"class":38},[28,67102,366],{"class":51556},[28,67104,51563],{"class":38},[28,67106,67107,67109,67111,67113,67115],{"class":30,"line":149},[28,67108,51597],{"class":38},[28,67110,366],{"class":51556},[28,67112,54241],{"class":38},[28,67114,366],{"class":51556},[28,67116,51563],{"class":38},[28,67118,67119,67121,67123,67125,67127],{"class":30,"line":1890},[28,67120,51597],{"class":38},[28,67122,366],{"class":51556},[28,67124,54260],{"class":38},[28,67126,366],{"class":51556},[28,67128,51563],{"class":38},[28,67130,67131,67133,67135,67137,67139],{"class":30,"line":1904},[28,67132,51597],{"class":38},[28,67134,366],{"class":51556},[28,67136,54279],{"class":38},[28,67138,366],{"class":51556},[28,67140,51563],{"class":38},[28,67142,67143,67145,67147,67149,67151],{"class":30,"line":1909},[28,67144,51597],{"class":38},[28,67146,366],{"class":51556},[28,67148,54298],{"class":38},[28,67150,366],{"class":51556},[28,67152,51563],{"class":38},[28,67154,67155,67157,67159,67162,67164],{"class":30,"line":1915},[28,67156,51597],{"class":38},[28,67158,14],{"class":51556},[28,67160,67161],{"class":38},">我不需要变色\u003C\u002F",[28,67163,14],{"class":51556},[28,67165,51563],{"class":38},[28,67167,67168,67170,67172],{"class":30,"line":1936},[28,67169,52673],{"class":38},[28,67171,1404],{"class":51556},[28,67173,51563],{"class":38},[28,67175,67176,67178,67180],{"class":30,"line":1941},[28,67177,52400],{"class":38},[28,67179,52069],{"class":51556},[28,67181,51563],{"class":38},[28,67183,67184],{"class":30,"line":1955},[28,67185,67186],{"class":87},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[28,67188,67189,67191,67193,67195,67197,67199,67201,67204],{"class":30,"line":1960},[28,67190,11483],{"class":34},[28,67192,61548],{"class":60},[28,67194,13826],{"class":34},[28,67196,54652],{"class":38},[28,67198,54655],{"class":2225},[28,67200,413],{"class":38},[28,67202,67203],{"class":127},"'ul'",[28,67205,81],{"class":38},[28,67207,67208,67211,67213,67215,67217,67219,67221,67223,67225],{"class":30,"line":1989},[28,67209,67210],{"class":38},"    ul.",[28,67212,58069],{"class":2225},[28,67214,413],{"class":38},[28,67216,58074],{"class":127},[28,67218,12697],{"class":38},[28,67220,54705],{"class":34},[28,67222,1920],{"class":38},[28,67224,482],{"class":5478},[28,67226,12704],{"class":38},[28,67228,67229],{"class":30,"line":1994},[28,67230,67231],{"class":87},"      \u002F\u002F alert(1)\n",[28,67233,67234],{"class":30,"line":2011},[28,67235,67236],{"class":87},"      \u002F\u002F e.target就是我们点击的对象\n",[28,67238,67239],{"class":30,"line":2016},[28,67240,67241],{"class":87},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[28,67243,67244],{"class":30,"line":2021},[28,67245,67246],{"class":87},"      \u002F\u002F e.target.style.color = 'red'\n",[28,67248,67249,67251,67253],{"class":30,"line":2026},[28,67250,58500],{"class":38},[28,67252,58503],{"class":2225},[28,67254,67255],{"class":38},"(e)\n",[28,67257,67258],{"class":30,"line":2040},[28,67259,2662],{"emptyLinePlaceholder":336},[28,67261,67262,67264,67267],{"class":30,"line":2045},[28,67263,58500],{"class":38},[28,67265,67266],{"class":2225},"dir",[28,67268,67269],{"class":38},"(e.target)\n",[28,67271,67272],{"class":30,"line":2839},[28,67273,2662],{"emptyLinePlaceholder":336},[28,67275,67276],{"class":30,"line":2853},[28,67277,67278],{"class":87},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[28,67280,67281],{"class":30,"line":2861},[28,67282,67283],{"class":87},"      \u002F\u002F 通过tagName来进行判断\n",[28,67285,67286,67288,67291,67293,67296],{"class":30,"line":2866},[28,67287,54736],{"class":34},[28,67289,67290],{"class":38}," (e.target.tagName ",[28,67292,54742],{"class":34},[28,67294,67295],{"class":127}," 'LI'",[28,67297,12704],{"class":38},[28,67299,67300,67303,67305],{"class":30,"line":2872},[28,67301,67302],{"class":38},"        e.target.style.color ",[28,67304,54],{"class":34},[28,67306,67307],{"class":127}," 'red'\n",[28,67309,67310],{"class":30,"line":2878},[28,67311,52654],{"class":38},[28,67313,67314],{"class":30,"line":2883},[28,67315,33717],{"class":38},[28,67317,67318,67320,67322],{"class":30,"line":8210},[28,67319,52673],{"class":38},[28,67321,52069],{"class":51556},[28,67323,51563],{"class":38},[28,67325,67326,67328,67330],{"class":30,"line":8234},[28,67327,52041],{"class":38},[28,67329,52056],{"class":51556},[28,67331,51563],{"class":38},[28,67333,67334],{"class":30,"line":8239},[28,67335,2662],{"emptyLinePlaceholder":336},[28,67337,67338,67340,67342],{"class":30,"line":8245},[28,67339,52041],{"class":38},[28,67341,50891],{"class":51556},[28,67343,51563],{"class":38},[14,67345,67346],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67348,67349],{},"if(e.target.ragName==='P') {}",[14,67351,67352],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67354,67355],{},"通过事件委托的方式实现tab栏切换改造：",[14,67357,67358],{},"一定要记住自定义属性！！！！！！",[14,67360,67361],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67363,67364],{},"id是自定义的属性名",[14,67366,67367],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[18,67369,67371],{"className":50889,"code":67370,"language":50891,"meta":23,"style":23},"\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",[25,67372,67373,67383,67397,67401,67409,67423,67443,67463,67475,67483,67489,67499,67509,67513,67517,67523,67535,67547,67559,67575,67579,67583,67589,67601,67613,67625,67635,67645,67649,67653,67661,67673,67683,67695,67699,67703,67711,67721,67731,67741,67745,67749,67759,67773,67785,67789,67793,67805,67815,67831,67841,67845,67849,67863,67873,67883,67887,67891,67897,67911,67915,67919,67927,67937,67941,67945,67954,67964,67968,67976,67984,67988,67996,68010,68024,68036,68044,68083,68115,68147,68179,68211,68219,68227,68241,68275,68309,68343,68377,68411,68419,68427,68435,68440,68445,68464,68469,68489,68497,68502,68515,68536,68549,68553,68558,68563,68576,68596,68624,68628,68632,68636,68644,68652,68656],{"__ignoreMap":23},[28,67374,67375,67377,67379,67381],{"class":30,"line":31},[28,67376,51553],{"class":38},[28,67378,51557],{"class":51556},[28,67380,51560],{"class":2225},[28,67382,51563],{"class":38},[28,67384,67385,67387,67389,67391,67393,67395],{"class":30,"line":48},[28,67386,1307],{"class":38},[28,67388,50891],{"class":51556},[28,67390,51572],{"class":2225},[28,67392,54],{"class":38},[28,67394,51577],{"class":127},[28,67396,51563],{"class":38},[28,67398,67399],{"class":30,"line":84},[28,67400,2662],{"emptyLinePlaceholder":336},[28,67402,67403,67405,67407],{"class":30,"line":91},[28,67404,1307],{"class":38},[28,67406,51590],{"class":51556},[28,67408,51563],{"class":38},[28,67410,67411,67413,67415,67417,67419,67421],{"class":30,"line":97},[28,67412,52400],{"class":38},[28,67414,51600],{"class":51556},[28,67416,51603],{"class":2225},[28,67418,54],{"class":38},[28,67420,51608],{"class":127},[28,67422,59383],{"class":38},[28,67424,67425,67427,67429,67431,67433,67435,67437,67439,67441],{"class":30,"line":103},[28,67426,52400],{"class":38},[28,67428,51600],{"class":51556},[28,67430,51619],{"class":2225},[28,67432,54],{"class":38},[28,67434,51624],{"class":127},[28,67436,51627],{"class":2225},[28,67438,54],{"class":38},[28,67440,51632],{"class":127},[28,67442,59383],{"class":38},[28,67444,67445,67447,67449,67451,67453,67455,67457,67459,67461],{"class":30,"line":109},[28,67446,52400],{"class":38},[28,67448,51600],{"class":51556},[28,67450,15182],{"class":2225},[28,67452,54],{"class":38},[28,67454,51647],{"class":127},[28,67456,51627],{"class":2225},[28,67458,54],{"class":38},[28,67460,51654],{"class":127},[28,67462,59383],{"class":38},[28,67464,67465,67467,67469,67471,67473],{"class":30,"line":118},[28,67466,52400],{"class":38},[28,67468,51663],{"class":51556},[28,67470,63881],{"class":38},[28,67472,51663],{"class":51556},[28,67474,51563],{"class":38},[28,67476,67477,67479,67481],{"class":30,"line":124},[28,67478,52400],{"class":38},[28,67480,328],{"class":51556},[28,67482,51563],{"class":38},[28,67484,67485,67487],{"class":30,"line":131},[28,67486,6665],{"class":51556},[28,67488,15834],{"class":38},[28,67490,67491,67493,67495,67497],{"class":30,"line":137},[28,67492,54962],{"class":60},[28,67494,51693],{"class":38},[28,67496,244],{"class":60},[28,67498,1558],{"class":38},[28,67500,67501,67503,67505,67507],{"class":30,"line":143},[28,67502,54951],{"class":60},[28,67504,51693],{"class":38},[28,67506,244],{"class":60},[28,67508,1558],{"class":38},[28,67510,67511],{"class":30,"line":149},[28,67512,2449],{"class":38},[28,67514,67515],{"class":30,"line":1890},[28,67516,2662],{"emptyLinePlaceholder":336},[28,67518,67519,67521],{"class":30,"line":1904},[28,67520,63932],{"class":2225},[28,67522,15834],{"class":38},[28,67524,67525,67527,67529,67531,67533],{"class":30,"line":1909},[28,67526,55027],{"class":60},[28,67528,51693],{"class":38},[28,67530,63943],{"class":60},[28,67532,51748],{"class":34},[28,67534,1558],{"class":38},[28,67536,67537,67539,67541,67543,67545],{"class":30,"line":1915},[28,67538,55041],{"class":60},[28,67540,51693],{"class":38},[28,67542,63956],{"class":60},[28,67544,51748],{"class":34},[28,67546,1558],{"class":38},[28,67548,67549,67551,67553,67555,67557],{"class":30,"line":1936},[28,67550,54962],{"class":60},[28,67552,51693],{"class":38},[28,67554,1098],{"class":60},[28,67556,51748],{"class":34},[28,67558,1558],{"class":38},[28,67560,67561,67563,67565,67567,67569,67571,67573],{"class":30,"line":1941},[28,67562,62233],{"class":60},[28,67564,51693],{"class":38},[28,67566,61],{"class":60},[28,67568,51748],{"class":34},[28,67570,51777],{"class":60},[28,67572,62500],{"class":60},[28,67574,1558],{"class":38},[28,67576,67577],{"class":30,"line":1955},[28,67578,2449],{"class":38},[28,67580,67581],{"class":30,"line":1960},[28,67582,2662],{"emptyLinePlaceholder":336},[28,67584,67585,67587],{"class":30,"line":1989},[28,67586,64001],{"class":2225},[28,67588,15834],{"class":38},[28,67590,67591,67593,67595,67597,67599],{"class":30,"line":1994},[28,67592,55027],{"class":60},[28,67594,51693],{"class":38},[28,67596,713],{"class":60},[28,67598,729],{"class":34},[28,67600,1558],{"class":38},[28,67602,67603,67605,67607,67609,67611],{"class":30,"line":2011},[28,67604,55041],{"class":60},[28,67606,51693],{"class":38},[28,67608,1304],{"class":60},[28,67610,51748],{"class":34},[28,67612,1558],{"class":38},[28,67614,67615,67617,67619,67621,67623],{"class":30,"line":2016},[28,67616,57615],{"class":60},[28,67618,51693],{"class":38},[28,67620,1304],{"class":60},[28,67622,51748],{"class":34},[28,67624,1558],{"class":38},[28,67626,67627,67629,67631,67633],{"class":30,"line":2021},[28,67628,55265],{"class":60},[28,67630,51693],{"class":38},[28,67632,51733],{"class":60},[28,67634,1558],{"class":38},[28,67636,67637,67639,67641,67643],{"class":30,"line":2026},[28,67638,55276],{"class":60},[28,67640,51693],{"class":38},[28,67642,51924],{"class":60},[28,67644,1558],{"class":38},[28,67646,67647],{"class":30,"line":2040},[28,67648,2449],{"class":38},[28,67650,67651],{"class":30,"line":2045},[28,67652,2662],{"emptyLinePlaceholder":336},[28,67654,67655,67657,67659],{"class":30,"line":2839},[28,67656,64001],{"class":2225},[28,67658,64074],{"class":51556},[28,67660,15834],{"class":38},[28,67662,67663,67665,67667,67669,67671],{"class":30,"line":2853},[28,67664,55178],{"class":60},[28,67666,51693],{"class":38},[28,67668,1198],{"class":60},[28,67670,51748],{"class":34},[28,67672,1558],{"class":38},[28,67674,67675,67677,67679,67681],{"class":30,"line":2861},[28,67676,62590],{"class":60},[28,67678,51693],{"class":38},[28,67680,64097],{"class":60},[28,67682,1558],{"class":38},[28,67684,67685,67687,67689,67691,67693],{"class":30,"line":2866},[28,67686,62256],{"class":60},[28,67688,51693],{"class":38},[28,67690,1098],{"class":60},[28,67692,51748],{"class":34},[28,67694,1558],{"class":38},[28,67696,67697],{"class":30,"line":2872},[28,67698,2449],{"class":38},[28,67700,67701],{"class":30,"line":2878},[28,67702,2662],{"emptyLinePlaceholder":336},[28,67704,67705,67707,67709],{"class":30,"line":2883},[28,67706,64001],{"class":2225},[28,67708,61548],{"class":51556},[28,67710,15834],{"class":38},[28,67712,67713,67715,67717,67719],{"class":30,"line":8210},[28,67714,54988],{"class":60},[28,67716,51693],{"class":38},[28,67718,54993],{"class":60},[28,67720,1558],{"class":38},[28,67722,67723,67725,67727,67729],{"class":30,"line":8234},[28,67724,55265],{"class":60},[28,67726,51693],{"class":38},[28,67728,51733],{"class":60},[28,67730,1558],{"class":38},[28,67732,67733,67735,67737,67739],{"class":30,"line":8239},[28,67734,55276],{"class":60},[28,67736,51693],{"class":38},[28,67738,51836],{"class":60},[28,67740,1558],{"class":38},[28,67742,67743],{"class":30,"line":8245},[28,67744,2449],{"class":38},[28,67746,67747],{"class":30,"line":8272},[28,67748,2662],{"emptyLinePlaceholder":336},[28,67750,67751,67753,67755,67757],{"class":30,"line":8277},[28,67752,64001],{"class":2225},[28,67754,61548],{"class":51556},[28,67756,55331],{"class":51556},[28,67758,15834],{"class":38},[28,67760,67761,67763,67765,67767,67769,67771],{"class":30,"line":8283},[28,67762,54962],{"class":60},[28,67764,51693],{"class":38},[28,67766,244],{"class":60},[28,67768,9212],{"class":60},[28,67770,51748],{"class":34},[28,67772,1558],{"class":38},[28,67774,67775,67777,67779,67781,67783],{"class":30,"line":8295},[28,67776,55178],{"class":60},[28,67778,51693],{"class":38},[28,67780,947],{"class":60},[28,67782,51748],{"class":34},[28,67784,1558],{"class":38},[28,67786,67787],{"class":30,"line":8307},[28,67788,2449],{"class":38},[28,67790,67791],{"class":30,"line":8319},[28,67792,2662],{"emptyLinePlaceholder":336},[28,67794,67795,67797,67799,67801,67803],{"class":30,"line":9978},[28,67796,64001],{"class":2225},[28,67798,61548],{"class":51556},[28,67800,55331],{"class":51556},[28,67802,1663],{"class":51556},[28,67804,15834],{"class":38},[28,67806,67807,67809,67811,67813],{"class":30,"line":10003},[28,67808,64226],{"class":60},[28,67810,51693],{"class":38},[28,67812,54993],{"class":60},[28,67814,1558],{"class":38},[28,67816,67817,67819,67821,67823,67825,67827,67829],{"class":30,"line":10026},[28,67818,62488],{"class":60},[28,67820,51693],{"class":38},[28,67822,211],{"class":60},[28,67824,51748],{"class":34},[28,67826,51777],{"class":60},[28,67828,64247],{"class":60},[28,67830,1558],{"class":38},[28,67832,67833,67835,67837,67839],{"class":30,"line":10050},[28,67834,57672],{"class":60},[28,67836,51693],{"class":38},[28,67838,62625],{"class":60},[28,67840,1558],{"class":38},[28,67842,67843],{"class":30,"line":10055},[28,67844,2449],{"class":38},[28,67846,67847],{"class":30,"line":10060},[28,67848,2662],{"emptyLinePlaceholder":336},[28,67850,67851,67853,67855,67857,67859,67861],{"class":30,"line":10065},[28,67852,64001],{"class":2225},[28,67854,61548],{"class":51556},[28,67856,55331],{"class":51556},[28,67858,1663],{"class":51556},[28,67860,64280],{"class":2225},[28,67862,15834],{"class":38},[28,67864,67865,67867,67869,67871],{"class":30,"line":10074},[28,67866,62047],{"class":60},[28,67868,51693],{"class":38},[28,67870,64291],{"class":60},[28,67872,1558],{"class":38},[28,67874,67875,67877,67879,67881],{"class":30,"line":10079},[28,67876,57672],{"class":60},[28,67878,51693],{"class":38},[28,67880,64291],{"class":60},[28,67882,1558],{"class":38},[28,67884,67885],{"class":30,"line":10085},[28,67886,2449],{"class":38},[28,67888,67889],{"class":30,"line":10106},[28,67890,2662],{"emptyLinePlaceholder":336},[28,67892,67893,67895],{"class":30,"line":10112},[28,67894,64316],{"class":2225},[28,67896,15834],{"class":38},[28,67898,67899,67901,67903,67905,67907,67909],{"class":30,"line":10126},[28,67900,54951],{"class":60},[28,67902,51693],{"class":38},[28,67904,244],{"class":60},[28,67906,64329],{"class":60},[28,67908,51748],{"class":34},[28,67910,1558],{"class":38},[28,67912,67913],{"class":30,"line":10132},[28,67914,2449],{"class":38},[28,67916,67917],{"class":30,"line":10159},[28,67918,2662],{"emptyLinePlaceholder":336},[28,67920,67921,67923,67925],{"class":30,"line":10168},[28,67922,64316],{"class":2225},[28,67924,62430],{"class":2225},[28,67926,15834],{"class":38},[28,67928,67929,67931,67933,67935],{"class":30,"line":10174},[28,67930,55265],{"class":60},[28,67932,51693],{"class":38},[28,67934,54993],{"class":60},[28,67936,1558],{"class":38},[28,67938,67939],{"class":30,"line":10182},[28,67940,2449],{"class":38},[28,67942,67943],{"class":30,"line":10187},[28,67944,2662],{"emptyLinePlaceholder":336},[28,67946,67947,67949,67952],{"class":30,"line":16866},[28,67948,64316],{"class":2225},[28,67950,67951],{"class":2225}," .active",[28,67953,15834],{"class":38},[28,67955,67956,67958,67960,67962],{"class":30,"line":16872},[28,67957,55265],{"class":60},[28,67959,51693],{"class":38},[28,67961,61125],{"class":60},[28,67963,1558],{"class":38},[28,67965,67966],{"class":30,"line":16895},[28,67967,2449],{"class":38},[28,67969,67970,67972,67974],{"class":30,"line":16901},[28,67971,52673],{"class":38},[28,67973,328],{"class":51556},[28,67975,51563],{"class":38},[28,67977,67978,67980,67982],{"class":30,"line":16924},[28,67979,52041],{"class":38},[28,67981,51590],{"class":51556},[28,67983,51563],{"class":38},[28,67985,67986],{"class":30,"line":16938},[28,67987,2662],{"emptyLinePlaceholder":336},[28,67989,67990,67992,67994],{"class":30,"line":16958},[28,67991,1307],{"class":38},[28,67993,52056],{"class":51556},[28,67995,51563],{"class":38},[28,67997,67998,68000,68002,68004,68006,68008],{"class":30,"line":16964},[28,67999,52400],{"class":38},[28,68001,51867],{"class":51556},[28,68003,53742],{"class":2225},[28,68005,54],{"class":38},[28,68007,64431],{"class":127},[28,68009,51563],{"class":38},[28,68011,68012,68014,68016,68018,68020,68022],{"class":30,"line":16975},[28,68013,51597],{"class":38},[28,68015,51867],{"class":51556},[28,68017,53742],{"class":2225},[28,68019,54],{"class":38},[28,68021,64446],{"class":127},[28,68023,51563],{"class":38},[28,68025,68026,68028,68030,68032,68034],{"class":30,"line":16998},[28,68027,55490],{"class":38},[28,68029,380],{"class":51556},[28,68031,64457],{"class":38},[28,68033,380],{"class":51556},[28,68035,51563],{"class":38},[28,68037,68038,68040,68042],{"class":30,"line":17020},[28,68039,55490],{"class":38},[28,68041,1404],{"class":51556},[28,68043,51563],{"class":38},[28,68045,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070,68073,68075,68077,68079,68081],{"class":30,"line":17025},[28,68047,55558],{"class":38},[28,68049,366],{"class":51556},[28,68051,61308],{"class":38},[28,68053,51],{"class":51556},[28,68055,53742],{"class":2225},[28,68057,54],{"class":38},[28,68059,59962],{"class":127},[28,68061,61313],{"class":2225},[28,68063,54],{"class":38},[28,68065,64492],{"class":127},[28,68067,54207],{"class":2225},[28,68069,54],{"class":38},[28,68071,68072],{"class":127},"\"0\"",[28,68074,64495],{"class":38},[28,68076,51],{"class":51556},[28,68078,55570],{"class":38},[28,68080,366],{"class":51556},[28,68082,51563],{"class":38},[28,68084,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111,68113],{"class":30,"line":17031},[28,68086,55558],{"class":38},[28,68088,366],{"class":51556},[28,68090,61308],{"class":38},[28,68092,51],{"class":51556},[28,68094,61313],{"class":2225},[28,68096,54],{"class":38},[28,68098,64492],{"class":127},[28,68100,54207],{"class":2225},[28,68102,54],{"class":38},[28,68104,3940],{"class":127},[28,68106,64522],{"class":38},[28,68108,51],{"class":51556},[28,68110,55570],{"class":38},[28,68112,366],{"class":51556},[28,68114,51563],{"class":38},[28,68116,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145],{"class":30,"line":17045},[28,68118,55558],{"class":38},[28,68120,366],{"class":51556},[28,68122,61308],{"class":38},[28,68124,51],{"class":51556},[28,68126,61313],{"class":2225},[28,68128,54],{"class":38},[28,68130,64492],{"class":127},[28,68132,54207],{"class":2225},[28,68134,54],{"class":38},[28,68136,3963],{"class":127},[28,68138,64549],{"class":38},[28,68140,51],{"class":51556},[28,68142,55570],{"class":38},[28,68144,366],{"class":51556},[28,68146,51563],{"class":38},[28,68148,68149,68151,68153,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177],{"class":30,"line":17058},[28,68150,55558],{"class":38},[28,68152,366],{"class":51556},[28,68154,61308],{"class":38},[28,68156,51],{"class":51556},[28,68158,61313],{"class":2225},[28,68160,54],{"class":38},[28,68162,64492],{"class":127},[28,68164,54207],{"class":2225},[28,68166,54],{"class":38},[28,68168,3976],{"class":127},[28,68170,64576],{"class":38},[28,68172,51],{"class":51556},[28,68174,55570],{"class":38},[28,68176,366],{"class":51556},[28,68178,51563],{"class":38},[28,68180,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209],{"class":30,"line":17063},[28,68182,55558],{"class":38},[28,68184,366],{"class":51556},[28,68186,61308],{"class":38},[28,68188,51],{"class":51556},[28,68190,61313],{"class":2225},[28,68192,54],{"class":38},[28,68194,64492],{"class":127},[28,68196,54207],{"class":2225},[28,68198,54],{"class":38},[28,68200,3989],{"class":127},[28,68202,64603],{"class":38},[28,68204,51],{"class":51556},[28,68206,55570],{"class":38},[28,68208,366],{"class":51556},[28,68210,51563],{"class":38},[28,68212,68213,68215,68217],{"class":30,"line":17077},[28,68214,55663],{"class":38},[28,68216,1404],{"class":51556},[28,68218,51563],{"class":38},[28,68220,68221,68223,68225],{"class":30,"line":17082},[28,68222,52032],{"class":38},[28,68224,51867],{"class":51556},[28,68226,51563],{"class":38},[28,68228,68229,68231,68233,68235,68237,68239],{"class":30,"line":17088},[28,68230,51597],{"class":38},[28,68232,51867],{"class":51556},[28,68234,53742],{"class":2225},[28,68236,54],{"class":38},[28,68238,64640],{"class":127},[28,68240,51563],{"class":38},[28,68242,68243,68245,68247,68249,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269,68271,68273],{"class":30,"line":17093},[28,68244,55490],{"class":38},[28,68246,51867],{"class":51556},[28,68248,53742],{"class":2225},[28,68250,54],{"class":38},[28,68252,64655],{"class":127},[28,68254,61308],{"class":38},[28,68256,1727],{"class":51556},[28,68258,55495],{"class":2225},[28,68260,54],{"class":38},[28,68262,64666],{"class":127},[28,68264,55503],{"class":2225},[28,68266,54],{"class":38},[28,68268,7914],{"class":127},[28,68270,64675],{"class":38},[28,68272,51867],{"class":51556},[28,68274,51563],{"class":38},[28,68276,68277,68279,68281,68283,68285,68287,68289,68291,68293,68295,68297,68299,68301,68303,68305,68307],{"class":30,"line":17107},[28,68278,55490],{"class":38},[28,68280,51867],{"class":51556},[28,68282,53742],{"class":2225},[28,68284,54],{"class":38},[28,68286,62879],{"class":127},[28,68288,61308],{"class":38},[28,68290,1727],{"class":51556},[28,68292,55495],{"class":2225},[28,68294,54],{"class":38},[28,68296,64702],{"class":127},[28,68298,55503],{"class":2225},[28,68300,54],{"class":38},[28,68302,7914],{"class":127},[28,68304,64675],{"class":38},[28,68306,51867],{"class":51556},[28,68308,51563],{"class":38},[28,68310,68311,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341],{"class":30,"line":17112},[28,68312,55490],{"class":38},[28,68314,51867],{"class":51556},[28,68316,53742],{"class":2225},[28,68318,54],{"class":38},[28,68320,62879],{"class":127},[28,68322,61308],{"class":38},[28,68324,1727],{"class":51556},[28,68326,55495],{"class":2225},[28,68328,54],{"class":38},[28,68330,64737],{"class":127},[28,68332,55503],{"class":2225},[28,68334,54],{"class":38},[28,68336,7914],{"class":127},[28,68338,64675],{"class":38},[28,68340,51867],{"class":51556},[28,68342,51563],{"class":38},[28,68344,68345,68347,68349,68351,68353,68355,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375],{"class":30,"line":17117},[28,68346,55490],{"class":38},[28,68348,51867],{"class":51556},[28,68350,53742],{"class":2225},[28,68352,54],{"class":38},[28,68354,62879],{"class":127},[28,68356,61308],{"class":38},[28,68358,1727],{"class":51556},[28,68360,55495],{"class":2225},[28,68362,54],{"class":38},[28,68364,64772],{"class":127},[28,68366,55503],{"class":2225},[28,68368,54],{"class":38},[28,68370,7914],{"class":127},[28,68372,64675],{"class":38},[28,68374,51867],{"class":51556},[28,68376,51563],{"class":38},[28,68378,68379,68381,68383,68385,68387,68389,68391,68393,68395,68397,68399,68401,68403,68405,68407,68409],{"class":30,"line":17131},[28,68380,55490],{"class":38},[28,68382,51867],{"class":51556},[28,68384,53742],{"class":2225},[28,68386,54],{"class":38},[28,68388,62879],{"class":127},[28,68390,61308],{"class":38},[28,68392,1727],{"class":51556},[28,68394,55495],{"class":2225},[28,68396,54],{"class":38},[28,68398,64807],{"class":127},[28,68400,55503],{"class":2225},[28,68402,54],{"class":38},[28,68404,7914],{"class":127},[28,68406,64675],{"class":38},[28,68408,51867],{"class":51556},[28,68410,51563],{"class":38},[28,68412,68413,68415,68417],{"class":30,"line":17143},[28,68414,52032],{"class":38},[28,68416,51867],{"class":51556},[28,68418,51563],{"class":38},[28,68420,68421,68423,68425],{"class":30,"line":17148},[28,68422,52673],{"class":38},[28,68424,51867],{"class":51556},[28,68426,51563],{"class":38},[28,68428,68429,68431,68433],{"class":30,"line":17161},[28,68430,52400],{"class":38},[28,68432,52069],{"class":51556},[28,68434,51563],{"class":38},[28,68436,68437],{"class":30,"line":17166},[28,68438,68439],{"class":87},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[28,68441,68442],{"class":30,"line":17171},[28,68443,68444],{"class":87},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[28,68446,68447,68449,68451,68453,68455,68457,68459,68462],{"class":30,"line":17176},[28,68448,11483],{"class":34},[28,68450,61548],{"class":60},[28,68452,13826],{"class":34},[28,68454,54652],{"class":38},[28,68456,54655],{"class":2225},[28,68458,413],{"class":38},[28,68460,68461],{"class":127},"'.tab-nav ul'",[28,68463,81],{"class":38},[28,68465,68466],{"class":30,"line":17189},[28,68467,68468],{"class":87},"    \u002F\u002F 2.添加事件\n",[28,68470,68471,68473,68475,68477,68479,68481,68483,68485,68487],{"class":30,"line":17194},[28,68472,67210],{"class":38},[28,68474,58069],{"class":2225},[28,68476,413],{"class":38},[28,68478,58074],{"class":127},[28,68480,12697],{"class":38},[28,68482,54705],{"class":34},[28,68484,1920],{"class":38},[28,68486,482],{"class":5478},[28,68488,12704],{"class":38},[28,68490,68491,68493,68495],{"class":30,"line":32889},[28,68492,58500],{"class":38},[28,68494,67266],{"class":2225},[28,68496,67269],{"class":38},[28,68498,68499],{"class":30,"line":32895},[28,68500,68501],{"class":87},"      \u002F\u002Fe.targer是我们点击的对象\n",[28,68503,68504,68506,68508,68510,68513],{"class":30,"line":32901},[28,68505,54736],{"class":34},[28,68507,67290],{"class":38},[28,68509,54742],{"class":34},[28,68511,68512],{"class":127}," 'A'",[28,68514,12704],{"class":38},[28,68516,68517,68519,68521,68523,68526,68528,68530,68532,68534],{"class":30,"line":32907},[28,68518,52181],{"class":38},[28,68520,54655],{"class":2225},[28,68522,413],{"class":38},[28,68524,68525],{"class":127},"'.active'",[28,68527,57259],{"class":38},[28,68529,57262],{"class":2225},[28,68531,413],{"class":38},[28,68533,64970],{"class":127},[28,68535,81],{"class":38},[28,68537,68538,68541,68543,68545,68547],{"class":30,"line":32913},[28,68539,68540],{"class":38},"        e.target.classList.",[28,68542,5596],{"class":2225},[28,68544,413],{"class":38},[28,68546,64970],{"class":127},[28,68548,81],{"class":38},[28,68550,68551],{"class":30,"line":32924},[28,68552,2662],{"emptyLinePlaceholder":336},[28,68554,68555],{"class":30,"line":32930},[28,68556,68557],{"class":87},"        \u002F\u002F 下面大盒子模块\n",[28,68559,68560],{"class":30,"line":32950},[28,68561,68562],{"class":87},"        \u002F\u002F console.log(e.target.dataset.id)\n",[28,68564,68565,68567,68569,68571,68573],{"class":30,"line":32956},[28,68566,61526],{"class":34},[28,68568,3294],{"class":60},[28,68570,13826],{"class":34},[28,68572,45822],{"class":34},[28,68574,68575],{"class":38},"e.target.dataset.id\n",[28,68577,68578,68580,68582,68584,68586,68588,68590,68592,68594],{"class":30,"line":32967},[28,68579,52181],{"class":38},[28,68581,54655],{"class":2225},[28,68583,413],{"class":38},[28,68585,65018],{"class":127},[28,68587,57259],{"class":38},[28,68589,57262],{"class":2225},[28,68591,413],{"class":38},[28,68593,64970],{"class":127},[28,68595,81],{"class":38},[28,68597,68598,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618,68620,68622],{"class":30,"line":32973},[28,68599,52181],{"class":38},[28,68601,54655],{"class":2225},[28,68603,413],{"class":38},[28,68605,65044],{"class":127},[28,68607,840],{"class":38},[28,68609,45822],{"class":34},[28,68611,25381],{"class":60},[28,68613,57288],{"class":127},[28,68615,57259],{"class":38},[28,68617,5596],{"class":2225},[28,68619,413],{"class":38},[28,68621,64970],{"class":127},[28,68623,81],{"class":38},[28,68625,68626],{"class":30,"line":32979},[28,68627,2662],{"emptyLinePlaceholder":336},[28,68629,68630],{"class":30,"line":32985},[28,68631,52654],{"class":38},[28,68633,68634],{"class":30,"line":32991},[28,68635,33717],{"class":38},[28,68637,68638,68640,68642],{"class":30,"line":32997},[28,68639,52673],{"class":38},[28,68641,52069],{"class":51556},[28,68643,51563],{"class":38},[28,68645,68646,68648,68650],{"class":30,"line":33003},[28,68647,52041],{"class":38},[28,68649,52056],{"class":51556},[28,68651,51563],{"class":38},[28,68653,68654],{"class":30,"line":33009},[28,68655,2662],{"emptyLinePlaceholder":336},[28,68657,68658,68660,68662],{"class":30,"line":33029},[28,68659,52041],{"class":38},[28,68661,50891],{"class":51556},[28,68663,51563],{"class":38},[380,68665,68667],{"id":68666},"_333-页面加载事件","3.3.3 页面加载事件",[363,68669,68670],{},[366,68671,68672],{},"load",[14,68674,68675],{},[1727,68676],{"alt":23,"src":68677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68679,68680],{},"window代表整个窗口，比document还要大",[14,68682,68683],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68685,68686],{},"img.addEventListener('load', function () {",[14,68688,68689],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68691,52720],{},[363,68693,68694],{"start":48},[366,68695,68696],{},"DOMContentLoaded",[14,68698,68699],{},[1727,68700],{"alt":23,"src":68701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68703,68704],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[380,68706,68708],{"id":68707},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68710,68711],{},[1727,68712],{"alt":23,"src":68713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68715,68716],{},[1727,68717],{"alt":23,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68720,68721],{},[1727,68722],{"alt":23,"src":68723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68725,68726],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68728,68729],{},"获得的是数字型数据，不带单位",[14,68731,68732],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68734,68735],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68737,68738],{},"它是通过document.documentElement来获取",[14,68740,68741],{},[1727,68742],{"alt":23,"src":68743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68745,68746],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[380,68748,68750],{"id":68749},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68752,68753],{},[1727,68754],{"alt":23,"src":68755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68757,68758],{},[1727,68759],{"alt":23,"src":68760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[380,68762,68764],{"id":68763},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68766,68767],{},[1727,68768],{"alt":23,"src":68769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68771,68772],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68774,68775],{},[1727,68776],{"alt":23,"src":68777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68779,68780],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68782,68783],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68785,68786],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68788,68789],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68791,68792],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68794,68795],{},[1727,68796],{"alt":23,"src":68797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68799,68800],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68802,68803],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68805,68806],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68808,68809],{},"e.pageX-box.getBoundingClientRect()",[380,68811,68813],{"id":68812},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68815,68816],{},[1727,68817],{"alt":23,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68820,68821],{},"这个是相对于视口来说的，它是个方法，不是属性值",[380,68823,68825],{"id":68824},"_338-总结","3.3.8 总结",[14,68827,68828],{},[1727,68829],{"alt":23,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68832,68833],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68835,68836],{},"修改盒子的宽高只能通过width和height来实现",[380,68838,68840],{"id":68839},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[18,68842,68844],{"className":50889,"code":68843,"language":50891,"meta":23,"style":23},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[25,68845,68846,68851,68856,68861,68866],{"__ignoreMap":23},[28,68847,68848],{"class":30,"line":31},[28,68849,68850],{"class":38},"\u002F* 页面滑动 *\u002F\n",[28,68852,68853],{"class":30,"line":48},[28,68854,68855],{"class":38},"html {\n",[28,68857,68858],{"class":30,"line":84},[28,68859,68860],{"class":38},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[28,68862,68863],{"class":30,"line":91},[28,68864,68865],{"class":38},"  scroll-behavior: smooth;\n",[28,68867,68868],{"class":30,"line":97},[28,68869,1830],{"class":38},[14,68871,68872],{},"默认是auto",[380,68874,68876],{"id":68875},"_3310-日期对象","3.3.10 日期对象",[22260,68878,68880],{"id":68879},"_33101-实例化","3.3.10.1 实例化",[14,68882,68883],{},[1727,68884],{"alt":23,"src":68885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22260,68887,68889],{"id":68888},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68891,68892],{},[1727,68893],{"alt":23,"src":68894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68896,68897],{},"月份+1",[14,68899,68900],{},"老外认为第一天为0，星期天",[14,68902,68903],{},"方法使用的时候必须要跟括号",[14,68905,68906],{},"快速获得日期",[14,68908,68909],{},"\u002F\u002F 得到年月日",[14,68911,68912],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68914,68915],{},"\u002F\u002F 得到当地日期",[14,68917,68918],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68920,68921],{},"\u002F\u002F 得到当地时间",[14,68923,68924],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68926,68927],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68929,68930],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52069,68932,68933],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68935,68936],{},"学会去封装函数！",[22260,68938,68940],{"id":68939},"_33103-时间戳","3.3.10.3 时间戳",[14,68942,68943],{},[1727,68944],{"alt":23,"src":68945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68947,68948],{},[1727,68949],{"alt":23,"src":68950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68952,68953],{},"三种方法记住一个就可以",[380,68955,68957],{"id":68956},"_3311-节点操作","3.3.11 节点操作",[22260,68959,68961],{"id":68960},"_33111-dom节点","3.3.11.1 DOM节点",[14,68963,68964],{},[1727,68965],{"alt":23,"src":68966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68968,68969],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22260,68971,68973],{"id":68972},"_33112-查找节点","3.3.11.2 查找节点",[14,68975,68976],{},"前边的document.querySelector()是获取的元素",[14,68978,68979],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68981,68982],{},[1727,68983],{"alt":23,"src":68984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[363,68986,68987],{},[366,68988,68989],{},"父节点",[14,68991,68992],{},[1727,68993],{"alt":23,"src":68994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[363,68996,68997],{"start":48},[366,68998,68999],{},"子节点",[14,69001,69002],{},[1727,69003],{"alt":23,"src":69004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69006,69007],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69009,69010],{},"children获得的是伪数组，是亲儿子",[363,69012,69013],{"start":84},[366,69014,69015],{},"兄弟节点",[14,69017,69018],{},[1727,69019],{"alt":23,"src":69020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22260,69022,69024],{"id":69023},"_33113-增加节点","3.3.11.3 增加节点",[14,69026,69027],{},[1727,69028],{"alt":23,"src":69029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69031,69032],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69034,69035],{},[1727,69036],{"alt":23,"src":69037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69039,69040],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69042,69043],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69045,69046],{},"例：",[52069,69048,69049],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,69051,69052],{},[1727,69053],{"alt":23,"src":69054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69056,69057],{},"false只克隆标签，里边的内容不会克隆过来",[18,69059,69061],{"className":50889,"code":69060,"language":50891,"meta":23,"style":23},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[25,69062,69063],{"__ignoreMap":23},[28,69064,69065],{"class":30,"line":31},[28,69066,69060],{"class":38},[22260,69068,69070],{"id":69069},"_33114-删除节点","3.3.11.4 删除节点",[14,69072,69073],{},[1727,69074],{"alt":23,"src":69075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69077,69078],{},"父亲删儿子",[14,69080,69081],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[380,69083,69085],{"id":69084},"_3312-m端事件","3.3.12 M端事件",[14,69087,69088],{},"M端就是移动端",[14,69090,69091],{},[1727,69092],{"alt":23,"src":69093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[380,69095,69097],{"id":69096},"_3313-插件","3.3.13 插件",[14,69099,69100],{},"要熟悉官网！！！",[14,69102,69103],{},[51,69104,69105],{"href":69105,"rel":69106},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24127],[14,69108,69109],{},[51,69110,69111],{"href":69111,"rel":69112},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24127],[380,69114,69116],{"id":69115},"_3314-学生信息表","3.3.14 学生信息表",[363,69118,69119,69122,69125,69128,69131,69134,69137,69140],{},[366,69120,69121],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[366,69123,69124],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[366,69126,69127],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[366,69129,69130],{},"用好表单元素自带的属性，value,name等",[366,69132,69133],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[366,69135,69136],{},"不要忘记事件对象",[366,69138,69139],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[366,69141,69142],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69144,69145],{},"结构：",[18,69147,69149],{"className":50889,"code":69148,"language":50891,"meta":23,"style":23},"\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",[25,69150,69151,69161,69175,69179,69187,69201,69221,69242,69255,69279,69287,69291,69299,69312,69333,69361,69389,69394,69416,69436,69455,69463,69491,69513,69533,69553,69573,69593,69613,69621,69641,69649,69653,69666,69674,69682,69690,69703,69716,69729,69742,69755,69768,69781,69789,69797,69805,69810,69815,69820,69825,69830,69835,69840,69845,69850,69855,69860,69865,69870,69878,69886,69894,69898,69918,69937,69957,69977,69997,70017,70021,70026,70046,70051,70061,70066,70071,70091,70113,70118,70128,70132,70136,70141,70146,70175,70189,70204,70208,70212,70216,70221,70232,70245,70250,70255,70260,70265,70270,70274,70279,70284,70293,70298,70303,70315,70320,70327,70331,70336,70346,70351,70361,70366,70394,70415,70425,70445,70463,70480,70497,70514,70531,70535,70545,70550,70555,70560,70571,70575,70579,70583,70588,70593,70614,70626,70631,70636,70641,70655,70660,70667,70671,70675,70683,70687,70695,70699],{"__ignoreMap":23},[28,69152,69153,69155,69157,69159],{"class":30,"line":31},[28,69154,51553],{"class":38},[28,69156,51557],{"class":51556},[28,69158,51560],{"class":2225},[28,69160,51563],{"class":38},[28,69162,69163,69165,69167,69169,69171,69173],{"class":30,"line":48},[28,69164,1307],{"class":38},[28,69166,50891],{"class":51556},[28,69168,51572],{"class":2225},[28,69170,54],{"class":38},[28,69172,51577],{"class":127},[28,69174,51563],{"class":38},[28,69176,69177],{"class":30,"line":84},[28,69178,2662],{"emptyLinePlaceholder":336},[28,69180,69181,69183,69185],{"class":30,"line":91},[28,69182,1307],{"class":38},[28,69184,51590],{"class":51556},[28,69186,51563],{"class":38},[28,69188,69189,69191,69193,69195,69197,69199],{"class":30,"line":97},[28,69190,52400],{"class":38},[28,69192,51600],{"class":51556},[28,69194,51603],{"class":2225},[28,69196,54],{"class":38},[28,69198,51608],{"class":127},[28,69200,59383],{"class":38},[28,69202,69203,69205,69207,69209,69211,69213,69215,69217,69219],{"class":30,"line":103},[28,69204,52400],{"class":38},[28,69206,51600],{"class":51556},[28,69208,15182],{"class":2225},[28,69210,54],{"class":38},[28,69212,51647],{"class":127},[28,69214,51627],{"class":2225},[28,69216,54],{"class":38},[28,69218,51654],{"class":127},[28,69220,59383],{"class":38},[28,69222,69223,69225,69227,69229,69231,69233,69235,69237,69240],{"class":30,"line":109},[28,69224,52400],{"class":38},[28,69226,51600],{"class":51556},[28,69228,51619],{"class":2225},[28,69230,54],{"class":38},[28,69232,51624],{"class":127},[28,69234,51627],{"class":2225},[28,69236,54],{"class":38},[28,69238,69239],{"class":127},"\"ie=edge\"",[28,69241,59383],{"class":38},[28,69243,69244,69246,69248,69251,69253],{"class":30,"line":118},[28,69245,52400],{"class":38},[28,69247,51663],{"class":51556},[28,69249,69250],{"class":38},">学生信息管理\u003C\u002F",[28,69252,51663],{"class":51556},[28,69254,51563],{"class":38},[28,69256,69257,69259,69262,69265,69267,69270,69272,69274,69277],{"class":30,"line":124},[28,69258,52400],{"class":38},[28,69260,69261],{"class":51556},"link",[28,69263,69264],{"class":2225}," rel",[28,69266,54],{"class":38},[28,69268,69269],{"class":127},"\"stylesheet\"",[28,69271,61313],{"class":2225},[28,69273,54],{"class":38},[28,69275,69276],{"class":127},"\"css\u002Findex.css\"",[28,69278,59383],{"class":38},[28,69280,69281,69283,69285],{"class":30,"line":131},[28,69282,52041],{"class":38},[28,69284,51590],{"class":51556},[28,69286,51563],{"class":38},[28,69288,69289],{"class":30,"line":137},[28,69290,2662],{"emptyLinePlaceholder":336},[28,69292,69293,69295,69297],{"class":30,"line":143},[28,69294,1307],{"class":38},[28,69296,52056],{"class":51556},[28,69298,51563],{"class":38},[28,69300,69301,69303,69305,69308,69310],{"class":30,"line":149},[28,69302,52400],{"class":38},[28,69304,10],{"class":51556},[28,69306,69307],{"class":38},">新增学员\u003C\u002F",[28,69309,10],{"class":51556},[28,69311,51563],{"class":38},[28,69313,69314,69316,69318,69320,69322,69324,69327,69329,69331],{"class":30,"line":1890},[28,69315,52400],{"class":38},[28,69317,66881],{"class":51556},[28,69319,53742],{"class":2225},[28,69321,54],{"class":38},[28,69323,62920],{"class":127},[28,69325,69326],{"class":2225}," autocomplete",[28,69328,54],{"class":38},[28,69330,32032],{"class":127},[28,69332,51563],{"class":38},[28,69334,69335,69338,69340,69342,69344,69346,69348,69350,69353,69355,69357,69359],{"class":30,"line":1904},[28,69336,69337],{"class":38},"    姓名：\u003C",[28,69339,54077],{"class":51556},[28,69341,54080],{"class":2225},[28,69343,54],{"class":38},[28,69345,62955],{"class":127},[28,69347,53742],{"class":2225},[28,69349,54],{"class":38},[28,69351,69352],{"class":127},"\"uname\"",[28,69354,15182],{"class":2225},[28,69356,54],{"class":38},[28,69358,69352],{"class":127},[28,69360,59383],{"class":38},[28,69362,69363,69366,69368,69370,69372,69374,69376,69378,69381,69383,69385,69387],{"class":30,"line":1909},[28,69364,69365],{"class":38},"    年龄：\u003C",[28,69367,54077],{"class":51556},[28,69369,54080],{"class":2225},[28,69371,54],{"class":38},[28,69373,62955],{"class":127},[28,69375,53742],{"class":2225},[28,69377,54],{"class":38},[28,69379,69380],{"class":127},"\"age\"",[28,69382,15182],{"class":2225},[28,69384,54],{"class":38},[28,69386,69380],{"class":127},[28,69388,59383],{"class":38},[28,69390,69391],{"class":30,"line":1915},[28,69392,69393],{"class":38},"    性别:\n",[28,69395,69396,69398,69401,69403,69405,69408,69410,69412,69414],{"class":30,"line":1936},[28,69397,51597],{"class":38},[28,69399,69400],{"class":51556},"select",[28,69402,15182],{"class":2225},[28,69404,54],{"class":38},[28,69406,69407],{"class":127},"\"gender\"",[28,69409,53742],{"class":2225},[28,69411,54],{"class":38},[28,69413,69407],{"class":127},[28,69415,51563],{"class":38},[28,69417,69418,69420,69423,69425,69427,69429,69432,69434],{"class":30,"line":1941},[28,69419,55490],{"class":38},[28,69421,69422],{"class":51556},"option",[28,69424,66907],{"class":2225},[28,69426,54],{"class":38},[28,69428,10223],{"class":127},[28,69430,69431],{"class":38},">男\u003C\u002F",[28,69433,69422],{"class":51556},[28,69435,51563],{"class":38},[28,69437,69438,69440,69442,69444,69446,69448,69451,69453],{"class":30,"line":1955},[28,69439,55490],{"class":38},[28,69441,69422],{"class":51556},[28,69443,66907],{"class":2225},[28,69445,54],{"class":38},[28,69447,10292],{"class":127},[28,69449,69450],{"class":38},">女\u003C\u002F",[28,69452,69422],{"class":51556},[28,69454,51563],{"class":38},[28,69456,69457,69459,69461],{"class":30,"line":1960},[28,69458,52032],{"class":38},[28,69460,69400],{"class":51556},[28,69462,51563],{"class":38},[28,69464,69465,69468,69470,69472,69474,69476,69478,69480,69483,69485,69487,69489],{"class":30,"line":1989},[28,69466,69467],{"class":38},"    薪资：\u003C",[28,69469,54077],{"class":51556},[28,69471,54080],{"class":2225},[28,69473,54],{"class":38},[28,69475,62955],{"class":127},[28,69477,53742],{"class":2225},[28,69479,54],{"class":38},[28,69481,69482],{"class":127},"\"salary\"",[28,69484,15182],{"class":2225},[28,69486,54],{"class":38},[28,69488,69482],{"class":127},[28,69490,59383],{"class":38},[28,69492,69493,69496,69498,69500,69502,69505,69507,69509,69511],{"class":30,"line":1994},[28,69494,69495],{"class":38},"    就业城市：\u003C",[28,69497,69400],{"class":51556},[28,69499,15182],{"class":2225},[28,69501,54],{"class":38},[28,69503,69504],{"class":127},"\"city\"",[28,69506,53742],{"class":2225},[28,69508,54],{"class":38},[28,69510,69504],{"class":127},[28,69512,51563],{"class":38},[28,69514,69515,69517,69519,69521,69523,69526,69529,69531],{"class":30,"line":2011},[28,69516,55490],{"class":38},[28,69518,69422],{"class":51556},[28,69520,66907],{"class":2225},[28,69522,54],{"class":38},[28,69524,69525],{"class":127},"\"北京\"",[28,69527,69528],{"class":38},">北京\u003C\u002F",[28,69530,69422],{"class":51556},[28,69532,51563],{"class":38},[28,69534,69535,69537,69539,69541,69543,69546,69549,69551],{"class":30,"line":2016},[28,69536,55490],{"class":38},[28,69538,69422],{"class":51556},[28,69540,66907],{"class":2225},[28,69542,54],{"class":38},[28,69544,69545],{"class":127},"\"上海\"",[28,69547,69548],{"class":38},">上海\u003C\u002F",[28,69550,69422],{"class":51556},[28,69552,51563],{"class":38},[28,69554,69555,69557,69559,69561,69563,69566,69569,69571],{"class":30,"line":2021},[28,69556,55490],{"class":38},[28,69558,69422],{"class":51556},[28,69560,66907],{"class":2225},[28,69562,54],{"class":38},[28,69564,69565],{"class":127},"\"广州\"",[28,69567,69568],{"class":38},">广州\u003C\u002F",[28,69570,69422],{"class":51556},[28,69572,51563],{"class":38},[28,69574,69575,69577,69579,69581,69583,69586,69589,69591],{"class":30,"line":2026},[28,69576,55490],{"class":38},[28,69578,69422],{"class":51556},[28,69580,66907],{"class":2225},[28,69582,54],{"class":38},[28,69584,69585],{"class":127},"\"深圳\"",[28,69587,69588],{"class":38},">深圳\u003C\u002F",[28,69590,69422],{"class":51556},[28,69592,51563],{"class":38},[28,69594,69595,69597,69599,69601,69603,69606,69609,69611],{"class":30,"line":2040},[28,69596,55490],{"class":38},[28,69598,69422],{"class":51556},[28,69600,66907],{"class":2225},[28,69602,54],{"class":38},[28,69604,69605],{"class":127},"\"曹县\"",[28,69607,69608],{"class":38},">曹县\u003C\u002F",[28,69610,69422],{"class":51556},[28,69612,51563],{"class":38},[28,69614,69615,69617,69619],{"class":30,"line":2045},[28,69616,52032],{"class":38},[28,69618,69400],{"class":51556},[28,69620,51563],{"class":38},[28,69622,69623,69625,69627,69629,69631,69634,69637,69639],{"class":30,"line":2839},[28,69624,51597],{"class":38},[28,69626,54143],{"class":51556},[28,69628,53742],{"class":2225},[28,69630,54],{"class":38},[28,69632,69633],{"class":127},"\"add\"",[28,69635,69636],{"class":38},">录入\u003C\u002F",[28,69638,54143],{"class":51556},[28,69640,51563],{"class":38},[28,69642,69643,69645,69647],{"class":30,"line":2853},[28,69644,52673],{"class":38},[28,69646,66881],{"class":51556},[28,69648,51563],{"class":38},[28,69650,69651],{"class":30,"line":2861},[28,69652,2662],{"emptyLinePlaceholder":336},[28,69654,69655,69657,69659,69662,69664],{"class":30,"line":2866},[28,69656,52400],{"class":38},[28,69658,10],{"class":51556},[28,69660,69661],{"class":38},">就业榜\u003C\u002F",[28,69663,10],{"class":51556},[28,69665,51563],{"class":38},[28,69667,69668,69670,69672],{"class":30,"line":2872},[28,69669,52400],{"class":38},[28,69671,543],{"class":51556},[28,69673,51563],{"class":38},[28,69675,69676,69678,69680],{"class":30,"line":2878},[28,69677,51597],{"class":38},[28,69679,546],{"class":51556},[28,69681,51563],{"class":38},[28,69683,69684,69686,69688],{"class":30,"line":2883},[28,69685,55490],{"class":38},[28,69687,549],{"class":51556},[28,69689,51563],{"class":38},[28,69691,69692,69694,69696,69699,69701],{"class":30,"line":8210},[28,69693,55558],{"class":38},[28,69695,552],{"class":51556},[28,69697,69698],{"class":38},">序号\u003C\u002F",[28,69700,552],{"class":51556},[28,69702,51563],{"class":38},[28,69704,69705,69707,69709,69712,69714],{"class":30,"line":8234},[28,69706,55558],{"class":38},[28,69708,552],{"class":51556},[28,69710,69711],{"class":38},">姓名\u003C\u002F",[28,69713,552],{"class":51556},[28,69715,51563],{"class":38},[28,69717,69718,69720,69722,69725,69727],{"class":30,"line":8239},[28,69719,55558],{"class":38},[28,69721,552],{"class":51556},[28,69723,69724],{"class":38},">年龄\u003C\u002F",[28,69726,552],{"class":51556},[28,69728,51563],{"class":38},[28,69730,69731,69733,69735,69738,69740],{"class":30,"line":8245},[28,69732,55558],{"class":38},[28,69734,552],{"class":51556},[28,69736,69737],{"class":38},">性别\u003C\u002F",[28,69739,552],{"class":51556},[28,69741,51563],{"class":38},[28,69743,69744,69746,69748,69751,69753],{"class":30,"line":8272},[28,69745,55558],{"class":38},[28,69747,552],{"class":51556},[28,69749,69750],{"class":38},">薪资\u003C\u002F",[28,69752,552],{"class":51556},[28,69754,51563],{"class":38},[28,69756,69757,69759,69761,69764,69766],{"class":30,"line":8277},[28,69758,55558],{"class":38},[28,69760,552],{"class":51556},[28,69762,69763],{"class":38},">就业城市\u003C\u002F",[28,69765,552],{"class":51556},[28,69767,51563],{"class":38},[28,69769,69770,69772,69774,69777,69779],{"class":30,"line":8283},[28,69771,55558],{"class":38},[28,69773,552],{"class":51556},[28,69775,69776],{"class":38},">操作\u003C\u002F",[28,69778,552],{"class":51556},[28,69780,51563],{"class":38},[28,69782,69783,69785,69787],{"class":30,"line":8295},[28,69784,55663],{"class":38},[28,69786,549],{"class":51556},[28,69788,51563],{"class":38},[28,69790,69791,69793,69795],{"class":30,"line":8307},[28,69792,52032],{"class":38},[28,69794,546],{"class":51556},[28,69796,51563],{"class":38},[28,69798,69799,69801,69803],{"class":30,"line":8319},[28,69800,51597],{"class":38},[28,69802,590],{"class":51556},[28,69804,51563],{"class":38},[28,69806,69807],{"class":30,"line":9978},[28,69808,69809],{"class":87},"      \u003C!-- \n",[28,69811,69812],{"class":30,"line":10003},[28,69813,69814],{"class":87},"        \u003Ctr>\n",[28,69816,69817],{"class":30,"line":10026},[28,69818,69819],{"class":87},"          \u003Ctd>1001\u003C\u002Ftd>\n",[28,69821,69822],{"class":30,"line":10050},[28,69823,69824],{"class":87},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[28,69826,69827],{"class":30,"line":10055},[28,69828,69829],{"class":87},"          \u003Ctd>19\u003C\u002Ftd>\n",[28,69831,69832],{"class":30,"line":10060},[28,69833,69834],{"class":87},"          \u003Ctd>男\u003C\u002Ftd>\n",[28,69836,69837],{"class":30,"line":10065},[28,69838,69839],{"class":87},"          \u003Ctd>15000\u003C\u002Ftd>\n",[28,69841,69842],{"class":30,"line":10074},[28,69843,69844],{"class":87},"          \u003Ctd>上海\u003C\u002Ftd>\n",[28,69846,69847],{"class":30,"line":10079},[28,69848,69849],{"class":87},"          \u003Ctd>\n",[28,69851,69852],{"class":30,"line":10085},[28,69853,69854],{"class":87},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[28,69856,69857],{"class":30,"line":10106},[28,69858,69859],{"class":87},"          \u003C\u002Ftd>\n",[28,69861,69862],{"class":30,"line":10112},[28,69863,69864],{"class":87},"        \u003C\u002Ftr> \n",[28,69866,69867],{"class":30,"line":10126},[28,69868,69869],{"class":87},"        -->\n",[28,69871,69872,69874,69876],{"class":30,"line":10132},[28,69873,52032],{"class":38},[28,69875,590],{"class":51556},[28,69877,51563],{"class":38},[28,69879,69880,69882,69884],{"class":30,"line":10159},[28,69881,52673],{"class":38},[28,69883,543],{"class":51556},[28,69885,51563],{"class":38},[28,69887,69888,69890,69892],{"class":30,"line":10168},[28,69889,52400],{"class":38},[28,69891,52069],{"class":51556},[28,69893,51563],{"class":38},[28,69895,69896],{"class":30,"line":10174},[28,69897,60214],{"class":87},[28,69899,69900,69902,69905,69907,69909,69911,69913,69916],{"class":30,"line":10182},[28,69901,11483],{"class":34},[28,69903,69904],{"class":60}," uname",[28,69906,13826],{"class":34},[28,69908,54652],{"class":38},[28,69910,54655],{"class":2225},[28,69912,413],{"class":38},[28,69914,69915],{"class":127},"'.uname'",[28,69917,81],{"class":38},[28,69919,69920,69922,69924,69926,69928,69930,69932,69935],{"class":30,"line":10187},[28,69921,11483],{"class":34},[28,69923,15951],{"class":60},[28,69925,13826],{"class":34},[28,69927,54652],{"class":38},[28,69929,54655],{"class":2225},[28,69931,413],{"class":38},[28,69933,69934],{"class":127},"'.age'",[28,69936,81],{"class":38},[28,69938,69939,69941,69944,69946,69948,69950,69952,69955],{"class":30,"line":16866},[28,69940,11483],{"class":34},[28,69942,69943],{"class":60}," gender",[28,69945,13826],{"class":34},[28,69947,54652],{"class":38},[28,69949,54655],{"class":2225},[28,69951,413],{"class":38},[28,69953,69954],{"class":127},"'.gender'",[28,69956,81],{"class":38},[28,69958,69959,69961,69964,69966,69968,69970,69972,69975],{"class":30,"line":16872},[28,69960,11483],{"class":34},[28,69962,69963],{"class":60}," salary",[28,69965,13826],{"class":34},[28,69967,54652],{"class":38},[28,69969,54655],{"class":2225},[28,69971,413],{"class":38},[28,69973,69974],{"class":127},"'.salary'",[28,69976,81],{"class":38},[28,69978,69979,69981,69984,69986,69988,69990,69992,69995],{"class":30,"line":16895},[28,69980,11483],{"class":34},[28,69982,69983],{"class":60}," city",[28,69985,13826],{"class":34},[28,69987,54652],{"class":38},[28,69989,54655],{"class":2225},[28,69991,413],{"class":38},[28,69993,69994],{"class":127},"'.city'",[28,69996,81],{"class":38},[28,69998,69999,70001,70004,70006,70008,70010,70012,70015],{"class":30,"line":16901},[28,70000,11483],{"class":34},[28,70002,70003],{"class":60}," tbody",[28,70005,13826],{"class":34},[28,70007,54652],{"class":38},[28,70009,54655],{"class":2225},[28,70011,413],{"class":38},[28,70013,70014],{"class":127},"'tbody'",[28,70016,81],{"class":38},[28,70018,70019],{"class":30,"line":16924},[28,70020,2662],{"emptyLinePlaceholder":336},[28,70022,70023],{"class":30,"line":16938},[28,70024,70025],{"class":87},"    \u002F\u002F 获取所有带有name属性的元素\n",[28,70027,70028,70030,70033,70035,70037,70039,70041,70044],{"class":30,"line":16958},[28,70029,11483],{"class":34},[28,70031,70032],{"class":60}," items",[28,70034,13826],{"class":34},[28,70036,54652],{"class":38},[28,70038,55937],{"class":2225},[28,70040,413],{"class":38},[28,70042,70043],{"class":127},"'[name]'",[28,70045,81],{"class":38},[28,70047,70048],{"class":30,"line":16964},[28,70049,70050],{"class":87},"    \u002F\u002F 声明一个空的数组\n",[28,70052,70053,70055,70057,70059],{"class":30,"line":16975},[28,70054,11483],{"class":34},[28,70056,57951],{"class":60},[28,70058,13826],{"class":34},[28,70060,52094],{"class":38},[28,70062,70063],{"class":30,"line":16998},[28,70064,70065],{"class":87},"    \u002F\u002F 1.录入模块\n",[28,70067,70068],{"class":30,"line":17020},[28,70069,70070],{"class":87},"    \u002F\u002F 1.1这是一个表单提交事件\n",[28,70072,70073,70075,70078,70080,70082,70084,70086,70089],{"class":30,"line":17025},[28,70074,11483],{"class":34},[28,70076,70077],{"class":60}," info",[28,70079,13826],{"class":34},[28,70081,54652],{"class":38},[28,70083,54655],{"class":2225},[28,70085,413],{"class":38},[28,70087,70088],{"class":127},"'.info'",[28,70090,81],{"class":38},[28,70092,70093,70096,70098,70100,70103,70105,70107,70109,70111],{"class":30,"line":17031},[28,70094,70095],{"class":38},"    info.",[28,70097,58069],{"class":2225},[28,70099,413],{"class":38},[28,70101,70102],{"class":127},"'submit'",[28,70104,12697],{"class":38},[28,70106,54705],{"class":34},[28,70108,1920],{"class":38},[28,70110,482],{"class":5478},[28,70112,12704],{"class":38},[28,70114,70115],{"class":30,"line":17045},[28,70116,70117],{"class":87},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[28,70119,70120,70123,70126],{"class":30,"line":17058},[28,70121,70122],{"class":38},"      e.",[28,70124,70125],{"class":2225},"preventDefault",[28,70127,2238],{"class":38},[28,70129,70130],{"class":30,"line":17063},[28,70131,60268],{"class":87},[28,70133,70134],{"class":30,"line":17077},[28,70135,2662],{"emptyLinePlaceholder":336},[28,70137,70138],{"class":30,"line":17082},[28,70139,70140],{"class":87},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[28,70142,70143],{"class":30,"line":17088},[28,70144,70145],{"class":87},"      \u002F\u002F 先遍历循环\n",[28,70147,70148,70150,70152,70154,70156,70158,70160,70162,70164,70167,70169,70171,70173],{"class":30,"line":17093},[28,70149,52540],{"class":34},[28,70151,1920],{"class":38},[28,70153,52103],{"class":34},[28,70155,9700],{"class":38},[28,70157,54],{"class":34},[28,70159,4355],{"class":60},[28,70161,9707],{"class":38},[28,70163,1307],{"class":34},[28,70165,70166],{"class":38}," items.",[28,70168,52224],{"class":60},[28,70170,3476],{"class":38},[28,70172,2554],{"class":34},[28,70174,12704],{"class":38},[28,70176,70177,70179,70182,70184,70187],{"class":30,"line":17107},[28,70178,2759],{"class":34},[28,70180,70181],{"class":38}," (items[i].value ",[28,70183,54742],{"class":34},[28,70185,70186],{"class":127}," ''",[28,70188,12704],{"class":38},[28,70190,70191,70194,70197,70199,70202],{"class":30,"line":17112},[28,70192,70193],{"class":34},"          return",[28,70195,70196],{"class":2225}," alert",[28,70198,413],{"class":38},[28,70200,70201],{"class":127},"'输入内容不能为空'",[28,70203,81],{"class":38},[28,70205,70206],{"class":30,"line":17117},[28,70207,2791],{"class":38},[28,70209,70210],{"class":30,"line":17131},[28,70211,52654],{"class":38},[28,70213,70214],{"class":30,"line":17143},[28,70215,2662],{"emptyLinePlaceholder":336},[28,70217,70218],{"class":30,"line":17148},[28,70219,70220],{"class":87},"      \u002F\u002F 创建新的对象\n",[28,70222,70223,70225,70228,70230],{"class":30,"line":17161},[28,70224,58484],{"class":34},[28,70226,70227],{"class":60}," obj",[28,70229,13826],{"class":34},[28,70231,15834],{"class":38},[28,70233,70234,70237,70239,70241,70243],{"class":30,"line":17166},[28,70235,70236],{"class":38},"        stuID: arr.",[28,70238,52224],{"class":60},[28,70240,45822],{"class":34},[28,70242,25381],{"class":60},[28,70244,31723],{"class":38},[28,70246,70247],{"class":30,"line":17171},[28,70248,70249],{"class":38},"        uname: uname.value,\n",[28,70251,70252],{"class":30,"line":17176},[28,70253,70254],{"class":38},"        age: age.value,\n",[28,70256,70257],{"class":30,"line":17189},[28,70258,70259],{"class":38},"        gender: gender.value,\n",[28,70261,70262],{"class":30,"line":17194},[28,70263,70264],{"class":38},"        salary: salary.value,\n",[28,70266,70267],{"class":30,"line":32889},[28,70268,70269],{"class":38},"        city: city.value\n",[28,70271,70272],{"class":30,"line":32895},[28,70273,52654],{"class":38},[28,70275,70276],{"class":30,"line":32901},[28,70277,70278],{"class":87},"      \u002F\u002F console.log(obj);\n",[28,70280,70281],{"class":30,"line":32907},[28,70282,70283],{"class":87},"      \u002F\u002F 追加到数组里面\n",[28,70285,70286,70288,70290],{"class":30,"line":32913},[28,70287,58263],{"class":38},[28,70289,52140],{"class":2225},[28,70291,70292],{"class":38},"(obj)\n",[28,70294,70295],{"class":30,"line":32924},[28,70296,70297],{"class":87},"      \u002F\u002F console.log(arr);\n",[28,70299,70300],{"class":30,"line":32930},[28,70301,70302],{"class":87},"      \u002F\u002F 清空表单  reset重置表单\n",[28,70304,70305,70308,70310,70313],{"class":30,"line":32950},[28,70306,70307],{"class":60},"      this",[28,70309,956],{"class":38},[28,70311,70312],{"class":2225},"reset",[28,70314,2238],{"class":38},[28,70316,70317],{"class":30,"line":32956},[28,70318,70319],{"class":87},"      \u002F\u002F 调用渲染函数\n",[28,70321,70322,70325],{"class":30,"line":32967},[28,70323,70324],{"class":2225},"      render",[28,70326,2238],{"class":38},[28,70328,70329],{"class":30,"line":32973},[28,70330,33717],{"class":38},[28,70332,70333],{"class":30,"line":32979},[28,70334,70335],{"class":87},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[28,70337,70338,70341,70344],{"class":30,"line":32985},[28,70339,70340],{"class":34},"    function",[28,70342,70343],{"class":2225}," render",[28,70345,11115],{"class":38},[28,70347,70348],{"class":30,"line":32991},[28,70349,70350],{"class":87},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[28,70352,70353,70356,70358],{"class":30,"line":32997},[28,70354,70355],{"class":38},"      tbody.innerHTML ",[28,70357,54],{"class":34},[28,70359,70360],{"class":127}," ''\n",[28,70362,70363],{"class":30,"line":33003},[28,70364,70365],{"class":87},"      \u002F\u002F 遍历数组\n",[28,70367,70368,70370,70372,70374,70376,70378,70380,70382,70384,70386,70388,70390,70392],{"class":30,"line":33009},[28,70369,52540],{"class":34},[28,70371,1920],{"class":38},[28,70373,52103],{"class":34},[28,70375,9700],{"class":38},[28,70377,54],{"class":34},[28,70379,4355],{"class":60},[28,70381,9707],{"class":38},[28,70383,1307],{"class":34},[28,70385,52221],{"class":38},[28,70387,52224],{"class":60},[28,70389,3476],{"class":38},[28,70391,2554],{"class":34},[28,70393,12704],{"class":38},[28,70395,70396,70398,70401,70403,70405,70408,70410,70413],{"class":30,"line":33029},[28,70397,61526],{"class":34},[28,70399,70400],{"class":60}," tr",[28,70402,13826],{"class":34},[28,70404,54652],{"class":38},[28,70406,70407],{"class":2225},"createElement",[28,70409,413],{"class":38},[28,70411,70412],{"class":127},"'tr'",[28,70414,81],{"class":38},[28,70416,70417,70420,70422],{"class":30,"line":33035},[28,70418,70419],{"class":38},"        tr.innerHTML ",[28,70421,54],{"class":34},[28,70423,70424],{"class":127}," `\n",[28,70426,70427,70430,70432,70434,70436,70439,70442],{"class":30,"line":33051},[28,70428,70429],{"class":127},"        \u003Ctd>${",[28,70431,4142],{"class":38},[28,70433,1287],{"class":127},[28,70435,840],{"class":38},[28,70437,70438],{"class":127},"].",[28,70440,70441],{"class":38},"stuID",[28,70443,70444],{"class":127},"}\u003C\u002Ftd>\n",[28,70446,70447,70450,70452,70454,70456,70458,70461],{"class":30,"line":33057},[28,70448,70449],{"class":127},"          \u003Ctd>${",[28,70451,4142],{"class":38},[28,70453,1287],{"class":127},[28,70455,840],{"class":38},[28,70457,70438],{"class":127},[28,70459,70460],{"class":38},"uname",[28,70462,70444],{"class":127},[28,70464,70465,70467,70469,70471,70473,70475,70478],{"class":30,"line":33071},[28,70466,70449],{"class":127},[28,70468,4142],{"class":38},[28,70470,1287],{"class":127},[28,70472,840],{"class":38},[28,70474,70438],{"class":127},[28,70476,70477],{"class":38},"age",[28,70479,70444],{"class":127},[28,70481,70482,70484,70486,70488,70490,70492,70495],{"class":30,"line":33077},[28,70483,70449],{"class":127},[28,70485,4142],{"class":38},[28,70487,1287],{"class":127},[28,70489,840],{"class":38},[28,70491,70438],{"class":127},[28,70493,70494],{"class":38},"gender",[28,70496,70444],{"class":127},[28,70498,70499,70501,70503,70505,70507,70509,70512],{"class":30,"line":33092},[28,70500,70449],{"class":127},[28,70502,4142],{"class":38},[28,70504,1287],{"class":127},[28,70506,840],{"class":38},[28,70508,70438],{"class":127},[28,70510,70511],{"class":38},"salary",[28,70513,70444],{"class":127},[28,70515,70516,70518,70520,70522,70524,70526,70529],{"class":30,"line":33098},[28,70517,70449],{"class":127},[28,70519,4142],{"class":38},[28,70521,1287],{"class":127},[28,70523,840],{"class":38},[28,70525,70438],{"class":127},[28,70527,70528],{"class":38},"city",[28,70530,70444],{"class":127},[28,70532,70533],{"class":30,"line":33107},[28,70534,69849],{"class":127},[28,70536,70537,70540,70542],{"class":30,"line":33113},[28,70538,70539],{"class":127},"            \u003Ca href=\"javascript:\" data-id=${",[28,70541,840],{"class":38},[28,70543,70544],{"class":127},"}>删除\u003C\u002Fa>\n",[28,70546,70547],{"class":30,"line":33122},[28,70548,70549],{"class":127},"          \u003C\u002Ftd> \n",[28,70551,70552],{"class":30,"line":33128},[28,70553,70554],{"class":127},"          `\n",[28,70556,70557],{"class":30,"line":33134},[28,70558,70559],{"class":87},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[28,70561,70562,70565,70568],{"class":30,"line":33143},[28,70563,70564],{"class":38},"        tbody.",[28,70566,70567],{"class":2225},"appendChild",[28,70569,70570],{"class":38},"(tr)\n",[28,70572,70573],{"class":30,"line":33149},[28,70574,52654],{"class":38},[28,70576,70577],{"class":30,"line":33160},[28,70578,2449],{"class":38},[28,70580,70581],{"class":30,"line":33166},[28,70582,2662],{"emptyLinePlaceholder":336},[28,70584,70585],{"class":30,"line":33185},[28,70586,70587],{"class":87},"    \u002F\u002F 3.删除委托\n",[28,70589,70590],{"class":30,"line":33191},[28,70591,70592],{"class":87},"    \u002F\u002F 3.1 事件委托 tbody\n",[28,70594,70595,70598,70600,70602,70604,70606,70608,70610,70612],{"class":30,"line":33202},[28,70596,70597],{"class":38},"    tbody.",[28,70599,58069],{"class":2225},[28,70601,413],{"class":38},[28,70603,58074],{"class":127},[28,70605,12697],{"class":38},[28,70607,54705],{"class":34},[28,70609,1920],{"class":38},[28,70611,482],{"class":5478},[28,70613,12704],{"class":38},[28,70615,70616,70618,70620,70622,70624],{"class":30,"line":33208},[28,70617,54736],{"class":34},[28,70619,67290],{"class":38},[28,70621,54742],{"class":34},[28,70623,68512],{"class":127},[28,70625,12704],{"class":38},[28,70627,70628],{"class":30,"line":33228},[28,70629,70630],{"class":87},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[28,70632,70633],{"class":30,"line":33244},[28,70634,70635],{"class":87},"        \u002F\u002F console.log(e.target.dataset.id);\n",[28,70637,70638],{"class":30,"line":33250},[28,70639,70640],{"class":87},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[28,70642,70643,70646,70648,70651,70653],{"class":30,"line":33264},[28,70644,70645],{"class":38},"        arr.",[28,70647,58266],{"class":2225},[28,70649,70650],{"class":38},"(e.target.dataset.id, ",[28,70652,61],{"class":60},[28,70654,81],{"class":38},[28,70656,70657],{"class":30,"line":33270},[28,70658,70659],{"class":87},"        \u002F\u002F 重新渲染一次\n",[28,70661,70662,70665],{"class":30,"line":33276},[28,70663,70664],{"class":2225},"        render",[28,70666,2238],{"class":38},[28,70668,70669],{"class":30,"line":33287},[28,70670,52654],{"class":38},[28,70672,70673],{"class":30,"line":33293},[28,70674,33717],{"class":38},[28,70676,70677,70679,70681],{"class":30,"line":33299},[28,70678,52673],{"class":38},[28,70680,52069],{"class":51556},[28,70682,51563],{"class":38},[28,70684,70685],{"class":30,"line":33309},[28,70686,2662],{"emptyLinePlaceholder":336},[28,70688,70689,70691,70693],{"class":30,"line":33315},[28,70690,52041],{"class":38},[28,70692,52056],{"class":51556},[28,70694,51563],{"class":38},[28,70696,70697],{"class":30,"line":33326},[28,70698,2662],{"emptyLinePlaceholder":336},[28,70700,70701,70703,70705],{"class":30,"line":33332},[28,70702,52041],{"class":38},[28,70704,50891],{"class":51556},[28,70706,51563],{"class":38},[14,70708,70709],{},"样式：",[18,70711,70715],{"className":70712,"code":70713,"language":70714,"meta":23,"style":23},"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",[25,70716,70717,70722,70732,70741,70745,70749,70754,70764,70769,70773,70778,70788,70793,70802,70806,70810,70815,70820,70830,70840,70845,70849,70854,70863,70873,70878,70888,70898,70902,70907,70915,70919,70924,70929,70934,70942,70951,70955,70960,70969,70973,70978,70987,70991,70996,71005,71014,71022,71026,71031,71040,71050,71059,71069,71075,71084,71094,71104,71108,71113,71122,71130,71140,71148,71157,71166,71176,71184,71188,71193,71202],{"__ignoreMap":23},[28,70718,70719],{"class":30,"line":31},[28,70720,70721],{"class":38},"* {\n",[28,70723,70724,70727,70729],{"class":30,"line":48},[28,70725,70726],{"class":51556},"  margin",[28,70728,51693],{"class":38},[28,70730,70731],{"class":127},"0;\n",[28,70733,70734,70737,70739],{"class":30,"line":84},[28,70735,70736],{"class":127},"  padding",[28,70738,51693],{"class":38},[28,70740,70731],{"class":127},[28,70742,70743],{"class":30,"line":91},[28,70744,1830],{"class":38},[28,70746,70747],{"class":30,"line":97},[28,70748,2662],{"emptyLinePlaceholder":336},[28,70750,70751],{"class":30,"line":103},[28,70752,70753],{"class":127},"a {\n",[28,70755,70756,70759,70761],{"class":30,"line":109},[28,70757,70758],{"class":51556},"  text-decoration",[28,70760,51693],{"class":38},[28,70762,70763],{"class":127},"none;\n",[28,70765,70766],{"class":30,"line":118},[28,70767,70768],{"class":127},"  color:#721c24;\n",[28,70770,70771],{"class":30,"line":124},[28,70772,1830],{"class":38},[28,70774,70775],{"class":30,"line":131},[28,70776,70777],{"class":127},"h1 {\n",[28,70779,70780,70783,70785],{"class":30,"line":137},[28,70781,70782],{"class":51556},"  text-align",[28,70784,51693],{"class":38},[28,70786,70787],{"class":127},"center;\n",[28,70789,70790],{"class":30,"line":143},[28,70791,70792],{"class":127},"  color:#333;\n",[28,70794,70795,70797,70799],{"class":30,"line":149},[28,70796,70726],{"class":51556},[28,70798,51693],{"class":38},[28,70800,70801],{"class":127},"20px 0;\n",[28,70803,70804],{"class":30,"line":1890},[28,70805,2936],{"class":38},[28,70807,70808],{"class":30,"line":1904},[28,70809,1830],{"class":38},[28,70811,70812],{"class":30,"line":1909},[28,70813,70814],{"class":127},"table {\n",[28,70816,70817],{"class":30,"line":1915},[28,70818,70819],{"class":127},"  margin:0 auto;\n",[28,70821,70822,70825,70827],{"class":30,"line":1936},[28,70823,70824],{"class":51556},"  width",[28,70826,51693],{"class":38},[28,70828,70829],{"class":127},"800px;\n",[28,70831,70832,70835,70837],{"class":30,"line":1941},[28,70833,70834],{"class":51556},"  border-collapse",[28,70836,51693],{"class":38},[28,70838,70839],{"class":127},"collapse;\n",[28,70841,70842],{"class":30,"line":1955},[28,70843,70844],{"class":127},"  color:#004085;\n",[28,70846,70847],{"class":30,"line":1960},[28,70848,1830],{"class":38},[28,70850,70851],{"class":30,"line":1989},[28,70852,70853],{"class":127},"th {\n",[28,70855,70856,70858,70860],{"class":30,"line":1994},[28,70857,70736],{"class":51556},[28,70859,51693],{"class":38},[28,70861,70862],{"class":127},"10px;\n",[28,70864,70865,70868,70870],{"class":30,"line":2011},[28,70866,70867],{"class":51556},"  background",[28,70869,51693],{"class":38},[28,70871,70872],{"class":87},"#cfe5ff;\n",[28,70874,70875],{"class":30,"line":2016},[28,70876,70877],{"class":38},"  \n",[28,70879,70880,70883,70885],{"class":30,"line":2021},[28,70881,70882],{"class":51556},"  font-size",[28,70884,51693],{"class":38},[28,70886,70887],{"class":127},"20px;\n",[28,70889,70890,70893,70895],{"class":30,"line":2026},[28,70891,70892],{"class":51556},"  font-weight",[28,70894,51693],{"class":38},[28,70896,70897],{"class":127},"400;\n",[28,70899,70900],{"class":30,"line":2040},[28,70901,1830],{"class":38},[28,70903,70904],{"class":30,"line":2045},[28,70905,70906],{"class":127},"td,th {\n",[28,70908,70909,70912],{"class":30,"line":2839},[28,70910,70911],{"class":127},"  border:1px solid",[28,70913,70914],{"class":87}," #b8daff;\n",[28,70916,70917],{"class":30,"line":2853},[28,70918,1830],{"class":38},[28,70920,70921],{"class":30,"line":2861},[28,70922,70923],{"class":127},"td {\n",[28,70925,70926],{"class":30,"line":2866},[28,70927,70928],{"class":127},"  padding:10px;\n",[28,70930,70931],{"class":30,"line":2872},[28,70932,70933],{"class":127},"  color:#666;\n",[28,70935,70936,70938,70940],{"class":30,"line":2878},[28,70937,70782],{"class":51556},[28,70939,51693],{"class":38},[28,70941,70787],{"class":127},[28,70943,70944,70946,70948],{"class":30,"line":2883},[28,70945,70882],{"class":51556},[28,70947,51693],{"class":38},[28,70949,70950],{"class":127},"16px;\n",[28,70952,70953],{"class":30,"line":8210},[28,70954,1830],{"class":38},[28,70956,70957],{"class":30,"line":8234},[28,70958,70959],{"class":127},"tbody tr {\n",[28,70961,70962,70964,70966],{"class":30,"line":8239},[28,70963,70867],{"class":51556},[28,70965,51693],{"class":38},[28,70967,70968],{"class":87},"#fff;\n",[28,70970,70971],{"class":30,"line":8245},[28,70972,1830],{"class":38},[28,70974,70975],{"class":30,"line":8272},[28,70976,70977],{"class":127},"tbody tr:hover {\n",[28,70979,70980,70982,70984],{"class":30,"line":8277},[28,70981,70867],{"class":51556},[28,70983,51693],{"class":38},[28,70985,70986],{"class":87},"#e1ecf8;\n",[28,70988,70989],{"class":30,"line":8283},[28,70990,1830],{"class":38},[28,70992,70993],{"class":30,"line":8295},[28,70994,70995],{"class":127},".info {\n",[28,70997,70998,71000,71002],{"class":30,"line":8307},[28,70999,70824],{"class":51556},[28,71001,51693],{"class":38},[28,71003,71004],{"class":127},"900px;\n",[28,71006,71007,71009,71011],{"class":30,"line":8319},[28,71008,70726],{"class":51556},[28,71010,51693],{"class":38},[28,71012,71013],{"class":127},"50px auto;\n",[28,71015,71016,71018,71020],{"class":30,"line":9978},[28,71017,70782],{"class":51556},[28,71019,51693],{"class":38},[28,71021,70787],{"class":127},[28,71023,71024],{"class":30,"line":10003},[28,71025,1830],{"class":38},[28,71027,71028],{"class":30,"line":10026},[28,71029,71030],{"class":127},".info  input, .info select {\n",[28,71032,71033,71035,71037],{"class":30,"line":10050},[28,71034,70824],{"class":51556},[28,71036,51693],{"class":38},[28,71038,71039],{"class":127},"80px;\n",[28,71041,71042,71045,71047],{"class":30,"line":10055},[28,71043,71044],{"class":51556},"  height",[28,71046,51693],{"class":38},[28,71048,71049],{"class":127},"27px;\n",[28,71051,71052,71055,71057],{"class":30,"line":10060},[28,71053,71054],{"class":51556},"  outline",[28,71056,51693],{"class":38},[28,71058,70763],{"class":127},[28,71060,71061,71064,71066],{"class":30,"line":10065},[28,71062,71063],{"class":51556},"  border-radius",[28,71065,51693],{"class":38},[28,71067,71068],{"class":127},"5px;\n",[28,71070,71071,71073],{"class":30,"line":10074},[28,71072,70911],{"class":127},[28,71074,70914],{"class":87},[28,71076,71077,71080,71082],{"class":30,"line":10079},[28,71078,71079],{"class":51556},"  padding-left",[28,71081,51693],{"class":38},[28,71083,71068],{"class":127},[28,71085,71086,71089,71091],{"class":30,"line":10085},[28,71087,71088],{"class":51556},"  box-sizing",[28,71090,51693],{"class":38},[28,71092,71093],{"class":127},"border-box;\n",[28,71095,71096,71099,71101],{"class":30,"line":10106},[28,71097,71098],{"class":51556},"  margin-right",[28,71100,51693],{"class":38},[28,71102,71103],{"class":127},"15px;\n",[28,71105,71106],{"class":30,"line":10112},[28,71107,1830],{"class":38},[28,71109,71110],{"class":30,"line":10126},[28,71111,71112],{"class":127},".info button {\n",[28,71114,71115,71117,71119],{"class":30,"line":10132},[28,71116,70824],{"class":51556},[28,71118,51693],{"class":38},[28,71120,71121],{"class":127},"60px;\n",[28,71123,71124,71126,71128],{"class":30,"line":10159},[28,71125,71044],{"class":51556},[28,71127,51693],{"class":38},[28,71129,71049],{"class":127},[28,71131,71132,71135,71137],{"class":30,"line":10168},[28,71133,71134],{"class":51556},"  background-color",[28,71136,51693],{"class":38},[28,71138,71139],{"class":87},"#004085;\n",[28,71141,71142,71144,71146],{"class":30,"line":10174},[28,71143,71054],{"class":51556},[28,71145,51693],{"class":38},[28,71147,70763],{"class":127},[28,71149,71150,71153,71155],{"class":30,"line":10182},[28,71151,71152],{"class":51556},"  border",[28,71154,51693],{"class":38},[28,71156,70731],{"class":127},[28,71158,71159,71162,71164],{"class":30,"line":10187},[28,71160,71161],{"class":51556},"  color",[28,71163,51693],{"class":38},[28,71165,70968],{"class":87},[28,71167,71168,71171,71173],{"class":30,"line":16866},[28,71169,71170],{"class":51556},"  cursor",[28,71172,51693],{"class":38},[28,71174,71175],{"class":127},"pointer;\n",[28,71177,71178,71180,71182],{"class":30,"line":16872},[28,71179,71063],{"class":51556},[28,71181,51693],{"class":38},[28,71183,71068],{"class":127},[28,71185,71186],{"class":30,"line":16895},[28,71187,1830],{"class":38},[28,71189,71190],{"class":30,"line":16901},[28,71191,71192],{"class":127},".info .age {\n",[28,71194,71195,71197,71199],{"class":30,"line":16924},[28,71196,70824],{"class":51556},[28,71198,51693],{"class":38},[28,71200,71201],{"class":127},"50px;\n",[28,71203,71204],{"class":30,"line":16938},[28,71205,1830],{"class":38},[14,71207,71208],{},"思路：",[14,71210,71211],{},[1727,71212],{"alt":23,"src":71213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71215,71216],{},[1727,71217],{"alt":23,"src":71218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71220,71221],{},[1727,71222],{"alt":23,"src":71223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[380,71225,71227],{"id":71226},"_3315-重绘回流","3.3.15 重绘回流",[14,71229,71230],{},[1727,71231],{"alt":23,"src":71232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71234,71235],{},[1727,71236],{"alt":23,"src":71237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71239,71240],{},[1727,71241],{"alt":23,"src":71242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[351,71244,71246],{"id":71245},"_34-bom","3.4 BOM",[14,71248,71249],{},[1727,71250],{"alt":23,"src":71251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71253,71254],{},"平时写的document省略了window而已，实际上是window.document",[14,71256,71257],{},"函数也是这样，调用的时候实际为window.fn()",[14,71259,71260],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71262,71263],{},"window大部分情况下可以省略",[380,71265,71267],{"id":71266},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71269,71270],{},"只执行一次",[14,71272,71273],{},[1727,71274],{"alt":23,"src":71275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71277,71278],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71280,71281],{},[1727,71282],{"alt":23,"src":71283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[380,71285,71287],{"id":71286},"_342-js执行机制","3.4.2 JS执行机制",[14,71289,71290],{},[1727,71291],{"alt":23,"src":71292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71294,71295],{},"两个的结果都是1111 3333 2222",[14,71297,71298],{},[1727,71299],{"alt":23,"src":71300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71302,71303],{},[1727,71304],{"alt":23,"src":71305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71307,71308],{},[1727,71309],{"alt":23,"src":71310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71312,71313],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71315,71316],{},"工作流程：",[14,71318,71319],{},[1727,71320],{"alt":23,"src":71321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71323,71324],{},[1727,71325],{"alt":23,"src":71326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71328,71329],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71331,71332],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[380,71334,71336],{"id":71335},"_343-location对象","3.4.3 location对象",[14,71338,71339],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71341,71342],{},[1727,71343],{"alt":23,"src":71344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71346,71347],{},"href可以跳转页面",[363,71349,71350],{},[366,71351,71352],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71354,71355],{},"search得到提交信息之后网站后边的地址",[14,71357,71358],{},[1727,71359],{"alt":23,"src":71360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71362,71363],{},[1727,71364],{"alt":23,"src":71365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[363,71367,71368],{"start":48},[366,71369,71370],{},"hash:这个获取单页面应用#后边的地址",[14,71372,71373],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71375,71376],{},[1727,71377],{"alt":23,"src":71378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[18,71380,71382],{"className":53323,"code":71381,"language":53325,"meta":23,"style":23},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[25,71383,71384,71404,71424],{"__ignoreMap":23},[28,71385,71386,71388,71390,71392,71394,71397,71400,71402],{"class":30,"line":31},[28,71387,52400],{"class":38},[28,71389,51],{"class":51556},[28,71391,61313],{"class":2225},[28,71393,54],{"class":38},[28,71395,71396],{"class":127},"\"#\u002Fmy\"",[28,71398,71399],{"class":38},">我的\u003C\u002F",[28,71401,51],{"class":51556},[28,71403,51563],{"class":38},[28,71405,71406,71408,71410,71412,71414,71417,71420,71422],{"class":30,"line":48},[28,71407,52400],{"class":38},[28,71409,51],{"class":51556},[28,71411,61313],{"class":2225},[28,71413,54],{"class":38},[28,71415,71416],{"class":127},"\"#\u002Ffriend\"",[28,71418,71419],{"class":38},">关注\u003C\u002F",[28,71421,51],{"class":51556},[28,71423,51563],{"class":38},[28,71425,71426,71428,71430,71432,71434,71437,71440,71442],{"class":30,"line":84},[28,71427,52400],{"class":38},[28,71429,51],{"class":51556},[28,71431,61313],{"class":2225},[28,71433,54],{"class":38},[28,71435,71436],{"class":127},"\"#\u002Fdownload\"",[28,71438,71439],{"class":38},">下载\u003C\u002F",[28,71441,51],{"class":51556},[28,71443,51563],{"class":38},[14,71445,71446],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[363,71448,71449],{"start":84},[366,71450,71451,71452,71454,71455,71457],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53972,71453],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53972,71456],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[380,71459,71461],{"id":71460},"_345-navigator对象","3.4.5 navigator对象",[14,71463,71464],{},[1727,71465],{"alt":23,"src":71466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[18,71468,71472],{"className":71469,"code":71470,"language":71471,"meta":23,"style":23},"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",[25,71473,71474,71479,71490,71502,71507,71558,71599,71604,71617,71629,71634],{"__ignoreMap":23},[28,71475,71476],{"class":30,"line":31},[28,71477,71478],{"class":87},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[28,71480,71481,71483,71485,71487],{"class":30,"line":48},[28,71482,630],{"class":34},[28,71484,413],{"class":38},[28,71486,54705],{"class":34},[28,71488,71489],{"class":38}," () { \n",[28,71491,71492,71494,71497,71499],{"class":30,"line":84},[28,71493,7054],{"class":34},[28,71495,71496],{"class":60}," userAgent",[28,71498,13826],{"class":34},[28,71500,71501],{"class":38}," navigator.userAgent \n",[28,71503,71504],{"class":30,"line":91},[28,71505,71506],{"class":87},"\u002F\u002F 验证是否为Android或iPhone \n",[28,71508,71509,71511,71514,71516,71519,71522,71524,71526,71529,71531,71534,71538,71540,71542,71544,71547,71549,71551,71553,71555],{"class":30,"line":97},[28,71510,7054],{"class":34},[28,71512,71513],{"class":60}," android",[28,71515,13826],{"class":34},[28,71517,71518],{"class":38}," userAgent.",[28,71520,71521],{"class":2225},"match",[28,71523,413],{"class":38},[28,71525,982],{"class":127},[28,71527,71528],{"class":48233},"(Android);",[28,71530,1383],{"class":34},[28,71532,71533],{"class":60},"[\\s",[28,71535,71537],{"class":71536},"snhLl","\\\u002F",[28,71539,1337],{"class":60},[28,71541,880],{"class":34},[28,71543,413],{"class":48233},[28,71545,71546],{"class":60},"[\\d.]",[28,71548,880],{"class":34},[28,71550,828],{"class":48233},[28,71552,1383],{"class":34},[28,71554,982],{"class":127},[28,71556,71557],{"class":38},") \n",[28,71559,71560,71562,71565,71567,71569,71571,71573,71575,71578,71581,71584,71586,71588,71591,71593,71595,71597],{"class":30,"line":103},[28,71561,7054],{"class":34},[28,71563,71564],{"class":60}," iphone",[28,71566,13826],{"class":34},[28,71568,71518],{"class":38},[28,71570,71521],{"class":2225},[28,71572,413],{"class":38},[28,71574,982],{"class":127},[28,71576,71577],{"class":48233},"(iPhone",[28,71579,71580],{"class":60},"\\s",[28,71582,71583],{"class":48233},"OS)",[28,71585,71580],{"class":60},[28,71587,413],{"class":48233},[28,71589,71590],{"class":60},"[\\d_]",[28,71592,880],{"class":34},[28,71594,828],{"class":48233},[28,71596,982],{"class":127},[28,71598,71557],{"class":38},[28,71600,71601],{"class":30,"line":109},[28,71602,71603],{"class":87},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[28,71605,71606,71608,71611,71614],{"class":30,"line":118},[28,71607,1796],{"class":34},[28,71609,71610],{"class":38}," (android ",[28,71612,71613],{"class":34},"||",[28,71615,71616],{"class":38}," iphone) { \n",[28,71618,71619,71622,71624,71627],{"class":30,"line":124},[28,71620,71621],{"class":38},"location.href ",[28,71623,54],{"class":34},[28,71625,71626],{"class":127}," 'http:\u002F\u002Fm.itcast.cn'",[28,71628,2936],{"class":38},[28,71630,71631],{"class":30,"line":131},[28,71632,71633],{"class":38},"} \n",[28,71635,71636],{"class":30,"line":137},[28,71637,71638],{"class":38},"})()\n",[380,71640,71642],{"id":71641},"_346-histroy对象","3.4.6 histroy对象",[14,71644,71645],{},[1727,71646],{"alt":23,"src":71647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71649,71650],{},"浏览器地址的前进与后退!!!",[14,71652,71653],{},"history.back() 等效于 history.go(-1)",[14,71655,71656],{},"history.forward() 等效于 history.go(1)",[351,71658,71660],{"id":71659},"_35-本地存储","3.5 本地存储",[363,71662,71663,71666,71669],{},[366,71664,71665],{},"数据存储在用户浏览器中",[366,71667,71668],{},"设置、读取方便、甚至页面刷新不丢失数据",[366,71670,71671],{},"容量较大，sessionStorage和localStorage约 5M 左右",[380,71673,71675],{"id":71674},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71677,71678],{},"只能存储字符串",[14,71680,71681],{},[1727,71682],{"alt":23,"src":71683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71685,71686],{},[1727,71687],{"alt":23,"src":71688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71690,71691],{},"键值对要加引号,不然就会当变量来看了",[14,71693,71694],{},"localStorage.setItem('uname', 'pink')",[14,71696,71697],{},"刷新之后信息不再丢失",[14,71699,71700],{},"操作key,value会跟着变",[14,71702,71703],{},"删除只删除键就可以,即名字",[14,71705,71694],{},[14,71707,71708],{},"改:",[14,71710,71711],{},"localStorage.setItem('uname','red')",[14,71713,71714],{},"有这个键就是改,没有这个键就是改",[14,71716,71717],{},[1727,71718],{"alt":23,"src":71719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71721,71722],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71724,71725],{},[1727,71726],{"alt":23,"src":71727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71729,71730],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[380,71732,71734],{"id":71733},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71736,71737],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71739,71740],{},"特性:",[363,71742,71743,71746,71749,71752],{},[366,71744,71745],{},"生命周期为关闭浏览器窗口",[366,71747,71748],{},"在同一个窗口(页面)下数据可以共享",[366,71750,71751],{},"以键值对的形式存储使用",[366,71753,71754],{},"用法跟localStorage 基本相同",[380,71756,71758],{"id":71757},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71760,71761],{},"本地只能存储字符串,无法直接存储复杂数据类型",[18,71763,71765],{"className":53323,"code":71764,"language":53325,"meta":23,"style":23},"\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",[25,71766,71767,71775,71780,71785,71790,71795,71799,71804,71809],{"__ignoreMap":23},[28,71768,71769,71771,71773],{"class":30,"line":31},[28,71770,1307],{"class":38},[28,71772,52069],{"class":51556},[28,71774,51563],{"class":38},[28,71776,71777],{"class":30,"line":48},[28,71778,71779],{"class":38},"    const obj = {\n",[28,71781,71782],{"class":30,"line":84},[28,71783,71784],{"class":38},"      uname: 'pink老师',\n",[28,71786,71787],{"class":30,"line":91},[28,71788,71789],{"class":38},"      age: 18,\n",[28,71791,71792],{"class":30,"line":97},[28,71793,71794],{"class":38},"      gender: '女'\n",[28,71796,71797],{"class":30,"line":103},[28,71798,2449],{"class":38},[28,71800,71801],{"class":30,"line":109},[28,71802,71803],{"class":38},"    \u002F\u002F 存储复杂数据类型\n",[28,71805,71806],{"class":30,"line":118},[28,71807,71808],{"class":38},"    localStorage.setItem('obj', obj)\n",[28,71810,71811,71813,71815],{"class":30,"line":124},[28,71812,52673],{"class":38},[28,71814,52069],{"class":51556},[28,71816,51563],{"class":38},[14,71818,71819],{},[1727,71820],{"alt":23,"src":71821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71823,71824],{},"如果获取一下数据:",[14,71826,71827],{},"log(localStorage.getItem('obj'))",[14,71829,71830],{},[1727,71831],{"alt":23,"src":71832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71834,71835],{},"发现直接存对象是使用不了的!!!",[22260,71837,71839],{"id":71838},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71841,71842],{},[1727,71843],{"alt":23,"src":71844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[18,71846,71848],{"className":50889,"code":71847,"language":50891,"meta":23,"style":23},"\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",[25,71849,71850,71858,71868,71878,71887,71895,71899,71903,71929,71948,71956,71960,71965,71970],{"__ignoreMap":23},[28,71851,71852,71854,71856],{"class":30,"line":31},[28,71853,1307],{"class":38},[28,71855,52069],{"class":51556},[28,71857,51563],{"class":38},[28,71859,71860,71862,71864,71866],{"class":30,"line":48},[28,71861,11483],{"class":34},[28,71863,70227],{"class":60},[28,71865,13826],{"class":34},[28,71867,15834],{"class":38},[28,71869,71870,71873,71876],{"class":30,"line":84},[28,71871,71872],{"class":38},"      uname: ",[28,71874,71875],{"class":127},"'pink老师'",[28,71877,31723],{"class":38},[28,71879,71880,71883,71885],{"class":30,"line":91},[28,71881,71882],{"class":38},"      age: ",[28,71884,1048],{"class":60},[28,71886,31723],{"class":38},[28,71888,71889,71892],{"class":30,"line":97},[28,71890,71891],{"class":38},"      gender: ",[28,71893,71894],{"class":127},"'女'\n",[28,71896,71897],{"class":30,"line":103},[28,71898,2449],{"class":38},[28,71900,71901],{"class":30,"line":109},[28,71902,71803],{"class":87},[28,71904,71905,71908,71911,71913,71916,71918,71921,71923,71926],{"class":30,"line":118},[28,71906,71907],{"class":38},"  localStorage.",[28,71909,71910],{"class":2225},"setItem",[28,71912,413],{"class":38},[28,71914,71915],{"class":127},"'obj'",[28,71917,12697],{"class":38},[28,71919,71920],{"class":60},"JSON",[28,71922,956],{"class":38},[28,71924,71925],{"class":2225},"stringify",[28,71927,71928],{"class":38},"(obj))\n",[28,71930,71931,71934,71936,71939,71942,71944,71946],{"class":30,"line":124},[28,71932,71933],{"class":38},"  console.",[28,71935,58503],{"class":2225},[28,71937,71938],{"class":38},"(localStorage.",[28,71940,71941],{"class":2225},"getItem",[28,71943,413],{"class":38},[28,71945,71915],{"class":127},[28,71947,30757],{"class":38},[28,71949,71950,71952,71954],{"class":30,"line":131},[28,71951,52673],{"class":38},[28,71953,52069],{"class":51556},[28,71955,51563],{"class":38},[28,71957,71958],{"class":30,"line":137},[28,71959,70877],{"class":38},[28,71961,71962],{"class":30,"line":143},[28,71963,71964],{"class":38},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[28,71966,71967],{"class":30,"line":149},[28,71968,71969],{"class":38},"  类型是字符串的\n",[28,71971,71972],{"class":30,"line":1890},[28,71973,71974],{"class":38},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22260,71976,71978],{"id":71977},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71980,71981],{},[1727,71982],{"alt":23,"src":71983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71985,71986],{},[1727,71987],{"alt":23,"src":71988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[18,71990,71992],{"className":53323,"code":71991,"language":53325,"meta":23,"style":23},"  \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",[25,71993,71994,72002,72006,72010,72014,72018,72022,72027,72032,72037,72042,72047,72052,72057,72062],{"__ignoreMap":23},[28,71995,71996,71998,72000],{"class":30,"line":31},[28,71997,52400],{"class":38},[28,71999,52069],{"class":51556},[28,72001,51563],{"class":38},[28,72003,72004],{"class":30,"line":48},[28,72005,71779],{"class":38},[28,72007,72008],{"class":30,"line":84},[28,72009,71784],{"class":38},[28,72011,72012],{"class":30,"line":91},[28,72013,71789],{"class":38},[28,72015,72016],{"class":30,"line":97},[28,72017,71794],{"class":38},[28,72019,72020],{"class":30,"line":103},[28,72021,2449],{"class":38},[28,72023,72024],{"class":30,"line":109},[28,72025,72026],{"class":38},"    \u002F\u002F 1.存储复杂数据类型\n",[28,72028,72029],{"class":30,"line":118},[28,72030,72031],{"class":38},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[28,72033,72034],{"class":30,"line":124},[28,72035,72036],{"class":38},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[28,72038,72039],{"class":30,"line":131},[28,72040,72041],{"class":38},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[28,72043,72044],{"class":30,"line":137},[28,72045,72046],{"class":38},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[28,72048,72049],{"class":30,"line":143},[28,72050,72051],{"class":38},"    \u002F\u002F 取\n",[28,72053,72054],{"class":30,"line":149},[28,72055,72056],{"class":38},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[28,72058,72059],{"class":30,"line":1890},[28,72060,72061],{"class":38},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[28,72063,72064,72066,72068],{"class":30,"line":1904},[28,72065,52673],{"class":38},[28,72067,52069],{"class":51556},[28,72069,51563],{"class":38},[14,72071,72072],{},[1727,72073],{"alt":23,"src":72074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[380,72076,72078],{"id":72077},"_356-数组map方法","3.5.6 数组map方法",[14,72080,72081],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72083,72084],{},[1727,72085],{"alt":23,"src":72086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72088,72089],{},[1727,72090],{"alt":23,"src":72091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72093,72094,72097],{},[555,72095,72096],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72099,72100],{},"map有返回值，但是forEach没有返回值",[14,72102,72103],{},"map是个方法。用的时候要加 ()",[14,72105,72106],{},"map返回的是一个数组",[380,72108,72110],{"id":72109},"_357-数组中join方法","3.5.7 数组中join方法",[14,72112,72113],{},[1727,72114],{"alt":23,"src":72115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72117,72118],{},"类似于python中拼接字符串一样！",[363,72120,72121,72124,72127],{},[366,72122,72123],{},"小括号为空则逗号分开",[366,72125,72126],{},"小括号为空字符串 ''，则元素之间没有分隔符",[366,72128,72129],{},"小括号用啥符号就用进行分割",[380,72131,72133],{"id":72132},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[363,72135,72136,72139,72142,72145,72148],{},[366,72137,72138],{},"记住本地时间获取快速方式：new Date().toDateString()",[366,72140,72141],{},"尽量减少DOM操作，用好map+join的渲染方式",[366,72143,72144],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[366,72146,72147],{},"return可以实现函数的结束",[366,72149,72150],{},"禁止跳转是 preventDefault() 不要忘记",[18,72152,72154],{"className":50889,"code":72153,"language":50891,"meta":23,"style":23},"\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",[25,72155,72156,72166,72180,72184,72192,72206,72226,72238,72246,72252,72262,72272,72276,72280,72286,72296,72308,72312,72316,72323,72335,72349,72359,72363,72367,72374,72381,72388,72400,72412,72422,72434,72438,72442,72449,72456,72468,72480,72490,72502,72532,72536,72540,72547,72559,72571,72595,72605,72615,72619,72623,72631,72642,72654,72666,72678,72695,72707,72719,72723,72727,72734,72746,72758,72770,72781,72799,72812,72824,72848,72859,72863,72867,72875,72885,72889,72893,72899,72911,72922,72932,72936,72940,72946,72968,72972,72976,72982,72988,73000,73010,73022,73052,73065,73082,73086,73090,73101,73123,73133,73137,73141,73154,73164,73176,73188,73200,73212,73222,73232,73242,73253,73266,73270,73278,73286,73290,73298,73311,73331,73364,73397,73430,73456,73474,73492,73500,73526,73544,73562,73580,73598,73616,73624,73632,73650,73658,73687,73695,73703,73711,73724,73736,73748,73760,73772,73784,73797,73809,73817,73825,73833,73838,73843,73847,73851,73855,73859,73863,73867,73872,73877,73882,73887,73895,73903,73911,73916,73921,73926,73931,73936,73941,73946,73951,73956,73961,73966,73971,73976,73981,73985,73990,73995,74005,74014,74018,74023,74032,74048,74090,74130,74169,74234,74242,74246,74251,74269,74277,74282,74287,74317,74323,74328,74341,74353,74365,74377,74389,74401,74413,74417,74427,74431,74436,74441,74445,74454,74458,74463,74468,74487,74492,74512,74516,74521,74525,74530,74548,74566,74584,74603,74622,74641,74646,74652,74673,74679,74688,74694,74700,74706,74733,74746,74751,74761,74767,74773,74779,74785,74790,74796,74802,74808,74814,74847,74852,74857,74862,74867,74873,74879,74885,74896,74901,74907,74914,74928,74934,74958,74963,74968,74974,74980,75001,75007,75020,75026,75032,75038,75044,75049,75055,75061,75067,75085,75099,75105,75113,75119,75141,75146,75151,75156,75161,75166,75175,75184,75189],{"__ignoreMap":23},[28,72157,72158,72160,72162,72164],{"class":30,"line":31},[28,72159,51553],{"class":38},[28,72161,51557],{"class":51556},[28,72163,51560],{"class":2225},[28,72165,51563],{"class":38},[28,72167,72168,72170,72172,72174,72176,72178],{"class":30,"line":48},[28,72169,1307],{"class":38},[28,72171,50891],{"class":51556},[28,72173,51572],{"class":2225},[28,72175,54],{"class":38},[28,72177,51577],{"class":127},[28,72179,51563],{"class":38},[28,72181,72182],{"class":30,"line":84},[28,72183,2662],{"emptyLinePlaceholder":336},[28,72185,72186,72188,72190],{"class":30,"line":91},[28,72187,1307],{"class":38},[28,72189,51590],{"class":51556},[28,72191,51563],{"class":38},[28,72193,72194,72196,72198,72200,72202,72204],{"class":30,"line":97},[28,72195,52400],{"class":38},[28,72197,51600],{"class":51556},[28,72199,51603],{"class":2225},[28,72201,54],{"class":38},[28,72203,51608],{"class":127},[28,72205,51563],{"class":38},[28,72207,72208,72210,72212,72214,72216,72218,72220,72222,72224],{"class":30,"line":103},[28,72209,52400],{"class":38},[28,72211,51600],{"class":51556},[28,72213,15182],{"class":2225},[28,72215,54],{"class":38},[28,72217,51647],{"class":127},[28,72219,51627],{"class":2225},[28,72221,54],{"class":38},[28,72223,51654],{"class":127},[28,72225,51563],{"class":38},[28,72227,72228,72230,72232,72234,72236],{"class":30,"line":109},[28,72229,52400],{"class":38},[28,72231,51663],{"class":51556},[28,72233,51666],{"class":38},[28,72235,51663],{"class":51556},[28,72237,51563],{"class":38},[28,72239,72240,72242,72244],{"class":30,"line":118},[28,72241,52400],{"class":38},[28,72243,328],{"class":51556},[28,72245,51563],{"class":38},[28,72247,72248,72250],{"class":30,"line":124},[28,72249,6665],{"class":51556},[28,72251,15834],{"class":38},[28,72253,72254,72256,72258,72260],{"class":30,"line":131},[28,72255,54951],{"class":60},[28,72257,51693],{"class":38},[28,72259,244],{"class":60},[28,72261,1558],{"class":38},[28,72263,72264,72266,72268,72270],{"class":30,"line":137},[28,72265,54962],{"class":60},[28,72267,51693],{"class":38},[28,72269,244],{"class":60},[28,72271,1558],{"class":38},[28,72273,72274],{"class":30,"line":143},[28,72275,2449],{"class":38},[28,72277,72278],{"class":30,"line":149},[28,72279,2662],{"emptyLinePlaceholder":336},[28,72281,72282,72284],{"class":30,"line":1890},[28,72283,57535],{"class":51556},[28,72285,15834],{"class":38},[28,72287,72288,72290,72292,72294],{"class":30,"line":1904},[28,72289,57542],{"class":60},[28,72291,51693],{"class":38},[28,72293,51848],{"class":60},[28,72295,1558],{"class":38},[28,72297,72298,72300,72302,72304,72306],{"class":30,"line":1909},[28,72299,62333],{"class":60},[28,72301,51693],{"class":38},[28,72303,1098],{"class":60},[28,72305,51748],{"class":34},[28,72307,1558],{"class":38},[28,72309,72310],{"class":30,"line":1915},[28,72311,2449],{"class":38},[28,72313,72314],{"class":30,"line":1936},[28,72315,2662],{"emptyLinePlaceholder":336},[28,72317,72318,72321],{"class":30,"line":1941},[28,72319,72320],{"class":2225},"    .info",[28,72322,15834],{"class":38},[28,72324,72325,72327,72329,72331,72333],{"class":30,"line":1955},[28,72326,55027],{"class":60},[28,72328,51693],{"class":38},[28,72330,51745],{"class":60},[28,72332,51748],{"class":34},[28,72334,1558],{"class":38},[28,72336,72337,72339,72341,72343,72345,72347],{"class":30,"line":1960},[28,72338,54962],{"class":60},[28,72340,51693],{"class":38},[28,72342,845],{"class":60},[28,72344,51748],{"class":34},[28,72346,51812],{"class":60},[28,72348,1558],{"class":38},[28,72350,72351,72353,72355,72357],{"class":30,"line":1989},[28,72352,57542],{"class":60},[28,72354,51693],{"class":38},[28,72356,51848],{"class":60},[28,72358,1558],{"class":38},[28,72360,72361],{"class":30,"line":1994},[28,72362,2449],{"class":38},[28,72364,72365],{"class":30,"line":2011},[28,72366,2662],{"emptyLinePlaceholder":336},[28,72368,72369,72372],{"class":30,"line":2016},[28,72370,72371],{"class":2225},"    .uname",[28,72373,31723],{"class":38},[28,72375,72376,72379],{"class":30,"line":2021},[28,72377,72378],{"class":2225},"    .age",[28,72380,31723],{"class":38},[28,72382,72383,72386],{"class":30,"line":2026},[28,72384,72385],{"class":2225},"    .salary",[28,72387,15834],{"class":38},[28,72389,72390,72392,72394,72396,72398],{"class":30,"line":2040},[28,72391,55027],{"class":60},[28,72393,51693],{"class":38},[28,72395,713],{"class":60},[28,72397,51748],{"class":34},[28,72399,1558],{"class":38},[28,72401,72402,72404,72406,72408,72410],{"class":30,"line":2045},[28,72403,55041],{"class":60},[28,72405,51693],{"class":38},[28,72407,1098],{"class":60},[28,72409,51748],{"class":34},[28,72411,1558],{"class":38},[28,72413,72414,72416,72418,72420],{"class":30,"line":2839},[28,72415,62036],{"class":60},[28,72417,51693],{"class":38},[28,72419,54993],{"class":60},[28,72421,1558],{"class":38},[28,72423,72424,72426,72428,72430,72432],{"class":30,"line":2853},[28,72425,62006],{"class":60},[28,72427,51693],{"class":38},[28,72429,973],{"class":60},[28,72431,51748],{"class":34},[28,72433,1558],{"class":38},[28,72435,72436],{"class":30,"line":2861},[28,72437,2449],{"class":38},[28,72439,72440],{"class":30,"line":2866},[28,72441,2662],{"emptyLinePlaceholder":336},[28,72443,72444,72447],{"class":30,"line":2872},[28,72445,72446],{"class":2225},"    .gender",[28,72448,31723],{"class":38},[28,72450,72451,72454],{"class":30,"line":2878},[28,72452,72453],{"class":2225},"    .city",[28,72455,15834],{"class":38},[28,72457,72458,72460,72462,72464,72466],{"class":30,"line":2883},[28,72459,55027],{"class":60},[28,72461,51693],{"class":38},[28,72463,713],{"class":60},[28,72465,51748],{"class":34},[28,72467,1558],{"class":38},[28,72469,72470,72472,72474,72476,72478],{"class":30,"line":8210},[28,72471,55041],{"class":60},[28,72473,51693],{"class":38},[28,72475,1222],{"class":60},[28,72477,51748],{"class":34},[28,72479,1558],{"class":38},[28,72481,72482,72484,72486,72488],{"class":30,"line":8234},[28,72483,62036],{"class":60},[28,72485,51693],{"class":38},[28,72487,54993],{"class":60},[28,72489,1558],{"class":38},[28,72491,72492,72494,72496,72498,72500],{"class":30,"line":8239},[28,72493,62006],{"class":60},[28,72495,51693],{"class":38},[28,72497,973],{"class":60},[28,72499,51748],{"class":34},[28,72501,1558],{"class":38},[28,72503,72504,72506,72508,72510,72512,72514,72517,72519,72521,72523,72526,72528,72530],{"class":30,"line":8245},[28,72505,62233],{"class":60},[28,72507,51693],{"class":38},[28,72509,61],{"class":60},[28,72511,51748],{"class":34},[28,72513,51777],{"class":60},[28,72515,72516],{"class":60}," rgb",[28,72518,413],{"class":38},[28,72520,1984],{"class":60},[28,72522,12697],{"class":38},[28,72524,72525],{"class":60},"197",[28,72527,12697],{"class":38},[28,72529,72525],{"class":60},[28,72531,2981],{"class":38},[28,72533,72534],{"class":30,"line":8272},[28,72535,2449],{"class":38},[28,72537,72538],{"class":30,"line":8277},[28,72539,2662],{"emptyLinePlaceholder":336},[28,72541,72542,72545],{"class":30,"line":8283},[28,72543,72544],{"class":51556},"    button",[28,72546,15834],{"class":38},[28,72548,72549,72551,72553,72555,72557],{"class":30,"line":8295},[28,72550,55041],{"class":60},[28,72552,51693],{"class":38},[28,72554,1222],{"class":60},[28,72556,51748],{"class":34},[28,72558,1558],{"class":38},[28,72560,72561,72563,72565,72567,72569],{"class":30,"line":8307},[28,72562,55027],{"class":60},[28,72564,51693],{"class":38},[28,72566,883],{"class":60},[28,72568,51748],{"class":34},[28,72570,1558],{"class":38},[28,72572,72573,72575,72577,72580,72582,72584,72586,72589,72591,72593],{"class":30,"line":8319},[28,72574,55140],{"class":60},[28,72576,51693],{"class":38},[28,72578,72579],{"class":60},"rgb",[28,72581,413],{"class":38},[28,72583,1366],{"class":60},[28,72585,12697],{"class":38},[28,72587,72588],{"class":60},"187",[28,72590,12697],{"class":38},[28,72592,701],{"class":60},[28,72594,2981],{"class":38},[28,72596,72597,72599,72601,72603],{"class":30,"line":9978},[28,72598,57672],{"class":60},[28,72600,51693],{"class":38},[28,72602,61098],{"class":60},[28,72604,1558],{"class":38},[28,72606,72607,72609,72611,72613],{"class":30,"line":10003},[28,72608,62233],{"class":60},[28,72610,51693],{"class":38},[28,72612,244],{"class":60},[28,72614,1558],{"class":38},[28,72616,72617],{"class":30,"line":10026},[28,72618,2449],{"class":38},[28,72620,72621],{"class":30,"line":10050},[28,72622,2662],{"emptyLinePlaceholder":336},[28,72624,72625,72627,72629],{"class":30,"line":10055},[28,72626,72544],{"class":51556},[28,72628,51944],{"class":51556},[28,72630,15834],{"class":38},[28,72632,72633,72635,72637,72640],{"class":30,"line":10060},[28,72634,55265],{"class":60},[28,72636,51693],{"class":38},[28,72638,72639],{"class":60},"inline-block",[28,72641,1558],{"class":38},[28,72643,72644,72646,72648,72650,72652],{"class":30,"line":10065},[28,72645,55027],{"class":60},[28,72647,51693],{"class":38},[28,72649,845],{"class":60},[28,72651,51748],{"class":34},[28,72653,1558],{"class":38},[28,72655,72656,72658,72660,72662,72664],{"class":30,"line":10074},[28,72657,55041],{"class":60},[28,72659,51693],{"class":38},[28,72661,845],{"class":60},[28,72663,51748],{"class":34},[28,72665,1558],{"class":38},[28,72667,72668,72670,72672,72674,72676],{"class":30,"line":10079},[28,72669,57615],{"class":60},[28,72671,51693],{"class":38},[28,72673,871],{"class":60},[28,72675,51748],{"class":34},[28,72677,1558],{"class":38},[28,72679,72680,72682,72684,72686,72688,72690,72693],{"class":30,"line":10085},[28,72681,62233],{"class":60},[28,72683,51693],{"class":38},[28,72685,61],{"class":60},[28,72687,51748],{"class":34},[28,72689,51777],{"class":60},[28,72691,72692],{"class":60}," #fff",[28,72694,1558],{"class":38},[28,72696,72697,72699,72701,72703,72705],{"class":30,"line":10106},[28,72698,55390],{"class":60},[28,72700,51693],{"class":38},[28,72702,721],{"class":60},[28,72704,51748],{"class":34},[28,72706,1558],{"class":38},[28,72708,72709,72711,72713,72715,72717],{"class":30,"line":10112},[28,72710,62006],{"class":60},[28,72712,51693],{"class":38},[28,72714,61],{"class":60},[28,72716,51748],{"class":34},[28,72718,1558],{"class":38},[28,72720,72721],{"class":30,"line":10126},[28,72722,2449],{"class":38},[28,72724,72725],{"class":30,"line":10132},[28,72726,2662],{"emptyLinePlaceholder":336},[28,72728,72729,72732],{"class":30,"line":10159},[28,72730,72731],{"class":2225},"    .total",[28,72733,15834],{"class":38},[28,72735,72736,72738,72740,72742,72744],{"class":30,"line":10168},[28,72737,55027],{"class":60},[28,72739,51693],{"class":38},[28,72741,61885],{"class":60},[28,72743,51748],{"class":34},[28,72745,1558],{"class":38},[28,72747,72748,72750,72752,72754,72756],{"class":30,"line":10174},[28,72749,55041],{"class":60},[28,72751,51693],{"class":38},[28,72753,800],{"class":60},[28,72755,51748],{"class":34},[28,72757,1558],{"class":38},[28,72759,72760,72762,72764,72766,72768],{"class":30,"line":10182},[28,72761,57615],{"class":60},[28,72763,51693],{"class":38},[28,72765,800],{"class":60},[28,72767,51748],{"class":34},[28,72769,1558],{"class":38},[28,72771,72772,72774,72776,72779],{"class":30,"line":10187},[28,72773,57542],{"class":60},[28,72775,51693],{"class":38},[28,72777,72778],{"class":60},"right",[28,72780,1558],{"class":38},[28,72782,72783,72785,72787,72789,72791,72793,72795,72797],{"class":30,"line":16866},[28,72784,54962],{"class":60},[28,72786,51693],{"class":38},[28,72788,800],{"class":60},[28,72790,51748],{"class":34},[28,72792,51812],{"class":60},[28,72794,2300],{"class":60},[28,72796,51748],{"class":34},[28,72798,1558],{"class":38},[28,72800,72801,72804,72806,72808,72810],{"class":30,"line":16872},[28,72802,72803],{"class":60},"      padding-right",[28,72805,51693],{"class":38},[28,72807,845],{"class":60},[28,72809,51748],{"class":34},[28,72811,1558],{"class":38},[28,72813,72814,72816,72818,72820,72822],{"class":30,"line":16895},[28,72815,55178],{"class":60},[28,72817,51693],{"class":38},[28,72819,67],{"class":60},[28,72821,51748],{"class":34},[28,72823,1558],{"class":38},[28,72825,72826,72828,72830,72832,72834,72837,72839,72842,72844,72846],{"class":30,"line":16901},[28,72827,55140],{"class":60},[28,72829,51693],{"class":38},[28,72831,72579],{"class":60},[28,72833,413],{"class":38},[28,72835,72836],{"class":60},"237",[28,72838,12697],{"class":38},[28,72840,72841],{"class":60},"235",[28,72843,12697],{"class":38},[28,72845,72841],{"class":60},[28,72847,2981],{"class":38},[28,72849,72850,72853,72855,72857],{"class":30,"line":16924},[28,72851,72852],{"class":60},"      box-sizing",[28,72854,51693],{"class":38},[28,72856,60761],{"class":60},[28,72858,1558],{"class":38},[28,72860,72861],{"class":30,"line":16938},[28,72862,2449],{"class":38},[28,72864,72865],{"class":30,"line":16958},[28,72866,2662],{"emptyLinePlaceholder":336},[28,72868,72869,72871,72873],{"class":30,"line":16964},[28,72870,72731],{"class":2225},[28,72872,51944],{"class":51556},[28,72874,15834],{"class":38},[28,72876,72877,72879,72881,72883],{"class":30,"line":16975},[28,72878,57672],{"class":60},[28,72880,51693],{"class":38},[28,72882,57677],{"class":60},[28,72884,1558],{"class":38},[28,72886,72887],{"class":30,"line":16998},[28,72888,2449],{"class":38},[28,72890,72891],{"class":30,"line":17020},[28,72892,2662],{"emptyLinePlaceholder":336},[28,72894,72895,72897],{"class":30,"line":17025},[28,72896,65279],{"class":51556},[28,72898,15834],{"class":38},[28,72900,72901,72903,72905,72907,72909],{"class":30,"line":17031},[28,72902,55027],{"class":60},[28,72904,51693],{"class":38},[28,72906,61885],{"class":60},[28,72908,51748],{"class":34},[28,72910,1558],{"class":38},[28,72912,72913,72915,72917,72920],{"class":30,"line":17045},[28,72914,54962],{"class":60},[28,72916,51693],{"class":38},[28,72918,72919],{"class":60},"auto",[28,72921,1558],{"class":38},[28,72923,72924,72926,72928,72930],{"class":30,"line":17058},[28,72925,65286],{"class":60},[28,72927,51693],{"class":38},[28,72929,65291],{"class":60},[28,72931,1558],{"class":38},[28,72933,72934],{"class":30,"line":17063},[28,72935,2449],{"class":38},[28,72937,72938],{"class":30,"line":17077},[28,72939,2662],{"emptyLinePlaceholder":336},[28,72941,72942,72944],{"class":30,"line":17082},[28,72943,65371],{"class":51556},[28,72945,15834],{"class":38},[28,72947,72948,72950,72952,72954,72956,72958,72960,72962,72964,72966],{"class":30,"line":17088},[28,72949,55140],{"class":60},[28,72951,51693],{"class":38},[28,72953,72579],{"class":60},[28,72955,413],{"class":38},[28,72957,72836],{"class":60},[28,72959,12697],{"class":38},[28,72961,72841],{"class":60},[28,72963,12697],{"class":38},[28,72965,72841],{"class":60},[28,72967,2981],{"class":38},[28,72969,72970],{"class":30,"line":17093},[28,72971,2449],{"class":38},[28,72973,72974],{"class":30,"line":17107},[28,72975,2662],{"emptyLinePlaceholder":336},[28,72977,72978,72980],{"class":30,"line":17112},[28,72979,65371],{"class":51556},[28,72981,31723],{"class":38},[28,72983,72984,72986],{"class":30,"line":17117},[28,72985,65437],{"class":51556},[28,72987,15834],{"class":38},[28,72989,72990,72992,72994,72996,72998],{"class":30,"line":17131},[28,72991,55041],{"class":60},[28,72993,51693],{"class":38},[28,72995,676],{"class":60},[28,72997,51748],{"class":34},[28,72999,1558],{"class":38},[28,73001,73002,73004,73006,73008],{"class":30,"line":17143},[28,73003,57542],{"class":60},[28,73005,51693],{"class":38},[28,73007,23998],{"class":60},[28,73009,1558],{"class":38},[28,73011,73012,73014,73016,73018,73020],{"class":30,"line":17148},[28,73013,55178],{"class":60},[28,73015,51693],{"class":38},[28,73017,947],{"class":60},[28,73019,51748],{"class":34},[28,73021,1558],{"class":38},[28,73023,73024,73026,73028,73030,73032,73034,73036,73038,73041,73043,73046,73048,73050],{"class":30,"line":17161},[28,73025,62233],{"class":60},[28,73027,51693],{"class":38},[28,73029,61],{"class":60},[28,73031,51748],{"class":34},[28,73033,51777],{"class":60},[28,73035,72516],{"class":60},[28,73037,413],{"class":38},[28,73039,73040],{"class":60},"228",[28,73042,12697],{"class":38},[28,73044,73045],{"class":60},"225",[28,73047,12697],{"class":38},[28,73049,73045],{"class":60},[28,73051,2981],{"class":38},[28,73053,73054,73057,73059,73061,73063],{"class":30,"line":17166},[28,73055,73056],{"class":60},"      padding-left",[28,73058,51693],{"class":38},[28,73060,721],{"class":60},[28,73062,51748],{"class":34},[28,73064,1558],{"class":38},[28,73066,73067,73069,73071,73073,73076,73078,73080],{"class":30,"line":17171},[28,73068,62116],{"class":60},[28,73070,51693],{"class":38},[28,73072,28384],{"class":60},[28,73074,73075],{"class":60}," linear",[28,73077,62123],{"class":60},[28,73079,1093],{"class":34},[28,73081,1558],{"class":38},[28,73083,73084],{"class":30,"line":17176},[28,73085,2449],{"class":38},[28,73087,73088],{"class":30,"line":17189},[28,73089,2662],{"emptyLinePlaceholder":336},[28,73091,73092,73095,73097,73099],{"class":30,"line":17194},[28,73093,73094],{"class":51556},"    tbody",[28,73096,70400],{"class":51556},[28,73098,61196],{"class":2225},[28,73100,15834],{"class":38},[28,73102,73103,73105,73107,73109,73111,73113,73115,73117,73119,73121],{"class":30,"line":32889},[28,73104,55140],{"class":60},[28,73106,51693],{"class":38},[28,73108,72579],{"class":60},[28,73110,413],{"class":38},[28,73112,72836],{"class":60},[28,73114,12697],{"class":38},[28,73116,72841],{"class":60},[28,73118,12697],{"class":38},[28,73120,72841],{"class":60},[28,73122,2981],{"class":38},[28,73124,73125,73127,73129,73131],{"class":30,"line":32895},[28,73126,62281],{"class":60},[28,73128,51693],{"class":38},[28,73130,62286],{"class":60},[28,73132,1558],{"class":38},[28,73134,73135],{"class":30,"line":32901},[28,73136,2449],{"class":38},[28,73138,73139],{"class":30,"line":32907},[28,73140,2662],{"emptyLinePlaceholder":336},[28,73142,73143,73145,73147,73150,73152],{"class":30,"line":32913},[28,73144,73094],{"class":51556},[28,73146,70400],{"class":51556},[28,73148,73149],{"class":51556}," td",[28,73151,1663],{"class":51556},[28,73153,15834],{"class":38},[28,73155,73156,73158,73160,73162],{"class":30,"line":32924},[28,73157,55265],{"class":60},[28,73159,51693],{"class":38},[28,73161,61125],{"class":60},[28,73163,1558],{"class":38},[28,73165,73166,73168,73170,73172,73174],{"class":30,"line":32930},[28,73167,55027],{"class":60},[28,73169,51693],{"class":38},[28,73171,1304],{"class":60},[28,73173,51748],{"class":34},[28,73175,1558],{"class":38},[28,73177,73178,73180,73182,73184,73186],{"class":30,"line":32950},[28,73179,55041],{"class":60},[28,73181,51693],{"class":38},[28,73183,1222],{"class":60},[28,73185,51748],{"class":34},[28,73187,1558],{"class":38},[28,73189,73190,73192,73194,73196,73198],{"class":30,"line":32956},[28,73191,57615],{"class":60},[28,73193,51693],{"class":38},[28,73195,1222],{"class":60},[28,73197,51748],{"class":34},[28,73199,1558],{"class":38},[28,73201,73202,73204,73206,73208,73210],{"class":30,"line":32967},[28,73203,62333],{"class":60},[28,73205,51693],{"class":38},[28,73207,211],{"class":60},[28,73209,51748],{"class":34},[28,73211,1558],{"class":38},[28,73213,73214,73216,73218,73220],{"class":30,"line":32973},[28,73215,57672],{"class":60},[28,73217,51693],{"class":38},[28,73219,61098],{"class":60},[28,73221,1558],{"class":38},[28,73223,73224,73226,73228,73230],{"class":30,"line":32979},[28,73225,57542],{"class":60},[28,73227,51693],{"class":38},[28,73229,51848],{"class":60},[28,73231,1558],{"class":38},[28,73233,73234,73236,73238,73240],{"class":30,"line":32985},[28,73235,64226],{"class":60},[28,73237,51693],{"class":38},[28,73239,54993],{"class":60},[28,73241,1558],{"class":38},[28,73243,73244,73246,73248,73251],{"class":30,"line":32991},[28,73245,55140],{"class":60},[28,73247,51693],{"class":38},[28,73249,73250],{"class":60},"orange",[28,73252,1558],{"class":38},[28,73254,73255,73257,73259,73262,73264],{"class":30,"line":32997},[28,73256,55390],{"class":60},[28,73258,51693],{"class":38},[28,73260,73261],{"class":60},"12.5",[28,73263,51748],{"class":34},[28,73265,1558],{"class":38},[28,73267,73268],{"class":30,"line":33003},[28,73269,2449],{"class":38},[28,73271,73272,73274,73276],{"class":30,"line":33009},[28,73273,52673],{"class":38},[28,73275,328],{"class":51556},[28,73277,51563],{"class":38},[28,73279,73280,73282,73284],{"class":30,"line":33029},[28,73281,52041],{"class":38},[28,73283,51590],{"class":51556},[28,73285,51563],{"class":38},[28,73287,73288],{"class":30,"line":33035},[28,73289,2662],{"emptyLinePlaceholder":336},[28,73291,73292,73294,73296],{"class":30,"line":33051},[28,73293,1307],{"class":38},[28,73295,52056],{"class":51556},[28,73297,51563],{"class":38},[28,73299,73300,73302,73304,73307,73309],{"class":30,"line":33057},[28,73301,52400],{"class":38},[28,73303,351],{"class":51556},[28,73305,73306],{"class":38},">学生就业统计表\u003C\u002F",[28,73308,351],{"class":51556},[28,73310,51563],{"class":38},[28,73312,73313,73315,73317,73319,73321,73323,73325,73327,73329],{"class":30,"line":33071},[28,73314,52400],{"class":38},[28,73316,66881],{"class":51556},[28,73318,53742],{"class":2225},[28,73320,54],{"class":38},[28,73322,62920],{"class":127},[28,73324,69326],{"class":2225},[28,73326,54],{"class":38},[28,73328,32032],{"class":127},[28,73330,51563],{"class":38},[28,73332,73333,73335,73337,73339,73341,73343,73345,73347,73349,73351,73353,73356,73358,73360,73362],{"class":30,"line":33077},[28,73334,51597],{"class":38},[28,73336,54077],{"class":51556},[28,73338,54080],{"class":2225},[28,73340,54],{"class":38},[28,73342,62955],{"class":127},[28,73344,15182],{"class":2225},[28,73346,54],{"class":38},[28,73348,69352],{"class":127},[28,73350,61276],{"class":2225},[28,73352,54],{"class":38},[28,73354,73355],{"class":127},"\"姓名\"",[28,73357,53742],{"class":2225},[28,73359,54],{"class":38},[28,73361,69352],{"class":127},[28,73363,51563],{"class":38},[28,73365,73366,73368,73370,73372,73374,73376,73378,73380,73382,73384,73386,73389,73391,73393,73395],{"class":30,"line":33092},[28,73367,51597],{"class":38},[28,73369,54077],{"class":51556},[28,73371,54080],{"class":2225},[28,73373,54],{"class":38},[28,73375,62955],{"class":127},[28,73377,15182],{"class":2225},[28,73379,54],{"class":38},[28,73381,69380],{"class":127},[28,73383,61276],{"class":2225},[28,73385,54],{"class":38},[28,73387,73388],{"class":127},"\"年龄\"",[28,73390,53742],{"class":2225},[28,73392,54],{"class":38},[28,73394,69380],{"class":127},[28,73396,51563],{"class":38},[28,73398,73399,73401,73403,73405,73407,73409,73411,73413,73415,73417,73419,73422,73424,73426,73428],{"class":30,"line":33098},[28,73400,51597],{"class":38},[28,73402,54077],{"class":51556},[28,73404,54080],{"class":2225},[28,73406,54],{"class":38},[28,73408,62955],{"class":127},[28,73410,15182],{"class":2225},[28,73412,54],{"class":38},[28,73414,69482],{"class":127},[28,73416,61276],{"class":2225},[28,73418,54],{"class":38},[28,73420,73421],{"class":127},"\"薪资\"",[28,73423,53742],{"class":2225},[28,73425,54],{"class":38},[28,73427,69482],{"class":127},[28,73429,51563],{"class":38},[28,73431,73432,73434,73436,73438,73440,73442,73444,73446,73448,73450,73452,73454],{"class":30,"line":33107},[28,73433,51597],{"class":38},[28,73435,69400],{"class":51556},[28,73437,15182],{"class":2225},[28,73439,54],{"class":38},[28,73441,69407],{"class":127},[28,73443,15221],{"class":2225},[28,73445,54],{"class":38},[28,73447,7914],{"class":127},[28,73449,53742],{"class":2225},[28,73451,54],{"class":38},[28,73453,69407],{"class":127},[28,73455,51563],{"class":38},[28,73457,73458,73460,73462,73464,73466,73468,73470,73472],{"class":30,"line":33113},[28,73459,55490],{"class":38},[28,73461,69422],{"class":51556},[28,73463,66907],{"class":2225},[28,73465,54],{"class":38},[28,73467,10223],{"class":127},[28,73469,69431],{"class":38},[28,73471,69422],{"class":51556},[28,73473,51563],{"class":38},[28,73475,73476,73478,73480,73482,73484,73486,73488,73490],{"class":30,"line":33122},[28,73477,55490],{"class":38},[28,73479,69422],{"class":51556},[28,73481,66907],{"class":2225},[28,73483,54],{"class":38},[28,73485,10292],{"class":127},[28,73487,69450],{"class":38},[28,73489,69422],{"class":51556},[28,73491,51563],{"class":38},[28,73493,73494,73496,73498],{"class":30,"line":33128},[28,73495,52032],{"class":38},[28,73497,69400],{"class":51556},[28,73499,51563],{"class":38},[28,73501,73502,73504,73506,73508,73510,73512,73514,73516,73518,73520,73522,73524],{"class":30,"line":33134},[28,73503,51597],{"class":38},[28,73505,69400],{"class":51556},[28,73507,15182],{"class":2225},[28,73509,54],{"class":38},[28,73511,69504],{"class":127},[28,73513,15221],{"class":2225},[28,73515,54],{"class":38},[28,73517,7914],{"class":127},[28,73519,53742],{"class":2225},[28,73521,54],{"class":38},[28,73523,69504],{"class":127},[28,73525,51563],{"class":38},[28,73527,73528,73530,73532,73534,73536,73538,73540,73542],{"class":30,"line":33143},[28,73529,55490],{"class":38},[28,73531,69422],{"class":51556},[28,73533,66907],{"class":2225},[28,73535,54],{"class":38},[28,73537,69525],{"class":127},[28,73539,69528],{"class":38},[28,73541,69422],{"class":51556},[28,73543,51563],{"class":38},[28,73545,73546,73548,73550,73552,73554,73556,73558,73560],{"class":30,"line":33149},[28,73547,55490],{"class":38},[28,73549,69422],{"class":51556},[28,73551,66907],{"class":2225},[28,73553,54],{"class":38},[28,73555,69545],{"class":127},[28,73557,69548],{"class":38},[28,73559,69422],{"class":51556},[28,73561,51563],{"class":38},[28,73563,73564,73566,73568,73570,73572,73574,73576,73578],{"class":30,"line":33160},[28,73565,55490],{"class":38},[28,73567,69422],{"class":51556},[28,73569,66907],{"class":2225},[28,73571,54],{"class":38},[28,73573,69565],{"class":127},[28,73575,69568],{"class":38},[28,73577,69422],{"class":51556},[28,73579,51563],{"class":38},[28,73581,73582,73584,73586,73588,73590,73592,73594,73596],{"class":30,"line":33166},[28,73583,55490],{"class":38},[28,73585,69422],{"class":51556},[28,73587,66907],{"class":2225},[28,73589,54],{"class":38},[28,73591,69585],{"class":127},[28,73593,69588],{"class":38},[28,73595,69422],{"class":51556},[28,73597,51563],{"class":38},[28,73599,73600,73602,73604,73606,73608,73610,73612,73614],{"class":30,"line":33185},[28,73601,55490],{"class":38},[28,73603,69422],{"class":51556},[28,73605,66907],{"class":2225},[28,73607,54],{"class":38},[28,73609,69605],{"class":127},[28,73611,69608],{"class":38},[28,73613,69422],{"class":51556},[28,73615,51563],{"class":38},[28,73617,73618,73620,73622],{"class":30,"line":33191},[28,73619,52032],{"class":38},[28,73621,69400],{"class":51556},[28,73623,51563],{"class":38},[28,73625,73626,73628,73630],{"class":30,"line":33202},[28,73627,51597],{"class":38},[28,73629,54143],{"class":51556},[28,73631,51563],{"class":38},[28,73633,73634,73636,73638,73641,73643,73646,73648],{"class":30,"line":33208},[28,73635,55490],{"class":38},[28,73637,28],{"class":51556},[28,73639,73640],{"class":38},">+\u003C\u002F",[28,73642,28],{"class":51556},[28,73644,73645],{"class":38},">添加\u003C\u002F",[28,73647,54143],{"class":51556},[28,73649,51563],{"class":38},[28,73651,73652,73654,73656],{"class":30,"line":33228},[28,73653,52673],{"class":38},[28,73655,66881],{"class":51556},[28,73657,51563],{"class":38},[28,73659,73660,73662,73664,73666,73668,73670,73673,73675,73678,73680,73683,73685],{"class":30,"line":33244},[28,73661,52400],{"class":38},[28,73663,51867],{"class":51556},[28,73665,53742],{"class":2225},[28,73667,54],{"class":38},[28,73669,62836],{"class":127},[28,73671,73672],{"class":38},">共有数据 \u003C",[28,73674,28],{"class":51556},[28,73676,73677],{"class":38},">0\u003C\u002F",[28,73679,28],{"class":51556},[28,73681,73682],{"class":38},"> 条\u003C\u002F",[28,73684,51867],{"class":51556},[28,73686,51563],{"class":38},[28,73688,73689,73691,73693],{"class":30,"line":33250},[28,73690,52400],{"class":38},[28,73692,543],{"class":51556},[28,73694,51563],{"class":38},[28,73696,73697,73699,73701],{"class":30,"line":33264},[28,73698,51597],{"class":38},[28,73700,546],{"class":51556},[28,73702,51563],{"class":38},[28,73704,73705,73707,73709],{"class":30,"line":33270},[28,73706,55490],{"class":38},[28,73708,549],{"class":51556},[28,73710,51563],{"class":38},[28,73712,73713,73715,73717,73720,73722],{"class":30,"line":33276},[28,73714,55558],{"class":38},[28,73716,552],{"class":51556},[28,73718,73719],{"class":38},">ID\u003C\u002F",[28,73721,552],{"class":51556},[28,73723,51563],{"class":38},[28,73725,73726,73728,73730,73732,73734],{"class":30,"line":33287},[28,73727,55558],{"class":38},[28,73729,552],{"class":51556},[28,73731,69711],{"class":38},[28,73733,552],{"class":51556},[28,73735,51563],{"class":38},[28,73737,73738,73740,73742,73744,73746],{"class":30,"line":33293},[28,73739,55558],{"class":38},[28,73741,552],{"class":51556},[28,73743,69724],{"class":38},[28,73745,552],{"class":51556},[28,73747,51563],{"class":38},[28,73749,73750,73752,73754,73756,73758],{"class":30,"line":33299},[28,73751,55558],{"class":38},[28,73753,552],{"class":51556},[28,73755,69737],{"class":38},[28,73757,552],{"class":51556},[28,73759,51563],{"class":38},[28,73761,73762,73764,73766,73768,73770],{"class":30,"line":33309},[28,73763,55558],{"class":38},[28,73765,552],{"class":51556},[28,73767,69750],{"class":38},[28,73769,552],{"class":51556},[28,73771,51563],{"class":38},[28,73773,73774,73776,73778,73780,73782],{"class":30,"line":33315},[28,73775,55558],{"class":38},[28,73777,552],{"class":51556},[28,73779,69763],{"class":38},[28,73781,552],{"class":51556},[28,73783,51563],{"class":38},[28,73785,73786,73788,73790,73793,73795],{"class":30,"line":33326},[28,73787,55558],{"class":38},[28,73789,552],{"class":51556},[28,73791,73792],{"class":38},">录入时间\u003C\u002F",[28,73794,552],{"class":51556},[28,73796,51563],{"class":38},[28,73798,73799,73801,73803,73805,73807],{"class":30,"line":33332},[28,73800,55558],{"class":38},[28,73802,552],{"class":51556},[28,73804,69776],{"class":38},[28,73806,552],{"class":51556},[28,73808,51563],{"class":38},[28,73810,73811,73813,73815],{"class":30,"line":33342},[28,73812,55663],{"class":38},[28,73814,549],{"class":51556},[28,73816,51563],{"class":38},[28,73818,73819,73821,73823],{"class":30,"line":33347},[28,73820,52032],{"class":38},[28,73822,546],{"class":51556},[28,73824,51563],{"class":38},[28,73826,73827,73829,73831],{"class":30,"line":33353},[28,73828,51597],{"class":38},[28,73830,590],{"class":51556},[28,73832,51563],{"class":38},[28,73834,73835],{"class":30,"line":33402},[28,73836,73837],{"class":87},"      \u003C!-- \u003Ctr>\n",[28,73839,73840],{"class":30,"line":33449},[28,73841,73842],{"class":87},"        \u003Ctd>1\u003C\u002Ftd>\n",[28,73844,73845],{"class":30,"line":33454},[28,73846,73842],{"class":87},[28,73848,73849],{"class":30,"line":33460},[28,73850,73842],{"class":87},[28,73852,73853],{"class":30,"line":33479},[28,73854,73842],{"class":87},[28,73856,73857],{"class":30,"line":33485},[28,73858,73842],{"class":87},[28,73860,73861],{"class":30,"line":33505},[28,73862,73842],{"class":87},[28,73864,73865],{"class":30,"line":33511},[28,73866,73842],{"class":87},[28,73868,73869],{"class":30,"line":33517},[28,73870,73871],{"class":87},"        \u003Ctd>\n",[28,73873,73874],{"class":30,"line":33527},[28,73875,73876],{"class":87},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[28,73878,73879],{"class":30,"line":33532},[28,73880,73881],{"class":87},"        \u003C\u002Ftd>\n",[28,73883,73884],{"class":30,"line":33538},[28,73885,73886],{"class":87},"      \u003C\u002Ftr> -->\n",[28,73888,73889,73891,73893],{"class":30,"line":33554},[28,73890,52032],{"class":38},[28,73892,590],{"class":51556},[28,73894,51563],{"class":38},[28,73896,73897,73899,73901],{"class":30,"line":33599},[28,73898,52673],{"class":38},[28,73900,543],{"class":51556},[28,73902,51563],{"class":38},[28,73904,73905,73907,73909],{"class":30,"line":33605},[28,73906,52400],{"class":38},[28,73908,52069],{"class":51556},[28,73910,51563],{"class":38},[28,73912,73913],{"class":30,"line":33611},[28,73914,73915],{"class":87},"    \u002F\u002F const initData = [{\n",[28,73917,73918],{"class":30,"line":33617},[28,73919,73920],{"class":87},"    \u002F\u002F   unameId: 1,\n",[28,73922,73923],{"class":30,"line":33628},[28,73924,73925],{"class":87},"    \u002F\u002F   uname: '华晨宇',\n",[28,73927,73928],{"class":30,"line":33634},[28,73929,73930],{"class":87},"    \u002F\u002F   age: 22,\n",[28,73932,73933],{"class":30,"line":33640},[28,73934,73935],{"class":87},"    \u002F\u002F   salary: 12000,\n",[28,73937,73938],{"class":30,"line":33646},[28,73939,73940],{"class":87},"    \u002F\u002F   gender: '男',\n",[28,73942,73943],{"class":30,"line":33664},[28,73944,73945],{"class":87},"    \u002F\u002F   city: '北京',\n",[28,73947,73948],{"class":30,"line":33678},[28,73949,73950],{"class":87},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[28,73952,73953],{"class":30,"line":33687},[28,73954,73955],{"class":87},"    \u002F\u002F }]\n",[28,73957,73958],{"class":30,"line":33696},[28,73959,73960],{"class":87},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[28,73962,73963],{"class":30,"line":33705},[28,73964,73965],{"class":87},"    \u002F\u002F 1.渲染业务\n",[28,73967,73968],{"class":30,"line":33714},[28,73969,73970],{"class":87},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[28,73972,73973],{"class":30,"line":33720},[28,73974,73975],{"class":87},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[28,73977,73978],{"class":30,"line":33726},[28,73979,73980],{"class":87},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[28,73982,73983],{"class":30,"line":33734},[28,73984,2662],{"emptyLinePlaceholder":336},[28,73986,73987],{"class":30,"line":33739},[28,73988,73989],{"class":87},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[28,73991,73992],{"class":30,"line":33745},[28,73993,73994],{"class":87},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[28,73996,73997,73999,74001,74003],{"class":30,"line":33756},[28,73998,11483],{"class":34},[28,74000,57951],{"class":60},[28,74002,13826],{"class":34},[28,74004,52094],{"class":38},[28,74006,74007,74010,74012],{"class":30,"line":33762},[28,74008,74009],{"class":38},"    console.",[28,74011,58503],{"class":2225},[28,74013,52668],{"class":38},[28,74015,74016],{"class":30,"line":33782},[28,74017,2662],{"emptyLinePlaceholder":336},[28,74019,74020],{"class":30,"line":33788},[28,74021,74022],{"class":87},"    \u002F\u002F 时间函数\n",[28,74024,74025,74027,74030],{"class":30,"line":33794},[28,74026,70340],{"class":34},[28,74028,74029],{"class":2225}," getTime",[28,74031,11115],{"class":38},[28,74033,74034,74036,74039,74041,74043,74046],{"class":30,"line":33800},[28,74035,58484],{"class":34},[28,74037,74038],{"class":60}," date",[28,74040,13826],{"class":34},[28,74042,11840],{"class":34},[28,74044,74045],{"class":2225}," Date",[28,74047,2238],{"class":38},[28,74049,74050,74052,74054,74056,74059,74062,74064,74066,74068,74071,74074,74076,74078,74080,74082,74084,74086,74088],{"class":30,"line":33817},[28,74051,58484],{"class":34},[28,74053,16353],{"class":60},[28,74055,13826],{"class":34},[28,74057,74058],{"class":38}," date.",[28,74060,74061],{"class":2225},"getHours",[28,74063,13312],{"class":38},[28,74065,1307],{"class":34},[28,74067,2300],{"class":60},[28,74069,74070],{"class":34}," ?",[28,74072,74073],{"class":127}," '0'",[28,74075,45822],{"class":34},[28,74077,74058],{"class":38},[28,74079,74061],{"class":2225},[28,74081,13312],{"class":38},[28,74083,1256],{"class":34},[28,74085,74058],{"class":38},[28,74087,74061],{"class":2225},[28,74089,2238],{"class":38},[28,74091,74092,74094,74097,74099,74101,74104,74106,74108,74110,74112,74114,74116,74118,74120,74122,74124,74126,74128],{"class":30,"line":33823},[28,74093,58484],{"class":34},[28,74095,74096],{"class":60}," m",[28,74098,13826],{"class":34},[28,74100,74058],{"class":38},[28,74102,74103],{"class":2225},"getMinutes",[28,74105,13312],{"class":38},[28,74107,1307],{"class":34},[28,74109,2300],{"class":60},[28,74111,74070],{"class":34},[28,74113,74073],{"class":127},[28,74115,45822],{"class":34},[28,74117,74058],{"class":38},[28,74119,74103],{"class":2225},[28,74121,13312],{"class":38},[28,74123,1256],{"class":34},[28,74125,74058],{"class":38},[28,74127,74103],{"class":2225},[28,74129,2238],{"class":38},[28,74131,74132,74134,74136,74138,74140,74143,74145,74147,74149,74151,74153,74155,74157,74159,74161,74163,74165,74167],{"class":30,"line":33829},[28,74133,58484],{"class":34},[28,74135,8690],{"class":60},[28,74137,13826],{"class":34},[28,74139,74058],{"class":38},[28,74141,74142],{"class":2225},"getSeconds",[28,74144,13312],{"class":38},[28,74146,1307],{"class":34},[28,74148,2300],{"class":60},[28,74150,74070],{"class":34},[28,74152,74073],{"class":127},[28,74154,45822],{"class":34},[28,74156,74058],{"class":38},[28,74158,74142],{"class":2225},[28,74160,13312],{"class":38},[28,74162,1256],{"class":34},[28,74164,74058],{"class":38},[28,74166,74142],{"class":2225},[28,74168,2238],{"class":38},[28,74170,74171,74173,74176,74178,74180,74183,74185,74188,74190,74193,74195,74197,74200,74202,74204,74206,74208,74210,74212,74215,74217,74220,74222,74225,74227,74229,74231],{"class":30,"line":33835},[28,74172,58484],{"class":34},[28,74174,74175],{"class":60}," str",[28,74177,13826],{"class":34},[28,74179,63159],{"class":127},[28,74181,74182],{"class":38},"date",[28,74184,956],{"class":127},[28,74186,74187],{"class":2225},"getFullYear",[28,74189,2689],{"class":127},[28,74191,74192],{"class":127},"}\u002F${",[28,74194,74182],{"class":38},[28,74196,956],{"class":127},[28,74198,74199],{"class":2225},"getMonth",[28,74201,13312],{"class":127},[28,74203,880],{"class":34},[28,74205,25381],{"class":60},[28,74207,74192],{"class":127},[28,74209,74182],{"class":38},[28,74211,956],{"class":127},[28,74213,74214],{"class":2225},"getDate",[28,74216,2689],{"class":127},[28,74218,74219],{"class":127},"} ${",[28,74221,814],{"class":38},[28,74223,74224],{"class":127},"}:${",[28,74226,942],{"class":38},[28,74228,74224],{"class":127},[28,74230,1093],{"class":38},[28,74232,74233],{"class":127},"}`\n",[28,74235,74236,74239],{"class":30,"line":33841},[28,74237,74238],{"class":34},"      return",[28,74240,74241],{"class":38}," str\n",[28,74243,74244],{"class":30,"line":33847},[28,74245,2449],{"class":38},[28,74247,74248],{"class":30,"line":33874},[28,74249,74250],{"class":87},"    \u002F\u002F 渲染函数\n",[28,74252,74253,74255,74257,74259,74261,74263,74265,74267],{"class":30,"line":33898},[28,74254,11483],{"class":34},[28,74256,70003],{"class":60},[28,74258,13826],{"class":34},[28,74260,54652],{"class":38},[28,74262,54655],{"class":2225},[28,74264,413],{"class":38},[28,74266,70014],{"class":127},[28,74268,81],{"class":38},[28,74270,74271,74273,74275],{"class":30,"line":33904},[28,74272,70340],{"class":34},[28,74274,70343],{"class":2225},[28,74276,11115],{"class":38},[28,74278,74279],{"class":30,"line":33910},[28,74280,74281],{"class":87},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[28,74283,74284],{"class":30,"line":33916},[28,74285,74286],{"class":87},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[28,74288,74289,74291,74294,74296,74298,74301,74303,74305,74307,74310,74312,74315],{"class":30,"line":33927},[28,74290,58484],{"class":34},[28,74292,74293],{"class":60}," trArr",[28,74295,13826],{"class":34},[28,74297,52221],{"class":38},[28,74299,74300],{"class":2225},"map",[28,74302,413],{"class":38},[28,74304,54705],{"class":34},[28,74306,1920],{"class":38},[28,74308,74309],{"class":5478},"ele",[28,74311,12697],{"class":38},[28,74313,74314],{"class":5478},"index",[28,74316,12704],{"class":38},[28,74318,74319,74321],{"class":30,"line":33938},[28,74320,15014],{"class":34},[28,74322,70424],{"class":127},[28,74324,74325],{"class":30,"line":33944},[28,74326,74327],{"class":127},"      \u003Ctr>\n",[28,74329,74330,74332,74334,74336,74339],{"class":30,"line":33961},[28,74331,70429],{"class":127},[28,74333,74309],{"class":38},[28,74335,956],{"class":127},[28,74337,74338],{"class":38},"unameId",[28,74340,70444],{"class":127},[28,74342,74343,74345,74347,74349,74351],{"class":30,"line":33984},[28,74344,70429],{"class":127},[28,74346,74309],{"class":38},[28,74348,956],{"class":127},[28,74350,70460],{"class":38},[28,74352,70444],{"class":127},[28,74354,74355,74357,74359,74361,74363],{"class":30,"line":34007},[28,74356,70429],{"class":127},[28,74358,74309],{"class":38},[28,74360,956],{"class":127},[28,74362,70477],{"class":38},[28,74364,70444],{"class":127},[28,74366,74367,74369,74371,74373,74375],{"class":30,"line":34013},[28,74368,70429],{"class":127},[28,74370,74309],{"class":38},[28,74372,956],{"class":127},[28,74374,70494],{"class":38},[28,74376,70444],{"class":127},[28,74378,74379,74381,74383,74385,74387],{"class":30,"line":34018},[28,74380,70429],{"class":127},[28,74382,74309],{"class":38},[28,74384,956],{"class":127},[28,74386,70511],{"class":38},[28,74388,70444],{"class":127},[28,74390,74391,74393,74395,74397,74399],{"class":30,"line":34027},[28,74392,70429],{"class":127},[28,74394,74309],{"class":38},[28,74396,956],{"class":127},[28,74398,70528],{"class":38},[28,74400,70444],{"class":127},[28,74402,74403,74405,74407,74409,74411],{"class":30,"line":34037},[28,74404,70429],{"class":127},[28,74406,74309],{"class":38},[28,74408,956],{"class":127},[28,74410,2649],{"class":38},[28,74412,70444],{"class":127},[28,74414,74415],{"class":30,"line":34043},[28,74416,73871],{"class":127},[28,74418,74419,74422,74424],{"class":30,"line":34048},[28,74420,74421],{"class":127},"          \u003Ca href=\"#\" data-id=\"${",[28,74423,74314],{"class":38},[28,74425,74426],{"class":127},"}\">删除\u003C\u002Fa>\n",[28,74428,74429],{"class":30,"line":34054},[28,74430,73881],{"class":127},[28,74432,74433],{"class":30,"line":34067},[28,74434,74435],{"class":127},"      \u003C\u002Ftr>\n",[28,74437,74438],{"class":30,"line":34073},[28,74439,74440],{"class":127},"  `\n",[28,74442,74443],{"class":30,"line":34084},[28,74444,65071],{"class":38},[28,74446,74447,74449,74451],{"class":30,"line":34095},[28,74448,58500],{"class":38},[28,74450,58503],{"class":2225},[28,74452,74453],{"class":38},"(trArr)\n",[28,74455,74456],{"class":30,"line":34114},[28,74457,2662],{"emptyLinePlaceholder":336},[28,74459,74460],{"class":30,"line":49774},[28,74461,74462],{"class":87},"      \u002F\u002F (2) 把数组转换为字符串join\n",[28,74464,74465],{"class":30,"line":49779},[28,74466,74467],{"class":87},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[28,74469,74470,74472,74474,74477,74480,74482,74485],{"class":30,"line":49788},[28,74471,70355],{"class":38},[28,74473,54],{"class":34},[28,74475,74476],{"class":38}," trArr.",[28,74478,74479],{"class":2225},"join",[28,74481,413],{"class":38},[28,74483,74484],{"class":127},"''",[28,74486,81],{"class":38},[28,74488,74489],{"class":30,"line":49797},[28,74490,74491],{"class":87},"      \u002F\u002F 显示共有几条\n",[28,74493,74494,74496,74498,74500,74503,74506,74508,74510],{"class":30,"line":49802},[28,74495,56027],{"class":38},[28,74497,54655],{"class":2225},[28,74499,413],{"class":38},[28,74501,74502],{"class":127},"'.total span'",[28,74504,74505],{"class":38},").innerHTML ",[28,74507,54],{"class":34},[28,74509,52221],{"class":38},[28,74511,56087],{"class":60},[28,74513,74514],{"class":30,"line":49807},[28,74515,2449],{"class":38},[28,74517,74518],{"class":30,"line":49812},[28,74519,74520],{"class":87},"    \u002F\u002F render()\n",[28,74522,74523],{"class":30,"line":49825},[28,74524,2662],{"emptyLinePlaceholder":336},[28,74526,74527],{"class":30,"line":49830},[28,74528,74529],{"class":87},"    \u002F\u002F 获取DOM对象\n",[28,74531,74532,74534,74536,74538,74540,74542,74544,74546],{"class":30,"line":49839},[28,74533,11483],{"class":34},[28,74535,70077],{"class":60},[28,74537,13826],{"class":34},[28,74539,54652],{"class":38},[28,74541,54655],{"class":2225},[28,74543,413],{"class":38},[28,74545,70088],{"class":127},[28,74547,81],{"class":38},[28,74549,74550,74552,74554,74556,74558,74560,74562,74564],{"class":30,"line":49848},[28,74551,11483],{"class":34},[28,74553,69904],{"class":60},[28,74555,13826],{"class":34},[28,74557,54652],{"class":38},[28,74559,54655],{"class":2225},[28,74561,413],{"class":38},[28,74563,69915],{"class":127},[28,74565,81],{"class":38},[28,74567,74568,74570,74572,74574,74576,74578,74580,74582],{"class":30,"line":49865},[28,74569,11483],{"class":34},[28,74571,15951],{"class":60},[28,74573,13826],{"class":34},[28,74575,54652],{"class":38},[28,74577,54655],{"class":2225},[28,74579,413],{"class":38},[28,74581,69934],{"class":127},[28,74583,81],{"class":38},[28,74585,74587,74589,74591,74593,74595,74597,74599,74601],{"class":30,"line":74586},231,[28,74588,11483],{"class":34},[28,74590,69963],{"class":60},[28,74592,13826],{"class":34},[28,74594,54652],{"class":38},[28,74596,54655],{"class":2225},[28,74598,413],{"class":38},[28,74600,69974],{"class":127},[28,74602,81],{"class":38},[28,74604,74606,74608,74610,74612,74614,74616,74618,74620],{"class":30,"line":74605},232,[28,74607,11483],{"class":34},[28,74609,69943],{"class":60},[28,74611,13826],{"class":34},[28,74613,54652],{"class":38},[28,74615,54655],{"class":2225},[28,74617,413],{"class":38},[28,74619,69954],{"class":127},[28,74621,81],{"class":38},[28,74623,74625,74627,74629,74631,74633,74635,74637,74639],{"class":30,"line":74624},233,[28,74626,11483],{"class":34},[28,74628,69983],{"class":60},[28,74630,13826],{"class":34},[28,74632,54652],{"class":38},[28,74634,54655],{"class":2225},[28,74636,413],{"class":38},[28,74638,69994],{"class":127},[28,74640,81],{"class":38},[28,74642,74644],{"class":30,"line":74643},234,[28,74645,2662],{"emptyLinePlaceholder":336},[28,74647,74649],{"class":30,"line":74648},235,[28,74650,74651],{"class":87},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[28,74653,74655,74657,74659,74661,74663,74665,74667,74669,74671],{"class":30,"line":74654},236,[28,74656,70095],{"class":38},[28,74658,58069],{"class":2225},[28,74660,413],{"class":38},[28,74662,70102],{"class":127},[28,74664,12697],{"class":38},[28,74666,54705],{"class":34},[28,74668,1920],{"class":38},[28,74670,482],{"class":5478},[28,74672,12704],{"class":38},[28,74674,74676],{"class":30,"line":74675},237,[28,74677,74678],{"class":87},"      \u002F\u002F 禁止浏览器跳转\n",[28,74680,74682,74684,74686],{"class":30,"line":74681},238,[28,74683,70122],{"class":38},[28,74685,70125],{"class":2225},[28,74687,2238],{"class":38},[28,74689,74691],{"class":30,"line":74690},239,[28,74692,74693],{"class":87},"      \u002F\u002F 非空判断\n",[28,74695,74697],{"class":30,"line":74696},240,[28,74698,74699],{"class":87},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[28,74701,74703],{"class":30,"line":74702},241,[28,74704,74705],{"class":87},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[28,74707,74709,74711,74713,74715,74718,74720,74723,74726,74728,74730],{"class":30,"line":74708},242,[28,74710,54736],{"class":34},[28,74712,1920],{"class":38},[28,74714,630],{"class":34},[28,74716,74717],{"class":38},"uname.value ",[28,74719,71613],{"class":34},[28,74721,74722],{"class":34}," !",[28,74724,74725],{"class":38},"age.value ",[28,74727,71613],{"class":34},[28,74729,74722],{"class":34},[28,74731,74732],{"class":38},"salary.value) {\n",[28,74734,74736,74738,74740,74742,74744],{"class":30,"line":74735},243,[28,74737,15014],{"class":34},[28,74739,70196],{"class":2225},[28,74741,413],{"class":38},[28,74743,70201],{"class":127},[28,74745,81],{"class":38},[28,74747,74749],{"class":30,"line":74748},244,[28,74750,52654],{"class":38},[28,74752,74754,74756,74758],{"class":30,"line":74753},245,[28,74755,58263],{"class":38},[28,74757,52140],{"class":2225},[28,74759,74760],{"class":38},"({\n",[28,74762,74764],{"class":30,"line":74763},246,[28,74765,74766],{"class":87},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[28,74768,74770],{"class":30,"line":74769},247,[28,74771,74772],{"class":87},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[28,74774,74776],{"class":30,"line":74775},248,[28,74777,74778],{"class":87},"        \u002F\u002F 对象的序号应为数组长度+1\n",[28,74780,74782],{"class":30,"line":74781},249,[28,74783,74784],{"class":87},"        \u002F\u002F unameId: arr.length + 1,\n",[28,74786,74788],{"class":30,"line":74787},250,[28,74789,2662],{"emptyLinePlaceholder":336},[28,74791,74793],{"class":30,"line":74792},251,[28,74794,74795],{"class":87},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[28,74797,74799],{"class":30,"line":74798},252,[28,74800,74801],{"class":87},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[28,74803,74805],{"class":30,"line":74804},253,[28,74806,74807],{"class":87},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[28,74809,74811],{"class":30,"line":74810},254,[28,74812,74813],{"class":87},"        \u002F\u002F 0当假看\n",[28,74815,74817,74820,74822,74824,74827,74829,74831,74833,74836,74838,74840,74843,74845],{"class":30,"line":74816},255,[28,74818,74819],{"class":38},"        unameId: arr.",[28,74821,52224],{"class":60},[28,74823,74070],{"class":34},[28,74825,74826],{"class":38}," arr[arr.",[28,74828,52224],{"class":60},[28,74830,52527],{"class":34},[28,74832,25381],{"class":60},[28,74834,74835],{"class":38},"].unameId ",[28,74837,880],{"class":34},[28,74839,25381],{"class":60},[28,74841,74842],{"class":34}," :",[28,74844,25381],{"class":60},[28,74846,31723],{"class":38},[28,74848,74850],{"class":30,"line":74849},256,[28,74851,70249],{"class":38},[28,74853,74855],{"class":30,"line":74854},257,[28,74856,70254],{"class":38},[28,74858,74860],{"class":30,"line":74859},258,[28,74861,70264],{"class":38},[28,74863,74865],{"class":30,"line":74864},259,[28,74866,70259],{"class":38},[28,74868,74870],{"class":30,"line":74869},260,[28,74871,74872],{"class":38},"        city: city.value,\n",[28,74874,74876],{"class":30,"line":74875},261,[28,74877,74878],{"class":87},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[28,74880,74882],{"class":30,"line":74881},262,[28,74883,74884],{"class":87},"        \u002F\u002F time: new Date().toDateString()\n",[28,74886,74888,74891,74894],{"class":30,"line":74887},263,[28,74889,74890],{"class":38},"        time: ",[28,74892,74893],{"class":2225},"getTime",[28,74895,2238],{"class":38},[28,74897,74899],{"class":30,"line":74898},264,[28,74900,65071],{"class":38},[28,74902,74904],{"class":30,"line":74903},265,[28,74905,74906],{"class":87},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[28,74908,74910,74912],{"class":30,"line":74909},266,[28,74911,70324],{"class":2225},[28,74913,2238],{"class":38},[28,74915,74917,74919,74921,74923,74925],{"class":30,"line":74916},267,[28,74918,70307],{"class":60},[28,74920,956],{"class":38},[28,74922,70312],{"class":2225},[28,74924,13312],{"class":38},[28,74926,74927],{"class":87},"\u002F\u002F重置表单\n",[28,74929,74931],{"class":30,"line":74930},268,[28,74932,74933],{"class":87},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[28,74935,74937,74940,74942,74944,74947,74949,74951,74953,74955],{"class":30,"line":74936},269,[28,74938,74939],{"class":38},"      localStorage.",[28,74941,71910],{"class":2225},[28,74943,413],{"class":38},[28,74945,74946],{"class":127},"'data'",[28,74948,12697],{"class":38},[28,74950,71920],{"class":60},[28,74952,956],{"class":38},[28,74954,71925],{"class":2225},[28,74956,74957],{"class":38},"(arr))\n",[28,74959,74961],{"class":30,"line":74960},270,[28,74962,33717],{"class":38},[28,74964,74966],{"class":30,"line":74965},271,[28,74967,2662],{"emptyLinePlaceholder":336},[28,74969,74971],{"class":30,"line":74970},272,[28,74972,74973],{"class":87},"    \u002F\u002F 3.删除业务\n",[28,74975,74977],{"class":30,"line":74976},273,[28,74978,74979],{"class":87},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[28,74981,74983,74985,74987,74989,74991,74993,74995,74997,74999],{"class":30,"line":74982},274,[28,74984,70597],{"class":38},[28,74986,58069],{"class":2225},[28,74988,413],{"class":38},[28,74990,58074],{"class":127},[28,74992,12697],{"class":38},[28,74994,54705],{"class":34},[28,74996,1920],{"class":38},[28,74998,482],{"class":5478},[28,75000,12704],{"class":38},[28,75002,75004],{"class":30,"line":75003},275,[28,75005,75006],{"class":87},"      \u002F\u002F 判断是否点击的是删除按钮\n",[28,75008,75010,75012,75014,75016,75018],{"class":30,"line":75009},276,[28,75011,54736],{"class":34},[28,75013,67290],{"class":38},[28,75015,54742],{"class":34},[28,75017,68512],{"class":127},[28,75019,12704],{"class":38},[28,75021,75023],{"class":30,"line":75022},277,[28,75024,75025],{"class":87},"        \u002F\u002F alert(1)\n",[28,75027,75029],{"class":30,"line":75028},278,[28,75030,75031],{"class":87},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[28,75033,75035],{"class":30,"line":75034},279,[28,75036,75037],{"class":87},"        \u002F\u002F console.log(e.target)\n",[28,75039,75041],{"class":30,"line":75040},280,[28,75042,75043],{"class":87},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[28,75045,75047],{"class":30,"line":75046},281,[28,75048,2662],{"emptyLinePlaceholder":336},[28,75050,75052],{"class":30,"line":75051},282,[28,75053,75054],{"class":87},"        \u002F\u002F 确认框，确然是否真的要删除\n",[28,75056,75058],{"class":30,"line":75057},283,[28,75059,75060],{"class":87},"        \u002F\u002F confirm()为确认框\n",[28,75062,75064],{"class":30,"line":75063},284,[28,75065,75066],{"class":87},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[28,75068,75070,75072,75074,75077,75079,75082],{"class":30,"line":75069},285,[28,75071,2759],{"class":34},[28,75073,1920],{"class":38},[28,75075,75076],{"class":2225},"confirm",[28,75078,413],{"class":38},[28,75080,75081],{"class":127},"'您确定要删除这条数据吗？'",[28,75083,75084],{"class":38},")) {\n",[28,75086,75088,75091,75093,75095,75097],{"class":30,"line":75087},286,[28,75089,75090],{"class":38},"          arr.",[28,75092,58266],{"class":2225},[28,75094,70650],{"class":38},[28,75096,61],{"class":60},[28,75098,81],{"class":38},[28,75100,75102],{"class":30,"line":75101},287,[28,75103,75104],{"class":87},"          \u002F\u002F 3.4 重新渲染页面\n",[28,75106,75108,75111],{"class":30,"line":75107},288,[28,75109,75110],{"class":2225},"          render",[28,75112,2238],{"class":38},[28,75114,75116],{"class":30,"line":75115},289,[28,75117,75118],{"class":87},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[28,75120,75122,75125,75127,75129,75131,75133,75135,75137,75139],{"class":30,"line":75121},290,[28,75123,75124],{"class":38},"          localStorage.",[28,75126,71910],{"class":2225},[28,75128,413],{"class":38},[28,75130,74946],{"class":127},[28,75132,12697],{"class":38},[28,75134,71920],{"class":60},[28,75136,956],{"class":38},[28,75138,71925],{"class":2225},[28,75140,74957],{"class":38},[28,75142,75144],{"class":30,"line":75143},291,[28,75145,2791],{"class":38},[28,75147,75149],{"class":30,"line":75148},292,[28,75150,52654],{"class":38},[28,75152,75154],{"class":30,"line":75153},293,[28,75155,2662],{"emptyLinePlaceholder":336},[28,75157,75159],{"class":30,"line":75158},294,[28,75160,33717],{"class":38},[28,75162,75164],{"class":30,"line":75163},295,[28,75165,2662],{"emptyLinePlaceholder":336},[28,75167,75169,75171,75173],{"class":30,"line":75168},296,[28,75170,52673],{"class":38},[28,75172,52069],{"class":51556},[28,75174,51563],{"class":38},[28,75176,75178,75180,75182],{"class":30,"line":75177},297,[28,75179,52041],{"class":38},[28,75181,52056],{"class":51556},[28,75183,51563],{"class":38},[28,75185,75187],{"class":30,"line":75186},298,[28,75188,2662],{"emptyLinePlaceholder":336},[28,75190,75192,75194,75196],{"class":30,"line":75191},299,[28,75193,52041],{"class":38},[28,75195,50891],{"class":51556},[28,75197,51563],{"class":38},[351,75199,75201],{"id":75200},"_36-正则表达式","3.6 正则表达式",[14,75203,75204],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75206,75207],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75209,75210],{},"正则表达式的作用：",[1404,75212,75213,75220,75226],{},[366,75214,75215,75216,75219],{},"表单验证（ ",[555,75217,75218],{},"匹配"," ）",[366,75221,75222,75223,75219],{},"过滤敏感词（ ",[555,75224,75225],{},"替换",[366,75227,75228,75229,75219],{},"字符串中提取我们想要的部分（ ",[555,75230,75231],{},"提取",[380,75233,75235],{"id":75234},"_361-语法","3.6.1 语法",[14,75237,75238],{},"正则表达式使用步骤：",[363,75240,75241,75244],{},[366,75242,75243],{},"定义规则",[366,75245,75246],{},"查找是否匹配",[14,75248,75249],{},"正则表达式里边不需要写引号",[14,75251,75252],{},[1727,75253],{"alt":23,"src":75254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75256,75257],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75259,75260],{},"reg.test(str)",[14,75262,75263],{},[1727,75264],{"alt":23,"src":75265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75267,75268],{},[1727,75269],{"alt":23,"src":75270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[380,75272,75274],{"id":75273},"_362-元字符","3.6.2 元字符",[363,75276,75277,75280,75283,75286,75293],{},[366,75278,75279],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[366,75281,75282],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[366,75284,75285],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[366,75287,75288,75289],{},"正则验证工具：",[51,75290,75291],{"href":75291,"rel":75292},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24127],[366,75294,75295],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22260,75297,75299],{"id":75298},"_3621-边界符","3.6.2.1 边界符",[14,75301,75302],{},[1727,75303],{"alt":23,"src":75304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75306,75307],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75309,75310],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75312,75313],{},"只匹配一次",[14,75315,75316],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22260,75318,75320],{"id":75319},"_3622-量词","3.6.2.2 量词",[14,75322,75323],{},[1727,75324],{"alt":23,"src":75325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75327,75328],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22260,75330,75332],{"id":75331},"_3623-元字符","3.6.2.3 元字符",[14,75334,75335],{},[1727,75336],{"alt":23,"src":75337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75339,75340],{},"匹配的是a或b或c []只选一个",[14,75342,75343],{},[1727,75344],{"alt":23,"src":75345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75347,75348],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75350,75351],{},[1727,75352],{"alt":23,"src":75353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75355,75356],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75358,75359],{},[1727,75360],{"alt":23,"src":75361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[18,75363,75365],{"className":50889,"code":75364,"language":50891,"meta":23,"style":23},"\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",[25,75366,75367,75377,75391,75395,75403,75417,75437,75449,75457,75461,75469,75477,75482,75513,75540,75568,75572,75577,75605,75636,75641,75646,75677,75709,75741,75745,75750,75781,75811,75841,75845,75850,75881,75912,75942,75972,75976,75981,76014,76018,76023,76054,76085,76089,76094,76125,76155,76186,76190,76195,76227,76258,76289,76316,76347,76379,76412,76443,76474,76506,76537,76545,76553,76557],{"__ignoreMap":23},[28,75368,75369,75371,75373,75375],{"class":30,"line":31},[28,75370,51553],{"class":38},[28,75372,51557],{"class":51556},[28,75374,51560],{"class":2225},[28,75376,51563],{"class":38},[28,75378,75379,75381,75383,75385,75387,75389],{"class":30,"line":48},[28,75380,1307],{"class":38},[28,75382,50891],{"class":51556},[28,75384,51572],{"class":2225},[28,75386,54],{"class":38},[28,75388,51577],{"class":127},[28,75390,51563],{"class":38},[28,75392,75393],{"class":30,"line":84},[28,75394,2662],{"emptyLinePlaceholder":336},[28,75396,75397,75399,75401],{"class":30,"line":91},[28,75398,1307],{"class":38},[28,75400,51590],{"class":51556},[28,75402,51563],{"class":38},[28,75404,75405,75407,75409,75411,75413,75415],{"class":30,"line":97},[28,75406,52400],{"class":38},[28,75408,51600],{"class":51556},[28,75410,51603],{"class":2225},[28,75412,54],{"class":38},[28,75414,51608],{"class":127},[28,75416,51563],{"class":38},[28,75418,75419,75421,75423,75425,75427,75429,75431,75433,75435],{"class":30,"line":103},[28,75420,52400],{"class":38},[28,75422,51600],{"class":51556},[28,75424,15182],{"class":2225},[28,75426,54],{"class":38},[28,75428,51647],{"class":127},[28,75430,51627],{"class":2225},[28,75432,54],{"class":38},[28,75434,51654],{"class":127},[28,75436,51563],{"class":38},[28,75438,75439,75441,75443,75445,75447],{"class":30,"line":109},[28,75440,52400],{"class":38},[28,75442,51663],{"class":51556},[28,75444,51666],{"class":38},[28,75446,51663],{"class":51556},[28,75448,51563],{"class":38},[28,75450,75451,75453,75455],{"class":30,"line":118},[28,75452,52041],{"class":38},[28,75454,51590],{"class":51556},[28,75456,51563],{"class":38},[28,75458,75459],{"class":30,"line":124},[28,75460,2662],{"emptyLinePlaceholder":336},[28,75462,75463,75465,75467],{"class":30,"line":131},[28,75464,1307],{"class":38},[28,75466,52056],{"class":51556},[28,75468,51563],{"class":38},[28,75470,75471,75473,75475],{"class":30,"line":137},[28,75472,52400],{"class":38},[28,75474,52069],{"class":51556},[28,75476,51563],{"class":38},[28,75478,75479],{"class":30,"line":143},[28,75480,75481],{"class":87},"    \u002F\u002F 元字符中\n",[28,75483,75484,75486,75488,75490,75492,75495,75497,75499,75502,75504,75507,75510],{"class":30,"line":149},[28,75485,74009],{"class":38},[28,75487,58503],{"class":2225},[28,75489,413],{"class":38},[28,75491,982],{"class":127},[28,75493,75494],{"class":48233},"哈",[28,75496,982],{"class":127},[28,75498,956],{"class":38},[28,75500,75501],{"class":2225},"test",[28,75503,413],{"class":38},[28,75505,75506],{"class":127},"'哈'",[28,75508,75509],{"class":38},"))  ",[28,75511,75512],{"class":87},"\u002F\u002Ftrue\n",[28,75514,75515,75517,75519,75521,75523,75525,75527,75529,75531,75533,75536,75538],{"class":30,"line":1890},[28,75516,74009],{"class":38},[28,75518,58503],{"class":2225},[28,75520,413],{"class":38},[28,75522,982],{"class":127},[28,75524,75494],{"class":48233},[28,75526,982],{"class":127},[28,75528,956],{"class":38},[28,75530,75501],{"class":2225},[28,75532,413],{"class":38},[28,75534,75535],{"class":127},"'哈哈'",[28,75537,75509],{"class":38},[28,75539,75512],{"class":87},[28,75541,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75563,75566],{"class":30,"line":1904},[28,75543,74009],{"class":38},[28,75545,58503],{"class":2225},[28,75547,413],{"class":38},[28,75549,982],{"class":127},[28,75551,75494],{"class":48233},[28,75553,982],{"class":127},[28,75555,956],{"class":38},[28,75557,75501],{"class":2225},[28,75559,413],{"class":38},[28,75561,75562],{"class":127},"'二哈'",[28,75564,75565],{"class":38},"))   ",[28,75567,75512],{"class":87},[28,75569,75570],{"class":30,"line":1909},[28,75571,2662],{"emptyLinePlaceholder":336},[28,75573,75574],{"class":30,"line":1915},[28,75575,75576],{"class":87},"    \u002F\u002F 1.边界符\n",[28,75578,75579,75581,75583,75585,75587,75589,75591,75593,75595,75597,75599,75601,75603],{"class":30,"line":1936},[28,75580,74009],{"class":38},[28,75582,58503],{"class":2225},[28,75584,413],{"class":38},[28,75586,982],{"class":127},[28,75588,1363],{"class":34},[28,75590,75494],{"class":48233},[28,75592,982],{"class":127},[28,75594,956],{"class":38},[28,75596,75501],{"class":2225},[28,75598,413],{"class":38},[28,75600,75506],{"class":127},[28,75602,75509],{"class":38},[28,75604,75512],{"class":87},[28,75606,75607,75609,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633],{"class":30,"line":1941},[28,75608,74009],{"class":38},[28,75610,58503],{"class":2225},[28,75612,413],{"class":38},[28,75614,982],{"class":127},[28,75616,1363],{"class":34},[28,75618,75494],{"class":48233},[28,75620,704],{"class":34},[28,75622,982],{"class":127},[28,75624,956],{"class":38},[28,75626,75501],{"class":2225},[28,75628,413],{"class":38},[28,75630,75535],{"class":127},[28,75632,75509],{"class":38},[28,75634,75635],{"class":87},"\u002F\u002Ffalse\n",[28,75637,75638],{"class":30,"line":1955},[28,75639,75640],{"class":87},"    \u002F\u002F 2.量词\n",[28,75642,75643],{"class":30,"line":1960},[28,75644,75645],{"class":87},"    \u002F\u002F 量词 * 类似于 >= 0\n",[28,75647,75648,75650,75652,75654,75656,75658,75660,75663,75665,75667,75669,75671,75673,75675],{"class":30,"line":1989},[28,75649,74009],{"class":38},[28,75651,58503],{"class":2225},[28,75653,413],{"class":38},[28,75655,982],{"class":127},[28,75657,1363],{"class":34},[28,75659,75494],{"class":48233},[28,75661,75662],{"class":34},"*$",[28,75664,982],{"class":127},[28,75666,956],{"class":38},[28,75668,75501],{"class":2225},[28,75670,413],{"class":38},[28,75672,75535],{"class":127},[28,75674,75509],{"class":38},[28,75676,75512],{"class":87},[28,75678,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699,75701,75704,75706],{"class":30,"line":1994},[28,75680,74009],{"class":38},[28,75682,58503],{"class":2225},[28,75684,413],{"class":38},[28,75686,982],{"class":127},[28,75688,1363],{"class":34},[28,75690,75494],{"class":48233},[28,75692,75662],{"class":34},[28,75694,982],{"class":127},[28,75696,956],{"class":38},[28,75698,75501],{"class":2225},[28,75700,413],{"class":38},[28,75702,75703],{"class":127},"'二哈好傻'",[28,75705,75509],{"class":38},[28,75707,75708],{"class":87},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[28,75710,75711,75713,75715,75717,75719,75721,75723,75725,75727,75729,75731,75733,75736,75738],{"class":30,"line":2011},[28,75712,74009],{"class":38},[28,75714,58503],{"class":2225},[28,75716,413],{"class":38},[28,75718,982],{"class":127},[28,75720,1363],{"class":34},[28,75722,75494],{"class":48233},[28,75724,75662],{"class":34},[28,75726,982],{"class":127},[28,75728,956],{"class":38},[28,75730,75501],{"class":2225},[28,75732,413],{"class":38},[28,75734,75735],{"class":127},"'哈好哈'",[28,75737,75565],{"class":38},[28,75739,75740],{"class":87},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[28,75742,75743],{"class":30,"line":2016},[28,75744,2662],{"emptyLinePlaceholder":336},[28,75746,75747],{"class":30,"line":2021},[28,75748,75749],{"class":87},"    \u002F\u002F +类似于>=1\n",[28,75751,75752,75754,75756,75758,75760,75762,75764,75767,75769,75771,75773,75775,75777,75779],{"class":30,"line":2026},[28,75753,74009],{"class":38},[28,75755,58503],{"class":2225},[28,75757,413],{"class":38},[28,75759,982],{"class":127},[28,75761,1363],{"class":34},[28,75763,75494],{"class":48233},[28,75765,75766],{"class":34},"+$",[28,75768,982],{"class":127},[28,75770,956],{"class":38},[28,75772,75501],{"class":2225},[28,75774,413],{"class":38},[28,75776,75535],{"class":127},[28,75778,75509],{"class":38},[28,75780,75512],{"class":87},[28,75782,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809],{"class":30,"line":2040},[28,75784,74009],{"class":38},[28,75786,58503],{"class":2225},[28,75788,413],{"class":38},[28,75790,982],{"class":127},[28,75792,1363],{"class":34},[28,75794,75494],{"class":48233},[28,75796,75766],{"class":34},[28,75798,982],{"class":127},[28,75800,956],{"class":38},[28,75802,75501],{"class":2225},[28,75804,413],{"class":38},[28,75806,75703],{"class":127},[28,75808,75509],{"class":38},[28,75810,75708],{"class":87},[28,75812,75813,75815,75817,75819,75821,75823,75825,75827,75829,75831,75833,75835,75837,75839],{"class":30,"line":2045},[28,75814,74009],{"class":38},[28,75816,58503],{"class":2225},[28,75818,413],{"class":38},[28,75820,982],{"class":127},[28,75822,1363],{"class":34},[28,75824,75494],{"class":48233},[28,75826,75766],{"class":34},[28,75828,982],{"class":127},[28,75830,956],{"class":38},[28,75832,75501],{"class":2225},[28,75834,413],{"class":38},[28,75836,75735],{"class":127},[28,75838,75565],{"class":38},[28,75840,75635],{"class":87},[28,75842,75843],{"class":30,"line":2839},[28,75844,2662],{"emptyLinePlaceholder":336},[28,75846,75847],{"class":30,"line":2853},[28,75848,75849],{"class":87},"    \u002F\u002F ?类似于0次或一次\n",[28,75851,75852,75854,75856,75858,75860,75862,75865,75867,75869,75871,75873,75875,75877,75879],{"class":30,"line":2861},[28,75853,74009],{"class":38},[28,75855,58503],{"class":2225},[28,75857,413],{"class":38},[28,75859,982],{"class":127},[28,75861,1363],{"class":34},[28,75863,75864],{"class":48233},"哈？",[28,75866,704],{"class":34},[28,75868,982],{"class":127},[28,75870,956],{"class":38},[28,75872,75501],{"class":2225},[28,75874,413],{"class":38},[28,75876,74484],{"class":127},[28,75878,75565],{"class":38},[28,75880,75512],{"class":87},[28,75882,75883,75885,75887,75889,75891,75893,75895,75898,75900,75902,75904,75906,75908,75910],{"class":30,"line":2866},[28,75884,74009],{"class":38},[28,75886,58503],{"class":2225},[28,75888,413],{"class":38},[28,75890,982],{"class":127},[28,75892,1363],{"class":34},[28,75894,75494],{"class":48233},[28,75896,75897],{"class":34},"?$",[28,75899,982],{"class":127},[28,75901,956],{"class":38},[28,75903,75501],{"class":2225},[28,75905,413],{"class":38},[28,75907,75535],{"class":127},[28,75909,75509],{"class":38},[28,75911,75635],{"class":87},[28,75913,75914,75916,75918,75920,75922,75924,75926,75928,75930,75932,75934,75936,75938,75940],{"class":30,"line":2872},[28,75915,74009],{"class":38},[28,75917,58503],{"class":2225},[28,75919,413],{"class":38},[28,75921,982],{"class":127},[28,75923,1363],{"class":34},[28,75925,75494],{"class":48233},[28,75927,75897],{"class":34},[28,75929,982],{"class":127},[28,75931,956],{"class":38},[28,75933,75501],{"class":2225},[28,75935,413],{"class":38},[28,75937,75703],{"class":127},[28,75939,75509],{"class":38},[28,75941,75708],{"class":87},[28,75943,75944,75946,75948,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970],{"class":30,"line":2878},[28,75945,74009],{"class":38},[28,75947,58503],{"class":2225},[28,75949,413],{"class":38},[28,75951,982],{"class":127},[28,75953,1363],{"class":34},[28,75955,75494],{"class":48233},[28,75957,75897],{"class":34},[28,75959,982],{"class":127},[28,75961,956],{"class":38},[28,75963,75501],{"class":2225},[28,75965,413],{"class":38},[28,75967,75735],{"class":127},[28,75969,75509],{"class":38},[28,75971,75635],{"class":87},[28,75973,75974],{"class":30,"line":2883},[28,75975,2662],{"emptyLinePlaceholder":336},[28,75977,75978],{"class":30,"line":8210},[28,75979,75980],{"class":87},"    \u002F\u002F {n}写几，就必须出现几次\n",[28,75982,75983,75985,75987,75989,75991,75993,75995,75998,76000,76002,76004,76006,76009,76012],{"class":30,"line":8234},[28,75984,74009],{"class":38},[28,75986,58503],{"class":2225},[28,75988,413],{"class":38},[28,75990,982],{"class":127},[28,75992,1363],{"class":34},[28,75994,75494],{"class":48233},[28,75996,75997],{"class":34},"{4}$",[28,75999,982],{"class":127},[28,76001,956],{"class":38},[28,76003,75501],{"class":2225},[28,76005,413],{"class":38},[28,76007,76008],{"class":127},"'哈哈哈哈'",[28,76010,76011],{"class":38},")) ",[28,76013,75512],{"class":87},[28,76015,76016],{"class":30,"line":8239},[28,76017,2662],{"emptyLinePlaceholder":336},[28,76019,76020],{"class":30,"line":8245},[28,76021,76022],{"class":87},"    \u002F\u002F {n,}大于等于n次\n",[28,76024,76025,76027,76029,76031,76033,76035,76037,76040,76042,76044,76046,76048,76050,76052],{"class":30,"line":8272},[28,76026,74009],{"class":38},[28,76028,58503],{"class":2225},[28,76030,413],{"class":38},[28,76032,982],{"class":127},[28,76034,1363],{"class":34},[28,76036,75494],{"class":48233},[28,76038,76039],{"class":34},"{4,}$",[28,76041,982],{"class":127},[28,76043,956],{"class":38},[28,76045,75501],{"class":2225},[28,76047,413],{"class":38},[28,76049,76008],{"class":127},[28,76051,76011],{"class":38},[28,76053,75512],{"class":87},[28,76055,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76081,76083],{"class":30,"line":8277},[28,76057,74009],{"class":38},[28,76059,58503],{"class":2225},[28,76061,413],{"class":38},[28,76063,982],{"class":127},[28,76065,1363],{"class":34},[28,76067,75494],{"class":48233},[28,76069,76039],{"class":34},[28,76071,982],{"class":127},[28,76073,956],{"class":38},[28,76075,75501],{"class":2225},[28,76077,413],{"class":38},[28,76079,76080],{"class":127},"'哈哈哈哈哈'",[28,76082,76011],{"class":38},[28,76084,75512],{"class":87},[28,76086,76087],{"class":30,"line":8283},[28,76088,2662],{"emptyLinePlaceholder":336},[28,76090,76091],{"class":30,"line":8295},[28,76092,76093],{"class":87},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[28,76095,76096,76098,76100,76102,76104,76106,76108,76111,76113,76115,76117,76119,76121,76123],{"class":30,"line":8307},[28,76097,74009],{"class":38},[28,76099,58503],{"class":2225},[28,76101,413],{"class":38},[28,76103,982],{"class":127},[28,76105,1363],{"class":34},[28,76107,75494],{"class":48233},[28,76109,76110],{"class":34},"{4,6}$",[28,76112,982],{"class":127},[28,76114,956],{"class":38},[28,76116,75501],{"class":2225},[28,76118,413],{"class":38},[28,76120,76008],{"class":127},[28,76122,76011],{"class":38},[28,76124,75512],{"class":87},[28,76126,76127,76129,76131,76133,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153],{"class":30,"line":8319},[28,76128,74009],{"class":38},[28,76130,58503],{"class":2225},[28,76132,413],{"class":38},[28,76134,982],{"class":127},[28,76136,1363],{"class":34},[28,76138,75494],{"class":48233},[28,76140,76110],{"class":34},[28,76142,982],{"class":127},[28,76144,956],{"class":38},[28,76146,75501],{"class":2225},[28,76148,413],{"class":38},[28,76150,76080],{"class":127},[28,76152,76011],{"class":38},[28,76154,75512],{"class":87},[28,76156,76157,76159,76161,76163,76165,76167,76169,76171,76173,76175,76177,76179,76182,76184],{"class":30,"line":9978},[28,76158,74009],{"class":38},[28,76160,58503],{"class":2225},[28,76162,413],{"class":38},[28,76164,982],{"class":127},[28,76166,1363],{"class":34},[28,76168,75494],{"class":48233},[28,76170,76110],{"class":34},[28,76172,982],{"class":127},[28,76174,956],{"class":38},[28,76176,75501],{"class":2225},[28,76178,413],{"class":38},[28,76180,76181],{"class":127},"'哈哈哈哈哈哈哈'",[28,76183,76011],{"class":38},[28,76185,75635],{"class":87},[28,76187,76188],{"class":30,"line":10003},[28,76189,2662],{"emptyLinePlaceholder":336},[28,76191,76192],{"class":30,"line":10026},[28,76193,76194],{"class":87},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[28,76196,76197,76199,76201,76203,76205,76207,76210,76212,76214,76216,76218,76220,76223,76225],{"class":30,"line":10050},[28,76198,74009],{"class":38},[28,76200,58503],{"class":2225},[28,76202,413],{"class":38},[28,76204,982],{"class":127},[28,76206,1363],{"class":34},[28,76208,76209],{"class":60},"[abc]",[28,76211,704],{"class":34},[28,76213,982],{"class":127},[28,76215,956],{"class":38},[28,76217,75501],{"class":2225},[28,76219,413],{"class":38},[28,76221,76222],{"class":127},"'a'",[28,76224,75509],{"class":38},[28,76226,75512],{"class":87},[28,76228,76229,76231,76233,76235,76237,76239,76241,76243,76245,76247,76249,76251,76254,76256],{"class":30,"line":10055},[28,76230,74009],{"class":38},[28,76232,58503],{"class":2225},[28,76234,413],{"class":38},[28,76236,982],{"class":127},[28,76238,1363],{"class":34},[28,76240,76209],{"class":60},[28,76242,704],{"class":34},[28,76244,982],{"class":127},[28,76246,956],{"class":38},[28,76248,75501],{"class":2225},[28,76250,413],{"class":38},[28,76252,76253],{"class":127},"'b'",[28,76255,75509],{"class":38},[28,76257,75512],{"class":87},[28,76259,76260,76262,76264,76266,76268,76270,76272,76274,76276,76278,76280,76282,76285,76287],{"class":30,"line":10060},[28,76261,74009],{"class":38},[28,76263,58503],{"class":2225},[28,76265,413],{"class":38},[28,76267,982],{"class":127},[28,76269,1363],{"class":34},[28,76271,76209],{"class":60},[28,76273,704],{"class":34},[28,76275,982],{"class":127},[28,76277,956],{"class":38},[28,76279,75501],{"class":2225},[28,76281,413],{"class":38},[28,76283,76284],{"class":127},"'c'",[28,76286,75509],{"class":38},[28,76288,75512],{"class":87},[28,76290,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76312,76314],{"class":30,"line":10065},[28,76292,74009],{"class":38},[28,76294,58503],{"class":2225},[28,76296,413],{"class":38},[28,76298,982],{"class":127},[28,76300,76209],{"class":60},[28,76302,982],{"class":127},[28,76304,956],{"class":38},[28,76306,75501],{"class":2225},[28,76308,413],{"class":38},[28,76310,76311],{"class":127},"'ab'",[28,76313,75509],{"class":38},[28,76315,75512],{"class":87},[28,76317,76318,76320,76322,76324,76326,76328,76330,76332,76334,76336,76338,76340,76342,76344],{"class":30,"line":10074},[28,76319,74009],{"class":38},[28,76321,58503],{"class":2225},[28,76323,413],{"class":38},[28,76325,982],{"class":127},[28,76327,1363],{"class":34},[28,76329,76209],{"class":60},[28,76331,704],{"class":34},[28,76333,982],{"class":127},[28,76335,956],{"class":38},[28,76337,75501],{"class":2225},[28,76339,413],{"class":38},[28,76341,76311],{"class":127},[28,76343,75509],{"class":38},[28,76345,76346],{"class":87},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[28,76348,76349,76351,76353,76355,76357,76359,76361,76364,76366,76368,76370,76372,76374,76376],{"class":30,"line":10079},[28,76350,74009],{"class":38},[28,76352,58503],{"class":2225},[28,76354,413],{"class":38},[28,76356,982],{"class":127},[28,76358,1363],{"class":34},[28,76360,76209],{"class":60},[28,76362,76363],{"class":34},"{2}$",[28,76365,982],{"class":127},[28,76367,956],{"class":38},[28,76369,75501],{"class":2225},[28,76371,413],{"class":38},[28,76373,76311],{"class":127},[28,76375,75509],{"class":38},[28,76377,76378],{"class":87},"\u002F\u002Ftrue   可以选两个\n",[28,76380,76381,76383,76385,76387,76389,76391,76394,76396,76398,76400,76402,76404,76407,76409],{"class":30,"line":10085},[28,76382,74009],{"class":38},[28,76384,58503],{"class":2225},[28,76386,413],{"class":38},[28,76388,982],{"class":127},[28,76390,1363],{"class":34},[28,76392,76393],{"class":60},"[a-z]",[28,76395,704],{"class":34},[28,76397,982],{"class":127},[28,76399,956],{"class":38},[28,76401,75501],{"class":2225},[28,76403,413],{"class":38},[28,76405,76406],{"class":127},"'p'",[28,76408,75565],{"class":38},[28,76410,76411],{"class":87},"\u002F\u002Ftrue   依然只能选一个\n",[28,76413,76414,76416,76418,76420,76422,76424,76427,76429,76431,76433,76435,76437,76439,76441],{"class":30,"line":10106},[28,76415,74009],{"class":38},[28,76417,58503],{"class":2225},[28,76419,413],{"class":38},[28,76421,982],{"class":127},[28,76423,1363],{"class":34},[28,76425,76426],{"class":60},"[A-Z]",[28,76428,704],{"class":34},[28,76430,982],{"class":127},[28,76432,956],{"class":38},[28,76434,75501],{"class":2225},[28,76436,413],{"class":38},[28,76438,76406],{"class":127},[28,76440,75565],{"class":38},[28,76442,75635],{"class":87},[28,76444,76445,76447,76449,76451,76453,76455,76457,76459,76461,76463,76465,76467,76470,76472],{"class":30,"line":10112},[28,76446,74009],{"class":38},[28,76448,58503],{"class":2225},[28,76450,413],{"class":38},[28,76452,982],{"class":127},[28,76454,1363],{"class":34},[28,76456,76426],{"class":60},[28,76458,704],{"class":34},[28,76460,982],{"class":127},[28,76462,956],{"class":38},[28,76464,75501],{"class":2225},[28,76466,413],{"class":38},[28,76468,76469],{"class":127},"'P'",[28,76471,75565],{"class":38},[28,76473,75512],{"class":87},[28,76475,76476,76478,76480,76482,76484,76486,76489,76491,76493,76495,76497,76499,76502,76504],{"class":30,"line":10126},[28,76477,74009],{"class":38},[28,76479,58503],{"class":2225},[28,76481,413],{"class":38},[28,76483,982],{"class":127},[28,76485,1363],{"class":34},[28,76487,76488],{"class":60},"[0-9]",[28,76490,704],{"class":34},[28,76492,982],{"class":127},[28,76494,956],{"class":38},[28,76496,75501],{"class":2225},[28,76498,413],{"class":38},[28,76500,76501],{"class":127},"'0'",[28,76503,75565],{"class":38},[28,76505,75512],{"class":87},[28,76507,76508,76510,76512,76514,76516,76518,76521,76523,76525,76527,76529,76531,76533,76535],{"class":30,"line":10132},[28,76509,74009],{"class":38},[28,76511,58503],{"class":2225},[28,76513,413],{"class":38},[28,76515,982],{"class":127},[28,76517,1363],{"class":34},[28,76519,76520],{"class":60},"[a-zA-Z0-9]",[28,76522,704],{"class":34},[28,76524,982],{"class":127},[28,76526,956],{"class":38},[28,76528,75501],{"class":2225},[28,76530,413],{"class":38},[28,76532,76406],{"class":127},[28,76534,75509],{"class":38},[28,76536,75512],{"class":87},[28,76538,76539,76541,76543],{"class":30,"line":10159},[28,76540,52673],{"class":38},[28,76542,52069],{"class":51556},[28,76544,51563],{"class":38},[28,76546,76547,76549,76551],{"class":30,"line":10168},[28,76548,52041],{"class":38},[28,76550,52056],{"class":51556},[28,76552,51563],{"class":38},[28,76554,76555],{"class":30,"line":10174},[28,76556,2662],{"emptyLinePlaceholder":336},[28,76558,76559,76561,76563],{"class":30,"line":10182},[28,76560,52041],{"class":38},[28,76562,50891],{"class":51556},[28,76564,51563],{"class":38},[22260,76566,76568],{"id":76567},"_3624-修饰符","3.6.2.4 修饰符",[14,76570,76571],{},[1727,76572],{"alt":23,"src":76573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76575,76576],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76578,76579],{},[1727,76580],{"alt":23,"src":76581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[18,76583,76585],{"className":50889,"code":76584,"language":50891,"meta":23,"style":23},"\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",[25,76586,76587,76597,76611,76619,76633,76653,76665,76673,76681,76689,76721,76752,76757,76789,76800,76833,76842,76850,76858],{"__ignoreMap":23},[28,76588,76589,76591,76593,76595],{"class":30,"line":31},[28,76590,51553],{"class":38},[28,76592,51557],{"class":51556},[28,76594,51560],{"class":2225},[28,76596,51563],{"class":38},[28,76598,76599,76601,76603,76605,76607,76609],{"class":30,"line":48},[28,76600,1307],{"class":38},[28,76602,50891],{"class":51556},[28,76604,51572],{"class":2225},[28,76606,54],{"class":38},[28,76608,51577],{"class":127},[28,76610,51563],{"class":38},[28,76612,76613,76615,76617],{"class":30,"line":84},[28,76614,1307],{"class":38},[28,76616,51590],{"class":51556},[28,76618,51563],{"class":38},[28,76620,76621,76623,76625,76627,76629,76631],{"class":30,"line":91},[28,76622,52400],{"class":38},[28,76624,51600],{"class":51556},[28,76626,51603],{"class":2225},[28,76628,54],{"class":38},[28,76630,51608],{"class":127},[28,76632,51563],{"class":38},[28,76634,76635,76637,76639,76641,76643,76645,76647,76649,76651],{"class":30,"line":97},[28,76636,52400],{"class":38},[28,76638,51600],{"class":51556},[28,76640,15182],{"class":2225},[28,76642,54],{"class":38},[28,76644,51647],{"class":127},[28,76646,51627],{"class":2225},[28,76648,54],{"class":38},[28,76650,51654],{"class":127},[28,76652,51563],{"class":38},[28,76654,76655,76657,76659,76661,76663],{"class":30,"line":103},[28,76656,52400],{"class":38},[28,76658,51663],{"class":51556},[28,76660,51666],{"class":38},[28,76662,51663],{"class":51556},[28,76664,51563],{"class":38},[28,76666,76667,76669,76671],{"class":30,"line":109},[28,76668,52041],{"class":38},[28,76670,51590],{"class":51556},[28,76672,51563],{"class":38},[28,76674,76675,76677,76679],{"class":30,"line":118},[28,76676,1307],{"class":38},[28,76678,52056],{"class":51556},[28,76680,51563],{"class":38},[28,76682,76683,76685,76687],{"class":30,"line":124},[28,76684,52400],{"class":38},[28,76686,52069],{"class":51556},[28,76688,51563],{"class":38},[28,76690,76691,76693,76695,76697,76699,76701,76704,76706,76708,76710,76712,76714,76717,76719],{"class":30,"line":131},[28,76692,74009],{"class":38},[28,76694,58503],{"class":2225},[28,76696,413],{"class":38},[28,76698,982],{"class":127},[28,76700,1363],{"class":34},[28,76702,76703],{"class":48233},"java",[28,76705,704],{"class":34},[28,76707,982],{"class":127},[28,76709,956],{"class":38},[28,76711,75501],{"class":2225},[28,76713,413],{"class":38},[28,76715,76716],{"class":127},"'java'",[28,76718,76011],{"class":38},[28,76720,75512],{"class":87},[28,76722,76723,76725,76727,76729,76731,76733,76735,76737,76739,76741,76743,76745,76748,76750],{"class":30,"line":137},[28,76724,74009],{"class":38},[28,76726,58503],{"class":2225},[28,76728,413],{"class":38},[28,76730,982],{"class":127},[28,76732,1363],{"class":34},[28,76734,76703],{"class":48233},[28,76736,704],{"class":34},[28,76738,982],{"class":127},[28,76740,956],{"class":38},[28,76742,75501],{"class":2225},[28,76744,413],{"class":38},[28,76746,76747],{"class":127},"'Java'",[28,76749,76011],{"class":38},[28,76751,75635],{"class":87},[28,76753,76754],{"class":30,"line":143},[28,76755,76756],{"class":87},"    \u002F\u002F 不区分大小写、\n",[28,76758,76759,76761,76763,76765,76767,76769,76771,76773,76775,76777,76779,76781,76783,76785,76787],{"class":30,"line":149},[28,76760,74009],{"class":38},[28,76762,58503],{"class":2225},[28,76764,413],{"class":38},[28,76766,982],{"class":127},[28,76768,1363],{"class":34},[28,76770,76703],{"class":48233},[28,76772,704],{"class":34},[28,76774,982],{"class":127},[28,76776,840],{"class":34},[28,76778,956],{"class":38},[28,76780,75501],{"class":2225},[28,76782,413],{"class":38},[28,76784,76747],{"class":127},[28,76786,76011],{"class":38},[28,76788,75512],{"class":87},[28,76790,76791,76793,76795,76797],{"class":30,"line":1890},[28,76792,11483],{"class":34},[28,76794,74175],{"class":60},[28,76796,13826],{"class":34},[28,76798,76799],{"class":127}," 'java是一门编程语言，学完java工资很高'\n",[28,76801,76802,76804,76807,76809,76812,76815,76817,76819,76821,76823,76826,76828,76831],{"class":30,"line":1904},[28,76803,11483],{"class":34},[28,76805,76806],{"class":60}," result",[28,76808,13826],{"class":34},[28,76810,76811],{"class":38}," str.",[28,76813,76814],{"class":2225},"replace",[28,76816,413],{"class":38},[28,76818,982],{"class":127},[28,76820,76703],{"class":48233},[28,76822,982],{"class":127},[28,76824,76825],{"class":34},"ig",[28,76827,12697],{"class":38},[28,76829,76830],{"class":127},"'前端'",[28,76832,81],{"class":38},[28,76834,76835,76837,76839],{"class":30,"line":1909},[28,76836,74009],{"class":38},[28,76838,58503],{"class":2225},[28,76840,76841],{"class":38},"(result)\n",[28,76843,76844,76846,76848],{"class":30,"line":1915},[28,76845,52673],{"class":38},[28,76847,52069],{"class":51556},[28,76849,51563],{"class":38},[28,76851,76852,76854,76856],{"class":30,"line":1936},[28,76853,52041],{"class":38},[28,76855,52056],{"class":51556},[28,76857,51563],{"class":38},[28,76859,76860,76862,76864],{"class":30,"line":1941},[28,76861,52041],{"class":38},[28,76863,50891],{"class":51556},[28,76865,51563],{"class":38},[328,76867,76868],{},"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":23,"searchDepth":48,"depth":48,"links":76870},[76871,76881,76893,76910,76917,76925],{"id":53616,"depth":48,"text":53617,"children":76872},[76873,76874,76875,76876,76877,76878,76879,76880],{"id":53620,"depth":84,"text":53621},{"id":53653,"depth":84,"text":53654},{"id":53692,"depth":84,"text":53693},{"id":53850,"depth":84,"text":53851},{"id":53898,"depth":84,"text":53899},{"id":54035,"depth":84,"text":54036},{"id":54357,"depth":84,"text":54358},{"id":57345,"depth":84,"text":57346},{"id":57373,"depth":48,"text":57374,"children":76882},[76883,76884,76885,76886,76887,76888,76889,76890,76891,76892],{"id":57377,"depth":84,"text":57378},{"id":57400,"depth":84,"text":57401},{"id":58315,"depth":84,"text":58316},{"id":59005,"depth":84,"text":59006},{"id":59287,"depth":84,"text":59288},{"id":63448,"depth":84,"text":63449},{"id":63618,"depth":84,"text":63619},{"id":63746,"depth":84,"text":63747},{"id":63771,"depth":84,"text":63772},{"id":65160,"depth":84,"text":65161},{"id":66313,"depth":48,"text":66314,"children":76894},[76895,76896,76897,76898,76899,76900,76901,76902,76903,76904,76905,76906,76907,76908,76909],{"id":66317,"depth":84,"text":66318},{"id":66971,"depth":84,"text":66972},{"id":68666,"depth":84,"text":68667},{"id":68707,"depth":84,"text":68708},{"id":68749,"depth":84,"text":68750},{"id":68763,"depth":84,"text":68764},{"id":68812,"depth":84,"text":68813},{"id":68824,"depth":84,"text":68825},{"id":68839,"depth":84,"text":68840},{"id":68875,"depth":84,"text":68876},{"id":68956,"depth":84,"text":68957},{"id":69084,"depth":84,"text":69085},{"id":69096,"depth":84,"text":69097},{"id":69115,"depth":84,"text":69116},{"id":71226,"depth":84,"text":71227},{"id":71245,"depth":48,"text":71246,"children":76911},[76912,76913,76914,76915,76916],{"id":71266,"depth":84,"text":71267},{"id":71286,"depth":84,"text":71287},{"id":71335,"depth":84,"text":71336},{"id":71460,"depth":84,"text":71461},{"id":71641,"depth":84,"text":71642},{"id":71659,"depth":48,"text":71660,"children":76918},[76919,76920,76921,76922,76923,76924],{"id":71674,"depth":84,"text":71675},{"id":71733,"depth":84,"text":71734},{"id":71757,"depth":84,"text":71758},{"id":72077,"depth":84,"text":72078},{"id":72109,"depth":84,"text":72110},{"id":72132,"depth":84,"text":72133},{"id":75200,"depth":48,"text":75201,"children":76926},[76927,76928],{"id":75234,"depth":84,"text":75235},{"id":75273,"depth":84,"text":75274},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53588,"description":333},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76935,"title":76936,"body":76937,"description":333,"extension":334,"meta":93074,"navigation":336,"path":93075,"seo":93076,"stem":93077,"__hash__":93078},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76938,"toc":93010},[76939,76942,76945,76949,76953,76958,76963,76974,76978,76983,76986,76990,76993,76998,77002,77006,77009,77014,77017,77021,77024,77032,77035,77039,77044,77049,77052,77056,77061,77066,77069,77073,77078,77081,77086,77089,77094,77097,77102,77107,77110,77113,77117,77122,77127,77130,77134,77138,77141,77144,77147,77151,77155,77160,77165,77168,77172,77177,77182,77185,77188,77191,77194,77197,77200,77203,77206,77209,77214,77218,77223,77228,77231,77234,77237,77240,77243,77246,77249,77252,77256,77260,77263,77266,77269,77274,77276,77279,77282,77285,77288,77291,77294,77297,77300,77303,77306,77309,77312,77315,77320,77325,77330,77333,77337,77340,77345,77349,77351,77362,77367,77468,77471,77474,77477,77480,77483,77486,77489,77492,77494,77497,77500,77503,77506,77509,77511,77514,77517,77520,77523,77526,77529,77531,77534,77536,77538,77541,77545,77549,77552,77555,77558,77561,77564,77567,77570,77573,77576,77581,77701,77704,77707,77712,77715,77718,77721,77724,77729,77732,77735,77738,77741,77746,77749,77849,77914,77988,77992,77995,77998,78002,78005,78019,78048,78051,78054,78057,78060,78063,78066,78069,78071,78074,78077,78080,78083,78087,78092,78096,78101,78176,78179,78362,78365,78368,78371,78374,78377,78379,78382,78385,78388,78391,78394,78397,78399,78403,78406,78411,78414,78417,78420,78423,78425,78430,78433,78436,78439,78442,78444,78449,78452,78455,78457,78459,78462,78466,78469,78472,78477,78480,78483,78486,78536,78541,78545,78550,78553,78622,78625,78634,78638,78643,78646,78649,78657,78660,78677,80479,80483,80487,80492,80495,80499,80505,80511,80663,80668,80673,80676,80679,80682,80685,80688,80691,80694,80697,80700,80703,80706,80709,80714,80718,80721,80732,80736,80741,80744,80747,80750,80753,80756,80758,80761,80764,80767,80770,80772,80789,80792,80796,80799,80804,80809,80812,80815,80819,80822,80825,80834,80837,80841,80844,80849,80854,80921,80925,80928,80931,80936,80941,81027,81032,81036,81039,81042,81057,81060,81065,81069,81074,81183,81186,81197,81347,81351,81356,81465,81469,81474,81479,81484,81487,81494,81514,81550,81714,81719,81722,81727,81734,81737,81740,81743,81802,81858,81914,81918,81923,82238,82241,82245,82248,82253,82362,82367,82371,82376,82380,82451,82455,82457,82460,82463,82501,82777,82781,82798,82864,82898,82902,82905,82910,82939,82946,82955,82960,82975,82980,82989,82992,83129,83133,83195,83199,83204,83449,83453,83458,83461,83464,83467,83470,83474,83479,85060,85064,85068,85074,85077,85082,85086,85089,85094,85097,85108,85112,85117,85121,85126,85131,85134,85139,85143,85147,85150,85155,85160,85163,85166,85169,85291,85296,85398,85401,85404,85408,85413,85585,85590,85594,85597,85602,85668,85673,85676,85807,85810,85815,85818,85821,85912,85917,85920,85923,85926,85929,85934,85939,85942,85947,85952,85957,85961,85964,85967,85972,85977,85982,85987,86041,86044,86047,86052,86055,86058,86063,86068,86073,86077,86082,86096,86101,86104,86109,86113,86118,86123,86128,86133,86138,86143,86148,86153,86156,86160,86165,86168,86171,86174,86179,86184,86187,86190,86194,86197,86200,86205,86210,86215,86220,86223,86228,86233,86294,86299,86302,86307,87548,87553,87557,87561,87566,87569,87574,87579,87582,87587,87589,87594,87598,87601,87604,87615,87619,87624,87629,87684,87689,87694,87699,87910,87915,87919,87924,87927,87929,87932,87935,88382,88387,88394,88400,88403,88406,88670,88675,88679,88944,88949,88953,88958,88963,88968,88973,89304,89307,89312,89317,89320,89324,89328,89333,89338,89343,89348,89353,89358,89362,89365,89370,89375,89378,89452,89457,89462,89467,89469,89472,89842,89847,89852,89857,89860,89863,89965,89970,89975,90078,90082,90087,90091,90095,90100,90105,90108,90113,90116,90119,90512,90517,90520,90523,90526,90529,91049,91053,91058,91063,91068,91071,91076,91079,91082,91464,91469,91471,91473,91476,91479,91991,91995,92056,92059,92062,92065,92069,92072,92077,92082,93007],[10,76940,76936],{"id":76941},"_4js进阶",[14,76943,76944],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[351,76946,76948],{"id":76947},"_41-作用域","4.1 作用域",[380,76950,76952],{"id":76951},"_411-局部作用域","4.1.1 局部作用域",[14,76954,76955],{},[1727,76956],{"alt":23,"src":76957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76959,76960],{},[1727,76961],{"alt":23,"src":76962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1404,76964,76965,76968,76971],{},[366,76966,76967],{},"函数作用域在函数内部",[366,76969,76970],{},"块级作用域在{}",[366,76972,76973],{},"对象的那个{}不是作用域，不是块作用域",[380,76975,76977],{"id":76976},"_412-全局作用域","4.1.2 全局作用域",[14,76979,76980],{},[1727,76981],{"alt":23,"src":76982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76984,76985],{},"window.a=10不要这样写",[380,76987,76989],{"id":76988},"_413-作用域链","4.1.3 作用域链",[14,76991,76992],{},"变量查找机制",[14,76994,76995],{},[1727,76996],{"alt":23,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[351,76999,77001],{"id":77000},"_42-垃圾回收机制","4.2 垃圾回收机制",[380,77003,77005],{"id":77004},"_421-大体介绍","4.2.1 大体介绍",[14,77007,77008],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77010,77011],{},[1727,77012],{"alt":23,"src":77013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77015,77016],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[380,77018,77020],{"id":77019},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77022,77023],{},"堆栈空间分配区别：",[363,77025,77026,77029],{},[366,77027,77028],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[366,77030,77031],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77033,77034],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22260,77036,77038],{"id":77037},"_4221-引用计数","4.2.2.1 引用计数",[14,77040,77041],{},[1727,77042],{"alt":23,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77045,77046],{},[1727,77047],{"alt":23,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77050,77051],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22260,77053,77055],{"id":77054},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77057,77058],{},[1727,77059],{"alt":23,"src":77060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77062,77063],{},[1727,77064],{"alt":23,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77067,77068],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[351,77070,77072],{"id":77071},"_43-闭包","4.3 闭包",[14,77074,77075],{},[1727,77076],{"alt":23,"src":77077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77079,77080],{},"闭包：内层函数+外层函数的变量",[14,77082,77083],{},[1727,77084],{"alt":23,"src":77085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77087,77088],{},"closure就是闭包",[14,77090,77091],{},[1727,77092],{"alt":23,"src":77093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77095,77096],{},"内层函数必须包含外层函数的变量才是闭包",[14,77098,77099],{},[1727,77100],{"alt":23,"src":77101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77103,77104],{},[1727,77105],{"alt":23,"src":77106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77108,77109],{},"闭包可能会引起内存泄漏",[14,77111,77112],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[351,77114,77116],{"id":77115},"_44-变量提升","4.4 变量提升",[14,77118,77119],{},[1727,77120],{"alt":23,"src":77121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77123,77124],{},[1727,77125],{"alt":23,"src":77126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77128,77129],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[351,77131,77133],{"id":77132},"_45-函数进阶","4.5 函数进阶",[380,77135,77137],{"id":77136},"_451-函数提升","4.5.1 函数提升",[14,77139,77140],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77142,77143],{},"只提升函数声明，不提升函数调用",[52069,77145,77146],{},"\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",[380,77148,77150],{"id":77149},"_452-函数参数","4.5.2 函数参数",[22260,77152,77154],{"id":77153},"_4521-动态参数","4.5.2.1 动态参数",[14,77156,77157],{},[1727,77158],{"alt":23,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77161,77162],{},[1727,77163],{"alt":23,"src":77164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77166,77167],{},"箭头函数里边没有arguments",[22260,77169,77171],{"id":77170},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77173,77174],{},[1727,77175],{"alt":23,"src":77176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77178,77179],{},[1727,77180],{"alt":23,"src":77181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77183,77184],{},"剩余参数使用的时候不需要写...",[14,77186,77187],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77189,77190],{},"  function getSum(a,b,...arr) {",[14,77192,77193],{},"  console.log(11)",[14,77195,77196],{},"  }",[14,77198,77199],{},"  getSum(1,2,3,4)",[14,77201,77202],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77204,77205],{},"  getSum(1,2)",[14,77207,77208],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77210,77211],{},[1727,77212],{"alt":23,"src":77213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22260,77215,77217],{"id":77216},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77219,77220],{},[1727,77221],{"alt":23,"src":77222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77224,77225],{},[1727,77226],{"alt":23,"src":77227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77229,77230],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77232,77233],{},"展开运算符可以用于数组之间的合并：",[14,77235,77236],{},"const arr1 = [1, 2, 3]",[14,77238,77239],{},"const arr2 = [3, 4, 5]",[14,77241,77242],{},"const arr = [...arr1, ...arr2]",[14,77244,77245],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77247,77248],{},"剩余参数：函数参数使用，得到真数组",[14,77250,77251],{},"展开运算符：数组中使用，数组展开",[380,77253,77255],{"id":77254},"_453-箭头函数","4.5.3 箭头函数",[22260,77257,77259],{"id":77258},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77261,77262],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77264,77265],{},"它不是万能的！！！",[14,77267,77268],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77270,77271],{},[1727,77272],{"alt":23,"src":77273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77275,441],{},[14,77277,77278],{},"① 只有一个形参的时候，可以省略小括号：",[14,77280,77281],{},"const fn=x=>{console.log(x)}",[14,77283,77284],{},"② 只有一行代码时可以省略大括号：",[14,77286,77287],{},"const fn=x=>console.log(11)",[14,77289,77290],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77292,77293],{},"const fn=x=>x+x",[14,77295,77296],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77298,77299],{},"⑤ 阻止表单默认提交：",[14,77301,77302],{},"const form = document.querySelector('form')",[14,77304,77305],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77307,77308],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77310,77311],{},"const fn=uname=>({uname:uname})",[14,77313,77314],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77316,77317],{},[1727,77318],{"alt":23,"src":77319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77321,77322],{},[1727,77323],{"alt":23,"src":77324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77326,77327],{},[1727,77328],{"alt":23,"src":77329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77331,77332],{},"一定不要忘记用()，有()就理解为自带return",[22260,77334,77336],{"id":77335},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77338,77339],{},"箭头函数是没有动态参数的arguments",[14,77341,77342],{},[1727,77343],{"alt":23,"src":77344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22260,77346,77348],{"id":77347},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77350,11594],{},[363,77352,77353,77356,77359],{},[366,77354,77355],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[366,77357,77358],{},"事件回调函数使用箭头函数时，this 为全局的 window",[366,77360,77361],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77363,77364],{},[1727,77365],{"alt":23,"src":77366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[18,77368,77370],{"className":53323,"code":77369,"language":53325,"meta":23,"style":23},"  \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",[25,77371,77372,77380,77385,77390,77395,77400,77405,77409,77414,77418,77422,77427,77432,77437,77441,77445,77450,77455,77460],{"__ignoreMap":23},[28,77373,77374,77376,77378],{"class":30,"line":31},[28,77375,52400],{"class":38},[28,77377,52069],{"class":51556},[28,77379,51563],{"class":38},[28,77381,77382],{"class":30,"line":48},[28,77383,77384],{"class":38},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[28,77386,77387],{"class":30,"line":84},[28,77388,77389],{"class":38},"    console.log(this) \u002F\u002F指向window\n",[28,77391,77392],{"class":30,"line":91},[28,77393,77394],{"class":38},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[28,77396,77397],{"class":30,"line":97},[28,77398,77399],{"class":38},"    function fn() {\n",[28,77401,77402],{"class":30,"line":103},[28,77403,77404],{"class":38},"      console.log(this)  \u002F\u002F指向window\n",[28,77406,77407],{"class":30,"line":109},[28,77408,2449],{"class":38},[28,77410,77411],{"class":30,"line":118},[28,77412,77413],{"class":38},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[28,77415,77416],{"class":30,"line":124},[28,77417,2662],{"emptyLinePlaceholder":336},[28,77419,77420],{"class":30,"line":131},[28,77421,71779],{"class":38},[28,77423,77424],{"class":30,"line":137},[28,77425,77426],{"class":38},"      name: 'andy',\n",[28,77428,77429],{"class":30,"line":143},[28,77430,77431],{"class":38},"      sayHai: function () {\n",[28,77433,77434],{"class":30,"line":149},[28,77435,77436],{"class":38},"        console.log(this)\n",[28,77438,77439],{"class":30,"line":1890},[28,77440,52654],{"class":38},[28,77442,77443],{"class":30,"line":1904},[28,77444,2449],{"class":38},[28,77446,77447],{"class":30,"line":1909},[28,77448,77449],{"class":38},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[28,77451,77452],{"class":30,"line":1915},[28,77453,77454],{"class":38},"    \u002F\u002F 2.箭头函数的this\n",[28,77456,77457],{"class":30,"line":1936},[28,77458,77459],{"class":38},"    const fn = () => console.log(this)\n",[28,77461,77462,77464,77466],{"class":30,"line":1941},[28,77463,52673],{"class":38},[28,77465,52069],{"class":51556},[28,77467,51563],{"class":38},[14,77469,77470],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77472,77473],{},"const fn = () => console.log(this)",[14,77475,77476],{},"fn() \u002F\u002F指向window",[14,77478,77479],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77481,77482],{},"①",[14,77484,77485],{},"const obj = {",[14,77487,77488],{},"uname: 'pink老师',",[14,77490,77491],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77493,1343],{},[14,77495,77496],{},"调用对象里边的函数",[14,77498,77499],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77501,77502],{},"obj.sayHai()",[14,77504,77505],{},"②",[14,77507,77508],{},"const obj1 = {",[14,77510,77488],{},[14,77512,77513],{},"sayHai: function () {",[14,77515,77516],{},"let i = 10",[14,77518,77519],{},"const count = () => {",[14,77521,77522],{},"console.log(this)",[14,77524,77525],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77527,77528],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77530,1343],{},[14,77532,77533],{},"count()",[14,77535,1343],{},[14,77537,1343],{},[14,77539,77540],{},"obj1.sayHai()",[351,77542,77544],{"id":77543},"_46-解构赋值","4.6 解构赋值",[380,77546,77548],{"id":77547},"_461-数组解构","4.6.1 数组解构",[14,77550,77551],{},"以前要是使用数组中的值的话：",[14,77553,77554],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77556,77557],{},"const arr=[100,60,80]",[14,77559,77560],{},"const max=arr[0]",[14,77562,77563],{},"const min=arr[1]",[14,77565,77566],{},"const avg=arr[2]",[14,77568,77569],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77571,77572],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77574,77575],{},"这个写法就类似于上边的那种用很多const的方法",[14,77577,77578],{},[1727,77579],{"alt":23,"src":77580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[18,77582,77584],{"className":50889,"code":77583,"language":50891,"meta":23,"style":23},"①变量之间交换值:\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",[25,77585,77586,77591,77596,77601,77606,77611,77615,77619,77624,77628,77633,77638,77642,77647,77652,77663,77673,77678,77683,77688,77692,77696],{"__ignoreMap":23},[28,77587,77588],{"class":30,"line":31},[28,77589,77590],{"class":38},"①变量之间交换值:\n",[28,77592,77593],{"class":30,"line":48},[28,77594,77595],{"class":38},"let a=1\n",[28,77597,77598],{"class":30,"line":84},[28,77599,77600],{"class":38},"let b=2;\n",[28,77602,77603],{"class":30,"line":91},[28,77604,77605],{"class":38},"必须加这行代码，不然就会报错\n",[28,77607,77608],{"class":30,"line":97},[28,77609,77610],{"class":38},"[b,a]=[a,b]\n",[28,77612,77613],{"class":30,"line":103},[28,77614,2662],{"emptyLinePlaceholder":336},[28,77616,77617],{"class":30,"line":109},[28,77618,2662],{"emptyLinePlaceholder":336},[28,77620,77621],{"class":30,"line":118},[28,77622,77623],{"class":38},"可以写成下面的方式：\n",[28,77625,77626],{"class":30,"line":124},[28,77627,77595],{"class":38},[28,77629,77630],{"class":30,"line":131},[28,77631,77632],{"class":38},"let b=2\n",[28,77634,77635],{"class":30,"line":137},[28,77636,77637],{"class":38},";[b,a]=[a,b]\n",[28,77639,77640],{"class":30,"line":143},[28,77641,2662],{"emptyLinePlaceholder":336},[28,77643,77644],{"class":30,"line":149},[28,77645,77646],{"class":38},"②排序\n",[28,77648,77649],{"class":30,"line":1890},[28,77650,77651],{"class":38},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[28,77653,77654,77657,77660],{"class":30,"line":1904},[28,77655,77656],{"class":38},"for (let i = 0; i ",[28,77658,1307],{"class":77659},"s7hpK",[28,77661,77662],{"class":38}," arr1.length; i++) {\n",[28,77664,77665,77668,77670],{"class":30,"line":1909},[28,77666,77667],{"class":38},"   for (let j = 0; j ",[28,77669,1307],{"class":77659},[28,77671,77672],{"class":38}," arr1.length - 1; j++) {\n",[28,77674,77675],{"class":30,"line":1915},[28,77676,77677],{"class":38},"      if (arr1[j] > arr1[j + 1]) {\n",[28,77679,77680],{"class":30,"line":1936},[28,77681,77682],{"class":38},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[28,77684,77685],{"class":30,"line":1941},[28,77686,77687],{"class":38},"       }\n",[28,77689,77690],{"class":30,"line":1955},[28,77691,4571],{"class":38},[28,77693,77694],{"class":30,"line":1960},[28,77695,1830],{"class":38},[28,77697,77698],{"class":30,"line":1989},[28,77699,77700],{"class":38},"console.log(arr1)\n",[14,77702,77703],{},"数组解构的细节：",[14,77705,77706],{},"①变量多，单元值少",[14,77708,77709],{},[1727,77710],{"alt":23,"src":77711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77713,77714],{},"防止出现undefined的方法：",[14,77716,77717],{},"const [a=0,b=0] =[1]",[14,77719,77720],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77722,77723],{},"②变量少，单元值多",[14,77725,77726],{},[1727,77727],{"alt":23,"src":77728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77730,77731],{},"此时可以使用剩余参数来接收多余的值",[14,77733,77734],{},"const [a,b,...c]=[1,2,3,4]",[14,77736,77737],{},"console.log(c) 输出[3,4]",[14,77739,77740],{},"③可以按需导入，忽略某些返回值",[14,77742,77743],{},[1727,77744],{"alt":23,"src":77745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77747,77748],{},"④支持多维数组的结构",[18,77750,77754],{"className":77751,"code":77752,"language":77753,"meta":23,"style":23},"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",[25,77755,77756,77784,77800,77815,77830],{"__ignoreMap":23},[28,77757,77758,77760,77762,77764,77766,77768,77770,77772,77775,77777,77779,77781],{"class":30,"line":31},[28,77759,7054],{"class":34},[28,77761,52089],{"class":38},[28,77763,54],{"class":34},[28,77765,52482],{"class":38},[28,77767,61],{"class":60},[28,77769,12697],{"class":38},[28,77771,211],{"class":60},[28,77773,77774],{"class":38},", [",[28,77776,78],{"class":60},[28,77778,12697],{"class":38},[28,77780,73],{"class":60},[28,77782,77783],{"class":38},"]]\n",[28,77785,77786,77789,77791,77793,77795,77797],{"class":30,"line":48},[28,77787,77788],{"class":38},"console.",[28,77790,58503],{"class":2225},[28,77792,4113],{"class":38},[28,77794,244],{"class":60},[28,77796,4478],{"class":38},[28,77798,77799],{"class":87},"  \u002F\u002F1\n",[28,77801,77802,77804,77806,77808,77810,77812],{"class":30,"line":84},[28,77803,77788],{"class":38},[28,77805,58503],{"class":2225},[28,77807,4113],{"class":38},[28,77809,61],{"class":60},[28,77811,4478],{"class":38},[28,77813,77814],{"class":87},"  \u002F\u002F2\n",[28,77816,77817,77819,77821,77823,77825,77827],{"class":30,"line":91},[28,77818,77788],{"class":38},[28,77820,58503],{"class":2225},[28,77822,4113],{"class":38},[28,77824,211],{"class":60},[28,77826,4478],{"class":38},[28,77828,77829],{"class":87},"  \u002F\u002F[3,4]\n",[28,77831,77832,77834,77836,77838,77840,77842,77844,77846],{"class":30,"line":97},[28,77833,77788],{"class":38},[28,77835,58503],{"class":2225},[28,77837,4113],{"class":38},[28,77839,211],{"class":60},[28,77841,5163],{"class":38},[28,77843,244],{"class":60},[28,77845,4478],{"class":38},[28,77847,77848],{"class":87},"  \u002F\u002F3\n",[18,77850,77852],{"className":77751,"code":77851,"language":77753,"meta":23,"style":23},"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",[25,77853,77854,77881,77892,77903],{"__ignoreMap":23},[28,77855,77856,77858,77861,77863,77865,77867,77869,77871,77873,77875,77877,77879],{"class":30,"line":31},[28,77857,7054],{"class":34},[28,77859,77860],{"class":38}," [a, b, c] ",[28,77862,54],{"class":34},[28,77864,52482],{"class":38},[28,77866,61],{"class":60},[28,77868,12697],{"class":38},[28,77870,211],{"class":60},[28,77872,77774],{"class":38},[28,77874,78],{"class":60},[28,77876,12697],{"class":38},[28,77878,73],{"class":60},[28,77880,77783],{"class":38},[28,77882,77883,77885,77887,77890],{"class":30,"line":48},[28,77884,77788],{"class":38},[28,77886,58503],{"class":2225},[28,77888,77889],{"class":38},"(a)",[28,77891,77799],{"class":87},[28,77893,77894,77896,77898,77901],{"class":30,"line":84},[28,77895,77788],{"class":38},[28,77897,58503],{"class":2225},[28,77899,77900],{"class":38},"(b)",[28,77902,77814],{"class":87},[28,77904,77905,77907,77909,77912],{"class":30,"line":91},[28,77906,77788],{"class":38},[28,77908,58503],{"class":2225},[28,77910,77911],{"class":38},"(c)",[28,77913,77829],{"class":87},[18,77915,77917],{"className":77751,"code":77916,"language":77753,"meta":23,"style":23},"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",[25,77918,77919,77946,77956,77966,77976],{"__ignoreMap":23},[28,77920,77921,77923,77926,77928,77930,77932,77934,77936,77938,77940,77942,77944],{"class":30,"line":31},[28,77922,7054],{"class":34},[28,77924,77925],{"class":38}," [a, b, [c, d]] ",[28,77927,54],{"class":34},[28,77929,52482],{"class":38},[28,77931,61],{"class":60},[28,77933,12697],{"class":38},[28,77935,211],{"class":60},[28,77937,77774],{"class":38},[28,77939,78],{"class":60},[28,77941,12697],{"class":38},[28,77943,73],{"class":60},[28,77945,77783],{"class":38},[28,77947,77948,77950,77952,77954],{"class":30,"line":48},[28,77949,77788],{"class":38},[28,77951,58503],{"class":2225},[28,77953,77889],{"class":38},[28,77955,77799],{"class":87},[28,77957,77958,77960,77962,77964],{"class":30,"line":84},[28,77959,77788],{"class":38},[28,77961,58503],{"class":2225},[28,77963,77900],{"class":38},[28,77965,77814],{"class":87},[28,77967,77968,77970,77972,77974],{"class":30,"line":91},[28,77969,77788],{"class":38},[28,77971,58503],{"class":2225},[28,77973,77911],{"class":38},[28,77975,77848],{"class":87},[28,77977,77978,77980,77982,77985],{"class":30,"line":97},[28,77979,77788],{"class":38},[28,77981,58503],{"class":2225},[28,77983,77984],{"class":38},"(d)",[28,77986,77987],{"class":87},"  \u002F\u002F4\n",[380,77989,77991],{"id":77990},"_462-对象解构","4.6.2 对象解构",[14,77993,77994],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77996,77997],{},"用的非常非常多！！！！！！",[22260,77999,78001],{"id":78000},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78003,78004],{},"基本语法：",[363,78006,78007,78010,78013,78016],{},[366,78008,78009],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[366,78011,78012],{},"对象属性的值将被赋值给与属性名相同的变量",[366,78014,78015],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[366,78017,78018],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[18,78020,78022],{"className":50889,"code":78021,"language":50891,"meta":23,"style":23},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[25,78023,78024,78029,78034,78039,78043],{"__ignoreMap":23},[28,78025,78026],{"class":30,"line":31},[28,78027,78028],{"class":38},"const obj = {\n",[28,78030,78031],{"class":30,"line":48},[28,78032,78033],{"class":38},"   uname: 'pink老师',\n",[28,78035,78036],{"class":30,"line":84},[28,78037,78038],{"class":38},"   age: 18,\n",[28,78040,78041],{"class":30,"line":91},[28,78042,1830],{"class":38},[28,78044,78045],{"class":30,"line":97},[28,78046,78047],{"class":38},"const { uname, age } = obj\n",[14,78049,78050],{},"上方代码这样写等价于：",[14,78052,78053],{},"const uname等价于obj.uname",[14,78055,78056],{},"变量名可以重新改名：",[14,78058,78059],{},"const uname='red老师'",[14,78061,78062],{},"const user={",[14,78064,78065],{},"  uname:'pink老师',",[14,78067,78068],{},"  age:18",[14,78070,1343],{},[14,78072,78073],{},"const {uname,age}=user",[14,78075,78076],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78078,78079],{},"const {旧变量名：新变量名}=对象",[14,78081,78082],{},"const {uname:username,age}=user",[22260,78084,78086],{"id":78085},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78088,78089],{},[1727,78090],{"alt":23,"src":78091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22260,78093,78095],{"id":78094},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78097,78098],{},[1727,78099],{"alt":23,"src":78100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[18,78102,78104],{"className":53323,"code":78103,"language":53325,"meta":23,"style":23},"  \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",[25,78105,78106,78114,78119,78124,78129,78134,78139,78144,78149,78154,78158,78163,78168],{"__ignoreMap":23},[28,78107,78108,78110,78112],{"class":30,"line":31},[28,78109,52400],{"class":38},[28,78111,52069],{"class":51556},[28,78113,51563],{"class":38},[28,78115,78116],{"class":30,"line":48},[28,78117,78118],{"class":38},"    const pig = {\n",[28,78120,78121],{"class":30,"line":84},[28,78122,78123],{"class":38},"      name: '佩奇',\n",[28,78125,78126],{"class":30,"line":91},[28,78127,78128],{"class":38},"      family: {\n",[28,78130,78131],{"class":30,"line":97},[28,78132,78133],{"class":38},"        mother: '猪妈妈',\n",[28,78135,78136],{"class":30,"line":103},[28,78137,78138],{"class":38},"        father: '猪爸爸',\n",[28,78140,78141],{"class":30,"line":109},[28,78142,78143],{"class":38},"        sister: '乔治'\n",[28,78145,78146],{"class":30,"line":118},[28,78147,78148],{"class":38},"      },\n",[28,78150,78151],{"class":30,"line":124},[28,78152,78153],{"class":38},"      age: 6\n",[28,78155,78156],{"class":30,"line":131},[28,78157,2449],{"class":38},[28,78159,78160],{"class":30,"line":137},[28,78161,78162],{"class":38},"    \u002F\u002F 多级对象解构\n",[28,78164,78165],{"class":30,"line":143},[28,78166,78167],{"class":38},"    const { name, family: { mother, father, sister }, age } = pig\n",[28,78169,78170,78172,78174],{"class":30,"line":149},[28,78171,52673],{"class":38},[28,78173,52069],{"class":51556},[28,78175,51563],{"class":38},[14,78177,78178],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[18,78180,78183],{"className":78181,"code":78182,"language":76703,"meta":23,"style":23},"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",[25,78184,78185,78190,78201,78213,78225,78234,78238,78249,78261,78271,78276,78280,78290,78301,78310,78314,78318,78329,78340,78349,78353,78358],{"__ignoreMap":23},[28,78186,78187],{"class":30,"line":31},[28,78188,78189],{"class":87},"    \u002F\u002F 这是后台传递过来的数据\n",[28,78191,78192,78194,78197,78199],{"class":30,"line":48},[28,78193,11483],{"class":34},[28,78195,78196],{"class":38}," msg ",[28,78198,54],{"class":34},[28,78200,15834],{"class":38},[28,78202,78203,78206,78208,78211],{"class":30,"line":84},[28,78204,78205],{"class":127},"      \"code\"",[28,78207,1256],{"class":34},[28,78209,78210],{"class":60}," 200",[28,78212,31723],{"class":38},[28,78214,78215,78218,78220,78223],{"class":30,"line":91},[28,78216,78217],{"class":127},"      \"msg\"",[28,78219,1256],{"class":34},[28,78221,78222],{"class":127}," \"获取新闻列表成功\"",[28,78224,31723],{"class":38},[28,78226,78227,78230,78232],{"class":30,"line":97},[28,78228,78229],{"class":127},"      \"data\"",[28,78231,1256],{"class":34},[28,78233,55703],{"class":38},[28,78235,78236],{"class":30,"line":103},[28,78237,2772],{"class":38},[28,78239,78240,78243,78245,78247],{"class":30,"line":109},[28,78241,78242],{"class":127},"          \"id\"",[28,78244,1256],{"class":34},[28,78246,25381],{"class":60},[28,78248,31723],{"class":38},[28,78250,78251,78254,78256,78259],{"class":30,"line":118},[28,78252,78253],{"class":127},"          \"title\"",[28,78255,1256],{"class":34},[28,78257,78258],{"class":127}," \"5G商用自己，三大运用商收入下降\"",[28,78260,31723],{"class":38},[28,78262,78263,78266,78268],{"class":30,"line":124},[28,78264,78265],{"class":127},"          \"count\"",[28,78267,1256],{"class":34},[28,78269,78270],{"class":60}," 58\n",[28,78272,78273],{"class":30,"line":131},[28,78274,78275],{"class":38},"        },\n",[28,78277,78278],{"class":30,"line":137},[28,78279,2772],{"class":38},[28,78281,78282,78284,78286,78288],{"class":30,"line":143},[28,78283,78242],{"class":127},[28,78285,1256],{"class":34},[28,78287,15017],{"class":60},[28,78289,31723],{"class":38},[28,78291,78292,78294,78296,78299],{"class":30,"line":149},[28,78293,78253],{"class":127},[28,78295,1256],{"class":34},[28,78297,78298],{"class":127}," \"国际媒体头条速览\"",[28,78300,31723],{"class":38},[28,78302,78303,78305,78307],{"class":30,"line":1890},[28,78304,78265],{"class":127},[28,78306,1256],{"class":34},[28,78308,78309],{"class":60}," 56\n",[28,78311,78312],{"class":30,"line":1904},[28,78313,78275],{"class":38},[28,78315,78316],{"class":30,"line":1909},[28,78317,2772],{"class":38},[28,78319,78320,78322,78324,78327],{"class":30,"line":1915},[28,78321,78242],{"class":127},[28,78323,1256],{"class":34},[28,78325,78326],{"class":60}," 3",[28,78328,31723],{"class":38},[28,78330,78331,78333,78335,78338],{"class":30,"line":1936},[28,78332,78253],{"class":127},[28,78334,1256],{"class":34},[28,78336,78337],{"class":127}," \"乌克兰和俄罗斯持续冲突\"",[28,78339,31723],{"class":38},[28,78341,78342,78344,78346],{"class":30,"line":1941},[28,78343,78265],{"class":127},[28,78345,1256],{"class":34},[28,78347,78348],{"class":60}," 1669\n",[28,78350,78351],{"class":30,"line":1955},[28,78352,78275],{"class":38},[28,78354,78355],{"class":30,"line":1960},[28,78356,78357],{"class":38},"      ]\n",[28,78359,78360],{"class":30,"line":1989},[28,78361,2449],{"class":38},[14,78363,78364],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78366,78367],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78369,78370],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78372,78373],{},"function({data}) {",[14,78375,78376],{},"console.log(data)",[14,78378,1343],{},[14,78380,78381],{},"render(msg)",[14,78383,78384],{},"实参传递给形参的时候解构了",[14,78386,78387],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78389,78390],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78392,78393],{},"function render({data:mydata}) {",[14,78395,78396],{},"  console.log(data)",[14,78398,1343],{},[380,78400,78402],{"id":78401},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78404,78405],{},"有两种情况：一个是数组结构，一个是立即执行函数",[363,78407,78408],{},[366,78409,78410],{},"如果对一个数组进行遍历，有两种方式：",[14,78412,78413],{},"①法1",[14,78415,78416],{},"const arr=[1,2,3]",[14,78418,78419],{},"arr.map(function(item,index) {",[14,78421,78422],{},"  console.log(item)",[14,78424,52720],{},[14,78426,78427],{},[1727,78428],{"alt":23,"src":78429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78431,78432],{},"②法2",[14,78434,78435],{},"const str='pink'",[14,78437,78438],{},"[1,2,3].map(function(item,index) {",[14,78440,78441],{},"console.log(item)",[14,78443,52720],{},[14,78445,78446],{},[1727,78447],{"alt":23,"src":78448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78450,78451],{},"此时会报错",[14,78453,78454],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78456,78441],{},[14,78458,52720],{},[14,78460,78461],{},"内部会当成这样处理，所以我们用分号进行隔开",[351,78463,78465],{"id":78464},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78467,78468],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78470,78471],{},"可以理解为加强版的for循环",[14,78473,78474],{},[1727,78475],{"alt":23,"src":78476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78478,78479],{},"里边不写return，不返回数组，只遍历不返回",[14,78481,78482],{},"map是返回数组",[14,78484,78485],{},"forEach主要用于遍历数组对象",[18,78487,78489],{"className":53323,"code":78488,"language":53325,"meta":23,"style":23},"  \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",[25,78490,78491,78499,78504,78509,78514,78519,78523,78528],{"__ignoreMap":23},[28,78492,78493,78495,78497],{"class":30,"line":31},[28,78494,52400],{"class":38},[28,78496,52069],{"class":51556},[28,78498,51563],{"class":38},[28,78500,78501],{"class":30,"line":48},[28,78502,78503],{"class":38},"    const arr = ['red', 'green', 'pink']\n",[28,78505,78506],{"class":30,"line":84},[28,78507,78508],{"class":38},"    const result = arr.forEach(function (item, index) {\n",[28,78510,78511],{"class":30,"line":91},[28,78512,78513],{"class":38},"      console.log(item)\n",[28,78515,78516],{"class":30,"line":97},[28,78517,78518],{"class":38},"      console.log(index)\n",[28,78520,78521],{"class":30,"line":103},[28,78522,33717],{"class":38},[28,78524,78525],{"class":30,"line":109},[28,78526,78527],{"class":38},"    console.log(result)\n",[28,78529,78530,78532,78534],{"class":30,"line":118},[28,78531,52673],{"class":38},[28,78533,52069],{"class":51556},[28,78535,51563],{"class":38},[14,78537,78538],{},[1727,78539],{"alt":23,"src":78540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[351,78542,78544],{"id":78543},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78546,78547],{},[1727,78548],{"alt":23,"src":78549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78551,78552],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[18,78554,78556],{"className":53323,"code":78555,"language":53325,"meta":23,"style":23},"\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",[25,78557,78558,78566,78574,78579,78584,78588,78592,78597,78601,78606,78614],{"__ignoreMap":23},[28,78559,78560,78562,78564],{"class":30,"line":31},[28,78561,1307],{"class":38},[28,78563,52056],{"class":51556},[28,78565,51563],{"class":38},[28,78567,78568,78570,78572],{"class":30,"line":48},[28,78569,52400],{"class":38},[28,78571,52069],{"class":51556},[28,78573,51563],{"class":38},[28,78575,78576],{"class":30,"line":84},[28,78577,78578],{"class":38},"    const arr = [10, 20, 30]\n",[28,78580,78581],{"class":30,"line":91},[28,78582,78583],{"class":38},"    const newArr = arr.filter(function (item, index) {\n",[28,78585,78586],{"class":30,"line":97},[28,78587,78513],{"class":38},[28,78589,78590],{"class":30,"line":103},[28,78591,78518],{"class":38},[28,78593,78594],{"class":30,"line":109},[28,78595,78596],{"class":38},"      return item >= 20\n",[28,78598,78599],{"class":30,"line":118},[28,78600,33717],{"class":38},[28,78602,78603],{"class":30,"line":124},[28,78604,78605],{"class":38},"    console.log(newArr)\n",[28,78607,78608,78610,78612],{"class":30,"line":131},[28,78609,52673],{"class":38},[28,78611,52069],{"class":51556},[28,78613,51563],{"class":38},[28,78615,78616,78618,78620],{"class":30,"line":137},[28,78617,52041],{"class":38},[28,78619,52056],{"class":51556},[28,78621,51563],{"class":38},[14,78623,78624],{},"这个也可以写成箭头函数：",[18,78626,78628],{"className":50889,"code":78627,"language":50891,"meta":23,"style":23},"const newArr = arr.filter(item => item >= 20)\n",[25,78629,78630],{"__ignoreMap":23},[28,78631,78632],{"class":30,"line":31},[28,78633,78627],{"class":38},[351,78635,78637],{"id":78636},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78639,78640],{},[1727,78641],{"alt":23,"src":78642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78644,78645],{},"步骤：",[14,78647,78648],{},"①：渲染页面模块",[1404,78650,78651,78654],{},[366,78652,78653],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[366,78655,78656],{},"用forEach+字符串的形式",[14,78658,78659],{},"②：点击不同需求，显示不同页面内容",[1404,78661,78662,78665,78668,78671,78674],{},[366,78663,78664],{},"点击采取事件委托方式 .filter",[366,78666,78667],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[366,78669,78670],{},"筛选条件是根据点击的 data-index 来判断",[366,78672,78673],{},"可以使用对象解构，把事件对象解构",[366,78675,78676],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[18,78678,78680],{"className":50889,"code":78679,"language":50891,"meta":23,"style":23},"\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",[25,78681,78682,78692,78706,78710,78718,78732,78752,78764,78772,78778,78788,78798,78808,78812,78816,78822,78835,78847,78857,78869,78873,78877,78884,78897,78909,78926,78944,78957,78961,78965,78977,78987,78991,78995,79002,79043,79070,79080,79084,79088,79096,79108,79112,79116,79124,79136,79148,79159,79163,79167,79176,79188,79199,79203,79207,79216,79228,79240,79244,79248,79255,79265,79277,79289,79304,79308,79312,79320,79336,79346,79356,79366,79378,79382,79386,79396,79407,79417,79421,79429,79437,79441,79449,79464,79490,79515,79540,79559,79567,79581,79586,79591,79596,79601,79606,79614,79622,79627,79638,79643,79653,79663,79673,79683,79687,79691,79700,79709,79718,79727,79731,79735,79744,79753,79762,79771,79775,79779,79788,79797,79806,79815,79819,79823,79832,79841,79850,79859,79863,79867,79876,79885,79894,79903,79907,79911,79920,79929,79938,79947,79951,79955,79964,79973,79981,79990,79994,79998,80002,80007,80019,80024,80036,80040,80057,80085,80094,80099,80109,80119,80128,80133,80138,80142,80147,80164,80168,80173,80181,80186,80213,80218,80238,80243,80255,80260,80265,80270,80281,80295,80332,80350,80383,80400,80424,80428,80433,80439,80443,80447,80451,80459,80467,80471],{"__ignoreMap":23},[28,78683,78684,78686,78688,78690],{"class":30,"line":31},[28,78685,51553],{"class":38},[28,78687,51557],{"class":51556},[28,78689,51560],{"class":2225},[28,78691,51563],{"class":38},[28,78693,78694,78696,78698,78700,78702,78704],{"class":30,"line":48},[28,78695,1307],{"class":38},[28,78697,50891],{"class":51556},[28,78699,51572],{"class":2225},[28,78701,54],{"class":38},[28,78703,51577],{"class":127},[28,78705,51563],{"class":38},[28,78707,78708],{"class":30,"line":84},[28,78709,2662],{"emptyLinePlaceholder":336},[28,78711,78712,78714,78716],{"class":30,"line":91},[28,78713,1307],{"class":38},[28,78715,51590],{"class":51556},[28,78717,51563],{"class":38},[28,78719,78720,78722,78724,78726,78728,78730],{"class":30,"line":97},[28,78721,52400],{"class":38},[28,78723,51600],{"class":51556},[28,78725,51603],{"class":2225},[28,78727,54],{"class":38},[28,78729,51608],{"class":127},[28,78731,51563],{"class":38},[28,78733,78734,78736,78738,78740,78742,78744,78746,78748,78750],{"class":30,"line":103},[28,78735,52400],{"class":38},[28,78737,51600],{"class":51556},[28,78739,15182],{"class":2225},[28,78741,54],{"class":38},[28,78743,51647],{"class":127},[28,78745,51627],{"class":2225},[28,78747,54],{"class":38},[28,78749,51654],{"class":127},[28,78751,51563],{"class":38},[28,78753,78754,78756,78758,78760,78762],{"class":30,"line":109},[28,78755,52400],{"class":38},[28,78757,51663],{"class":51556},[28,78759,51666],{"class":38},[28,78761,51663],{"class":51556},[28,78763,51563],{"class":38},[28,78765,78766,78768,78770],{"class":30,"line":118},[28,78767,52400],{"class":38},[28,78769,328],{"class":51556},[28,78771,51563],{"class":38},[28,78773,78774,78776],{"class":30,"line":124},[28,78775,6665],{"class":51556},[28,78777,15834],{"class":38},[28,78779,78780,78782,78784,78786],{"class":30,"line":131},[28,78781,54951],{"class":60},[28,78783,51693],{"class":38},[28,78785,244],{"class":60},[28,78787,1558],{"class":38},[28,78789,78790,78792,78794,78796],{"class":30,"line":137},[28,78791,54962],{"class":60},[28,78793,51693],{"class":38},[28,78795,244],{"class":60},[28,78797,1558],{"class":38},[28,78799,78800,78802,78804,78806],{"class":30,"line":143},[28,78801,72852],{"class":60},[28,78803,51693],{"class":38},[28,78805,60761],{"class":60},[28,78807,1558],{"class":38},[28,78809,78810],{"class":30,"line":149},[28,78811,2449],{"class":38},[28,78813,78814],{"class":30,"line":1890},[28,78815,2662],{"emptyLinePlaceholder":336},[28,78817,78818,78820],{"class":30,"line":1904},[28,78819,62379],{"class":2225},[28,78821,15834],{"class":38},[28,78823,78824,78826,78828,78831,78833],{"class":30,"line":1909},[28,78825,55027],{"class":60},[28,78827,51693],{"class":38},[28,78829,78830],{"class":60},"990",[28,78832,51748],{"class":34},[28,78834,1558],{"class":38},[28,78836,78837,78839,78841,78843,78845],{"class":30,"line":1915},[28,78838,54962],{"class":60},[28,78840,51693],{"class":38},[28,78842,244],{"class":60},[28,78844,51812],{"class":60},[28,78846,1558],{"class":38},[28,78848,78849,78851,78853,78855],{"class":30,"line":1936},[28,78850,55265],{"class":60},[28,78852,51693],{"class":38},[28,78854,51733],{"class":60},[28,78856,1558],{"class":38},[28,78858,78859,78862,78864,78867],{"class":30,"line":1941},[28,78860,78861],{"class":60},"      flex-wrap",[28,78863,51693],{"class":38},[28,78865,78866],{"class":60},"wrap",[28,78868,1558],{"class":38},[28,78870,78871],{"class":30,"line":1955},[28,78872,2449],{"class":38},[28,78874,78875],{"class":30,"line":1960},[28,78876,2662],{"emptyLinePlaceholder":336},[28,78878,78879,78882],{"class":30,"line":1989},[28,78880,78881],{"class":2225},"    .item",[28,78883,15834],{"class":38},[28,78885,78886,78888,78890,78893,78895],{"class":30,"line":1994},[28,78887,55027],{"class":60},[28,78889,51693],{"class":38},[28,78891,78892],{"class":60},"240",[28,78894,51748],{"class":34},[28,78896,1558],{"class":38},[28,78898,78899,78901,78903,78905,78907],{"class":30,"line":2011},[28,78900,62256],{"class":60},[28,78902,51693],{"class":38},[28,78904,845],{"class":60},[28,78906,51748],{"class":34},[28,78908,1558],{"class":38},[28,78910,78911,78913,78915,78917,78919,78922,78924],{"class":30,"line":2016},[28,78912,54951],{"class":60},[28,78914,51693],{"class":38},[28,78916,1098],{"class":60},[28,78918,51748],{"class":34},[28,78920,78921],{"class":60}," 30",[28,78923,51748],{"class":34},[28,78925,1558],{"class":38},[28,78927,78928,78930,78932,78934,78937,78940,78942],{"class":30,"line":2021},[28,78929,62116],{"class":60},[28,78931,51693],{"class":38},[28,78933,28384],{"class":60},[28,78935,78936],{"class":60}," ease",[28,78938,78939],{"class":60}," .5",[28,78941,1093],{"class":34},[28,78943,1558],{"class":38},[28,78945,78946,78949,78951,78953,78955],{"class":30,"line":2026},[28,78947,78948],{"class":60},"      margin-bottom",[28,78950,51693],{"class":38},[28,78952,1098],{"class":60},[28,78954,51748],{"class":34},[28,78956,1558],{"class":38},[28,78958,78959],{"class":30,"line":2040},[28,78960,2449],{"class":38},[28,78962,78963],{"class":30,"line":2045},[28,78964,2662],{"emptyLinePlaceholder":336},[28,78966,78967,78970,78972,78975],{"class":30,"line":2839},[28,78968,78969],{"class":2225},"    .item:nth-child",[28,78971,413],{"class":38},[28,78973,78974],{"class":60},"4n",[28,78976,12704],{"class":38},[28,78978,78979,78981,78983,78985],{"class":30,"line":2853},[28,78980,62256],{"class":60},[28,78982,51693],{"class":38},[28,78984,244],{"class":60},[28,78986,1558],{"class":38},[28,78988,78989],{"class":30,"line":2861},[28,78990,2449],{"class":38},[28,78992,78993],{"class":30,"line":2866},[28,78994,2662],{"emptyLinePlaceholder":336},[28,78996,78997,79000],{"class":30,"line":2872},[28,78998,78999],{"class":2225},"    .item:hover",[28,79001,15834],{"class":38},[28,79003,79004,79007,79009,79011,79013,79015,79017,79019,79021,79024,79026,79028,79030,79032,79034,79036,79038,79041],{"class":30,"line":2878},[28,79005,79006],{"class":60},"      box-shadow",[28,79008,51693],{"class":38},[28,79010,244],{"class":60},[28,79012,51748],{"class":34},[28,79014,4355],{"class":60},[28,79016,51748],{"class":34},[28,79018,2410],{"class":60},[28,79020,51748],{"class":34},[28,79022,79023],{"class":60}," rgba",[28,79025,413],{"class":38},[28,79027,244],{"class":60},[28,79029,12697],{"class":38},[28,79031,244],{"class":60},[28,79033,12697],{"class":38},[28,79035,244],{"class":60},[28,79037,12697],{"class":38},[28,79039,79040],{"class":60},".2",[28,79042,2981],{"class":38},[28,79044,79045,79048,79050,79053,79055,79057,79059,79062,79064,79066,79068],{"class":30,"line":2883},[28,79046,79047],{"class":60},"      transform",[28,79049,51693],{"class":38},[28,79051,79052],{"class":60},"translate3d",[28,79054,413],{"class":38},[28,79056,244],{"class":60},[28,79058,12697],{"class":38},[28,79060,79061],{"class":60},"-4",[28,79063,51748],{"class":34},[28,79065,12697],{"class":38},[28,79067,244],{"class":60},[28,79069,2981],{"class":38},[28,79071,79072,79074,79076,79078],{"class":30,"line":8210},[28,79073,62281],{"class":60},[28,79075,51693],{"class":38},[28,79077,62286],{"class":60},[28,79079,1558],{"class":38},[28,79081,79082],{"class":30,"line":8234},[28,79083,2449],{"class":38},[28,79085,79086],{"class":30,"line":8239},[28,79087,2662],{"emptyLinePlaceholder":336},[28,79089,79090,79092,79094],{"class":30,"line":8245},[28,79091,78881],{"class":2225},[28,79093,55871],{"class":51556},[28,79095,15834],{"class":38},[28,79097,79098,79100,79102,79104,79106],{"class":30,"line":8272},[28,79099,55027],{"class":60},[28,79101,51693],{"class":38},[28,79103,713],{"class":60},[28,79105,729],{"class":34},[28,79107,1558],{"class":38},[28,79109,79110],{"class":30,"line":8277},[28,79111,2449],{"class":38},[28,79113,79114],{"class":30,"line":8283},[28,79115,2662],{"emptyLinePlaceholder":336},[28,79117,79118,79120,79122],{"class":30,"line":8295},[28,79119,78881],{"class":2225},[28,79121,62560],{"class":2225},[28,79123,15834],{"class":38},[28,79125,79126,79128,79130,79132,79134],{"class":30,"line":8307},[28,79127,55178],{"class":60},[28,79129,51693],{"class":38},[28,79131,1048],{"class":60},[28,79133,51748],{"class":34},[28,79135,1558],{"class":38},[28,79137,79138,79140,79142,79144,79146],{"class":30,"line":8319},[28,79139,78948],{"class":60},[28,79141,51693],{"class":38},[28,79143,845],{"class":60},[28,79145,51748],{"class":34},[28,79147,1558],{"class":38},[28,79149,79150,79152,79154,79157],{"class":30,"line":9978},[28,79151,57672],{"class":60},[28,79153,51693],{"class":38},[28,79155,79156],{"class":60},"#666",[28,79158,1558],{"class":38},[28,79160,79161],{"class":30,"line":10003},[28,79162,2449],{"class":38},[28,79164,79165],{"class":30,"line":10026},[28,79166,2662],{"emptyLinePlaceholder":336},[28,79168,79169,79171,79174],{"class":30,"line":10050},[28,79170,78881],{"class":2225},[28,79172,79173],{"class":2225}," .price",[28,79175,15834],{"class":38},[28,79177,79178,79180,79182,79184,79186],{"class":30,"line":10055},[28,79179,55178],{"class":60},[28,79181,51693],{"class":38},[28,79183,1148],{"class":60},[28,79185,51748],{"class":34},[28,79187,1558],{"class":38},[28,79189,79190,79192,79194,79197],{"class":30,"line":10060},[28,79191,57672],{"class":60},[28,79193,51693],{"class":38},[28,79195,79196],{"class":60},"firebrick",[28,79198,1558],{"class":38},[28,79200,79201],{"class":30,"line":10065},[28,79202,2449],{"class":38},[28,79204,79205],{"class":30,"line":10074},[28,79206,2662],{"emptyLinePlaceholder":336},[28,79208,79209,79211,79214],{"class":30,"line":10079},[28,79210,78881],{"class":2225},[28,79212,79213],{"class":2225}," .price::before",[28,79215,15834],{"class":38},[28,79217,79218,79221,79223,79226],{"class":30,"line":10085},[28,79219,79220],{"class":60},"      content",[28,79222,51693],{"class":38},[28,79224,79225],{"class":127},"'￥'",[28,79227,1558],{"class":38},[28,79229,79230,79232,79234,79236,79238],{"class":30,"line":10106},[28,79231,55178],{"class":60},[28,79233,51693],{"class":38},[28,79235,947],{"class":60},[28,79237,51748],{"class":34},[28,79239,1558],{"class":38},[28,79241,79242],{"class":30,"line":10112},[28,79243,2449],{"class":38},[28,79245,79246],{"class":30,"line":10126},[28,79247,2662],{"emptyLinePlaceholder":336},[28,79249,79250,79253],{"class":30,"line":10132},[28,79251,79252],{"class":2225},"    .filter",[28,79254,15834],{"class":38},[28,79256,79257,79259,79261,79263],{"class":30,"line":10159},[28,79258,55265],{"class":60},[28,79260,51693],{"class":38},[28,79262,51733],{"class":60},[28,79264,1558],{"class":38},[28,79266,79267,79269,79271,79273,79275],{"class":30,"line":10168},[28,79268,55027],{"class":60},[28,79270,51693],{"class":38},[28,79272,78830],{"class":60},[28,79274,51748],{"class":34},[28,79276,1558],{"class":38},[28,79278,79279,79281,79283,79285,79287],{"class":30,"line":10174},[28,79280,54962],{"class":60},[28,79282,51693],{"class":38},[28,79284,244],{"class":60},[28,79286,51812],{"class":60},[28,79288,1558],{"class":38},[28,79290,79291,79293,79295,79297,79299,79301],{"class":30,"line":10182},[28,79292,54951],{"class":60},[28,79294,51693],{"class":38},[28,79296,1054],{"class":60},[28,79298,51748],{"class":34},[28,79300,78921],{"class":60},[28,79302,79303],{"class":34},"px\n",[28,79305,79306],{"class":30,"line":10187},[28,79307,2449],{"class":38},[28,79309,79310],{"class":30,"line":16866},[28,79311,2662],{"emptyLinePlaceholder":336},[28,79313,79314,79316,79318],{"class":30,"line":16872},[28,79315,79252],{"class":2225},[28,79317,1663],{"class":51556},[28,79319,15834],{"class":38},[28,79321,79322,79324,79326,79328,79330,79332,79334],{"class":30,"line":16895},[28,79323,54951],{"class":60},[28,79325,51693],{"class":38},[28,79327,845],{"class":60},[28,79329,51748],{"class":34},[28,79331,9212],{"class":60},[28,79333,51748],{"class":34},[28,79335,1558],{"class":38},[28,79337,79338,79340,79342,79344],{"class":30,"line":16901},[28,79339,61977],{"class":60},[28,79341,51693],{"class":38},[28,79343,62074],{"class":60},[28,79345,1558],{"class":38},[28,79347,79348,79350,79352,79354],{"class":30,"line":16924},[28,79349,57672],{"class":60},[28,79351,51693],{"class":38},[28,79353,79156],{"class":60},[28,79355,1558],{"class":38},[28,79357,79358,79360,79362,79364],{"class":30,"line":16938},[28,79359,64226],{"class":60},[28,79361,51693],{"class":38},[28,79363,54993],{"class":60},[28,79365,1558],{"class":38},[28,79367,79368,79370,79372,79374,79376],{"class":30,"line":16958},[28,79369,62006],{"class":60},[28,79371,51693],{"class":38},[28,79373,1098],{"class":60},[28,79375,51748],{"class":34},[28,79377,1558],{"class":38},[28,79379,79380],{"class":30,"line":16964},[28,79381,2449],{"class":38},[28,79383,79384],{"class":30,"line":16975},[28,79385,2662],{"emptyLinePlaceholder":336},[28,79387,79388,79390,79392,79394],{"class":30,"line":16998},[28,79389,79252],{"class":2225},[28,79391,1663],{"class":51556},[28,79393,62156],{"class":2225},[28,79395,15834],{"class":38},[28,79397,79398,79400,79402,79405],{"class":30,"line":17020},[28,79399,55140],{"class":60},[28,79401,51693],{"class":38},[28,79403,79404],{"class":60},"#05943c",[28,79406,1558],{"class":38},[28,79408,79409,79411,79413,79415],{"class":30,"line":17025},[28,79410,57672],{"class":60},[28,79412,51693],{"class":38},[28,79414,61098],{"class":60},[28,79416,1558],{"class":38},[28,79418,79419],{"class":30,"line":17031},[28,79420,2449],{"class":38},[28,79422,79423,79425,79427],{"class":30,"line":17045},[28,79424,52673],{"class":38},[28,79426,328],{"class":51556},[28,79428,51563],{"class":38},[28,79430,79431,79433,79435],{"class":30,"line":17058},[28,79432,52041],{"class":38},[28,79434,51590],{"class":51556},[28,79436,51563],{"class":38},[28,79438,79439],{"class":30,"line":17063},[28,79440,2662],{"emptyLinePlaceholder":336},[28,79442,79443,79445,79447],{"class":30,"line":17077},[28,79444,1307],{"class":38},[28,79446,52056],{"class":51556},[28,79448,51563],{"class":38},[28,79450,79451,79453,79455,79457,79459,79462],{"class":30,"line":17082},[28,79452,52400],{"class":38},[28,79454,51867],{"class":51556},[28,79456,53742],{"class":2225},[28,79458,54],{"class":38},[28,79460,79461],{"class":127},"\"filter\"",[28,79463,51563],{"class":38},[28,79465,79466,79468,79470,79472,79474,79476,79479,79481,79483,79486,79488],{"class":30,"line":17088},[28,79467,51597],{"class":38},[28,79469,51],{"class":51556},[28,79471,61313],{"class":2225},[28,79473,54],{"class":38},[28,79475,61318],{"class":127},[28,79477,79478],{"class":2225}," data-index",[28,79480,54],{"class":38},[28,79482,3940],{"class":127},[28,79484,79485],{"class":38},">0-100元\u003C\u002F",[28,79487,51],{"class":51556},[28,79489,51563],{"class":38},[28,79491,79492,79494,79496,79498,79500,79502,79504,79506,79508,79511,79513],{"class":30,"line":17093},[28,79493,51597],{"class":38},[28,79495,51],{"class":51556},[28,79497,61313],{"class":2225},[28,79499,54],{"class":38},[28,79501,61318],{"class":127},[28,79503,79478],{"class":2225},[28,79505,54],{"class":38},[28,79507,3963],{"class":127},[28,79509,79510],{"class":38},">100-300元\u003C\u002F",[28,79512,51],{"class":51556},[28,79514,51563],{"class":38},[28,79516,79517,79519,79521,79523,79525,79527,79529,79531,79533,79536,79538],{"class":30,"line":17107},[28,79518,51597],{"class":38},[28,79520,51],{"class":51556},[28,79522,61313],{"class":2225},[28,79524,54],{"class":38},[28,79526,61318],{"class":127},[28,79528,79478],{"class":2225},[28,79530,54],{"class":38},[28,79532,3976],{"class":127},[28,79534,79535],{"class":38},">300元以上\u003C\u002F",[28,79537,51],{"class":51556},[28,79539,51563],{"class":38},[28,79541,79542,79544,79546,79548,79550,79552,79555,79557],{"class":30,"line":17112},[28,79543,51597],{"class":38},[28,79545,51],{"class":51556},[28,79547,61313],{"class":2225},[28,79549,54],{"class":38},[28,79551,61318],{"class":127},[28,79553,79554],{"class":38},">全部区间\u003C\u002F",[28,79556,51],{"class":51556},[28,79558,51563],{"class":38},[28,79560,79561,79563,79565],{"class":30,"line":17117},[28,79562,52673],{"class":38},[28,79564,51867],{"class":51556},[28,79566,51563],{"class":38},[28,79568,79569,79571,79573,79575,79577,79579],{"class":30,"line":17131},[28,79570,52400],{"class":38},[28,79572,51867],{"class":51556},[28,79574,53742],{"class":2225},[28,79576,54],{"class":38},[28,79578,62864],{"class":127},[28,79580,51563],{"class":38},[28,79582,79583],{"class":30,"line":17143},[28,79584,79585],{"class":87},"    \u003C!-- \u003Cdiv class=\"item\">\n",[28,79587,79588],{"class":30,"line":17148},[28,79589,79590],{"class":87},"      \u003Cimg src=\"\" alt=\"\">\n",[28,79592,79593],{"class":30,"line":17161},[28,79594,79595],{"class":87},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[28,79597,79598],{"class":30,"line":17166},[28,79599,79600],{"class":87},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[28,79602,79603],{"class":30,"line":17171},[28,79604,79605],{"class":87},"    \u003C\u002Fdiv> -->\n",[28,79607,79608,79610,79612],{"class":30,"line":17176},[28,79609,52673],{"class":38},[28,79611,51867],{"class":51556},[28,79613,51563],{"class":38},[28,79615,79616,79618,79620],{"class":30,"line":17189},[28,79617,52400],{"class":38},[28,79619,52069],{"class":51556},[28,79621,51563],{"class":38},[28,79623,79624],{"class":30,"line":17194},[28,79625,79626],{"class":87},"    \u002F\u002F 2. 初始化数据\n",[28,79628,79629,79631,79634,79636],{"class":30,"line":32889},[28,79630,11483],{"class":34},[28,79632,79633],{"class":60}," goodsList",[28,79635,13826],{"class":34},[28,79637,55703],{"class":38},[28,79639,79640],{"class":30,"line":32895},[28,79641,79642],{"class":38},"      {\n",[28,79644,79645,79648,79651],{"class":30,"line":32901},[28,79646,79647],{"class":38},"        id: ",[28,79649,79650],{"class":127},"'4001172'",[28,79652,31723],{"class":38},[28,79654,79655,79658,79661],{"class":30,"line":32907},[28,79656,79657],{"class":38},"        name: ",[28,79659,79660],{"class":127},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[28,79662,31723],{"class":38},[28,79664,79665,79668,79671],{"class":30,"line":32913},[28,79666,79667],{"class":38},"        price: ",[28,79669,79670],{"class":127},"'289.00'",[28,79672,31723],{"class":38},[28,79674,79675,79678,79681],{"class":30,"line":32924},[28,79676,79677],{"class":38},"        picture: ",[28,79679,79680],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[28,79682,31723],{"class":38},[28,79684,79685],{"class":30,"line":32930},[28,79686,78148],{"class":38},[28,79688,79689],{"class":30,"line":32950},[28,79690,79642],{"class":38},[28,79692,79693,79695,79698],{"class":30,"line":32956},[28,79694,79647],{"class":38},[28,79696,79697],{"class":127},"'4001594'",[28,79699,31723],{"class":38},[28,79701,79702,79704,79707],{"class":30,"line":32967},[28,79703,79657],{"class":38},[28,79705,79706],{"class":127},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[28,79708,31723],{"class":38},[28,79710,79711,79713,79716],{"class":30,"line":32973},[28,79712,79667],{"class":38},[28,79714,79715],{"class":127},"'288.00'",[28,79717,31723],{"class":38},[28,79719,79720,79722,79725],{"class":30,"line":32979},[28,79721,79677],{"class":38},[28,79723,79724],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[28,79726,31723],{"class":38},[28,79728,79729],{"class":30,"line":32985},[28,79730,78148],{"class":38},[28,79732,79733],{"class":30,"line":32991},[28,79734,79642],{"class":38},[28,79736,79737,79739,79742],{"class":30,"line":32997},[28,79738,79647],{"class":38},[28,79740,79741],{"class":127},"'4001009'",[28,79743,31723],{"class":38},[28,79745,79746,79748,79751],{"class":30,"line":33003},[28,79747,79657],{"class":38},[28,79749,79750],{"class":127},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[28,79752,31723],{"class":38},[28,79754,79755,79757,79760],{"class":30,"line":33009},[28,79756,79667],{"class":38},[28,79758,79759],{"class":127},"'109.00'",[28,79761,31723],{"class":38},[28,79763,79764,79766,79769],{"class":30,"line":33029},[28,79765,79677],{"class":38},[28,79767,79768],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[28,79770,31723],{"class":38},[28,79772,79773],{"class":30,"line":33035},[28,79774,78148],{"class":38},[28,79776,79777],{"class":30,"line":33051},[28,79778,79642],{"class":38},[28,79780,79781,79783,79786],{"class":30,"line":33057},[28,79782,79647],{"class":38},[28,79784,79785],{"class":127},"'4001874'",[28,79787,31723],{"class":38},[28,79789,79790,79792,79795],{"class":30,"line":33071},[28,79791,79657],{"class":38},[28,79793,79794],{"class":127},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[28,79796,31723],{"class":38},[28,79798,79799,79801,79804],{"class":30,"line":33077},[28,79800,79667],{"class":38},[28,79802,79803],{"class":127},"'488.00'",[28,79805,31723],{"class":38},[28,79807,79808,79810,79813],{"class":30,"line":33092},[28,79809,79677],{"class":38},[28,79811,79812],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[28,79814,31723],{"class":38},[28,79816,79817],{"class":30,"line":33098},[28,79818,78148],{"class":38},[28,79820,79821],{"class":30,"line":33107},[28,79822,79642],{"class":38},[28,79824,79825,79827,79830],{"class":30,"line":33113},[28,79826,79647],{"class":38},[28,79828,79829],{"class":127},"'4001649'",[28,79831,31723],{"class":38},[28,79833,79834,79836,79839],{"class":30,"line":33122},[28,79835,79657],{"class":38},[28,79837,79838],{"class":127},"'大师监制龙泉青瓷茶叶罐'",[28,79840,31723],{"class":38},[28,79842,79843,79845,79848],{"class":30,"line":33128},[28,79844,79667],{"class":38},[28,79846,79847],{"class":127},"'139.00'",[28,79849,31723],{"class":38},[28,79851,79852,79854,79857],{"class":30,"line":33134},[28,79853,79677],{"class":38},[28,79855,79856],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[28,79858,31723],{"class":38},[28,79860,79861],{"class":30,"line":33143},[28,79862,78148],{"class":38},[28,79864,79865],{"class":30,"line":33149},[28,79866,79642],{"class":38},[28,79868,79869,79871,79874],{"class":30,"line":33160},[28,79870,79647],{"class":38},[28,79872,79873],{"class":127},"'3997185'",[28,79875,31723],{"class":38},[28,79877,79878,79880,79883],{"class":30,"line":33166},[28,79879,79657],{"class":38},[28,79881,79882],{"class":127},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[28,79884,31723],{"class":38},[28,79886,79887,79889,79892],{"class":30,"line":33185},[28,79888,79667],{"class":38},[28,79890,79891],{"class":127},"'108.00'",[28,79893,31723],{"class":38},[28,79895,79896,79898,79901],{"class":30,"line":33191},[28,79897,79677],{"class":38},[28,79899,79900],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[28,79902,31723],{"class":38},[28,79904,79905],{"class":30,"line":33202},[28,79906,78148],{"class":38},[28,79908,79909],{"class":30,"line":33208},[28,79910,79642],{"class":38},[28,79912,79913,79915,79918],{"class":30,"line":33228},[28,79914,79647],{"class":38},[28,79916,79917],{"class":127},"'3997403'",[28,79919,31723],{"class":38},[28,79921,79922,79924,79927],{"class":30,"line":33244},[28,79923,79657],{"class":38},[28,79925,79926],{"class":127},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[28,79928,31723],{"class":38},[28,79930,79931,79933,79936],{"class":30,"line":33250},[28,79932,79667],{"class":38},[28,79934,79935],{"class":127},"'100.00'",[28,79937,31723],{"class":38},[28,79939,79940,79942,79945],{"class":30,"line":33264},[28,79941,79677],{"class":38},[28,79943,79944],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[28,79946,31723],{"class":38},[28,79948,79949],{"class":30,"line":33270},[28,79950,78148],{"class":38},[28,79952,79953],{"class":30,"line":33276},[28,79954,79642],{"class":38},[28,79956,79957,79959,79962],{"class":30,"line":33287},[28,79958,79647],{"class":38},[28,79960,79961],{"class":127},"'3998274'",[28,79963,31723],{"class":38},[28,79965,79966,79968,79971],{"class":30,"line":33293},[28,79967,79657],{"class":38},[28,79969,79970],{"class":127},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[28,79972,31723],{"class":38},[28,79974,79975,79977,79979],{"class":30,"line":33299},[28,79976,79667],{"class":38},[28,79978,79847],{"class":127},[28,79980,31723],{"class":38},[28,79982,79983,79985,79988],{"class":30,"line":33309},[28,79984,79677],{"class":38},[28,79986,79987],{"class":127},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[28,79989,31723],{"class":38},[28,79991,79992],{"class":30,"line":33315},[28,79993,78148],{"class":38},[28,79995,79996],{"class":30,"line":33326},[28,79997,53365],{"class":38},[28,79999,80000],{"class":30,"line":33332},[28,80001,2662],{"emptyLinePlaceholder":336},[28,80003,80004],{"class":30,"line":33342},[28,80005,80006],{"class":87},"    \u002F\u002F 1.渲染函数\n",[28,80008,80009,80011,80013,80015,80017],{"class":30,"line":33347},[28,80010,70340],{"class":34},[28,80012,70343],{"class":2225},[28,80014,413],{"class":38},[28,80016,4142],{"class":5478},[28,80018,12704],{"class":38},[28,80020,80021],{"class":30,"line":33353},[28,80022,80023],{"class":87},"      \u002F\u002F 声明空字符串\n",[28,80025,80026,80029,80032,80034],{"class":30,"line":33402},[28,80027,80028],{"class":34},"      let",[28,80030,80031],{"class":38}," str ",[28,80033,54],{"class":34},[28,80035,70360],{"class":127},[28,80037,80038],{"class":30,"line":33449},[28,80039,70365],{"class":87},[28,80041,80042,80044,80047,80049,80052,80055],{"class":30,"line":33454},[28,80043,58263],{"class":38},[28,80045,80046],{"class":2225},"forEach",[28,80048,413],{"class":38},[28,80050,80051],{"class":5478},"item",[28,80053,80054],{"class":34}," =>",[28,80056,15834],{"class":38},[28,80058,80059,80061,80064,80067,80069,80072,80074,80077,80080,80082],{"class":30,"line":33460},[28,80060,61526],{"class":34},[28,80062,80063],{"class":38}," { ",[28,80065,80066],{"class":60},"name",[28,80068,12697],{"class":38},[28,80070,80071],{"class":60},"price",[28,80073,12697],{"class":38},[28,80075,80076],{"class":60},"picture",[28,80078,80079],{"class":38}," } ",[28,80081,54],{"class":34},[28,80083,80084],{"class":38}," item\n",[28,80086,80087,80090,80092],{"class":30,"line":33479},[28,80088,80089],{"class":38},"        str ",[28,80091,9739],{"class":34},[28,80093,70424],{"class":127},[28,80095,80096],{"class":30,"line":33485},[28,80097,80098],{"class":127},"          \u003Cdiv class=\"item\">\n",[28,80100,80101,80104,80106],{"class":30,"line":33505},[28,80102,80103],{"class":127},"            \u003Cimg src=\"${",[28,80105,80076],{"class":38},[28,80107,80108],{"class":127},"}\" alt=\"\">\n",[28,80110,80111,80114,80116],{"class":30,"line":33511},[28,80112,80113],{"class":127},"            \u003Cp class=\"name\">${",[28,80115,80066],{"class":38},[28,80117,80118],{"class":127},"}\u003C\u002Fp>\n",[28,80120,80121,80124,80126],{"class":30,"line":33517},[28,80122,80123],{"class":127},"            \u003Cp class=\"price\">${",[28,80125,80071],{"class":38},[28,80127,80118],{"class":127},[28,80129,80130],{"class":30,"line":33527},[28,80131,80132],{"class":127},"          \u003C\u002Fdiv>\n",[28,80134,80135],{"class":30,"line":33532},[28,80136,80137],{"class":127},"        `\n",[28,80139,80140],{"class":30,"line":33538},[28,80141,65071],{"class":38},[28,80143,80144],{"class":30,"line":33554},[28,80145,80146],{"class":87},"      \u002F\u002F 追加给List\n",[28,80148,80149,80151,80153,80155,80158,80160,80162],{"class":30,"line":33599},[28,80150,56027],{"class":38},[28,80152,54655],{"class":2225},[28,80154,413],{"class":38},[28,80156,80157],{"class":127},"'.list'",[28,80159,74505],{"class":38},[28,80161,54],{"class":34},[28,80163,74241],{"class":38},[28,80165,80166],{"class":30,"line":33605},[28,80167,2449],{"class":38},[28,80169,80170],{"class":30,"line":33611},[28,80171,80172],{"class":87},"    \u002F\u002F 页面一打开就需要渲染\n",[28,80174,80175,80178],{"class":30,"line":33617},[28,80176,80177],{"class":2225},"    render",[28,80179,80180],{"class":38},"(goodsList)\n",[28,80182,80183],{"class":30,"line":33628},[28,80184,80185],{"class":87},"    \u002F\u002F 2.过滤筛选\n",[28,80187,80188,80190,80192,80194,80197,80199,80201,80203,80205,80207,80209,80211],{"class":30,"line":33634},[28,80189,52663],{"class":38},[28,80191,54655],{"class":2225},[28,80193,413],{"class":38},[28,80195,80196],{"class":127},"'.filter'",[28,80198,31086],{"class":38},[28,80200,58069],{"class":2225},[28,80202,413],{"class":38},[28,80204,58074],{"class":127},[28,80206,12697],{"class":38},[28,80208,482],{"class":5478},[28,80210,80054],{"class":34},[28,80212,15834],{"class":38},[28,80214,80215],{"class":30,"line":33640},[28,80216,80217],{"class":87},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[28,80219,80220,80222,80224,80227,80229,80231,80233,80235],{"class":30,"line":33646},[28,80221,58484],{"class":34},[28,80223,80063],{"class":38},[28,80225,80226],{"class":60},"tagName",[28,80228,12697],{"class":38},[28,80230,31794],{"class":60},[28,80232,80079],{"class":38},[28,80234,54],{"class":34},[28,80236,80237],{"class":38}," e.target\n",[28,80239,80240],{"class":30,"line":33664},[28,80241,80242],{"class":87},"      \u002F\u002F 判断\n",[28,80244,80245,80247,80249,80251,80253],{"class":30,"line":33678},[28,80246,54736],{"class":34},[28,80248,67290],{"class":38},[28,80250,54742],{"class":34},[28,80252,68512],{"class":127},[28,80254,12704],{"class":38},[28,80256,80257],{"class":30,"line":33687},[28,80258,80259],{"class":87},"        \u002F\u002F console.log(11)\n",[28,80261,80262],{"class":30,"line":33696},[28,80263,80264],{"class":87},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[28,80266,80267],{"class":30,"line":33705},[28,80268,80269],{"class":87},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[28,80271,80272,80274,80276,80278],{"class":30,"line":33714},[28,80273,52086],{"class":34},[28,80275,52089],{"class":38},[28,80277,54],{"class":34},[28,80279,80280],{"class":38}," goodsList\n",[28,80282,80283,80285,80288,80290,80293],{"class":30,"line":33720},[28,80284,2759],{"class":34},[28,80286,80287],{"class":38}," (dataset.index ",[28,80289,54742],{"class":34},[28,80291,80292],{"class":127}," '1'",[28,80294,12704],{"class":38},[28,80296,80297,80300,80302,80305,80308,80310,80312,80314,80317,80319,80321,80324,80326,80328,80330],{"class":30,"line":33726},[28,80298,80299],{"class":38},"          arr ",[28,80301,54],{"class":34},[28,80303,80304],{"class":38}," goodsList.",[28,80306,80307],{"class":2225},"filter",[28,80309,413],{"class":38},[28,80311,80051],{"class":5478},[28,80313,80054],{"class":34},[28,80315,80316],{"class":38}," item.price ",[28,80318,1972],{"class":34},[28,80320,4355],{"class":60},[28,80322,80323],{"class":34}," &&",[28,80325,80316],{"class":38},[28,80327,1853],{"class":34},[28,80329,6016],{"class":60},[28,80331,81],{"class":38},[28,80333,80334,80337,80339,80341,80343,80345,80348],{"class":30,"line":33734},[28,80335,80336],{"class":38},"        } ",[28,80338,1963],{"class":34},[28,80340,1966],{"class":34},[28,80342,80287],{"class":38},[28,80344,54742],{"class":34},[28,80346,80347],{"class":127}," '2'",[28,80349,12704],{"class":38},[28,80351,80352,80354,80356,80358,80360,80362,80364,80366,80368,80370,80372,80374,80376,80378,80381],{"class":30,"line":33739},[28,80353,80299],{"class":38},[28,80355,54],{"class":34},[28,80357,80304],{"class":38},[28,80359,80307],{"class":2225},[28,80361,413],{"class":38},[28,80363,80051],{"class":5478},[28,80365,80054],{"class":34},[28,80367,80316],{"class":38},[28,80369,1972],{"class":34},[28,80371,6016],{"class":60},[28,80373,80323],{"class":34},[28,80375,80316],{"class":38},[28,80377,1853],{"class":34},[28,80379,80380],{"class":60}," 300",[28,80382,81],{"class":38},[28,80384,80385,80387,80389,80391,80393,80395,80398],{"class":30,"line":33745},[28,80386,80336],{"class":38},[28,80388,1963],{"class":34},[28,80390,1966],{"class":34},[28,80392,80287],{"class":38},[28,80394,54742],{"class":34},[28,80396,80397],{"class":127}," '3'",[28,80399,12704],{"class":38},[28,80401,80402,80404,80406,80408,80410,80412,80414,80416,80418,80420,80422],{"class":30,"line":33756},[28,80403,80299],{"class":38},[28,80405,54],{"class":34},[28,80407,80304],{"class":38},[28,80409,80307],{"class":2225},[28,80411,413],{"class":38},[28,80413,80051],{"class":5478},[28,80415,80054],{"class":34},[28,80417,80316],{"class":38},[28,80419,1972],{"class":34},[28,80421,80380],{"class":60},[28,80423,81],{"class":38},[28,80425,80426],{"class":30,"line":33762},[28,80427,2791],{"class":38},[28,80429,80430],{"class":30,"line":33782},[28,80431,80432],{"class":87},"        \u002F\u002F 渲染函数\n",[28,80434,80435,80437],{"class":30,"line":33788},[28,80436,70664],{"class":2225},[28,80438,52668],{"class":38},[28,80440,80441],{"class":30,"line":33794},[28,80442,52654],{"class":38},[28,80444,80445],{"class":30,"line":33800},[28,80446,2662],{"emptyLinePlaceholder":336},[28,80448,80449],{"class":30,"line":33817},[28,80450,33717],{"class":38},[28,80452,80453,80455,80457],{"class":30,"line":33823},[28,80454,52673],{"class":38},[28,80456,52069],{"class":51556},[28,80458,51563],{"class":38},[28,80460,80461,80463,80465],{"class":30,"line":33829},[28,80462,52041],{"class":38},[28,80464,52056],{"class":51556},[28,80466,51563],{"class":38},[28,80468,80469],{"class":30,"line":33835},[28,80470,2662],{"emptyLinePlaceholder":336},[28,80472,80473,80475,80477],{"class":30,"line":33841},[28,80474,52041],{"class":38},[28,80476,50891],{"class":51556},[28,80478,51563],{"class":38},[351,80480,80482],{"id":80481},"_410-深入了解对象","4.10 深入了解对象",[380,80484,80486],{"id":80485},"_4101-创建对象","4.10.1 创建对象",[14,80488,80489],{},[1727,80490],{"alt":23,"src":80491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80493,80494],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[380,80496,80498],{"id":80497},"_4102-构造函数","4.10.2 构造函数",[14,80500,80501,80504],{},[555,80502,80503],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80506,80507,80510],{},[555,80508,80509],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[18,80512,80514],{"className":50889,"code":80513,"language":50891,"meta":23,"style":23},"\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",[25,80515,80516,80524,80529,80550,80563,80575,80587,80591,80596,80623,80628,80655],{"__ignoreMap":23},[28,80517,80518,80520,80522],{"class":30,"line":31},[28,80519,1307],{"class":38},[28,80521,52069],{"class":51556},[28,80523,51563],{"class":38},[28,80525,80526],{"class":30,"line":48},[28,80527,80528],{"class":87},"\u002F\u002F例：\n",[28,80530,80531,80533,80536,80538,80540,80542,80544,80546,80548],{"class":30,"line":84},[28,80532,54705],{"class":34},[28,80534,80535],{"class":2225}," Pig",[28,80537,413],{"class":38},[28,80539,80066],{"class":5478},[28,80541,64],{"class":38},[28,80543,70477],{"class":5478},[28,80545,64],{"class":38},[28,80547,70494],{"class":5478},[28,80549,12704],{"class":38},[28,80551,80552,80555,80558,80560],{"class":30,"line":91},[28,80553,80554],{"class":60},"    this",[28,80556,80557],{"class":38},".name",[28,80559,54],{"class":34},[28,80561,80562],{"class":38},"name\n",[28,80564,80565,80567,80570,80572],{"class":30,"line":97},[28,80566,80554],{"class":60},[28,80568,80569],{"class":38},".age",[28,80571,54],{"class":34},[28,80573,80574],{"class":38},"age\n",[28,80576,80577,80579,80582,80584],{"class":30,"line":103},[28,80578,80554],{"class":60},[28,80580,80581],{"class":38},".gender",[28,80583,54],{"class":34},[28,80585,80586],{"class":38},"gender    \n",[28,80588,80589],{"class":30,"line":109},[28,80590,1830],{"class":38},[28,80592,80593],{"class":30,"line":118},[28,80594,80595],{"class":87},"\u002F\u002F创建佩奇对象\n",[28,80597,80598,80600,80603,80605,80607,80609,80612,80614,80616,80618,80621],{"class":30,"line":124},[28,80599,7054],{"class":34},[28,80601,80602],{"class":60}," Peppa",[28,80604,11979],{"class":34},[28,80606,80535],{"class":2225},[28,80608,413],{"class":38},[28,80610,80611],{"class":127},"'佩奇'",[28,80613,64],{"class":38},[28,80615,206],{"class":60},[28,80617,64],{"class":38},[28,80619,80620],{"class":127},"'女'",[28,80622,81],{"class":38},[28,80624,80625],{"class":30,"line":131},[28,80626,80627],{"class":87},"\u002F\u002F创建乔治对象\n",[28,80629,80630,80632,80635,80637,80639,80641,80644,80646,80648,80650,80653],{"class":30,"line":137},[28,80631,7054],{"class":34},[28,80633,80634],{"class":60}," George",[28,80636,11979],{"class":34},[28,80638,80535],{"class":2225},[28,80640,413],{"class":38},[28,80642,80643],{"class":127},"'乔治'",[28,80645,64],{"class":38},[28,80647,78],{"class":60},[28,80649,64],{"class":38},[28,80651,80652],{"class":127},"'男'",[28,80654,81],{"class":38},[28,80656,80657,80659,80661],{"class":30,"line":143},[28,80658,52041],{"class":38},[28,80660,52069],{"class":51556},[28,80662,51563],{"class":38},[14,80664,80665],{},[1727,80666],{"alt":23,"src":80667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80669,80670],{},[1727,80671],{"alt":23,"src":80672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80674,80675],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80677,80678],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80680,80681],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80683,80684],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80686,80687],{},"这里用等号是因为：对象.属性=值",[14,80689,80690],{},"①利用对象字面量创建对象",[14,80692,80693],{},"const o={",[14,80695,80696],{},"name:'pink'",[14,80698,80699],{},"} ②利用new Object创建对象",[14,80701,80702],{},"const o=new Object({name:'pink'})",[14,80704,80705],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80707,80708],{},"构造函数创建对象的执行过程：",[14,80710,80711],{},[1727,80712],{"alt":23,"src":80713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[380,80715,80717],{"id":80716},"_4103-实例成员","4.10.3 实例成员",[14,80719,80720],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[363,80722,80723,80726,80729],{},[366,80724,80725],{},"实例对象的属性和方法即为实例成员",[366,80727,80728],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[366,80730,80731],{},"构造函数创建的实例对象彼此独立互不影响",[380,80733,80735],{"id":80734},"_4104-静态成员","4.10.4 静态成员",[14,80737,80738],{},[1727,80739],{"alt":23,"src":80740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80742,80743],{},"静态成员有Date.now() Math.PI Math.random()",[14,80745,80746],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80748,80749],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80751,80752],{},"function Pig(name) n {",[14,80754,80755],{},"this.name=name",[14,80757,1343],{},[14,80759,80760],{},"Pig.eyes=2",[14,80762,80763],{},"Pig.sayHai=function () { console.log(this) }",[14,80765,80766],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80768,80769],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80771,11594],{},[363,80773,80774,80777,80780,80783,80786],{},[366,80775,80776],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[366,80778,80779],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[366,80781,80782],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[366,80784,80785],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[366,80787,80788],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80790,80791],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[380,80793,80795],{"id":80794},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80797,80798],{},"内置构造函数包含：",[14,80800,80801],{},[1727,80802],{"alt":23,"src":80803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80805,80806],{},[1727,80807],{"alt":23,"src":80808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80810,80811],{},"这些基本数据类型，js对他们进行了包装",[52069,80813,80814],{},"\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",[22260,80816,80818],{"id":80817},"_41051-object","4.10.5.1 Object",[14,80820,80821],{},"Object 是内置的构造函数，用于创建普通对象",[14,80823,80824],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[18,80826,80828],{"className":50889,"code":80827,"language":50891,"meta":23,"style":23},"const user=new Object({name:'小明',age:15})\n",[25,80829,80830],{"__ignoreMap":23},[28,80831,80832],{"class":30,"line":31},[28,80833,80827],{"class":38},[14,80835,80836],{},"三个常用的静态方法：",[23172,80838,80840],{"id":80839},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80842,80843],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80845,80846],{},[1727,80847],{"alt":23,"src":80848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80850,80851],{},[1727,80852],{"alt":23,"src":80853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[18,80855,80857],{"className":53323,"code":80856,"language":53325,"meta":23,"style":23},"\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",[25,80858,80859,80867,80875,80880,80885,80890,80895,80900,80905,80913],{"__ignoreMap":23},[28,80860,80861,80863,80865],{"class":30,"line":31},[28,80862,1307],{"class":38},[28,80864,52056],{"class":51556},[28,80866,51563],{"class":38},[28,80868,80869,80871,80873],{"class":30,"line":48},[28,80870,52400],{"class":38},[28,80872,52069],{"class":51556},[28,80874,51563],{"class":38},[28,80876,80877],{"class":30,"line":84},[28,80878,80879],{"class":38},"    const o = { name: 'pink', age: 6 }\n",[28,80881,80882],{"class":30,"line":91},[28,80883,80884],{"class":38},"    \u002F\u002F 获得所有属性名\n",[28,80886,80887],{"class":30,"line":97},[28,80888,80889],{"class":38},"    const arr = Object.keys(o)\n",[28,80891,80892],{"class":30,"line":103},[28,80893,80894],{"class":38},"    console.log(arr)\n",[28,80896,80897],{"class":30,"line":109},[28,80898,80899],{"class":38},"    \u002F\u002F 获得所有属性值\n",[28,80901,80902],{"class":30,"line":118},[28,80903,80904],{"class":38},"    console.log(Object.values(o))\n",[28,80906,80907,80909,80911],{"class":30,"line":124},[28,80908,52673],{"class":38},[28,80910,52069],{"class":51556},[28,80912,51563],{"class":38},[28,80914,80915,80917,80919],{"class":30,"line":131},[28,80916,52041],{"class":38},[28,80918,52056],{"class":51556},[28,80920,51563],{"class":38},[23172,80922,80924],{"id":80923},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80926,80927],{},"Object.assign(oo,o)",[14,80929,80930],{},"后的东西添加给前 是追加",[14,80932,80933],{},[1727,80934],{"alt":23,"src":80935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80937,80938],{},[1727,80939],{"alt":23,"src":80940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[18,80942,80944],{"className":53323,"code":80943,"language":53325,"meta":23,"style":23},"\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",[25,80945,80946,80954,80962,80966,80970,80974,80978,80982,80986,80991,80996,81001,81006,81011,81019],{"__ignoreMap":23},[28,80947,80948,80950,80952],{"class":30,"line":31},[28,80949,1307],{"class":38},[28,80951,52056],{"class":51556},[28,80953,51563],{"class":38},[28,80955,80956,80958,80960],{"class":30,"line":48},[28,80957,52400],{"class":38},[28,80959,52069],{"class":51556},[28,80961,51563],{"class":38},[28,80963,80964],{"class":30,"line":84},[28,80965,80879],{"class":38},[28,80967,80968],{"class":30,"line":91},[28,80969,80884],{"class":38},[28,80971,80972],{"class":30,"line":97},[28,80973,80889],{"class":38},[28,80975,80976],{"class":30,"line":103},[28,80977,80894],{"class":38},[28,80979,80980],{"class":30,"line":109},[28,80981,80899],{"class":38},[28,80983,80984],{"class":30,"line":118},[28,80985,80904],{"class":38},[28,80987,80988],{"class":30,"line":124},[28,80989,80990],{"class":38},"    const oo = {}\n",[28,80992,80993],{"class":30,"line":131},[28,80994,80995],{"class":38},"    Object.assign(oo, o)\n",[28,80997,80998],{"class":30,"line":137},[28,80999,81000],{"class":38},"    console.log(oo)\n",[28,81002,81003],{"class":30,"line":143},[28,81004,81005],{"class":38},"    Object.assign(o, { gender: '女' })\n",[28,81007,81008],{"class":30,"line":149},[28,81009,81010],{"class":38},"    console.log(o)\n",[28,81012,81013,81015,81017],{"class":30,"line":1890},[28,81014,52673],{"class":38},[28,81016,52069],{"class":51556},[28,81018,51563],{"class":38},[28,81020,81021,81023,81025],{"class":30,"line":1904},[28,81022,52041],{"class":38},[28,81024,52056],{"class":51556},[28,81026,51563],{"class":38},[14,81028,81029],{},[1727,81030],{"alt":23,"src":81031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22260,81033,81035],{"id":81034},"_41052-array","4.10.5.2 Array",[14,81037,81038],{},"Array 是内置的构造函数，用于创建数组",[14,81040,81041],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[18,81043,81045],{"className":50889,"code":81044,"language":50891,"meta":23,"style":23},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[25,81046,81047,81052],{"__ignoreMap":23},[28,81048,81049],{"class":30,"line":31},[28,81050,81051],{"class":38},"const arr=new Array(3,5)\n",[28,81053,81054],{"class":30,"line":48},[28,81055,81056],{"class":38},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81058,81059],{},"Array的实例方法，这个方法是实例成员",[14,81061,81062],{},[1727,81063],{"alt":23,"src":81064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23172,81066,81068],{"id":81067},"_410521-reduce","4.10.5.2.1 reduce",[14,81070,81071],{},[1727,81072],{"alt":23,"src":81073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[18,81075,81077],{"className":53323,"code":81076,"language":53325,"meta":23,"style":23},"\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",[25,81078,81079,81087,81095,81100,81105,81110,81115,81119,81124,81129,81134,81138,81143,81148,81152,81157,81162,81167,81175],{"__ignoreMap":23},[28,81080,81081,81083,81085],{"class":30,"line":31},[28,81082,1307],{"class":38},[28,81084,52056],{"class":51556},[28,81086,51563],{"class":38},[28,81088,81089,81091,81093],{"class":30,"line":48},[28,81090,52400],{"class":38},[28,81092,52069],{"class":51556},[28,81094,51563],{"class":38},[28,81096,81097],{"class":30,"line":84},[28,81098,81099],{"class":38},"    const arr = [1, 5, 8]\n",[28,81101,81102],{"class":30,"line":91},[28,81103,81104],{"class":38},"    \u002F\u002F 1.没有初始值\n",[28,81106,81107],{"class":30,"line":97},[28,81108,81109],{"class":38},"    const total = arr.reduce(function (prev, current) {\n",[28,81111,81112],{"class":30,"line":103},[28,81113,81114],{"class":38},"      return prev + current\n",[28,81116,81117],{"class":30,"line":109},[28,81118,33717],{"class":38},[28,81120,81121],{"class":30,"line":118},[28,81122,81123],{"class":38},"    console.log(total)   \u002F\u002F14\n",[28,81125,81126],{"class":30,"line":124},[28,81127,81128],{"class":38},"    \u002F\u002F 2.有初始值\n",[28,81130,81131],{"class":30,"line":131},[28,81132,81133],{"class":38},"    const total1 = arr.reduce(function (prev, current) {\n",[28,81135,81136],{"class":30,"line":137},[28,81137,81114],{"class":38},[28,81139,81140],{"class":30,"line":143},[28,81141,81142],{"class":38},"    }, 10)\n",[28,81144,81145],{"class":30,"line":149},[28,81146,81147],{"class":38},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[28,81149,81150],{"class":30,"line":1890},[28,81151,2662],{"emptyLinePlaceholder":336},[28,81153,81154],{"class":30,"line":1904},[28,81155,81156],{"class":38},"    \u002F\u002F 3.箭头函数写法\n",[28,81158,81159],{"class":30,"line":1909},[28,81160,81161],{"class":38},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[28,81163,81164],{"class":30,"line":1915},[28,81165,81166],{"class":38},"    console.log(total2)   \u002F\u002F24\n",[28,81168,81169,81171,81173],{"class":30,"line":1936},[28,81170,52673],{"class":38},[28,81172,52069],{"class":51556},[28,81174,51563],{"class":38},[28,81176,81177,81179,81181],{"class":30,"line":1941},[28,81178,52041],{"class":38},[28,81180,52056],{"class":51556},[28,81182,51563],{"class":38},[14,81184,81185],{},"执行过程：",[363,81187,81188,81191,81194],{},[366,81189,81190],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[366,81192,81193],{},"每一次循环，把返回值给作为下一次循环的上一次值",[366,81195,81196],{},"如果有起始值，则起始值作为上一次值",[18,81198,81200],{"className":53323,"code":81199,"language":53325,"meta":23,"style":23},"\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",[25,81201,81202,81210,81218,81222,81226,81230,81234,81238,81242,81247,81252,81257,81262,81267,81271,81275,81279,81283,81287,81291,81296,81300,81305,81309,81314,81319,81323,81327,81331,81339],{"__ignoreMap":23},[28,81203,81204,81206,81208],{"class":30,"line":31},[28,81205,1307],{"class":38},[28,81207,52056],{"class":51556},[28,81209,51563],{"class":38},[28,81211,81212,81214,81216],{"class":30,"line":48},[28,81213,52400],{"class":38},[28,81215,52069],{"class":51556},[28,81217,51563],{"class":38},[28,81219,81220],{"class":30,"line":84},[28,81221,81099],{"class":38},[28,81223,81224],{"class":30,"line":91},[28,81225,81104],{"class":38},[28,81227,81228],{"class":30,"line":97},[28,81229,81109],{"class":38},[28,81231,81232],{"class":30,"line":103},[28,81233,81114],{"class":38},[28,81235,81236],{"class":30,"line":109},[28,81237,33717],{"class":38},[28,81239,81240],{"class":30,"line":118},[28,81241,81123],{"class":38},[28,81243,81244],{"class":30,"line":124},[28,81245,81246],{"class":38},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[28,81248,81249],{"class":30,"line":131},[28,81250,81251],{"class":38},"    \u002F\u002F     1              5                    6\n",[28,81253,81254],{"class":30,"line":137},[28,81255,81256],{"class":38},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[28,81258,81259],{"class":30,"line":143},[28,81260,81261],{"class":38},"    \u002F\u002F     6              8                    14\n",[28,81263,81264],{"class":30,"line":149},[28,81265,81266],{"class":38},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[28,81268,81269],{"class":30,"line":1890},[28,81270,81128],{"class":38},[28,81272,81273],{"class":30,"line":1904},[28,81274,81133],{"class":38},[28,81276,81277],{"class":30,"line":1909},[28,81278,81114],{"class":38},[28,81280,81281],{"class":30,"line":1915},[28,81282,81142],{"class":38},[28,81284,81285],{"class":30,"line":1936},[28,81286,81147],{"class":38},[28,81288,81289],{"class":30,"line":1941},[28,81290,81246],{"class":38},[28,81292,81293],{"class":30,"line":1955},[28,81294,81295],{"class":38},"    \u002F\u002F     10             1                     11\n",[28,81297,81298],{"class":30,"line":1960},[28,81299,81256],{"class":38},[28,81301,81302],{"class":30,"line":1989},[28,81303,81304],{"class":38},"    \u002F\u002F     11             5                    16\n",[28,81306,81307],{"class":30,"line":1994},[28,81308,81256],{"class":38},[28,81310,81311],{"class":30,"line":2011},[28,81312,81313],{"class":38},"    \u002F\u002F     16             8                    24\n",[28,81315,81316],{"class":30,"line":2016},[28,81317,81318],{"class":38},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[28,81320,81321],{"class":30,"line":2021},[28,81322,81156],{"class":38},[28,81324,81325],{"class":30,"line":2026},[28,81326,81161],{"class":38},[28,81328,81329],{"class":30,"line":2040},[28,81330,81166],{"class":38},[28,81332,81333,81335,81337],{"class":30,"line":2045},[28,81334,52673],{"class":38},[28,81336,52069],{"class":51556},[28,81338,51563],{"class":38},[28,81340,81341,81343,81345],{"class":30,"line":2839},[28,81342,52041],{"class":38},[28,81344,52056],{"class":51556},[28,81346,51563],{"class":38},[23172,81348,81350],{"id":81349},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81352,81353],{},[1727,81354],{"alt":23,"src":81355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[18,81357,81359],{"className":53323,"code":81358,"language":53325,"meta":23,"style":23},"\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",[25,81360,81361,81369,81377,81382,81387,81392,81397,81401,81406,81411,81416,81421,81426,81431,81435,81440,81444,81449,81457],{"__ignoreMap":23},[28,81362,81363,81365,81367],{"class":30,"line":31},[28,81364,1307],{"class":38},[28,81366,52056],{"class":51556},[28,81368,51563],{"class":38},[28,81370,81371,81373,81375],{"class":30,"line":48},[28,81372,52400],{"class":38},[28,81374,52069],{"class":51556},[28,81376,51563],{"class":38},[28,81378,81379],{"class":30,"line":84},[28,81380,81381],{"class":38},"    const arr = [\n",[28,81383,81384],{"class":30,"line":91},[28,81385,81386],{"class":38},"      { name: '张三', salary: 10000 },\n",[28,81388,81389],{"class":30,"line":97},[28,81390,81391],{"class":38},"      { name: '李四', salary: 10000 },\n",[28,81393,81394],{"class":30,"line":103},[28,81395,81396],{"class":38},"      { name: '王五', salary: 10000 }\n",[28,81398,81399],{"class":30,"line":109},[28,81400,53365],{"class":38},[28,81402,81403],{"class":30,"line":118},[28,81404,81405],{"class":38},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[28,81407,81408],{"class":30,"line":124},[28,81409,81410],{"class":38},"    \u002F\u002F prev是累计值\n",[28,81412,81413],{"class":30,"line":131},[28,81414,81415],{"class":38},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[28,81417,81418],{"class":30,"line":137},[28,81419,81420],{"class":38},"    console.log(total)\n",[28,81422,81423],{"class":30,"line":143},[28,81424,81425],{"class":38},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[28,81427,81428],{"class":30,"line":149},[28,81429,81430],{"class":38},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[28,81432,81433],{"class":30,"line":1890},[28,81434,81425],{"class":38},[28,81436,81437],{"class":30,"line":1904},[28,81438,81439],{"class":38},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[28,81441,81442],{"class":30,"line":1909},[28,81443,81425],{"class":38},[28,81445,81446],{"class":30,"line":1915},[28,81447,81448],{"class":38},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[28,81450,81451,81453,81455],{"class":30,"line":1936},[28,81452,52673],{"class":38},[28,81454,52069],{"class":51556},[28,81456,51563],{"class":38},[28,81458,81459,81461,81463],{"class":30,"line":1941},[28,81460,52041],{"class":38},[28,81462,52056],{"class":51556},[28,81464,51563],{"class":38},[23172,81466,81468],{"id":81467},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81470,81471],{},[1727,81472],{"alt":23,"src":81473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81475,81476],{},[1727,81477],{"alt":23,"src":81478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[363,81480,81481],{},[366,81482,81483],{},"find()",[14,81485,81486],{},"循环查找，找到第一个就ok",[14,81488,81489],{},[51,81490,81493],{"href":81491,"rel":81492},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24127],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[18,81495,81497],{"className":50889,"code":81496,"language":50891,"meta":23,"style":23},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[25,81498,81499,81504,81509],{"__ignoreMap":23},[28,81500,81501],{"class":30,"line":31},[28,81502,81503],{"class":38},"const array1 = [5, 12, 8, 130, 44]\n",[28,81505,81506],{"class":30,"line":48},[28,81507,81508],{"class":38},"const found = array1.find((element) => element > 10)\n",[28,81510,81511],{"class":30,"line":84},[28,81512,81513],{"class":38},"console.log(found)  \u002F\u002F12\n",[14,81515,81516,81518,81519,81524,81525,81528,81529,81531,81532,81537,81538,81540,81541,81543,81544,81546,81547],{},[25,81517,81483],{}," 方法是一个",[51,81520,81523],{"href":81521,"rel":81522},"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",[24127],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[25,81526,81527],{},"callbackFn"," 函数，直到 ",[25,81530,81527],{}," 返回一个",[51,81533,81536],{"href":81534,"rel":81535},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24127],"真值","。然后 ",[25,81539,81483],{}," 返回该元素并停止迭代数组。如果 ",[25,81542,81527],{}," 从未返回真值，则 ",[25,81545,81483],{}," 返回 ",[25,81548,81549],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[18,81551,81553],{"className":53323,"code":81552,"language":53325,"meta":23,"style":23},"\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",[25,81554,81555,81563,81571,81576,81581,81586,81590,81595,81600,81604,81609,81614,81618,81622,81627,81632,81636,81640,81645,81650,81655,81660,81665,81669,81674,81679,81684,81689,81693,81698,81706],{"__ignoreMap":23},[28,81556,81557,81559,81561],{"class":30,"line":31},[28,81558,1307],{"class":38},[28,81560,52056],{"class":51556},[28,81562,51563],{"class":38},[28,81564,81565,81567,81569],{"class":30,"line":48},[28,81566,52400],{"class":38},[28,81568,52069],{"class":51556},[28,81570,51563],{"class":38},[28,81572,81573],{"class":30,"line":84},[28,81574,81575],{"class":38},"    const arr = ['red', 'blue', 'green']\n",[28,81577,81578],{"class":30,"line":91},[28,81579,81580],{"class":38},"    const found = arr.find(item => item === 'pink')\n",[28,81582,81583],{"class":30,"line":97},[28,81584,81585],{"class":38},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[28,81587,81588],{"class":30,"line":103},[28,81589,2662],{"emptyLinePlaceholder":336},[28,81591,81592],{"class":30,"line":109},[28,81593,81594],{"class":38},"    \u002F\u002F 使用场景，用于查找数据\n",[28,81596,81597],{"class":30,"line":118},[28,81598,81599],{"class":38},"    const arr1 = [\n",[28,81601,81602],{"class":30,"line":124},[28,81603,79642],{"class":38},[28,81605,81606],{"class":30,"line":131},[28,81607,81608],{"class":38},"        name: '小米',\n",[28,81610,81611],{"class":30,"line":137},[28,81612,81613],{"class":38},"        price: 1999\n",[28,81615,81616],{"class":30,"line":143},[28,81617,78148],{"class":38},[28,81619,81620],{"class":30,"line":149},[28,81621,79642],{"class":38},[28,81623,81624],{"class":30,"line":1890},[28,81625,81626],{"class":38},"        name: '华为',\n",[28,81628,81629],{"class":30,"line":1904},[28,81630,81631],{"class":38},"        price: 3999\n",[28,81633,81634],{"class":30,"line":1909},[28,81635,52654],{"class":38},[28,81637,81638],{"class":30,"line":1915},[28,81639,53365],{"class":38},[28,81641,81642],{"class":30,"line":1936},[28,81643,81644],{"class":38},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[28,81646,81647],{"class":30,"line":1941},[28,81648,81649],{"class":38},"    \u002F\u002F const found1 = arr1.find(item => {\n",[28,81651,81652],{"class":30,"line":1955},[28,81653,81654],{"class":38},"    \u002F\u002F   if (item.name === '小米') {\n",[28,81656,81657],{"class":30,"line":1960},[28,81658,81659],{"class":38},"    \u002F\u002F     return item\n",[28,81661,81662],{"class":30,"line":1989},[28,81663,81664],{"class":38},"    \u002F\u002F   }\n",[28,81666,81667],{"class":30,"line":1994},[28,81668,63546],{"class":38},[28,81670,81671],{"class":30,"line":2011},[28,81672,81673],{"class":38},"    \u002F\u002F 另一种写法\n",[28,81675,81676],{"class":30,"line":2016},[28,81677,81678],{"class":38},"    const found1 = arr1.find(item => {\n",[28,81680,81681],{"class":30,"line":2021},[28,81682,81683],{"class":38},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[28,81685,81686],{"class":30,"line":2026},[28,81687,81688],{"class":38},"      return item.name = '小米'\n",[28,81690,81691],{"class":30,"line":2040},[28,81692,33717],{"class":38},[28,81694,81695],{"class":30,"line":2045},[28,81696,81697],{"class":38},"    console.log(found1)\n",[28,81699,81700,81702,81704],{"class":30,"line":2839},[28,81701,52673],{"class":38},[28,81703,52069],{"class":51556},[28,81705,51563],{"class":38},[28,81707,81708,81710,81712],{"class":30,"line":2853},[28,81709,52041],{"class":38},[28,81711,52056],{"class":51556},[28,81713,51563],{"class":38},[14,81715,81716],{},[1727,81717],{"alt":23,"src":81718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81720,81721],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[363,81723,81724],{"start":48},[366,81725,81726],{},"every()返回的是布尔值",[14,81728,81729],{},[51,81730,81733],{"href":81731,"rel":81732},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24127],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81735,81736],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81738,81739],{},"some是只有有一个就没问题",[14,81741,81742],{},"every是必须全是才行",[18,81744,81748],{"className":81745,"code":81746,"language":81747,"meta":23,"style":23},"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",[25,81749,81750,81766,81780,81784,81793],{"__ignoreMap":23},[28,81751,81752,81754,81757,81759,81761,81764],{"class":30,"line":31},[28,81753,54705],{"class":34},[28,81755,81756],{"class":38}," isBigEnough(element, ",[28,81758,74314],{"class":34},[28,81760,12697],{"class":38},[28,81762,81763],{"class":34},"array",[28,81765,12704],{"class":38},[28,81767,81768,81771,81774,81776,81778],{"class":30,"line":48},[28,81769,81770],{"class":34},"  return",[28,81772,81773],{"class":38}," element ",[28,81775,1972],{"class":34},[28,81777,2300],{"class":60},[28,81779,1558],{"class":38},[28,81781,81782],{"class":30,"line":84},[28,81783,1830],{"class":38},[28,81785,81786,81789,81791],{"class":30,"line":91},[28,81787,81788],{"class":38},"[12, 5, 8, 130, 44].every(isBigEnough); ",[28,81790,33585],{"class":34},[28,81792,54772],{"class":38},[28,81794,81795,81798,81800],{"class":30,"line":97},[28,81796,81797],{"class":38},"[12, 54, 18, 130, 44].every(isBigEnough); ",[28,81799,33585],{"class":34},[28,81801,58196],{"class":38},[18,81803,81805],{"className":53323,"code":81804,"language":53325,"meta":23,"style":23},"\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",[25,81806,81807,81815,81823,81828,81832,81837,81842,81850],{"__ignoreMap":23},[28,81808,81809,81811,81813],{"class":30,"line":31},[28,81810,1307],{"class":38},[28,81812,52056],{"class":51556},[28,81814,51563],{"class":38},[28,81816,81817,81819,81821],{"class":30,"line":48},[28,81818,52400],{"class":38},[28,81820,52069],{"class":51556},[28,81822,51563],{"class":38},[28,81824,81825],{"class":30,"line":84},[28,81826,81827],{"class":38},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[28,81829,81830],{"class":30,"line":91},[28,81831,78578],{"class":38},[28,81833,81834],{"class":30,"line":97},[28,81835,81836],{"class":38},"    const flag = arr.every(item => item >= 10)\n",[28,81838,81839],{"class":30,"line":103},[28,81840,81841],{"class":38},"    console.log(flag)    \u002F\u002Ftrue\n",[28,81843,81844,81846,81848],{"class":30,"line":109},[28,81845,52673],{"class":38},[28,81847,52069],{"class":51556},[28,81849,51563],{"class":38},[28,81851,81852,81854,81856],{"class":30,"line":118},[28,81853,52041],{"class":38},[28,81855,52056],{"class":51556},[28,81857,51563],{"class":38},[18,81859,81861],{"className":53323,"code":81860,"language":53325,"meta":23,"style":23},"\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",[25,81862,81863,81871,81879,81883,81888,81893,81898,81906],{"__ignoreMap":23},[28,81864,81865,81867,81869],{"class":30,"line":31},[28,81866,1307],{"class":38},[28,81868,52056],{"class":51556},[28,81870,51563],{"class":38},[28,81872,81873,81875,81877],{"class":30,"line":48},[28,81874,52400],{"class":38},[28,81876,52069],{"class":51556},[28,81878,51563],{"class":38},[28,81880,81881],{"class":30,"line":84},[28,81882,81827],{"class":38},[28,81884,81885],{"class":30,"line":91},[28,81886,81887],{"class":38},"    const arr = [10, 0, 5]\n",[28,81889,81890],{"class":30,"line":97},[28,81891,81892],{"class":38},"    const flag = arr.some(item => item >= 10)\n",[28,81894,81895],{"class":30,"line":103},[28,81896,81897],{"class":38},"    console.log(flag)   \u002F\u002Ftrue\n",[28,81899,81900,81902,81904],{"class":30,"line":109},[28,81901,52673],{"class":38},[28,81903,52069],{"class":51556},[28,81905,51563],{"class":38},[28,81907,81908,81910,81912],{"class":30,"line":118},[28,81909,52041],{"class":38},[28,81911,52056],{"class":51556},[28,81913,51563],{"class":38},[23172,81915,81917],{"id":81916},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81919,81920],{},[1727,81921],{"alt":23,"src":81922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[18,81924,81926],{"className":50889,"code":81925,"language":50891,"meta":23,"style":23},"\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",[25,81927,81928,81938,81952,81956,81964,81978,81998,82010,82018,82025,82037,82049,82061,82073,82083,82093,82097,82105,82113,82117,82125,82137,82145,82167,82172,82177,82210,82218,82226,82230],{"__ignoreMap":23},[28,81929,81930,81932,81934,81936],{"class":30,"line":31},[28,81931,51553],{"class":38},[28,81933,51557],{"class":51556},[28,81935,51560],{"class":2225},[28,81937,51563],{"class":38},[28,81939,81940,81942,81944,81946,81948,81950],{"class":30,"line":48},[28,81941,1307],{"class":38},[28,81943,50891],{"class":51556},[28,81945,51572],{"class":2225},[28,81947,54],{"class":38},[28,81949,51577],{"class":127},[28,81951,51563],{"class":38},[28,81953,81954],{"class":30,"line":84},[28,81955,2662],{"emptyLinePlaceholder":336},[28,81957,81958,81960,81962],{"class":30,"line":91},[28,81959,1307],{"class":38},[28,81961,51590],{"class":51556},[28,81963,51563],{"class":38},[28,81965,81966,81968,81970,81972,81974,81976],{"class":30,"line":97},[28,81967,52400],{"class":38},[28,81969,51600],{"class":51556},[28,81971,51603],{"class":2225},[28,81973,54],{"class":38},[28,81975,51608],{"class":127},[28,81977,51563],{"class":38},[28,81979,81980,81982,81984,81986,81988,81990,81992,81994,81996],{"class":30,"line":103},[28,81981,52400],{"class":38},[28,81983,51600],{"class":51556},[28,81985,15182],{"class":2225},[28,81987,54],{"class":38},[28,81989,51647],{"class":127},[28,81991,51627],{"class":2225},[28,81993,54],{"class":38},[28,81995,51654],{"class":127},[28,81997,51563],{"class":38},[28,81999,82000,82002,82004,82006,82008],{"class":30,"line":109},[28,82001,52400],{"class":38},[28,82003,51663],{"class":51556},[28,82005,51666],{"class":38},[28,82007,51663],{"class":51556},[28,82009,51563],{"class":38},[28,82011,82012,82014,82016],{"class":30,"line":118},[28,82013,52400],{"class":38},[28,82015,328],{"class":51556},[28,82017,51563],{"class":38},[28,82019,82020,82023],{"class":30,"line":124},[28,82021,82022],{"class":51556},"    div",[28,82024,15834],{"class":38},[28,82026,82027,82029,82031,82033,82035],{"class":30,"line":131},[28,82028,55027],{"class":60},[28,82030,51693],{"class":38},[28,82032,1984],{"class":60},[28,82034,51748],{"class":34},[28,82036,1558],{"class":38},[28,82038,82039,82041,82043,82045,82047],{"class":30,"line":137},[28,82040,55041],{"class":60},[28,82042,51693],{"class":38},[28,82044,800],{"class":60},[28,82046,51748],{"class":34},[28,82048,1558],{"class":38},[28,82050,82051,82053,82055,82057,82059],{"class":30,"line":143},[28,82052,57615],{"class":60},[28,82054,51693],{"class":38},[28,82056,800],{"class":60},[28,82058,51748],{"class":34},[28,82060,1558],{"class":38},[28,82062,82063,82065,82067,82069,82071],{"class":30,"line":149},[28,82064,65389],{"class":60},[28,82066,51693],{"class":38},[28,82068,897],{"class":60},[28,82070,51748],{"class":34},[28,82072,1558],{"class":38},[28,82074,82075,82077,82079,82081],{"class":30,"line":1890},[28,82076,57542],{"class":60},[28,82078,51693],{"class":38},[28,82080,51848],{"class":60},[28,82082,1558],{"class":38},[28,82084,82085,82087,82089,82091],{"class":30,"line":1904},[28,82086,55140],{"class":60},[28,82088,51693],{"class":38},[28,82090,51901],{"class":60},[28,82092,1558],{"class":38},[28,82094,82095],{"class":30,"line":1909},[28,82096,2449],{"class":38},[28,82098,82099,82101,82103],{"class":30,"line":1915},[28,82100,52673],{"class":38},[28,82102,328],{"class":51556},[28,82104,51563],{"class":38},[28,82106,82107,82109,82111],{"class":30,"line":1936},[28,82108,52041],{"class":38},[28,82110,51590],{"class":51556},[28,82112,51563],{"class":38},[28,82114,82115],{"class":30,"line":1941},[28,82116,2662],{"emptyLinePlaceholder":336},[28,82118,82119,82121,82123],{"class":30,"line":1955},[28,82120,1307],{"class":38},[28,82122,52056],{"class":51556},[28,82124,51563],{"class":38},[28,82126,82127,82129,82131,82133,82135],{"class":30,"line":1960},[28,82128,52400],{"class":38},[28,82130,51867],{"class":51556},[28,82132,55570],{"class":38},[28,82134,51867],{"class":51556},[28,82136,51563],{"class":38},[28,82138,82139,82141,82143],{"class":30,"line":1989},[28,82140,52400],{"class":38},[28,82142,52069],{"class":51556},[28,82144,51563],{"class":38},[28,82146,82147,82149,82152,82154,82157,82160,82162,82165],{"class":30,"line":1994},[28,82148,11483],{"class":34},[28,82150,82151],{"class":60}," spec",[28,82153,13826],{"class":34},[28,82155,82156],{"class":38}," { size: ",[28,82158,82159],{"class":127},"'40cm*40cm'",[28,82161,55720],{"class":38},[28,82163,82164],{"class":127},"'黑色'",[28,82166,55860],{"class":38},[28,82168,82169],{"class":30,"line":2011},[28,82170,82171],{"class":87},"    \u002F\u002F const arr = Object.values(spec)\n",[28,82173,82174],{"class":30,"line":2016},[28,82175,82176],{"class":87},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[28,82178,82179,82181,82183,82185,82188,82190,82192,82195,82198,82201,82203,82205,82208],{"class":30,"line":2021},[28,82180,52663],{"class":38},[28,82182,54655],{"class":2225},[28,82184,413],{"class":38},[28,82186,82187],{"class":127},"'div'",[28,82189,74505],{"class":38},[28,82191,54],{"class":34},[28,82193,82194],{"class":38}," Object.",[28,82196,82197],{"class":2225},"values",[28,82199,82200],{"class":38},"(spec).",[28,82202,74479],{"class":2225},[28,82204,413],{"class":38},[28,82206,82207],{"class":127},"'\u002F'",[28,82209,81],{"class":38},[28,82211,82212,82214,82216],{"class":30,"line":2026},[28,82213,52673],{"class":38},[28,82215,52069],{"class":51556},[28,82217,51563],{"class":38},[28,82219,82220,82222,82224],{"class":30,"line":2040},[28,82221,52041],{"class":38},[28,82223,52056],{"class":51556},[28,82225,51563],{"class":38},[28,82227,82228],{"class":30,"line":2045},[28,82229,2662],{"emptyLinePlaceholder":336},[28,82231,82232,82234,82236],{"class":30,"line":2839},[28,82233,52041],{"class":38},[28,82235,50891],{"class":51556},[28,82237,51563],{"class":38},[14,82239,82240],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23172,82242,82244],{"id":82243},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82246,82247],{},"静态方法，将伪数组转换为真数组",[14,82249,82250],{},[1727,82251],{"alt":23,"src":82252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[18,82254,82256],{"className":53323,"code":82255,"language":53325,"meta":23,"style":23},"\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",[25,82257,82258,82266,82274,82286,82298,82310,82318,82326,82331,82336,82341,82346,82354],{"__ignoreMap":23},[28,82259,82260,82262,82264],{"class":30,"line":31},[28,82261,1307],{"class":38},[28,82263,52056],{"class":51556},[28,82265,51563],{"class":38},[28,82267,82268,82270,82272],{"class":30,"line":48},[28,82269,52400],{"class":38},[28,82271,1404],{"class":51556},[28,82273,51563],{"class":38},[28,82275,82276,82278,82280,82282,82284],{"class":30,"line":84},[28,82277,51597],{"class":38},[28,82279,366],{"class":51556},[28,82281,55570],{"class":38},[28,82283,366],{"class":51556},[28,82285,51563],{"class":38},[28,82287,82288,82290,82292,82294,82296],{"class":30,"line":91},[28,82289,51597],{"class":38},[28,82291,366],{"class":51556},[28,82293,55570],{"class":38},[28,82295,366],{"class":51556},[28,82297,51563],{"class":38},[28,82299,82300,82302,82304,82306,82308],{"class":30,"line":97},[28,82301,51597],{"class":38},[28,82303,366],{"class":51556},[28,82305,55570],{"class":38},[28,82307,366],{"class":51556},[28,82309,51563],{"class":38},[28,82311,82312,82314,82316],{"class":30,"line":103},[28,82313,52673],{"class":38},[28,82315,1404],{"class":51556},[28,82317,51563],{"class":38},[28,82319,82320,82322,82324],{"class":30,"line":109},[28,82321,52400],{"class":38},[28,82323,52069],{"class":51556},[28,82325,51563],{"class":38},[28,82327,82328],{"class":30,"line":118},[28,82329,82330],{"class":38},"    const lis = document.querySelectorAll('li')\n",[28,82332,82333],{"class":30,"line":124},[28,82334,82335],{"class":38},"    const liss = Array.from(lis)\n",[28,82337,82338],{"class":30,"line":131},[28,82339,82340],{"class":38},"    liss.pop()\n",[28,82342,82343],{"class":30,"line":137},[28,82344,82345],{"class":38},"    console.log(liss)\n",[28,82347,82348,82350,82352],{"class":30,"line":143},[28,82349,52673],{"class":38},[28,82351,52069],{"class":51556},[28,82353,51563],{"class":38},[28,82355,82356,82358,82360],{"class":30,"line":149},[28,82357,52041],{"class":38},[28,82359,52056],{"class":51556},[28,82361,51563],{"class":38},[14,82363,82364],{},[1727,82365],{"alt":23,"src":82366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22260,82368,82370],{"id":82369},"_41053-string","4.10.5.3 String",[14,82372,82373],{},[1727,82374],{"alt":23,"src":82375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23172,82377,82379],{"id":82378},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[18,82381,82383],{"className":53323,"code":82382,"language":53325,"meta":23,"style":23},"\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",[25,82384,82385,82393,82401,82406,82411,82416,82420,82425,82430,82435,82443],{"__ignoreMap":23},[28,82386,82387,82389,82391],{"class":30,"line":31},[28,82388,1307],{"class":38},[28,82390,52056],{"class":51556},[28,82392,51563],{"class":38},[28,82394,82395,82397,82399],{"class":30,"line":48},[28,82396,52400],{"class":38},[28,82398,52069],{"class":51556},[28,82400,51563],{"class":38},[28,82402,82403],{"class":30,"line":84},[28,82404,82405],{"class":38},"    \u002F\u002F 把字符串转化为数组\n",[28,82407,82408],{"class":30,"line":91},[28,82409,82410],{"class":38},"    const str = 'pink,red'\n",[28,82412,82413],{"class":30,"line":97},[28,82414,82415],{"class":38},"    const arr = str.split(',')\n",[28,82417,82418],{"class":30,"line":103},[28,82419,80894],{"class":38},[28,82421,82422],{"class":30,"line":109},[28,82423,82424],{"class":38},"    const str1 = '2025-8-25'\n",[28,82426,82427],{"class":30,"line":118},[28,82428,82429],{"class":38},"    const arr1 = str1.split('-')\n",[28,82431,82432],{"class":30,"line":124},[28,82433,82434],{"class":38},"    console.log(arr1)\n",[28,82436,82437,82439,82441],{"class":30,"line":131},[28,82438,52673],{"class":38},[28,82440,52069],{"class":51556},[28,82442,51563],{"class":38},[28,82444,82445,82447,82449],{"class":30,"line":137},[28,82446,52041],{"class":38},[28,82448,52056],{"class":51556},[28,82450,51563],{"class":38},[23172,82452,82454],{"id":82453},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82456,5443],{},[14,82458,82459],{},"substring(indexStart)",[14,82461,82462],{},"substring(indexStart, indexEnd)",[1404,82464,82465,82476,82488,82498],{},[366,82466,82467,82468,82471,82472,82475],{},"如果省略了 ",[25,82469,82470],{},"indexEnd","，则 ",[25,82473,82474],{},"substring()"," 提取字符直到字符串的末尾",[366,82477,82478,82479,82482,82483,82471,82485,82487],{},"如果 ",[25,82480,82481],{},"indexStart"," 等于 ",[25,82484,82470],{},[25,82486,82474],{}," 返回一个空字符串",[366,82489,82478,82490,82492,82493,82471,82495,82497],{},[25,82491,82481],{}," 大于 ",[25,82494,82470],{},[25,82496,82474],{}," 的效果就像交换了这两个参数一样",[366,82499,82500],{},"结束的索引号不包含想要截取的部分",[18,82502,82504],{"className":81745,"code":82503,"language":81747,"meta":23,"style":23},"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",[25,82505,82506,82518,82522,82556,82586,82590,82621,82625,82652,82682,82712,82716,82747],{"__ignoreMap":23},[28,82507,82508,82511,82513,82516],{"class":30,"line":31},[28,82509,82510],{"class":38},"const anyString ",[28,82512,54],{"class":34},[28,82514,82515],{"class":127}," \"Mozilla\"",[28,82517,1558],{"class":38},[28,82519,82520],{"class":30,"line":48},[28,82521,2662],{"emptyLinePlaceholder":336},[28,82523,82524,82527,82529,82531,82533,82536,82538,82541,82543,82545,82547,82549,82551,82553],{"class":30,"line":84},[28,82525,82526],{"class":60},"console",[28,82528,956],{"class":38},[28,82530,58503],{"class":60},[28,82532,413],{"class":38},[28,82534,82535],{"class":60},"anyString",[28,82537,956],{"class":38},[28,82539,82540],{"class":60},"substring",[28,82542,413],{"class":38},[28,82544,244],{"class":60},[28,82546,12697],{"class":38},[28,82548,61],{"class":60},[28,82550,75509],{"class":38},[28,82552,33585],{"class":34},[28,82554,82555],{"class":127}," 'M'\n",[28,82557,82558,82560,82562,82564,82566,82568,82570,82572,82574,82576,82578,82580,82582,82584],{"class":30,"line":91},[28,82559,82526],{"class":60},[28,82561,956],{"class":38},[28,82563,58503],{"class":60},[28,82565,413],{"class":38},[28,82567,82535],{"class":60},[28,82569,956],{"class":38},[28,82571,82540],{"class":60},[28,82573,413],{"class":38},[28,82575,61],{"class":60},[28,82577,12697],{"class":38},[28,82579,244],{"class":60},[28,82581,75509],{"class":38},[28,82583,33585],{"class":34},[28,82585,82555],{"class":127},[28,82587,82588],{"class":30,"line":97},[28,82589,2662],{"emptyLinePlaceholder":336},[28,82591,82592,82594,82596,82598,82600,82602,82604,82606,82608,82610,82612,82614,82616,82618],{"class":30,"line":103},[28,82593,82526],{"class":60},[28,82595,956],{"class":38},[28,82597,58503],{"class":60},[28,82599,413],{"class":38},[28,82601,82535],{"class":60},[28,82603,956],{"class":38},[28,82605,82540],{"class":60},[28,82607,413],{"class":38},[28,82609,244],{"class":60},[28,82611,12697],{"class":38},[28,82613,206],{"class":60},[28,82615,75509],{"class":38},[28,82617,33585],{"class":34},[28,82619,82620],{"class":127}," 'Mozill'\n",[28,82622,82623],{"class":30,"line":109},[28,82624,2662],{"emptyLinePlaceholder":336},[28,82626,82627,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647,82649],{"class":30,"line":118},[28,82628,82526],{"class":60},[28,82630,956],{"class":38},[28,82632,58503],{"class":60},[28,82634,413],{"class":38},[28,82636,82535],{"class":60},[28,82638,956],{"class":38},[28,82640,82540],{"class":60},[28,82642,413],{"class":38},[28,82644,73],{"class":60},[28,82646,75509],{"class":38},[28,82648,33585],{"class":34},[28,82650,82651],{"class":127}," 'lla'\n",[28,82653,82654,82656,82658,82660,82662,82664,82666,82668,82670,82672,82674,82676,82678,82680],{"class":30,"line":124},[28,82655,82526],{"class":60},[28,82657,956],{"class":38},[28,82659,58503],{"class":60},[28,82661,413],{"class":38},[28,82663,82535],{"class":60},[28,82665,956],{"class":38},[28,82667,82540],{"class":60},[28,82669,413],{"class":38},[28,82671,73],{"class":60},[28,82673,12697],{"class":38},[28,82675,769],{"class":60},[28,82677,75565],{"class":38},[28,82679,33585],{"class":34},[28,82681,82651],{"class":127},[28,82683,82684,82686,82688,82690,82692,82694,82696,82698,82700,82702,82704,82706,82708,82710],{"class":30,"line":131},[28,82685,82526],{"class":60},[28,82687,956],{"class":38},[28,82689,58503],{"class":60},[28,82691,413],{"class":38},[28,82693,82535],{"class":60},[28,82695,956],{"class":38},[28,82697,82540],{"class":60},[28,82699,413],{"class":38},[28,82701,769],{"class":60},[28,82703,12697],{"class":38},[28,82705,73],{"class":60},[28,82707,75509],{"class":38},[28,82709,33585],{"class":34},[28,82711,82651],{"class":127},[28,82713,82714],{"class":30,"line":137},[28,82715,2662],{"emptyLinePlaceholder":336},[28,82717,82718,82720,82722,82724,82726,82728,82730,82732,82734,82736,82738,82740,82742,82744],{"class":30,"line":143},[28,82719,82526],{"class":60},[28,82721,956],{"class":38},[28,82723,58503],{"class":60},[28,82725,413],{"class":38},[28,82727,82535],{"class":60},[28,82729,956],{"class":38},[28,82731,82540],{"class":60},[28,82733,413],{"class":38},[28,82735,244],{"class":60},[28,82737,12697],{"class":38},[28,82739,769],{"class":60},[28,82741,75509],{"class":38},[28,82743,33585],{"class":34},[28,82745,82746],{"class":127}," 'Mozilla'\n",[28,82748,82749,82751,82753,82755,82757,82759,82761,82763,82765,82767,82769,82771,82773,82775],{"class":30,"line":149},[28,82750,82526],{"class":60},[28,82752,956],{"class":38},[28,82754,58503],{"class":60},[28,82756,413],{"class":38},[28,82758,82535],{"class":60},[28,82760,956],{"class":38},[28,82762,82540],{"class":60},[28,82764,413],{"class":38},[28,82766,244],{"class":60},[28,82768,12697],{"class":38},[28,82770,845],{"class":60},[28,82772,75509],{"class":38},[28,82774,33585],{"class":34},[28,82776,82746],{"class":127},[23172,82778,82780],{"id":82779},"_410533-startswith","4.10.5.3.3 startsWith",[14,82782,82783,82786,82787,82792,82793,82795,82796],{},[25,82784,82785],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[555,82788,82789],{},[25,82790,82791],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[25,82794,1627],{}," 或 ",[25,82797,66276],{},[18,82799,82801],{"className":77751,"code":82800,"language":77753,"meta":23,"style":23},"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",[25,82802,82803,82815,82834,82839,82859],{"__ignoreMap":23},[28,82804,82805,82807,82810,82812],{"class":30,"line":31},[28,82806,7054],{"class":34},[28,82808,82809],{"class":38}," str1 ",[28,82811,54],{"class":34},[28,82813,82814],{"class":127}," \"Saturday night plans\"\n",[28,82816,82817,82819,82821,82824,82827,82829,82832],{"class":30,"line":48},[28,82818,77788],{"class":38},[28,82820,58503],{"class":2225},[28,82822,82823],{"class":38},"(str1.",[28,82825,82826],{"class":2225},"startsWith",[28,82828,413],{"class":38},[28,82830,82831],{"class":127},"\"Sat\"",[28,82833,30757],{"class":38},[28,82835,82836],{"class":30,"line":84},[28,82837,82838],{"class":87},"\u002F\u002F Expected output: true\n",[28,82840,82841,82843,82845,82847,82849,82851,82853,82855,82857],{"class":30,"line":91},[28,82842,77788],{"class":38},[28,82844,58503],{"class":2225},[28,82846,82823],{"class":38},[28,82848,82826],{"class":2225},[28,82850,413],{"class":38},[28,82852,82831],{"class":127},[28,82854,12697],{"class":38},[28,82856,78],{"class":60},[28,82858,30757],{"class":38},[28,82860,82861],{"class":30,"line":97},[28,82862,82863],{"class":87},"\u002F\u002F Expected output: false\n",[18,82865,82867],{"className":50889,"code":82866,"language":50891,"meta":23,"style":23},"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",[25,82868,82869,82874,82879,82883,82888,82893],{"__ignoreMap":23},[28,82870,82871],{"class":30,"line":31},[28,82872,82873],{"class":38},"startsWith(searchString)\n",[28,82875,82876],{"class":30,"line":48},[28,82877,82878],{"class":38},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[28,82880,82881],{"class":30,"line":84},[28,82882,2662],{"emptyLinePlaceholder":336},[28,82884,82885],{"class":30,"line":91},[28,82886,82887],{"class":38},"const str3 = 'pink老师上课中'\n",[28,82889,82890],{"class":30,"line":97},[28,82891,82892],{"class":38},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[28,82894,82895],{"class":30,"line":103},[28,82896,82897],{"class":38},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23172,82899,82901],{"id":82900},"_410534-includes","4.10.5.3.4 includes",[14,82903,82904],{},"includes(searchString) includes(searchString, position)",[363,82906,82907],{},[366,82908,82909],{},"searchString:",[14,82911,82912,82913,82915,82916,82921,82922,82927,82928,21762,82931,82934,82935,82938],{},"一个要在 ",[25,82914,1567],{}," 中查找的字符串。",[51,82917,82920],{"href":82918,"rel":82919},"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",[24127],"不能是正则表达式","。所有非正则表达式的值都会被",[51,82923,82926],{"href":82924,"rel":82925},"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",[24127],"强制转换为字符串","，因此如果该参数被省略或传入 ",[25,82929,82930],{},"undefined",[25,82932,82933],{},"includes()"," 方法会在字符串中搜索 ",[25,82936,82937],{},"\"undefined\"","，这通常不是你想要的",[363,82940,82941],{"start":48},[366,82942,82943,1256],{},[25,82944,82945],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82947,82948,82949,82952,82953],{},"在字符串中开始搜索 ",[25,82950,82951],{},"searchString"," 的位置。默认值为 ",[25,82954,244],{},[363,82956,82957],{"start":84},[366,82958,82959],{},"返回值：",[14,82961,82962,82963,82965,82966,82970,82971],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[25,82964,82951],{}," 为空字符串的情况），则返回 ",[555,82967,82968],{},[25,82969,1627],{}," ，否则返回 ",[555,82972,82973],{},[25,82974,66276],{},[363,82976,82977],{"start":91},[366,82978,82979],{},"异常：",[14,82981,82478,82982,14057,82984,82988],{},[25,82983,82951],{},[51,82985,82987],{"href":82918,"rel":82986},[24127],"是一个正则表达式","，则会抛出",[14,82990,82991],{},"只要是有就是true，不需要非得以谁开头结尾",[18,82993,82995],{"className":77751,"code":82994,"language":77753,"meta":23,"style":23},"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",[25,82996,82997,83008,83031,83050,83070,83092,83111],{"__ignoreMap":23},[28,82998,82999,83001,83003,83005],{"class":30,"line":31},[28,83000,7054],{"class":34},[28,83002,80031],{"class":38},[28,83004,54],{"class":34},[28,83006,83007],{"class":127}," \"To be, or not to be, that is the question.\"\n",[28,83009,83010,83012,83014,83017,83020,83022,83025,83028],{"class":30,"line":48},[28,83011,77788],{"class":38},[28,83013,58503],{"class":2225},[28,83015,83016],{"class":38},"(str.",[28,83018,83019],{"class":2225},"includes",[28,83021,413],{"class":38},[28,83023,83024],{"class":127},"\"To be\"",[28,83026,83027],{"class":38},"))",[28,83029,83030],{"class":87},"  \u002F\u002F true\n",[28,83032,83033,83035,83037,83039,83041,83043,83046,83048],{"class":30,"line":84},[28,83034,77788],{"class":38},[28,83036,58503],{"class":2225},[28,83038,83016],{"class":38},[28,83040,83019],{"class":2225},[28,83042,413],{"class":38},[28,83044,83045],{"class":127},"\"question\"",[28,83047,83027],{"class":38},[28,83049,83030],{"class":87},[28,83051,83052,83054,83056,83058,83060,83062,83065,83067],{"class":30,"line":91},[28,83053,77788],{"class":38},[28,83055,58503],{"class":2225},[28,83057,83016],{"class":38},[28,83059,83019],{"class":2225},[28,83061,413],{"class":38},[28,83063,83064],{"class":127},"\"nonexistent\"",[28,83066,83027],{"class":38},[28,83068,83069],{"class":87},"  \u002F\u002F false\n",[28,83071,83072,83074,83076,83078,83080,83082,83084,83086,83088,83090],{"class":30,"line":97},[28,83073,77788],{"class":38},[28,83075,58503],{"class":2225},[28,83077,83016],{"class":38},[28,83079,83019],{"class":2225},[28,83081,413],{"class":38},[28,83083,83024],{"class":127},[28,83085,12697],{"class":38},[28,83087,61],{"class":60},[28,83089,83027],{"class":38},[28,83091,83069],{"class":87},[28,83093,83094,83096,83098,83100,83102,83104,83107,83109],{"class":30,"line":103},[28,83095,77788],{"class":38},[28,83097,58503],{"class":2225},[28,83099,83016],{"class":38},[28,83101,83019],{"class":2225},[28,83103,413],{"class":38},[28,83105,83106],{"class":127},"\"TO BE\"",[28,83108,83027],{"class":38},[28,83110,83069],{"class":87},[28,83112,83113,83115,83117,83119,83121,83123,83125,83127],{"class":30,"line":109},[28,83114,77788],{"class":38},[28,83116,58503],{"class":2225},[28,83118,83016],{"class":38},[28,83120,83019],{"class":2225},[28,83122,413],{"class":38},[28,83124,7914],{"class":127},[28,83126,83027],{"class":38},[28,83128,83030],{"class":87},[23172,83130,83132],{"id":83131},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[18,83134,83136],{"className":53323,"code":83135,"language":53325,"meta":23,"style":23},"\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",[25,83137,83138,83146,83154,83159,83164,83169,83174,83179,83187],{"__ignoreMap":23},[28,83139,83140,83142,83144],{"class":30,"line":31},[28,83141,1307],{"class":38},[28,83143,52056],{"class":51556},[28,83145,51563],{"class":38},[28,83147,83148,83150,83152],{"class":30,"line":48},[28,83149,52400],{"class":38},[28,83151,52069],{"class":51556},[28,83153,51563],{"class":38},[28,83155,83156],{"class":30,"line":84},[28,83157,83158],{"class":38},"    const num = 10\n",[28,83160,83161],{"class":30,"line":91},[28,83162,83163],{"class":38},"    \u002F\u002F 强制转换\n",[28,83165,83166],{"class":30,"line":97},[28,83167,83168],{"class":38},"    console.log(String(num))\n",[28,83170,83171],{"class":30,"line":103},[28,83172,83173],{"class":38},"    \u002F\u002F toString()方法转换\n",[28,83175,83176],{"class":30,"line":109},[28,83177,83178],{"class":38},"    console.log(num.toString())\n",[28,83180,83181,83183,83185],{"class":30,"line":118},[28,83182,52673],{"class":38},[28,83184,52069],{"class":51556},[28,83186,51563],{"class":38},[28,83188,83189,83191,83193],{"class":30,"line":124},[28,83190,52041],{"class":38},[28,83192,52056],{"class":51556},[28,83194,51563],{"class":38},[23172,83196,83198],{"id":83197},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83200,83201],{},[1727,83202],{"alt":23,"src":83203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[18,83205,83207],{"className":50889,"code":83206,"language":50891,"meta":23,"style":23},"\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",[25,83208,83209,83219,83233,83237,83245,83259,83279,83291,83299,83303,83311,83323,83331,83343,83348,83353,83358,83405,83421,83429,83437,83441],{"__ignoreMap":23},[28,83210,83211,83213,83215,83217],{"class":30,"line":31},[28,83212,51553],{"class":38},[28,83214,51557],{"class":51556},[28,83216,51560],{"class":2225},[28,83218,51563],{"class":38},[28,83220,83221,83223,83225,83227,83229,83231],{"class":30,"line":48},[28,83222,1307],{"class":38},[28,83224,50891],{"class":51556},[28,83226,51572],{"class":2225},[28,83228,54],{"class":38},[28,83230,51577],{"class":127},[28,83232,51563],{"class":38},[28,83234,83235],{"class":30,"line":84},[28,83236,2662],{"emptyLinePlaceholder":336},[28,83238,83239,83241,83243],{"class":30,"line":91},[28,83240,1307],{"class":38},[28,83242,51590],{"class":51556},[28,83244,51563],{"class":38},[28,83246,83247,83249,83251,83253,83255,83257],{"class":30,"line":97},[28,83248,52400],{"class":38},[28,83250,51600],{"class":51556},[28,83252,51603],{"class":2225},[28,83254,54],{"class":38},[28,83256,51608],{"class":127},[28,83258,51563],{"class":38},[28,83260,83261,83263,83265,83267,83269,83271,83273,83275,83277],{"class":30,"line":103},[28,83262,52400],{"class":38},[28,83264,51600],{"class":51556},[28,83266,15182],{"class":2225},[28,83268,54],{"class":38},[28,83270,51647],{"class":127},[28,83272,51627],{"class":2225},[28,83274,54],{"class":38},[28,83276,51654],{"class":127},[28,83278,51563],{"class":38},[28,83280,83281,83283,83285,83287,83289],{"class":30,"line":109},[28,83282,52400],{"class":38},[28,83284,51663],{"class":51556},[28,83286,51666],{"class":38},[28,83288,51663],{"class":51556},[28,83290,51563],{"class":38},[28,83292,83293,83295,83297],{"class":30,"line":118},[28,83294,52041],{"class":38},[28,83296,51590],{"class":51556},[28,83298,51563],{"class":38},[28,83300,83301],{"class":30,"line":124},[28,83302,2662],{"emptyLinePlaceholder":336},[28,83304,83305,83307,83309],{"class":30,"line":131},[28,83306,1307],{"class":38},[28,83308,52056],{"class":51556},[28,83310,51563],{"class":38},[28,83312,83313,83315,83317,83319,83321],{"class":30,"line":137},[28,83314,52400],{"class":38},[28,83316,51867],{"class":51556},[28,83318,55570],{"class":38},[28,83320,51867],{"class":51556},[28,83322,51563],{"class":38},[28,83324,83325,83327,83329],{"class":30,"line":143},[28,83326,52400],{"class":38},[28,83328,52069],{"class":51556},[28,83330,51563],{"class":38},[28,83332,83333,83335,83338,83340],{"class":30,"line":149},[28,83334,11483],{"class":34},[28,83336,83337],{"class":60}," gift",[28,83339,13826],{"class":34},[28,83341,83342],{"class":127}," '50g的茶叶，清洗球'\n",[28,83344,83345],{"class":30,"line":1890},[28,83346,83347],{"class":87},"    \u002F\u002F 1.把字符串拆分为数组\n",[28,83349,83350],{"class":30,"line":1904},[28,83351,83352],{"class":87},"    \u002F\u002F console.log(gift.split(','))\n",[28,83354,83355],{"class":30,"line":1909},[28,83356,83357],{"class":87},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[28,83359,83360,83362,83364,83366,83369,83372,83374,83377,83379,83381,83383,83385,83387,83390,83392,83395,83397,83399,83401,83403],{"class":30,"line":1915},[28,83361,11483],{"class":34},[28,83363,74175],{"class":60},[28,83365,13826],{"class":34},[28,83367,83368],{"class":38}," gift.",[28,83370,83371],{"class":2225},"split",[28,83373,413],{"class":38},[28,83375,83376],{"class":127},"'，'",[28,83378,31086],{"class":38},[28,83380,74300],{"class":2225},[28,83382,413],{"class":38},[28,83384,80051],{"class":5478},[28,83386,80054],{"class":34},[28,83388,83389],{"class":127}," `\u003Cspan>【赠品】${",[28,83391,80051],{"class":38},[28,83393,83394],{"class":127},"}\u003C\u002Fspan>\u003Cbr>`",[28,83396,31086],{"class":38},[28,83398,74479],{"class":2225},[28,83400,413],{"class":38},[28,83402,74484],{"class":127},[28,83404,81],{"class":38},[28,83406,83407,83409,83411,83413,83415,83417,83419],{"class":30,"line":1936},[28,83408,52663],{"class":38},[28,83410,54655],{"class":2225},[28,83412,413],{"class":38},[28,83414,82187],{"class":127},[28,83416,74505],{"class":38},[28,83418,54],{"class":34},[28,83420,74241],{"class":38},[28,83422,83423,83425,83427],{"class":30,"line":1941},[28,83424,52673],{"class":38},[28,83426,52069],{"class":51556},[28,83428,51563],{"class":38},[28,83430,83431,83433,83435],{"class":30,"line":1955},[28,83432,52041],{"class":38},[28,83434,52056],{"class":51556},[28,83436,51563],{"class":38},[28,83438,83439],{"class":30,"line":1960},[28,83440,2662],{"emptyLinePlaceholder":336},[28,83442,83443,83445,83447],{"class":30,"line":1989},[28,83444,52041],{"class":38},[28,83446,50891],{"class":51556},[28,83448,51563],{"class":38},[22260,83450,83452],{"id":83451},"_41054-number","4.10.5.4 Number",[14,83454,83455],{},[1727,83456],{"alt":23,"src":83457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83459,83460],{},"整数也可以进行toFixed来保留小数",[14,83462,83463],{},"比如：",[14,83465,83466],{},"const price=10",[14,83468,83469],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22260,83471,83473],{"id":83472},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83475,83476],{},[1727,83477],{"alt":23,"src":83478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[18,83480,83482],{"className":50889,"code":83481,"language":50891,"meta":23,"style":23},"\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",[25,83483,83484,83494,83508,83512,83520,83534,83554,83566,83574,83580,83590,83600,83610,83614,83618,83624,83636,83650,83654,83658,83664,83676,83692,83702,83718,83722,83726,83732,83742,83752,83756,83760,83768,83780,83792,83804,83808,83812,83820,83832,83836,83840,83851,83861,83873,83885,83895,83899,83903,83911,83920,83932,83942,83952,83956,83960,83968,83977,83984,83994,84006,84010,84014,84023,84033,84044,84056,84068,84072,84076,84085,84095,84106,84110,84114,84120,84132,84144,84154,84164,84182,84194,84198,84202,84211,84223,84233,84243,84255,84259,84267,84275,84279,84287,84301,84309,84323,84351,84359,84367,84377,84381,84389,84397,84406,84414,84423,84433,84437,84441,84449,84457,84466,84474,84482,84495,84499,84503,84511,84519,84528,84536,84544,84559,84563,84567,84575,84583,84592,84600,84608,84622,84630,84634,84638,84643,84669,84674,84711,84716,84739,84744,84798,84803,84839,84843,84849,84854,84863,84877,84886,84905,84914,84924,84929,84934,84947,84952,85006,85032,85040,85048,85052],{"__ignoreMap":23},[28,83485,83486,83488,83490,83492],{"class":30,"line":31},[28,83487,51553],{"class":38},[28,83489,51557],{"class":51556},[28,83491,51560],{"class":2225},[28,83493,51563],{"class":38},[28,83495,83496,83498,83500,83502,83504,83506],{"class":30,"line":48},[28,83497,1307],{"class":38},[28,83499,50891],{"class":51556},[28,83501,51572],{"class":2225},[28,83503,54],{"class":38},[28,83505,51577],{"class":127},[28,83507,51563],{"class":38},[28,83509,83510],{"class":30,"line":84},[28,83511,2662],{"emptyLinePlaceholder":336},[28,83513,83514,83516,83518],{"class":30,"line":91},[28,83515,1307],{"class":38},[28,83517,51590],{"class":51556},[28,83519,51563],{"class":38},[28,83521,83522,83524,83526,83528,83530,83532],{"class":30,"line":97},[28,83523,52400],{"class":38},[28,83525,51600],{"class":51556},[28,83527,51603],{"class":2225},[28,83529,54],{"class":38},[28,83531,51608],{"class":127},[28,83533,51563],{"class":38},[28,83535,83536,83538,83540,83542,83544,83546,83548,83550,83552],{"class":30,"line":103},[28,83537,52400],{"class":38},[28,83539,51600],{"class":51556},[28,83541,15182],{"class":2225},[28,83543,54],{"class":38},[28,83545,51647],{"class":127},[28,83547,51627],{"class":2225},[28,83549,54],{"class":38},[28,83551,51654],{"class":127},[28,83553,51563],{"class":38},[28,83555,83556,83558,83560,83562,83564],{"class":30,"line":109},[28,83557,52400],{"class":38},[28,83559,51663],{"class":51556},[28,83561,51666],{"class":38},[28,83563,51663],{"class":51556},[28,83565,51563],{"class":38},[28,83567,83568,83570,83572],{"class":30,"line":118},[28,83569,52400],{"class":38},[28,83571,328],{"class":51556},[28,83573,51563],{"class":38},[28,83575,83576,83578],{"class":30,"line":124},[28,83577,6665],{"class":51556},[28,83579,15834],{"class":38},[28,83581,83582,83584,83586,83588],{"class":30,"line":131},[28,83583,54951],{"class":60},[28,83585,51693],{"class":38},[28,83587,244],{"class":60},[28,83589,1558],{"class":38},[28,83591,83592,83594,83596,83598],{"class":30,"line":137},[28,83593,54962],{"class":60},[28,83595,51693],{"class":38},[28,83597,244],{"class":60},[28,83599,1558],{"class":38},[28,83601,83602,83604,83606,83608],{"class":30,"line":143},[28,83603,72852],{"class":60},[28,83605,51693],{"class":38},[28,83607,60761],{"class":60},[28,83609,1558],{"class":38},[28,83611,83612],{"class":30,"line":149},[28,83613,2449],{"class":38},[28,83615,83616],{"class":30,"line":1890},[28,83617,2662],{"emptyLinePlaceholder":336},[28,83619,83620,83622],{"class":30,"line":1904},[28,83621,62379],{"class":2225},[28,83623,15834],{"class":38},[28,83625,83626,83628,83630,83632,83634],{"class":30,"line":1909},[28,83627,55027],{"class":60},[28,83629,51693],{"class":38},[28,83631,78830],{"class":60},[28,83633,51748],{"class":34},[28,83635,1558],{"class":38},[28,83637,83638,83640,83642,83644,83646,83648],{"class":30,"line":1915},[28,83639,54962],{"class":60},[28,83641,51693],{"class":38},[28,83643,713],{"class":60},[28,83645,51748],{"class":34},[28,83647,51812],{"class":60},[28,83649,1558],{"class":38},[28,83651,83652],{"class":30,"line":1936},[28,83653,2449],{"class":38},[28,83655,83656],{"class":30,"line":1941},[28,83657,2662],{"emptyLinePlaceholder":336},[28,83659,83660,83662],{"class":30,"line":1955},[28,83661,78881],{"class":2225},[28,83663,15834],{"class":38},[28,83665,83666,83668,83670,83672,83674],{"class":30,"line":1960},[28,83667,54951],{"class":60},[28,83669,51693],{"class":38},[28,83671,973],{"class":60},[28,83673,51748],{"class":34},[28,83675,1558],{"class":38},[28,83677,83678,83680,83682,83684,83686,83688,83690],{"class":30,"line":1989},[28,83679,62116],{"class":60},[28,83681,51693],{"class":38},[28,83683,28384],{"class":60},[28,83685,78936],{"class":60},[28,83687,78939],{"class":60},[28,83689,1093],{"class":34},[28,83691,1558],{"class":38},[28,83693,83694,83696,83698,83700],{"class":30,"line":1994},[28,83695,55265],{"class":60},[28,83697,51693],{"class":38},[28,83699,51733],{"class":60},[28,83701,1558],{"class":38},[28,83703,83704,83706,83708,83710,83712,83714,83716],{"class":30,"line":2011},[28,83705,62233],{"class":60},[28,83707,51693],{"class":38},[28,83709,61],{"class":60},[28,83711,51748],{"class":34},[28,83713,51777],{"class":60},[28,83715,62500],{"class":60},[28,83717,1558],{"class":38},[28,83719,83720],{"class":30,"line":2016},[28,83721,2449],{"class":38},[28,83723,83724],{"class":30,"line":2021},[28,83725,2662],{"emptyLinePlaceholder":336},[28,83727,83728,83730],{"class":30,"line":2026},[28,83729,78999],{"class":2225},[28,83731,15834],{"class":38},[28,83733,83734,83736,83738,83740],{"class":30,"line":2040},[28,83735,62281],{"class":60},[28,83737,51693],{"class":38},[28,83739,62286],{"class":60},[28,83741,1558],{"class":38},[28,83743,83744,83746,83748,83750],{"class":30,"line":2045},[28,83745,55140],{"class":60},[28,83747,51693],{"class":38},[28,83749,62074],{"class":60},[28,83751,1558],{"class":38},[28,83753,83754],{"class":30,"line":2839},[28,83755,2449],{"class":38},[28,83757,83758],{"class":30,"line":2853},[28,83759,2662],{"emptyLinePlaceholder":336},[28,83761,83762,83764,83766],{"class":30,"line":2861},[28,83763,78881],{"class":2225},[28,83765,55871],{"class":51556},[28,83767,15834],{"class":38},[28,83769,83770,83772,83774,83776,83778],{"class":30,"line":2866},[28,83771,55027],{"class":60},[28,83773,51693],{"class":38},[28,83775,1010],{"class":60},[28,83777,51748],{"class":34},[28,83779,1558],{"class":38},[28,83781,83782,83784,83786,83788,83790],{"class":30,"line":2872},[28,83783,55041],{"class":60},[28,83785,51693],{"class":38},[28,83787,1010],{"class":60},[28,83789,51748],{"class":34},[28,83791,1558],{"class":38},[28,83793,83794,83796,83798,83800,83802],{"class":30,"line":2878},[28,83795,62006],{"class":60},[28,83797,51693],{"class":38},[28,83799,721],{"class":60},[28,83801,51748],{"class":34},[28,83803,1558],{"class":38},[28,83805,83806],{"class":30,"line":2883},[28,83807,2449],{"class":38},[28,83809,83810],{"class":30,"line":8210},[28,83811,2662],{"emptyLinePlaceholder":336},[28,83813,83814,83816,83818],{"class":30,"line":8234},[28,83815,78881],{"class":2225},[28,83817,62560],{"class":2225},[28,83819,15834],{"class":38},[28,83821,83822,83824,83826,83828,83830],{"class":30,"line":8239},[28,83823,55027],{"class":60},[28,83825,51693],{"class":38},[28,83827,1984],{"class":60},[28,83829,51748],{"class":34},[28,83831,1558],{"class":38},[28,83833,83834],{"class":30,"line":8245},[28,83835,2449],{"class":38},[28,83837,83838],{"class":30,"line":8272},[28,83839,2662],{"emptyLinePlaceholder":336},[28,83841,83842,83844,83846,83849],{"class":30,"line":8277},[28,83843,78881],{"class":2225},[28,83845,62560],{"class":2225},[28,83847,83848],{"class":2225}," .tag",[28,83850,15834],{"class":38},[28,83852,83853,83855,83857,83859],{"class":30,"line":8283},[28,83854,55265],{"class":60},[28,83856,51693],{"class":38},[28,83858,61125],{"class":60},[28,83860,1558],{"class":38},[28,83862,83863,83865,83867,83869,83871],{"class":30,"line":8295},[28,83864,54951],{"class":60},[28,83866,51693],{"class":38},[28,83868,211],{"class":60},[28,83870,51748],{"class":34},[28,83872,1558],{"class":38},[28,83874,83875,83877,83879,83881,83883],{"class":30,"line":8307},[28,83876,55178],{"class":60},[28,83878,51693],{"class":38},[28,83880,897],{"class":60},[28,83882,51748],{"class":34},[28,83884,1558],{"class":38},[28,83886,83887,83889,83891,83893],{"class":30,"line":8319},[28,83888,57672],{"class":60},[28,83890,51693],{"class":38},[28,83892,62326],{"class":60},[28,83894,1558],{"class":38},[28,83896,83897],{"class":30,"line":9978},[28,83898,2449],{"class":38},[28,83900,83901],{"class":30,"line":10003},[28,83902,2662],{"emptyLinePlaceholder":336},[28,83904,83905,83907,83909],{"class":30,"line":10026},[28,83906,78881],{"class":2225},[28,83908,79173],{"class":2225},[28,83910,31723],{"class":38},[28,83912,83913,83915,83918],{"class":30,"line":10050},[28,83914,78881],{"class":2225},[28,83916,83917],{"class":2225}," .sub-total",[28,83919,15834],{"class":38},[28,83921,83922,83924,83926,83928,83930],{"class":30,"line":10055},[28,83923,55178],{"class":60},[28,83925,51693],{"class":38},[28,83927,1048],{"class":60},[28,83929,51748],{"class":34},[28,83931,1558],{"class":38},[28,83933,83934,83936,83938,83940],{"class":30,"line":10060},[28,83935,57672],{"class":60},[28,83937,51693],{"class":38},[28,83939,79196],{"class":60},[28,83941,1558],{"class":38},[28,83943,83944,83946,83948,83950],{"class":30,"line":10065},[28,83945,62093],{"class":60},[28,83947,51693],{"class":38},[28,83949,61],{"class":60},[28,83951,1558],{"class":38},[28,83953,83954],{"class":30,"line":10074},[28,83955,2449],{"class":38},[28,83957,83958],{"class":30,"line":10079},[28,83959,2662],{"emptyLinePlaceholder":336},[28,83961,83962,83964,83966],{"class":30,"line":10085},[28,83963,78881],{"class":2225},[28,83965,79213],{"class":2225},[28,83967,31723],{"class":38},[28,83969,83970,83972,83975],{"class":30,"line":10106},[28,83971,78881],{"class":2225},[28,83973,83974],{"class":2225}," .sub-total::before",[28,83976,31723],{"class":38},[28,83978,83979,83982],{"class":30,"line":10112},[28,83980,83981],{"class":2225},"    .amount::before",[28,83983,15834],{"class":38},[28,83985,83986,83988,83990,83992],{"class":30,"line":10126},[28,83987,79220],{"class":60},[28,83989,51693],{"class":38},[28,83991,79225],{"class":127},[28,83993,1558],{"class":38},[28,83995,83996,83998,84000,84002,84004],{"class":30,"line":10132},[28,83997,55178],{"class":60},[28,83999,51693],{"class":38},[28,84001,897],{"class":60},[28,84003,51748],{"class":34},[28,84005,1558],{"class":38},[28,84007,84008],{"class":30,"line":10159},[28,84009,2449],{"class":38},[28,84011,84012],{"class":30,"line":10168},[28,84013,2662],{"emptyLinePlaceholder":336},[28,84015,84016,84018,84021],{"class":30,"line":10174},[28,84017,78881],{"class":2225},[28,84019,84020],{"class":2225}," .spec",[28,84022,15834],{"class":38},[28,84024,84025,84027,84029,84031],{"class":30,"line":10182},[28,84026,62093],{"class":60},[28,84028,51693],{"class":38},[28,84030,211],{"class":60},[28,84032,1558],{"class":38},[28,84034,84035,84037,84039,84042],{"class":30,"line":10187},[28,84036,57672],{"class":60},[28,84038,51693],{"class":38},[28,84040,84041],{"class":60},"#888",[28,84043,1558],{"class":38},[28,84045,84046,84048,84050,84052,84054],{"class":30,"line":16866},[28,84047,55178],{"class":60},[28,84049,51693],{"class":38},[28,84051,947],{"class":60},[28,84053,51748],{"class":34},[28,84055,1558],{"class":38},[28,84057,84058,84060,84062,84064,84066],{"class":30,"line":16872},[28,84059,62256],{"class":60},[28,84061,51693],{"class":38},[28,84063,1098],{"class":60},[28,84065,51748],{"class":34},[28,84067,1558],{"class":38},[28,84069,84070],{"class":30,"line":16895},[28,84071,2449],{"class":38},[28,84073,84074],{"class":30,"line":16901},[28,84075,2662],{"emptyLinePlaceholder":336},[28,84077,84078,84080,84083],{"class":30,"line":16924},[28,84079,78881],{"class":2225},[28,84081,84082],{"class":2225}," .count",[28,84084,15834],{"class":38},[28,84086,84087,84089,84091,84093],{"class":30,"line":16938},[28,84088,62093],{"class":60},[28,84090,51693],{"class":38},[28,84092,61],{"class":60},[28,84094,1558],{"class":38},[28,84096,84097,84099,84101,84104],{"class":30,"line":16958},[28,84098,57672],{"class":60},[28,84100,51693],{"class":38},[28,84102,84103],{"class":60},"#aaa",[28,84105,1558],{"class":38},[28,84107,84108],{"class":30,"line":16964},[28,84109,2449],{"class":38},[28,84111,84112],{"class":30,"line":16975},[28,84113,2662],{"emptyLinePlaceholder":336},[28,84115,84116,84118],{"class":30,"line":16998},[28,84117,72731],{"class":2225},[28,84119,15834],{"class":38},[28,84121,84122,84124,84126,84128,84130],{"class":30,"line":17020},[28,84123,55027],{"class":60},[28,84125,51693],{"class":38},[28,84127,78830],{"class":60},[28,84129,51748],{"class":34},[28,84131,1558],{"class":38},[28,84133,84134,84136,84138,84140,84142],{"class":30,"line":17025},[28,84135,54962],{"class":60},[28,84137,51693],{"class":38},[28,84139,244],{"class":60},[28,84141,51812],{"class":60},[28,84143,1558],{"class":38},[28,84145,84146,84148,84150,84152],{"class":30,"line":17031},[28,84147,55265],{"class":60},[28,84149,51693],{"class":38},[28,84151,51733],{"class":60},[28,84153,1558],{"class":38},[28,84155,84156,84158,84160,84162],{"class":30,"line":17045},[28,84157,55276],{"class":60},[28,84159,51693],{"class":38},[28,84161,51836],{"class":60},[28,84163,1558],{"class":38},[28,84165,84166,84169,84171,84173,84175,84177,84180],{"class":30,"line":17058},[28,84167,84168],{"class":60},"      border-top",[28,84170,51693],{"class":38},[28,84172,61],{"class":60},[28,84174,51748],{"class":34},[28,84176,51777],{"class":60},[28,84178,84179],{"class":60}," #4e4e4e",[28,84181,1558],{"class":38},[28,84183,84184,84186,84188,84190,84192],{"class":30,"line":17063},[28,84185,54951],{"class":60},[28,84187,51693],{"class":38},[28,84189,1098],{"class":60},[28,84191,51748],{"class":34},[28,84193,1558],{"class":38},[28,84195,84196],{"class":30,"line":17077},[28,84197,2449],{"class":38},[28,84199,84200],{"class":30,"line":17082},[28,84201,2662],{"emptyLinePlaceholder":336},[28,84203,84204,84206,84209],{"class":30,"line":17088},[28,84205,72731],{"class":2225},[28,84207,84208],{"class":2225}," .amount",[28,84210,15834],{"class":38},[28,84212,84213,84215,84217,84219,84221],{"class":30,"line":17093},[28,84214,55178],{"class":60},[28,84216,51693],{"class":38},[28,84218,1048],{"class":60},[28,84220,51748],{"class":34},[28,84222,1558],{"class":38},[28,84224,84225,84227,84229,84231],{"class":30,"line":17107},[28,84226,57672],{"class":60},[28,84228,51693],{"class":38},[28,84230,79196],{"class":60},[28,84232,1558],{"class":38},[28,84234,84235,84237,84239,84241],{"class":30,"line":17112},[28,84236,62590],{"class":60},[28,84238,51693],{"class":38},[28,84240,51745],{"class":60},[28,84242,1558],{"class":38},[28,84244,84245,84247,84249,84251,84253],{"class":30,"line":17117},[28,84246,62006],{"class":60},[28,84248,51693],{"class":38},[28,84250,1054],{"class":60},[28,84252,51748],{"class":34},[28,84254,1558],{"class":38},[28,84256,84257],{"class":30,"line":17131},[28,84258,2449],{"class":38},[28,84260,84261,84263,84265],{"class":30,"line":17143},[28,84262,52673],{"class":38},[28,84264,328],{"class":51556},[28,84266,51563],{"class":38},[28,84268,84269,84271,84273],{"class":30,"line":17148},[28,84270,52041],{"class":38},[28,84272,51590],{"class":51556},[28,84274,51563],{"class":38},[28,84276,84277],{"class":30,"line":17161},[28,84278,2662],{"emptyLinePlaceholder":336},[28,84280,84281,84283,84285],{"class":30,"line":17166},[28,84282,1307],{"class":38},[28,84284,52056],{"class":51556},[28,84286,51563],{"class":38},[28,84288,84289,84291,84293,84295,84297,84299],{"class":30,"line":17171},[28,84290,52400],{"class":38},[28,84292,51867],{"class":51556},[28,84294,53742],{"class":2225},[28,84296,54],{"class":38},[28,84298,62864],{"class":127},[28,84300,51563],{"class":38},[28,84302,84303,84305,84307],{"class":30,"line":17176},[28,84304,52673],{"class":38},[28,84306,51867],{"class":51556},[28,84308,51563],{"class":38},[28,84310,84311,84313,84315,84317,84319,84321],{"class":30,"line":17189},[28,84312,52400],{"class":38},[28,84314,51867],{"class":51556},[28,84316,53742],{"class":2225},[28,84318,54],{"class":38},[28,84320,62836],{"class":127},[28,84322,51563],{"class":38},[28,84324,84325,84327,84329,84332,84334,84336,84338,84341,84343,84345,84347,84349],{"class":30,"line":17194},[28,84326,51597],{"class":38},[28,84328,51867],{"class":51556},[28,84330,84331],{"class":38},">合计：\u003C",[28,84333,28],{"class":51556},[28,84335,53742],{"class":2225},[28,84337,54],{"class":38},[28,84339,84340],{"class":127},"\"amount\"",[28,84342,55570],{"class":38},[28,84344,28],{"class":51556},[28,84346,55570],{"class":38},[28,84348,51867],{"class":51556},[28,84350,51563],{"class":38},[28,84352,84353,84355,84357],{"class":30,"line":32889},[28,84354,52673],{"class":38},[28,84356,51867],{"class":51556},[28,84358,51563],{"class":38},[28,84360,84361,84363,84365],{"class":30,"line":32895},[28,84362,52400],{"class":38},[28,84364,52069],{"class":51556},[28,84366,51563],{"class":38},[28,84368,84369,84371,84373,84375],{"class":30,"line":32901},[28,84370,11483],{"class":34},[28,84372,79633],{"class":60},[28,84374,13826],{"class":34},[28,84376,55703],{"class":38},[28,84378,84379],{"class":30,"line":32907},[28,84380,79642],{"class":38},[28,84382,84383,84385,84387],{"class":30,"line":32913},[28,84384,79647],{"class":38},[28,84386,79650],{"class":127},[28,84388,31723],{"class":38},[28,84390,84391,84393,84395],{"class":30,"line":32924},[28,84392,79657],{"class":38},[28,84394,79660],{"class":127},[28,84396,31723],{"class":38},[28,84398,84399,84401,84404],{"class":30,"line":32930},[28,84400,79667],{"class":38},[28,84402,84403],{"class":60},"289.9",[28,84405,31723],{"class":38},[28,84407,84408,84410,84412],{"class":30,"line":32950},[28,84409,79677],{"class":38},[28,84411,79680],{"class":127},[28,84413,31723],{"class":38},[28,84415,84416,84419,84421],{"class":30,"line":32956},[28,84417,84418],{"class":38},"        count: ",[28,84420,211],{"class":60},[28,84422,31723],{"class":38},[28,84424,84425,84428,84431],{"class":30,"line":32967},[28,84426,84427],{"class":38},"        spec: { color: ",[28,84429,84430],{"class":127},"'白色'",[28,84432,55860],{"class":38},[28,84434,84435],{"class":30,"line":32973},[28,84436,78148],{"class":38},[28,84438,84439],{"class":30,"line":32979},[28,84440,79642],{"class":38},[28,84442,84443,84445,84447],{"class":30,"line":32985},[28,84444,79647],{"class":38},[28,84446,79741],{"class":127},[28,84448,31723],{"class":38},[28,84450,84451,84453,84455],{"class":30,"line":32991},[28,84452,79657],{"class":38},[28,84454,79750],{"class":127},[28,84456,31723],{"class":38},[28,84458,84459,84461,84464],{"class":30,"line":32997},[28,84460,79667],{"class":38},[28,84462,84463],{"class":60},"109.8",[28,84465,31723],{"class":38},[28,84467,84468,84470,84472],{"class":30,"line":33003},[28,84469,79677],{"class":38},[28,84471,79768],{"class":127},[28,84473,31723],{"class":38},[28,84475,84476,84478,84480],{"class":30,"line":33009},[28,84477,84418],{"class":38},[28,84479,78],{"class":60},[28,84481,31723],{"class":38},[28,84483,84484,84487,84489,84491,84493],{"class":30,"line":33029},[28,84485,84486],{"class":38},"        spec: { size: ",[28,84488,82159],{"class":127},[28,84490,55720],{"class":38},[28,84492,82164],{"class":127},[28,84494,55860],{"class":38},[28,84496,84497],{"class":30,"line":33035},[28,84498,78148],{"class":38},[28,84500,84501],{"class":30,"line":33051},[28,84502,79642],{"class":38},[28,84504,84505,84507,84509],{"class":30,"line":33057},[28,84506,79647],{"class":38},[28,84508,79785],{"class":127},[28,84510,31723],{"class":38},[28,84512,84513,84515,84517],{"class":30,"line":33071},[28,84514,79657],{"class":38},[28,84516,79794],{"class":127},[28,84518,31723],{"class":38},[28,84520,84521,84523,84526],{"class":30,"line":33077},[28,84522,79667],{"class":38},[28,84524,84525],{"class":60},"488",[28,84527,31723],{"class":38},[28,84529,84530,84532,84534],{"class":30,"line":33092},[28,84531,79677],{"class":38},[28,84533,79812],{"class":127},[28,84535,31723],{"class":38},[28,84537,84538,84540,84542],{"class":30,"line":33098},[28,84539,84418],{"class":38},[28,84541,61],{"class":60},[28,84543,31723],{"class":38},[28,84545,84546,84548,84551,84554,84557],{"class":30,"line":33107},[28,84547,84427],{"class":38},[28,84549,84550],{"class":127},"'青色'",[28,84552,84553],{"class":38},", sum: ",[28,84555,84556],{"class":127},"'一大四小'",[28,84558,55860],{"class":38},[28,84560,84561],{"class":30,"line":33113},[28,84562,78148],{"class":38},[28,84564,84565],{"class":30,"line":33122},[28,84566,79642],{"class":38},[28,84568,84569,84571,84573],{"class":30,"line":33128},[28,84570,79647],{"class":38},[28,84572,79829],{"class":127},[28,84574,31723],{"class":38},[28,84576,84577,84579,84581],{"class":30,"line":33134},[28,84578,79657],{"class":38},[28,84580,79838],{"class":127},[28,84582,31723],{"class":38},[28,84584,84585,84587,84590],{"class":30,"line":33143},[28,84586,79667],{"class":38},[28,84588,84589],{"class":60},"139",[28,84591,31723],{"class":38},[28,84593,84594,84596,84598],{"class":30,"line":33149},[28,84595,79677],{"class":38},[28,84597,79856],{"class":127},[28,84599,31723],{"class":38},[28,84601,84602,84604,84606],{"class":30,"line":33160},[28,84603,84418],{"class":38},[28,84605,61],{"class":60},[28,84607,31723],{"class":38},[28,84609,84610,84612,84615,84617,84620],{"class":30,"line":33166},[28,84611,84486],{"class":38},[28,84613,84614],{"class":127},"'小号'",[28,84616,55720],{"class":38},[28,84618,84619],{"class":127},"'紫色'",[28,84621,55726],{"class":38},[28,84623,84624,84627],{"class":30,"line":33185},[28,84625,84626],{"class":38},"        gift: ",[28,84628,84629],{"class":127},"'50g茶叶,清洗球'\n",[28,84631,84632],{"class":30,"line":33191},[28,84633,52654],{"class":38},[28,84635,84636],{"class":30,"line":33202},[28,84637,53365],{"class":38},[28,84639,84640],{"class":30,"line":33208},[28,84641,84642],{"class":87},"    \u002F\u002F  1.根据数据渲染页面\n",[28,84644,84645,84647,84649,84651,84653,84655,84657,84659,84661,84663,84665,84667],{"class":30,"line":33228},[28,84646,52663],{"class":38},[28,84648,54655],{"class":2225},[28,84650,413],{"class":38},[28,84652,80157],{"class":127},[28,84654,74505],{"class":38},[28,84656,54],{"class":34},[28,84658,80304],{"class":38},[28,84660,74300],{"class":2225},[28,84662,413],{"class":38},[28,84664,80051],{"class":5478},[28,84666,80054],{"class":34},[28,84668,15834],{"class":38},[28,84670,84671],{"class":30,"line":33244},[28,84672,84673],{"class":87},"      \u002F\u002F 对象解构\n",[28,84675,84676,84678,84680,84682,84684,84686,84688,84691,84693,84695,84697,84700,84702,84705,84707,84709],{"class":30,"line":33250},[28,84677,58484],{"class":34},[28,84679,80063],{"class":38},[28,84681,80076],{"class":60},[28,84683,12697],{"class":38},[28,84685,80066],{"class":60},[28,84687,12697],{"class":38},[28,84689,84690],{"class":60},"count",[28,84692,12697],{"class":38},[28,84694,80071],{"class":60},[28,84696,12697],{"class":38},[28,84698,84699],{"class":60},"spec",[28,84701,12697],{"class":38},[28,84703,84704],{"class":60},"gift",[28,84706,80079],{"class":38},[28,84708,54],{"class":34},[28,84710,80084],{"class":38},[28,84712,84713],{"class":30,"line":33264},[28,84714,84715],{"class":87},"      \u002F\u002F 规格文字模块处理\n",[28,84717,84718,84720,84723,84725,84727,84729,84731,84733,84735,84737],{"class":30,"line":33270},[28,84719,58484],{"class":34},[28,84721,84722],{"class":60}," text",[28,84724,13826],{"class":34},[28,84726,82194],{"class":38},[28,84728,82197],{"class":2225},[28,84730,82200],{"class":38},[28,84732,74479],{"class":2225},[28,84734,413],{"class":38},[28,84736,82207],{"class":127},[28,84738,81],{"class":38},[28,84740,84741],{"class":30,"line":33276},[28,84742,84743],{"class":87},"      \u002F\u002F 处理赠品模块\n",[28,84745,84746,84748,84750,84752,84755,84757,84759,84761,84763,84766,84768,84770,84772,84774,84776,84779,84781,84784,84786,84788,84790,84792,84794,84796],{"class":30,"line":33287},[28,84747,58484],{"class":34},[28,84749,74175],{"class":60},[28,84751,13826],{"class":34},[28,84753,84754],{"class":38}," gift ",[28,84756,1383],{"class":34},[28,84758,83368],{"class":38},[28,84760,83371],{"class":2225},[28,84762,413],{"class":38},[28,84764,84765],{"class":127},"','",[28,84767,31086],{"class":38},[28,84769,74300],{"class":2225},[28,84771,413],{"class":38},[28,84773,80051],{"class":5478},[28,84775,80054],{"class":34},[28,84777,84778],{"class":127}," `\u003Cspan class=\"tag\">【赠品】${",[28,84780,80051],{"class":38},[28,84782,84783],{"class":127},"}\u003C\u002Fspan>`",[28,84785,31086],{"class":38},[28,84787,74479],{"class":2225},[28,84789,413],{"class":38},[28,84791,74484],{"class":127},[28,84793,13976],{"class":38},[28,84795,1256],{"class":34},[28,84797,70360],{"class":127},[28,84799,84800],{"class":30,"line":33293},[28,84801,84802],{"class":87},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[28,84804,84805,84807,84810,84812,84815,84817,84819,84821,84824,84826,84828,84830,84833,84835,84837],{"class":30,"line":33299},[28,84806,58484],{"class":34},[28,84808,84809],{"class":60}," subtotal",[28,84811,13826],{"class":34},[28,84813,84814],{"class":38}," ((price ",[28,84816,854],{"class":34},[28,84818,6016],{"class":60},[28,84820,6780],{"class":34},[28,84822,84823],{"class":38}," count) ",[28,84825,982],{"class":34},[28,84827,6016],{"class":60},[28,84829,31086],{"class":38},[28,84831,84832],{"class":2225},"toFixed",[28,84834,413],{"class":38},[28,84836,211],{"class":60},[28,84838,81],{"class":38},[28,84840,84841],{"class":30,"line":33309},[28,84842,2662],{"emptyLinePlaceholder":336},[28,84844,84845,84847],{"class":30,"line":33315},[28,84846,74238],{"class":34},[28,84848,70424],{"class":127},[28,84850,84851],{"class":30,"line":33326},[28,84852,84853],{"class":127},"        \u003Cdiv class=\"item\">\n",[28,84855,84856,84859,84861],{"class":30,"line":33332},[28,84857,84858],{"class":127},"          \u003Cimg src=\"${",[28,84860,80076],{"class":38},[28,84862,80108],{"class":127},[28,84864,84865,84868,84870,84873,84875],{"class":30,"line":33342},[28,84866,84867],{"class":127},"          \u003Cp class=\"name\">${",[28,84869,80066],{"class":38},[28,84871,84872],{"class":127},"}${",[28,84874,1567],{"class":38},[28,84876,80118],{"class":127},[28,84878,84879,84882,84884],{"class":30,"line":33347},[28,84880,84881],{"class":127},"          \u003Cp class=\"spec\">${",[28,84883,5449],{"class":38},[28,84885,80118],{"class":127},[28,84887,84888,84891,84893,84895,84897,84899,84901,84903],{"class":30,"line":33353},[28,84889,84890],{"class":127},"          \u003Cp class=\"price\">${",[28,84892,80071],{"class":38},[28,84894,956],{"class":127},[28,84896,84832],{"class":2225},[28,84898,413],{"class":127},[28,84900,211],{"class":60},[28,84902,828],{"class":127},[28,84904,80118],{"class":127},[28,84906,84907,84910,84912],{"class":30,"line":33402},[28,84908,84909],{"class":127},"          \u003Cp class=\"count\">x${",[28,84911,84690],{"class":38},[28,84913,80118],{"class":127},[28,84915,84916,84919,84922],{"class":30,"line":33449},[28,84917,84918],{"class":127},"          \u003Cp class=\"sub-total\">${",[28,84920,84921],{"class":38},"subtotal",[28,84923,80118],{"class":127},[28,84925,84926],{"class":30,"line":33454},[28,84927,84928],{"class":127},"        \u003C\u002Fdiv> \n",[28,84930,84931],{"class":30,"line":33460},[28,84932,84933],{"class":127},"             `\n",[28,84935,84936,84939,84941,84943,84945],{"class":30,"line":33479},[28,84937,84938],{"class":38},"    }).",[28,84940,74479],{"class":2225},[28,84942,413],{"class":38},[28,84944,74484],{"class":127},[28,84946,81],{"class":38},[28,84948,84949],{"class":30,"line":33485},[28,84950,84951],{"class":87},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[28,84953,84954,84956,84958,84960,84962,84965,84967,84970,84972,84974,84976,84979,84982,84984,84987,84989,84991,84993,84996,84998,85000,85002,85004],{"class":30,"line":33505},[28,84955,11483],{"class":34},[28,84957,63041],{"class":60},[28,84959,13826],{"class":34},[28,84961,80304],{"class":38},[28,84963,84964],{"class":2225},"reduce",[28,84966,2638],{"class":38},[28,84968,84969],{"class":5478},"prev",[28,84971,12697],{"class":38},[28,84973,80051],{"class":5478},[28,84975,13976],{"class":38},[28,84977,84978],{"class":34},"=>",[28,84980,84981],{"class":38}," prev ",[28,84983,880],{"class":34},[28,84985,84986],{"class":38}," (item.price ",[28,84988,854],{"class":34},[28,84990,6016],{"class":60},[28,84992,6780],{"class":34},[28,84994,84995],{"class":38}," item.count) ",[28,84997,982],{"class":34},[28,84999,6016],{"class":60},[28,85001,12697],{"class":38},[28,85003,244],{"class":60},[28,85005,81],{"class":38},[28,85007,85008,85010,85012,85014,85017,85019,85021,85024,85026,85028,85030],{"class":30,"line":33511},[28,85009,52663],{"class":38},[28,85011,54655],{"class":2225},[28,85013,413],{"class":38},[28,85015,85016],{"class":127},"'.amount'",[28,85018,74505],{"class":38},[28,85020,54],{"class":34},[28,85022,85023],{"class":38}," total.",[28,85025,84832],{"class":2225},[28,85027,413],{"class":38},[28,85029,211],{"class":60},[28,85031,81],{"class":38},[28,85033,85034,85036,85038],{"class":30,"line":33517},[28,85035,52673],{"class":38},[28,85037,52069],{"class":51556},[28,85039,51563],{"class":38},[28,85041,85042,85044,85046],{"class":30,"line":33527},[28,85043,52041],{"class":38},[28,85045,52056],{"class":51556},[28,85047,51563],{"class":38},[28,85049,85050],{"class":30,"line":33532},[28,85051,2662],{"emptyLinePlaceholder":336},[28,85053,85054,85056,85058],{"class":30,"line":33538},[28,85055,52041],{"class":38},[28,85057,50891],{"class":51556},[28,85059,51563],{"class":38},[351,85061,85063],{"id":85062},"_411-编程思想","4.11 编程思想",[380,85065,85067],{"id":85066},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85069,85070,85073],{},[555,85071,85072],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85075,85076],{},"调用就可以了",[14,85078,85079],{},[1727,85080],{"alt":23,"src":85081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[380,85083,85085],{"id":85084},"_4112-面向对象","4.11.2 面向对象",[14,85087,85088],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85090,85091],{},[1727,85092],{"alt":23,"src":85093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85095,85096],{},"面向对象的特性：",[1404,85098,85099,85102,85105],{},[366,85100,85101],{},"封装性",[366,85103,85104],{},"继承性",[366,85106,85107],{},"多态性",[380,85109,85111],{"id":85110},"_4113-两者比较","4.11.3 两者比较",[14,85113,85114],{},[1727,85115],{"alt":23,"src":85116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[351,85118,85120],{"id":85119},"_412-构造函数回顾","4.12 构造函数回顾",[14,85122,85123],{},[1727,85124],{"alt":23,"src":85125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85127,85128],{},[1727,85129],{"alt":23,"src":85130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85132,85133],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85135,85136],{},[1727,85137],{"alt":23,"src":85138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[351,85140,85142],{"id":85141},"_413-原型","4.13 原型",[380,85144,85146],{"id":85145},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85148,85149],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85151,85152],{},[1727,85153],{"alt":23,"src":85154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85156,85157],{},[1727,85158],{"alt":23,"src":85159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85161,85162],{},"原型是构造函数的属性，它也是一个对象",[14,85164,85165],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85167,85168],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[18,85170,85172],{"className":53323,"code":85171,"language":53325,"meta":23,"style":23},"\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",[25,85173,85174,85182,85187,85195,85200,85205,85210,85215,85220,85224,85228,85232,85237,85242,85246,85251,85256,85261,85266,85271,85275,85283],{"__ignoreMap":23},[28,85175,85176,85178,85180],{"class":30,"line":31},[28,85177,1307],{"class":38},[28,85179,52056],{"class":51556},[28,85181,51563],{"class":38},[28,85183,85184],{"class":30,"line":48},[28,85185,85186],{"class":87},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[28,85188,85189,85191,85193],{"class":30,"line":84},[28,85190,52400],{"class":38},[28,85192,52069],{"class":51556},[28,85194,51563],{"class":38},[28,85196,85197],{"class":30,"line":91},[28,85198,85199],{"class":38},"    function Star(uname, age) {\n",[28,85201,85202],{"class":30,"line":97},[28,85203,85204],{"class":38},"      this.uname = uname,\n",[28,85206,85207],{"class":30,"line":103},[28,85208,85209],{"class":38},"        this.age = age\n",[28,85211,85212],{"class":30,"line":109},[28,85213,85214],{"class":38},"      \u002F\u002F this.sing = function () {\n",[28,85216,85217],{"class":30,"line":118},[28,85218,85219],{"class":38},"      \u002F\u002F   console.log('唱歌')\n",[28,85221,85222],{"class":30,"line":124},[28,85223,2662],{"emptyLinePlaceholder":336},[28,85225,85226],{"class":30,"line":131},[28,85227,60293],{"class":38},[28,85229,85230],{"class":30,"line":137},[28,85231,2449],{"class":38},[28,85233,85234],{"class":30,"line":143},[28,85235,85236],{"class":38},"    Star.prototype.sing = function () {\n",[28,85238,85239],{"class":30,"line":149},[28,85240,85241],{"class":38},"      console.log('唱歌')\n",[28,85243,85244],{"class":30,"line":1890},[28,85245,2449],{"class":38},[28,85247,85248],{"class":30,"line":1904},[28,85249,85250],{"class":38},"    \u002F\u002F console.dir(Star.prototype)\n",[28,85252,85253],{"class":30,"line":1909},[28,85254,85255],{"class":38},"    const pink = new Star('pink', 18)\n",[28,85257,85258],{"class":30,"line":1915},[28,85259,85260],{"class":38},"    const red = new Star('red', 20)\n",[28,85262,85263],{"class":30,"line":1936},[28,85264,85265],{"class":38},"    pink.sing()\n",[28,85267,85268],{"class":30,"line":1941},[28,85269,85270],{"class":38},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[28,85272,85273],{"class":30,"line":1955},[28,85274,2662],{"emptyLinePlaceholder":336},[28,85276,85277,85279,85281],{"class":30,"line":1960},[28,85278,52673],{"class":38},[28,85280,52069],{"class":51556},[28,85282,51563],{"class":38},[28,85284,85285,85287,85289],{"class":30,"line":1989},[28,85286,52041],{"class":38},[28,85288,52056],{"class":51556},[28,85290,51563],{"class":38},[14,85292,85293],{},[1727,85294],{"alt":23,"src":85295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[18,85297,85299],{"className":53323,"code":85298,"language":53325,"meta":23,"style":23},"\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",[25,85300,85301,85309,85317,85322,85327,85332,85337,85341,85346,85351,85356,85360,85365,85369,85373,85378,85382,85390],{"__ignoreMap":23},[28,85302,85303,85305,85307],{"class":30,"line":31},[28,85304,1307],{"class":38},[28,85306,52056],{"class":51556},[28,85308,51563],{"class":38},[28,85310,85311,85313,85315],{"class":30,"line":48},[28,85312,52400],{"class":38},[28,85314,52069],{"class":51556},[28,85316,51563],{"class":38},[28,85318,85319],{"class":30,"line":84},[28,85320,85321],{"class":38},"    let that\n",[28,85323,85324],{"class":30,"line":91},[28,85325,85326],{"class":38},"    function Star(uname) {\n",[28,85328,85329],{"class":30,"line":97},[28,85330,85331],{"class":38},"      this.uname = uname\n",[28,85333,85334],{"class":30,"line":103},[28,85335,85336],{"class":38},"      that = this\n",[28,85338,85339],{"class":30,"line":109},[28,85340,2449],{"class":38},[28,85342,85343],{"class":30,"line":118},[28,85344,85345],{"class":38},"    \u002F\u002F 实例对象是 ldh\n",[28,85347,85348],{"class":30,"line":124},[28,85349,85350],{"class":38},"    const ldh = new Star('刘德华')\n",[28,85352,85353],{"class":30,"line":131},[28,85354,85355],{"class":38},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[28,85357,85358],{"class":30,"line":137},[28,85359,2662],{"emptyLinePlaceholder":336},[28,85361,85362],{"class":30,"line":143},[28,85363,85364],{"class":38},"    Star.sing = function () {\n",[28,85366,85367],{"class":30,"line":149},[28,85368,85241],{"class":38},[28,85370,85371],{"class":30,"line":1890},[28,85372,2449],{"class":38},[28,85374,85375],{"class":30,"line":1904},[28,85376,85377],{"class":38},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[28,85379,85380],{"class":30,"line":1909},[28,85381,2662],{"emptyLinePlaceholder":336},[28,85383,85384,85386,85388],{"class":30,"line":1915},[28,85385,52673],{"class":38},[28,85387,52069],{"class":51556},[28,85389,51563],{"class":38},[28,85391,85392,85394,85396],{"class":30,"line":1936},[28,85393,52041],{"class":38},[28,85395,52056],{"class":51556},[28,85397,51563],{"class":38},[14,85399,85400],{},"构造函数的this指向的是实例对象；",[14,85402,85403],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[380,85405,85407],{"id":85406},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85409,85410],{},[1727,85411],{"alt":23,"src":85412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[18,85414,85416],{"className":53323,"code":85415,"language":53325,"meta":23,"style":23},"\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",[25,85417,85418,85426,85434,85439,85444,85449,85454,85459,85464,85469,85474,85479,85484,85488,85493,85498,85503,85508,85512,85517,85522,85527,85532,85536,85541,85546,85551,85556,85560,85565,85569,85577],{"__ignoreMap":23},[28,85419,85420,85422,85424],{"class":30,"line":31},[28,85421,1307],{"class":38},[28,85423,52056],{"class":51556},[28,85425,51563],{"class":38},[28,85427,85428,85430,85432],{"class":30,"line":48},[28,85429,52400],{"class":38},[28,85431,52069],{"class":51556},[28,85433,51563],{"class":38},[28,85435,85436],{"class":30,"line":84},[28,85437,85438],{"class":38},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[28,85440,85441],{"class":30,"line":91},[28,85442,85443],{"class":38},"    const arr = [1, 2, 3]\n",[28,85445,85446],{"class":30,"line":97},[28,85447,85448],{"class":38},"    \u002F\u002F 自己定义数组的扩展方法\n",[28,85450,85451],{"class":30,"line":103},[28,85452,85453],{"class":38},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[28,85455,85456],{"class":30,"line":109},[28,85457,85458],{"class":38},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[28,85460,85461],{"class":30,"line":118},[28,85462,85463],{"class":38},"    \u002F\u002F ①.最大值\n",[28,85465,85466],{"class":30,"line":124},[28,85467,85468],{"class":38},"    Array.prototype.max = function () {\n",[28,85470,85471],{"class":30,"line":131},[28,85472,85473],{"class":38},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[28,85475,85476],{"class":30,"line":137},[28,85477,85478],{"class":38},"      return Math.max(...this)\n",[28,85480,85481],{"class":30,"line":143},[28,85482,85483],{"class":38},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[28,85485,85486],{"class":30,"line":149},[28,85487,2449],{"class":38},[28,85489,85490],{"class":30,"line":1890},[28,85491,85492],{"class":38},"    console.log(arr.max())\n",[28,85494,85495],{"class":30,"line":1904},[28,85496,85497],{"class":38},"    \u002F\u002F ②最小值\n",[28,85499,85500],{"class":30,"line":1909},[28,85501,85502],{"class":38},"    Array.prototype.min = function () {\n",[28,85504,85505],{"class":30,"line":1915},[28,85506,85507],{"class":38},"      return Math.min(...this)\n",[28,85509,85510],{"class":30,"line":1936},[28,85511,2449],{"class":38},[28,85513,85514],{"class":30,"line":1941},[28,85515,85516],{"class":38},"    console.log(arr.min())\n",[28,85518,85519],{"class":30,"line":1955},[28,85520,85521],{"class":38},"    \u002F\u002F③求和\n",[28,85523,85524],{"class":30,"line":1960},[28,85525,85526],{"class":38},"    Array.prototype.sum = function () {\n",[28,85528,85529],{"class":30,"line":1989},[28,85530,85531],{"class":38},"      return this.reduce((prev, current) => prev + current, 0)\n",[28,85533,85534],{"class":30,"line":1994},[28,85535,2449],{"class":38},[28,85537,85538],{"class":30,"line":2011},[28,85539,85540],{"class":38},"    console.log(arr.sum())\n",[28,85542,85543],{"class":30,"line":2016},[28,85544,85545],{"class":38},"    \u002F\u002F ③排序\n",[28,85547,85548],{"class":30,"line":2021},[28,85549,85550],{"class":38},"    Array.prototype.rever = function () {\n",[28,85552,85553],{"class":30,"line":2026},[28,85554,85555],{"class":38},"      return this.reverse()\n",[28,85557,85558],{"class":30,"line":2040},[28,85559,2449],{"class":38},[28,85561,85562],{"class":30,"line":2045},[28,85563,85564],{"class":38},"    console.log(arr.rever())\n",[28,85566,85567],{"class":30,"line":2839},[28,85568,2662],{"emptyLinePlaceholder":336},[28,85570,85571,85573,85575],{"class":30,"line":2853},[28,85572,52673],{"class":38},[28,85574,52069],{"class":51556},[28,85576,51563],{"class":38},[28,85578,85579,85581,85583],{"class":30,"line":2861},[28,85580,52041],{"class":38},[28,85582,52056],{"class":51556},[28,85584,51563],{"class":38},[14,85586,85587],{},[1727,85588],{"alt":23,"src":85589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[380,85591,85593],{"id":85592},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85595,85596],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85598,85599],{},[1727,85600],{"alt":23,"src":85601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[18,85603,85605],{"className":53323,"code":85604,"language":53325,"meta":23,"style":23},"\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",[25,85606,85607,85615,85623,85628,85633,85637,85642,85647,85652,85660],{"__ignoreMap":23},[28,85608,85609,85611,85613],{"class":30,"line":31},[28,85610,1307],{"class":38},[28,85612,52056],{"class":51556},[28,85614,51563],{"class":38},[28,85616,85617,85619,85621],{"class":30,"line":48},[28,85618,52400],{"class":38},[28,85620,52069],{"class":51556},[28,85622,51563],{"class":38},[28,85624,85625],{"class":30,"line":84},[28,85626,85627],{"class":38},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[28,85629,85630],{"class":30,"line":91},[28,85631,85632],{"class":38},"    function Star() {\n",[28,85634,85635],{"class":30,"line":97},[28,85636,2449],{"class":38},[28,85638,85639],{"class":30,"line":103},[28,85640,85641],{"class":38},"    const ldh = new Star()\n",[28,85643,85644],{"class":30,"line":109},[28,85645,85646],{"class":38},"    console.log(Star.prototype)\n",[28,85648,85649],{"class":30,"line":118},[28,85650,85651],{"class":38},"    console.log(Star.prototype.constructor === Star)\n",[28,85653,85654,85656,85658],{"class":30,"line":124},[28,85655,52673],{"class":38},[28,85657,52069],{"class":51556},[28,85659,51563],{"class":38},[28,85661,85662,85664,85666],{"class":30,"line":131},[28,85663,52041],{"class":38},[28,85665,52056],{"class":51556},[28,85667,51563],{"class":38},[14,85669,85670],{},[1727,85671],{"alt":23,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85674,85675],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[18,85677,85679],{"className":53323,"code":85678,"language":53325,"meta":23,"style":23},"  \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",[25,85680,85681,85689,85693,85697,85701,85706,85711,85716,85720,85725,85730,85735,85740,85745,85750,85754,85758,85763,85768,85773,85777,85782,85787,85791,85795,85799],{"__ignoreMap":23},[28,85682,85683,85685,85687],{"class":30,"line":31},[28,85684,52400],{"class":38},[28,85686,52069],{"class":51556},[28,85688,51563],{"class":38},[28,85690,85691],{"class":30,"line":48},[28,85692,85627],{"class":38},[28,85694,85695],{"class":30,"line":84},[28,85696,85632],{"class":38},[28,85698,85699],{"class":30,"line":91},[28,85700,2449],{"class":38},[28,85702,85703],{"class":30,"line":97},[28,85704,85705],{"class":38},"    \u002F\u002F const ldh = new Star()\n",[28,85707,85708],{"class":30,"line":103},[28,85709,85710],{"class":38},"    \u002F\u002F console.log(Star.prototype)\n",[28,85712,85713],{"class":30,"line":109},[28,85714,85715],{"class":38},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[28,85717,85718],{"class":30,"line":118},[28,85719,2662],{"emptyLinePlaceholder":336},[28,85721,85722],{"class":30,"line":124},[28,85723,85724],{"class":38},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[28,85726,85727],{"class":30,"line":131},[28,85728,85729],{"class":38},"    \u002F\u002F Star.prototype.sing = function () {\n",[28,85731,85732],{"class":30,"line":137},[28,85733,85734],{"class":38},"    \u002F\u002F   console.log('唱歌')\n",[28,85736,85737],{"class":30,"line":143},[28,85738,85739],{"class":38},"    \u002F\u002F }\n",[28,85741,85742],{"class":30,"line":149},[28,85743,85744],{"class":38},"    \u002F\u002F Star.prototype.dance = function () {\n",[28,85746,85747],{"class":30,"line":1890},[28,85748,85749],{"class":38},"    \u002F\u002F   console.log('跳舞')\n",[28,85751,85752],{"class":30,"line":1904},[28,85753,85739],{"class":38},[28,85755,85756],{"class":30,"line":1909},[28,85757,85646],{"class":38},[28,85759,85760],{"class":30,"line":1915},[28,85761,85762],{"class":38},"    Star.prototype = {\n",[28,85764,85765],{"class":30,"line":1936},[28,85766,85767],{"class":38},"      sing: function () {\n",[28,85769,85770],{"class":30,"line":1941},[28,85771,85772],{"class":38},"        console.log('唱歌')\n",[28,85774,85775],{"class":30,"line":1955},[28,85776,78148],{"class":38},[28,85778,85779],{"class":30,"line":1960},[28,85780,85781],{"class":38},"      dance: function () {\n",[28,85783,85784],{"class":30,"line":1989},[28,85785,85786],{"class":38},"        console.log('跳舞')\n",[28,85788,85789],{"class":30,"line":1994},[28,85790,52654],{"class":38},[28,85792,85793],{"class":30,"line":2011},[28,85794,2449],{"class":38},[28,85796,85797],{"class":30,"line":2016},[28,85798,85646],{"class":38},[28,85800,85801,85803,85805],{"class":30,"line":2021},[28,85802,52673],{"class":38},[28,85804,52069],{"class":51556},[28,85806,51563],{"class":38},[14,85808,85809],{},"进行输出结果后会发现：",[14,85811,85812],{},[1727,85813],{"alt":23,"src":85814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85816,85817],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85819,85820],{},"所以，要重新指回创造这个原型对象的构造函数",[18,85822,85824],{"className":71469,"code":85823,"language":71471,"meta":23,"style":23},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[25,85825,85826,85840,85845,85850,85861,85874,85879,85890,85904,85908],{"__ignoreMap":23},[28,85827,85828,85831,85833,85836,85838],{"class":30,"line":31},[28,85829,85830],{"class":60},"Star",[28,85832,956],{"class":38},[28,85834,85835],{"class":60},"prototype",[28,85837,13826],{"class":34},[28,85839,15834],{"class":38},[28,85841,85842],{"class":30,"line":48},[28,85843,85844],{"class":87},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[28,85846,85847],{"class":30,"line":84},[28,85848,85849],{"class":38},"  constructor: Star,\n",[28,85851,85852,85855,85857,85859],{"class":30,"line":91},[28,85853,85854],{"class":2225},"  sing",[28,85856,51693],{"class":38},[28,85858,54705],{"class":34},[28,85860,54708],{"class":38},[28,85862,85863,85865,85867,85869,85872],{"class":30,"line":97},[28,85864,74009],{"class":38},[28,85866,58503],{"class":2225},[28,85868,413],{"class":38},[28,85870,85871],{"class":127},"'唱歌'",[28,85873,81],{"class":38},[28,85875,85876],{"class":30,"line":103},[28,85877,85878],{"class":38},"   },\n",[28,85880,85881,85884,85886,85888],{"class":30,"line":109},[28,85882,85883],{"class":2225},"   dance",[28,85885,51693],{"class":38},[28,85887,54705],{"class":34},[28,85889,54708],{"class":38},[28,85891,85892,85895,85897,85899,85902],{"class":30,"line":118},[28,85893,85894],{"class":38},"     console.",[28,85896,58503],{"class":2225},[28,85898,413],{"class":38},[28,85900,85901],{"class":127},"'跳舞'",[28,85903,81],{"class":38},[28,85905,85906],{"class":30,"line":124},[28,85907,4571],{"class":38},[28,85909,85910],{"class":30,"line":131},[28,85911,1830],{"class":38},[14,85913,85914],{},[1727,85915],{"alt":23,"src":85916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85918,85919],{},"总结1：",[14,85921,85922],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85924,85925],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85927,85928],{},"constructor指的是他的来源",[14,85930,85931],{},[1727,85932],{"alt":23,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85935,85936],{},[1727,85937],{"alt":23,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85940,85941],{},"总结2：",[14,85943,85944],{},[1727,85945],{"alt":23,"src":85946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85948,85949],{},[1727,85950],{"alt":23,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85953,85954],{},[1727,85955],{"alt":23,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[380,85958,85960],{"id":85959},"_4134-对象原型","4.13.4 对象原型",[14,85962,85963],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85965,85966],{},"对象原型就是__proto__这个属性",[14,85968,85969],{},[1727,85970],{"alt":23,"src":85971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85973,85974],{},[1727,85975],{"alt":23,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85978,85979],{},[1727,85980],{"alt":23,"src":85981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85983,85984],{},[1727,85985],{"alt":23,"src":85986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[18,85988,85990],{"className":53323,"code":85989,"language":53325,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,85991,85992,86000,86008,86012,86016,86020,86025,86033],{"__ignoreMap":23},[28,85993,85994,85996,85998],{"class":30,"line":31},[28,85995,1307],{"class":38},[28,85997,52056],{"class":51556},[28,85999,51563],{"class":38},[28,86001,86002,86004,86006],{"class":30,"line":48},[28,86003,52400],{"class":38},[28,86005,52069],{"class":51556},[28,86007,51563],{"class":38},[28,86009,86010],{"class":30,"line":84},[28,86011,85632],{"class":38},[28,86013,86014],{"class":30,"line":91},[28,86015,2449],{"class":38},[28,86017,86018],{"class":30,"line":97},[28,86019,85641],{"class":38},[28,86021,86022],{"class":30,"line":103},[28,86023,86024],{"class":38},"    console.log(ldh)\n",[28,86026,86027,86029,86031],{"class":30,"line":109},[28,86028,52673],{"class":38},[28,86030,52069],{"class":51556},[28,86032,51563],{"class":38},[28,86034,86035,86037,86039],{"class":30,"line":118},[28,86036,52041],{"class":38},[28,86038,52056],{"class":51556},[28,86040,51563],{"class":38},[14,86042,86043],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86045,86046],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86048,86049],{},[1727,86050],{"alt":23,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86053,86054],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86056,86057],{},"对象原型指向原型对象",[14,86059,86060],{},[1727,86061],{"alt":23,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86064,86065],{},[1727,86066],{"alt":23,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86069,86070],{},[1727,86071],{"alt":23,"src":86072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[380,86074,86076],{"id":86075},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86078,86079],{},[1727,86080],{"alt":23,"src":86081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[363,86083,86084,86087,86090,86093],{},[366,86085,86086],{},"构造函数通过new的形式实例化得到实例对象",[366,86088,86089],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[366,86091,86092],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[366,86094,86095],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86097,86098],{},[1727,86099],{"alt":23,"src":86100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86102,86103],{},"题目梳理：",[14,86105,86106],{},[1727,86107],{"alt":23,"src":86108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[380,86110,86112],{"id":86111},"_4136-原型继承","4.13.6 原型继承",[14,86114,86115],{},[1727,86116],{"alt":23,"src":86117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86119,86120],{},[1727,86121],{"alt":23,"src":86122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86124,86125],{},[1727,86126],{"alt":23,"src":86127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86129,86130],{},[1727,86131],{"alt":23,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86134,86135],{},[1727,86136],{"alt":23,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86139,86140],{},[1727,86141],{"alt":23,"src":86142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86144,86145],{},[1727,86146],{"alt":23,"src":86147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86149,86150],{},[1727,86151],{"alt":23,"src":86152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86154,86155],{},"回顾：构造函数每次new得到对象都是不同的",[380,86157,86159],{"id":86158},"_4137-原型链","4.13.7 原型链",[14,86161,86162],{},[1727,86163],{"alt":23,"src":86164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86166,86167],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86169,86170],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86172,86173],{},"大哥是Object",[14,86175,86176],{},[1727,86177],{"alt":23,"src":86178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86180,86181],{},[1727,86182],{"alt":23,"src":86183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86185,86186],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86188,86189],{},"万物皆对象",[380,86191,86193],{"id":86192},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86195,86196],{},"模态框",[14,86198,86199],{},"以后遇见这个效果直接使用这个就行",[14,86201,86202],{},[1727,86203],{"alt":23,"src":86204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86206,86207],{},[1727,86208],{"alt":23,"src":86209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86211,86212],{},[1727,86213],{"alt":23,"src":86214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86216,86217],{},[1727,86218],{"alt":23,"src":86219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86221,86222],{},"补充知识点：",[363,86224,86225],{},[366,86226,86227],{},"append()",[14,86229,86230],{},[1727,86231],{"alt":23,"src":86232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[18,86234,86236],{"className":50889,"code":86235,"language":50891,"meta":23,"style":23},"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",[25,86237,86238,86243,86248,86253,86257,86261,86265,86270,86275,86280,86284],{"__ignoreMap":23},[28,86239,86240],{"class":30,"line":31},[28,86241,86242],{"class":38},"append(param1)\n",[28,86244,86245],{"class":30,"line":48},[28,86246,86247],{"class":38},"append(param1, param2)\n",[28,86249,86250],{"class":30,"line":84},[28,86251,86252],{"class":38},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[28,86254,86255],{"class":30,"line":91},[28,86256,2662],{"emptyLinePlaceholder":336},[28,86258,86259],{"class":30,"line":97},[28,86260,2662],{"emptyLinePlaceholder":336},[28,86262,86263],{"class":30,"line":103},[28,86264,2662],{"emptyLinePlaceholder":336},[28,86266,86267],{"class":30,"line":109},[28,86268,86269],{"class":38},"let div = document.createElement(\"div\");\n",[28,86271,86272],{"class":30,"line":118},[28,86273,86274],{"class":38},"let p = document.createElement(\"p\");\n",[28,86276,86277],{"class":30,"line":124},[28,86278,86279],{"class":38},"div.append(p);\n",[28,86281,86282],{"class":30,"line":131},[28,86283,2662],{"emptyLinePlaceholder":336},[28,86285,86286,86289,86291],{"class":30,"line":137},[28,86287,86288],{"class":38},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[28,86290,14],{"class":51556},[28,86292,86293],{"class":38},"> ]\n",[363,86295,86296],{"start":48},[366,86297,86298],{},"remove()",[14,86300,86301],{},"自己删自己",[14,86303,86304],{},[1727,86305],{"alt":23,"src":86306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[18,86308,86310],{"className":50889,"code":86309,"language":50891,"meta":23,"style":23},"\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",[25,86311,86312,86322,86336,86340,86348,86362,86382,86394,86402,86409,86421,86434,86469,86481,86492,86504,86516,86528,86555,86565,86569,86573,86582,86594,86608,86618,86630,86634,86638,86648,86659,86669,86679,86692,86705,86715,86719,86723,86732,86742,86754,86758,86762,86771,86781,86791,86803,86807,86811,86821,86837,86848,86858,86868,86880,86892,86904,86908,86912,86925,86936,86940,86948,86956,86960,86968,86988,87008,87016,87021,87047,87052,87057,87076,87081,87093,87098,87109,87119,87129,87134,87139,87143,87148,87153,87158,87178,87183,87203,87208,87222,87227,87232,87237,87253,87257,87262,87291,87296,87301,87306,87317,87321,87325,87329,87334,87359,87364,87389,87394,87403,87407,87412,87437,87441,87466,87470,87479,87483,87488,87506,87516,87520,87528,87536,87540],{"__ignoreMap":23},[28,86313,86314,86316,86318,86320],{"class":30,"line":31},[28,86315,51553],{"class":38},[28,86317,51557],{"class":51556},[28,86319,51560],{"class":2225},[28,86321,51563],{"class":38},[28,86323,86324,86326,86328,86330,86332,86334],{"class":30,"line":48},[28,86325,1307],{"class":38},[28,86327,50891],{"class":51556},[28,86329,51572],{"class":2225},[28,86331,54],{"class":38},[28,86333,51577],{"class":127},[28,86335,51563],{"class":38},[28,86337,86338],{"class":30,"line":84},[28,86339,2662],{"emptyLinePlaceholder":336},[28,86341,86342,86344,86346],{"class":30,"line":91},[28,86343,1307],{"class":38},[28,86345,51590],{"class":51556},[28,86347,51563],{"class":38},[28,86349,86350,86352,86354,86356,86358,86360],{"class":30,"line":97},[28,86351,52400],{"class":38},[28,86353,51600],{"class":51556},[28,86355,51603],{"class":2225},[28,86357,54],{"class":38},[28,86359,51608],{"class":127},[28,86361,51563],{"class":38},[28,86363,86364,86366,86368,86370,86372,86374,86376,86378,86380],{"class":30,"line":103},[28,86365,52400],{"class":38},[28,86367,51600],{"class":51556},[28,86369,15182],{"class":2225},[28,86371,54],{"class":38},[28,86373,51647],{"class":127},[28,86375,51627],{"class":2225},[28,86377,54],{"class":38},[28,86379,51654],{"class":127},[28,86381,51563],{"class":38},[28,86383,86384,86386,86388,86390,86392],{"class":30,"line":109},[28,86385,52400],{"class":38},[28,86387,51663],{"class":51556},[28,86389,51666],{"class":38},[28,86391,51663],{"class":51556},[28,86393,51563],{"class":38},[28,86395,86396,86398,86400],{"class":30,"line":118},[28,86397,52400],{"class":38},[28,86399,328],{"class":51556},[28,86401,51563],{"class":38},[28,86403,86404,86407],{"class":30,"line":124},[28,86405,86406],{"class":2225},"    .modal",[28,86408,15834],{"class":38},[28,86410,86411,86413,86415,86417,86419],{"class":30,"line":131},[28,86412,55027],{"class":60},[28,86414,51693],{"class":38},[28,86416,4235],{"class":60},[28,86418,51748],{"class":34},[28,86420,1558],{"class":38},[28,86422,86423,86426,86428,86430,86432],{"class":30,"line":137},[28,86424,86425],{"class":60},"      min-height",[28,86427,51693],{"class":38},[28,86429,713],{"class":60},[28,86431,51748],{"class":34},[28,86433,1558],{"class":38},[28,86435,86436,86438,86440,86442,86444,86446,86448,86450,86452,86454,86456,86458,86460,86462,86464,86467],{"class":30,"line":143},[28,86437,79006],{"class":60},[28,86439,51693],{"class":38},[28,86441,244],{"class":60},[28,86443,4355],{"class":60},[28,86445,2300],{"class":60},[28,86447,51748],{"class":34},[28,86449,79023],{"class":60},[28,86451,413],{"class":38},[28,86453,244],{"class":60},[28,86455,12697],{"class":38},[28,86457,244],{"class":60},[28,86459,12697],{"class":38},[28,86461,244],{"class":60},[28,86463,12697],{"class":38},[28,86465,86466],{"class":60},"0.1",[28,86468,2981],{"class":38},[28,86470,86471,86473,86475,86477,86479],{"class":30,"line":149},[28,86472,55390],{"class":60},[28,86474,51693],{"class":38},[28,86476,73],{"class":60},[28,86478,51748],{"class":34},[28,86480,1558],{"class":38},[28,86482,86483,86485,86487,86490],{"class":30,"line":1890},[28,86484,55015],{"class":60},[28,86486,51693],{"class":38},[28,86488,86489],{"class":60},"fixed",[28,86491,1558],{"class":38},[28,86493,86494,86497,86499,86502],{"class":30,"line":1904},[28,86495,86496],{"class":60},"      z-index",[28,86498,51693],{"class":38},[28,86500,86501],{"class":60},"999",[28,86503,1558],{"class":38},[28,86505,86506,86508,86510,86512,86514],{"class":30,"line":1909},[28,86507,55094],{"class":60},[28,86509,51693],{"class":38},[28,86511,1054],{"class":60},[28,86513,729],{"class":34},[28,86515,1558],{"class":38},[28,86517,86518,86520,86522,86524,86526],{"class":30,"line":1915},[28,86519,55203],{"class":60},[28,86521,51693],{"class":38},[28,86523,1054],{"class":60},[28,86525,729],{"class":34},[28,86527,1558],{"class":38},[28,86529,86530,86532,86534,86536,86538,86541,86543,86545,86547,86549,86551,86553],{"class":30,"line":1936},[28,86531,79047],{"class":60},[28,86533,51693],{"class":38},[28,86535,79052],{"class":60},[28,86537,413],{"class":38},[28,86539,86540],{"class":60},"-50",[28,86542,729],{"class":34},[28,86544,12697],{"class":38},[28,86546,86540],{"class":60},[28,86548,729],{"class":34},[28,86550,12697],{"class":38},[28,86552,244],{"class":60},[28,86554,2981],{"class":38},[28,86556,86557,86559,86561,86563],{"class":30,"line":1941},[28,86558,55140],{"class":60},[28,86560,51693],{"class":38},[28,86562,61098],{"class":60},[28,86564,1558],{"class":38},[28,86566,86567],{"class":30,"line":1955},[28,86568,2449],{"class":38},[28,86570,86571],{"class":30,"line":1960},[28,86572,2662],{"emptyLinePlaceholder":336},[28,86574,86575,86577,86580],{"class":30,"line":1989},[28,86576,86406],{"class":2225},[28,86578,86579],{"class":2225}," .header",[28,86581,15834],{"class":38},[28,86583,86584,86586,86588,86590,86592],{"class":30,"line":1994},[28,86585,57615],{"class":60},[28,86587,51693],{"class":38},[28,86589,800],{"class":60},[28,86591,51748],{"class":34},[28,86593,1558],{"class":38},[28,86595,86596,86598,86600,86602,86604,86606],{"class":30,"line":2011},[28,86597,54951],{"class":60},[28,86599,51693],{"class":38},[28,86601,244],{"class":60},[28,86603,2300],{"class":60},[28,86605,51748],{"class":34},[28,86607,1558],{"class":38},[28,86609,86610,86612,86614,86616],{"class":30,"line":2016},[28,86611,55015],{"class":60},[28,86613,51693],{"class":38},[28,86615,55020],{"class":60},[28,86617,1558],{"class":38},[28,86619,86620,86622,86624,86626,86628],{"class":30,"line":2021},[28,86621,55178],{"class":60},[28,86623,51693],{"class":38},[28,86625,1098],{"class":60},[28,86627,51748],{"class":34},[28,86629,1558],{"class":38},[28,86631,86632],{"class":30,"line":2026},[28,86633,2449],{"class":38},[28,86635,86636],{"class":30,"line":2040},[28,86637,2662],{"emptyLinePlaceholder":336},[28,86639,86640,86642,86644,86646],{"class":30,"line":2045},[28,86641,86406],{"class":2225},[28,86643,86579],{"class":2225},[28,86645,3294],{"class":51556},[28,86647,15834],{"class":38},[28,86649,86650,86653,86655,86657],{"class":30,"line":2839},[28,86651,86652],{"class":60},"      font-style",[28,86654,51693],{"class":38},[28,86656,64097],{"class":60},[28,86658,1558],{"class":38},[28,86660,86661,86663,86665,86667],{"class":30,"line":2853},[28,86662,57672],{"class":60},[28,86664,51693],{"class":38},[28,86666,62326],{"class":60},[28,86668,1558],{"class":38},[28,86670,86671,86673,86675,86677],{"class":30,"line":2861},[28,86672,55015],{"class":60},[28,86674,51693],{"class":38},[28,86676,55087],{"class":60},[28,86678,1558],{"class":38},[28,86680,86681,86684,86686,86688,86690],{"class":30,"line":2866},[28,86682,86683],{"class":60},"      right",[28,86685,51693],{"class":38},[28,86687,973],{"class":60},[28,86689,51748],{"class":34},[28,86691,1558],{"class":38},[28,86693,86694,86696,86698,86701,86703],{"class":30,"line":2872},[28,86695,55203],{"class":60},[28,86697,51693],{"class":38},[28,86699,86700],{"class":60},"-2",[28,86702,51748],{"class":34},[28,86704,1558],{"class":38},[28,86706,86707,86709,86711,86713],{"class":30,"line":2878},[28,86708,62281],{"class":60},[28,86710,51693],{"class":38},[28,86712,62286],{"class":60},[28,86714,1558],{"class":38},[28,86716,86717],{"class":30,"line":2883},[28,86718,2449],{"class":38},[28,86720,86721],{"class":30,"line":8210},[28,86722,2662],{"emptyLinePlaceholder":336},[28,86724,86725,86727,86730],{"class":30,"line":8234},[28,86726,86406],{"class":2225},[28,86728,86729],{"class":2225}," .body",[28,86731,15834],{"class":38},[28,86733,86734,86736,86738,86740],{"class":30,"line":8239},[28,86735,57542],{"class":60},[28,86737,51693],{"class":38},[28,86739,51848],{"class":60},[28,86741,1558],{"class":38},[28,86743,86744,86746,86748,86750,86752],{"class":30,"line":8245},[28,86745,54951],{"class":60},[28,86747,51693],{"class":38},[28,86749,845],{"class":60},[28,86751,51748],{"class":34},[28,86753,1558],{"class":38},[28,86755,86756],{"class":30,"line":8272},[28,86757,2449],{"class":38},[28,86759,86760],{"class":30,"line":8277},[28,86761,2662],{"emptyLinePlaceholder":336},[28,86763,86764,86766,86769],{"class":30,"line":8283},[28,86765,86406],{"class":2225},[28,86767,86768],{"class":2225}," .footer",[28,86770,15834],{"class":38},[28,86772,86773,86775,86777,86779],{"class":30,"line":8295},[28,86774,55265],{"class":60},[28,86776,51693],{"class":38},[28,86778,51733],{"class":60},[28,86780,1558],{"class":38},[28,86782,86783,86785,86787,86789],{"class":30,"line":8307},[28,86784,55276],{"class":60},[28,86786,51693],{"class":38},[28,86788,51836],{"class":60},[28,86790,1558],{"class":38},[28,86792,86793,86795,86797,86799,86801],{"class":30,"line":8319},[28,86794,54951],{"class":60},[28,86796,51693],{"class":38},[28,86798,845],{"class":60},[28,86800,51748],{"class":34},[28,86802,1558],{"class":38},[28,86804,86805],{"class":30,"line":9978},[28,86806,2449],{"class":38},[28,86808,86809],{"class":30,"line":10003},[28,86810,2662],{"emptyLinePlaceholder":336},[28,86812,86813,86815,86817,86819],{"class":30,"line":10026},[28,86814,86406],{"class":2225},[28,86816,86768],{"class":2225},[28,86818,1663],{"class":51556},[28,86820,15834],{"class":38},[28,86822,86823,86825,86827,86829,86831,86833,86835],{"class":30,"line":10050},[28,86824,54951],{"class":60},[28,86826,51693],{"class":38},[28,86828,78],{"class":60},[28,86830,51748],{"class":34},[28,86832,2345],{"class":60},[28,86834,51748],{"class":34},[28,86836,1558],{"class":38},[28,86838,86839,86841,86843,86846],{"class":30,"line":10055},[28,86840,61977],{"class":60},[28,86842,51693],{"class":38},[28,86844,86845],{"class":60},"#ccc",[28,86847,1558],{"class":38},[28,86849,86850,86852,86854,86856],{"class":30,"line":10060},[28,86851,64226],{"class":60},[28,86853,51693],{"class":38},[28,86855,54993],{"class":60},[28,86857,1558],{"class":38},[28,86859,86860,86862,86864,86866],{"class":30,"line":10065},[28,86861,57672],{"class":60},[28,86863,51693],{"class":38},[28,86865,61098],{"class":60},[28,86867,1558],{"class":38},[28,86869,86870,86872,86874,86876,86878],{"class":30,"line":10074},[28,86871,55390],{"class":60},[28,86873,51693],{"class":38},[28,86875,211],{"class":60},[28,86877,51748],{"class":34},[28,86879,1558],{"class":38},[28,86881,86882,86884,86886,86888,86890],{"class":30,"line":10079},[28,86883,62006],{"class":60},[28,86885,51693],{"class":38},[28,86887,845],{"class":60},[28,86889,51748],{"class":34},[28,86891,1558],{"class":38},[28,86893,86894,86896,86898,86900,86902],{"class":30,"line":10085},[28,86895,55178],{"class":60},[28,86897,51693],{"class":38},[28,86899,947],{"class":60},[28,86901,51748],{"class":34},[28,86903,1558],{"class":38},[28,86905,86906],{"class":30,"line":10106},[28,86907,2449],{"class":38},[28,86909,86910],{"class":30,"line":10112},[28,86911,2662],{"emptyLinePlaceholder":336},[28,86913,86914,86916,86918,86920,86923],{"class":30,"line":10126},[28,86915,86406],{"class":2225},[28,86917,86768],{"class":2225},[28,86919,1663],{"class":51556},[28,86921,86922],{"class":2225},".submit",[28,86924,15834],{"class":38},[28,86926,86927,86929,86931,86934],{"class":30,"line":10132},[28,86928,55140],{"class":60},[28,86930,51693],{"class":38},[28,86932,86933],{"class":60},"#369",[28,86935,1558],{"class":38},[28,86937,86938],{"class":30,"line":10159},[28,86939,2449],{"class":38},[28,86941,86942,86944,86946],{"class":30,"line":10168},[28,86943,52673],{"class":38},[28,86945,328],{"class":51556},[28,86947,51563],{"class":38},[28,86949,86950,86952,86954],{"class":30,"line":10174},[28,86951,52041],{"class":38},[28,86953,51590],{"class":51556},[28,86955,51563],{"class":38},[28,86957,86958],{"class":30,"line":10182},[28,86959,2662],{"emptyLinePlaceholder":336},[28,86961,86962,86964,86966],{"class":30,"line":10187},[28,86963,1307],{"class":38},[28,86965,52056],{"class":51556},[28,86967,51563],{"class":38},[28,86969,86970,86972,86974,86976,86978,86981,86984,86986],{"class":30,"line":16866},[28,86971,52400],{"class":38},[28,86973,54143],{"class":51556},[28,86975,15221],{"class":2225},[28,86977,54],{"class":38},[28,86979,86980],{"class":127},"\"delete\"",[28,86982,86983],{"class":38},">删除\u003C\u002F",[28,86985,54143],{"class":51556},[28,86987,51563],{"class":38},[28,86989,86990,86992,86994,86996,86998,87001,87004,87006],{"class":30,"line":16872},[28,86991,52400],{"class":38},[28,86993,54143],{"class":51556},[28,86995,15221],{"class":2225},[28,86997,54],{"class":38},[28,86999,87000],{"class":127},"\"login\"",[28,87002,87003],{"class":38},">登录\u003C\u002F",[28,87005,54143],{"class":51556},[28,87007,51563],{"class":38},[28,87009,87010,87012,87014],{"class":30,"line":16895},[28,87011,52400],{"class":38},[28,87013,52069],{"class":51556},[28,87015,51563],{"class":38},[28,87017,87018],{"class":30,"line":16901},[28,87019,87020],{"class":87},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[28,87022,87023,87025,87028,87030,87032,87034,87036,87038,87041,87043,87045],{"class":30,"line":16924},[28,87024,70340],{"class":34},[28,87026,87027],{"class":2225}," Modal",[28,87029,413],{"class":38},[28,87031,51663],{"class":5478},[28,87033,13826],{"class":34},[28,87035,70186],{"class":127},[28,87037,12697],{"class":38},[28,87039,87040],{"class":5478},"message",[28,87042,13826],{"class":34},[28,87044,70186],{"class":127},[28,87046,12704],{"class":38},[28,87048,87049],{"class":30,"line":16938},[28,87050,87051],{"class":87},"      \u002F\u002F 创建Model 模态框盒子\n",[28,87053,87054],{"class":30,"line":16958},[28,87055,87056],{"class":87},"      \u002F\u002F 1.1 创建div标签\n",[28,87058,87059,87061,87064,87066,87068,87070,87072,87074],{"class":30,"line":16964},[28,87060,70307],{"class":60},[28,87062,87063],{"class":38},".modalBox ",[28,87065,54],{"class":34},[28,87067,54652],{"class":38},[28,87069,70407],{"class":2225},[28,87071,413],{"class":38},[28,87073,82187],{"class":127},[28,87075,81],{"class":38},[28,87077,87078],{"class":30,"line":16975},[28,87079,87080],{"class":87},"      \u002F\u002F 1.2 给div 添加类名为model\n",[28,87082,87083,87085,87088,87090],{"class":30,"line":16998},[28,87084,70307],{"class":60},[28,87086,87087],{"class":38},".modalBox.className ",[28,87089,54],{"class":34},[28,87091,87092],{"class":127}," 'modal'\n",[28,87094,87095],{"class":30,"line":17020},[28,87096,87097],{"class":87},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[28,87099,87100,87102,87105,87107],{"class":30,"line":17025},[28,87101,70307],{"class":60},[28,87103,87104],{"class":38},".modalBox.innerHTML ",[28,87106,54],{"class":34},[28,87108,70424],{"class":127},[28,87110,87111,87114,87116],{"class":30,"line":17031},[28,87112,87113],{"class":127},"        \u003Cdiv class=\"header\">${",[28,87115,51663],{"class":38},[28,87117,87118],{"class":127},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[28,87120,87121,87124,87126],{"class":30,"line":17045},[28,87122,87123],{"class":127},"        \u003Cdiv class=\"body\">${",[28,87125,87040],{"class":38},[28,87127,87128],{"class":127},"}\u003C\u002Fdiv>\n",[28,87130,87131],{"class":30,"line":17058},[28,87132,87133],{"class":127},"      `\n",[28,87135,87136],{"class":30,"line":17063},[28,87137,87138],{"class":87},"      \u002F\u002F console.log(this.modalBox)\n",[28,87140,87141],{"class":30,"line":17077},[28,87142,2449],{"class":38},[28,87144,87145],{"class":30,"line":17082},[28,87146,87147],{"class":87},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[28,87149,87150],{"class":30,"line":17088},[28,87151,87152],{"class":87},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[28,87154,87155],{"class":30,"line":17093},[28,87156,87157],{"class":87},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[28,87159,87160,87163,87165,87167,87169,87172,87174,87176],{"class":30,"line":17107},[28,87161,87162],{"class":60},"    Modal",[28,87164,956],{"class":38},[28,87166,85835],{"class":60},[28,87168,956],{"class":38},[28,87170,87171],{"class":2225},"open",[28,87173,13826],{"class":34},[28,87175,59174],{"class":34},[28,87177,54708],{"class":38},[28,87179,87180],{"class":30,"line":17112},[28,87181,87182],{"class":87},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[28,87184,87185,87187,87190,87192,87194,87196,87198,87201],{"class":30,"line":17117},[28,87186,58484],{"class":34},[28,87188,87189],{"class":60}," box",[28,87191,13826],{"class":34},[28,87193,54652],{"class":38},[28,87195,54655],{"class":2225},[28,87197,413],{"class":38},[28,87199,87200],{"class":127},"'.modal'",[28,87202,81],{"class":38},[28,87204,87205],{"class":30,"line":17131},[28,87206,87207],{"class":87},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[28,87209,87210,87213,87215,87218,87220],{"class":30,"line":17143},[28,87211,87212],{"class":38},"      box ",[28,87214,1977],{"class":34},[28,87216,87217],{"class":38}," box.",[28,87219,57262],{"class":2225},[28,87221,2238],{"class":38},[28,87223,87224],{"class":30,"line":17148},[28,87225,87226],{"class":87},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[28,87228,87229],{"class":30,"line":17161},[28,87230,87231],{"class":87},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[28,87233,87234],{"class":30,"line":17166},[28,87235,87236],{"class":87},"      \u002F\u002F append可以增加对象\n",[28,87238,87239,87242,87245,87247,87250],{"class":30,"line":17171},[28,87240,87241],{"class":38},"      document.body.",[28,87243,87244],{"class":2225},"append",[28,87246,413],{"class":38},[28,87248,87249],{"class":60},"this",[28,87251,87252],{"class":38},".modalBox)\n",[28,87254,87255],{"class":30,"line":17176},[28,87256,2662],{"emptyLinePlaceholder":336},[28,87258,87259],{"class":30,"line":17189},[28,87260,87261],{"class":87},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[28,87263,87264,87266,87269,87271,87273,87276,87278,87280,87282,87284,87287,87289],{"class":30,"line":17194},[28,87265,70307],{"class":60},[28,87267,87268],{"class":38},".modalBox.",[28,87270,54655],{"class":2225},[28,87272,413],{"class":38},[28,87274,87275],{"class":127},"'i'",[28,87277,31086],{"class":38},[28,87279,58069],{"class":2225},[28,87281,413],{"class":38},[28,87283,58074],{"class":127},[28,87285,87286],{"class":38},", () ",[28,87288,84978],{"class":34},[28,87290,15834],{"class":38},[28,87292,87293],{"class":30,"line":32889},[28,87294,87295],{"class":87},"        \u002F\u002F 这个地方需要用到箭头函数\n",[28,87297,87298],{"class":30,"line":32895},[28,87299,87300],{"class":87},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[28,87302,87303],{"class":30,"line":32901},[28,87304,87305],{"class":87},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[28,87307,87308,87310,87312,87315],{"class":30,"line":32907},[28,87309,64982],{"class":60},[28,87311,956],{"class":38},[28,87313,87314],{"class":2225},"close",[28,87316,2238],{"class":38},[28,87318,87319],{"class":30,"line":32913},[28,87320,65071],{"class":38},[28,87322,87323],{"class":30,"line":32924},[28,87324,2449],{"class":38},[28,87326,87327],{"class":30,"line":32930},[28,87328,2662],{"emptyLinePlaceholder":336},[28,87330,87331],{"class":30,"line":32950},[28,87332,87333],{"class":87},"    \u002F\u002F 测试一下 点击 删除按钮\n",[28,87335,87336,87338,87340,87342,87345,87347,87349,87351,87353,87355,87357],{"class":30,"line":32956},[28,87337,52663],{"class":38},[28,87339,54655],{"class":2225},[28,87341,413],{"class":38},[28,87343,87344],{"class":127},"'#delete'",[28,87346,31086],{"class":38},[28,87348,58069],{"class":2225},[28,87350,413],{"class":38},[28,87352,58074],{"class":127},[28,87354,87286],{"class":38},[28,87356,84978],{"class":34},[28,87358,15834],{"class":38},[28,87360,87361],{"class":30,"line":32967},[28,87362,87363],{"class":87},"      \u002F\u002F 先调用Model构造函数\n",[28,87365,87366,87368,87371,87373,87375,87377,87379,87382,87384,87387],{"class":30,"line":32973},[28,87367,58484],{"class":34},[28,87369,87370],{"class":60}," del",[28,87372,13826],{"class":34},[28,87374,11840],{"class":34},[28,87376,87027],{"class":2225},[28,87378,413],{"class":38},[28,87380,87381],{"class":127},"'温馨的提示'",[28,87383,12697],{"class":38},[28,87385,87386],{"class":127},"'您没有删除权限操作'",[28,87388,81],{"class":38},[28,87390,87391],{"class":30,"line":32979},[28,87392,87393],{"class":87},"      \u002F\u002F 实例对象调用open方法\n",[28,87395,87396,87399,87401],{"class":30,"line":32985},[28,87397,87398],{"class":38},"      del.",[28,87400,87171],{"class":2225},[28,87402,2238],{"class":38},[28,87404,87405],{"class":30,"line":32991},[28,87406,33717],{"class":38},[28,87408,87409],{"class":30,"line":32997},[28,87410,87411],{"class":87},"    \u002F\u002F 测试一下 点击 登录按钮\n",[28,87413,87414,87416,87418,87420,87423,87425,87427,87429,87431,87433,87435],{"class":30,"line":33003},[28,87415,52663],{"class":38},[28,87417,54655],{"class":2225},[28,87419,413],{"class":38},[28,87421,87422],{"class":127},"'#login'",[28,87424,31086],{"class":38},[28,87426,58069],{"class":2225},[28,87428,413],{"class":38},[28,87430,58074],{"class":127},[28,87432,87286],{"class":38},[28,87434,84978],{"class":34},[28,87436,15834],{"class":38},[28,87438,87439],{"class":30,"line":33009},[28,87440,87363],{"class":87},[28,87442,87443,87445,87448,87450,87452,87454,87456,87459,87461,87464],{"class":30,"line":33029},[28,87444,58484],{"class":34},[28,87446,87447],{"class":60}," log",[28,87449,13826],{"class":34},[28,87451,11840],{"class":34},[28,87453,87027],{"class":2225},[28,87455,413],{"class":38},[28,87457,87458],{"class":127},"'友情提示'",[28,87460,12697],{"class":38},[28,87462,87463],{"class":127},"'您还没有登录呢'",[28,87465,81],{"class":38},[28,87467,87468],{"class":30,"line":33035},[28,87469,87393],{"class":87},[28,87471,87472,87475,87477],{"class":30,"line":33051},[28,87473,87474],{"class":38},"      log.",[28,87476,87171],{"class":2225},[28,87478,2238],{"class":38},[28,87480,87481],{"class":30,"line":33057},[28,87482,33717],{"class":38},[28,87484,87485],{"class":30,"line":33071},[28,87486,87487],{"class":87},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[28,87489,87490,87492,87494,87496,87498,87500,87502,87504],{"class":30,"line":33077},[28,87491,87162],{"class":60},[28,87493,956],{"class":38},[28,87495,85835],{"class":60},[28,87497,956],{"class":38},[28,87499,87314],{"class":2225},[28,87501,13826],{"class":34},[28,87503,59174],{"class":34},[28,87505,54708],{"class":38},[28,87507,87508,87510,87512,87514],{"class":30,"line":33092},[28,87509,70307],{"class":60},[28,87511,87268],{"class":38},[28,87513,57262],{"class":2225},[28,87515,2238],{"class":38},[28,87517,87518],{"class":30,"line":33098},[28,87519,2449],{"class":38},[28,87521,87522,87524,87526],{"class":30,"line":33107},[28,87523,52673],{"class":38},[28,87525,52069],{"class":51556},[28,87527,51563],{"class":38},[28,87529,87530,87532,87534],{"class":30,"line":33113},[28,87531,52041],{"class":38},[28,87533,52056],{"class":51556},[28,87535,51563],{"class":38},[28,87537,87538],{"class":30,"line":33122},[28,87539,2662],{"emptyLinePlaceholder":336},[28,87541,87542,87544,87546],{"class":30,"line":33128},[28,87543,52041],{"class":38},[28,87545,50891],{"class":51556},[28,87547,51563],{"class":38},[14,87549,87550],{},[1727,87551],{"alt":23,"src":87552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[351,87554,87556],{"id":87555},"_414-深浅拷贝","4.14 深浅拷贝",[380,87558,87560],{"id":87559},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87562,87563],{},[1727,87564],{"alt":23,"src":87565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87567,87568],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87570,87571],{},[1727,87572],{"alt":23,"src":87573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87575,87576],{},[1727,87577],{"alt":23,"src":87578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87580,87581],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87583,87584],{},[1727,87585],{"alt":23,"src":87586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87588,11594],{},[14,87590,87591],{},[1727,87592],{"alt":23,"src":87593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[380,87595,87597],{"id":87596},"_4142-深拷贝","4.14.2 深拷贝",[14,87599,87600],{},"深拷贝：拷贝的是对象，不是地址",[14,87602,87603],{},"常用的三种方法：",[363,87605,87606,87609,87612],{},[366,87607,87608],{},"通过递归实现深拷贝",[366,87610,87611],{},"lodash\u002FcloneDeep",[366,87613,87614],{},"通过JSON.stringify()实现",[22260,87616,87618],{"id":87617},"_41421-递归函数","4.14.2.1 递归函数",[14,87620,87621],{},[1727,87622],{"alt":23,"src":87623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[363,87625,87626],{},[366,87627,87628],{},"死递归占溢出：",[18,87630,87632],{"className":53323,"code":87631,"language":53325,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,87633,87634,87642,87650,87654,87659,87663,87668,87676],{"__ignoreMap":23},[28,87635,87636,87638,87640],{"class":30,"line":31},[28,87637,1307],{"class":38},[28,87639,52056],{"class":51556},[28,87641,51563],{"class":38},[28,87643,87644,87646,87648],{"class":30,"line":48},[28,87645,52400],{"class":38},[28,87647,52069],{"class":51556},[28,87649,51563],{"class":38},[28,87651,87652],{"class":30,"line":84},[28,87653,77399],{"class":38},[28,87655,87656],{"class":30,"line":91},[28,87657,87658],{"class":38},"      fn()\n",[28,87660,87661],{"class":30,"line":97},[28,87662,2449],{"class":38},[28,87664,87665],{"class":30,"line":103},[28,87666,87667],{"class":38},"    fn()\n",[28,87669,87670,87672,87674],{"class":30,"line":109},[28,87671,52673],{"class":38},[28,87673,52069],{"class":51556},[28,87675,51563],{"class":38},[28,87677,87678,87680,87682],{"class":30,"line":118},[28,87679,52041],{"class":38},[28,87681,52056],{"class":51556},[28,87683,51563],{"class":38},[363,87685,87686],{"start":48},[366,87687,87688],{},"递归函数要加判断条件：",[14,87690,87691],{},[1727,87692],{"alt":23,"src":87693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[363,87695,87696],{"start":84},[366,87697,87698],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[18,87700,87702],{"className":50889,"code":87701,"language":50891,"meta":23,"style":23},"\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",[25,87703,87704,87714,87728,87732,87740,87754,87774,87786,87794,87798,87806,87818,87826,87834,87859,87871,87875,87882,87890,87898,87902],{"__ignoreMap":23},[28,87705,87706,87708,87710,87712],{"class":30,"line":31},[28,87707,51553],{"class":38},[28,87709,51557],{"class":51556},[28,87711,51560],{"class":2225},[28,87713,51563],{"class":38},[28,87715,87716,87718,87720,87722,87724,87726],{"class":30,"line":48},[28,87717,1307],{"class":38},[28,87719,50891],{"class":51556},[28,87721,51572],{"class":2225},[28,87723,54],{"class":38},[28,87725,51577],{"class":127},[28,87727,51563],{"class":38},[28,87729,87730],{"class":30,"line":84},[28,87731,2662],{"emptyLinePlaceholder":336},[28,87733,87734,87736,87738],{"class":30,"line":91},[28,87735,1307],{"class":38},[28,87737,51590],{"class":51556},[28,87739,51563],{"class":38},[28,87741,87742,87744,87746,87748,87750,87752],{"class":30,"line":97},[28,87743,52400],{"class":38},[28,87745,51600],{"class":51556},[28,87747,51603],{"class":2225},[28,87749,54],{"class":38},[28,87751,51608],{"class":127},[28,87753,51563],{"class":38},[28,87755,87756,87758,87760,87762,87764,87766,87768,87770,87772],{"class":30,"line":103},[28,87757,52400],{"class":38},[28,87759,51600],{"class":51556},[28,87761,15182],{"class":2225},[28,87763,54],{"class":38},[28,87765,51647],{"class":127},[28,87767,51627],{"class":2225},[28,87769,54],{"class":38},[28,87771,51654],{"class":127},[28,87773,51563],{"class":38},[28,87775,87776,87778,87780,87782,87784],{"class":30,"line":109},[28,87777,52400],{"class":38},[28,87779,51663],{"class":51556},[28,87781,51666],{"class":38},[28,87783,51663],{"class":51556},[28,87785,51563],{"class":38},[28,87787,87788,87790,87792],{"class":30,"line":118},[28,87789,52041],{"class":38},[28,87791,51590],{"class":51556},[28,87793,51563],{"class":38},[28,87795,87796],{"class":30,"line":124},[28,87797,2662],{"emptyLinePlaceholder":336},[28,87799,87800,87802,87804],{"class":30,"line":131},[28,87801,1307],{"class":38},[28,87803,52056],{"class":51556},[28,87805,51563],{"class":38},[28,87807,87808,87810,87812,87814,87816],{"class":30,"line":137},[28,87809,52400],{"class":38},[28,87811,51867],{"class":51556},[28,87813,55570],{"class":38},[28,87815,51867],{"class":51556},[28,87817,51563],{"class":38},[28,87819,87820,87822,87824],{"class":30,"line":143},[28,87821,52400],{"class":38},[28,87823,52069],{"class":51556},[28,87825,51563],{"class":38},[28,87827,87828,87830,87832],{"class":30,"line":149},[28,87829,70340],{"class":34},[28,87831,74029],{"class":2225},[28,87833,11115],{"class":38},[28,87835,87836,87838,87840,87842,87844,87846,87848,87850,87852,87854,87857],{"class":30,"line":1890},[28,87837,56027],{"class":38},[28,87839,54655],{"class":2225},[28,87841,413],{"class":38},[28,87843,82187],{"class":127},[28,87845,74505],{"class":38},[28,87847,54],{"class":34},[28,87849,11840],{"class":34},[28,87851,74045],{"class":2225},[28,87853,17523],{"class":38},[28,87855,87856],{"class":2225},"toLocaleString",[28,87858,2238],{"class":38},[28,87860,87861,87864,87867,87869],{"class":30,"line":1904},[28,87862,87863],{"class":2225},"      setTimeout",[28,87865,87866],{"class":38},"(getTime, ",[28,87868,6672],{"class":60},[28,87870,81],{"class":38},[28,87872,87873],{"class":30,"line":1909},[28,87874,2449],{"class":38},[28,87876,87877,87880],{"class":30,"line":1915},[28,87878,87879],{"class":2225},"    getTime",[28,87881,2238],{"class":38},[28,87883,87884,87886,87888],{"class":30,"line":1936},[28,87885,52673],{"class":38},[28,87887,52069],{"class":51556},[28,87889,51563],{"class":38},[28,87891,87892,87894,87896],{"class":30,"line":1941},[28,87893,52041],{"class":38},[28,87895,52056],{"class":51556},[28,87897,51563],{"class":38},[28,87899,87900],{"class":30,"line":1955},[28,87901,2662],{"emptyLinePlaceholder":336},[28,87903,87904,87906,87908],{"class":30,"line":1960},[28,87905,52041],{"class":38},[28,87907,50891],{"class":51556},[28,87909,51563],{"class":38},[14,87911,87912],{},[1727,87913],{"alt":23,"src":87914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[363,87916,87917],{"start":91},[366,87918,87608],{},[14,87920,87921],{},[1727,87922],{"alt":23,"src":87923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87925,87926],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87928,39445],{},[14,87930,87931],{},"这个是简易版的递归函数深拷贝",[14,87933,87934],{},"一定要注意先数组再对象，因为万物皆可对象",[18,87936,87938],{"className":50889,"code":87937,"language":50891,"meta":23,"style":23},"\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",[25,87939,87940,87950,87964,87968,87976,87990,88010,88022,88030,88034,88042,88050,88060,88069,88077,88093,88097,88105,88109,88113,88125,88130,88149,88165,88170,88175,88180,88195,88200,88205,88214,88222,88239,88247,88253,88261,88266,88271,88280,88284,88288,88292,88303,88312,88322,88336,88346,88354,88362,88370,88374],{"__ignoreMap":23},[28,87941,87942,87944,87946,87948],{"class":30,"line":31},[28,87943,51553],{"class":38},[28,87945,51557],{"class":51556},[28,87947,51560],{"class":2225},[28,87949,51563],{"class":38},[28,87951,87952,87954,87956,87958,87960,87962],{"class":30,"line":48},[28,87953,1307],{"class":38},[28,87955,50891],{"class":51556},[28,87957,51572],{"class":2225},[28,87959,54],{"class":38},[28,87961,51577],{"class":127},[28,87963,51563],{"class":38},[28,87965,87966],{"class":30,"line":84},[28,87967,2662],{"emptyLinePlaceholder":336},[28,87969,87970,87972,87974],{"class":30,"line":91},[28,87971,1307],{"class":38},[28,87973,51590],{"class":51556},[28,87975,51563],{"class":38},[28,87977,87978,87980,87982,87984,87986,87988],{"class":30,"line":97},[28,87979,52400],{"class":38},[28,87981,51600],{"class":51556},[28,87983,51603],{"class":2225},[28,87985,54],{"class":38},[28,87987,51608],{"class":127},[28,87989,51563],{"class":38},[28,87991,87992,87994,87996,87998,88000,88002,88004,88006,88008],{"class":30,"line":103},[28,87993,52400],{"class":38},[28,87995,51600],{"class":51556},[28,87997,15182],{"class":2225},[28,87999,54],{"class":38},[28,88001,51647],{"class":127},[28,88003,51627],{"class":2225},[28,88005,54],{"class":38},[28,88007,51654],{"class":127},[28,88009,51563],{"class":38},[28,88011,88012,88014,88016,88018,88020],{"class":30,"line":109},[28,88013,52400],{"class":38},[28,88015,51663],{"class":51556},[28,88017,51666],{"class":38},[28,88019,51663],{"class":51556},[28,88021,51563],{"class":38},[28,88023,88024,88026,88028],{"class":30,"line":118},[28,88025,52041],{"class":38},[28,88027,51590],{"class":51556},[28,88029,51563],{"class":38},[28,88031,88032],{"class":30,"line":124},[28,88033,2662],{"emptyLinePlaceholder":336},[28,88035,88036,88038,88040],{"class":30,"line":131},[28,88037,1307],{"class":38},[28,88039,52056],{"class":51556},[28,88041,51563],{"class":38},[28,88043,88044,88046,88048],{"class":30,"line":137},[28,88045,52400],{"class":38},[28,88047,52069],{"class":51556},[28,88049,51563],{"class":38},[28,88051,88052,88054,88056,88058],{"class":30,"line":143},[28,88053,11483],{"class":34},[28,88055,70227],{"class":60},[28,88057,13826],{"class":34},[28,88059,15834],{"class":38},[28,88061,88062,88064,88067],{"class":30,"line":149},[28,88063,71872],{"class":38},[28,88065,88066],{"class":127},"'pink'",[28,88068,31723],{"class":38},[28,88070,88071,88073,88075],{"class":30,"line":1890},[28,88072,71882],{"class":38},[28,88074,1048],{"class":60},[28,88076,31723],{"class":38},[28,88078,88079,88082,88085,88087,88090],{"class":30,"line":1904},[28,88080,88081],{"class":38},"      hobby: [",[28,88083,88084],{"class":127},"'乒乓球'",[28,88086,12697],{"class":38},[28,88088,88089],{"class":127},"'足球'",[28,88091,88092],{"class":38},"],\n",[28,88094,88095],{"class":30,"line":1909},[28,88096,78128],{"class":38},[28,88098,88099,88102],{"class":30,"line":1915},[28,88100,88101],{"class":38},"        baby: ",[28,88103,88104],{"class":127},"'小pink'\n",[28,88106,88107],{"class":30,"line":1936},[28,88108,52654],{"class":38},[28,88110,88111],{"class":30,"line":1941},[28,88112,2449],{"class":38},[28,88114,88115,88117,88120,88122],{"class":30,"line":1955},[28,88116,11483],{"class":34},[28,88118,88119],{"class":60}," o",[28,88121,13826],{"class":34},[28,88123,88124],{"class":38}," {}\n",[28,88126,88127],{"class":30,"line":1960},[28,88128,88129],{"class":87},"    \u002F\u002F 拷贝函数\n",[28,88131,88132,88134,88137,88139,88142,88144,88147],{"class":30,"line":1989},[28,88133,70340],{"class":34},[28,88135,88136],{"class":2225}," deepCopy",[28,88138,413],{"class":38},[28,88140,88141],{"class":5478},"newObj",[28,88143,12697],{"class":38},[28,88145,88146],{"class":5478},"oldObj",[28,88148,12704],{"class":38},[28,88150,88151,88153,88155,88157,88160,88162],{"class":30,"line":1994},[28,88152,52540],{"class":34},[28,88154,1920],{"class":38},[28,88156,52103],{"class":34},[28,88158,88159],{"class":38}," k ",[28,88161,26306],{"class":34},[28,88163,88164],{"class":38}," oldObj) {\n",[28,88166,88167],{"class":30,"line":2011},[28,88168,88169],{"class":87},"        \u002F\u002F 处理数组的问题\n",[28,88171,88172],{"class":30,"line":2016},[28,88173,88174],{"class":87},"        \u002F\u002F 判断是否属于数组\n",[28,88176,88177],{"class":30,"line":2021},[28,88178,88179],{"class":87},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[28,88181,88182,88184,88187,88190,88193],{"class":30,"line":2026},[28,88183,2759],{"class":34},[28,88185,88186],{"class":38}," (oldObj[k] ",[28,88188,88189],{"class":34},"instanceof",[28,88191,88192],{"class":2225}," Array",[28,88194,12704],{"class":38},[28,88196,88197],{"class":30,"line":2040},[28,88198,88199],{"class":87},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[28,88201,88202],{"class":30,"line":2045},[28,88203,88204],{"class":87},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[28,88206,88207,88210,88212],{"class":30,"line":2839},[28,88208,88209],{"class":38},"          newObj[k] ",[28,88211,54],{"class":34},[28,88213,52094],{"class":38},[28,88215,88216,88219],{"class":30,"line":2853},[28,88217,88218],{"class":2225},"          deepCopy",[28,88220,88221],{"class":38},"(newObj[k], oldObj[k])\n",[28,88223,88224,88226,88228,88230,88232,88234,88237],{"class":30,"line":2861},[28,88225,80336],{"class":38},[28,88227,1963],{"class":34},[28,88229,1966],{"class":34},[28,88231,88186],{"class":38},[28,88233,88189],{"class":34},[28,88235,88236],{"class":2225}," Object",[28,88238,12704],{"class":38},[28,88240,88241,88243,88245],{"class":30,"line":2866},[28,88242,88209],{"class":38},[28,88244,54],{"class":34},[28,88246,88124],{"class":38},[28,88248,88249,88251],{"class":30,"line":2872},[28,88250,88218],{"class":2225},[28,88252,88221],{"class":38},[28,88254,88255,88257,88259],{"class":30,"line":2878},[28,88256,80336],{"class":38},[28,88258,1963],{"class":34},[28,88260,15834],{"class":38},[28,88262,88263],{"class":30,"line":2883},[28,88264,88265],{"class":87},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[28,88267,88268],{"class":30,"line":8210},[28,88269,88270],{"class":87},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[28,88272,88273,88275,88277],{"class":30,"line":8234},[28,88274,88209],{"class":38},[28,88276,54],{"class":34},[28,88278,88279],{"class":38}," oldObj[k]\n",[28,88281,88282],{"class":30,"line":8239},[28,88283,2791],{"class":38},[28,88285,88286],{"class":30,"line":8245},[28,88287,52654],{"class":38},[28,88289,88290],{"class":30,"line":8272},[28,88291,2449],{"class":38},[28,88293,88294,88297,88300],{"class":30,"line":8277},[28,88295,88296],{"class":2225},"    deepCopy",[28,88298,88299],{"class":38},"(o, obj) ",[28,88301,88302],{"class":87},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[28,88304,88305,88307,88309],{"class":30,"line":8283},[28,88306,74009],{"class":38},[28,88308,58503],{"class":2225},[28,88310,88311],{"class":38},"(o)\n",[28,88313,88314,88317,88319],{"class":30,"line":8295},[28,88315,88316],{"class":38},"    o.age ",[28,88318,54],{"class":34},[28,88320,88321],{"class":60}," 20\n",[28,88323,88324,88327,88329,88331,88333],{"class":30,"line":8307},[28,88325,88326],{"class":38},"    o.hobby[",[28,88328,244],{"class":60},[28,88330,4705],{"class":38},[28,88332,54],{"class":34},[28,88334,88335],{"class":127}," '篮球'\n",[28,88337,88338,88341,88343],{"class":30,"line":8319},[28,88339,88340],{"class":38},"    o.family ",[28,88342,54],{"class":34},[28,88344,88345],{"class":127}," '老pink'\n",[28,88347,88348,88350,88352],{"class":30,"line":9978},[28,88349,74009],{"class":38},[28,88351,58503],{"class":2225},[28,88353,70292],{"class":38},[28,88355,88356,88358,88360],{"class":30,"line":10003},[28,88357,52673],{"class":38},[28,88359,52069],{"class":51556},[28,88361,51563],{"class":38},[28,88363,88364,88366,88368],{"class":30,"line":10026},[28,88365,52041],{"class":38},[28,88367,52056],{"class":51556},[28,88369,51563],{"class":38},[28,88371,88372],{"class":30,"line":10050},[28,88373,2662],{"emptyLinePlaceholder":336},[28,88375,88376,88378,88380],{"class":30,"line":10055},[28,88377,52041],{"class":38},[28,88379,50891],{"class":51556},[28,88381,51563],{"class":38},[14,88383,88384],{},[1727,88385],{"alt":23,"src":88386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22260,88388,88390,88391],{"id":88389},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[555,88392,88393],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88395,88396],{},[51,88397,88398],{"href":88398,"rel":88399},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24127],[14,88401,88402],{},"lodash里边的方法都要加上一个下划线_",[14,88404,88405],{},"_.cloneDeep()",[18,88407,88409],{"className":50889,"code":88408,"language":50891,"meta":23,"style":23},"\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",[25,88410,88411,88421,88435,88439,88447,88461,88481,88493,88501,88505,88513,88518,88537,88545,88555,88563,88571,88583,88587,88593,88597,88601,88617,88625,88634,88642,88650,88658,88662],{"__ignoreMap":23},[28,88412,88413,88415,88417,88419],{"class":30,"line":31},[28,88414,51553],{"class":38},[28,88416,51557],{"class":51556},[28,88418,51560],{"class":2225},[28,88420,51563],{"class":38},[28,88422,88423,88425,88427,88429,88431,88433],{"class":30,"line":48},[28,88424,1307],{"class":38},[28,88426,50891],{"class":51556},[28,88428,51572],{"class":2225},[28,88430,54],{"class":38},[28,88432,51577],{"class":127},[28,88434,51563],{"class":38},[28,88436,88437],{"class":30,"line":84},[28,88438,2662],{"emptyLinePlaceholder":336},[28,88440,88441,88443,88445],{"class":30,"line":91},[28,88442,1307],{"class":38},[28,88444,51590],{"class":51556},[28,88446,51563],{"class":38},[28,88448,88449,88451,88453,88455,88457,88459],{"class":30,"line":97},[28,88450,52400],{"class":38},[28,88452,51600],{"class":51556},[28,88454,51603],{"class":2225},[28,88456,54],{"class":38},[28,88458,51608],{"class":127},[28,88460,51563],{"class":38},[28,88462,88463,88465,88467,88469,88471,88473,88475,88477,88479],{"class":30,"line":103},[28,88464,52400],{"class":38},[28,88466,51600],{"class":51556},[28,88468,15182],{"class":2225},[28,88470,54],{"class":38},[28,88472,51647],{"class":127},[28,88474,51627],{"class":2225},[28,88476,54],{"class":38},[28,88478,51654],{"class":127},[28,88480,51563],{"class":38},[28,88482,88483,88485,88487,88489,88491],{"class":30,"line":109},[28,88484,52400],{"class":38},[28,88486,51663],{"class":51556},[28,88488,51666],{"class":38},[28,88490,51663],{"class":51556},[28,88492,51563],{"class":38},[28,88494,88495,88497,88499],{"class":30,"line":118},[28,88496,52041],{"class":38},[28,88498,51590],{"class":51556},[28,88500,51563],{"class":38},[28,88502,88503],{"class":30,"line":124},[28,88504,2662],{"emptyLinePlaceholder":336},[28,88506,88507,88509,88511],{"class":30,"line":131},[28,88508,1307],{"class":38},[28,88510,52056],{"class":51556},[28,88512,51563],{"class":38},[28,88514,88515],{"class":30,"line":137},[28,88516,88517],{"class":87},"  \u003C!-- 先引用这个库 -->\n",[28,88519,88520,88522,88524,88526,88528,88531,88533,88535],{"class":30,"line":143},[28,88521,52400],{"class":38},[28,88523,52069],{"class":51556},[28,88525,55495],{"class":2225},[28,88527,54],{"class":38},[28,88529,88530],{"class":127},"\"lodash.min.js\"",[28,88532,55570],{"class":38},[28,88534,52069],{"class":51556},[28,88536,51563],{"class":38},[28,88538,88539,88541,88543],{"class":30,"line":149},[28,88540,52400],{"class":38},[28,88542,52069],{"class":51556},[28,88544,51563],{"class":38},[28,88546,88547,88549,88551,88553],{"class":30,"line":1890},[28,88548,11483],{"class":34},[28,88550,70227],{"class":60},[28,88552,13826],{"class":34},[28,88554,15834],{"class":38},[28,88556,88557,88559,88561],{"class":30,"line":1904},[28,88558,71872],{"class":38},[28,88560,88066],{"class":127},[28,88562,31723],{"class":38},[28,88564,88565,88567,88569],{"class":30,"line":1909},[28,88566,71882],{"class":38},[28,88568,1048],{"class":60},[28,88570,31723],{"class":38},[28,88572,88573,88575,88577,88579,88581],{"class":30,"line":1915},[28,88574,88081],{"class":38},[28,88576,88084],{"class":127},[28,88578,12697],{"class":38},[28,88580,88089],{"class":127},[28,88582,88092],{"class":38},[28,88584,88585],{"class":30,"line":1936},[28,88586,78128],{"class":38},[28,88588,88589,88591],{"class":30,"line":1941},[28,88590,88101],{"class":38},[28,88592,88104],{"class":127},[28,88594,88595],{"class":30,"line":1955},[28,88596,52654],{"class":38},[28,88598,88599],{"class":30,"line":1960},[28,88600,2449],{"class":38},[28,88602,88603,88605,88607,88609,88612,88615],{"class":30,"line":1989},[28,88604,11483],{"class":34},[28,88606,88119],{"class":60},[28,88608,13826],{"class":34},[28,88610,88611],{"class":38}," _.",[28,88613,88614],{"class":2225},"cloneDeep",[28,88616,70292],{"class":38},[28,88618,88619,88621,88623],{"class":30,"line":1994},[28,88620,74009],{"class":38},[28,88622,58503],{"class":2225},[28,88624,88311],{"class":38},[28,88626,88627,88630,88632],{"class":30,"line":2011},[28,88628,88629],{"class":38},"    o.family.baby ",[28,88631,54],{"class":34},[28,88633,88345],{"class":127},[28,88635,88636,88638,88640],{"class":30,"line":2016},[28,88637,74009],{"class":38},[28,88639,58503],{"class":2225},[28,88641,70292],{"class":38},[28,88643,88644,88646,88648],{"class":30,"line":2021},[28,88645,52673],{"class":38},[28,88647,52069],{"class":51556},[28,88649,51563],{"class":38},[28,88651,88652,88654,88656],{"class":30,"line":2026},[28,88653,52041],{"class":38},[28,88655,52056],{"class":51556},[28,88657,51563],{"class":38},[28,88659,88660],{"class":30,"line":2040},[28,88661,2662],{"emptyLinePlaceholder":336},[28,88663,88664,88666,88668],{"class":30,"line":2045},[28,88665,52041],{"class":38},[28,88667,50891],{"class":51556},[28,88669,51563],{"class":38},[14,88671,88672],{},[1727,88673],{"alt":23,"src":88674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22260,88676,88678],{"id":88677},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[18,88680,88682],{"className":50889,"code":88681,"language":50891,"meta":23,"style":23},"\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",[25,88683,88684,88694,88708,88712,88720,88734,88754,88766,88774,88778,88786,88794,88804,88812,88820,88832,88836,88842,88846,88850,88855,88860,88865,88891,88899,88908,88916,88924,88932,88936],{"__ignoreMap":23},[28,88685,88686,88688,88690,88692],{"class":30,"line":31},[28,88687,51553],{"class":38},[28,88689,51557],{"class":51556},[28,88691,51560],{"class":2225},[28,88693,51563],{"class":38},[28,88695,88696,88698,88700,88702,88704,88706],{"class":30,"line":48},[28,88697,1307],{"class":38},[28,88699,50891],{"class":51556},[28,88701,51572],{"class":2225},[28,88703,54],{"class":38},[28,88705,51577],{"class":127},[28,88707,51563],{"class":38},[28,88709,88710],{"class":30,"line":84},[28,88711,2662],{"emptyLinePlaceholder":336},[28,88713,88714,88716,88718],{"class":30,"line":91},[28,88715,1307],{"class":38},[28,88717,51590],{"class":51556},[28,88719,51563],{"class":38},[28,88721,88722,88724,88726,88728,88730,88732],{"class":30,"line":97},[28,88723,52400],{"class":38},[28,88725,51600],{"class":51556},[28,88727,51603],{"class":2225},[28,88729,54],{"class":38},[28,88731,51608],{"class":127},[28,88733,51563],{"class":38},[28,88735,88736,88738,88740,88742,88744,88746,88748,88750,88752],{"class":30,"line":103},[28,88737,52400],{"class":38},[28,88739,51600],{"class":51556},[28,88741,15182],{"class":2225},[28,88743,54],{"class":38},[28,88745,51647],{"class":127},[28,88747,51627],{"class":2225},[28,88749,54],{"class":38},[28,88751,51654],{"class":127},[28,88753,51563],{"class":38},[28,88755,88756,88758,88760,88762,88764],{"class":30,"line":109},[28,88757,52400],{"class":38},[28,88759,51663],{"class":51556},[28,88761,51666],{"class":38},[28,88763,51663],{"class":51556},[28,88765,51563],{"class":38},[28,88767,88768,88770,88772],{"class":30,"line":118},[28,88769,52041],{"class":38},[28,88771,51590],{"class":51556},[28,88773,51563],{"class":38},[28,88775,88776],{"class":30,"line":124},[28,88777,2662],{"emptyLinePlaceholder":336},[28,88779,88780,88782,88784],{"class":30,"line":131},[28,88781,1307],{"class":38},[28,88783,52056],{"class":51556},[28,88785,51563],{"class":38},[28,88787,88788,88790,88792],{"class":30,"line":137},[28,88789,52400],{"class":38},[28,88791,52069],{"class":51556},[28,88793,51563],{"class":38},[28,88795,88796,88798,88800,88802],{"class":30,"line":143},[28,88797,11483],{"class":34},[28,88799,70227],{"class":60},[28,88801,13826],{"class":34},[28,88803,15834],{"class":38},[28,88805,88806,88808,88810],{"class":30,"line":149},[28,88807,71872],{"class":38},[28,88809,88066],{"class":127},[28,88811,31723],{"class":38},[28,88813,88814,88816,88818],{"class":30,"line":1890},[28,88815,71882],{"class":38},[28,88817,1048],{"class":60},[28,88819,31723],{"class":38},[28,88821,88822,88824,88826,88828,88830],{"class":30,"line":1904},[28,88823,88081],{"class":38},[28,88825,88084],{"class":127},[28,88827,12697],{"class":38},[28,88829,88089],{"class":127},[28,88831,88092],{"class":38},[28,88833,88834],{"class":30,"line":1909},[28,88835,78128],{"class":38},[28,88837,88838,88840],{"class":30,"line":1915},[28,88839,88101],{"class":38},[28,88841,88104],{"class":127},[28,88843,88844],{"class":30,"line":1936},[28,88845,52654],{"class":38},[28,88847,88848],{"class":30,"line":1941},[28,88849,2449],{"class":38},[28,88851,88852],{"class":30,"line":1955},[28,88853,88854],{"class":87},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[28,88856,88857],{"class":30,"line":1960},[28,88858,88859],{"class":87},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[28,88861,88862],{"class":30,"line":1989},[28,88863,88864],{"class":87},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[28,88866,88867,88869,88871,88873,88876,88878,88881,88883,88885,88887,88889],{"class":30,"line":1994},[28,88868,11483],{"class":34},[28,88870,88119],{"class":60},[28,88872,13826],{"class":34},[28,88874,88875],{"class":60}," JSON",[28,88877,956],{"class":38},[28,88879,88880],{"class":2225},"parse",[28,88882,413],{"class":38},[28,88884,71920],{"class":60},[28,88886,956],{"class":38},[28,88888,71925],{"class":2225},[28,88890,71928],{"class":38},[28,88892,88893,88895,88897],{"class":30,"line":2011},[28,88894,74009],{"class":38},[28,88896,58503],{"class":2225},[28,88898,88311],{"class":38},[28,88900,88901,88903,88905],{"class":30,"line":2016},[28,88902,88629],{"class":38},[28,88904,54],{"class":34},[28,88906,88907],{"class":127}," '123'\n",[28,88909,88910,88912,88914],{"class":30,"line":2021},[28,88911,74009],{"class":38},[28,88913,58503],{"class":2225},[28,88915,70292],{"class":38},[28,88917,88918,88920,88922],{"class":30,"line":2026},[28,88919,52673],{"class":38},[28,88921,52069],{"class":51556},[28,88923,51563],{"class":38},[28,88925,88926,88928,88930],{"class":30,"line":2040},[28,88927,52041],{"class":38},[28,88929,52056],{"class":51556},[28,88931,51563],{"class":38},[28,88933,88934],{"class":30,"line":2045},[28,88935,2662],{"emptyLinePlaceholder":336},[28,88937,88938,88940,88942],{"class":30,"line":2839},[28,88939,52041],{"class":38},[28,88941,50891],{"class":51556},[28,88943,51563],{"class":38},[14,88945,88946],{},[1727,88947],{"alt":23,"src":88948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[351,88950,88952],{"id":88951},"_415-异常处理","4.15 异常处理",[363,88954,88955],{},[366,88956,88957],{},"throw抛异常",[14,88959,88960],{},[1727,88961],{"alt":23,"src":88962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[363,88964,88965],{"start":48},[366,88966,88967],{},"try\u002Fcatch 捕获错误信息",[14,88969,88970],{},[1727,88971],{"alt":23,"src":88972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[18,88974,88976],{"className":50889,"code":88975,"language":50891,"meta":23,"style":23},"\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",[25,88977,88978,88988,89002,89006,89014,89028,89048,89060,89068,89072,89080,89092,89100,89109,89116,89121,89140,89149,89160,89165,89175,89180,89185,89190,89207,89211,89216,89223,89235,89239,89251,89255,89259,89264,89269,89276,89284,89292,89296],{"__ignoreMap":23},[28,88979,88980,88982,88984,88986],{"class":30,"line":31},[28,88981,51553],{"class":38},[28,88983,51557],{"class":51556},[28,88985,51560],{"class":2225},[28,88987,51563],{"class":38},[28,88989,88990,88992,88994,88996,88998,89000],{"class":30,"line":48},[28,88991,1307],{"class":38},[28,88993,50891],{"class":51556},[28,88995,51572],{"class":2225},[28,88997,54],{"class":38},[28,88999,51577],{"class":127},[28,89001,51563],{"class":38},[28,89003,89004],{"class":30,"line":84},[28,89005,2662],{"emptyLinePlaceholder":336},[28,89007,89008,89010,89012],{"class":30,"line":91},[28,89009,1307],{"class":38},[28,89011,51590],{"class":51556},[28,89013,51563],{"class":38},[28,89015,89016,89018,89020,89022,89024,89026],{"class":30,"line":97},[28,89017,52400],{"class":38},[28,89019,51600],{"class":51556},[28,89021,51603],{"class":2225},[28,89023,54],{"class":38},[28,89025,51608],{"class":127},[28,89027,51563],{"class":38},[28,89029,89030,89032,89034,89036,89038,89040,89042,89044,89046],{"class":30,"line":103},[28,89031,52400],{"class":38},[28,89033,51600],{"class":51556},[28,89035,15182],{"class":2225},[28,89037,54],{"class":38},[28,89039,51647],{"class":127},[28,89041,51627],{"class":2225},[28,89043,54],{"class":38},[28,89045,51654],{"class":127},[28,89047,51563],{"class":38},[28,89049,89050,89052,89054,89056,89058],{"class":30,"line":109},[28,89051,52400],{"class":38},[28,89053,51663],{"class":51556},[28,89055,51666],{"class":38},[28,89057,51663],{"class":51556},[28,89059,51563],{"class":38},[28,89061,89062,89064,89066],{"class":30,"line":118},[28,89063,52041],{"class":38},[28,89065,51590],{"class":51556},[28,89067,51563],{"class":38},[28,89069,89070],{"class":30,"line":124},[28,89071,2662],{"emptyLinePlaceholder":336},[28,89073,89074,89076,89078],{"class":30,"line":131},[28,89075,1307],{"class":38},[28,89077,52056],{"class":51556},[28,89079,51563],{"class":38},[28,89081,89082,89084,89086,89088,89090],{"class":30,"line":137},[28,89083,52400],{"class":38},[28,89085,14],{"class":51556},[28,89087,53750],{"class":38},[28,89089,14],{"class":51556},[28,89091,51563],{"class":38},[28,89093,89094,89096,89098],{"class":30,"line":143},[28,89095,52400],{"class":38},[28,89097,52069],{"class":51556},[28,89099,51563],{"class":38},[28,89101,89102,89104,89107],{"class":30,"line":149},[28,89103,70340],{"class":34},[28,89105,89106],{"class":2225}," fn",[28,89108,11115],{"class":38},[28,89110,89111,89114],{"class":30,"line":1890},[28,89112,89113],{"class":34},"      try",[28,89115,15834],{"class":38},[28,89117,89118],{"class":30,"line":1904},[28,89119,89120],{"class":87},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[28,89122,89123,89125,89127,89129,89131,89133,89135,89138],{"class":30,"line":1909},[28,89124,61526],{"class":34},[28,89126,7087],{"class":60},[28,89128,13826],{"class":34},[28,89130,54652],{"class":38},[28,89132,54655],{"class":2225},[28,89134,413],{"class":38},[28,89136,89137],{"class":127},"'.p'",[28,89139,81],{"class":38},[28,89141,89142,89145,89147],{"class":30,"line":1915},[28,89143,89144],{"class":38},"        p.style.color ",[28,89146,54],{"class":34},[28,89148,67307],{"class":127},[28,89150,89151,89154,89157],{"class":30,"line":1936},[28,89152,89153],{"class":38},"      } ",[28,89155,89156],{"class":34},"catch",[28,89158,89159],{"class":38}," (err) {\n",[28,89161,89162],{"class":30,"line":1941},[28,89163,89164],{"class":87},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[28,89166,89167,89170,89172],{"class":30,"line":1955},[28,89168,89169],{"class":38},"        console.",[28,89171,58503],{"class":2225},[28,89173,89174],{"class":38},"(err.message)\n",[28,89176,89177],{"class":30,"line":1960},[28,89178,89179],{"class":87},"        \u002F\u002F 想要中断程序，需要加return\n",[28,89181,89182],{"class":30,"line":1989},[28,89183,89184],{"class":87},"        \u002F\u002F return\n",[28,89186,89187],{"class":30,"line":1994},[28,89188,89189],{"class":87},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[28,89191,89192,89195,89197,89200,89202,89205],{"class":30,"line":2011},[28,89193,89194],{"class":34},"        throw",[28,89196,11840],{"class":34},[28,89198,89199],{"class":2225}," Error",[28,89201,413],{"class":38},[28,89203,89204],{"class":127},"'你看看，选择器错误了吧'",[28,89206,81],{"class":38},[28,89208,89209],{"class":30,"line":2016},[28,89210,52654],{"class":38},[28,89212,89213],{"class":30,"line":2021},[28,89214,89215],{"class":87},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[28,89217,89218,89221],{"class":30,"line":2026},[28,89219,89220],{"class":34},"      finally",[28,89222,15834],{"class":38},[28,89224,89225,89228,89230,89233],{"class":30,"line":2040},[28,89226,89227],{"class":2225},"        alert",[28,89229,413],{"class":38},[28,89231,89232],{"class":127},"'弹出对话框'",[28,89234,81],{"class":38},[28,89236,89237],{"class":30,"line":2045},[28,89238,52654],{"class":38},[28,89240,89241,89243,89245,89247,89249],{"class":30,"line":2839},[28,89242,58500],{"class":38},[28,89244,58503],{"class":2225},[28,89246,413],{"class":38},[28,89248,871],{"class":60},[28,89250,81],{"class":38},[28,89252,89253],{"class":30,"line":2853},[28,89254,2662],{"emptyLinePlaceholder":336},[28,89256,89257],{"class":30,"line":2861},[28,89258,2449],{"class":38},[28,89260,89261],{"class":30,"line":2866},[28,89262,89263],{"class":87},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[28,89265,89266],{"class":30,"line":2872},[28,89267,89268],{"class":87},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[28,89270,89271,89274],{"class":30,"line":2878},[28,89272,89273],{"class":2225},"    fn",[28,89275,2238],{"class":38},[28,89277,89278,89280,89282],{"class":30,"line":2883},[28,89279,52673],{"class":38},[28,89281,52069],{"class":51556},[28,89283,51563],{"class":38},[28,89285,89286,89288,89290],{"class":30,"line":8210},[28,89287,52041],{"class":38},[28,89289,52056],{"class":51556},[28,89291,51563],{"class":38},[28,89293,89294],{"class":30,"line":8234},[28,89295,2662],{"emptyLinePlaceholder":336},[28,89297,89298,89300,89302],{"class":30,"line":8239},[28,89299,52041],{"class":38},[28,89301,50891],{"class":51556},[28,89303,51563],{"class":38},[14,89305,89306],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[363,89308,89309],{"start":84},[366,89310,89311],{},"debugger",[14,89313,89314],{},[1727,89315],{"alt":23,"src":89316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89318,89319],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[351,89321,89323],{"id":89322},"_416-处理this","4.16 处理this",[380,89325,89327],{"id":89326},"_4161-this的指向","4.16.1 this的指向",[363,89329,89330],{},[366,89331,89332],{},"普通函数的this",[14,89334,89335],{},[1727,89336],{"alt":23,"src":89337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[363,89339,89340],{"start":48},[366,89341,89342],{},"箭头函数的this",[14,89344,89345],{},[1727,89346],{"alt":23,"src":89347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89349,89350],{},[1727,89351],{"alt":23,"src":89352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89354,89355],{},[1727,89356],{"alt":23,"src":89357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[380,89359,89361],{"id":89360},"_4162-this的改变","4.16.2 this的改变",[14,89363,89364],{},"call() apply() bind()",[363,89366,89367],{},[366,89368,89369],{},"call()",[14,89371,89372],{},[1727,89373],{"alt":23,"src":89374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89376,89377],{},"两个作用：①调用函数；②改变this指向",[18,89379,89381],{"className":53323,"code":89380,"language":53325,"meta":23,"style":23},"\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",[25,89382,89383,89391,89399,89403,89408,89412,89417,89422,89427,89431,89436,89444],{"__ignoreMap":23},[28,89384,89385,89387,89389],{"class":30,"line":31},[28,89386,1307],{"class":38},[28,89388,52056],{"class":51556},[28,89390,51563],{"class":38},[28,89392,89393,89395,89397],{"class":30,"line":48},[28,89394,52400],{"class":38},[28,89396,52069],{"class":51556},[28,89398,51563],{"class":38},[28,89400,89401],{"class":30,"line":84},[28,89402,71779],{"class":38},[28,89404,89405],{"class":30,"line":91},[28,89406,89407],{"class":38},"      uname: 'pink'\n",[28,89409,89410],{"class":30,"line":97},[28,89411,2449],{"class":38},[28,89413,89414],{"class":30,"line":103},[28,89415,89416],{"class":38},"    function fn(x, y) {\n",[28,89418,89419],{"class":30,"line":109},[28,89420,89421],{"class":38},"      console.log(this)  \u002F\u002Fwindow\n",[28,89423,89424],{"class":30,"line":118},[28,89425,89426],{"class":38},"      console.log(x + y)\n",[28,89428,89429],{"class":30,"line":124},[28,89430,2449],{"class":38},[28,89432,89433],{"class":30,"line":131},[28,89434,89435],{"class":38},"    fn.call(obj, 1, 2)\n",[28,89437,89438,89440,89442],{"class":30,"line":137},[28,89439,52673],{"class":38},[28,89441,52069],{"class":51556},[28,89443,51563],{"class":38},[28,89445,89446,89448,89450],{"class":30,"line":143},[28,89447,52041],{"class":38},[28,89449,52056],{"class":51556},[28,89451,51563],{"class":38},[14,89453,89454],{},[1727,89455],{"alt":23,"src":89456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[363,89458,89459],{"start":48},[366,89460,89461],{},"apply()",[14,89463,89464],{},[1727,89465],{"alt":23,"src":89466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89468,89377],{},[14,89470,89471],{},"call传递的是普通参数，而apply必须传递的是数组",[18,89473,89475],{"className":50889,"code":89474,"language":50891,"meta":23,"style":23},"\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",[25,89476,89477,89487,89501,89505,89513,89527,89547,89559,89567,89571,89579,89587,89597,89604,89608,89613,89629,89641,89655,89659,89664,89683,89688,89692,89697,89702,89710,89715,89737,89742,89758,89774,89786,89790,89795,89814,89822,89830,89834],{"__ignoreMap":23},[28,89478,89479,89481,89483,89485],{"class":30,"line":31},[28,89480,51553],{"class":38},[28,89482,51557],{"class":51556},[28,89484,51560],{"class":2225},[28,89486,51563],{"class":38},[28,89488,89489,89491,89493,89495,89497,89499],{"class":30,"line":48},[28,89490,1307],{"class":38},[28,89492,50891],{"class":51556},[28,89494,51572],{"class":2225},[28,89496,54],{"class":38},[28,89498,51577],{"class":127},[28,89500,51563],{"class":38},[28,89502,89503],{"class":30,"line":84},[28,89504,2662],{"emptyLinePlaceholder":336},[28,89506,89507,89509,89511],{"class":30,"line":91},[28,89508,1307],{"class":38},[28,89510,51590],{"class":51556},[28,89512,51563],{"class":38},[28,89514,89515,89517,89519,89521,89523,89525],{"class":30,"line":97},[28,89516,52400],{"class":38},[28,89518,51600],{"class":51556},[28,89520,51603],{"class":2225},[28,89522,54],{"class":38},[28,89524,51608],{"class":127},[28,89526,51563],{"class":38},[28,89528,89529,89531,89533,89535,89537,89539,89541,89543,89545],{"class":30,"line":103},[28,89530,52400],{"class":38},[28,89532,51600],{"class":51556},[28,89534,15182],{"class":2225},[28,89536,54],{"class":38},[28,89538,51647],{"class":127},[28,89540,51627],{"class":2225},[28,89542,54],{"class":38},[28,89544,51654],{"class":127},[28,89546,51563],{"class":38},[28,89548,89549,89551,89553,89555,89557],{"class":30,"line":109},[28,89550,52400],{"class":38},[28,89552,51663],{"class":51556},[28,89554,51666],{"class":38},[28,89556,51663],{"class":51556},[28,89558,51563],{"class":38},[28,89560,89561,89563,89565],{"class":30,"line":118},[28,89562,52041],{"class":38},[28,89564,51590],{"class":51556},[28,89566,51563],{"class":38},[28,89568,89569],{"class":30,"line":124},[28,89570,2662],{"emptyLinePlaceholder":336},[28,89572,89573,89575,89577],{"class":30,"line":131},[28,89574,1307],{"class":38},[28,89576,52056],{"class":51556},[28,89578,51563],{"class":38},[28,89580,89581,89583,89585],{"class":30,"line":137},[28,89582,52400],{"class":38},[28,89584,52069],{"class":51556},[28,89586,51563],{"class":38},[28,89588,89589,89591,89593,89595],{"class":30,"line":143},[28,89590,11483],{"class":34},[28,89592,70227],{"class":60},[28,89594,13826],{"class":34},[28,89596,15834],{"class":38},[28,89598,89599,89601],{"class":30,"line":149},[28,89600,71882],{"class":38},[28,89602,89603],{"class":60},"18\n",[28,89605,89606],{"class":30,"line":1890},[28,89607,2449],{"class":38},[28,89609,89610],{"class":30,"line":1904},[28,89611,89612],{"class":87},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[28,89614,89615,89617,89619,89621,89623,89625,89627],{"class":30,"line":1909},[28,89616,70340],{"class":34},[28,89618,89106],{"class":2225},[28,89620,413],{"class":38},[28,89622,185],{"class":5478},[28,89624,12697],{"class":38},[28,89626,1242],{"class":5478},[28,89628,12704],{"class":38},[28,89630,89631,89633,89635,89637,89639],{"class":30,"line":1915},[28,89632,58500],{"class":38},[28,89634,58503],{"class":2225},[28,89636,413],{"class":38},[28,89638,87249],{"class":60},[28,89640,81],{"class":38},[28,89642,89643,89645,89647,89650,89652],{"class":30,"line":1936},[28,89644,58500],{"class":38},[28,89646,58503],{"class":2225},[28,89648,89649],{"class":38},"(x ",[28,89651,880],{"class":34},[28,89653,89654],{"class":38}," y)\n",[28,89656,89657],{"class":30,"line":1941},[28,89658,2449],{"class":38},[28,89660,89661],{"class":30,"line":1955},[28,89662,89663],{"class":87},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[28,89665,89666,89669,89672,89675,89677,89679,89681],{"class":30,"line":1960},[28,89667,89668],{"class":38},"    fn.",[28,89670,89671],{"class":2225},"apply",[28,89673,89674],{"class":38},"(obj, [",[28,89676,61],{"class":60},[28,89678,12697],{"class":38},[28,89680,211],{"class":60},[28,89682,4919],{"class":38},[28,89684,89685],{"class":30,"line":1989},[28,89686,89687],{"class":87},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[28,89689,89690],{"class":30,"line":1994},[28,89691,2662],{"emptyLinePlaceholder":336},[28,89693,89694],{"class":30,"line":2011},[28,89695,89696],{"class":87},"    \u002F\u002F 使用场景：求数组最大值\n",[28,89698,89699],{"class":30,"line":2016},[28,89700,89701],{"class":87},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[28,89703,89704,89707],{"class":30,"line":2021},[28,89705,89706],{"class":87},"    \u002F\u002F console.log(max)",[28,89708,89709],{"class":87},"   \u002F\u002F3\n",[28,89711,89712],{"class":30,"line":2026},[28,89713,89714],{"class":87},"    \u002F\u002F 指向空或者Math都是可以的\n",[28,89716,89717,89719,89721,89723,89725,89727,89729,89731,89733,89735],{"class":30,"line":2040},[28,89718,11483],{"class":34},[28,89720,57951],{"class":60},[28,89722,13826],{"class":34},[28,89724,52482],{"class":38},[28,89726,713],{"class":60},[28,89728,12697],{"class":38},[28,89730,903],{"class":60},[28,89732,12697],{"class":38},[28,89734,933],{"class":60},[28,89736,33502],{"class":38},[28,89738,89739],{"class":30,"line":2045},[28,89740,89741],{"class":87},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[28,89743,89744,89746,89748,89750,89753,89755],{"class":30,"line":2839},[28,89745,11483],{"class":34},[28,89747,6213],{"class":60},[28,89749,13826],{"class":34},[28,89751,89752],{"class":38}," Math.max.",[28,89754,89671],{"class":2225},[28,89756,89757],{"class":38},"(Math, arr)\n",[28,89759,89760,89762,89765,89767,89770,89772],{"class":30,"line":2853},[28,89761,11483],{"class":34},[28,89763,89764],{"class":60}," min",[28,89766,13826],{"class":34},[28,89768,89769],{"class":38}," Math.min.",[28,89771,89671],{"class":2225},[28,89773,89757],{"class":38},[28,89775,89776,89778,89780,89783],{"class":30,"line":2861},[28,89777,74009],{"class":38},[28,89779,58503],{"class":2225},[28,89781,89782],{"class":38},"(max, min)     ",[28,89784,89785],{"class":87},"\u002F\u002F100,4\n",[28,89787,89788],{"class":30,"line":2866},[28,89789,2662],{"emptyLinePlaceholder":336},[28,89791,89792],{"class":30,"line":2872},[28,89793,89794],{"class":87},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[28,89796,89797,89799,89801,89804,89806,89808,89811],{"class":30,"line":2878},[28,89798,74009],{"class":38},[28,89800,58503],{"class":2225},[28,89802,89803],{"class":38},"(Max.",[28,89805,6277],{"class":2225},[28,89807,413],{"class":38},[28,89809,89810],{"class":34},"...",[28,89812,89813],{"class":38},"arr))\n",[28,89815,89816,89818,89820],{"class":30,"line":2883},[28,89817,52673],{"class":38},[28,89819,52069],{"class":51556},[28,89821,51563],{"class":38},[28,89823,89824,89826,89828],{"class":30,"line":8210},[28,89825,52041],{"class":38},[28,89827,52056],{"class":51556},[28,89829,51563],{"class":38},[28,89831,89832],{"class":30,"line":8234},[28,89833,2662],{"emptyLinePlaceholder":336},[28,89835,89836,89838,89840],{"class":30,"line":8239},[28,89837,52041],{"class":38},[28,89839,50891],{"class":51556},[28,89841,51563],{"class":38},[14,89843,89844],{},[1727,89845],{"alt":23,"src":89846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[363,89848,89849],{"start":84},[366,89850,89851],{},"bind()",[14,89853,89854],{},[1727,89855],{"alt":23,"src":89856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89858,89859],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89861,89862],{},"bind的语法跟call很相似",[18,89864,89866],{"className":53323,"code":89865,"language":53325,"meta":23,"style":23},"\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",[25,89867,89868,89876,89884,89888,89893,89897,89901,89906,89910,89915,89920,89925,89930,89935,89940,89945,89949,89957],{"__ignoreMap":23},[28,89869,89870,89872,89874],{"class":30,"line":31},[28,89871,1307],{"class":38},[28,89873,52056],{"class":51556},[28,89875,51563],{"class":38},[28,89877,89878,89880,89882],{"class":30,"line":48},[28,89879,52400],{"class":38},[28,89881,52069],{"class":51556},[28,89883,51563],{"class":38},[28,89885,89886],{"class":30,"line":84},[28,89887,71779],{"class":38},[28,89889,89890],{"class":30,"line":91},[28,89891,89892],{"class":38},"      age: 18\n",[28,89894,89895],{"class":30,"line":97},[28,89896,2449],{"class":38},[28,89898,89899],{"class":30,"line":103},[28,89900,77399],{"class":38},[28,89902,89903],{"class":30,"line":109},[28,89904,89905],{"class":38},"      console.log(this)\n",[28,89907,89908],{"class":30,"line":118},[28,89909,2449],{"class":38},[28,89911,89912],{"class":30,"line":124},[28,89913,89914],{"class":38},"    \u002F\u002F 1.bind 不会调用函数\n",[28,89916,89917],{"class":30,"line":131},[28,89918,89919],{"class":38},"    \u002F\u002F 2.bind能改变this的指向\n",[28,89921,89922],{"class":30,"line":137},[28,89923,89924],{"class":38},"    fn.bind()\n",[28,89926,89927],{"class":30,"line":143},[28,89928,89929],{"class":38},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[28,89931,89932],{"class":30,"line":149},[28,89933,89934],{"class":38},"    const fun = fn.bind(obj)\n",[28,89936,89937],{"class":30,"line":1890},[28,89938,89939],{"class":38},"    \u002F\u002F console.log(fun)\n",[28,89941,89942],{"class":30,"line":1904},[28,89943,89944],{"class":38},"    \u002F\u002F 调用,查看this的指向\n",[28,89946,89947],{"class":30,"line":1909},[28,89948,52907],{"class":38},[28,89950,89951,89953,89955],{"class":30,"line":1915},[28,89952,52673],{"class":38},[28,89954,52069],{"class":51556},[28,89956,51563],{"class":38},[28,89958,89959,89961,89963],{"class":30,"line":1936},[28,89960,52041],{"class":38},[28,89962,52056],{"class":51556},[28,89964,51563],{"class":38},[14,89966,89967],{},[1727,89968],{"alt":23,"src":89969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[363,89971,89972],{"start":91},[366,89973,89974],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[18,89976,89978],{"className":53323,"code":89977,"language":53325,"meta":23,"style":23},"\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",[25,89979,89980,89988,90001,90009,90014,90018,90023,90028,90033,90038,90043,90048,90053,90058,90062,90070],{"__ignoreMap":23},[28,89981,89982,89984,89986],{"class":30,"line":31},[28,89983,1307],{"class":38},[28,89985,52056],{"class":51556},[28,89987,51563],{"class":38},[28,89989,89990,89992,89994,89997,89999],{"class":30,"line":48},[28,89991,52400],{"class":38},[28,89993,54143],{"class":51556},[28,89995,89996],{"class":38},">禁用\u003C\u002F",[28,89998,54143],{"class":51556},[28,90000,51563],{"class":38},[28,90002,90003,90005,90007],{"class":30,"line":84},[28,90004,52400],{"class":38},[28,90006,52069],{"class":51556},[28,90008,51563],{"class":38},[28,90010,90011],{"class":30,"line":91},[28,90012,90013],{"class":38},"    const btn = document.querySelector('button')\n",[28,90015,90016],{"class":30,"line":97},[28,90017,59272],{"class":38},[28,90019,90020],{"class":30,"line":103},[28,90021,90022],{"class":38},"      this.disabled = true\n",[28,90024,90025],{"class":30,"line":109},[28,90026,90027],{"class":38},"      \u002F\u002F 定时器是window进行调用的\n",[28,90029,90030],{"class":30,"line":118},[28,90031,90032],{"class":38},"      setTimeout(function () {\n",[28,90034,90035],{"class":30,"line":124},[28,90036,90037],{"class":38},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[28,90039,90040],{"class":30,"line":131},[28,90041,90042],{"class":38},"        this.disabled = false\n",[28,90044,90045],{"class":30,"line":137},[28,90046,90047],{"class":38},"      }.bind(this), 2000)\n",[28,90049,90050],{"class":30,"line":143},[28,90051,90052],{"class":38},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[28,90054,90055],{"class":30,"line":149},[28,90056,90057],{"class":38},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[28,90059,90060],{"class":30,"line":1890},[28,90061,33717],{"class":38},[28,90063,90064,90066,90068],{"class":30,"line":1904},[28,90065,52673],{"class":38},[28,90067,52069],{"class":51556},[28,90069,51563],{"class":38},[28,90071,90072,90074,90076],{"class":30,"line":1909},[28,90073,52041],{"class":38},[28,90075,52056],{"class":51556},[28,90077,51563],{"class":38},[363,90079,90080],{"start":97},[366,90081,22215],{},[14,90083,90084],{},[1727,90085],{"alt":23,"src":90086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[351,90088,90090],{"id":90089},"_417-性能优化","4.17 性能优化",[380,90092,90094],{"id":90093},"_4171-防抖","4.17.1 防抖",[14,90096,90097],{},[1727,90098],{"alt":23,"src":90099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90101,90102],{},[555,90103,90104],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90106,90107],{},"防抖实现方式：",[1404,90109,90110],{},[366,90111,90112],{},"lodash 提供了防抖处理",[14,90114,90115],{},"_.debounce(func,[wait=0],[options={}])",[14,90117,90118],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[18,90120,90122],{"className":50889,"code":90121,"language":50891,"meta":23,"style":23},"\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",[25,90123,90124,90134,90148,90152,90160,90174,90194,90206,90214,90220,90230,90242,90254,90265,90277,90287,90297,90310,90314,90322,90330,90334,90342,90360,90378,90386,90405,90415,90424,90435,90440,90444,90449,90454,90459,90484,90492,90500,90504],{"__ignoreMap":23},[28,90125,90126,90128,90130,90132],{"class":30,"line":31},[28,90127,51553],{"class":38},[28,90129,51557],{"class":51556},[28,90131,51560],{"class":2225},[28,90133,51563],{"class":38},[28,90135,90136,90138,90140,90142,90144,90146],{"class":30,"line":48},[28,90137,1307],{"class":38},[28,90139,50891],{"class":51556},[28,90141,51572],{"class":2225},[28,90143,54],{"class":38},[28,90145,51577],{"class":127},[28,90147,51563],{"class":38},[28,90149,90150],{"class":30,"line":84},[28,90151,2662],{"emptyLinePlaceholder":336},[28,90153,90154,90156,90158],{"class":30,"line":91},[28,90155,1307],{"class":38},[28,90157,51590],{"class":51556},[28,90159,51563],{"class":38},[28,90161,90162,90164,90166,90168,90170,90172],{"class":30,"line":97},[28,90163,52400],{"class":38},[28,90165,51600],{"class":51556},[28,90167,51603],{"class":2225},[28,90169,54],{"class":38},[28,90171,51608],{"class":127},[28,90173,51563],{"class":38},[28,90175,90176,90178,90180,90182,90184,90186,90188,90190,90192],{"class":30,"line":103},[28,90177,52400],{"class":38},[28,90179,51600],{"class":51556},[28,90181,15182],{"class":2225},[28,90183,54],{"class":38},[28,90185,51647],{"class":127},[28,90187,51627],{"class":2225},[28,90189,54],{"class":38},[28,90191,51654],{"class":127},[28,90193,51563],{"class":38},[28,90195,90196,90198,90200,90202,90204],{"class":30,"line":109},[28,90197,52400],{"class":38},[28,90199,51663],{"class":51556},[28,90201,51666],{"class":38},[28,90203,51663],{"class":51556},[28,90205,51563],{"class":38},[28,90207,90208,90210,90212],{"class":30,"line":118},[28,90209,52400],{"class":38},[28,90211,328],{"class":51556},[28,90213,51563],{"class":38},[28,90215,90216,90218],{"class":30,"line":124},[28,90217,55008],{"class":2225},[28,90219,15834],{"class":38},[28,90221,90222,90224,90226,90228],{"class":30,"line":131},[28,90223,72852],{"class":60},[28,90225,51693],{"class":38},[28,90227,60761],{"class":60},[28,90229,1558],{"class":38},[28,90231,90232,90234,90236,90238,90240],{"class":30,"line":137},[28,90233,55027],{"class":60},[28,90235,51693],{"class":38},[28,90237,1984],{"class":60},[28,90239,51748],{"class":34},[28,90241,1558],{"class":38},[28,90243,90244,90246,90248,90250,90252],{"class":30,"line":143},[28,90245,55041],{"class":60},[28,90247,51693],{"class":38},[28,90249,1984],{"class":60},[28,90251,51748],{"class":34},[28,90253,1558],{"class":38},[28,90255,90256,90258,90260,90263],{"class":30,"line":149},[28,90257,55140],{"class":60},[28,90259,51693],{"class":38},[28,90261,90262],{"class":60},"gray",[28,90264,1558],{"class":38},[28,90266,90267,90269,90271,90273,90275],{"class":30,"line":1890},[28,90268,55178],{"class":60},[28,90270,51693],{"class":38},[28,90272,1222],{"class":60},[28,90274,51748],{"class":34},[28,90276,1558],{"class":38},[28,90278,90279,90281,90283,90285],{"class":30,"line":1904},[28,90280,57672],{"class":60},[28,90282,51693],{"class":38},[28,90284,61098],{"class":60},[28,90286,1558],{"class":38},[28,90288,90289,90291,90293,90295],{"class":30,"line":1909},[28,90290,57542],{"class":60},[28,90292,51693],{"class":38},[28,90294,51848],{"class":60},[28,90296,1558],{"class":38},[28,90298,90299,90302,90304,90306,90308],{"class":30,"line":1915},[28,90300,90301],{"class":60},"      padding-top",[28,90303,51693],{"class":38},[28,90305,721],{"class":60},[28,90307,51748],{"class":34},[28,90309,1558],{"class":38},[28,90311,90312],{"class":30,"line":1936},[28,90313,2449],{"class":38},[28,90315,90316,90318,90320],{"class":30,"line":1941},[28,90317,52673],{"class":38},[28,90319,328],{"class":51556},[28,90321,51563],{"class":38},[28,90323,90324,90326,90328],{"class":30,"line":1955},[28,90325,52041],{"class":38},[28,90327,51590],{"class":51556},[28,90329,51563],{"class":38},[28,90331,90332],{"class":30,"line":1960},[28,90333,2662],{"emptyLinePlaceholder":336},[28,90335,90336,90338,90340],{"class":30,"line":1989},[28,90337,1307],{"class":38},[28,90339,52056],{"class":51556},[28,90341,51563],{"class":38},[28,90343,90344,90346,90348,90350,90352,90354,90356,90358],{"class":30,"line":1994},[28,90345,52400],{"class":38},[28,90347,51867],{"class":51556},[28,90349,53742],{"class":2225},[28,90351,54],{"class":38},[28,90353,53747],{"class":127},[28,90355,55570],{"class":38},[28,90357,51867],{"class":51556},[28,90359,51563],{"class":38},[28,90361,90362,90364,90366,90368,90370,90372,90374,90376],{"class":30,"line":2011},[28,90363,52400],{"class":38},[28,90365,52069],{"class":51556},[28,90367,55495],{"class":2225},[28,90369,54],{"class":38},[28,90371,88530],{"class":127},[28,90373,55570],{"class":38},[28,90375,52069],{"class":51556},[28,90377,51563],{"class":38},[28,90379,90380,90382,90384],{"class":30,"line":2016},[28,90381,52400],{"class":38},[28,90383,52069],{"class":51556},[28,90385,51563],{"class":38},[28,90387,90388,90390,90392,90394,90396,90398,90400,90403],{"class":30,"line":2021},[28,90389,11483],{"class":34},[28,90391,87189],{"class":60},[28,90393,13826],{"class":34},[28,90395,54652],{"class":38},[28,90397,54655],{"class":2225},[28,90399,413],{"class":38},[28,90401,90402],{"class":127},"'.box'",[28,90404,81],{"class":38},[28,90406,90407,90409,90411,90413],{"class":30,"line":2026},[28,90408,52475],{"class":34},[28,90410,9700],{"class":38},[28,90412,54],{"class":34},[28,90414,47589],{"class":60},[28,90416,90417,90419,90422],{"class":30,"line":2040},[28,90418,70340],{"class":34},[28,90420,90421],{"class":2225}," mouseMove",[28,90423,11115],{"class":38},[28,90425,90426,90429,90431,90433],{"class":30,"line":2045},[28,90427,90428],{"class":38},"      box.innerHTML ",[28,90430,54],{"class":34},[28,90432,3294],{"class":38},[28,90434,2964],{"class":34},[28,90436,90437],{"class":30,"line":2839},[28,90438,90439],{"class":87},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[28,90441,90442],{"class":30,"line":2853},[28,90443,2449],{"class":38},[28,90445,90446],{"class":30,"line":2861},[28,90447,90448],{"class":87},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[28,90450,90451],{"class":30,"line":2866},[28,90452,90453],{"class":87},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[28,90455,90456],{"class":30,"line":2872},[28,90457,90458],{"class":87},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[28,90460,90461,90464,90466,90468,90471,90474,90477,90480,90482],{"class":30,"line":2878},[28,90462,90463],{"class":38},"    box.",[28,90465,58069],{"class":2225},[28,90467,413],{"class":38},[28,90469,90470],{"class":127},"'mousemove'",[28,90472,90473],{"class":38},", _.",[28,90475,90476],{"class":2225},"debounce",[28,90478,90479],{"class":38},"(mouseMove, ",[28,90481,65330],{"class":60},[28,90483,30757],{"class":38},[28,90485,90486,90488,90490],{"class":30,"line":2883},[28,90487,52673],{"class":38},[28,90489,52069],{"class":51556},[28,90491,51563],{"class":38},[28,90493,90494,90496,90498],{"class":30,"line":8210},[28,90495,52041],{"class":38},[28,90497,52056],{"class":51556},[28,90499,51563],{"class":38},[28,90501,90502],{"class":30,"line":8234},[28,90503,2662],{"emptyLinePlaceholder":336},[28,90505,90506,90508,90510],{"class":30,"line":8239},[28,90507,52041],{"class":38},[28,90509,50891],{"class":51556},[28,90511,51563],{"class":38},[1404,90513,90514],{},[366,90515,90516],{},"手写一个防抖函数来处理",[14,90518,90519],{},"防抖的核心就是利用定时器来实现的：",[14,90521,90522],{},"①声明一个定时器变量",[14,90524,90525],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90527,90528],{},"③如果没有定时器则开启定时器，记得存到变量里面",[18,90530,90532],{"className":50889,"code":90531,"language":50891,"meta":23,"style":23},"\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",[25,90533,90534,90544,90558,90562,90570,90584,90604,90616,90624,90630,90640,90652,90664,90674,90686,90696,90706,90718,90722,90730,90738,90742,90750,90768,90786,90794,90812,90822,90830,90840,90844,90848,90852,90857,90862,90867,90872,90877,90882,90900,90907,90912,90920,90925,90938,90954,90964,90969,90973,90977,90997,91001,91006,91011,91016,91021,91029,91037,91041],{"__ignoreMap":23},[28,90535,90536,90538,90540,90542],{"class":30,"line":31},[28,90537,51553],{"class":38},[28,90539,51557],{"class":51556},[28,90541,51560],{"class":2225},[28,90543,51563],{"class":38},[28,90545,90546,90548,90550,90552,90554,90556],{"class":30,"line":48},[28,90547,1307],{"class":38},[28,90549,50891],{"class":51556},[28,90551,51572],{"class":2225},[28,90553,54],{"class":38},[28,90555,51577],{"class":127},[28,90557,51563],{"class":38},[28,90559,90560],{"class":30,"line":84},[28,90561,2662],{"emptyLinePlaceholder":336},[28,90563,90564,90566,90568],{"class":30,"line":91},[28,90565,1307],{"class":38},[28,90567,51590],{"class":51556},[28,90569,51563],{"class":38},[28,90571,90572,90574,90576,90578,90580,90582],{"class":30,"line":97},[28,90573,52400],{"class":38},[28,90575,51600],{"class":51556},[28,90577,51603],{"class":2225},[28,90579,54],{"class":38},[28,90581,51608],{"class":127},[28,90583,51563],{"class":38},[28,90585,90586,90588,90590,90592,90594,90596,90598,90600,90602],{"class":30,"line":103},[28,90587,52400],{"class":38},[28,90589,51600],{"class":51556},[28,90591,15182],{"class":2225},[28,90593,54],{"class":38},[28,90595,51647],{"class":127},[28,90597,51627],{"class":2225},[28,90599,54],{"class":38},[28,90601,51654],{"class":127},[28,90603,51563],{"class":38},[28,90605,90606,90608,90610,90612,90614],{"class":30,"line":109},[28,90607,52400],{"class":38},[28,90609,51663],{"class":51556},[28,90611,51666],{"class":38},[28,90613,51663],{"class":51556},[28,90615,51563],{"class":38},[28,90617,90618,90620,90622],{"class":30,"line":118},[28,90619,52400],{"class":38},[28,90621,328],{"class":51556},[28,90623,51563],{"class":38},[28,90625,90626,90628],{"class":30,"line":124},[28,90627,55008],{"class":2225},[28,90629,15834],{"class":38},[28,90631,90632,90634,90636,90638],{"class":30,"line":131},[28,90633,72852],{"class":60},[28,90635,51693],{"class":38},[28,90637,60761],{"class":60},[28,90639,1558],{"class":38},[28,90641,90642,90644,90646,90648,90650],{"class":30,"line":137},[28,90643,55027],{"class":60},[28,90645,51693],{"class":38},[28,90647,1984],{"class":60},[28,90649,51748],{"class":34},[28,90651,1558],{"class":38},[28,90653,90654,90656,90658,90660,90662],{"class":30,"line":143},[28,90655,55041],{"class":60},[28,90657,51693],{"class":38},[28,90659,1984],{"class":60},[28,90661,51748],{"class":34},[28,90663,1558],{"class":38},[28,90665,90666,90668,90670,90672],{"class":30,"line":149},[28,90667,55140],{"class":60},[28,90669,51693],{"class":38},[28,90671,90262],{"class":60},[28,90673,1558],{"class":38},[28,90675,90676,90678,90680,90682,90684],{"class":30,"line":1890},[28,90677,55178],{"class":60},[28,90679,51693],{"class":38},[28,90681,1222],{"class":60},[28,90683,51748],{"class":34},[28,90685,1558],{"class":38},[28,90687,90688,90690,90692,90694],{"class":30,"line":1904},[28,90689,57672],{"class":60},[28,90691,51693],{"class":38},[28,90693,61098],{"class":60},[28,90695,1558],{"class":38},[28,90697,90698,90700,90702,90704],{"class":30,"line":1909},[28,90699,57542],{"class":60},[28,90701,51693],{"class":38},[28,90703,51848],{"class":60},[28,90705,1558],{"class":38},[28,90707,90708,90710,90712,90714,90716],{"class":30,"line":1915},[28,90709,90301],{"class":60},[28,90711,51693],{"class":38},[28,90713,721],{"class":60},[28,90715,51748],{"class":34},[28,90717,1558],{"class":38},[28,90719,90720],{"class":30,"line":1936},[28,90721,2449],{"class":38},[28,90723,90724,90726,90728],{"class":30,"line":1941},[28,90725,52673],{"class":38},[28,90727,328],{"class":51556},[28,90729,51563],{"class":38},[28,90731,90732,90734,90736],{"class":30,"line":1955},[28,90733,52041],{"class":38},[28,90735,51590],{"class":51556},[28,90737,51563],{"class":38},[28,90739,90740],{"class":30,"line":1960},[28,90741,2662],{"emptyLinePlaceholder":336},[28,90743,90744,90746,90748],{"class":30,"line":1989},[28,90745,1307],{"class":38},[28,90747,52056],{"class":51556},[28,90749,51563],{"class":38},[28,90751,90752,90754,90756,90758,90760,90762,90764,90766],{"class":30,"line":1994},[28,90753,52400],{"class":38},[28,90755,51867],{"class":51556},[28,90757,53742],{"class":2225},[28,90759,54],{"class":38},[28,90761,53747],{"class":127},[28,90763,55570],{"class":38},[28,90765,51867],{"class":51556},[28,90767,51563],{"class":38},[28,90769,90770,90772,90774,90776,90778,90780,90782,90784],{"class":30,"line":2011},[28,90771,52400],{"class":38},[28,90773,52069],{"class":51556},[28,90775,55495],{"class":2225},[28,90777,54],{"class":38},[28,90779,88530],{"class":127},[28,90781,55570],{"class":38},[28,90783,52069],{"class":51556},[28,90785,51563],{"class":38},[28,90787,90788,90790,90792],{"class":30,"line":2016},[28,90789,52400],{"class":38},[28,90791,52069],{"class":51556},[28,90793,51563],{"class":38},[28,90795,90796,90798,90800,90802,90804,90806,90808,90810],{"class":30,"line":2021},[28,90797,11483],{"class":34},[28,90799,87189],{"class":60},[28,90801,13826],{"class":34},[28,90803,54652],{"class":38},[28,90805,54655],{"class":2225},[28,90807,413],{"class":38},[28,90809,90402],{"class":127},[28,90811,81],{"class":38},[28,90813,90814,90816,90818,90820],{"class":30,"line":2026},[28,90815,52475],{"class":34},[28,90817,9700],{"class":38},[28,90819,54],{"class":34},[28,90821,47589],{"class":60},[28,90823,90824,90826,90828],{"class":30,"line":2040},[28,90825,70340],{"class":34},[28,90827,90421],{"class":2225},[28,90829,11115],{"class":38},[28,90831,90832,90834,90836,90838],{"class":30,"line":2045},[28,90833,90428],{"class":38},[28,90835,54],{"class":34},[28,90837,3294],{"class":38},[28,90839,2964],{"class":34},[28,90841,90842],{"class":30,"line":2839},[28,90843,90439],{"class":87},[28,90845,90846],{"class":30,"line":2853},[28,90847,2449],{"class":38},[28,90849,90850],{"class":30,"line":2861},[28,90851,90448],{"class":87},[28,90853,90854],{"class":30,"line":2866},[28,90855,90856],{"class":87},"    \u002F\u002F 手写防抖函数\n",[28,90858,90859],{"class":30,"line":2872},[28,90860,90861],{"class":87},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[28,90863,90864],{"class":30,"line":2878},[28,90865,90866],{"class":87},"    \u002F\u002F 1.声明定时器变量\n",[28,90868,90869],{"class":30,"line":2883},[28,90870,90871],{"class":87},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[28,90873,90874],{"class":30,"line":8210},[28,90875,90876],{"class":87},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[28,90878,90879],{"class":30,"line":8234},[28,90880,90881],{"class":87},"    \u002F\u002F 4.定时器里面写函数调用\n",[28,90883,90884,90886,90889,90891,90894,90896,90898],{"class":30,"line":8239},[28,90885,70340],{"class":34},[28,90887,90888],{"class":2225}," debounce",[28,90890,413],{"class":38},[28,90892,90893],{"class":5478},"fn",[28,90895,12697],{"class":38},[28,90897,1118],{"class":5478},[28,90899,12704],{"class":38},[28,90901,90902,90904],{"class":30,"line":8245},[28,90903,80028],{"class":34},[28,90905,90906],{"class":38}," timer\n",[28,90908,90909],{"class":30,"line":8272},[28,90910,90911],{"class":87},"      \u002F\u002F return 返回一个匿名函数\n",[28,90913,90914,90916,90918],{"class":30,"line":8277},[28,90915,74238],{"class":34},[28,90917,59174],{"class":34},[28,90919,54708],{"class":38},[28,90921,90922],{"class":30,"line":8283},[28,90923,90924],{"class":87},"        \u002F\u002F 这里边写第二三四步\n",[28,90926,90927,90929,90932,90935],{"class":30,"line":8295},[28,90928,2759],{"class":34},[28,90930,90931],{"class":38}," (timer) ",[28,90933,90934],{"class":2225},"clearTimeout",[28,90936,90937],{"class":38},"(timer)\n",[28,90939,90940,90943,90945,90948,90950,90952],{"class":30,"line":8307},[28,90941,90942],{"class":38},"        timer ",[28,90944,54],{"class":34},[28,90946,90947],{"class":2225}," setTimeout",[28,90949,413],{"class":38},[28,90951,54705],{"class":34},[28,90953,54708],{"class":38},[28,90955,90956,90959,90961],{"class":30,"line":8319},[28,90957,90958],{"class":2225},"          fn",[28,90960,13312],{"class":38},[28,90962,90963],{"class":87},"\u002F\u002F加小括号调用fn }, t)\n",[28,90965,90966],{"class":30,"line":9978},[28,90967,90968],{"class":38},"        }, t)\n",[28,90970,90971],{"class":30,"line":10003},[28,90972,52654],{"class":38},[28,90974,90975],{"class":30,"line":10026},[28,90976,2449],{"class":38},[28,90978,90979,90981,90983,90985,90987,90989,90991,90993,90995],{"class":30,"line":10050},[28,90980,90463],{"class":38},[28,90982,58069],{"class":2225},[28,90984,413],{"class":38},[28,90986,90470],{"class":127},[28,90988,12697],{"class":38},[28,90990,90476],{"class":2225},[28,90992,90479],{"class":38},[28,90994,65330],{"class":60},[28,90996,30757],{"class":38},[28,90998,90999],{"class":30,"line":10055},[28,91000,2662],{"emptyLinePlaceholder":336},[28,91002,91003],{"class":30,"line":10060},[28,91004,91005],{"class":87},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[28,91007,91008],{"class":30,"line":10065},[28,91009,91010],{"class":87},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[28,91012,91013],{"class":30,"line":10074},[28,91014,91015],{"class":87},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[28,91017,91018],{"class":30,"line":10079},[28,91019,91020],{"class":87},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[28,91022,91023,91025,91027],{"class":30,"line":10085},[28,91024,52673],{"class":38},[28,91026,52069],{"class":51556},[28,91028,51563],{"class":38},[28,91030,91031,91033,91035],{"class":30,"line":10106},[28,91032,52041],{"class":38},[28,91034,52056],{"class":51556},[28,91036,51563],{"class":38},[28,91038,91039],{"class":30,"line":10112},[28,91040,2662],{"emptyLinePlaceholder":336},[28,91042,91043,91045,91047],{"class":30,"line":10126},[28,91044,52041],{"class":38},[28,91046,50891],{"class":51556},[28,91048,51563],{"class":38},[380,91050,91052],{"id":91051},"_4172-节流","4.17.2 节流",[14,91054,91055],{},[1727,91056],{"alt":23,"src":91057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91059,91060],{},[1727,91061],{"alt":23,"src":91062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91064,91065],{},[555,91066,91067],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91069,91070],{},"实现方式：",[1404,91072,91073],{},[366,91074,91075],{},"lodash 提供的节流函数来处理",[14,91077,91078],{},"_.throttle(func,[wait=0],[options=])",[14,91080,91081],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[18,91083,91085],{"className":50889,"code":91084,"language":50891,"meta":23,"style":23},"\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",[25,91086,91087,91097,91111,91115,91123,91137,91157,91169,91177,91183,91193,91205,91217,91227,91239,91249,91259,91271,91275,91283,91291,91295,91303,91321,91339,91347,91365,91375,91383,91393,91397,91401,91405,91410,91415,91436,91444,91452,91456],{"__ignoreMap":23},[28,91088,91089,91091,91093,91095],{"class":30,"line":31},[28,91090,51553],{"class":38},[28,91092,51557],{"class":51556},[28,91094,51560],{"class":2225},[28,91096,51563],{"class":38},[28,91098,91099,91101,91103,91105,91107,91109],{"class":30,"line":48},[28,91100,1307],{"class":38},[28,91102,50891],{"class":51556},[28,91104,51572],{"class":2225},[28,91106,54],{"class":38},[28,91108,51577],{"class":127},[28,91110,51563],{"class":38},[28,91112,91113],{"class":30,"line":84},[28,91114,2662],{"emptyLinePlaceholder":336},[28,91116,91117,91119,91121],{"class":30,"line":91},[28,91118,1307],{"class":38},[28,91120,51590],{"class":51556},[28,91122,51563],{"class":38},[28,91124,91125,91127,91129,91131,91133,91135],{"class":30,"line":97},[28,91126,52400],{"class":38},[28,91128,51600],{"class":51556},[28,91130,51603],{"class":2225},[28,91132,54],{"class":38},[28,91134,51608],{"class":127},[28,91136,51563],{"class":38},[28,91138,91139,91141,91143,91145,91147,91149,91151,91153,91155],{"class":30,"line":103},[28,91140,52400],{"class":38},[28,91142,51600],{"class":51556},[28,91144,15182],{"class":2225},[28,91146,54],{"class":38},[28,91148,51647],{"class":127},[28,91150,51627],{"class":2225},[28,91152,54],{"class":38},[28,91154,51654],{"class":127},[28,91156,51563],{"class":38},[28,91158,91159,91161,91163,91165,91167],{"class":30,"line":109},[28,91160,52400],{"class":38},[28,91162,51663],{"class":51556},[28,91164,51666],{"class":38},[28,91166,51663],{"class":51556},[28,91168,51563],{"class":38},[28,91170,91171,91173,91175],{"class":30,"line":118},[28,91172,52400],{"class":38},[28,91174,328],{"class":51556},[28,91176,51563],{"class":38},[28,91178,91179,91181],{"class":30,"line":124},[28,91180,55008],{"class":2225},[28,91182,15834],{"class":38},[28,91184,91185,91187,91189,91191],{"class":30,"line":131},[28,91186,72852],{"class":60},[28,91188,51693],{"class":38},[28,91190,60761],{"class":60},[28,91192,1558],{"class":38},[28,91194,91195,91197,91199,91201,91203],{"class":30,"line":137},[28,91196,55027],{"class":60},[28,91198,51693],{"class":38},[28,91200,1984],{"class":60},[28,91202,51748],{"class":34},[28,91204,1558],{"class":38},[28,91206,91207,91209,91211,91213,91215],{"class":30,"line":143},[28,91208,55041],{"class":60},[28,91210,51693],{"class":38},[28,91212,1984],{"class":60},[28,91214,51748],{"class":34},[28,91216,1558],{"class":38},[28,91218,91219,91221,91223,91225],{"class":30,"line":149},[28,91220,55140],{"class":60},[28,91222,51693],{"class":38},[28,91224,90262],{"class":60},[28,91226,1558],{"class":38},[28,91228,91229,91231,91233,91235,91237],{"class":30,"line":1890},[28,91230,55178],{"class":60},[28,91232,51693],{"class":38},[28,91234,1222],{"class":60},[28,91236,51748],{"class":34},[28,91238,1558],{"class":38},[28,91240,91241,91243,91245,91247],{"class":30,"line":1904},[28,91242,57672],{"class":60},[28,91244,51693],{"class":38},[28,91246,61098],{"class":60},[28,91248,1558],{"class":38},[28,91250,91251,91253,91255,91257],{"class":30,"line":1909},[28,91252,57542],{"class":60},[28,91254,51693],{"class":38},[28,91256,51848],{"class":60},[28,91258,1558],{"class":38},[28,91260,91261,91263,91265,91267,91269],{"class":30,"line":1915},[28,91262,90301],{"class":60},[28,91264,51693],{"class":38},[28,91266,721],{"class":60},[28,91268,51748],{"class":34},[28,91270,1558],{"class":38},[28,91272,91273],{"class":30,"line":1936},[28,91274,2449],{"class":38},[28,91276,91277,91279,91281],{"class":30,"line":1941},[28,91278,52673],{"class":38},[28,91280,328],{"class":51556},[28,91282,51563],{"class":38},[28,91284,91285,91287,91289],{"class":30,"line":1955},[28,91286,52041],{"class":38},[28,91288,51590],{"class":51556},[28,91290,51563],{"class":38},[28,91292,91293],{"class":30,"line":1960},[28,91294,2662],{"emptyLinePlaceholder":336},[28,91296,91297,91299,91301],{"class":30,"line":1989},[28,91298,1307],{"class":38},[28,91300,52056],{"class":51556},[28,91302,51563],{"class":38},[28,91304,91305,91307,91309,91311,91313,91315,91317,91319],{"class":30,"line":1994},[28,91306,52400],{"class":38},[28,91308,51867],{"class":51556},[28,91310,53742],{"class":2225},[28,91312,54],{"class":38},[28,91314,53747],{"class":127},[28,91316,55570],{"class":38},[28,91318,51867],{"class":51556},[28,91320,51563],{"class":38},[28,91322,91323,91325,91327,91329,91331,91333,91335,91337],{"class":30,"line":2011},[28,91324,52400],{"class":38},[28,91326,52069],{"class":51556},[28,91328,55495],{"class":2225},[28,91330,54],{"class":38},[28,91332,88530],{"class":127},[28,91334,55570],{"class":38},[28,91336,52069],{"class":51556},[28,91338,51563],{"class":38},[28,91340,91341,91343,91345],{"class":30,"line":2016},[28,91342,52400],{"class":38},[28,91344,52069],{"class":51556},[28,91346,51563],{"class":38},[28,91348,91349,91351,91353,91355,91357,91359,91361,91363],{"class":30,"line":2021},[28,91350,11483],{"class":34},[28,91352,87189],{"class":60},[28,91354,13826],{"class":34},[28,91356,54652],{"class":38},[28,91358,54655],{"class":2225},[28,91360,413],{"class":38},[28,91362,90402],{"class":127},[28,91364,81],{"class":38},[28,91366,91367,91369,91371,91373],{"class":30,"line":2026},[28,91368,52475],{"class":34},[28,91370,9700],{"class":38},[28,91372,54],{"class":34},[28,91374,47589],{"class":60},[28,91376,91377,91379,91381],{"class":30,"line":2040},[28,91378,70340],{"class":34},[28,91380,90421],{"class":2225},[28,91382,11115],{"class":38},[28,91384,91385,91387,91389,91391],{"class":30,"line":2045},[28,91386,90428],{"class":38},[28,91388,54],{"class":34},[28,91390,3294],{"class":38},[28,91392,2964],{"class":34},[28,91394,91395],{"class":30,"line":2839},[28,91396,90439],{"class":87},[28,91398,91399],{"class":30,"line":2853},[28,91400,2449],{"class":38},[28,91402,91403],{"class":30,"line":2861},[28,91404,90448],{"class":87},[28,91406,91407],{"class":30,"line":2866},[28,91408,91409],{"class":87},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[28,91411,91412],{"class":30,"line":2872},[28,91413,91414],{"class":87},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[28,91416,91417,91419,91421,91423,91425,91427,91430,91432,91434],{"class":30,"line":2878},[28,91418,90463],{"class":38},[28,91420,58069],{"class":2225},[28,91422,413],{"class":38},[28,91424,90470],{"class":127},[28,91426,90473],{"class":38},[28,91428,91429],{"class":2225},"throttle",[28,91431,90479],{"class":38},[28,91433,65330],{"class":60},[28,91435,30757],{"class":38},[28,91437,91438,91440,91442],{"class":30,"line":2883},[28,91439,52673],{"class":38},[28,91441,52069],{"class":51556},[28,91443,51563],{"class":38},[28,91445,91446,91448,91450],{"class":30,"line":8210},[28,91447,52041],{"class":38},[28,91449,52056],{"class":51556},[28,91451,51563],{"class":38},[28,91453,91454],{"class":30,"line":8234},[28,91455,2662],{"emptyLinePlaceholder":336},[28,91457,91458,91460,91462],{"class":30,"line":8239},[28,91459,52041],{"class":38},[28,91461,50891],{"class":51556},[28,91463,51563],{"class":38},[1404,91465,91466],{},[366,91467,91468],{},"手写一个节流函数来处理",[14,91470,71208],{},[14,91472,90522],{},[14,91474,91475],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91477,91478],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[18,91480,91482],{"className":50889,"code":91481,"language":50891,"meta":23,"style":23},"\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",[25,91483,91484,91494,91508,91512,91520,91534,91554,91566,91574,91580,91590,91602,91614,91624,91636,91646,91656,91668,91672,91680,91688,91692,91700,91718,91736,91744,91762,91772,91780,91790,91794,91798,91802,91807,91812,91817,91822,91827,91832,91849,91855,91863,91874,91889,91896,91901,91906,91916,91921,91926,91931,91935,91939,91943,91963,91971,91979,91983],{"__ignoreMap":23},[28,91485,91486,91488,91490,91492],{"class":30,"line":31},[28,91487,51553],{"class":38},[28,91489,51557],{"class":51556},[28,91491,51560],{"class":2225},[28,91493,51563],{"class":38},[28,91495,91496,91498,91500,91502,91504,91506],{"class":30,"line":48},[28,91497,1307],{"class":38},[28,91499,50891],{"class":51556},[28,91501,51572],{"class":2225},[28,91503,54],{"class":38},[28,91505,51577],{"class":127},[28,91507,51563],{"class":38},[28,91509,91510],{"class":30,"line":84},[28,91511,2662],{"emptyLinePlaceholder":336},[28,91513,91514,91516,91518],{"class":30,"line":91},[28,91515,1307],{"class":38},[28,91517,51590],{"class":51556},[28,91519,51563],{"class":38},[28,91521,91522,91524,91526,91528,91530,91532],{"class":30,"line":97},[28,91523,52400],{"class":38},[28,91525,51600],{"class":51556},[28,91527,51603],{"class":2225},[28,91529,54],{"class":38},[28,91531,51608],{"class":127},[28,91533,51563],{"class":38},[28,91535,91536,91538,91540,91542,91544,91546,91548,91550,91552],{"class":30,"line":103},[28,91537,52400],{"class":38},[28,91539,51600],{"class":51556},[28,91541,15182],{"class":2225},[28,91543,54],{"class":38},[28,91545,51647],{"class":127},[28,91547,51627],{"class":2225},[28,91549,54],{"class":38},[28,91551,51654],{"class":127},[28,91553,51563],{"class":38},[28,91555,91556,91558,91560,91562,91564],{"class":30,"line":109},[28,91557,52400],{"class":38},[28,91559,51663],{"class":51556},[28,91561,51666],{"class":38},[28,91563,51663],{"class":51556},[28,91565,51563],{"class":38},[28,91567,91568,91570,91572],{"class":30,"line":118},[28,91569,52400],{"class":38},[28,91571,328],{"class":51556},[28,91573,51563],{"class":38},[28,91575,91576,91578],{"class":30,"line":124},[28,91577,55008],{"class":2225},[28,91579,15834],{"class":38},[28,91581,91582,91584,91586,91588],{"class":30,"line":131},[28,91583,72852],{"class":60},[28,91585,51693],{"class":38},[28,91587,60761],{"class":60},[28,91589,1558],{"class":38},[28,91591,91592,91594,91596,91598,91600],{"class":30,"line":137},[28,91593,55027],{"class":60},[28,91595,51693],{"class":38},[28,91597,1984],{"class":60},[28,91599,51748],{"class":34},[28,91601,1558],{"class":38},[28,91603,91604,91606,91608,91610,91612],{"class":30,"line":143},[28,91605,55041],{"class":60},[28,91607,51693],{"class":38},[28,91609,1984],{"class":60},[28,91611,51748],{"class":34},[28,91613,1558],{"class":38},[28,91615,91616,91618,91620,91622],{"class":30,"line":149},[28,91617,55140],{"class":60},[28,91619,51693],{"class":38},[28,91621,90262],{"class":60},[28,91623,1558],{"class":38},[28,91625,91626,91628,91630,91632,91634],{"class":30,"line":1890},[28,91627,55178],{"class":60},[28,91629,51693],{"class":38},[28,91631,1222],{"class":60},[28,91633,51748],{"class":34},[28,91635,1558],{"class":38},[28,91637,91638,91640,91642,91644],{"class":30,"line":1904},[28,91639,57672],{"class":60},[28,91641,51693],{"class":38},[28,91643,61098],{"class":60},[28,91645,1558],{"class":38},[28,91647,91648,91650,91652,91654],{"class":30,"line":1909},[28,91649,57542],{"class":60},[28,91651,51693],{"class":38},[28,91653,51848],{"class":60},[28,91655,1558],{"class":38},[28,91657,91658,91660,91662,91664,91666],{"class":30,"line":1915},[28,91659,90301],{"class":60},[28,91661,51693],{"class":38},[28,91663,721],{"class":60},[28,91665,51748],{"class":34},[28,91667,1558],{"class":38},[28,91669,91670],{"class":30,"line":1936},[28,91671,2449],{"class":38},[28,91673,91674,91676,91678],{"class":30,"line":1941},[28,91675,52673],{"class":38},[28,91677,328],{"class":51556},[28,91679,51563],{"class":38},[28,91681,91682,91684,91686],{"class":30,"line":1955},[28,91683,52041],{"class":38},[28,91685,51590],{"class":51556},[28,91687,51563],{"class":38},[28,91689,91690],{"class":30,"line":1960},[28,91691,2662],{"emptyLinePlaceholder":336},[28,91693,91694,91696,91698],{"class":30,"line":1989},[28,91695,1307],{"class":38},[28,91697,52056],{"class":51556},[28,91699,51563],{"class":38},[28,91701,91702,91704,91706,91708,91710,91712,91714,91716],{"class":30,"line":1994},[28,91703,52400],{"class":38},[28,91705,51867],{"class":51556},[28,91707,53742],{"class":2225},[28,91709,54],{"class":38},[28,91711,53747],{"class":127},[28,91713,55570],{"class":38},[28,91715,51867],{"class":51556},[28,91717,51563],{"class":38},[28,91719,91720,91722,91724,91726,91728,91730,91732,91734],{"class":30,"line":2011},[28,91721,52400],{"class":38},[28,91723,52069],{"class":51556},[28,91725,55495],{"class":2225},[28,91727,54],{"class":38},[28,91729,88530],{"class":127},[28,91731,55570],{"class":38},[28,91733,52069],{"class":51556},[28,91735,51563],{"class":38},[28,91737,91738,91740,91742],{"class":30,"line":2016},[28,91739,52400],{"class":38},[28,91741,52069],{"class":51556},[28,91743,51563],{"class":38},[28,91745,91746,91748,91750,91752,91754,91756,91758,91760],{"class":30,"line":2021},[28,91747,11483],{"class":34},[28,91749,87189],{"class":60},[28,91751,13826],{"class":34},[28,91753,54652],{"class":38},[28,91755,54655],{"class":2225},[28,91757,413],{"class":38},[28,91759,90402],{"class":127},[28,91761,81],{"class":38},[28,91763,91764,91766,91768,91770],{"class":30,"line":2026},[28,91765,52475],{"class":34},[28,91767,9700],{"class":38},[28,91769,54],{"class":34},[28,91771,47589],{"class":60},[28,91773,91774,91776,91778],{"class":30,"line":2040},[28,91775,70340],{"class":34},[28,91777,90421],{"class":2225},[28,91779,11115],{"class":38},[28,91781,91782,91784,91786,91788],{"class":30,"line":2045},[28,91783,90428],{"class":38},[28,91785,54],{"class":34},[28,91787,3294],{"class":38},[28,91789,2964],{"class":34},[28,91791,91792],{"class":30,"line":2839},[28,91793,90439],{"class":87},[28,91795,91796],{"class":30,"line":2853},[28,91797,2449],{"class":38},[28,91799,91800],{"class":30,"line":2861},[28,91801,90448],{"class":87},[28,91803,91804],{"class":30,"line":2866},[28,91805,91806],{"class":87},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[28,91808,91809],{"class":30,"line":2872},[28,91810,91811],{"class":87},"    \u002F\u002F 1.声明一个定时器变量\n",[28,91813,91814],{"class":30,"line":2878},[28,91815,91816],{"class":87},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[28,91818,91819],{"class":30,"line":2883},[28,91820,91821],{"class":87},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[28,91823,91824],{"class":30,"line":8210},[28,91825,91826],{"class":87},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[28,91828,91829],{"class":30,"line":8234},[28,91830,91831],{"class":87},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[28,91833,91834,91836,91839,91841,91843,91845,91847],{"class":30,"line":8239},[28,91835,70340],{"class":34},[28,91837,91838],{"class":2225}," throttle",[28,91840,413],{"class":38},[28,91842,90893],{"class":5478},[28,91844,12697],{"class":38},[28,91846,1118],{"class":5478},[28,91848,12704],{"class":38},[28,91850,91851,91853],{"class":30,"line":8245},[28,91852,80028],{"class":34},[28,91854,90906],{"class":38},[28,91856,91857,91859,91861],{"class":30,"line":8272},[28,91858,74238],{"class":34},[28,91860,59174],{"class":34},[28,91862,54708],{"class":38},[28,91864,91865,91867,91869,91871],{"class":30,"line":8277},[28,91866,2759],{"class":34},[28,91868,1920],{"class":38},[28,91870,630],{"class":34},[28,91872,91873],{"class":38},"timer) {\n",[28,91875,91876,91879,91881,91883,91885,91887],{"class":30,"line":8283},[28,91877,91878],{"class":38},"          timer ",[28,91880,54],{"class":34},[28,91882,90947],{"class":2225},[28,91884,413],{"class":38},[28,91886,54705],{"class":34},[28,91888,54708],{"class":38},[28,91890,91891,91894],{"class":30,"line":8295},[28,91892,91893],{"class":2225},"            fn",[28,91895,2238],{"class":38},[28,91897,91898],{"class":30,"line":8307},[28,91899,91900],{"class":87},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[28,91902,91903],{"class":30,"line":8319},[28,91904,91905],{"class":87},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[28,91907,91908,91911,91913],{"class":30,"line":9978},[28,91909,91910],{"class":38},"            timer ",[28,91912,54],{"class":34},[28,91914,91915],{"class":60}," null\n",[28,91917,91918],{"class":30,"line":10003},[28,91919,91920],{"class":87},"            \u002F\u002F 不能用clearTimeout(timer)\n",[28,91922,91923],{"class":30,"line":10026},[28,91924,91925],{"class":87},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[28,91927,91928],{"class":30,"line":10050},[28,91929,91930],{"class":38},"          }, t)\n",[28,91932,91933],{"class":30,"line":10055},[28,91934,2791],{"class":38},[28,91936,91937],{"class":30,"line":10060},[28,91938,52654],{"class":38},[28,91940,91941],{"class":30,"line":10065},[28,91942,2449],{"class":38},[28,91944,91945,91947,91949,91951,91953,91955,91957,91959,91961],{"class":30,"line":10074},[28,91946,90463],{"class":38},[28,91948,58069],{"class":2225},[28,91950,413],{"class":38},[28,91952,90470],{"class":127},[28,91954,12697],{"class":38},[28,91956,91429],{"class":2225},[28,91958,90479],{"class":38},[28,91960,65330],{"class":60},[28,91962,30757],{"class":38},[28,91964,91965,91967,91969],{"class":30,"line":10079},[28,91966,52673],{"class":38},[28,91968,52069],{"class":51556},[28,91970,51563],{"class":38},[28,91972,91973,91975,91977],{"class":30,"line":10085},[28,91974,52041],{"class":38},[28,91976,52056],{"class":51556},[28,91978,51563],{"class":38},[28,91980,91981],{"class":30,"line":10106},[28,91982,2662],{"emptyLinePlaceholder":336},[28,91984,91985,91987,91989],{"class":30,"line":10112},[28,91986,52041],{"class":38},[28,91988,50891],{"class":51556},[28,91990,51563],{"class":38},[380,91992,91994],{"id":91993},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[18,91996,91998],{"className":53323,"code":91997,"language":53325,"meta":23,"style":23},"\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",[25,91999,92000,92008,92016,92021,92026,92031,92036,92040,92048],{"__ignoreMap":23},[28,92001,92002,92004,92006],{"class":30,"line":31},[28,92003,1307],{"class":38},[28,92005,52056],{"class":51556},[28,92007,51563],{"class":38},[28,92009,92010,92012,92014],{"class":30,"line":48},[28,92011,52400],{"class":38},[28,92013,52069],{"class":51556},[28,92015,51563],{"class":38},[28,92017,92018],{"class":30,"line":84},[28,92019,92020],{"class":38},"    let timer = null\n",[28,92022,92023],{"class":30,"line":91},[28,92024,92025],{"class":38},"    timer = setTimeout(() => {\n",[28,92027,92028],{"class":30,"line":97},[28,92029,92030],{"class":38},"      clearTimeout(timer)\n",[28,92032,92033],{"class":30,"line":103},[28,92034,92035],{"class":38},"      console.log(timer)\n",[28,92037,92038],{"class":30,"line":109},[28,92039,60481],{"class":38},[28,92041,92042,92044,92046],{"class":30,"line":118},[28,92043,52673],{"class":38},[28,92045,52069],{"class":51556},[28,92047,51563],{"class":38},[28,92049,92050,92052,92054],{"class":30,"line":124},[28,92051,52041],{"class":38},[28,92053,52056],{"class":51556},[28,92055,51563],{"class":38},[14,92057,92058],{},"输出为1",[14,92060,92061],{},"在开启的定时器里边写清除定时器",[14,92063,92064],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[380,92066,92068],{"id":92067},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92070,92071],{},"页面打开，可以记录上一次的视频播放位置",[14,92073,92074],{},[1727,92075],{"alt":23,"src":92076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92078,92079],{},[1727,92080],{"alt":23,"src":92081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[18,92083,92085],{"className":50889,"code":92084,"language":50891,"meta":23,"style":23},"\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",[25,92086,92087,92097,92111,92115,92123,92137,92157,92177,92199,92212,92220,92226,92236,92246,92256,92260,92264,92271,92284,92296,92300,92304,92314,92326,92340,92344,92348,92355,92365,92378,92390,92400,92410,92426,92438,92442,92446,92454,92464,92476,92486,92496,92506,92510,92514,92524,92535,92539,92547,92555,92559,92567,92582,92597,92612,92633,92641,92649,92664,92686,92694,92709,92735,92761,92787,92795,92803,92822,92830,92835,92854,92859,92877,92882,92887,92895,92900,92914,92922,92927,92944,92948,92953,92975,92979,92987,92995,92999],{"__ignoreMap":23},[28,92088,92089,92091,92093,92095],{"class":30,"line":31},[28,92090,51553],{"class":38},[28,92092,51557],{"class":51556},[28,92094,51560],{"class":2225},[28,92096,51563],{"class":38},[28,92098,92099,92101,92103,92105,92107,92109],{"class":30,"line":48},[28,92100,1307],{"class":38},[28,92102,50891],{"class":51556},[28,92104,51572],{"class":2225},[28,92106,54],{"class":38},[28,92108,51577],{"class":127},[28,92110,51563],{"class":38},[28,92112,92113],{"class":30,"line":84},[28,92114,2662],{"emptyLinePlaceholder":336},[28,92116,92117,92119,92121],{"class":30,"line":91},[28,92118,1307],{"class":38},[28,92120,51590],{"class":51556},[28,92122,51563],{"class":38},[28,92124,92125,92127,92129,92131,92133,92135],{"class":30,"line":97},[28,92126,52400],{"class":38},[28,92128,51600],{"class":51556},[28,92130,51603],{"class":2225},[28,92132,54],{"class":38},[28,92134,51608],{"class":127},[28,92136,59383],{"class":38},[28,92138,92139,92141,92143,92145,92147,92149,92151,92153,92155],{"class":30,"line":103},[28,92140,52400],{"class":38},[28,92142,51600],{"class":51556},[28,92144,51619],{"class":2225},[28,92146,54],{"class":38},[28,92148,51624],{"class":127},[28,92150,51627],{"class":2225},[28,92152,54],{"class":38},[28,92154,51632],{"class":127},[28,92156,59383],{"class":38},[28,92158,92159,92161,92163,92165,92167,92169,92171,92173,92175],{"class":30,"line":109},[28,92160,52400],{"class":38},[28,92162,51600],{"class":51556},[28,92164,15182],{"class":2225},[28,92166,54],{"class":38},[28,92168,51647],{"class":127},[28,92170,51627],{"class":2225},[28,92172,54],{"class":38},[28,92174,51654],{"class":127},[28,92176,59383],{"class":38},[28,92178,92179,92181,92183,92185,92187,92190,92192,92194,92197],{"class":30,"line":118},[28,92180,52400],{"class":38},[28,92182,51600],{"class":51556},[28,92184,15182],{"class":2225},[28,92186,54],{"class":38},[28,92188,92189],{"class":127},"\"referrer\"",[28,92191,51627],{"class":2225},[28,92193,54],{"class":38},[28,92195,92196],{"class":127},"\"never\"",[28,92198,59383],{"class":38},[28,92200,92201,92203,92205,92208,92210],{"class":30,"line":124},[28,92202,52400],{"class":38},[28,92204,51663],{"class":51556},[28,92206,92207],{"class":38},">综合案例\u003C\u002F",[28,92209,51663],{"class":51556},[28,92211,51563],{"class":38},[28,92213,92214,92216,92218],{"class":30,"line":131},[28,92215,52400],{"class":38},[28,92217,328],{"class":51556},[28,92219,51563],{"class":38},[28,92221,92222,92224],{"class":30,"line":137},[28,92223,6665],{"class":51556},[28,92225,15834],{"class":38},[28,92227,92228,92230,92232,92234],{"class":30,"line":143},[28,92229,54951],{"class":60},[28,92231,51693],{"class":38},[28,92233,244],{"class":60},[28,92235,1558],{"class":38},[28,92237,92238,92240,92242,92244],{"class":30,"line":149},[28,92239,54962],{"class":60},[28,92241,51693],{"class":38},[28,92243,244],{"class":60},[28,92245,1558],{"class":38},[28,92247,92248,92250,92252,92254],{"class":30,"line":1890},[28,92249,72852],{"class":60},[28,92251,51693],{"class":38},[28,92253,60761],{"class":60},[28,92255,1558],{"class":38},[28,92257,92258],{"class":30,"line":1904},[28,92259,2449],{"class":38},[28,92261,92262],{"class":30,"line":1909},[28,92263,2662],{"emptyLinePlaceholder":336},[28,92265,92266,92269],{"class":30,"line":1915},[28,92267,92268],{"class":2225},"    .container",[28,92270,15834],{"class":38},[28,92272,92273,92275,92277,92280,92282],{"class":30,"line":1936},[28,92274,55027],{"class":60},[28,92276,51693],{"class":38},[28,92278,92279],{"class":60},"1200",[28,92281,51748],{"class":34},[28,92283,1558],{"class":38},[28,92285,92286,92288,92290,92292,92294],{"class":30,"line":1941},[28,92287,54962],{"class":60},[28,92289,51693],{"class":38},[28,92291,244],{"class":60},[28,92293,51812],{"class":60},[28,92295,1558],{"class":38},[28,92297,92298],{"class":30,"line":1955},[28,92299,2449],{"class":38},[28,92301,92302],{"class":30,"line":1960},[28,92303,2662],{"emptyLinePlaceholder":336},[28,92305,92306,92309,92312],{"class":30,"line":1989},[28,92307,92308],{"class":2225},"    .video",[28,92310,92311],{"class":51556}," video",[28,92313,15834],{"class":38},[28,92315,92316,92318,92320,92322,92324],{"class":30,"line":1994},[28,92317,55027],{"class":60},[28,92319,51693],{"class":38},[28,92321,713],{"class":60},[28,92323,729],{"class":34},[28,92325,1558],{"class":38},[28,92327,92328,92330,92332,92334,92336,92338],{"class":30,"line":2011},[28,92329,54951],{"class":60},[28,92331,51693],{"class":38},[28,92333,1098],{"class":60},[28,92335,51748],{"class":34},[28,92337,4355],{"class":60},[28,92339,1558],{"class":38},[28,92341,92342],{"class":30,"line":2016},[28,92343,2449],{"class":38},[28,92345,92346],{"class":30,"line":2021},[28,92347,2662],{"emptyLinePlaceholder":336},[28,92349,92350,92353],{"class":30,"line":2026},[28,92351,92352],{"class":2225},"    .elevator",[28,92354,15834],{"class":38},[28,92356,92357,92359,92361,92363],{"class":30,"line":2040},[28,92358,55015],{"class":60},[28,92360,51693],{"class":38},[28,92362,86489],{"class":60},[28,92364,1558],{"class":38},[28,92366,92367,92369,92371,92374,92376],{"class":30,"line":2045},[28,92368,55203],{"class":60},[28,92370,51693],{"class":38},[28,92372,92373],{"class":60},"280",[28,92375,51748],{"class":34},[28,92377,1558],{"class":38},[28,92379,92380,92382,92384,92386,92388],{"class":30,"line":2839},[28,92381,86683],{"class":60},[28,92383,51693],{"class":38},[28,92385,1098],{"class":60},[28,92387,51748],{"class":34},[28,92389,1558],{"class":38},[28,92391,92392,92394,92396,92398],{"class":30,"line":2853},[28,92393,86496],{"class":60},[28,92395,51693],{"class":38},[28,92397,86501],{"class":60},[28,92399,1558],{"class":38},[28,92401,92402,92404,92406,92408],{"class":30,"line":2861},[28,92403,61977],{"class":60},[28,92405,51693],{"class":38},[28,92407,61098],{"class":60},[28,92409,1558],{"class":38},[28,92411,92412,92414,92416,92418,92420,92422,92424],{"class":30,"line":2866},[28,92413,62233],{"class":60},[28,92415,51693],{"class":38},[28,92417,61],{"class":60},[28,92419,51748],{"class":34},[28,92421,51777],{"class":60},[28,92423,62500],{"class":60},[28,92425,1558],{"class":38},[28,92427,92428,92430,92432,92434,92436],{"class":30,"line":2872},[28,92429,55027],{"class":60},[28,92431,51693],{"class":38},[28,92433,1304],{"class":60},[28,92435,51748],{"class":34},[28,92437,1558],{"class":38},[28,92439,92440],{"class":30,"line":2878},[28,92441,2449],{"class":38},[28,92443,92444],{"class":30,"line":2883},[28,92445,2662],{"emptyLinePlaceholder":336},[28,92447,92448,92450,92452],{"class":30,"line":8210},[28,92449,92352],{"class":2225},[28,92451,1663],{"class":51556},[28,92453,15834],{"class":38},[28,92455,92456,92458,92460,92462],{"class":30,"line":8234},[28,92457,55265],{"class":60},[28,92459,51693],{"class":38},[28,92461,61125],{"class":60},[28,92463,1558],{"class":38},[28,92465,92466,92468,92470,92472,92474],{"class":30,"line":8239},[28,92467,54951],{"class":60},[28,92469,51693],{"class":38},[28,92471,845],{"class":60},[28,92473,51748],{"class":34},[28,92475,1558],{"class":38},[28,92477,92478,92480,92482,92484],{"class":30,"line":8245},[28,92479,64226],{"class":60},[28,92481,51693],{"class":38},[28,92483,54993],{"class":60},[28,92485,1558],{"class":38},[28,92487,92488,92490,92492,92494],{"class":30,"line":8272},[28,92489,57542],{"class":60},[28,92491,51693],{"class":38},[28,92493,51848],{"class":60},[28,92495,1558],{"class":38},[28,92497,92498,92500,92502,92504],{"class":30,"line":8277},[28,92499,57672],{"class":60},[28,92501,51693],{"class":38},[28,92503,62326],{"class":60},[28,92505,1558],{"class":38},[28,92507,92508],{"class":30,"line":8283},[28,92509,2449],{"class":38},[28,92511,92512],{"class":30,"line":8295},[28,92513,2662],{"emptyLinePlaceholder":336},[28,92515,92516,92518,92520,92522],{"class":30,"line":8307},[28,92517,92352],{"class":2225},[28,92519,1663],{"class":51556},[28,92521,64280],{"class":2225},[28,92523,15834],{"class":38},[28,92525,92526,92528,92530,92533],{"class":30,"line":8319},[28,92527,57672],{"class":60},[28,92529,51693],{"class":38},[28,92531,92532],{"class":60},"#1286ff",[28,92534,1558],{"class":38},[28,92536,92537],{"class":30,"line":9978},[28,92538,2449],{"class":38},[28,92540,92541,92543,92545],{"class":30,"line":10003},[28,92542,52673],{"class":38},[28,92544,328],{"class":51556},[28,92546,51563],{"class":38},[28,92548,92549,92551,92553],{"class":30,"line":10026},[28,92550,52041],{"class":38},[28,92552,51590],{"class":51556},[28,92554,51563],{"class":38},[28,92556,92557],{"class":30,"line":10050},[28,92558,2662],{"emptyLinePlaceholder":336},[28,92560,92561,92563,92565],{"class":30,"line":10055},[28,92562,1307],{"class":38},[28,92564,52056],{"class":51556},[28,92566,51563],{"class":38},[28,92568,92569,92571,92573,92575,92577,92580],{"class":30,"line":10060},[28,92570,52400],{"class":38},[28,92572,51867],{"class":51556},[28,92574,53742],{"class":2225},[28,92576,54],{"class":38},[28,92578,92579],{"class":127},"\"container\"",[28,92581,51563],{"class":38},[28,92583,92584,92586,92588,92590,92592,92595],{"class":30,"line":10065},[28,92585,51597],{"class":38},[28,92587,51867],{"class":51556},[28,92589,53742],{"class":2225},[28,92591,54],{"class":38},[28,92593,92594],{"class":127},"\"header\"",[28,92596,51563],{"class":38},[28,92598,92599,92601,92603,92605,92607,92610],{"class":30,"line":10074},[28,92600,55490],{"class":38},[28,92602,51],{"class":51556},[28,92604,61313],{"class":2225},[28,92606,54],{"class":38},[28,92608,92609],{"class":127},"\"http:\u002F\u002Fpip.itcast.cn\"",[28,92611,51563],{"class":38},[28,92613,92614,92616,92618,92620,92622,92625,92627,92629,92631],{"class":30,"line":10079},[28,92615,55558],{"class":38},[28,92617,1727],{"class":51556},[28,92619,55495],{"class":2225},[28,92621,54],{"class":38},[28,92623,92624],{"class":127},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[28,92626,55503],{"class":2225},[28,92628,54],{"class":38},[28,92630,7914],{"class":127},[28,92632,59383],{"class":38},[28,92634,92635,92637,92639],{"class":30,"line":10085},[28,92636,55663],{"class":38},[28,92638,51],{"class":51556},[28,92640,51563],{"class":38},[28,92642,92643,92645,92647],{"class":30,"line":10106},[28,92644,52032],{"class":38},[28,92646,51867],{"class":51556},[28,92648,51563],{"class":38},[28,92650,92651,92653,92655,92657,92659,92662],{"class":30,"line":10112},[28,92652,51597],{"class":38},[28,92654,51867],{"class":51556},[28,92656,53742],{"class":2225},[28,92658,54],{"class":38},[28,92660,92661],{"class":127},"\"video\"",[28,92663,51563],{"class":38},[28,92665,92666,92668,92670,92672,92674,92677,92680,92682,92684],{"class":30,"line":10126},[28,92667,55490],{"class":38},[28,92669,28446],{"class":51556},[28,92671,55495],{"class":2225},[28,92673,54],{"class":38},[28,92675,92676],{"class":127},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[28,92678,92679],{"class":2225}," controls",[28,92681,55570],{"class":38},[28,92683,28446],{"class":51556},[28,92685,51563],{"class":38},[28,92687,92688,92690,92692],{"class":30,"line":10132},[28,92689,52032],{"class":38},[28,92691,51867],{"class":51556},[28,92693,51563],{"class":38},[28,92695,92696,92698,92700,92702,92704,92707],{"class":30,"line":10159},[28,92697,51597],{"class":38},[28,92699,51867],{"class":51556},[28,92701,53742],{"class":2225},[28,92703,54],{"class":38},[28,92705,92706],{"class":127},"\"elevator\"",[28,92708,51563],{"class":38},[28,92710,92711,92713,92715,92717,92719,92721,92724,92726,92728,92731,92733],{"class":30,"line":10168},[28,92712,55490],{"class":38},[28,92714,51],{"class":51556},[28,92716,61313],{"class":2225},[28,92718,54],{"class":38},[28,92720,64492],{"class":127},[28,92722,92723],{"class":2225}," data-ref",[28,92725,54],{"class":38},[28,92727,92661],{"class":127},[28,92729,92730],{"class":38},">视频介绍\u003C\u002F",[28,92732,51],{"class":51556},[28,92734,51563],{"class":38},[28,92736,92737,92739,92741,92743,92745,92747,92749,92751,92754,92757,92759],{"class":30,"line":10174},[28,92738,55490],{"class":38},[28,92740,51],{"class":51556},[28,92742,61313],{"class":2225},[28,92744,54],{"class":38},[28,92746,64492],{"class":127},[28,92748,92723],{"class":2225},[28,92750,54],{"class":38},[28,92752,92753],{"class":127},"\"intro\"",[28,92755,92756],{"class":38},">课程简介\u003C\u002F",[28,92758,51],{"class":51556},[28,92760,51563],{"class":38},[28,92762,92763,92765,92767,92769,92771,92773,92775,92777,92780,92783,92785],{"class":30,"line":10182},[28,92764,55490],{"class":38},[28,92766,51],{"class":51556},[28,92768,61313],{"class":2225},[28,92770,54],{"class":38},[28,92772,64492],{"class":127},[28,92774,92723],{"class":2225},[28,92776,54],{"class":38},[28,92778,92779],{"class":127},"\"outline\"",[28,92781,92782],{"class":38},">评论列表\u003C\u002F",[28,92784,51],{"class":51556},[28,92786,51563],{"class":38},[28,92788,92789,92791,92793],{"class":30,"line":10187},[28,92790,52032],{"class":38},[28,92792,51867],{"class":51556},[28,92794,51563],{"class":38},[28,92796,92797,92799,92801],{"class":30,"line":16866},[28,92798,52673],{"class":38},[28,92800,51867],{"class":51556},[28,92802,51563],{"class":38},[28,92804,92805,92807,92809,92811,92813,92816,92818,92820],{"class":30,"line":16872},[28,92806,52400],{"class":38},[28,92808,52069],{"class":51556},[28,92810,55495],{"class":2225},[28,92812,54],{"class":38},[28,92814,92815],{"class":127},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[28,92817,55570],{"class":38},[28,92819,52069],{"class":51556},[28,92821,51563],{"class":38},[28,92823,92824,92826,92828],{"class":30,"line":16895},[28,92825,52400],{"class":38},[28,92827,52069],{"class":51556},[28,92829,51563],{"class":38},[28,92831,92832],{"class":30,"line":16901},[28,92833,92834],{"class":87},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[28,92836,92837,92839,92841,92843,92845,92847,92849,92852],{"class":30,"line":16924},[28,92838,11483],{"class":34},[28,92840,92311],{"class":60},[28,92842,13826],{"class":34},[28,92844,54652],{"class":38},[28,92846,54655],{"class":2225},[28,92848,413],{"class":38},[28,92850,92851],{"class":127},"'video'",[28,92853,81],{"class":38},[28,92855,92856],{"class":30,"line":16938},[28,92857,92858],{"class":87},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[28,92860,92861,92864,92866,92868,92870,92873,92875],{"class":30,"line":16958},[28,92862,92863],{"class":38},"    video.ontimeupdate ",[28,92865,54],{"class":34},[28,92867,88611],{"class":38},[28,92869,91429],{"class":2225},[28,92871,92872],{"class":38},"(() ",[28,92874,84978],{"class":34},[28,92876,15834],{"class":38},[28,92878,92879],{"class":30,"line":16964},[28,92880,92881],{"class":87},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[28,92883,92884],{"class":30,"line":16975},[28,92885,92886],{"class":87},"      \u002F\u002F 控制台输出当前的时间\n",[28,92888,92889,92892],{"class":30,"line":16998},[28,92890,92891],{"class":87},"      \u002F\u002F console.log(video.currentTime)",[28,92893,92894],{"class":87},"  \u002F\u002F获得当前的视频时间\n",[28,92896,92897],{"class":30,"line":17020},[28,92898,92899],{"class":87},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[28,92901,92902,92904,92906,92908,92911],{"class":30,"line":17025},[28,92903,74939],{"class":38},[28,92905,71910],{"class":2225},[28,92907,413],{"class":38},[28,92909,92910],{"class":127},"'currentTime'",[28,92912,92913],{"class":38},", video.currentTime)\n",[28,92915,92916,92918,92920],{"class":30,"line":17031},[28,92917,54791],{"class":38},[28,92919,6672],{"class":60},[28,92921,81],{"class":38},[28,92923,92924],{"class":30,"line":17045},[28,92925,92926],{"class":87},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[28,92928,92929,92932,92935,92937,92940,92942],{"class":30,"line":17058},[28,92930,92931],{"class":38},"    video.",[28,92933,92934],{"class":2225},"onloadeddata",[28,92936,13826],{"class":34},[28,92938,92939],{"class":38}," () ",[28,92941,84978],{"class":34},[28,92943,15834],{"class":38},[28,92945,92946],{"class":30,"line":17063},[28,92947,60268],{"class":87},[28,92949,92950],{"class":30,"line":17077},[28,92951,92952],{"class":87},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[28,92954,92955,92958,92960,92963,92965,92967,92969,92971,92973],{"class":30,"line":17082},[28,92956,92957],{"class":38},"      video.currentTime ",[28,92959,54],{"class":34},[28,92961,92962],{"class":38}," localStorage.",[28,92964,71941],{"class":2225},[28,92966,413],{"class":38},[28,92968,92910],{"class":127},[28,92970,13976],{"class":38},[28,92972,71613],{"class":34},[28,92974,47589],{"class":60},[28,92976,92977],{"class":30,"line":17088},[28,92978,2449],{"class":38},[28,92980,92981,92983,92985],{"class":30,"line":17093},[28,92982,52673],{"class":38},[28,92984,52069],{"class":51556},[28,92986,51563],{"class":38},[28,92988,92989,92991,92993],{"class":30,"line":17107},[28,92990,52041],{"class":38},[28,92992,52056],{"class":51556},[28,92994,51563],{"class":38},[28,92996,92997],{"class":30,"line":17112},[28,92998,2662],{"emptyLinePlaceholder":336},[28,93000,93001,93003,93005],{"class":30,"line":17117},[28,93002,52041],{"class":38},[28,93004,50891],{"class":51556},[28,93006,51563],{"class":38},[328,93008,93009],{},"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":23,"searchDepth":48,"depth":48,"links":93011},[93012,93017,93021,93022,93023,93028,93033,93034,93035,93036,93043,93048,93049,93059,93063,93064,93068],{"id":76947,"depth":48,"text":76948,"children":93013},[93014,93015,93016],{"id":76951,"depth":84,"text":76952},{"id":76976,"depth":84,"text":76977},{"id":76988,"depth":84,"text":76989},{"id":77000,"depth":48,"text":77001,"children":93018},[93019,93020],{"id":77004,"depth":84,"text":77005},{"id":77019,"depth":84,"text":77020},{"id":77071,"depth":48,"text":77072},{"id":77115,"depth":48,"text":77116},{"id":77132,"depth":48,"text":77133,"children":93024},[93025,93026,93027],{"id":77136,"depth":84,"text":77137},{"id":77149,"depth":84,"text":77150},{"id":77254,"depth":84,"text":77255},{"id":77543,"depth":48,"text":77544,"children":93029},[93030,93031,93032],{"id":77547,"depth":84,"text":77548},{"id":77990,"depth":84,"text":77991},{"id":78401,"depth":84,"text":78402},{"id":78464,"depth":48,"text":78465},{"id":78543,"depth":48,"text":78544},{"id":78636,"depth":48,"text":78637},{"id":80481,"depth":48,"text":80482,"children":93037},[93038,93039,93040,93041,93042],{"id":80485,"depth":84,"text":80486},{"id":80497,"depth":84,"text":80498},{"id":80716,"depth":84,"text":80717},{"id":80734,"depth":84,"text":80735},{"id":80794,"depth":84,"text":80795},{"id":85062,"depth":48,"text":85063,"children":93044},[93045,93046,93047],{"id":85066,"depth":84,"text":85067},{"id":85084,"depth":84,"text":85085},{"id":85110,"depth":84,"text":85111},{"id":85119,"depth":48,"text":85120},{"id":85141,"depth":48,"text":85142,"children":93050},[93051,93052,93053,93054,93055,93056,93057,93058],{"id":85145,"depth":84,"text":85146},{"id":85406,"depth":84,"text":85407},{"id":85592,"depth":84,"text":85593},{"id":85959,"depth":84,"text":85960},{"id":86075,"depth":84,"text":86076},{"id":86111,"depth":84,"text":86112},{"id":86158,"depth":84,"text":86159},{"id":86192,"depth":84,"text":86193},{"id":87555,"depth":48,"text":87556,"children":93060},[93061,93062],{"id":87559,"depth":84,"text":87560},{"id":87596,"depth":84,"text":87597},{"id":88951,"depth":48,"text":88952},{"id":89322,"depth":48,"text":89323,"children":93065},[93066,93067],{"id":89326,"depth":84,"text":89327},{"id":89360,"depth":84,"text":89361},{"id":90089,"depth":48,"text":90090,"children":93069},[93070,93071,93072,93073],{"id":90093,"depth":84,"text":90094},{"id":91051,"depth":84,"text":91052},{"id":91993,"depth":84,"text":91994},{"id":92067,"depth":84,"text":92068},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76936,"description":333},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93080,"title":93081,"body":93082,"description":93093,"extension":334,"meta":93094,"navigation":336,"path":93096,"seo":93097,"stem":93098,"__hash__":93099},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93083,"toc":93091},[93084],[14,93085,93086,93087],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[51,93088,93089],{"href":93089,"rel":93090},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24127],{"title":23,"searchDepth":48,"depth":48,"links":93092},[],"三件套第三套学习",{"category":93095},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93081,"description":93093},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93101,"title":93102,"body":93103,"description":333,"extension":334,"meta":93208,"navigation":336,"path":93209,"seo":93210,"stem":93211,"__hash__":93212},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93104,"toc":93203},[93105,93112,93115,93118,93121,93125,93134,93137,93140,93144,93153,93156,93160,93163,93183,93186,93200],[14,93106,93107],{},[51,93108,93111],{"href":93109,"rel":93110},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24127],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93113,93102],{"id":93114},"_1安装",[14,93116,93117],{},"numpy是科学计算基础库,底层是C语言",[14,93119,93120],{},"三种方式：",[351,93122,93124],{"id":93123},"_11-通过pip安装","1.1 通过pip安装",[18,93126,93128],{"className":20,"code":93127,"language":22,"meta":23,"style":23},"pip install numpy\n",[25,93129,93130],{"__ignoreMap":23},[28,93131,93132],{"class":30,"line":31},[28,93133,93127],{"class":38},[14,93135,93136],{},"首选方式，自动处理依赖项",[14,93138,93139],{},"在提示系统命令符中使用cmd",[351,93141,93143],{"id":93142},"_12-通过anaconda安装","1.2 通过Anaconda安装",[18,93145,93147],{"className":20,"code":93146,"language":22,"meta":23,"style":23},"conda install numpy\n",[25,93148,93149],{"__ignoreMap":23},[28,93150,93151],{"class":30,"line":31},[28,93152,93146],{"class":38},[14,93154,93155],{},"自动解决环境依赖",[351,93157,93159],{"id":93158},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93161,93162],{},"对于Debian\u002FUbuntu",[18,93164,93166],{"className":20,"code":93165,"language":22,"meta":23,"style":23},"sudo apt-get install python3-numpy\n",[25,93167,93168],{"__ignoreMap":23},[28,93169,93170,93173,93175,93178,93180],{"class":30,"line":31},[28,93171,93172],{"class":38},"sudo apt",[28,93174,930],{"class":34},[28,93176,93177],{"class":38},"get install python3",[28,93179,930],{"class":34},[28,93181,93182],{"class":38},"numpy\n",[14,93184,93185],{},"对于Fedora:",[18,93187,93189],{"className":20,"code":93188,"language":22,"meta":23,"style":23},"sudo dnf install python3-numpy\n",[25,93190,93191],{"__ignoreMap":23},[28,93192,93193,93196,93198],{"class":30,"line":31},[28,93194,93195],{"class":38},"sudo dnf install python3",[28,93197,930],{"class":34},[28,93199,93182],{"class":38},[328,93201,93202],{},"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":23,"searchDepth":48,"depth":48,"links":93204},[93205,93206,93207],{"id":93123,"depth":48,"text":93124},{"id":93142,"depth":48,"text":93143},{"id":93158,"depth":48,"text":93159},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93102,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93214,"title":93215,"body":93216,"description":333,"extension":334,"meta":93327,"navigation":336,"path":93328,"seo":93329,"stem":93330,"__hash__":93331},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93217,"toc":93325},[93218,93221,93224,93227,93230,93233,93236,93239,93242,93245,93319,93322],[10,93219,93215],{"id":93220},"_10算数函数",[14,93222,93223],{},"加减乘除运算跟python基础语法没区别",[14,93225,93226],{},"除了python那种方法外还可以使用函数",[14,93228,93229],{},"加：np.add(a,b)",[14,93231,93232],{},"减：np.subtract(a,b)",[14,93234,93235],{},"乘：np.multiply(a,b)",[14,93237,93238],{},"除：np.divide(a,b) == a\u002Fb",[14,93240,93241],{},"取余：np.mod(a,b) == a%b",[14,93243,93244],{},"必须会的用法：",[18,93246,93248],{"className":20,"code":93247,"language":22,"meta":23,"style":23},"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",[25,93249,93250,93270,93291,93301,93314],{"__ignoreMap":23},[28,93251,93252,93254,93256,93258,93260,93262,93264,93266,93268],{"class":30,"line":31},[28,93253,51],{"class":38},[28,93255,54],{"class":34},[28,93257,190],{"class":38},[28,93259,819],{"class":60},[28,93261,70],{"class":38},[28,93263,78],{"class":60},[28,93265,64],{"class":38},[28,93267,78],{"class":60},[28,93269,81],{"class":38},[28,93271,93272,93274,93276,93279,93281,93283,93285,93287,93289],{"class":30,"line":48},[28,93273,666],{"class":38},[28,93275,54],{"class":34},[28,93277,93278],{"class":38},"np.array([",[28,93280,845],{"class":60},[28,93282,64],{"class":38},[28,93284,845],{"class":60},[28,93286,64],{"class":38},[28,93288,845],{"class":60},[28,93290,4919],{"class":38},[28,93292,93293,93296,93298],{"class":30,"line":84},[28,93294,93295],{"class":38},"result",[28,93297,54],{"class":34},[28,93299,93300],{"class":38},"np.empty_like(a)\n",[28,93302,93303,93306,93309,93311],{"class":30,"line":91},[28,93304,93305],{"class":38},"np.add(a,b,",[28,93307,93308],{"class":5478},"out",[28,93310,54],{"class":34},[28,93312,93313],{"class":38},"result)\n",[28,93315,93316],{"class":30,"line":97},[28,93317,93318],{"class":38},"result\n",[14,93320,93321],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[328,93323,93324],{},"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":23,"searchDepth":48,"depth":48,"links":93326},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93215,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93333,"title":93334,"body":93335,"description":333,"extension":334,"meta":94096,"navigation":336,"path":94097,"seo":94098,"stem":94099,"__hash__":94100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93336,"toc":94083},[93337,93340,93343,93346,93350,93389,93393,93437,93497,93501,93504,93543,93546,93591,93595,93631,93635,93704,93708,93772,93776,93779,93782,93785,93788,93823,93827,93867,93871,93943,93946,93950,94013,94017,94080],[10,93338,93334],{"id":93339},"_11统计函数",[14,93341,93342],{},"sum max min mean",[14,93344,93345],{},"这些有axis参数，可以指定方向",[351,93347,93349],{"id":93348},"_111-sum求和函数","11.1 sum()求和函数",[18,93351,93353],{"className":20,"code":93352,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[25,93354,93355,93360,93381],{"__ignoreMap":23},[28,93356,93357],{"class":30,"line":31},[28,93358,93359],{"class":87},"#创建一维数组\n",[28,93361,93362,93364,93366,93369,93371,93373,93375,93377,93379],{"class":30,"line":48},[28,93363,51],{"class":38},[28,93365,54],{"class":34},[28,93367,93368],{"class":38},"np.random.randint(",[28,93370,61],{"class":60},[28,93372,64],{"class":38},[28,93374,713],{"class":60},[28,93376,64],{"class":38},[28,93378,1098],{"class":60},[28,93380,81],{"class":38},[28,93382,93383,93386],{"class":30,"line":84},[28,93384,93385],{"class":38},"np.sum(a)",[28,93387,93388],{"class":87},"#求和\n",[351,93390,93392],{"id":93391},"_112-max求最大值函数","11.2 max()求最大值函数",[18,93394,93396],{"className":20,"code":93395,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[25,93397,93398,93402,93422,93427,93432],{"__ignoreMap":23},[28,93399,93400],{"class":30,"line":31},[28,93401,93359],{"class":87},[28,93403,93404,93406,93408,93410,93412,93414,93416,93418,93420],{"class":30,"line":48},[28,93405,51],{"class":38},[28,93407,54],{"class":34},[28,93409,93368],{"class":38},[28,93411,61],{"class":60},[28,93413,64],{"class":38},[28,93415,713],{"class":60},[28,93417,64],{"class":38},[28,93419,1098],{"class":60},[28,93421,81],{"class":38},[28,93423,93424],{"class":30,"line":84},[28,93425,93426],{"class":38},"np.max(a)\n",[28,93428,93429],{"class":30,"line":91},[28,93430,93431],{"class":87},"#最大索引(求最大元素的索引)arg\n",[28,93433,93434],{"class":30,"line":97},[28,93435,93436],{"class":38},"np.argmax(a)\n",[18,93438,93440],{"className":20,"code":93439,"language":22,"meta":23,"style":23},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[25,93441,93442,93463,93483,93487],{"__ignoreMap":23},[28,93443,93444,93446,93448,93451,93453,93455,93457,93459,93461],{"class":30,"line":31},[28,93445,11181],{"class":38},[28,93447,54],{"class":34},[28,93449,93450],{"class":38}," np.array([",[28,93452,61],{"class":60},[28,93454,12697],{"class":38},[28,93456,721],{"class":60},[28,93458,12697],{"class":38},[28,93460,78],{"class":60},[28,93462,4919],{"class":38},[28,93464,93465,93467,93469,93471,93473,93475,93477,93479,93481],{"class":30,"line":48},[28,93466,11207],{"class":38},[28,93468,54],{"class":34},[28,93470,93450],{"class":38},[28,93472,78],{"class":60},[28,93474,12697],{"class":38},[28,93476,211],{"class":60},[28,93478,12697],{"class":38},[28,93480,73],{"class":60},[28,93482,4919],{"class":38},[28,93484,93485],{"class":30,"line":84},[28,93486,2662],{"emptyLinePlaceholder":336},[28,93488,93489,93491,93494],{"class":30,"line":91},[28,93490,30675],{"class":60},[28,93492,93493],{"class":38},"(np.maximum(a, b))   ",[28,93495,93496],{"class":87},"# [3 5 4]，每个位置上取较大值\n",[351,93498,93500],{"id":93499},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93502,93503],{},"①一维数组：",[18,93505,93507],{"className":20,"code":93506,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[25,93508,93509,93513,93533,93538],{"__ignoreMap":23},[28,93510,93511],{"class":30,"line":31},[28,93512,93359],{"class":87},[28,93514,93515,93517,93519,93521,93523,93525,93527,93529,93531],{"class":30,"line":48},[28,93516,51],{"class":38},[28,93518,54],{"class":34},[28,93520,93368],{"class":38},[28,93522,61],{"class":60},[28,93524,64],{"class":38},[28,93526,713],{"class":60},[28,93528,64],{"class":38},[28,93530,1098],{"class":60},[28,93532,81],{"class":38},[28,93534,93535],{"class":30,"line":84},[28,93536,93537],{"class":87},"#求平均值\n",[28,93539,93540],{"class":30,"line":91},[28,93541,93542],{"class":38},"np.mean(a)\n",[14,93544,93545],{},"②二维数组",[18,93547,93549],{"className":20,"code":93548,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[25,93550,93551,93556,93581,93586],{"__ignoreMap":23},[28,93552,93553],{"class":30,"line":31},[28,93554,93555],{"class":87},"#二维数组\n",[28,93557,93558,93561,93563,93565,93567,93569,93571,93573,93575,93577,93579],{"class":30,"line":48},[28,93559,93560],{"class":38},"aa",[28,93562,54],{"class":34},[28,93564,190],{"class":38},[28,93566,61],{"class":60},[28,93568,64],{"class":38},[28,93570,67],{"class":60},[28,93572,70],{"class":38},[28,93574,78],{"class":60},[28,93576,64],{"class":38},[28,93578,73],{"class":60},[28,93580,81],{"class":38},[28,93582,93583],{"class":30,"line":84},[28,93584,93585],{"class":87},"#对数组中的所有数求平均\n",[28,93587,93588],{"class":30,"line":91},[28,93589,93590],{"class":38},"np.mean(aa)\n",[351,93592,93594],{"id":93593},"_114-median求中位数函数","11.4 median()求中位数函数",[18,93596,93598],{"className":20,"code":93597,"language":22,"meta":23,"style":23},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[25,93599,93600,93605,93621,93626],{"__ignoreMap":23},[28,93601,93602],{"class":30,"line":31},[28,93603,93604],{"class":87},"#求中位数\n",[28,93606,93607,93609,93611,93613,93615,93617,93619],{"class":30,"line":48},[28,93608,666],{"class":38},[28,93610,54],{"class":34},[28,93612,190],{"class":38},[28,93614,61],{"class":60},[28,93616,64],{"class":38},[28,93618,845],{"class":60},[28,93620,81],{"class":38},[28,93622,93623],{"class":30,"line":84},[28,93624,93625],{"class":38},"np.median(b)\n",[28,93627,93628],{"class":30,"line":91},[28,93629,93630],{"class":87},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[351,93632,93634],{"id":93633},"_115-power求幂运算函数","11.5 power()求幂运算函数",[18,93636,93638],{"className":20,"code":93637,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[25,93639,93640,93656,93661,93666,93675,93680,93689],{"__ignoreMap":23},[28,93641,93642,93644,93646,93648,93650,93652,93654],{"class":30,"line":31},[28,93643,666],{"class":38},[28,93645,54],{"class":34},[28,93647,190],{"class":38},[28,93649,61],{"class":60},[28,93651,64],{"class":38},[28,93653,845],{"class":60},[28,93655,81],{"class":38},[28,93657,93658],{"class":30,"line":48},[28,93659,93660],{"class":87},"#幂运算\n",[28,93662,93663],{"class":30,"line":84},[28,93664,93665],{"class":87},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[28,93667,93668,93671,93673],{"class":30,"line":91},[28,93669,93670],{"class":38},"np.power(b,",[28,93672,211],{"class":60},[28,93674,81],{"class":38},[28,93676,93677],{"class":30,"line":97},[28,93678,93679],{"class":87},"#或者以下代码，将数据存储起来\n",[28,93681,93682,93684,93686],{"class":30,"line":103},[28,93683,1242],{"class":38},[28,93685,54],{"class":34},[28,93687,93688],{"class":38},"np.empty_like(b)\n",[28,93690,93691,93693,93695,93697,93699,93701],{"class":30,"line":109},[28,93692,93670],{"class":38},[28,93694,211],{"class":60},[28,93696,64],{"class":38},[28,93698,93308],{"class":5478},[28,93700,54],{"class":34},[28,93702,93703],{"class":38},"y)\n",[351,93705,93707],{"id":93706},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[18,93709,93711],{"className":20,"code":93710,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[25,93712,93713,93729,93734,93739,93743,93761],{"__ignoreMap":23},[28,93714,93715,93717,93719,93721,93723,93725,93727],{"class":30,"line":31},[28,93716,666],{"class":38},[28,93718,54],{"class":34},[28,93720,190],{"class":38},[28,93722,61],{"class":60},[28,93724,64],{"class":38},[28,93726,845],{"class":60},[28,93728,81],{"class":38},[28,93730,93731],{"class":30,"line":48},[28,93732,93733],{"class":87},"#开方\n",[28,93735,93736],{"class":30,"line":84},[28,93737,93738],{"class":38},"np.sqrt(b)\n",[28,93740,93741],{"class":30,"line":91},[28,93742,93679],{"class":87},[28,93744,93745,93747,93749,93752,93755,93757,93759],{"class":30,"line":97},[28,93746,1242],{"class":38},[28,93748,54],{"class":34},[28,93750,93751],{"class":38},"np.empty_like(b,",[28,93753,93754],{"class":5478},"dtype",[28,93756,54],{"class":34},[28,93758,451],{"class":60},[28,93760,81],{"class":38},[28,93762,93763,93766,93768,93770],{"class":30,"line":103},[28,93764,93765],{"class":38},"np.sqrt(b,",[28,93767,93308],{"class":5478},[28,93769,54],{"class":34},[28,93771,93703],{"class":38},[351,93773,93775],{"id":93774},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93777,93778],{},"对数组中的元素累计求和，可指定轴",[14,93780,93781],{},"#累计求和的意思是：",[14,93783,93784],{},"a = np.array([1, 2, 3, 4])",[14,93786,93787],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[18,93789,93791],{"className":20,"code":93790,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[25,93792,93793,93809,93814,93818],{"__ignoreMap":23},[28,93794,93795,93797,93799,93801,93803,93805,93807],{"class":30,"line":31},[28,93796,666],{"class":38},[28,93798,54],{"class":34},[28,93800,190],{"class":38},[28,93802,61],{"class":60},[28,93804,64],{"class":38},[28,93806,845],{"class":60},[28,93808,81],{"class":38},[28,93810,93811],{"class":30,"line":48},[28,93812,93813],{"class":38},"np.cumsum(b)\n",[28,93815,93816],{"class":30,"line":84},[28,93817,121],{"class":87},[28,93819,93820],{"class":30,"line":91},[28,93821,93822],{"class":87},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[351,93824,93826],{"id":93825},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[18,93828,93830],{"className":20,"code":93829,"language":22,"meta":23,"style":23},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[25,93831,93832,93848,93853,93858,93862],{"__ignoreMap":23},[28,93833,93834,93836,93838,93840,93842,93844,93846],{"class":30,"line":31},[28,93835,666],{"class":38},[28,93837,54],{"class":34},[28,93839,190],{"class":38},[28,93841,61],{"class":60},[28,93843,64],{"class":38},[28,93845,845],{"class":60},[28,93847,81],{"class":38},[28,93849,93850],{"class":30,"line":48},[28,93851,93852],{"class":87},"#对数组中的元素累计求积，可指定轴\n",[28,93854,93855],{"class":30,"line":84},[28,93856,93857],{"class":38},"np.cumprod(b)\n",[28,93859,93860],{"class":30,"line":91},[28,93861,121],{"class":87},[28,93863,93864],{"class":30,"line":97},[28,93865,93866],{"class":87},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[351,93868,93870],{"id":93869},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[18,93872,93874],{"className":20,"code":93873,"language":22,"meta":23,"style":23},"#删除数组中的重复数据，并对数据进行排序\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",[25,93875,93876,93881,93929,93934,93938],{"__ignoreMap":23},[28,93877,93878],{"class":30,"line":31},[28,93879,93880],{"class":87},"#删除数组中的重复数据，并对数据进行排序\n",[28,93882,93883,93885,93887,93889,93891,93893,93895,93897,93899,93901,93903,93905,93907,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927],{"class":30,"line":48},[28,93884,51],{"class":38},[28,93886,54],{"class":34},[28,93888,93278],{"class":38},[28,93890,61],{"class":60},[28,93892,64],{"class":38},[28,93894,211],{"class":60},[28,93896,64],{"class":38},[28,93898,78],{"class":60},[28,93900,64],{"class":38},[28,93902,897],{"class":60},[28,93904,64],{"class":38},[28,93906,78],{"class":60},[28,93908,64],{"class":38},[28,93910,845],{"class":60},[28,93912,64],{"class":38},[28,93914,602],{"class":60},[28,93916,64],{"class":38},[28,93918,244],{"class":60},[28,93920,64],{"class":38},[28,93922,1173],{"class":60},[28,93924,64],{"class":38},[28,93926,73],{"class":60},[28,93928,4919],{"class":38},[28,93930,93931],{"class":30,"line":84},[28,93932,93933],{"class":38},"np.unique(a)\n",[28,93935,93936],{"class":30,"line":91},[28,93937,121],{"class":87},[28,93939,93940],{"class":30,"line":97},[28,93941,93942],{"class":87},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93944,93945],{},"升序形式排序",[351,93947,93949],{"id":93948},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[18,93951,93953],{"className":20,"code":93952,"language":22,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[25,93954,93955,94003,94008],{"__ignoreMap":23},[28,93956,93957,93959,93961,93963,93965,93967,93969,93971,93973,93975,93977,93979,93981,93983,93985,93987,93989,93991,93993,93995,93997,93999,94001],{"class":30,"line":31},[28,93958,51],{"class":38},[28,93960,54],{"class":34},[28,93962,93278],{"class":38},[28,93964,61],{"class":60},[28,93966,64],{"class":38},[28,93968,211],{"class":60},[28,93970,64],{"class":38},[28,93972,78],{"class":60},[28,93974,64],{"class":38},[28,93976,897],{"class":60},[28,93978,64],{"class":38},[28,93980,78],{"class":60},[28,93982,64],{"class":38},[28,93984,845],{"class":60},[28,93986,64],{"class":38},[28,93988,602],{"class":60},[28,93990,64],{"class":38},[28,93992,244],{"class":60},[28,93994,64],{"class":38},[28,93996,1173],{"class":60},[28,93998,64],{"class":38},[28,94000,73],{"class":60},[28,94002,4919],{"class":38},[28,94004,94005],{"class":30,"line":48},[28,94006,94007],{"class":87},"#返回数组中非零元素的索引\n",[28,94009,94010],{"class":30,"line":84},[28,94011,94012],{"class":38},"np.nonzero(a)\n",[351,94014,94016],{"id":94015},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[18,94018,94020],{"className":20,"code":94019,"language":22,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[25,94021,94022,94070,94075],{"__ignoreMap":23},[28,94023,94024,94026,94028,94030,94032,94034,94036,94038,94040,94042,94044,94046,94048,94050,94052,94054,94056,94058,94060,94062,94064,94066,94068],{"class":30,"line":31},[28,94025,51],{"class":38},[28,94027,54],{"class":34},[28,94029,93278],{"class":38},[28,94031,61],{"class":60},[28,94033,64],{"class":38},[28,94035,211],{"class":60},[28,94037,64],{"class":38},[28,94039,78],{"class":60},[28,94041,64],{"class":38},[28,94043,897],{"class":60},[28,94045,64],{"class":38},[28,94047,78],{"class":60},[28,94049,64],{"class":38},[28,94051,845],{"class":60},[28,94053,64],{"class":38},[28,94055,602],{"class":60},[28,94057,64],{"class":38},[28,94059,244],{"class":60},[28,94061,64],{"class":38},[28,94063,1173],{"class":60},[28,94065,64],{"class":38},[28,94067,73],{"class":60},[28,94069,4919],{"class":38},[28,94071,94072],{"class":30,"line":48},[28,94073,94074],{"class":87},"#计算一组数中最大值与最小值的差，可指定轴\n",[28,94076,94077],{"class":30,"line":84},[28,94078,94079],{"class":38},"np.ptp(a)\n",[328,94081,94082],{},"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":23,"searchDepth":48,"depth":48,"links":94084},[94085,94086,94087,94088,94089,94090,94091,94092,94093,94094,94095],{"id":93348,"depth":48,"text":93349},{"id":93391,"depth":48,"text":93392},{"id":93499,"depth":48,"text":93500},{"id":93593,"depth":48,"text":93594},{"id":93633,"depth":48,"text":93634},{"id":93706,"depth":48,"text":93707},{"id":93774,"depth":48,"text":93775},{"id":93825,"depth":48,"text":93826},{"id":93869,"depth":48,"text":93870},{"id":93948,"depth":48,"text":93949},{"id":94015,"depth":48,"text":94016},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93334,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94102,"title":94103,"body":94104,"description":333,"extension":334,"meta":94758,"navigation":336,"path":94759,"seo":94760,"stem":94761,"__hash__":94762},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94105,"toc":94746},[94106,94109,94113,94116,94331,94335,94338,94547,94551,94617,94622,94626,94629,94632,94670,94674,94677,94682,94686,94689,94692,94697,94701,94704,94708,94711,94714,94719,94723,94726,94729,94734,94738,94743],[10,94107,94103],{"id":94108},"_12其他常用函数",[351,94110,94112],{"id":94111},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94114,94115],{},"将数组的数据按照行列复制扩展",[18,94117,94119],{"className":20,"code":94118,"language":22,"meta":23,"style":23},"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",[25,94120,94121,94137,94146,94150,94155,94160,94173,94177,94181,94186,94191,94195,94200,94224,94236,94240,94244,94249,94254,94259,94264,94268,94281,94285,94289,94294,94299,94304,94309,94314,94318,94322,94327],{"__ignoreMap":23},[28,94122,94123,94125,94127,94129,94131,94133,94135],{"class":30,"line":31},[28,94124,51],{"class":38},[28,94126,54],{"class":34},[28,94128,190],{"class":38},[28,94130,61],{"class":60},[28,94132,64],{"class":38},[28,94134,721],{"class":60},[28,94136,81],{"class":38},[28,94138,94139,94142,94144],{"class":30,"line":48},[28,94140,94141],{"class":38},"np.tile(a,",[28,94143,211],{"class":60},[28,94145,81],{"class":38},[28,94147,94148],{"class":30,"line":84},[28,94149,121],{"class":87},[28,94151,94152],{"class":30,"line":91},[28,94153,94154],{"class":87},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[28,94156,94157],{"class":30,"line":97},[28,94158,94159],{"class":87},"#行复制两次，列复制三次\n",[28,94161,94162,94165,94167,94169,94171],{"class":30,"line":103},[28,94163,94164],{"class":38},"np.tile(a,(",[28,94166,211],{"class":60},[28,94168,64],{"class":38},[28,94170,78],{"class":60},[28,94172,30757],{"class":38},[28,94174,94175],{"class":30,"line":109},[28,94176,121],{"class":87},[28,94178,94179],{"class":30,"line":118},[28,94180,128],{"class":127},[28,94182,94183],{"class":30,"line":124},[28,94184,94185],{"class":127},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[28,94187,94188],{"class":30,"line":131},[28,94189,94190],{"class":127},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[28,94192,94193],{"class":30,"line":137},[28,94194,128],{"class":127},[28,94196,94197],{"class":30,"line":143},[28,94198,94199],{"class":87},"#创建二维数组\n",[28,94201,94202,94204,94206,94208,94210,94212,94214,94216,94218,94220,94222],{"class":30,"line":149},[28,94203,93560],{"class":38},[28,94205,54],{"class":34},[28,94207,190],{"class":38},[28,94209,61],{"class":60},[28,94211,64],{"class":38},[28,94213,67],{"class":60},[28,94215,70],{"class":38},[28,94217,73],{"class":60},[28,94219,64],{"class":38},[28,94221,78],{"class":60},[28,94223,81],{"class":38},[28,94225,94226,94229,94231,94233],{"class":30,"line":1890},[28,94227,94228],{"class":38},"np.tile(aa,",[28,94230,211],{"class":60},[28,94232,828],{"class":38},[28,94234,94235],{"class":87},"#一个数的时候就是行\n",[28,94237,94238],{"class":30,"line":1904},[28,94239,121],{"class":87},[28,94241,94242],{"class":30,"line":1909},[28,94243,128],{"class":127},[28,94245,94246],{"class":30,"line":1915},[28,94247,94248],{"class":127},"array([[ 1,  2,  3,  1,  2,  3],\n",[28,94250,94251],{"class":30,"line":1936},[28,94252,94253],{"class":127},"       [ 4,  5,  6,  4,  5,  6],\n",[28,94255,94256],{"class":30,"line":1941},[28,94257,94258],{"class":127},"       [ 7,  8,  9,  7,  8,  9],\n",[28,94260,94261],{"class":30,"line":1955},[28,94262,94263],{"class":127},"       [10, 11, 12, 10, 11, 12]])\n",[28,94265,94266],{"class":30,"line":1960},[28,94267,128],{"class":127},[28,94269,94270,94273,94275,94277,94279],{"class":30,"line":1989},[28,94271,94272],{"class":38},"np.tile(aa,(",[28,94274,211],{"class":60},[28,94276,64],{"class":38},[28,94278,78],{"class":60},[28,94280,30757],{"class":38},[28,94282,94283],{"class":30,"line":1994},[28,94284,121],{"class":87},[28,94286,94287],{"class":30,"line":2011},[28,94288,128],{"class":127},[28,94290,94291],{"class":30,"line":2016},[28,94292,94293],{"class":127},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94295,94296],{"class":30,"line":2021},[28,94297,94298],{"class":127},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[28,94300,94301],{"class":30,"line":2026},[28,94302,94303],{"class":127},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[28,94305,94306],{"class":30,"line":2040},[28,94307,94308],{"class":127},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[28,94310,94311],{"class":30,"line":2045},[28,94312,94313],{"class":127},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94315,94316],{"class":30,"line":2839},[28,94317,94298],{"class":127},[28,94319,94320],{"class":30,"line":2853},[28,94321,94303],{"class":127},[28,94323,94324],{"class":30,"line":2861},[28,94325,94326],{"class":127},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[28,94328,94329],{"class":30,"line":2866},[28,94330,128],{"class":127},[351,94332,94334],{"id":94333},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94336,94337],{},"repeat()将数组中的每个元素重复若干次",[18,94339,94341],{"className":20,"code":94340,"language":22,"meta":23,"style":23},"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",[25,94342,94343,94359,94368,94372,94377,94401,94406,94415,94419,94424,94428,94433,94449,94453,94457,94462,94467,94472,94476,94481,94485,94490,94495,94499,94515,94519,94523,94528,94533,94538,94543],{"__ignoreMap":23},[28,94344,94345,94347,94349,94351,94353,94355,94357],{"class":30,"line":31},[28,94346,51],{"class":38},[28,94348,54],{"class":34},[28,94350,190],{"class":38},[28,94352,61],{"class":60},[28,94354,64],{"class":38},[28,94356,721],{"class":60},[28,94358,81],{"class":38},[28,94360,94361,94364,94366],{"class":30,"line":48},[28,94362,94363],{"class":38},"np.repeat(a,",[28,94365,78],{"class":60},[28,94367,81],{"class":38},[28,94369,94370],{"class":30,"line":84},[28,94371,121],{"class":87},[28,94373,94374],{"class":30,"line":91},[28,94375,94376],{"class":87},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[28,94378,94379,94381,94383,94385,94387,94389,94391,94393,94395,94397,94399],{"class":30,"line":97},[28,94380,93560],{"class":38},[28,94382,54],{"class":34},[28,94384,190],{"class":38},[28,94386,61],{"class":60},[28,94388,64],{"class":38},[28,94390,67],{"class":60},[28,94392,70],{"class":38},[28,94394,73],{"class":60},[28,94396,64],{"class":38},[28,94398,78],{"class":60},[28,94400,81],{"class":38},[28,94402,94403],{"class":30,"line":103},[28,94404,94405],{"class":87},"#这个重复之后二维变成一维\n",[28,94407,94408,94411,94413],{"class":30,"line":109},[28,94409,94410],{"class":38},"np.repeat(aa,",[28,94412,211],{"class":60},[28,94414,81],{"class":38},[28,94416,94417],{"class":30,"line":118},[28,94418,128],{"class":127},[28,94420,94421],{"class":30,"line":124},[28,94422,94423],{"class":127},"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",[28,94425,94426],{"class":30,"line":131},[28,94427,128],{"class":127},[28,94429,94430],{"class":30,"line":137},[28,94431,94432],{"class":87},"#指定axis\n",[28,94434,94435,94437,94439,94441,94443,94445,94447],{"class":30,"line":143},[28,94436,94410],{"class":38},[28,94438,211],{"class":60},[28,94440,64],{"class":38},[28,94442,47770],{"class":5478},[28,94444,54],{"class":34},[28,94446,244],{"class":60},[28,94448,81],{"class":38},[28,94450,94451],{"class":30,"line":149},[28,94452,121],{"class":87},[28,94454,94455],{"class":30,"line":1890},[28,94456,128],{"class":127},[28,94458,94459],{"class":30,"line":1904},[28,94460,94461],{"class":127},"array([[ 1,  2,  3],\n",[28,94463,94464],{"class":30,"line":1909},[28,94465,94466],{"class":127},"       [ 1,  2,  3],\n",[28,94468,94469],{"class":30,"line":1915},[28,94470,94471],{"class":127},"       [ 4,  5,  6],\n",[28,94473,94474],{"class":30,"line":1936},[28,94475,94471],{"class":127},[28,94477,94478],{"class":30,"line":1941},[28,94479,94480],{"class":127},"       [ 7,  8,  9],\n",[28,94482,94483],{"class":30,"line":1955},[28,94484,94480],{"class":127},[28,94486,94487],{"class":30,"line":1960},[28,94488,94489],{"class":127},"       [10, 11, 12],\n",[28,94491,94492],{"class":30,"line":1989},[28,94493,94494],{"class":127},"       [10, 11, 12]])\n",[28,94496,94497],{"class":30,"line":1994},[28,94498,128],{"class":127},[28,94500,94501,94503,94505,94507,94509,94511,94513],{"class":30,"line":2011},[28,94502,94410],{"class":38},[28,94504,211],{"class":60},[28,94506,64],{"class":38},[28,94508,47770],{"class":5478},[28,94510,54],{"class":34},[28,94512,61],{"class":60},[28,94514,81],{"class":38},[28,94516,94517],{"class":30,"line":2016},[28,94518,121],{"class":87},[28,94520,94521],{"class":30,"line":2021},[28,94522,128],{"class":127},[28,94524,94525],{"class":30,"line":2026},[28,94526,94527],{"class":127},"array([[ 1,  1,  2,  2,  3,  3],\n",[28,94529,94530],{"class":30,"line":2040},[28,94531,94532],{"class":127},"       [ 4,  4,  5,  5,  6,  6],\n",[28,94534,94535],{"class":30,"line":2045},[28,94536,94537],{"class":127},"       [ 7,  7,  8,  8,  9,  9],\n",[28,94539,94540],{"class":30,"line":2839},[28,94541,94542],{"class":127},"       [10, 10, 11, 11, 12, 12]])\n",[28,94544,94545],{"class":30,"line":2853},[28,94546,128],{"class":127},[351,94548,94550],{"id":94549},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[18,94552,94554],{"className":20,"code":94553,"language":22,"meta":23,"style":23},"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",[25,94555,94556,94572,94577,94589,94593,94598,94608,94612],{"__ignoreMap":23},[28,94557,94558,94560,94562,94564,94566,94568,94570],{"class":30,"line":31},[28,94559,51],{"class":38},[28,94561,54],{"class":34},[28,94563,190],{"class":38},[28,94565,61],{"class":60},[28,94567,64],{"class":38},[28,94569,721],{"class":60},[28,94571,81],{"class":38},[28,94573,94574],{"class":30,"line":48},[28,94575,94576],{"class":87},"#array([，2，3，4])\n",[28,94578,94579,94582,94584,94586],{"class":30,"line":84},[28,94580,94581],{"class":38},"np.roll(a,",[28,94583,211],{"class":60},[28,94585,828],{"class":38},[28,94587,94588],{"class":87},"#传正数向后调多少位，传负数向前调多少位\n",[28,94590,94591],{"class":30,"line":91},[28,94592,121],{"class":87},[28,94594,94595],{"class":30,"line":97},[28,94596,94597],{"class":87},"#array([3, 4, 1, 2])\n",[28,94599,94600,94602,94604,94606],{"class":30,"line":103},[28,94601,94581],{"class":38},[28,94603,930],{"class":34},[28,94605,61],{"class":60},[28,94607,81],{"class":38},[28,94609,94610],{"class":30,"line":109},[28,94611,121],{"class":87},[28,94613,94614],{"class":30,"line":118},[28,94615,94616],{"class":87},"#array([2, 3, 4, 1])\n",[14,94618,94619],{},[1727,94620],{"alt":23,"src":94621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[351,94623,94625],{"id":94624},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94627,94628],{},"resize()重新调整数组的大小",[14,94630,94631],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[18,94633,94635],{"className":20,"code":94634,"language":22,"meta":23,"style":23},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[25,94636,94637,94642,94655],{"__ignoreMap":23},[28,94638,94639],{"class":30,"line":31},[28,94640,94641],{"class":87},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[28,94643,94644,94647,94649,94651,94653],{"class":30,"line":48},[28,94645,94646],{"class":38},"np.resize(aa,(",[28,94648,211],{"class":60},[28,94650,64],{"class":38},[28,94652,206],{"class":60},[28,94654,30757],{"class":38},[28,94656,94657,94659,94661,94663,94665,94667],{"class":30,"line":84},[28,94658,94646],{"class":38},[28,94660,211],{"class":60},[28,94662,64],{"class":38},[28,94664,819],{"class":60},[28,94666,83027],{"class":38},[28,94668,94669],{"class":87},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[351,94671,94673],{"id":94672},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94675,94676],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94678,94679],{},[1727,94680],{"alt":23,"src":94681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[351,94683,94685],{"id":94684},"_126-保存加载文件","12.6 保存加载文件",[14,94687,94688],{},"savetxt():将数据保存到txt文件中",[14,94690,94691],{},"loadtxt():从文件加载数据",[14,94693,94694],{},[1727,94695],{"alt":23,"src":94696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[351,94698,94700],{"id":94699},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94702,94703],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[351,94705,94707],{"id":94706},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94709,94710],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94712,94713],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94715,94716],{},[1727,94717],{"alt":23,"src":94718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[351,94720,94722],{"id":94721},"_129-where语句","12.9 where语句",[14,94724,94725],{},"np.where(条件,x,y)",[14,94727,94728],{},"如果条件为True,对应值为x,否则对应值为y",[14,94730,94731],{},[1727,94732],{"alt":23,"src":94733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[351,94735,94737],{"id":94736},"_1210-dot矩阵","12.10 dot()矩阵",[14,94739,94740],{},[1727,94741],{"alt":23,"src":94742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[328,94744,94745],{},"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":23,"searchDepth":48,"depth":48,"links":94747},[94748,94749,94750,94751,94752,94753,94754,94755,94756,94757],{"id":94111,"depth":48,"text":94112},{"id":94333,"depth":48,"text":94334},{"id":94549,"depth":48,"text":94550},{"id":94624,"depth":48,"text":94625},{"id":94672,"depth":48,"text":94673},{"id":94684,"depth":48,"text":94685},{"id":94699,"depth":48,"text":94700},{"id":94706,"depth":48,"text":94707},{"id":94721,"depth":48,"text":94722},{"id":94736,"depth":48,"text":94737},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94103,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94764,"title":94765,"body":94766,"description":333,"extension":334,"meta":95119,"navigation":336,"path":95120,"seo":95121,"stem":95122,"__hash__":95123},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94767,"toc":95117},[94768,94771,94774,94777,94780,94783,94848,94850,95114],[10,94769,94765],{"id":94770},"_13数组排序",[14,94772,94773],{},"排序主要用到的方法是np.sort和np.argsort",[14,94775,94776],{},"其中np.sort()对数组直接排序",[14,94778,94779],{},"而np.argsort()是返回排序后的原始索引",[14,94781,94782],{},"①一维数组",[18,94784,94786],{"className":20,"code":94785,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[25,94787,94788,94792,94832,94840],{"__ignoreMap":23},[28,94789,94790],{"class":30,"line":31},[28,94791,93359],{"class":87},[28,94793,94794,94796,94798,94800,94802,94804,94806,94808,94810,94812,94814,94816,94818,94820,94822,94824,94826,94828,94830],{"class":30,"line":48},[28,94795,51],{"class":38},[28,94797,54],{"class":34},[28,94799,93278],{"class":38},[28,94801,78],{"class":60},[28,94803,64],{"class":38},[28,94805,897],{"class":60},[28,94807,64],{"class":38},[28,94809,794],{"class":60},[28,94811,64],{"class":38},[28,94813,1173],{"class":60},[28,94815,64],{"class":38},[28,94817,682],{"class":60},[28,94819,64],{"class":38},[28,94821,1290],{"class":60},[28,94823,64],{"class":38},[28,94825,206],{"class":60},[28,94827,64],{"class":38},[28,94829,845],{"class":60},[28,94831,4919],{"class":38},[28,94833,94834,94837],{"class":30,"line":84},[28,94835,94836],{"class":38},"np.sort(a)",[28,94838,94839],{"class":87},"#升序排序\n",[28,94841,94842,94845],{"class":30,"line":91},[28,94843,94844],{"class":38},"np.argsort(a)",[28,94846,94847],{"class":87},"#按照元素大小来索引排序\n",[14,94849,93545],{},[18,94851,94853],{"className":20,"code":94852,"language":22,"meta":23,"style":23},"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",[25,94854,94855,94867,94893,94898,94902,94907,94912,94917,94922,94926,94934,94938,94943,94948,94953,94958,94962,94967,94980,94984,94989,94994,94999,95004,95008,95013,95025,95029,95033,95037,95041,95045,95049,95054,95069,95074,95083,95088,95092,95096,95101,95105,95110],{"__ignoreMap":23},[28,94856,94857,94860,94862,94864],{"class":30,"line":31},[28,94858,94859],{"class":38},"np.random.seed(",[28,94861,244],{"class":60},[28,94863,828],{"class":38},[28,94865,94866],{"class":87},"#保证每次值一样\n",[28,94868,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887,94889,94891],{"class":30,"line":48},[28,94870,93560],{"class":38},[28,94872,54],{"class":34},[28,94874,93368],{"class":38},[28,94876,713],{"class":60},[28,94878,64],{"class":38},[28,94880,31753],{"class":5478},[28,94882,54],{"class":34},[28,94884,413],{"class":38},[28,94886,73],{"class":60},[28,94888,64],{"class":38},[28,94890,206],{"class":60},[28,94892,30757],{"class":38},[28,94894,94895],{"class":30,"line":84},[28,94896,94897],{"class":87},"#原数组：\n",[28,94899,94900],{"class":30,"line":91},[28,94901,128],{"class":127},[28,94903,94904],{"class":30,"line":97},[28,94905,94906],{"class":127},"array([[44, 47, 64, 67, 67,  9],\n",[28,94908,94909],{"class":30,"line":103},[28,94910,94911],{"class":127},"       [83, 21, 36, 87, 70, 88],\n",[28,94913,94914],{"class":30,"line":109},[28,94915,94916],{"class":127},"       [88, 12, 58, 65, 39, 87],\n",[28,94918,94919],{"class":30,"line":118},[28,94920,94921],{"class":127},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[28,94923,94924],{"class":30,"line":124},[28,94925,128],{"class":127},[28,94927,94928,94931],{"class":30,"line":131},[28,94929,94930],{"class":38},"np.sort(aa)",[28,94932,94933],{"class":87},"#每行进行了排序\n",[28,94935,94936],{"class":30,"line":137},[28,94937,128],{"class":127},[28,94939,94940],{"class":30,"line":143},[28,94941,94942],{"class":127},"array([[ 9, 44, 47, 64, 67, 67],\n",[28,94944,94945],{"class":30,"line":149},[28,94946,94947],{"class":127},"       [21, 36, 70, 83, 87, 88],\n",[28,94949,94950],{"class":30,"line":1890},[28,94951,94952],{"class":127},"       [12, 39, 58, 65, 87, 88],\n",[28,94954,94955],{"class":30,"line":1904},[28,94956,94957],{"class":127},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[28,94959,94960],{"class":30,"line":1909},[28,94961,128],{"class":127},[28,94963,94964],{"class":30,"line":1915},[28,94965,94966],{"class":87},"#axis=0时\n",[28,94968,94969,94972,94974,94976,94978],{"class":30,"line":1936},[28,94970,94971],{"class":38},"np.sort(aa,",[28,94973,47770],{"class":5478},[28,94975,54],{"class":34},[28,94977,244],{"class":60},[28,94979,81],{"class":38},[28,94981,94982],{"class":30,"line":1941},[28,94983,128],{"class":127},[28,94985,94986],{"class":30,"line":1955},[28,94987,94988],{"class":127},"array([[44, 12, 36, 37, 25,  9],\n",[28,94990,94991],{"class":30,"line":1960},[28,94992,94993],{"class":127},"       [46, 21, 58, 65, 39, 77],\n",[28,94995,94996],{"class":30,"line":1989},[28,94997,94998],{"class":127},"       [83, 47, 64, 67, 67, 87],\n",[28,95000,95001],{"class":30,"line":1994},[28,95002,95003],{"class":127},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[28,95005,95006],{"class":30,"line":2011},[28,95007,128],{"class":127},[28,95009,95010],{"class":30,"line":2016},[28,95011,95012],{"class":87},"#axis=1时,为默认值\n",[28,95014,95015,95017,95019,95021,95023],{"class":30,"line":2021},[28,95016,94971],{"class":38},[28,95018,47770],{"class":5478},[28,95020,54],{"class":34},[28,95022,61],{"class":60},[28,95024,81],{"class":38},[28,95026,95027],{"class":30,"line":2026},[28,95028,128],{"class":127},[28,95030,95031],{"class":30,"line":2040},[28,95032,94942],{"class":127},[28,95034,95035],{"class":30,"line":2045},[28,95036,94947],{"class":127},[28,95038,95039],{"class":30,"line":2839},[28,95040,94952],{"class":127},[28,95042,95043],{"class":30,"line":2853},[28,95044,94957],{"class":127},[28,95046,95047],{"class":30,"line":2861},[28,95048,128],{"class":127},[28,95050,95051],{"class":30,"line":2866},[28,95052,95053],{"class":87},"#按最后一列排序\n",[28,95055,95056,95058,95060,95063,95065,95067],{"class":30,"line":2872},[28,95057,666],{"class":38},[28,95059,54],{"class":34},[28,95061,95062],{"class":38},"aa[:,",[28,95064,930],{"class":34},[28,95066,61],{"class":60},[28,95068,33502],{"class":38},[28,95070,95071],{"class":30,"line":2878},[28,95072,95073],{"class":87},"#获取最后一列排好序的索引\n",[28,95075,95076,95078,95080],{"class":30,"line":2883},[28,95077,74314],{"class":38},[28,95079,54],{"class":34},[28,95081,95082],{"class":38},"np.argsort(b)\n",[28,95084,95085],{"class":30,"line":8210},[28,95086,95087],{"class":38},"aa[index]\n",[28,95089,95090],{"class":30,"line":8234},[28,95091,128],{"class":127},[28,95093,95094],{"class":30,"line":8239},[28,95095,94906],{"class":127},[28,95097,95098],{"class":30,"line":8245},[28,95099,95100],{"class":127},"       [46, 88, 81, 37, 25, 77],\n",[28,95102,95103],{"class":30,"line":8272},[28,95104,94916],{"class":127},[28,95106,95107],{"class":30,"line":8277},[28,95108,95109],{"class":127},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[28,95111,95112],{"class":30,"line":8283},[28,95113,128],{"class":127},[328,95115,95116],{},"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":23,"searchDepth":48,"depth":48,"links":95118},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94765,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95125,"title":95126,"body":95127,"description":333,"extension":334,"meta":95157,"navigation":336,"path":95158,"seo":95159,"stem":95160,"__hash__":95161},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95128,"toc":95155},[95129,95132,95135,95138,95141,95144,95147,95150],[10,95130,95126],{"id":95131},"_14广播机制",[14,95133,95134],{},"广播的规则：",[14,95136,95137],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95139,95140],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95142,95143],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95145,95146],{},"3.如果没有维度形状为1，则会引发异常",[14,95148,95149],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95151,95152],{},[1727,95153],{"alt":23,"src":95154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":23,"searchDepth":48,"depth":48,"links":95156},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95126,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95163,"title":95164,"body":95165,"description":333,"extension":334,"meta":95263,"navigation":336,"path":95264,"seo":95265,"stem":95266,"__hash__":95267},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95166,"toc":95261},[95167,95170,95173,95258],[10,95168,95164],{"id":95169},"_15比较掩码",[14,95171,95172],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[18,95174,95176],{"className":20,"code":95175,"language":22,"meta":23,"style":23},"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",[25,95177,95178,95224,95235,95249,95253],{"__ignoreMap":23},[28,95179,95180,95182,95184,95187,95189,95191,95193,95195,95197,95199,95201,95203,95205,95207,95209,95211,95213,95215,95217,95219,95221],{"class":30,"line":31},[28,95181,51],{"class":38},[28,95183,54],{"class":34},[28,95185,95186],{"class":38},"np.array([[",[28,95188,61],{"class":60},[28,95190,64],{"class":38},[28,95192,211],{"class":60},[28,95194,64],{"class":38},[28,95196,78],{"class":60},[28,95198,48286],{"class":38},[28,95200,871],{"class":60},[28,95202,64],{"class":38},[28,95204,897],{"class":60},[28,95206,64],{"class":38},[28,95208,67],{"class":60},[28,95210,48286],{"class":38},[28,95212,1123],{"class":60},[28,95214,64],{"class":38},[28,95216,1148],{"class":60},[28,95218,64],{"class":38},[28,95220,1173],{"class":60},[28,95222,95223],{"class":38},"]])\n",[28,95225,95226,95228,95230,95232],{"class":30,"line":48},[28,95227,51],{"class":38},[28,95229,1307],{"class":34},[28,95231,1098],{"class":60},[28,95233,95234],{"class":87},"#结果是一个由True,False组成的数组\n",[28,95236,95237,95240,95242,95244,95246],{"class":30,"line":84},[28,95238,95239],{"class":38},"a[a",[28,95241,1307],{"class":34},[28,95243,1098],{"class":60},[28,95245,1337],{"class":38},[28,95247,95248],{"class":87},"#小于20的元素会存到这个数组中\n",[28,95250,95251],{"class":30,"line":91},[28,95252,121],{"class":87},[28,95254,95255],{"class":30,"line":97},[28,95256,95257],{"class":87},"#array([ 1,  2,  3, 11, 12, 13])\n",[328,95259,95260],{},"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":23,"searchDepth":48,"depth":48,"links":95262},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95164,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95269,"title":95270,"body":95271,"description":333,"extension":334,"meta":95363,"navigation":336,"path":95364,"seo":95365,"stem":95366,"__hash__":95367},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95272,"toc":95361},[95273,95276,95279,95282,95285,95288,95353,95358],[10,95274,95270],{"id":95275},"_16魔法命令time",[14,95277,95278],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95280,95281],{},"%:行模式",[14,95283,95284],{},"%%:单元格模式",[14,95286,95287],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[18,95289,95291],{"className":20,"code":95290,"language":22,"meta":23,"style":23},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[25,95292,95293,95298,95305,95310,95319,95332,95336,95344],{"__ignoreMap":23},[28,95294,95295],{"class":30,"line":31},[28,95296,95297],{"class":87},"#程序执行时间\n",[28,95299,95300,95302],{"class":30,"line":48},[28,95301,35],{"class":34},[28,95303,95304],{"class":38}," time \n",[28,95306,95307],{"class":30,"line":84},[28,95308,95309],{"class":87},"#获取时间\n",[28,95311,95312,95315,95317],{"class":30,"line":91},[28,95313,95314],{"class":38},"start",[28,95316,54],{"class":34},[28,95318,32674],{"class":38},[28,95320,95321,95324,95327,95329],{"class":30,"line":97},[28,95322,95323],{"class":38},"time.sleep(",[28,95325,95326],{"class":60},"0.4",[28,95328,828],{"class":38},[28,95330,95331],{"class":87},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[28,95333,95334],{"class":30,"line":103},[28,95335,95309],{"class":87},[28,95337,95338,95340,95342],{"class":30,"line":109},[28,95339,46057],{"class":38},[28,95341,54],{"class":34},[28,95343,32674],{"class":38},[28,95345,95346,95348,95350],{"class":30,"line":118},[28,95347,46057],{"class":38},[28,95349,930],{"class":34},[28,95351,95352],{"class":38},"start\n",[14,95354,95355],{},[1727,95356],{"alt":23,"src":95357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[328,95359,95360],{},"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":23,"searchDepth":48,"depth":48,"links":95362},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95270,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95369,"title":95370,"body":95371,"description":333,"extension":334,"meta":95406,"navigation":336,"path":95407,"seo":95408,"stem":95409,"__hash__":95410},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95372,"toc":95404},[95373,95376,95379,95382,95385,95388,95391,95394,95399],[10,95374,95370],{"id":95375},"_17魔法命令timeit",[14,95377,95378],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95380,95381],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95383,95384],{},"单元格模式：",[14,95386,95387],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95389,95390],{},"初始化语句执行次数由轮数来决定",[14,95392,95393],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95395,95396],{},[1727,95397],{"alt":23,"src":95398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95400,95401],{},[1727,95402],{"alt":23,"src":95403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":23,"searchDepth":48,"depth":48,"links":95405},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95370,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95412,"title":95413,"body":95414,"description":333,"extension":334,"meta":95432,"navigation":336,"path":95433,"seo":95434,"stem":95435,"__hash__":95436},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95415,"toc":95430},[95416,95419,95422,95425],[10,95417,95413],{"id":95418},"_18魔法命令writefile和run",[14,95420,95421],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95423,95424],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95426,95427],{},[1727,95428],{"alt":23,"src":95429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":23,"searchDepth":48,"depth":48,"links":95431},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95413,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95438,"title":95439,"body":95440,"description":333,"extension":334,"meta":95493,"navigation":336,"path":95494,"seo":95495,"stem":95496,"__hash__":95497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95441,"toc":95491},[95442,95445,95448,95450,95453,95456,95461,95464,95467,95470,95473,95476,95479,95482,95485,95488],[10,95443,95439],{"id":95444},"_19魔法命令memit",[14,95446,95447],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95449,24862],{},[14,95451,95452],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95454,95455],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95457,95458],{},[1727,95459],{"alt":23,"src":95460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95462,95463],{},"补充：",[14,95465,95466],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95468,95469],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95471,95472],{},"解决方法：",[14,95474,95475],{},"1.cmd",[14,95477,95478],{},"2.依次输入以下代码：",[14,95480,95481],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95483,95484],{},"pip install --upgrade ipython",[14,95486,95487],{},"#升级 memory_profiler 和 setuptools",[14,95489,95490],{},"pip install --upgrade memory_profiler setuptools",{"title":23,"searchDepth":48,"depth":48,"links":95492},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95439,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95499,"title":95500,"body":95501,"description":333,"extension":334,"meta":97147,"navigation":336,"path":97148,"seo":97149,"stem":97150,"__hash__":97151},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95502,"toc":97117},[95503,95506,95510,95514,95575,95578,95583,95587,95592,95597,95602,95607,95610,95615,95619,95623,95656,95659,95662,95665,95717,95720,95756,95759,95801,95805,95826,95828,95865,95867,95872,95874,95879,95883,95886,95914,95918,95922,95975,95979,96071,96075,96079,96082,96087,96091,96116,96121,96125,96128,96131,96134,96137,96140,96143,96146,96158,96162,96166,96169,96201,96204,96227,96230,96256,96259,96285,96288,96322,96325,96387,96391,96394,96398,96401,96427,96430,96433,96438,96441,96510,96512,96517,96578,96581,96592,96598,96603,96607,96610,96623,96627,96642,96644,96667,96669,96695,96698,96701,96704,96752,96754,96759,96763,96767,96794,96798,96825,96828,96833,96838,96928,96932,96990,96995,96998,97001,97043,97047,97103,97108,97111,97114],[10,95504,95500],{"id":95505},"_2创建数组",[351,95507,95509],{"id":95508},"_21-array函数创建数组","2.1 array()函数创建数组",[380,95511,95513],{"id":95512},"_221-函数语句","2.2.1 函数语句",[18,95515,95517],{"className":20,"code":95516,"language":22,"meta":23,"style":23},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[25,95518,95519],{"__ignoreMap":23},[28,95520,95521,95524,95527,95529,95531,95533,95535,95537,95540,95542,95545,95547,95550,95552,95554,95556,95559,95561,95564,95566,95569,95571,95573],{"class":30,"line":31},[28,95522,95523],{"class":38},"numpy.array(",[28,95525,95526],{"class":60},"object",[28,95528,12697],{"class":38},[28,95530,93754],{"class":5478},[28,95532,13826],{"class":34},[28,95534,39189],{"class":60},[28,95536,12697],{"class":38},[28,95538,95539],{"class":5478},"copy",[28,95541,13826],{"class":34},[28,95543,95544],{"class":60}," True",[28,95546,12697],{"class":38},[28,95548,95549],{"class":5478},"order",[28,95551,13826],{"class":34},[28,95553,39189],{"class":60},[28,95555,12697],{"class":38},[28,95557,95558],{"class":5478},"subok",[28,95560,13826],{"class":34},[28,95562,95563],{"class":60}," False",[28,95565,12697],{"class":38},[28,95567,95568],{"class":5478},"ndmin",[28,95570,13826],{"class":34},[28,95572,4355],{"class":60},[28,95574,81],{"class":38},[14,95576,95577],{},"参数：",[14,95579,95580],{},[1727,95581],{"alt":23,"src":95582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[380,95584,95586],{"id":95585},"_222-实例","2.2.2 实例",[14,95588,95589],{},[1727,95590],{"alt":23,"src":95591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95593,95594],{},[1727,95595],{"alt":23,"src":95596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95598,95599],{},[1727,95600],{"alt":23,"src":95601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95603,95604],{},[1727,95605],{"alt":23,"src":95606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95608,95609],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95611,95612],{},[1727,95613],{"alt":23,"src":95614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[351,95616,95618],{"id":95617},"_22-随机数创建数组","2.2 随机数创建数组",[380,95620,95622],{"id":95621},"_221-random语句","2.2.1 random语句",[18,95624,95626],{"className":20,"code":95625,"language":22,"meta":23,"style":23},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[25,95627,95628,95633,95638,95646,95651],{"__ignoreMap":23},[28,95629,95630],{"class":30,"line":31},[28,95631,95632],{"class":87},"#random.random()\n",[28,95634,95635],{"class":30,"line":48},[28,95636,95637],{"class":87},"#确定随机种子,就是每次运行结果是相同的\n",[28,95639,95640,95642,95644],{"class":30,"line":84},[28,95641,94859],{"class":38},[28,95643,244],{"class":60},[28,95645,81],{"class":38},[28,95647,95648],{"class":30,"line":91},[28,95649,95650],{"class":38},"np.random.random()\n",[28,95652,95653],{"class":30,"line":97},[28,95654,95655],{"class":87},"#生成一个随机的数目\n",[14,95657,95658],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95660,95661],{},"可以指定数组形状 size",[14,95663,95664],{},"①生成一维数组",[18,95666,95668],{"className":20,"code":95667,"language":22,"meta":23,"style":23},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[25,95669,95670,95675,95688,95693,95709],{"__ignoreMap":23},[28,95671,95672],{"class":30,"line":31},[28,95673,95674],{"class":87},"#random.random(size())\n",[28,95676,95677,95680,95682,95684,95686],{"class":30,"line":48},[28,95678,95679],{"class":38},"np.random.random(",[28,95681,31753],{"class":5478},[28,95683,54],{"class":34},[28,95685,721],{"class":60},[28,95687,81],{"class":38},[28,95689,95690],{"class":30,"line":84},[28,95691,95692],{"class":87},"#生成一位的五个元素\n",[28,95694,95695,95697,95699,95701,95703,95705,95707],{"class":30,"line":91},[28,95696,51],{"class":38},[28,95698,54],{"class":34},[28,95700,95679],{"class":38},[28,95702,31753],{"class":5478},[28,95704,54],{"class":34},[28,95706,73],{"class":60},[28,95708,81],{"class":38},[28,95710,95711,95714],{"class":30,"line":97},[28,95712,95713],{"class":38},"a.shape ",[28,95715,95716],{"class":87},"#输出数组形状\n",[14,95718,95719],{},"②生成二维数组",[18,95721,95723],{"className":20,"code":95722,"language":22,"meta":23,"style":23},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[25,95724,95725,95729,95751],{"__ignoreMap":23},[28,95726,95727],{"class":30,"line":31},[28,95728,93555],{"class":87},[28,95730,95731,95733,95735,95737,95739,95741,95743,95745,95747,95749],{"class":30,"line":48},[28,95732,93560],{"class":38},[28,95734,54],{"class":34},[28,95736,95679],{"class":38},[28,95738,31753],{"class":5478},[28,95740,54],{"class":34},[28,95742,413],{"class":38},[28,95744,73],{"class":60},[28,95746,64],{"class":38},[28,95748,721],{"class":60},[28,95750,30757],{"class":38},[28,95752,95753],{"class":30,"line":84},[28,95754,95755],{"class":87},"#生成四行五列的数组\n",[14,95757,95758],{},"③生成三维数组",[18,95760,95762],{"className":20,"code":95761,"language":22,"meta":23,"style":23},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[25,95763,95764,95769,95796],{"__ignoreMap":23},[28,95765,95766],{"class":30,"line":31},[28,95767,95768],{"class":87},"#三维数组\n",[28,95770,95771,95774,95776,95778,95780,95782,95784,95786,95788,95790,95792,95794],{"class":30,"line":48},[28,95772,95773],{"class":38},"aaa",[28,95775,54],{"class":34},[28,95777,95679],{"class":38},[28,95779,31753],{"class":5478},[28,95781,54],{"class":34},[28,95783,413],{"class":38},[28,95785,211],{"class":60},[28,95787,64],{"class":38},[28,95789,78],{"class":60},[28,95791,64],{"class":38},[28,95793,73],{"class":60},[28,95795,30757],{"class":38},[28,95797,95798],{"class":30,"line":84},[28,95799,95800],{"class":38},"aaa.shape\n",[380,95802,95804],{"id":95803},"_222-randint语句","2.2.2 randint语句",[18,95806,95808],{"className":20,"code":95807,"language":22,"meta":23,"style":23},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[25,95809,95810,95815],{"__ignoreMap":23},[28,95811,95812],{"class":30,"line":31},[28,95813,95814],{"class":87},"#生成随机的整数 random.randint(low,high,size)\n",[28,95816,95817,95819,95821,95823],{"class":30,"line":48},[28,95818,93368],{"class":38},[28,95820,721],{"class":60},[28,95822,13976],{"class":38},[28,95824,95825],{"class":87},"#0~5中的随机一个数\n",[14,95827,95664],{},[18,95829,95831],{"className":20,"code":95830,"language":22,"meta":23,"style":23},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[25,95832,95833,95838,95860],{"__ignoreMap":23},[28,95834,95835],{"class":30,"line":31},[28,95836,95837],{"class":87},"#一维\n",[28,95839,95840,95842,95844,95846,95848,95850,95852,95854,95856,95858],{"class":30,"line":48},[28,95841,93368],{"class":38},[28,95843,61],{"class":60},[28,95845,64],{"class":38},[28,95847,871],{"class":60},[28,95849,64],{"class":38},[28,95851,31753],{"class":5478},[28,95853,54],{"class":34},[28,95855,413],{"class":38},[28,95857,845],{"class":60},[28,95859,30757],{"class":38},[28,95861,95862],{"class":30,"line":84},[28,95863,95864],{"class":87},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95866,95719],{},[14,95868,95869],{},[1727,95870],{"alt":23,"src":95871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95873,95758],{},[14,95875,95876],{},[1727,95877],{"alt":23,"src":95878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[380,95880,95882],{"id":95881},"_222-rand语句","2.2.2 rand语句",[14,95884,95885],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[18,95887,95889],{"className":20,"code":95888,"language":22,"meta":23,"style":23},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[25,95890,95891,95904,95909],{"__ignoreMap":23},[28,95892,95893,95896,95898,95900,95902],{"class":30,"line":31},[28,95894,95895],{"class":38},"np.random.rand(",[28,95897,713],{"class":60},[28,95899,64],{"class":38},[28,95901,845],{"class":60},[28,95903,81],{"class":38},[28,95905,95906],{"class":30,"line":48},[28,95907,95908],{"class":87},"#第一个参数100：行数，表示有100个样本\n",[28,95910,95911],{"class":30,"line":84},[28,95912,95913],{"class":87},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[351,95915,95917],{"id":95916},"_23-arange创建数组","2.3 arange()创建数组",[380,95919,95921],{"id":95920},"_231-函数语句","2.3.1 函数语句",[18,95923,95925],{"className":20,"code":95924,"language":22,"meta":23,"style":23},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[25,95926,95927,95941,95946,95951,95956,95961,95966,95971],{"__ignoreMap":23},[28,95928,95929,95932,95934,95936,95939],{"class":30,"line":31},[28,95930,95931],{"class":38},"numpy.arange([start,] stop[, step], ",[28,95933,93754],{"class":5478},[28,95935,54],{"class":34},[28,95937,95938],{"class":60},"None",[28,95940,81],{"class":38},[28,95942,95943],{"class":30,"line":48},[28,95944,95945],{"class":87},"#参数\n",[28,95947,95948],{"class":30,"line":84},[28,95949,95950],{"class":127},"\"\"\"\n",[28,95952,95953],{"class":30,"line":91},[28,95954,95955],{"class":127},"start:起始值，可选，默认从 0 开始。\n",[28,95957,95958],{"class":30,"line":97},[28,95959,95960],{"class":127},"stop:结束值（不包含该值）。\n",[28,95962,95963],{"class":30,"line":103},[28,95964,95965],{"class":127},"step:步长，可选，默认是 1。可以为浮点数。\n",[28,95967,95968],{"class":30,"line":109},[28,95969,95970],{"class":127},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[28,95972,95973],{"class":30,"line":118},[28,95974,95950],{"class":127},[380,95976,95978],{"id":95977},"_232-实例","2.3.2 实例",[18,95980,95982],{"className":20,"code":95981,"language":22,"meta":23,"style":23},"#创建一维数组\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",[25,95983,95984,95988,96012,96017,96022,96026,96049,96053,96057,96062,96067],{"__ignoreMap":23},[28,95985,95986],{"class":30,"line":31},[28,95987,93359],{"class":87},[28,95989,95990,95992,95994,95996,95998,96000,96002,96004,96006,96008,96010],{"class":30,"line":48},[28,95991,190],{"class":38},[28,95993,61],{"class":60},[28,95995,64],{"class":38},[28,95997,1123],{"class":60},[28,95999,64],{"class":38},[28,96001,61],{"class":60},[28,96003,64],{"class":38},[28,96005,93754],{"class":5478},[28,96007,54],{"class":34},[28,96009,416],{"class":60},[28,96011,81],{"class":38},[28,96013,96014],{"class":30,"line":84},[28,96015,96016],{"class":87},"#输出结果：\n",[28,96018,96019],{"class":30,"line":91},[28,96020,96021],{"class":87},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[28,96023,96024],{"class":30,"line":97},[28,96025,94199],{"class":87},[28,96027,96028,96031,96033,96035,96037,96040,96042,96044,96046],{"class":30,"line":103},[28,96029,96030],{"class":38},"np.array([np.arange(",[28,96032,61],{"class":60},[28,96034,64],{"class":38},[28,96036,73],{"class":60},[28,96038,96039],{"class":38},"),np.arange(",[28,96041,73],{"class":60},[28,96043,64],{"class":38},[28,96045,769],{"class":60},[28,96047,96048],{"class":38},")])\n",[28,96050,96051],{"class":30,"line":109},[28,96052,121],{"class":87},[28,96054,96055],{"class":30,"line":118},[28,96056,95950],{"class":127},[28,96058,96059],{"class":30,"line":124},[28,96060,96061],{"class":127},"array([[1, 2, 3],\n",[28,96063,96064],{"class":30,"line":131},[28,96065,96066],{"class":127},"       [4, 5, 6]])\n",[28,96068,96069],{"class":30,"line":137},[28,96070,95950],{"class":127},[351,96072,96074],{"id":96073},"_24-生态分布","2.4 生态分布",[380,96076,96078],{"id":96077},"_241-标准正态分布","2.4.1 标准正态分布",[14,96080,96081],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96083,96084],{},[1727,96085],{"alt":23,"src":96086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[380,96088,96090],{"id":96089},"_242-常规正态分布","2.4.2 常规正态分布",[18,96092,96094],{"className":20,"code":96093,"language":22,"meta":23,"style":23},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[25,96095,96096,96101,96106,96111],{"__ignoreMap":23},[28,96097,96098],{"class":30,"line":31},[28,96099,96100],{"class":38},"random.normal(loc,scale,size)也可以生成正态分布\n",[28,96102,96103],{"class":30,"line":48},[28,96104,96105],{"class":87},"#loc:期望\n",[28,96107,96108],{"class":30,"line":84},[28,96109,96110],{"class":87},"#scale:方差\n",[28,96112,96113],{"class":30,"line":91},[28,96114,96115],{"class":87},"#size:用于确定是几维的数列\n",[14,96117,96118],{},[1727,96119],{"alt":23,"src":96120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[351,96122,96124],{"id":96123},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96126,96127],{},"ndim:秩，维度个数",[14,96129,96130],{},"size:数组元素的个数",[14,96132,96133],{},"shape:数组的形状",[14,96135,96136],{},"dtype:数组元素的类型",[14,96138,96139],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96141,96142],{},"他们都是属性，通过数组.属性的形式来确定",[14,96144,96145],{},"如果需要输出多个可以通过以下方式：",[18,96147,96149],{"className":20,"code":96148,"language":22,"meta":23,"style":23},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[25,96150,96151],{"__ignoreMap":23},[28,96152,96153,96155],{"class":30,"line":31},[28,96154,30675],{"class":60},[28,96156,96157],{"class":38},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[351,96159,96161],{"id":96160},"_26-其他方式创建数组","2.6 其他方式创建数组",[380,96163,96165],{"id":96164},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96167,96168],{},"①创建一维数组",[18,96170,96172],{"className":20,"code":96171,"language":22,"meta":23,"style":23},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[25,96173,96174,96183,96187,96192,96197],{"__ignoreMap":23},[28,96175,96176,96179,96181],{"class":30,"line":31},[28,96177,96178],{"class":38},"np.zeros(",[28,96180,845],{"class":60},[28,96182,81],{"class":38},[28,96184,96185],{"class":30,"line":48},[28,96186,95950],{"class":127},[28,96188,96189],{"class":30,"line":84},[28,96190,96191],{"class":127},"输出结果：\n",[28,96193,96194],{"class":30,"line":91},[28,96195,96196],{"class":127},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[28,96198,96199],{"class":30,"line":97},[28,96200,95950],{"class":127},[14,96202,96203],{},"上方代码等价于：",[18,96205,96207],{"className":20,"code":96206,"language":22,"meta":23,"style":23},"np.zeros(shape=(10))#创建10个元素的0数组\n",[25,96208,96209],{"__ignoreMap":23},[28,96210,96211,96213,96216,96218,96220,96222,96224],{"class":30,"line":31},[28,96212,96178],{"class":38},[28,96214,96215],{"class":5478},"shape",[28,96217,54],{"class":34},[28,96219,413],{"class":38},[28,96221,845],{"class":60},[28,96223,83027],{"class":38},[28,96225,96226],{"class":87},"#创建10个元素的0数组\n",[14,96228,96229],{},"也可以指定类型",[18,96231,96233],{"className":20,"code":96232,"language":22,"meta":23,"style":23},"#指定类型\nnp.zeros(5,dtype=int)\n",[25,96234,96235,96240],{"__ignoreMap":23},[28,96236,96237],{"class":30,"line":31},[28,96238,96239],{"class":87},"#指定类型\n",[28,96241,96242,96244,96246,96248,96250,96252,96254],{"class":30,"line":48},[28,96243,96178],{"class":38},[28,96245,721],{"class":60},[28,96247,64],{"class":38},[28,96249,93754],{"class":5478},[28,96251,54],{"class":34},[28,96253,416],{"class":60},[28,96255,81],{"class":38},[14,96257,96258],{},"②创建二维数组",[18,96260,96262],{"className":20,"code":96261,"language":22,"meta":23,"style":23},"np.zeros((3,4),dtype=int)\n",[25,96263,96264],{"__ignoreMap":23},[28,96265,96266,96269,96271,96273,96275,96277,96279,96281,96283],{"class":30,"line":31},[28,96267,96268],{"class":38},"np.zeros((",[28,96270,78],{"class":60},[28,96272,64],{"class":38},[28,96274,73],{"class":60},[28,96276,42512],{"class":38},[28,96278,93754],{"class":5478},[28,96280,54],{"class":34},[28,96282,416],{"class":60},[28,96284,81],{"class":38},[14,96286,96287],{},"③创建三维数组",[18,96289,96291],{"className":20,"code":96290,"language":22,"meta":23,"style":23},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[25,96292,96293,96298],{"__ignoreMap":23},[28,96294,96295],{"class":30,"line":31},[28,96296,96297],{"class":87},"#创建三维数组\n",[28,96299,96300,96302,96304,96306,96308,96310,96312,96314,96316,96318,96320],{"class":30,"line":48},[28,96301,96268],{"class":38},[28,96303,78],{"class":60},[28,96305,64],{"class":38},[28,96307,73],{"class":60},[28,96309,64],{"class":38},[28,96311,721],{"class":60},[28,96313,42512],{"class":38},[28,96315,93754],{"class":5478},[28,96317,54],{"class":34},[28,96319,416],{"class":60},[28,96321,81],{"class":38},[14,96323,96324],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[18,96326,96328],{"className":20,"code":96327,"language":22,"meta":23,"style":23},"#使用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",[25,96329,96330,96335,96350,96355,96360,96382],{"__ignoreMap":23},[28,96331,96332],{"class":30,"line":31},[28,96333,96334],{"class":87},"#使用zeros_like将创建的一维数组变成全0的数组\n",[28,96336,96337,96339,96341,96343,96345,96347],{"class":30,"line":48},[28,96338,51],{"class":38},[28,96340,54],{"class":34},[28,96342,190],{"class":38},[28,96344,73],{"class":60},[28,96346,828],{"class":38},[28,96348,96349],{"class":87},"#这个得到的结果：一维数组0，1，2，3\n",[28,96351,96352],{"class":30,"line":84},[28,96353,96354],{"class":38},"np.zeros_like(a)\n",[28,96356,96357],{"class":30,"line":91},[28,96358,96359],{"class":87},"#使用zeros_like将创建的二维数组变成全0的数组\n",[28,96361,96362,96364,96366,96368,96370,96372,96374,96376,96378,96380],{"class":30,"line":97},[28,96363,93560],{"class":38},[28,96365,54],{"class":34},[28,96367,95679],{"class":38},[28,96369,31753],{"class":5478},[28,96371,54],{"class":34},[28,96373,413],{"class":38},[28,96375,73],{"class":60},[28,96377,64],{"class":38},[28,96379,721],{"class":60},[28,96381,30757],{"class":38},[28,96383,96384],{"class":30,"line":103},[28,96385,96386],{"class":38},"np.zeros_like(aa)\n",[380,96388,96390],{"id":96389},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96392,96393],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[380,96395,96397],{"id":96396},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96399,96400],{},"①empty()用法",[18,96402,96404],{"className":20,"code":96403,"language":22,"meta":23,"style":23},"numpy.empty(shape,dtype=float,order='c')\n",[25,96405,96406],{"__ignoreMap":23},[28,96407,96408,96411,96413,96415,96417,96419,96421,96423,96425],{"class":30,"line":31},[28,96409,96410],{"class":38},"numpy.empty(shape,",[28,96412,93754],{"class":5478},[28,96414,54],{"class":34},[28,96416,451],{"class":60},[28,96418,64],{"class":38},[28,96420,95549],{"class":5478},[28,96422,54],{"class":34},[28,96424,76284],{"class":127},[28,96426,81],{"class":38},[14,96428,96429],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96431,96432],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96434,96435],{},[1727,96436],{"alt":23,"src":96437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96439,96440],{},"②empty()用法",[18,96442,96444],{"className":20,"code":96443,"language":22,"meta":23,"style":23},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[25,96445,96446,96467,96479,96500,96505],{"__ignoreMap":23},[28,96447,96448,96450,96452,96455,96457,96459,96461,96463,96465],{"class":30,"line":31},[28,96449,1242],{"class":38},[28,96451,54],{"class":34},[28,96453,96454],{"class":38},"np.empty(",[28,96456,845],{"class":60},[28,96458,64],{"class":38},[28,96460,93754],{"class":5478},[28,96462,54],{"class":34},[28,96464,416],{"class":60},[28,96466,81],{"class":38},[28,96468,96469,96471,96473,96475,96477],{"class":30,"line":48},[28,96470,185],{"class":38},[28,96472,54],{"class":34},[28,96474,190],{"class":38},[28,96476,721],{"class":60},[28,96478,81],{"class":38},[28,96480,96481,96484,96486,96489,96491,96493,96496,96498],{"class":30,"line":84},[28,96482,96483],{"class":38},"np.add(",[28,96485,211],{"class":60},[28,96487,96488],{"class":38},",x,",[28,96490,93308],{"class":5478},[28,96492,54],{"class":34},[28,96494,96495],{"class":38},"y[:",[28,96497,721],{"class":60},[28,96499,4919],{"class":38},[28,96501,96502],{"class":30,"line":91},[28,96503,96504],{"class":87},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[28,96506,96507],{"class":30,"line":97},[28,96508,96509],{"class":38},"y\n",[14,96511,11776],{},[14,96513,96514],{},[1727,96515],{"alt":23,"src":96516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[18,96518,96520],{"className":20,"code":96519,"language":22,"meta":23,"style":23},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[25,96521,96522,96538,96558,96573],{"__ignoreMap":23},[28,96523,96524,96526,96528,96530,96532,96534,96536],{"class":30,"line":31},[28,96525,185],{"class":38},[28,96527,54],{"class":34},[28,96529,190],{"class":38},[28,96531,61],{"class":60},[28,96533,64],{"class":38},[28,96535,206],{"class":60},[28,96537,81],{"class":38},[28,96539,96540,96542,96544,96546,96548,96550,96552,96554,96556],{"class":30,"line":48},[28,96541,1242],{"class":38},[28,96543,54],{"class":34},[28,96545,96454],{"class":38},[28,96547,721],{"class":60},[28,96549,64],{"class":38},[28,96551,93754],{"class":5478},[28,96553,54],{"class":34},[28,96555,416],{"class":60},[28,96557,81],{"class":38},[28,96559,96560,96563,96565,96567,96569,96571],{"class":30,"line":84},[28,96561,96562],{"class":38},"np.add(x,",[28,96564,211],{"class":60},[28,96566,64],{"class":38},[28,96568,93308],{"class":5478},[28,96570,54],{"class":34},[28,96572,93703],{"class":38},[28,96574,96575],{"class":30,"line":91},[28,96576,96577],{"class":87},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96579,96580],{},"③empty_like()",[14,96582,96583],{},[555,96584,96585,96586,96591],{},"创建一个",[555,96587,96588],{},[555,96589,96590],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96593,96594,96597],{},[25,96595,96596],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96599,96600],{},[1727,96601],{"alt":23,"src":96602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[380,96604,96606],{"id":96605},"_264-用法","2.6.4 ？？用法",[14,96608,96609],{},"当想查看一个函数的参数时，可以通过？？来实现",[18,96611,96613],{"className":20,"code":96612,"language":22,"meta":23,"style":23},"np.full??\n",[25,96614,96615],{"__ignoreMap":23},[28,96616,96617,96620],{"class":30,"line":31},[28,96618,96619],{"class":38},"np.full",[28,96621,96622],{"class":77659},"??\n",[380,96624,96626],{"id":96625},"_265-full创建数组","2.6.5 full()创建数组",[18,96628,96630],{"className":20,"code":96629,"language":22,"meta":23,"style":23},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[25,96631,96632,96637],{"__ignoreMap":23},[28,96633,96634],{"class":30,"line":31},[28,96635,96636],{"class":38},"full(shape,fill_value)\n",[28,96638,96639],{"class":30,"line":48},[28,96640,96641],{"class":38},"创建全为某个指定值的数组\n",[14,96643,94782],{},[18,96645,96647],{"className":20,"code":96646,"language":22,"meta":23,"style":23},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[25,96648,96649,96654],{"__ignoreMap":23},[28,96650,96651],{"class":30,"line":31},[28,96652,96653],{"class":87},"#创建一个一维数组,以20进行填充\n",[28,96655,96656,96659,96661,96663,96665],{"class":30,"line":48},[28,96657,96658],{"class":38},"np.full(",[28,96660,845],{"class":60},[28,96662,64],{"class":38},[28,96664,1098],{"class":60},[28,96666,81],{"class":38},[14,96668,93545],{},[18,96670,96672],{"className":20,"code":96671,"language":22,"meta":23,"style":23},"#创建二维数组\nnp.full((3,5),11)\n",[25,96673,96674,96678],{"__ignoreMap":23},[28,96675,96676],{"class":30,"line":31},[28,96677,94199],{"class":87},[28,96679,96680,96683,96685,96687,96689,96691,96693],{"class":30,"line":48},[28,96681,96682],{"class":38},"np.full((",[28,96684,78],{"class":60},[28,96686,64],{"class":38},[28,96688,721],{"class":60},[28,96690,42512],{"class":38},[28,96692,871],{"class":60},[28,96694,81],{"class":38},[14,96696,96697],{},"③full_like用法",[14,96699,96700],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96702,96703],{},"这里是指定填充而已",[18,96705,96707],{"className":20,"code":96706,"language":22,"meta":23,"style":23},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[25,96708,96709,96714,96738,96743],{"__ignoreMap":23},[28,96710,96711],{"class":30,"line":31},[28,96712,96713],{"class":87},"#创建一个指定形状数组\n",[28,96715,96716,96718,96720,96722,96724,96726,96728,96730,96732,96734,96736],{"class":30,"line":48},[28,96717,51],{"class":38},[28,96719,54],{"class":34},[28,96721,190],{"class":38},[28,96723,61],{"class":60},[28,96725,64],{"class":38},[28,96727,197],{"class":60},[28,96729,70],{"class":38},[28,96731,73],{"class":60},[28,96733,64],{"class":38},[28,96735,819],{"class":60},[28,96737,81],{"class":38},[28,96739,96740],{"class":30,"line":84},[28,96741,96742],{"class":87},"#进行指定填充\n",[28,96744,96745,96748,96750],{"class":30,"line":91},[28,96746,96747],{"class":38},"np.full_like(a,",[28,96749,845],{"class":60},[28,96751,81],{"class":38},[14,96753,11776],{},[14,96755,96756],{},[1727,96757],{"alt":23,"src":96758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[380,96760,96762],{"id":96761},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22260,96764,96766],{"id":96765},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[18,96768,96770],{"className":20,"code":96769,"language":22,"meta":23,"style":23},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25,96771,96772,96789],{"__ignoreMap":23},[28,96773,96774,96777,96779,96781,96783,96785,96787],{"class":30,"line":31},[28,96775,96776],{"class":38},"np.eye(",[28,96778,73],{"class":60},[28,96780,64],{"class":38},[28,96782,93754],{"class":5478},[28,96784,54],{"class":34},[28,96786,416],{"class":60},[28,96788,81],{"class":38},[28,96790,96791],{"class":30,"line":48},[28,96792,96793],{"class":87},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22260,96795,96797],{"id":96796},"_2662-法2identity","2.6.6.2 法2：identity()",[18,96799,96801],{"className":20,"code":96800,"language":22,"meta":23,"style":23},"#identity()\nnp.identity(5,dtype=int)\n",[25,96802,96803,96808],{"__ignoreMap":23},[28,96804,96805],{"class":30,"line":31},[28,96806,96807],{"class":87},"#identity()\n",[28,96809,96810,96813,96815,96817,96819,96821,96823],{"class":30,"line":48},[28,96811,96812],{"class":38},"np.identity(",[28,96814,721],{"class":60},[28,96816,64],{"class":38},[28,96818,93754],{"class":5478},[28,96820,54],{"class":34},[28,96822,416],{"class":60},[28,96824,81],{"class":38},[14,96826,96827],{},"两个函数是有区别的",[14,96829,96830],{},[1727,96831],{"alt":23,"src":96832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96834,96835],{},[1727,96836],{"alt":23,"src":96837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[18,96839,96841],{"className":20,"code":96840,"language":22,"meta":23,"style":23},"# 创建一个 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",[25,96842,96843,96848,96860,96865,96870,96875,96880,96884,96889,96909,96913,96918,96923],{"__ignoreMap":23},[28,96844,96845],{"class":30,"line":31},[28,96846,96847],{"class":87},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[28,96849,96850,96852,96854,96856,96858],{"class":30,"line":48},[28,96851,96776],{"class":38},[28,96853,78],{"class":60},[28,96855,12697],{"class":38},[28,96857,73],{"class":60},[28,96859,81],{"class":38},[28,96861,96862],{"class":30,"line":84},[28,96863,96864],{"class":87},"# 输出:\n",[28,96866,96867],{"class":30,"line":91},[28,96868,96869],{"class":87},"# [[1. 0. 0. 0.]\n",[28,96871,96872],{"class":30,"line":97},[28,96873,96874],{"class":87},"#  [0. 1. 0. 0.]\n",[28,96876,96877],{"class":30,"line":103},[28,96878,96879],{"class":87},"#  [0. 0. 1. 0.]]\n",[28,96881,96882],{"class":30,"line":109},[28,96883,2662],{"emptyLinePlaceholder":336},[28,96885,96886],{"class":30,"line":118},[28,96887,96888],{"class":87},"# 对角线向上偏移1\n",[28,96890,96891,96893,96895,96897,96899,96901,96903,96905,96907],{"class":30,"line":124},[28,96892,96776],{"class":38},[28,96894,78],{"class":60},[28,96896,12697],{"class":38},[28,96898,73],{"class":60},[28,96900,12697],{"class":38},[28,96902,892],{"class":5478},[28,96904,54],{"class":34},[28,96906,61],{"class":60},[28,96908,81],{"class":38},[28,96910,96911],{"class":30,"line":131},[28,96912,96864],{"class":87},[28,96914,96915],{"class":30,"line":137},[28,96916,96917],{"class":87},"# [[0. 1. 0. 0.]\n",[28,96919,96920],{"class":30,"line":143},[28,96921,96922],{"class":87},"#  [0. 0. 1. 0.]\n",[28,96924,96925],{"class":30,"line":149},[28,96926,96927],{"class":87},"#  [0. 0. 0. 1.]]\n",[380,96929,96931],{"id":96930},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[18,96933,96935],{"className":20,"code":96934,"language":22,"meta":23,"style":23},"#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",[25,96936,96937,96942,96946,96951,96956,96961,96966,96971,96976,96981,96986],{"__ignoreMap":23},[28,96938,96939],{"class":30,"line":31},[28,96940,96941],{"class":87},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[28,96943,96944],{"class":30,"line":48},[28,96945,95950],{"class":127},[28,96947,96948],{"class":30,"line":84},[28,96949,96950],{"class":127},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[28,96952,96953],{"class":30,"line":91},[28,96954,96955],{"class":127},"参数介绍：\n",[28,96957,96958],{"class":30,"line":97},[28,96959,96960],{"class":127},"start：序列的起始值\n",[28,96962,96963],{"class":30,"line":103},[28,96964,96965],{"class":127},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[28,96967,96968],{"class":30,"line":109},[28,96969,96970],{"class":127},"num：要生长的等步长的样本数量，默认为50\n",[28,96972,96973],{"class":30,"line":118},[28,96974,96975],{"class":127},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[28,96977,96978],{"class":30,"line":124},[28,96979,96980],{"class":127},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[28,96982,96983],{"class":30,"line":131},[28,96984,96985],{"class":127},"dtype：ndarry的数据类型\n",[28,96987,96988],{"class":30,"line":137},[28,96989,95950],{"class":127},[14,96991,96992],{},[1727,96993],{"alt":23,"src":96994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96996,96997],{},"这里num=是可以省略的",[14,96999,97000],{},"也就是下方两行代码结果是一模一样的",[18,97002,97004],{"className":20,"code":97003,"language":22,"meta":23,"style":23},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[25,97005,97006,97023],{"__ignoreMap":23},[28,97007,97008,97011,97013,97015,97017,97019,97021],{"class":30,"line":31},[28,97009,97010],{"class":38},"np.linspace(",[28,97012,61],{"class":60},[28,97014,64],{"class":38},[28,97016,721],{"class":60},[28,97018,64],{"class":38},[28,97020,721],{"class":60},[28,97022,81],{"class":38},[28,97024,97025,97027,97029,97031,97033,97035,97037,97039,97041],{"class":30,"line":48},[28,97026,97010],{"class":38},[28,97028,61],{"class":60},[28,97030,64],{"class":38},[28,97032,721],{"class":60},[28,97034,64],{"class":38},[28,97036,1927],{"class":5478},[28,97038,54],{"class":34},[28,97040,721],{"class":60},[28,97042,81],{"class":38},[380,97044,97046],{"id":97045},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[18,97048,97050],{"className":20,"code":97049,"language":22,"meta":23,"style":23},"#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",[25,97051,97052,97057,97061,97066,97071,97076,97081,97085,97090,97095,97099],{"__ignoreMap":23},[28,97053,97054],{"class":30,"line":31},[28,97055,97056],{"class":87},"#logspace函数用于创建一个等比数列，格式如下：\n",[28,97058,97059],{"class":30,"line":48},[28,97060,95950],{"class":127},[28,97062,97063],{"class":30,"line":84},[28,97064,97065],{"class":127},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[28,97067,97068],{"class":30,"line":91},[28,97069,97070],{"class":127},"参数为：\n",[28,97072,97073],{"class":30,"line":97},[28,97074,97075],{"class":127},"start:序列的起始位置为：base**start\n",[28,97077,97078],{"class":30,"line":103},[28,97079,97080],{"class":127},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[28,97082,97083],{"class":30,"line":109},[28,97084,96970],{"class":127},[28,97086,97087],{"class":30,"line":118},[28,97088,97089],{"class":127},"endpoint：是否包含 stop 这个值，默认是 True\n",[28,97091,97092],{"class":30,"line":124},[28,97093,97094],{"class":127},"base：对数的底数，默认是 10（常见对数）\n",[28,97096,97097],{"class":30,"line":131},[28,97098,96985],{"class":127},[28,97100,97101],{"class":30,"line":137},[28,97102,95950],{"class":127},[14,97104,97105],{},[1727,97106],{"alt":23,"src":97107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97109,97110],{},"logspace()函数中的num参数也是可以不写num=的",[14,97112,97113],{},"endpoint是不可以省略的",[328,97115,97116],{},"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":23,"searchDepth":48,"depth":48,"links":97118},[97119,97123,97128,97132,97136,97137],{"id":95508,"depth":48,"text":95509,"children":97120},[97121,97122],{"id":95512,"depth":84,"text":95513},{"id":95585,"depth":84,"text":95586},{"id":95617,"depth":48,"text":95618,"children":97124},[97125,97126,97127],{"id":95621,"depth":84,"text":95622},{"id":95803,"depth":84,"text":95804},{"id":95881,"depth":84,"text":95882},{"id":95916,"depth":48,"text":95917,"children":97129},[97130,97131],{"id":95920,"depth":84,"text":95921},{"id":95977,"depth":84,"text":95978},{"id":96073,"depth":48,"text":96074,"children":97133},[97134,97135],{"id":96077,"depth":84,"text":96078},{"id":96089,"depth":84,"text":96090},{"id":96123,"depth":48,"text":96124},{"id":96160,"depth":48,"text":96161,"children":97138},[97139,97140,97141,97142,97143,97144,97145,97146],{"id":96164,"depth":84,"text":96165},{"id":96389,"depth":84,"text":96390},{"id":96396,"depth":84,"text":96397},{"id":96605,"depth":84,"text":96606},{"id":96625,"depth":84,"text":96626},{"id":96761,"depth":84,"text":96762},{"id":96930,"depth":84,"text":96931},{"id":97045,"depth":84,"text":97046},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95500,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97153,"title":97154,"body":97155,"description":333,"extension":334,"meta":97248,"navigation":336,"path":97249,"seo":97250,"stem":97251,"__hash__":97252},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97156,"toc":97246},[97157,97160,97163,97166,97169,97172,97175,97178,97181,97184,97187,97190,97192,97195,97198,97203,97206,97209,97243],[10,97158,97154],{"id":97159},"_20魔法命令mprun",[14,97161,97162],{},"逐行分析数据内存的使用情况",[14,97164,97165],{},"语法格式：",[14,97167,97168],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97170,97171],{},"分析结果列如下：",[14,97173,97174],{},"Line行号",[14,97176,97177],{},"Mem usage内存使用大小",[14,97179,97180],{},"increment内存增量",[14,97182,97183],{},"Line content代码内容",[14,97185,97186],{},"补充说明：",[14,97188,97189],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97191,95455],{},[14,97193,97194],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97196,97197],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97199,97200],{},[1727,97201],{"alt":23,"src":97202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97204,97205],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97207,97208],{},"这时候需要重新加载模块",[18,97210,97212],{"className":20,"code":97211,"language":22,"meta":23,"style":23},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[25,97213,97214,97219,97226,97231],{"__ignoreMap":23},[28,97215,97216],{"class":30,"line":31},[28,97217,97218],{"class":87},"#重新加载模块\n",[28,97220,97221,97223],{"class":30,"line":48},[28,97222,35],{"class":34},[28,97224,97225],{"class":38}," importlib\n",[28,97227,97228],{"class":30,"line":84},[28,97229,97230],{"class":38},"importlib.reload(mprun_test)\n",[28,97232,97233,97235,97238,97240],{"class":30,"line":91},[28,97234,729],{"class":34},[28,97236,97237],{"class":38},"mprun ",[28,97239,930],{"class":34},[28,97241,97242],{"class":38},"f mprun_test.fun_test mprun_test.fun_test()\n",[328,97244,97245],{},"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":23,"searchDepth":48,"depth":48,"links":97247},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97154,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97254,"title":97255,"body":97256,"description":333,"extension":334,"meta":97273,"navigation":336,"path":97274,"seo":97275,"stem":97276,"__hash__":97277},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97257,"toc":97271},[97258,97261,97266],[10,97259,97255],{"id":97260},"_3一维数组的索引和切片",[14,97262,97263],{},[1727,97264],{"alt":23,"src":97265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97267,97268],{},[1727,97269],{"alt":23,"src":97270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":23,"searchDepth":48,"depth":48,"links":97272},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97255,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97279,"title":97280,"body":97281,"description":333,"extension":334,"meta":97764,"navigation":336,"path":97765,"seo":97766,"stem":97767,"__hash__":97768},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97282,"toc":97762},[97283,97286,97289,97294,97327,97330,97368,97371,97405,97408,97513,97516,97553,97556,97657,97660,97711,97714,97756,97759],[10,97284,97280],{"id":97285},"_4二维数组的索引与切片",[14,97287,97288],{},"①获取指定单个元素",[14,97290,97291],{},[1727,97292],{"alt":23,"src":97293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[18,97295,97297],{"className":20,"code":97296,"language":22,"meta":23,"style":23},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[25,97298,97299,97304,97309,97314],{"__ignoreMap":23},[28,97300,97301],{"class":30,"line":31},[28,97302,97303],{"class":87},"#获取元素9\n",[28,97305,97306],{"class":30,"line":48},[28,97307,97308],{"class":87},"#先获取所在行，再获取所在列\n",[28,97310,97311],{"class":30,"line":84},[28,97312,97313],{"class":87},"#数组[行索引号，列索引号]\n",[28,97315,97316,97319,97321,97323,97325],{"class":30,"line":91},[28,97317,97318],{"class":38},"a[",[28,97320,61],{"class":60},[28,97322,64],{"class":38},[28,97324,211],{"class":60},[28,97326,33502],{"class":38},[14,97328,97329],{},"②获取整行元素",[18,97331,97333],{"className":20,"code":97332,"language":22,"meta":23,"style":23},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[25,97334,97335,97340,97345,97353,97358],{"__ignoreMap":23},[28,97336,97337],{"class":30,"line":31},[28,97338,97339],{"class":87},"#获取整行 数组[行索引号]\n",[28,97341,97342],{"class":30,"line":48},[28,97343,97344],{"class":87},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[28,97346,97347,97349,97351],{"class":30,"line":84},[28,97348,97318],{"class":38},[28,97350,211],{"class":60},[28,97352,33502],{"class":38},[28,97354,97355],{"class":30,"line":91},[28,97356,97357],{"class":87},"#也可以负索引获取一行\n",[28,97359,97360,97362,97364,97366],{"class":30,"line":97},[28,97361,97318],{"class":38},[28,97363,930],{"class":34},[28,97365,61],{"class":60},[28,97367,33502],{"class":38},[14,97369,97370],{},"③获取整列元素",[18,97372,97374],{"className":20,"code":97373,"language":22,"meta":23,"style":23},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[25,97375,97376,97381,97390,97395],{"__ignoreMap":23},[28,97377,97378],{"class":30,"line":31},[28,97379,97380],{"class":87},"#获取整列 数组名[:,列索引]\n",[28,97382,97383,97386,97388],{"class":30,"line":48},[28,97384,97385],{"class":38},"a[:,",[28,97387,211],{"class":60},[28,97389,33502],{"class":38},[28,97391,97392],{"class":30,"line":84},[28,97393,97394],{"class":87},"#也可以负索引获取一列\n",[28,97396,97397,97399,97401,97403],{"class":30,"line":91},[28,97398,97385],{"class":38},[28,97400,930],{"class":34},[28,97402,61],{"class":60},[28,97404,33502],{"class":38},[14,97406,97407],{},"④部分行部分列的元素",[18,97409,97411],{"className":20,"code":97410,"language":22,"meta":23,"style":23},"#部分行部分列 数组名[行切片，列切片]\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",[25,97412,97413,97418,97428,97432,97436,97441,97446,97450,97462,97466,97470,97475,97480,97485,97490,97494,97499],{"__ignoreMap":23},[28,97414,97415],{"class":30,"line":31},[28,97416,97417],{"class":87},"#部分行部分列 数组名[行切片，列切片]\n",[28,97419,97420,97423,97425],{"class":30,"line":48},[28,97421,97422],{"class":38},"a[:",[28,97424,211],{"class":60},[28,97426,97427],{"class":38},",:]\n",[28,97429,97430],{"class":30,"line":84},[28,97431,121],{"class":87},[28,97433,97434],{"class":30,"line":91},[28,97435,128],{"class":127},[28,97437,97438],{"class":30,"line":97},[28,97439,97440],{"class":127},"array([[ 1,  2,  3,  4,  5,  6],\n",[28,97442,97443],{"class":30,"line":103},[28,97444,97445],{"class":127},"       [ 7,  8,  9, 10, 11, 12]])\n",[28,97447,97448],{"class":30,"line":109},[28,97449,128],{"class":127},[28,97451,97452,97454,97456,97458,97460],{"class":30,"line":118},[28,97453,97385],{"class":38},[28,97455,61],{"class":60},[28,97457,1256],{"class":38},[28,97459,73],{"class":60},[28,97461,33502],{"class":38},[28,97463,97464],{"class":30,"line":124},[28,97465,121],{"class":87},[28,97467,97468],{"class":30,"line":131},[28,97469,128],{"class":127},[28,97471,97472],{"class":30,"line":137},[28,97473,97474],{"class":127},"array([[ 2,  3,  4],\n",[28,97476,97477],{"class":30,"line":143},[28,97478,97479],{"class":127},"       [ 8,  9, 10],\n",[28,97481,97482],{"class":30,"line":149},[28,97483,97484],{"class":127},"       [14, 15, 16],\n",[28,97486,97487],{"class":30,"line":1890},[28,97488,97489],{"class":127},"       [20, 21, 22]])\n",[28,97491,97492],{"class":30,"line":1904},[28,97493,128],{"class":127},[28,97495,97496],{"class":30,"line":1909},[28,97497,97498],{"class":87},"#对列行同时进行切片，使用了step参数\n",[28,97500,97501,97504,97506,97509,97511],{"class":30,"line":1915},[28,97502,97503],{"class":38},"a[::",[28,97505,211],{"class":60},[28,97507,97508],{"class":38},",::",[28,97510,211],{"class":60},[28,97512,33502],{"class":38},[14,97514,97515],{},"⑤同时获取两个元素",[18,97517,97519],{"className":20,"code":97518,"language":22,"meta":23,"style":23},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[25,97520,97521,97526,97531],{"__ignoreMap":23},[28,97522,97523],{"class":30,"line":31},[28,97524,97525],{"class":87},"#同时获取第三行第二列，第四行第一列\n",[28,97527,97528],{"class":30,"line":48},[28,97529,97530],{"class":87},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[28,97532,97533,97536,97538,97540,97542,97544,97546,97548,97550],{"class":30,"line":84},[28,97534,97535],{"class":38},"a[(",[28,97537,211],{"class":60},[28,97539,64],{"class":38},[28,97541,78],{"class":60},[28,97543,42503],{"class":38},[28,97545,61],{"class":60},[28,97547,64],{"class":38},[28,97549,244],{"class":60},[28,97551,97552],{"class":38},")]\n",[14,97554,97555],{},"⑥切片，对行进行反向获取",[18,97557,97559],{"className":20,"code":97558,"language":22,"meta":23,"style":23},"#切片 对所有行进行反向获取\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",[25,97560,97561,97566,97576,97580,97584,97589,97594,97599,97604,97608,97613,97629,97633,97638,97643,97648,97653],{"__ignoreMap":23},[28,97562,97563],{"class":30,"line":31},[28,97564,97565],{"class":87},"#切片 对所有行进行反向获取\n",[28,97567,97568,97570,97572,97574],{"class":30,"line":48},[28,97569,97503],{"class":38},[28,97571,930],{"class":34},[28,97573,61],{"class":60},[28,97575,33502],{"class":38},[28,97577,97578],{"class":30,"line":84},[28,97579,121],{"class":87},[28,97581,97582],{"class":30,"line":91},[28,97583,128],{"class":127},[28,97585,97586],{"class":30,"line":97},[28,97587,97588],{"class":127},"array([[19, 20, 21, 22, 23, 24],\n",[28,97590,97591],{"class":30,"line":103},[28,97592,97593],{"class":127},"       [13, 14, 15, 16, 17, 18],\n",[28,97595,97596],{"class":30,"line":109},[28,97597,97598],{"class":127},"       [ 7,  8,  9, 10, 11, 12],\n",[28,97600,97601],{"class":30,"line":118},[28,97602,97603],{"class":127},"       [ 1,  2,  3,  4,  5,  6]])\n",[28,97605,97606],{"class":30,"line":124},[28,97607,128],{"class":127},[28,97609,97610],{"class":30,"line":131},[28,97611,97612],{"class":87},"#对行列都进行反向切片获取\n",[28,97614,97615,97617,97619,97621,97623,97625,97627],{"class":30,"line":137},[28,97616,97503],{"class":38},[28,97618,930],{"class":34},[28,97620,61],{"class":60},[28,97622,97508],{"class":38},[28,97624,930],{"class":34},[28,97626,61],{"class":60},[28,97628,33502],{"class":38},[28,97630,97631],{"class":30,"line":143},[28,97632,128],{"class":127},[28,97634,97635],{"class":30,"line":149},[28,97636,97637],{"class":127},"array([[24, 23, 22, 21, 20, 19],\n",[28,97639,97640],{"class":30,"line":1890},[28,97641,97642],{"class":127},"       [18, 17, 16, 15, 14, 13],\n",[28,97644,97645],{"class":30,"line":1904},[28,97646,97647],{"class":127},"       [12, 11, 10,  9,  8,  7],\n",[28,97649,97650],{"class":30,"line":1909},[28,97651,97652],{"class":127},"       [ 6,  5,  4,  3,  2,  1]])\n",[28,97654,97655],{"class":30,"line":1915},[28,97656,128],{"class":127},[14,97658,97659],{},"⑦修改元素",[18,97661,97663],{"className":20,"code":97662,"language":22,"meta":23,"style":23},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[25,97664,97665,97670,97688,97693],{"__ignoreMap":23},[28,97666,97667],{"class":30,"line":31},[28,97668,97669],{"class":87},"#获取前两行和前两列\n",[28,97671,97672,97675,97677,97679,97681,97684,97686],{"class":30,"line":48},[28,97673,97674],{"class":38},"sub_a",[28,97676,54],{"class":34},[28,97678,97422],{"class":38},[28,97680,211],{"class":60},[28,97682,97683],{"class":38},",:",[28,97685,211],{"class":60},[28,97687,33502],{"class":38},[28,97689,97690],{"class":30,"line":84},[28,97691,97692],{"class":87},"#修改sub_a第一个元素的值\n",[28,97694,97695,97698,97700,97702,97704,97706,97708],{"class":30,"line":91},[28,97696,97697],{"class":38},"sub_a[",[28,97699,244],{"class":60},[28,97701,64],{"class":38},[28,97703,244],{"class":60},[28,97705,1337],{"class":38},[28,97707,54],{"class":34},[28,97709,97710],{"class":60},"100\n",[14,97712,97713],{},"⑧数组复制copy()",[18,97715,97717],{"className":20,"code":97716,"language":22,"meta":23,"style":23},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[25,97718,97719,97724,97734,97739],{"__ignoreMap":23},[28,97720,97721],{"class":30,"line":31},[28,97722,97723],{"class":87},"#数组复制\n",[28,97725,97726,97729,97731],{"class":30,"line":48},[28,97727,97728],{"class":38},"copy_a",[28,97730,54],{"class":34},[28,97732,97733],{"class":38},"np.copy(sub_a)\n",[28,97735,97736],{"class":30,"line":84},[28,97737,97738],{"class":87},"#修改copy_a后不影响原数组\n",[28,97740,97741,97744,97746,97748,97750,97752,97754],{"class":30,"line":91},[28,97742,97743],{"class":38},"copy_a[",[28,97745,244],{"class":60},[28,97747,64],{"class":38},[28,97749,244],{"class":60},[28,97751,1337],{"class":38},[28,97753,54],{"class":34},[28,97755,97710],{"class":60},[14,97757,97758],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[328,97760,97761],{},"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":23,"searchDepth":48,"depth":48,"links":97763},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97280,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97770,"title":97771,"body":97772,"description":333,"extension":334,"meta":98264,"navigation":336,"path":98265,"seo":98266,"stem":98267,"__hash__":98268},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97773,"toc":98256},[97774,97777,97781,97784,97787,97840,97843,97868,97871,97890,97910,97913,97929,97933,97979,97983,98025,98029,98032,98035,98038,98041,98044,98106,98166,98170,98173,98230,98234,98239,98248,98253],[10,97775,97771],{"id":97776},"_5改变数组的维度",[351,97778,97780],{"id":97779},"_51-使用reshape","5.1 使用reshape()",[14,97782,97783],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97785,97786],{},"①一维数组转换为二维数组",[18,97788,97790],{"className":20,"code":97789,"language":22,"meta":23,"style":23},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[25,97791,97792,97808,97813,97818,97823],{"__ignoreMap":23},[28,97793,97794,97796,97798,97800,97802,97804,97806],{"class":30,"line":31},[28,97795,51],{"class":38},[28,97797,54],{"class":34},[28,97799,190],{"class":38},[28,97801,61],{"class":60},[28,97803,64],{"class":38},[28,97805,67],{"class":60},[28,97807,81],{"class":38},[28,97809,97810],{"class":30,"line":48},[28,97811,97812],{"class":87},"#将一维数组进行转换\n",[28,97814,97815],{"class":30,"line":84},[28,97816,97817],{"class":87},"#注意点：元素个数不可以变\n",[28,97819,97820],{"class":30,"line":91},[28,97821,97822],{"class":87},"#转换维度要保持一致，不一致就异常！！！\n",[28,97824,97825,97827,97829,97832,97834,97836,97838],{"class":30,"line":97},[28,97826,93560],{"class":38},[28,97828,54],{"class":34},[28,97830,97831],{"class":38},"a.reshape(",[28,97833,211],{"class":60},[28,97835,64],{"class":38},[28,97837,206],{"class":60},[28,97839,81],{"class":38},[14,97841,97842],{},"②一维数组转换为三维数组",[18,97844,97846],{"className":20,"code":97845,"language":22,"meta":23,"style":23},"aaa=a.reshape(2,3,2)\n",[25,97847,97848],{"__ignoreMap":23},[28,97849,97850,97852,97854,97856,97858,97860,97862,97864,97866],{"class":30,"line":31},[28,97851,95773],{"class":38},[28,97853,54],{"class":34},[28,97855,97831],{"class":38},[28,97857,211],{"class":60},[28,97859,64],{"class":38},[28,97861,78],{"class":60},[28,97863,64],{"class":38},[28,97865,211],{"class":60},[28,97867,81],{"class":38},[14,97869,97870],{},"③二维数组转化为一维数组",[18,97872,97874],{"className":20,"code":97873,"language":22,"meta":23,"style":23},"#知道元素个数：\naa.reshape(12)\n",[25,97875,97876,97881],{"__ignoreMap":23},[28,97877,97878],{"class":30,"line":31},[28,97879,97880],{"class":87},"#知道元素个数：\n",[28,97882,97883,97886,97888],{"class":30,"line":48},[28,97884,97885],{"class":38},"aa.reshape(",[28,97887,897],{"class":60},[28,97889,81],{"class":38},[18,97891,97893],{"className":20,"code":97892,"language":22,"meta":23,"style":23},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[25,97894,97895,97900],{"__ignoreMap":23},[28,97896,97897],{"class":30,"line":31},[28,97898,97899],{"class":87},"#不知道元素个数，参数传递-1\n",[28,97901,97902,97904,97906,97908],{"class":30,"line":48},[28,97903,97885],{"class":38},[28,97905,930],{"class":34},[28,97907,61],{"class":60},[28,97909,81],{"class":38},[14,97911,97912],{},"④三维数组转换为一维数组",[18,97914,97916],{"className":20,"code":97915,"language":22,"meta":23,"style":23},"aaa.reshape(-1)\n",[25,97917,97918],{"__ignoreMap":23},[28,97919,97920,97923,97925,97927],{"class":30,"line":31},[28,97921,97922],{"class":38},"aaa.reshape(",[28,97924,930],{"class":34},[28,97926,61],{"class":60},[28,97928,81],{"class":38},[351,97930,97932],{"id":97931},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[18,97934,97936],{"className":20,"code":97935,"language":22,"meta":23,"style":23},"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",[25,97937,97938,97965,97970,97974],{"__ignoreMap":23},[28,97939,97940,97942,97944,97946,97948,97950,97952,97954,97956,97958,97960,97962],{"class":30,"line":31},[28,97941,93560],{"class":38},[28,97943,54],{"class":34},[28,97945,190],{"class":38},[28,97947,61],{"class":60},[28,97949,64],{"class":38},[28,97951,67],{"class":60},[28,97953,70],{"class":38},[28,97955,211],{"class":60},[28,97957,64],{"class":38},[28,97959,206],{"class":60},[28,97961,828],{"class":38},[28,97963,97964],{"class":87},"#转换为2行6列的数组\n",[28,97966,97967],{"class":30,"line":48},[28,97968,97969],{"class":38},"aa.revel()\n",[28,97971,97972],{"class":30,"line":84},[28,97973,121],{"class":87},[28,97975,97976],{"class":30,"line":91},[28,97977,97978],{"class":87},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[351,97980,97982],{"id":97981},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[18,97984,97986],{"className":20,"code":97985,"language":22,"meta":23,"style":23},"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",[25,97987,97988,98012,98017,98021],{"__ignoreMap":23},[28,97989,97990,97992,97994,97996,97998,98000,98002,98004,98006,98008,98010],{"class":30,"line":31},[28,97991,93560],{"class":38},[28,97993,54],{"class":34},[28,97995,190],{"class":38},[28,97997,61],{"class":60},[28,97999,64],{"class":38},[28,98001,67],{"class":60},[28,98003,70],{"class":38},[28,98005,211],{"class":60},[28,98007,64],{"class":38},[28,98009,206],{"class":60},[28,98011,81],{"class":38},[28,98013,98014],{"class":30,"line":48},[28,98015,98016],{"class":38},"aa.flatten()\n",[28,98018,98019],{"class":30,"line":84},[28,98020,121],{"class":87},[28,98022,98023],{"class":30,"line":91},[28,98024,97978],{"class":87},[351,98026,98028],{"id":98027},"_54-使用resize","5.4 使用resize()",[14,98030,98031],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98033,98034],{},"通过resize方法可以改变数组的维度",[14,98036,98037],{},"#resize修改数组维度",[14,98039,98040],{},"#以元组的形式指定形状",[14,98042,98043],{},"#改变的是原数组",[18,98045,98047],{"className":20,"code":98046,"language":22,"meta":23,"style":23},"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",[25,98048,98049,98065,98085,98098,98102],{"__ignoreMap":23},[28,98050,98051,98053,98055,98057,98059,98061,98063],{"class":30,"line":31},[28,98052,51],{"class":38},[28,98054,54],{"class":34},[28,98056,190],{"class":38},[28,98058,61],{"class":60},[28,98060,64],{"class":38},[28,98062,67],{"class":60},[28,98064,81],{"class":38},[28,98066,98067,98070,98072,98074,98076,98078,98080,98082],{"class":30,"line":48},[28,98068,98069],{"class":38},"a.shape",[28,98071,54],{"class":34},[28,98073,413],{"class":38},[28,98075,211],{"class":60},[28,98077,64],{"class":38},[28,98079,206],{"class":60},[28,98081,828],{"class":38},[28,98083,98084],{"class":87},"#改变了原数组\n",[28,98086,98087,98089,98091,98094,98096],{"class":30,"line":84},[28,98088,51],{"class":38},[28,98090,54],{"class":34},[28,98092,98093],{"class":38},"resize((",[28,98095,897],{"class":60},[28,98097,30757],{"class":38},[28,98099,98100],{"class":30,"line":91},[28,98101,121],{"class":87},[28,98103,98104],{"class":30,"line":97},[28,98105,97978],{"class":87},[18,98107,98109],{"className":20,"code":98108,"language":22,"meta":23,"style":23},"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",[25,98110,98111,98124,98128,98132,98137,98142,98147,98152,98157,98162],{"__ignoreMap":23},[28,98112,98113,98116,98118,98120,98122],{"class":30,"line":31},[28,98114,98115],{"class":38},"a.resize((",[28,98117,206],{"class":60},[28,98119,64],{"class":38},[28,98121,211],{"class":60},[28,98123,30757],{"class":38},[28,98125,98126],{"class":30,"line":48},[28,98127,121],{"class":87},[28,98129,98130],{"class":30,"line":84},[28,98131,128],{"class":127},[28,98133,98134],{"class":30,"line":91},[28,98135,98136],{"class":127},"array([[ 1,  2],\n",[28,98138,98139],{"class":30,"line":97},[28,98140,98141],{"class":127},"       [ 3,  4],\n",[28,98143,98144],{"class":30,"line":103},[28,98145,98146],{"class":127},"       [ 5,  6],\n",[28,98148,98149],{"class":30,"line":109},[28,98150,98151],{"class":127},"       [ 7,  8],\n",[28,98153,98154],{"class":30,"line":118},[28,98155,98156],{"class":127},"       [ 9, 10],\n",[28,98158,98159],{"class":30,"line":124},[28,98160,98161],{"class":127},"       [11, 12]])\n",[28,98163,98164],{"class":30,"line":131},[28,98165,128],{"class":127},[351,98167,98169],{"id":98168},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98171,98172],{},"改变了原数组",[18,98174,98176],{"className":20,"code":98175,"language":22,"meta":23,"style":23},"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",[25,98177,98178,98194,98210,98214,98218,98222,98226],{"__ignoreMap":23},[28,98179,98180,98182,98184,98186,98188,98190,98192],{"class":30,"line":31},[28,98181,51],{"class":38},[28,98183,54],{"class":34},[28,98185,190],{"class":38},[28,98187,61],{"class":60},[28,98189,64],{"class":38},[28,98191,67],{"class":60},[28,98193,81],{"class":38},[28,98195,98196,98198,98200,98202,98204,98206,98208],{"class":30,"line":48},[28,98197,98069],{"class":38},[28,98199,54],{"class":34},[28,98201,413],{"class":38},[28,98203,211],{"class":60},[28,98205,64],{"class":38},[28,98207,206],{"class":60},[28,98209,81],{"class":38},[28,98211,98212],{"class":30,"line":84},[28,98213,121],{"class":87},[28,98215,98216],{"class":30,"line":91},[28,98217,128],{"class":127},[28,98219,98220],{"class":30,"line":97},[28,98221,97440],{"class":127},[28,98223,98224],{"class":30,"line":103},[28,98225,97445],{"class":127},[28,98227,98228],{"class":30,"line":109},[28,98229,128],{"class":127},[351,98231,98233],{"id":98232},"_56-重要比较","5.6 重要比较：",[14,98235,98236],{},[1727,98237],{"alt":23,"src":98238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98240,98241,98242,98244,98245,98247],{},"口诀：NumPy 函数要么用 ",[25,98243,96215],{},"，要么用 ",[25,98246,31753],{},"，创建结构用 shape，造数据用 size",[14,98249,98250],{},[1727,98251],{"alt":23,"src":98252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[328,98254,98255],{},"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":23,"searchDepth":48,"depth":48,"links":98257},[98258,98259,98260,98261,98262,98263],{"id":97779,"depth":48,"text":97780},{"id":97931,"depth":48,"text":97932},{"id":97981,"depth":48,"text":97982},{"id":98027,"depth":48,"text":98028},{"id":98168,"depth":48,"text":98169},{"id":98232,"depth":48,"text":98233},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97771,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98270,"title":98271,"body":98272,"description":333,"extension":334,"meta":99343,"navigation":336,"path":99344,"seo":99345,"stem":99346,"__hash__":99347},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98273,"toc":99337},[98274,98277,98281,98284,98287,98290,98355,98358,98398,98401,98483,98486,98491,98513,98515,98520,98525,98528,98531,98686,98689,98890,98894,98897,98900,98968,98970,98975,98978,98981,99061,99065,99068,99070,99143,99145,99150,99152,99232,99236,99239,99242,99245,99248,99251,99254,99334],[10,98275,98271],{"id":98276},"_6数组的拼接",[351,98278,98280],{"id":98279},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98282,98283],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98285,98286],{},"函数内部传两个数列构成的数列或者元组",[14,98288,98289],{},"①一维数组的拼接",[18,98291,98293],{"className":20,"code":98292,"language":22,"meta":23,"style":23},"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",[25,98294,98295,98315,98335,98340,98345,98350],{"__ignoreMap":23},[28,98296,98297,98299,98301,98303,98305,98307,98309,98311,98313],{"class":30,"line":31},[28,98298,51],{"class":38},[28,98300,54],{"class":34},[28,98302,93278],{"class":38},[28,98304,61],{"class":60},[28,98306,64],{"class":38},[28,98308,211],{"class":60},[28,98310,64],{"class":38},[28,98312,78],{"class":60},[28,98314,4919],{"class":38},[28,98316,98317,98319,98321,98323,98325,98327,98329,98331,98333],{"class":30,"line":48},[28,98318,666],{"class":38},[28,98320,54],{"class":34},[28,98322,93278],{"class":38},[28,98324,73],{"class":60},[28,98326,64],{"class":38},[28,98328,721],{"class":60},[28,98330,64],{"class":38},[28,98332,206],{"class":60},[28,98334,4919],{"class":38},[28,98336,98337],{"class":30,"line":84},[28,98338,98339],{"class":87},"#调用concatenate进行数组拼接\n",[28,98341,98342],{"class":30,"line":91},[28,98343,98344],{"class":38},"np.concatenate((a,b))\n",[28,98346,98347],{"class":30,"line":97},[28,98348,98349],{"class":87},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[28,98351,98352],{"class":30,"line":103},[28,98353,98354],{"class":87},"#np.concatenate([a,b])\n",[14,98356,98357],{},"②一维多个数组拼接",[18,98359,98361],{"className":20,"code":98360,"language":22,"meta":23,"style":23},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[25,98362,98363,98368,98388,98393],{"__ignoreMap":23},[28,98364,98365],{"class":30,"line":31},[28,98366,98367],{"class":87},"#也可以多个数组进行拼接\n",[28,98369,98370,98372,98374,98376,98378,98380,98382,98384,98386],{"class":30,"line":48},[28,98371,691],{"class":38},[28,98373,54],{"class":34},[28,98375,93278],{"class":38},[28,98377,845],{"class":60},[28,98379,64],{"class":38},[28,98381,871],{"class":60},[28,98383,64],{"class":38},[28,98385,67],{"class":60},[28,98387,4919],{"class":38},[28,98389,98390],{"class":30,"line":84},[28,98391,98392],{"class":38},"c\n",[28,98394,98395],{"class":30,"line":91},[28,98396,98397],{"class":38},"np.concatenate((a,b,c))\n",[14,98399,98400],{},"③二维数组拼接",[18,98402,98404],{"className":20,"code":98403,"language":22,"meta":23,"style":23},"#二维数组使用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",[25,98405,98406,98411,98435,98460,98465,98470],{"__ignoreMap":23},[28,98407,98408],{"class":30,"line":31},[28,98409,98410],{"class":87},"#二维数组使用concatenate进行拼接\n",[28,98412,98413,98415,98417,98419,98421,98423,98425,98427,98429,98431,98433],{"class":30,"line":48},[28,98414,93560],{"class":38},[28,98416,54],{"class":34},[28,98418,190],{"class":38},[28,98420,61],{"class":60},[28,98422,64],{"class":38},[28,98424,67],{"class":60},[28,98426,70],{"class":38},[28,98428,78],{"class":60},[28,98430,64],{"class":38},[28,98432,73],{"class":60},[28,98434,81],{"class":38},[28,98436,98437,98440,98442,98444,98446,98448,98450,98452,98454,98456,98458],{"class":30,"line":84},[28,98438,98439],{"class":38},"bb",[28,98441,54],{"class":34},[28,98443,190],{"class":38},[28,98445,738],{"class":60},[28,98447,64],{"class":38},[28,98449,1040],{"class":60},[28,98451,70],{"class":38},[28,98453,78],{"class":60},[28,98455,64],{"class":38},[28,98457,73],{"class":60},[28,98459,81],{"class":38},[28,98461,98462],{"class":30,"line":91},[28,98463,98464],{"class":87},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[28,98466,98467],{"class":30,"line":97},[28,98468,98469],{"class":87},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[28,98471,98472,98475,98477,98479,98481],{"class":30,"line":103},[28,98473,98474],{"class":38},"np.concatenate((aa,bb),",[28,98476,47770],{"class":5478},[28,98478,54],{"class":34},[28,98480,244],{"class":60},[28,98482,81],{"class":38},[14,98484,98485],{},"结果：",[14,98487,98488],{},[1727,98489],{"alt":23,"src":98490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[18,98492,98494],{"className":20,"code":98493,"language":22,"meta":23,"style":23},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[25,98495,98496,98501],{"__ignoreMap":23},[28,98497,98498],{"class":30,"line":31},[28,98499,98500],{"class":87},"#指定axis为1进行拼接\n",[28,98502,98503,98505,98507,98509,98511],{"class":30,"line":48},[28,98504,98474],{"class":38},[28,98506,47770],{"class":5478},[28,98508,54],{"class":34},[28,98510,61],{"class":60},[28,98512,81],{"class":38},[14,98514,98485],{},[14,98516,98517],{},[1727,98518],{"alt":23,"src":98519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98521,98522],{},[555,98523,98524],{},"二维数组总结：0竖着方向，1横着方向",[14,98526,98527],{},"④三维数组拼接",[14,98529,98530],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[18,98532,98534],{"className":20,"code":98533,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98535,98536,98541,98569,98599,98604,98621,98626,98631,98636,98653,98658,98663,98668,98681],{"__ignoreMap":23},[28,98537,98538],{"class":30,"line":31},[28,98539,98540],{"class":87},"#两个三行六列\n",[28,98542,98543,98545,98547,98549,98551,98553,98555,98557,98559,98561,98563,98565,98567],{"class":30,"line":48},[28,98544,95773],{"class":38},[28,98546,54],{"class":34},[28,98548,190],{"class":38},[28,98550,61],{"class":60},[28,98552,64],{"class":38},[28,98554,197],{"class":60},[28,98556,70],{"class":38},[28,98558,211],{"class":60},[28,98560,64],{"class":38},[28,98562,78],{"class":60},[28,98564,64],{"class":38},[28,98566,206],{"class":60},[28,98568,81],{"class":38},[28,98570,98571,98574,98576,98578,98580,98582,98585,98587,98589,98591,98593,98595,98597],{"class":30,"line":84},[28,98572,98573],{"class":38},"bbb",[28,98575,54],{"class":34},[28,98577,190],{"class":38},[28,98579,738],{"class":60},[28,98581,64],{"class":38},[28,98583,98584],{"class":60},"137",[28,98586,70],{"class":38},[28,98588,211],{"class":60},[28,98590,64],{"class":38},[28,98592,78],{"class":60},[28,98594,64],{"class":38},[28,98596,206],{"class":60},[28,98598,81],{"class":38},[28,98600,98601],{"class":30,"line":91},[28,98602,98603],{"class":87},"#axis=0\n",[28,98605,98606,98608,98610,98613,98615,98617,98619],{"class":30,"line":97},[28,98607,1093],{"class":38},[28,98609,54],{"class":34},[28,98611,98612],{"class":38},"np.concatenate((aaa,bbb),",[28,98614,47770],{"class":5478},[28,98616,54],{"class":34},[28,98618,244],{"class":60},[28,98620,81],{"class":38},[28,98622,98623],{"class":30,"line":103},[28,98624,98625],{"class":38},"s.shape\n",[28,98627,98628],{"class":30,"line":109},[28,98629,98630],{"class":87},"#输出：(4,3,6)\n",[28,98632,98633],{"class":30,"line":118},[28,98634,98635],{"class":87},"#axis=1\n",[28,98637,98638,98641,98643,98645,98647,98649,98651],{"class":30,"line":124},[28,98639,98640],{"class":38},"ss",[28,98642,54],{"class":34},[28,98644,98612],{"class":38},[28,98646,47770],{"class":5478},[28,98648,54],{"class":34},[28,98650,61],{"class":60},[28,98652,81],{"class":38},[28,98654,98655],{"class":30,"line":131},[28,98656,98657],{"class":38},"ss.shape\n",[28,98659,98660],{"class":30,"line":137},[28,98661,98662],{"class":87},"#输出：(2,6,6)\n",[28,98664,98665],{"class":30,"line":143},[28,98666,98667],{"class":87},"#axis=2\n",[28,98669,98670,98672,98674,98676,98678],{"class":30,"line":149},[28,98671,98612],{"class":38},[28,98673,47770],{"class":5478},[28,98675,54],{"class":34},[28,98677,211],{"class":60},[28,98679,98680],{"class":38},").shape\n",[28,98682,98683],{"class":30,"line":1890},[28,98684,98685],{"class":87},"#输出：（2，3，12）\n",[14,98687,98688],{},"⑤四维数组拼接",[18,98690,98692],{"className":20,"code":98691,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98693,98694,98698,98726,98754,98778,98804,98808,98821,98826,98830,98842,98847,98851,98863,98868,98873,98885],{"__ignoreMap":23},[28,98695,98696],{"class":30,"line":31},[28,98697,98540],{"class":87},[28,98699,98700,98702,98704,98706,98708,98710,98712,98714,98716,98718,98720,98722,98724],{"class":30,"line":48},[28,98701,95773],{"class":38},[28,98703,54],{"class":34},[28,98705,190],{"class":38},[28,98707,61],{"class":60},[28,98709,64],{"class":38},[28,98711,197],{"class":60},[28,98713,70],{"class":38},[28,98715,211],{"class":60},[28,98717,64],{"class":38},[28,98719,78],{"class":60},[28,98721,64],{"class":38},[28,98723,206],{"class":60},[28,98725,81],{"class":38},[28,98727,98728,98730,98732,98734,98736,98738,98740,98742,98744,98746,98748,98750,98752],{"class":30,"line":84},[28,98729,98573],{"class":38},[28,98731,54],{"class":34},[28,98733,190],{"class":38},[28,98735,738],{"class":60},[28,98737,64],{"class":38},[28,98739,98584],{"class":60},[28,98741,70],{"class":38},[28,98743,211],{"class":60},[28,98745,64],{"class":38},[28,98747,78],{"class":60},[28,98749,64],{"class":38},[28,98751,206],{"class":60},[28,98753,81],{"class":38},[28,98755,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774,98776],{"class":30,"line":91},[28,98757,257],{"class":38},[28,98759,54],{"class":34},[28,98761,97922],{"class":38},[28,98763,211],{"class":60},[28,98765,64],{"class":38},[28,98767,78],{"class":60},[28,98769,64],{"class":38},[28,98771,78],{"class":60},[28,98773,64],{"class":38},[28,98775,211],{"class":60},[28,98777,81],{"class":38},[28,98779,98780,98783,98785,98788,98790,98792,98794,98796,98798,98800,98802],{"class":30,"line":97},[28,98781,98782],{"class":38},"bbbb",[28,98784,54],{"class":34},[28,98786,98787],{"class":38},"bbb.reshape(",[28,98789,211],{"class":60},[28,98791,64],{"class":38},[28,98793,78],{"class":60},[28,98795,64],{"class":38},[28,98797,78],{"class":60},[28,98799,64],{"class":38},[28,98801,211],{"class":60},[28,98803,81],{"class":38},[28,98805,98806],{"class":30,"line":103},[28,98807,98603],{"class":87},[28,98809,98810,98813,98815,98817,98819],{"class":30,"line":109},[28,98811,98812],{"class":38},"np.concatenate((aaaa,bbbb),",[28,98814,47770],{"class":5478},[28,98816,54],{"class":34},[28,98818,244],{"class":60},[28,98820,98680],{"class":38},[28,98822,98823],{"class":30,"line":118},[28,98824,98825],{"class":87},"#结果：（4，3，3，2）\n",[28,98827,98828],{"class":30,"line":124},[28,98829,98635],{"class":87},[28,98831,98832,98834,98836,98838,98840],{"class":30,"line":131},[28,98833,98812],{"class":38},[28,98835,47770],{"class":5478},[28,98837,54],{"class":34},[28,98839,61],{"class":60},[28,98841,98680],{"class":38},[28,98843,98844],{"class":30,"line":137},[28,98845,98846],{"class":87},"#结果：（2，6，3，2）\n",[28,98848,98849],{"class":30,"line":143},[28,98850,98667],{"class":87},[28,98852,98853,98855,98857,98859,98861],{"class":30,"line":149},[28,98854,98812],{"class":38},[28,98856,47770],{"class":5478},[28,98858,54],{"class":34},[28,98860,211],{"class":60},[28,98862,98680],{"class":38},[28,98864,98865],{"class":30,"line":1890},[28,98866,98867],{"class":87},"#结果：（2，3，6，2）\n",[28,98869,98870],{"class":30,"line":1904},[28,98871,98872],{"class":87},"#axis=3\n",[28,98874,98875,98877,98879,98881,98883],{"class":30,"line":1909},[28,98876,98812],{"class":38},[28,98878,47770],{"class":5478},[28,98880,54],{"class":34},[28,98882,78],{"class":60},[28,98884,98680],{"class":38},[28,98886,98887],{"class":30,"line":1915},[28,98888,98889],{"class":87},"#结果：（2，3，3，4）\n",[351,98891,98893],{"id":98892},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98895,98896],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98898,98899],{},"①二维数组",[18,98901,98903],{"className":20,"code":98902,"language":22,"meta":23,"style":23},"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",[25,98904,98905,98929,98953,98958,98963],{"__ignoreMap":23},[28,98906,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927],{"class":30,"line":31},[28,98908,93560],{"class":38},[28,98910,54],{"class":34},[28,98912,190],{"class":38},[28,98914,61],{"class":60},[28,98916,64],{"class":38},[28,98918,67],{"class":60},[28,98920,70],{"class":38},[28,98922,78],{"class":60},[28,98924,64],{"class":38},[28,98926,73],{"class":60},[28,98928,81],{"class":38},[28,98930,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949,98951],{"class":30,"line":48},[28,98932,98439],{"class":38},[28,98934,54],{"class":34},[28,98936,190],{"class":38},[28,98938,738],{"class":60},[28,98940,64],{"class":38},[28,98942,1040],{"class":60},[28,98944,70],{"class":38},[28,98946,78],{"class":60},[28,98948,64],{"class":38},[28,98950,73],{"class":60},[28,98952,81],{"class":38},[28,98954,98955],{"class":30,"line":84},[28,98956,98957],{"class":38},"np.hstack((aa,bb))\n",[28,98959,98960],{"class":30,"line":91},[28,98961,98962],{"class":87},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[28,98964,98965],{"class":30,"line":97},[28,98966,98967],{"class":87},"#np.hstack([aa,bb])\n",[14,98969,98485],{},[14,98971,98972],{},[1727,98973],{"alt":23,"src":98974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98976,98977],{},"等效于concatenate()函数中axis=1时的情况",[14,98979,98980],{},"②三维数组",[18,98982,98984],{"className":20,"code":98983,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,98985,98986,98990,99018,99046,99051,99056],{"__ignoreMap":23},[28,98987,98988],{"class":30,"line":31},[28,98989,98540],{"class":87},[28,98991,98992,98994,98996,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016],{"class":30,"line":48},[28,98993,95773],{"class":38},[28,98995,54],{"class":34},[28,98997,190],{"class":38},[28,98999,61],{"class":60},[28,99001,64],{"class":38},[28,99003,197],{"class":60},[28,99005,70],{"class":38},[28,99007,211],{"class":60},[28,99009,64],{"class":38},[28,99011,78],{"class":60},[28,99013,64],{"class":38},[28,99015,206],{"class":60},[28,99017,81],{"class":38},[28,99019,99020,99022,99024,99026,99028,99030,99032,99034,99036,99038,99040,99042,99044],{"class":30,"line":84},[28,99021,98573],{"class":38},[28,99023,54],{"class":34},[28,99025,190],{"class":38},[28,99027,738],{"class":60},[28,99029,64],{"class":38},[28,99031,98584],{"class":60},[28,99033,70],{"class":38},[28,99035,211],{"class":60},[28,99037,64],{"class":38},[28,99039,78],{"class":60},[28,99041,64],{"class":38},[28,99043,206],{"class":60},[28,99045,81],{"class":38},[28,99047,99048],{"class":30,"line":91},[28,99049,99050],{"class":87},"#使用hstack\n",[28,99052,99053],{"class":30,"line":97},[28,99054,99055],{"class":38},"np.hstack((aaa,bbb)).shape\n",[28,99057,99058],{"class":30,"line":103},[28,99059,99060],{"class":87},"#输出：（2，6，6）\n",[351,99062,99064],{"id":99063},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99066,99067],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99069,98899],{},[18,99071,99073],{"className":20,"code":99072,"language":22,"meta":23,"style":23},"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",[25,99074,99075,99099,99123,99128,99133,99138],{"__ignoreMap":23},[28,99076,99077,99079,99081,99083,99085,99087,99089,99091,99093,99095,99097],{"class":30,"line":31},[28,99078,93560],{"class":38},[28,99080,54],{"class":34},[28,99082,190],{"class":38},[28,99084,61],{"class":60},[28,99086,64],{"class":38},[28,99088,67],{"class":60},[28,99090,70],{"class":38},[28,99092,78],{"class":60},[28,99094,64],{"class":38},[28,99096,73],{"class":60},[28,99098,81],{"class":38},[28,99100,99101,99103,99105,99107,99109,99111,99113,99115,99117,99119,99121],{"class":30,"line":48},[28,99102,98439],{"class":38},[28,99104,54],{"class":34},[28,99106,190],{"class":38},[28,99108,738],{"class":60},[28,99110,64],{"class":38},[28,99112,1040],{"class":60},[28,99114,70],{"class":38},[28,99116,78],{"class":60},[28,99118,64],{"class":38},[28,99120,73],{"class":60},[28,99122,81],{"class":38},[28,99124,99125],{"class":30,"line":84},[28,99126,99127],{"class":87},"#vstack 垂直方向进行堆叠\n",[28,99129,99130],{"class":30,"line":91},[28,99131,99132],{"class":38},"np.vstack((aa,bb))\n",[28,99134,99135],{"class":30,"line":97},[28,99136,99137],{"class":87},"#与hstack传的参数类似，等价于：\n",[28,99139,99140],{"class":30,"line":103},[28,99141,99142],{"class":38},"np.vstack([aa,bb])\n",[14,99144,98485],{},[14,99146,99147],{},[1727,99148],{"alt":23,"src":99149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99151,98980],{},[18,99153,99155],{"className":20,"code":99154,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,99156,99157,99161,99189,99217,99222,99227],{"__ignoreMap":23},[28,99158,99159],{"class":30,"line":31},[28,99160,98540],{"class":87},[28,99162,99163,99165,99167,99169,99171,99173,99175,99177,99179,99181,99183,99185,99187],{"class":30,"line":48},[28,99164,95773],{"class":38},[28,99166,54],{"class":34},[28,99168,190],{"class":38},[28,99170,61],{"class":60},[28,99172,64],{"class":38},[28,99174,197],{"class":60},[28,99176,70],{"class":38},[28,99178,211],{"class":60},[28,99180,64],{"class":38},[28,99182,78],{"class":60},[28,99184,64],{"class":38},[28,99186,206],{"class":60},[28,99188,81],{"class":38},[28,99190,99191,99193,99195,99197,99199,99201,99203,99205,99207,99209,99211,99213,99215],{"class":30,"line":84},[28,99192,98573],{"class":38},[28,99194,54],{"class":34},[28,99196,190],{"class":38},[28,99198,738],{"class":60},[28,99200,64],{"class":38},[28,99202,98584],{"class":60},[28,99204,70],{"class":38},[28,99206,211],{"class":60},[28,99208,64],{"class":38},[28,99210,78],{"class":60},[28,99212,64],{"class":38},[28,99214,206],{"class":60},[28,99216,81],{"class":38},[28,99218,99219],{"class":30,"line":91},[28,99220,99221],{"class":87},"#使用vstack\n",[28,99223,99224],{"class":30,"line":97},[28,99225,99226],{"class":38},"np.vstack((aaa,bbb)).shape\n",[28,99228,99229],{"class":30,"line":103},[28,99230,99231],{"class":87},"#输出：（4，3，6）\n",[351,99233,99235],{"id":99234},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99237,99238],{},"该方法是三维数组特有的方法",[14,99240,99241],{},"也就是说",[14,99243,99244],{},"一维数组拼接方法用：concatenate()",[14,99246,99247],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99249,99250],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99252,99253],{},"四维数组及多维数组只能用concatenate进行拼接",[18,99255,99257],{"className":20,"code":99256,"language":22,"meta":23,"style":23},"#两个三行六列\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",[25,99258,99259,99263,99291,99319,99324,99329],{"__ignoreMap":23},[28,99260,99261],{"class":30,"line":31},[28,99262,98540],{"class":87},[28,99264,99265,99267,99269,99271,99273,99275,99277,99279,99281,99283,99285,99287,99289],{"class":30,"line":48},[28,99266,95773],{"class":38},[28,99268,54],{"class":34},[28,99270,190],{"class":38},[28,99272,61],{"class":60},[28,99274,64],{"class":38},[28,99276,197],{"class":60},[28,99278,70],{"class":38},[28,99280,211],{"class":60},[28,99282,64],{"class":38},[28,99284,78],{"class":60},[28,99286,64],{"class":38},[28,99288,206],{"class":60},[28,99290,81],{"class":38},[28,99292,99293,99295,99297,99299,99301,99303,99305,99307,99309,99311,99313,99315,99317],{"class":30,"line":84},[28,99294,98573],{"class":38},[28,99296,54],{"class":34},[28,99298,190],{"class":38},[28,99300,738],{"class":60},[28,99302,64],{"class":38},[28,99304,98584],{"class":60},[28,99306,70],{"class":38},[28,99308,211],{"class":60},[28,99310,64],{"class":38},[28,99312,78],{"class":60},[28,99314,64],{"class":38},[28,99316,206],{"class":60},[28,99318,81],{"class":38},[28,99320,99321],{"class":30,"line":91},[28,99322,99323],{"class":87},"#使用dstack\n",[28,99325,99326],{"class":30,"line":97},[28,99327,99328],{"class":38},"np.dstack((aaa,bbb)).shape\n",[28,99330,99331],{"class":30,"line":103},[28,99332,99333],{"class":87},"#结果：（2，3，12）\n",[328,99335,99336],{},"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":23,"searchDepth":48,"depth":48,"links":99338},[99339,99340,99341,99342],{"id":98279,"depth":48,"text":98280},{"id":98892,"depth":48,"text":98893},{"id":99063,"depth":48,"text":99064},{"id":99234,"depth":48,"text":99235},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98271,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":4,"title":5,"body":99349,"description":333,"extension":334,"meta":99591,"navigation":336,"path":337,"seo":99592,"stem":339,"__hash__":340},{"type":7,"value":99350,"toc":99589},[99351,99353,99355,99439,99441,99443,99445,99447,99449,99451,99453,99455,99587],[10,99352,5],{"id":12},[14,99354,16],{},[18,99356,99357],{"className":20,"code":21,"language":22,"meta":23,"style":23},[25,99358,99359,99369,99393,99397,99401,99405,99409,99415,99419,99423,99427,99431,99435],{"__ignoreMap":23},[28,99360,99361,99363,99365,99367],{"class":30,"line":31},[28,99362,35],{"class":34},[28,99364,39],{"class":38},[28,99366,42],{"class":34},[28,99368,45],{"class":38},[28,99370,99371,99373,99375,99377,99379,99381,99383,99385,99387,99389,99391],{"class":30,"line":48},[28,99372,51],{"class":38},[28,99374,54],{"class":34},[28,99376,57],{"class":38},[28,99378,61],{"class":60},[28,99380,64],{"class":38},[28,99382,67],{"class":60},[28,99384,70],{"class":38},[28,99386,73],{"class":60},[28,99388,64],{"class":38},[28,99390,78],{"class":60},[28,99392,81],{"class":38},[28,99394,99395],{"class":30,"line":84},[28,99396,88],{"class":87},[28,99398,99399],{"class":30,"line":91},[28,99400,94],{"class":87},[28,99402,99403],{"class":30,"line":97},[28,99404,100],{"class":38},[28,99406,99407],{"class":30,"line":103},[28,99408,106],{"class":87},[28,99410,99411,99413],{"class":30,"line":109},[28,99412,112],{"class":38},[28,99414,115],{"class":87},[28,99416,99417],{"class":30,"line":118},[28,99418,121],{"class":87},[28,99420,99421],{"class":30,"line":124},[28,99422,128],{"class":127},[28,99424,99425],{"class":30,"line":131},[28,99426,134],{"class":127},[28,99428,99429],{"class":30,"line":137},[28,99430,140],{"class":127},[28,99432,99433],{"class":30,"line":143},[28,99434,146],{"class":127},[28,99436,99437],{"class":30,"line":149},[28,99438,128],{"class":127},[14,99440,154],{},[14,99442,157],{},[14,99444,160],{},[14,99446,163],{},[14,99448,166],{},[14,99450,169],{},[14,99452,172],{},[14,99454,175],{},[18,99456,99457],{"className":20,"code":178,"language":22,"meta":23,"style":23},[25,99458,99459,99487,99491,99495,99499,99515,99519,99551,99555,99559,99563,99583],{"__ignoreMap":23},[28,99460,99461,99463,99465,99467,99469,99471,99473,99475,99477,99479,99481,99483,99485],{"class":30,"line":31},[28,99462,185],{"class":38},[28,99464,54],{"class":34},[28,99466,190],{"class":38},[28,99468,61],{"class":60},[28,99470,64],{"class":38},[28,99472,197],{"class":60},[28,99474,70],{"class":38},[28,99476,78],{"class":60},[28,99478,64],{"class":38},[28,99480,206],{"class":60},[28,99482,64],{"class":38},[28,99484,211],{"class":60},[28,99486,81],{"class":38},[28,99488,99489],{"class":30,"line":48},[28,99490,218],{"class":38},[28,99492,99493],{"class":30,"line":84},[28,99494,223],{"class":87},[28,99496,99497],{"class":30,"line":91},[28,99498,228],{"class":87},[28,99500,99501,99503,99505,99507,99509,99511,99513],{"class":30,"line":97},[28,99502,233],{"class":38},[28,99504,211],{"class":60},[28,99506,64],{"class":38},[28,99508,61],{"class":60},[28,99510,64],{"class":38},[28,99512,244],{"class":60},[28,99514,247],{"class":38},[28,99516,99517],{"class":30,"line":103},[28,99518,252],{"class":87},[28,99520,99521,99523,99525,99527,99529,99531,99533,99535,99537,99539,99541,99543,99545,99547,99549],{"class":30,"line":109},[28,99522,257],{"class":38},[28,99524,54],{"class":34},[28,99526,190],{"class":38},[28,99528,61],{"class":60},[28,99530,64],{"class":38},[28,99532,197],{"class":60},[28,99534,70],{"class":38},[28,99536,78],{"class":60},[28,99538,64],{"class":38},[28,99540,211],{"class":60},[28,99542,64],{"class":38},[28,99544,61],{"class":60},[28,99546,64],{"class":38},[28,99548,206],{"class":60},[28,99550,81],{"class":38},[28,99552,99553],{"class":30,"line":118},[28,99554,290],{"class":38},[28,99556,99557],{"class":30,"line":124},[28,99558,295],{"class":87},[28,99560,99561],{"class":30,"line":131},[28,99562,300],{"class":87},[28,99564,99565,99567,99569,99571,99573,99575,99577,99579,99581],{"class":30,"line":137},[28,99566,305],{"class":38},[28,99568,61],{"class":60},[28,99570,64],{"class":38},[28,99572,211],{"class":60},[28,99574,64],{"class":38},[28,99576,244],{"class":60},[28,99578,64],{"class":38},[28,99580,78],{"class":60},[28,99582,247],{"class":38},[28,99584,99585],{"class":30,"line":143},[28,99586,326],{"class":87},[328,99588,330],{},{"title":23,"searchDepth":48,"depth":48,"links":99590},[],{},{"title":5,"description":333},{"id":99594,"title":99595,"body":99596,"description":333,"extension":334,"meta":100330,"navigation":336,"path":100331,"seo":100332,"stem":100333,"__hash__":100334},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99597,"toc":100328},[99598,99601,99604,99607,99610,99613,99616,99619,99622,99731,99734,99737,100325],[10,99599,99595],{"id":99600},"_8数组分割",[14,99602,99603],{},"split分割",[14,99605,99606],{},"numpy.split(ary,indics_or_sections,axis)",[14,99608,99609],{},"解释：",[14,99611,99612],{},"ary:被分割的数组",[14,99614,99615],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99617,99618],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99620,99621],{},"①一维数组的分割",[18,99623,99625],{"className":20,"code":99624,"language":22,"meta":23,"style":23},"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",[25,99626,99627,99643,99648,99657,99661,99666,99674,99678,99683,99688,99701,99705,99710,99722,99726],{"__ignoreMap":23},[28,99628,99629,99631,99633,99635,99637,99639,99641],{"class":30,"line":31},[28,99630,51],{"class":38},[28,99632,54],{"class":34},[28,99634,190],{"class":38},[28,99636,61],{"class":60},[28,99638,64],{"class":38},[28,99640,819],{"class":60},[28,99642,81],{"class":38},[28,99644,99645],{"class":30,"line":48},[28,99646,99647],{"class":87},"#如果传入整数，必须能够平分，否则会报错\n",[28,99649,99650,99653,99655],{"class":30,"line":84},[28,99651,99652],{"class":38},"np.split(a,",[28,99654,211],{"class":60},[28,99656,81],{"class":38},[28,99658,99659],{"class":30,"line":91},[28,99660,121],{"class":87},[28,99662,99663],{"class":30,"line":97},[28,99664,99665],{"class":87},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[28,99667,99668,99670,99672],{"class":30,"line":103},[28,99669,99652],{"class":38},[28,99671,73],{"class":60},[28,99673,81],{"class":38},[28,99675,99676],{"class":30,"line":109},[28,99677,121],{"class":87},[28,99679,99680],{"class":30,"line":118},[28,99681,99682],{"class":87},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[28,99684,99685],{"class":30,"line":124},[28,99686,99687],{"class":87},"#传入数组\n",[28,99689,99690,99693,99695,99697,99699],{"class":30,"line":131},[28,99691,99692],{"class":38},"np.split(a,[",[28,99694,78],{"class":60},[28,99696,64],{"class":38},[28,99698,721],{"class":60},[28,99700,4919],{"class":38},[28,99702,99703],{"class":30,"line":137},[28,99704,121],{"class":87},[28,99706,99707],{"class":30,"line":143},[28,99708,99709],{"class":87},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[28,99711,99712,99714,99716,99718,99720],{"class":30,"line":149},[28,99713,99692],{"class":38},[28,99715,721],{"class":60},[28,99717,64],{"class":38},[28,99719,769],{"class":60},[28,99721,4919],{"class":38},[28,99723,99724],{"class":30,"line":1890},[28,99725,121],{"class":87},[28,99727,99728],{"class":30,"line":1904},[28,99729,99730],{"class":87},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99732,99733],{},"②二维数组的分割",[14,99735,99736],{},"使用split()",[18,99738,99740],{"className":20,"code":99739,"language":22,"meta":23,"style":23},"#二维数组分割\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",[25,99741,99742,99747,99771,99776,99785,99789,99793,99798,99803,99808,99813,99818,99823,99828,99832,99845,99849,99853,99857,99861,99865,99870,99875,99880,99884,99889,99905,99909,99913,99918,99923,99928,99933,99938,99943,99948,99953,99958,99963,99968,99973,99978,99983,99988,99993,99998,100003,100007,100011,100031,100035,100039,100044,100049,100054,100059,100064,100069,100074,100079,100084,100089,100094,100099,100104,100109,100114,100119,100124,100129,100133,100138,100147,100151,100155,100159,100163,100167,100171,100175,100179,100183,100192,100196,100200,100204,100208,100212,100216,100220,100224,100228,100232,100236,100240,100244,100248,100252,100256,100260,100264,100268,100272,100276,100289,100293,100297,100301,100305,100309,100313,100317,100321],{"__ignoreMap":23},[28,99743,99744],{"class":30,"line":31},[28,99745,99746],{"class":87},"#二维数组分割\n",[28,99748,99749,99751,99753,99755,99757,99759,99761,99763,99765,99767,99769],{"class":30,"line":48},[28,99750,93560],{"class":38},[28,99752,54],{"class":34},[28,99754,190],{"class":38},[28,99756,61],{"class":60},[28,99758,64],{"class":38},[28,99760,197],{"class":60},[28,99762,70],{"class":38},[28,99764,206],{"class":60},[28,99766,64],{"class":38},[28,99768,206],{"class":60},[28,99770,81],{"class":38},[28,99772,99773],{"class":30,"line":84},[28,99774,99775],{"class":87},"#默认axis=0  传入整数平均分,按行来的\n",[28,99777,99778,99781,99783],{"class":30,"line":91},[28,99779,99780],{"class":38},"np.split(aa,",[28,99782,78],{"class":60},[28,99784,81],{"class":38},[28,99786,99787],{"class":30,"line":97},[28,99788,96016],{"class":87},[28,99790,99791],{"class":30,"line":103},[28,99792,128],{"class":127},[28,99794,99795],{"class":30,"line":109},[28,99796,99797],{"class":127},"[array([[ 1,  2,  3,  4,  5,  6],\n",[28,99799,99800],{"class":30,"line":118},[28,99801,99802],{"class":127},"        [ 7,  8,  9, 10, 11, 12]]),\n",[28,99804,99805],{"class":30,"line":124},[28,99806,99807],{"class":127}," array([[13, 14, 15, 16, 17, 18],\n",[28,99809,99810],{"class":30,"line":131},[28,99811,99812],{"class":127},"        [19, 20, 21, 22, 23, 24]]),\n",[28,99814,99815],{"class":30,"line":137},[28,99816,99817],{"class":127}," array([[25, 26, 27, 28, 29, 30],\n",[28,99819,99820],{"class":30,"line":143},[28,99821,99822],{"class":127},"        [31, 32, 33, 34, 35, 36]])]\n",[28,99824,99825],{"class":30,"line":149},[28,99826,99827],{"class":127}," '''\n",[28,99829,99830],{"class":30,"line":1890},[28,99831,99687],{"class":87},[28,99833,99834,99837,99839,99841,99843],{"class":30,"line":1904},[28,99835,99836],{"class":38},"np.split(aa,[",[28,99838,211],{"class":60},[28,99840,64],{"class":38},[28,99842,721],{"class":60},[28,99844,4919],{"class":38},[28,99846,99847],{"class":30,"line":1909},[28,99848,96016],{"class":87},[28,99850,99851],{"class":30,"line":1915},[28,99852,128],{"class":127},[28,99854,99855],{"class":30,"line":1936},[28,99856,99797],{"class":127},[28,99858,99859],{"class":30,"line":1941},[28,99860,99802],{"class":127},[28,99862,99863],{"class":30,"line":1955},[28,99864,99807],{"class":127},[28,99866,99867],{"class":30,"line":1960},[28,99868,99869],{"class":127},"        [19, 20, 21, 22, 23, 24],\n",[28,99871,99872],{"class":30,"line":1989},[28,99873,99874],{"class":127},"        [25, 26, 27, 28, 29, 30]]),\n",[28,99876,99877],{"class":30,"line":1994},[28,99878,99879],{"class":127}," array([[31, 32, 33, 34, 35, 36]])]\n",[28,99881,99882],{"class":30,"line":2011},[28,99883,128],{"class":127},[28,99885,99886],{"class":30,"line":2016},[28,99887,99888],{"class":87},"#axis=1 按照列来分\n",[28,99890,99891,99893,99895,99897,99899,99901,99903],{"class":30,"line":2021},[28,99892,99780],{"class":38},[28,99894,78],{"class":60},[28,99896,64],{"class":38},[28,99898,47770],{"class":5478},[28,99900,54],{"class":34},[28,99902,61],{"class":60},[28,99904,81],{"class":38},[28,99906,99907],{"class":30,"line":2026},[28,99908,96016],{"class":87},[28,99910,99911],{"class":30,"line":2040},[28,99912,128],{"class":127},[28,99914,99915],{"class":30,"line":2045},[28,99916,99917],{"class":127},"[array([[ 1,  2],\n",[28,99919,99920],{"class":30,"line":2839},[28,99921,99922],{"class":127},"        [ 7,  8],\n",[28,99924,99925],{"class":30,"line":2853},[28,99926,99927],{"class":127},"        [13, 14],\n",[28,99929,99930],{"class":30,"line":2861},[28,99931,99932],{"class":127},"        [19, 20],\n",[28,99934,99935],{"class":30,"line":2866},[28,99936,99937],{"class":127},"        [25, 26],\n",[28,99939,99940],{"class":30,"line":2872},[28,99941,99942],{"class":127},"        [31, 32]]),\n",[28,99944,99945],{"class":30,"line":2878},[28,99946,99947],{"class":127}," array([[ 3,  4],\n",[28,99949,99950],{"class":30,"line":2883},[28,99951,99952],{"class":127},"        [ 9, 10],\n",[28,99954,99955],{"class":30,"line":8210},[28,99956,99957],{"class":127},"        [15, 16],\n",[28,99959,99960],{"class":30,"line":8234},[28,99961,99962],{"class":127},"        [21, 22],\n",[28,99964,99965],{"class":30,"line":8239},[28,99966,99967],{"class":127},"        [27, 28],\n",[28,99969,99970],{"class":30,"line":8245},[28,99971,99972],{"class":127},"        [33, 34]]),\n",[28,99974,99975],{"class":30,"line":8272},[28,99976,99977],{"class":127}," array([[ 5,  6],\n",[28,99979,99980],{"class":30,"line":8277},[28,99981,99982],{"class":127},"        [11, 12],\n",[28,99984,99985],{"class":30,"line":8283},[28,99986,99987],{"class":127},"        [17, 18],\n",[28,99989,99990],{"class":30,"line":8295},[28,99991,99992],{"class":127},"        [23, 24],\n",[28,99994,99995],{"class":30,"line":8307},[28,99996,99997],{"class":127},"        [29, 30],\n",[28,99999,100000],{"class":30,"line":8319},[28,100001,100002],{"class":127},"        [35, 36]])]\n",[28,100004,100005],{"class":30,"line":9978},[28,100006,99827],{"class":127},[28,100008,100009],{"class":30,"line":10003},[28,100010,99687],{"class":87},[28,100012,100013,100015,100017,100019,100021,100023,100025,100027,100029],{"class":30,"line":10026},[28,100014,99836],{"class":38},[28,100016,61],{"class":60},[28,100018,64],{"class":38},[28,100020,211],{"class":60},[28,100022,41865],{"class":38},[28,100024,47770],{"class":5478},[28,100026,54],{"class":34},[28,100028,61],{"class":60},[28,100030,81],{"class":38},[28,100032,100033],{"class":30,"line":10050},[28,100034,121],{"class":87},[28,100036,100037],{"class":30,"line":10055},[28,100038,128],{"class":127},[28,100040,100041],{"class":30,"line":10060},[28,100042,100043],{"class":127},"[array([[ 1],\n",[28,100045,100046],{"class":30,"line":10065},[28,100047,100048],{"class":127},"        [ 7],\n",[28,100050,100051],{"class":30,"line":10074},[28,100052,100053],{"class":127},"        [13],\n",[28,100055,100056],{"class":30,"line":10079},[28,100057,100058],{"class":127},"        [19],\n",[28,100060,100061],{"class":30,"line":10085},[28,100062,100063],{"class":127},"        [25],\n",[28,100065,100066],{"class":30,"line":10106},[28,100067,100068],{"class":127},"        [31]]),\n",[28,100070,100071],{"class":30,"line":10112},[28,100072,100073],{"class":127}," array([[ 2],\n",[28,100075,100076],{"class":30,"line":10126},[28,100077,100078],{"class":127},"        [ 8],\n",[28,100080,100081],{"class":30,"line":10132},[28,100082,100083],{"class":127},"        [14],\n",[28,100085,100086],{"class":30,"line":10159},[28,100087,100088],{"class":127},"        [20],\n",[28,100090,100091],{"class":30,"line":10168},[28,100092,100093],{"class":127},"        [26],\n",[28,100095,100096],{"class":30,"line":10174},[28,100097,100098],{"class":127},"        [32]]),\n",[28,100100,100101],{"class":30,"line":10182},[28,100102,100103],{"class":127}," array([[ 3,  4,  5,  6],\n",[28,100105,100106],{"class":30,"line":10187},[28,100107,100108],{"class":127},"        [ 9, 10, 11, 12],\n",[28,100110,100111],{"class":30,"line":16866},[28,100112,100113],{"class":127},"        [15, 16, 17, 18],\n",[28,100115,100116],{"class":30,"line":16872},[28,100117,100118],{"class":127},"        [21, 22, 23, 24],\n",[28,100120,100121],{"class":30,"line":16895},[28,100122,100123],{"class":127},"        [27, 28, 29, 30],\n",[28,100125,100126],{"class":30,"line":16901},[28,100127,100128],{"class":127},"        [33, 34, 35, 36]])]\n",[28,100130,100131],{"class":30,"line":16924},[28,100132,128],{"class":127},[28,100134,100135],{"class":30,"line":16938},[28,100136,100137],{"class":87},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[28,100139,100140,100143,100145],{"class":30,"line":16958},[28,100141,100142],{"class":38},"np.vsplit(aa,",[28,100144,78],{"class":60},[28,100146,81],{"class":38},[28,100148,100149],{"class":30,"line":16964},[28,100150,121],{"class":87},[28,100152,100153],{"class":30,"line":16975},[28,100154,128],{"class":127},[28,100156,100157],{"class":30,"line":16998},[28,100158,99797],{"class":127},[28,100160,100161],{"class":30,"line":17020},[28,100162,99802],{"class":127},[28,100164,100165],{"class":30,"line":17025},[28,100166,99807],{"class":127},[28,100168,100169],{"class":30,"line":17031},[28,100170,99812],{"class":127},[28,100172,100173],{"class":30,"line":17045},[28,100174,99817],{"class":127},[28,100176,100177],{"class":30,"line":17058},[28,100178,99822],{"class":127},[28,100180,100181],{"class":30,"line":17063},[28,100182,128],{"class":127},[28,100184,100185,100188,100190],{"class":30,"line":17077},[28,100186,100187],{"class":38},"np.hsplit(aa,",[28,100189,78],{"class":60},[28,100191,81],{"class":38},[28,100193,100194],{"class":30,"line":17082},[28,100195,121],{"class":87},[28,100197,100198],{"class":30,"line":17088},[28,100199,128],{"class":127},[28,100201,100202],{"class":30,"line":17093},[28,100203,99917],{"class":127},[28,100205,100206],{"class":30,"line":17107},[28,100207,99922],{"class":127},[28,100209,100210],{"class":30,"line":17112},[28,100211,99927],{"class":127},[28,100213,100214],{"class":30,"line":17117},[28,100215,99932],{"class":127},[28,100217,100218],{"class":30,"line":17131},[28,100219,99937],{"class":127},[28,100221,100222],{"class":30,"line":17143},[28,100223,99942],{"class":127},[28,100225,100226],{"class":30,"line":17148},[28,100227,99947],{"class":127},[28,100229,100230],{"class":30,"line":17161},[28,100231,99952],{"class":127},[28,100233,100234],{"class":30,"line":17166},[28,100235,99957],{"class":127},[28,100237,100238],{"class":30,"line":17171},[28,100239,99962],{"class":127},[28,100241,100242],{"class":30,"line":17176},[28,100243,99967],{"class":127},[28,100245,100246],{"class":30,"line":17189},[28,100247,99972],{"class":127},[28,100249,100250],{"class":30,"line":17194},[28,100251,99977],{"class":127},[28,100253,100254],{"class":30,"line":32889},[28,100255,99982],{"class":127},[28,100257,100258],{"class":30,"line":32895},[28,100259,99987],{"class":127},[28,100261,100262],{"class":30,"line":32901},[28,100263,99992],{"class":127},[28,100265,100266],{"class":30,"line":32907},[28,100267,99997],{"class":127},[28,100269,100270],{"class":30,"line":32913},[28,100271,100002],{"class":127},[28,100273,100274],{"class":30,"line":32924},[28,100275,128],{"class":127},[28,100277,100278,100281,100283,100285,100287],{"class":30,"line":32930},[28,100279,100280],{"class":38},"np.vsplit(aa,[",[28,100282,211],{"class":60},[28,100284,64],{"class":38},[28,100286,721],{"class":60},[28,100288,4919],{"class":38},[28,100290,100291],{"class":30,"line":32950},[28,100292,121],{"class":87},[28,100294,100295],{"class":30,"line":32956},[28,100296,128],{"class":127},[28,100298,100299],{"class":30,"line":32967},[28,100300,99797],{"class":127},[28,100302,100303],{"class":30,"line":32973},[28,100304,99802],{"class":127},[28,100306,100307],{"class":30,"line":32979},[28,100308,99807],{"class":127},[28,100310,100311],{"class":30,"line":32985},[28,100312,99869],{"class":127},[28,100314,100315],{"class":30,"line":32991},[28,100316,99874],{"class":127},[28,100318,100319],{"class":30,"line":32997},[28,100320,99879],{"class":127},[28,100322,100323],{"class":30,"line":33003},[28,100324,99827],{"class":127},[328,100326,100327],{},"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":23,"searchDepth":48,"depth":48,"links":100329},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99595,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100336,"title":100337,"body":100338,"description":333,"extension":334,"meta":100832,"navigation":336,"path":100833,"seo":100834,"stem":100835,"__hash__":100836},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100339,"toc":100823},[100340,100343,100346,100371,100375,100434,100486,100490,100492,100528,100582,100584,100622,100693,100697,100702,100706,100709,100742,100745,100749,100752,100755,100758,100761,100766,100770,100773,100776,100779,100782,100787,100791,100796,100799,100820],[10,100341,100337],{"id":100342},"_9数学函数",[14,100344,100345],{},"补充回顾：python的列表推导式",[18,100347,100349],{"className":20,"code":100348,"language":22,"meta":23,"style":23},"[1\u002Fi for i in a]\n",[25,100350,100351],{"__ignoreMap":23},[28,100352,100353,100355,100357,100359,100362,100364,100366,100368],{"class":30,"line":31},[28,100354,1287],{"class":38},[28,100356,61],{"class":60},[28,100358,982],{"class":34},[28,100360,100361],{"class":38},"i ",[28,100363,3287],{"class":34},[28,100365,9700],{"class":38},[28,100367,26306],{"class":34},[28,100369,100370],{"class":38}," a]\n",[351,100372,100374],{"id":100373},"_91-求倒数","9.1 求倒数",[18,100376,100378],{"className":20,"code":100377,"language":22,"meta":23,"style":23},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[25,100379,100380,100385,100413,100425],{"__ignoreMap":23},[28,100381,100382],{"class":30,"line":31},[28,100383,100384],{"class":87},"#数组求倒数\n",[28,100386,100387,100389,100391,100393,100395,100397,100399,100401,100403,100405,100407,100409,100411],{"class":30,"line":48},[28,100388,51],{"class":38},[28,100390,54],{"class":34},[28,100392,1287],{"class":38},[28,100394,61],{"class":60},[28,100396,64],{"class":38},[28,100398,211],{"class":60},[28,100400,64],{"class":38},[28,100402,78],{"class":60},[28,100404,64],{"class":38},[28,100406,73],{"class":60},[28,100408,64],{"class":38},[28,100410,721],{"class":60},[28,100412,33502],{"class":38},[28,100414,100415,100417,100419,100422],{"class":30,"line":84},[28,100416,666],{"class":38},[28,100418,54],{"class":34},[28,100420,100421],{"class":38},"np.array(a)",[28,100423,100424],{"class":87},"#将列表转换为数组\n",[28,100426,100427,100429,100431],{"class":30,"line":91},[28,100428,61],{"class":60},[28,100430,982],{"class":34},[28,100432,100433],{"class":38},"b\n",[18,100435,100437],{"className":20,"code":100436,"language":22,"meta":23,"style":23},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[25,100438,100439,100467,100476,100481],{"__ignoreMap":23},[28,100440,100441,100443,100445,100447,100449,100451,100453,100455,100457,100459,100461,100463,100465],{"class":30,"line":31},[28,100442,51],{"class":38},[28,100444,54],{"class":34},[28,100446,1287],{"class":38},[28,100448,61],{"class":60},[28,100450,64],{"class":38},[28,100452,211],{"class":60},[28,100454,64],{"class":38},[28,100456,78],{"class":60},[28,100458,64],{"class":38},[28,100460,73],{"class":60},[28,100462,64],{"class":38},[28,100464,721],{"class":60},[28,100466,33502],{"class":38},[28,100468,100469,100471,100473],{"class":30,"line":48},[28,100470,666],{"class":38},[28,100472,54],{"class":34},[28,100474,100475],{"class":38},"np.array(a)\n",[28,100477,100478],{"class":30,"line":84},[28,100479,100480],{"class":87},"#调用numpy中的函数reciprocal()\n",[28,100482,100483],{"class":30,"line":91},[28,100484,100485],{"class":38},"np.reciprocal(b)\n",[351,100487,100489],{"id":100488},"_92-求平方","9.2 求平方",[14,100491,94782],{},[18,100493,100495],{"className":20,"code":100494,"language":22,"meta":23,"style":23},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[25,100496,100497,100502,100507,100523],{"__ignoreMap":23},[28,100498,100499],{"class":30,"line":31},[28,100500,100501],{"class":87},"#square()，求平方\n",[28,100503,100504],{"class":30,"line":48},[28,100505,100506],{"class":87},"#一维数组\n",[28,100508,100509,100511,100513,100515,100517,100519,100521],{"class":30,"line":84},[28,100510,51],{"class":38},[28,100512,54],{"class":34},[28,100514,190],{"class":38},[28,100516,61],{"class":60},[28,100518,64],{"class":38},[28,100520,845],{"class":60},[28,100522,81],{"class":38},[28,100524,100525],{"class":30,"line":91},[28,100526,100527],{"class":38},"np.square(a)\n",[18,100529,100531],{"className":20,"code":100530,"language":22,"meta":23,"style":23},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[25,100532,100533,100538,100543,100564],{"__ignoreMap":23},[28,100534,100535],{"class":30,"line":31},[28,100536,100537],{"class":87},"#或者通过循环遍历的形式来计算\n",[28,100539,100540],{"class":30,"line":48},[28,100541,100542],{"class":87},"#这是一个列表\n",[28,100544,100545,100548,100550,100552,100554,100556,100558,100561],{"class":30,"line":84},[28,100546,100547],{"class":38},"[i",[28,100549,854],{"class":34},[28,100551,100361],{"class":38},[28,100553,3287],{"class":34},[28,100555,9700],{"class":38},[28,100557,26306],{"class":34},[28,100559,100560],{"class":38}," a]",[28,100562,100563],{"class":87},"#这个求完之后在数列当中\n",[28,100565,100566,100569,100571,100573,100575,100577,100579],{"class":30,"line":91},[28,100567,100568],{"class":38},"np.array([i",[28,100570,854],{"class":34},[28,100572,100361],{"class":38},[28,100574,3287],{"class":34},[28,100576,9700],{"class":38},[28,100578,26306],{"class":34},[28,100580,100581],{"class":38}," a])\n",[14,100583,93545],{},[18,100585,100587],{"className":20,"code":100586,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[25,100588,100589,100593,100617],{"__ignoreMap":23},[28,100590,100591],{"class":30,"line":31},[28,100592,93555],{"class":87},[28,100594,100595,100597,100599,100601,100603,100605,100607,100609,100611,100613,100615],{"class":30,"line":48},[28,100596,93560],{"class":38},[28,100598,54],{"class":34},[28,100600,190],{"class":38},[28,100602,61],{"class":60},[28,100604,64],{"class":38},[28,100606,67],{"class":60},[28,100608,70],{"class":38},[28,100610,73],{"class":60},[28,100612,64],{"class":38},[28,100614,78],{"class":60},[28,100616,81],{"class":38},[28,100618,100619],{"class":30,"line":84},[28,100620,100621],{"class":38},"np.square(aa)\n",[18,100623,100625],{"className":20,"code":100624,"language":22,"meta":23,"style":23},"#传统的方式\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",[25,100626,100627,100632,100641,100657,100673,100688],{"__ignoreMap":23},[28,100628,100629],{"class":30,"line":31},[28,100630,100631],{"class":87},"#传统的方式\n",[28,100633,100634,100636,100638],{"class":30,"line":48},[28,100635,98439],{"class":38},[28,100637,54],{"class":34},[28,100639,100640],{"class":38},"np.empty_like(aa)\n",[28,100642,100643,100645,100647,100649,100651,100653,100655],{"class":30,"line":84},[28,100644,3287],{"class":34},[28,100646,9700],{"class":38},[28,100648,26306],{"class":34},[28,100650,32699],{"class":60},[28,100652,413],{"class":38},[28,100654,73],{"class":60},[28,100656,31046],{"class":38},[28,100658,100659,100661,100663,100665,100667,100669,100671],{"class":30,"line":91},[28,100660,3463],{"class":34},[28,100662,9762],{"class":38},[28,100664,26306],{"class":34},[28,100666,32699],{"class":60},[28,100668,413],{"class":38},[28,100670,78],{"class":60},[28,100672,31046],{"class":38},[28,100674,100675,100678,100680,100683,100685],{"class":30,"line":97},[28,100676,100677],{"class":38},"        bb[i,j]",[28,100679,54],{"class":34},[28,100681,100682],{"class":38},"aa[i,j]",[28,100684,854],{"class":34},[28,100686,100687],{"class":38},"aa[i,j]\n",[28,100689,100690],{"class":30,"line":103},[28,100691,100692],{"class":38},"bb\n",[351,100694,100696],{"id":100695},"_93-求各元素的符号","9.3 求各元素的符号",[14,100698,100699],{},[1727,100700],{"alt":23,"src":100701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[351,100703,100705],{"id":100704},"_94-modf函数","9.4 modf函数",[14,100707,100708],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[18,100710,100712],{"className":20,"code":100711,"language":22,"meta":23,"style":23},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[25,100713,100714,100737],{"__ignoreMap":23},[28,100715,100716,100718,100720,100722,100724,100726,100728,100730,100732,100735],{"class":30,"line":31},[28,100717,51],{"class":38},[28,100719,54],{"class":34},[28,100721,190],{"class":38},[28,100723,930],{"class":34},[28,100725,845],{"class":60},[28,100727,64],{"class":38},[28,100729,845],{"class":60},[28,100731,64],{"class":38},[28,100733,100734],{"class":60},"0.3",[28,100736,81],{"class":38},[28,100738,100739],{"class":30,"line":48},[28,100740,100741],{"class":38},"np.modf(a)\n",[14,100743,100744],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[351,100746,100748],{"id":100747},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100750,100751],{},"np.cell()",[14,100753,100754],{},"np.floor()",[14,100756,100757],{},"np.rint()",[14,100759,100760],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100762,100763],{},[1727,100764],{"alt":23,"src":100765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[351,100767,100769],{"id":100768},"_96-around函数","9.6 around()函数",[14,100771,100772],{},"around()函数也可以实现对数的小数位数进行操作",[14,100774,100775],{},"其中的参数：",[14,100777,100778],{},"1.要传的数组",[14,100780,100781],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100783,100784],{},[1727,100785],{"alt":23,"src":100786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[351,100788,100790],{"id":100789},"_97-三角函数","9.7 三角函数",[14,100792,100793],{},[1727,100794],{"alt":23,"src":100795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100797,100798],{},"引入图像模块非常重要",[18,100800,100802],{"className":20,"code":100801,"language":22,"meta":23,"style":23},"from matplotlib import pyplot as plt\n",[25,100803,100804],{"__ignoreMap":23},[28,100805,100806,100808,100811,100813,100816,100818],{"class":30,"line":31},[28,100807,30997],{"class":34},[28,100809,100810],{"class":38}," matplotlib ",[28,100812,35],{"class":34},[28,100814,100815],{"class":38}," pyplot ",[28,100817,42],{"class":34},[28,100819,31694],{"class":38},[328,100821,100822],{},"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":23,"searchDepth":48,"depth":48,"links":100824},[100825,100826,100827,100828,100829,100830,100831],{"id":100373,"depth":48,"text":100374},{"id":100488,"depth":48,"text":100489},{"id":100695,"depth":48,"text":100696},{"id":100704,"depth":48,"text":100705},{"id":100747,"depth":48,"text":100748},{"id":100768,"depth":48,"text":100769},{"id":100789,"depth":48,"text":100790},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100337,"description":333},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100838,"title":100839,"body":100840,"description":333,"extension":334,"meta":100844,"navigation":336,"path":100845,"seo":100846,"stem":100847,"__hash__":100848},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100841,"toc":100842},[],{"title":23,"searchDepth":48,"depth":48,"links":100843},[],{"category":50676},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100839,"description":333},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100850,"title":100851,"body":100852,"description":23,"extension":334,"meta":102860,"navigation":336,"path":102861,"seo":102862,"stem":102863,"__hash__":102864},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100853,"toc":102836},[100854,100857,100861,100864,100867,100873,100876,100899,100902,100936,100939,100980,100984,100987,101080,101083,101127,101130,101147,101150,101164,101167,101170,101215,101218,101255,101259,101262,101268,101273,101293,101297,101300,101366,101369,101387,101391,101394,101423,101433,101439,101443,101446,101452,101463,101467,101470,101500,101503,101783,101786,101789,101800,101803,101806,101828,101835,101838,101856,101859,101862,101876,101884,101887,101913,101919,101922,101925,101935,101947,101967,101976,101996,102006,102030,102043,102057,102062,102103,102120,102145,102157,102177,102183,102228,102247,102264,102277,102293,102300,102312,102321,102356,102377,102402,102415,102439,102454,102479,102482,102503,102512,102515,102526,102530,102533,102539,102551,102558,102562,102565,102577,102580,102594,102597,102607,102617,102620,102660,102663,102667,102673,102676,102690,102694,102697,102730,102734,102737,102760,102768,102771,102777,102783,102786,102789,102817,102821,102824,102830,102833],[10,100855,100851],{"id":100856},"_1环境安装与第一个-mujoco-程序",[351,100858,100860],{"id":100859},"_1目标说明","1.目标说明",[14,100862,100863],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100865,100866],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[18,100868,100871],{"className":100869,"code":100870,"language":5449,"meta":23},[5447],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[25,100872,100870],{"__ignoreMap":23},[14,100874,100875],{},"需要掌握:",[363,100877,100878,100881,100884,100889,100894],{},[366,100879,100880],{},"Fedora 44 下 MuJoCo 的系统依赖",[366,100882,100883],{},"Python 虚拟环境创建",[366,100885,100886],{},[25,100887,100888],{},"mujoco.MjModel",[366,100890,100891],{},[25,100892,100893],{},"mujoco.MjData",[366,100895,100896],{},[25,100897,100898],{},"mujoco.mj_step(model, data)",[14,100900,100901],{},"MuJoCo 中最重要的两个对象:",[543,100903,100904,100914],{},[546,100905,100906],{},[549,100907,100908,100911],{},[552,100909,100910],{"align":23998},"对象",[552,100912,100913],{"align":23998},"含义",[590,100915,100916,100926],{},[549,100917,100918,100923],{},[595,100919,100920],{"align":23998},[25,100921,100922],{},"MjModel",[595,100924,100925],{"align":23998},"模型结构，来自 XML，基本不随时间变化",[549,100927,100928,100933],{},[595,100929,100930],{"align":23998},[25,100931,100932],{},"MjData",[595,100934,100935],{"align":23998},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100937,100938],{},"可以先用一个类比理解：",[543,100940,100941,100951],{},[546,100942,100943],{},[549,100944,100945,100948],{},[552,100946,100947],{"align":23998},"类比",[552,100949,100950],{"align":23998},"MuJoCo 对象",[590,100952,100953,100962,100971],{},[549,100954,100955,100958],{},[595,100956,100957],{"align":23998},"游戏地图和角色配置",[595,100959,100960],{"align":23998},[25,100961,100922],{},[549,100963,100964,100967],{},[595,100965,100966],{"align":23998},"游戏运行到当前帧的状态",[595,100968,100969],{"align":23998},[25,100970,100932],{},[549,100972,100973,100976],{},[595,100974,100975],{"align":23998},"前进一帧",[595,100977,100978],{"align":23998},[25,100979,100898],{},[351,100981,100983],{"id":100982},"_2环境与依赖安装","2.环境与依赖安装",[14,100985,100986],{},"Fedora 44 系统依赖:",[18,100988,100990],{"className":24084,"code":100989,"language":24086,"meta":23,"style":23},"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",[25,100991,100992,101004,101017,101030,101040,101050,101069],{"__ignoreMap":23},[28,100993,100994,100996,100998,101000,101002],{"class":30,"line":31},[28,100995,24839],{"class":2225},[28,100997,26578],{"class":127},[28,100999,24096],{"class":127},[28,101001,26663],{"class":60},[28,101003,24941],{"class":60},[28,101005,101006,101009,101012,101015],{"class":30,"line":48},[28,101007,101008],{"class":127},"  python3",[28,101010,101011],{"class":127}," python3-pip",[28,101013,101014],{"class":127}," python3-virtualenv",[28,101016,24941],{"class":60},[28,101018,101019,101022,101025,101028],{"class":30,"line":84},[28,101020,101021],{"class":127},"  mesa-libGL",[28,101023,101024],{"class":127}," mesa-libGLU",[28,101026,101027],{"class":127}," mesa-dri-drivers",[28,101029,24941],{"class":60},[28,101031,101032,101035,101038],{"class":30,"line":91},[28,101033,101034],{"class":127},"  libglvnd-glx",[28,101036,101037],{"class":127}," libglvnd-opengl",[28,101039,24941],{"class":60},[28,101041,101042,101045,101048],{"class":30,"line":97},[28,101043,101044],{"class":127},"  glfw",[28,101046,101047],{"class":127}," glfw-devel",[28,101049,24941],{"class":60},[28,101051,101052,101055,101058,101061,101064,101067],{"class":30,"line":103},[28,101053,101054],{"class":127},"  libX11",[28,101056,101057],{"class":127}," libXcursor",[28,101059,101060],{"class":127}," libXi",[28,101062,101063],{"class":127}," libXinerama",[28,101065,101066],{"class":127}," libXrandr",[28,101068,24941],{"class":60},[28,101070,101071,101074,101077],{"class":30,"line":109},[28,101072,101073],{"class":127},"  gcc",[28,101075,101076],{"class":127}," gcc-c++",[28,101078,101079],{"class":127}," make\n",[14,101081,101082],{},"创建 Python 环境:",[18,101084,101086],{"className":24084,"code":101085,"language":24086,"meta":23,"style":23},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[25,101087,101088,101102,101110],{"__ignoreMap":23},[28,101089,101090,101093,101096,101099],{"class":30,"line":31},[28,101091,101092],{"class":2225},"python3",[28,101094,101095],{"class":60}," -m",[28,101097,101098],{"class":127}," venv",[28,101100,101101],{"class":127}," .venv\n",[28,101103,101104,101107],{"class":30,"line":48},[28,101105,101106],{"class":60},"source",[28,101108,101109],{"class":127}," .venv\u002Fbin\u002Factivate\n",[28,101111,101112,101114,101116,101119,101121,101124],{"class":30,"line":84},[28,101113,22],{"class":2225},[28,101115,101095],{"class":60},[28,101117,101118],{"class":127}," pip",[28,101120,24096],{"class":127},[28,101122,101123],{"class":60}," --upgrade",[28,101125,101126],{"class":127}," pip\n",[14,101128,101129],{},"pip 安装:",[18,101131,101133],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy\n",[25,101134,101135],{"__ignoreMap":23},[28,101136,101137,101139,101141,101144],{"class":30,"line":31},[28,101138,24093],{"class":2225},[28,101140,24096],{"class":127},[28,101142,101143],{"class":127}," \"mujoco>=2.3\"",[28,101145,101146],{"class":127}," numpy\n",[14,101148,101149],{},"安装完成后，先做最小检查：",[18,101151,101153],{"className":24084,"code":101152,"language":24086,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[25,101154,101155],{"__ignoreMap":23},[28,101156,101157,101159,101161],{"class":30,"line":31},[28,101158,22],{"class":2225},[28,101160,30621],{"class":60},[28,101162,101163],{"class":127}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101165,101166],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101168,101169],{},"conda 安装:",[18,101171,101173],{"className":24084,"code":101172,"language":24086,"meta":23,"style":23},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[25,101174,101175,101195,101205],{"__ignoreMap":23},[28,101176,101177,101179,101181,101183,101186,101189,101192],{"class":30,"line":31},[28,101178,30593],{"class":2225},[28,101180,29439],{"class":127},[28,101182,25378],{"class":60},[28,101184,101185],{"class":127}," mujoco-study",[28,101187,101188],{"class":127}," python=",[28,101190,101191],{"class":60},"3.10",[28,101193,101194],{"class":60}," -y\n",[28,101196,101197,101199,101202],{"class":30,"line":48},[28,101198,30593],{"class":2225},[28,101200,101201],{"class":127}," activate",[28,101203,101204],{"class":127}," mujoco-study\n",[28,101206,101207,101209,101211,101213],{"class":30,"line":84},[28,101208,24093],{"class":2225},[28,101210,24096],{"class":127},[28,101212,101143],{"class":127},[28,101214,101146],{"class":127},[14,101216,101217],{},"版本冲突说明:",[363,101219,101220,101226,101236,101245],{},[366,101221,101222,101223,28648],{},"不要安装 ",[25,101224,101225],{},"mujoco-py",[366,101227,101228,101229,101231,101232,101235],{},"如果旧项目里同时安装了 ",[25,101230,101225],{}," 和 ",[25,101233,101234],{},"mujoco","，建议新建干净虚拟环境。",[366,101237,101238,101241,101242,28648],{},[25,101239,101240],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[25,101243,101244],{},"~\u002F.mujoco\u002Fmujoco210",[366,101246,101247,101248,82795,101251,101254],{},"离屏渲染可能涉及 OpenGL 后端，",[25,101249,101250],{},"MUJOCO_GL=egl",[25,101252,101253],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[351,101256,101258],{"id":101257},"_3核心概念解释","3.核心概念解释",[14,101260,101261],{},"MuJoCo 的基本执行流程:",[18,101263,101266],{"className":101264,"code":101265,"language":5449,"meta":23},[5447],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[25,101267,101265],{"__ignoreMap":23},[14,101269,101270,101272],{},[25,101271,100922],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101274,101275,101277,101278,617,101281,617,101284,617,101287,617,101290,28648],{},[25,101276,100932],{}," 存放仿真运行时状态，例如 ",[25,101279,101280],{},"data.time",[25,101282,101283],{},"data.qpos",[25,101285,101286],{},"data.qvel",[25,101288,101289],{},"data.ctrl",[25,101291,101292],{},"data.xpos",[380,101294,101296],{"id":101295},"xml-是什么","XML 是什么",[14,101298,101299],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[18,101301,101303],{"className":53323,"code":101302,"language":53325,"meta":23,"style":23},"\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",[25,101304,101305,101327,101358],{"__ignoreMap":23},[28,101306,101307,101309,101311,101313,101315,101317,101320,101322,101325],{"class":30,"line":31},[28,101308,1307],{"class":38},[28,101310,52056],{"class":51556},[28,101312,15182],{"class":2225},[28,101314,54],{"class":38},[28,101316,53747],{"class":127},[28,101318,101319],{"class":2225}," pos",[28,101321,54],{"class":38},[28,101323,101324],{"class":127},"\"0 0 1\"",[28,101326,51563],{"class":38},[28,101328,101329,101331,101334,101336,101338,101341,101343,101345,101347,101350,101352,101355],{"class":30,"line":48},[28,101330,52400],{"class":38},[28,101332,101333],{"class":51556},"geom",[28,101335,15182],{"class":2225},[28,101337,54],{"class":38},[28,101339,101340],{"class":127},"\"box_geom\"",[28,101342,54080],{"class":2225},[28,101344,54],{"class":38},[28,101346,53747],{"class":127},[28,101348,101349],{"class":2225}," size",[28,101351,54],{"class":38},[28,101353,101354],{"class":127},"\"0.1 0.1 0.1\"",[28,101356,101357],{"class":38},"\u002F>\n",[28,101359,101360,101362,101364],{"class":30,"line":84},[28,101361,52041],{"class":38},[28,101363,52056],{"class":51556},[28,101365,51563],{"class":38},[14,101367,101368],{},"这段意思是：",[363,101370,101371,101377,101384],{},[366,101372,101373,101374,101376],{},"创建一个叫 ",[25,101375,53970],{}," 的刚体。",[366,101378,101379,101380,101383],{},"它初始放在 ",[25,101381,101382],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[366,101385,101386],{},"它里面有一个盒子形状的几何体。",[380,101388,101390],{"id":101389},"timestep-是什么","timestep 是什么",[14,101392,101393],{},"XML 里的：",[18,101395,101397],{"className":53323,"code":101396,"language":53325,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101398,101399],{"__ignoreMap":23},[28,101400,101401,101403,101405,101408,101410,101413,101416,101418,101421],{"class":30,"line":31},[28,101402,1307],{"class":38},[28,101404,69422],{"class":51556},[28,101406,101407],{"class":2225}," timestep",[28,101409,54],{"class":38},[28,101411,101412],{"class":127},"\"0.01\"",[28,101414,101415],{"class":2225}," gravity",[28,101417,54],{"class":38},[28,101419,101420],{"class":127},"\"0 0 -9.81\"",[28,101422,101357],{"class":38},[14,101424,101425,101426,101429,101430,101432],{},"表示每调用一次 ",[25,101427,101428],{},"mj_step","，仿真时间前进 ",[25,101431,39242],{}," 秒。循环 100 次，大约就是 1 秒：",[18,101434,101437],{"className":101435,"code":101436,"language":5449,"meta":23},[5447],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[25,101438,101436],{"__ignoreMap":23},[380,101440,101442],{"id":101441},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101444,101445],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[18,101447,101450],{"className":101448,"code":101449,"language":5449,"meta":23},[5447],"x y z qw qx qy qz\n",[25,101451,101449],{"__ignoreMap":23},[14,101453,101454,101455,101458,101459,101462],{},"表示一个自由刚体的位置和姿态。其中 ",[25,101456,101457],{},"x y z"," 是位置，",[25,101460,101461],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[351,101464,101466],{"id":101465},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101468,101469],{},"新建文件:",[18,101471,101473],{"className":24084,"code":101472,"language":24086,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[25,101474,101475,101485,101492],{"__ignoreMap":23},[28,101476,101477,101480,101482],{"class":30,"line":31},[28,101478,101479],{"class":2225},"mkdir",[28,101481,29479],{"class":60},[28,101483,101484],{"class":127}," mujoco_tutorial\n",[28,101486,101487,101490],{"class":30,"line":48},[28,101488,101489],{"class":60},"cd",[28,101491,101484],{"class":127},[28,101493,101494,101497],{"class":30,"line":84},[28,101495,101496],{"class":2225},"touch",[28,101498,101499],{"class":127}," ch1_first_sim.py\n",[14,101501,101502],{},"写入:",[18,101504,101506],{"className":20,"code":101505,"language":22,"meta":23,"style":23},"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",[25,101507,101508,101515,101519,101523,101533,101538,101543,101547,101552,101557,101561,101566,101571,101576,101581,101586,101591,101595,101599,101603,101616,101630,101640,101644,101656,101668,101680,101692,101704,101708,101725,101730,101734,101745,101756,101760,101764,101778],{"__ignoreMap":23},[28,101509,101510,101512],{"class":30,"line":31},[28,101511,35],{"class":34},[28,101513,101514],{"class":38}," mujoco\n",[28,101516,101517],{"class":30,"line":48},[28,101518,2662],{"emptyLinePlaceholder":336},[28,101520,101521],{"class":30,"line":84},[28,101522,2662],{"emptyLinePlaceholder":336},[28,101524,101525,101528,101530],{"class":30,"line":91},[28,101526,101527],{"class":60},"XML",[28,101529,13826],{"class":34},[28,101531,101532],{"class":127}," \"\"\"\n",[28,101534,101535],{"class":30,"line":97},[28,101536,101537],{"class":127},"\u003Cmujoco model=\"first_sim\">\n",[28,101539,101540],{"class":30,"line":103},[28,101541,101542],{"class":127},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[28,101544,101545],{"class":30,"line":109},[28,101546,2662],{"emptyLinePlaceholder":336},[28,101548,101549],{"class":30,"line":118},[28,101550,101551],{"class":127},"  \u003Cworldbody>\n",[28,101553,101554],{"class":30,"line":124},[28,101555,101556],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,101558,101559],{"class":30,"line":131},[28,101560,2662],{"emptyLinePlaceholder":336},[28,101562,101563],{"class":30,"line":137},[28,101564,101565],{"class":127},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[28,101567,101568],{"class":30,"line":143},[28,101569,101570],{"class":127},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[28,101572,101573],{"class":30,"line":149},[28,101574,101575],{"class":127},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,101577,101578],{"class":30,"line":1890},[28,101579,101580],{"class":127},"    \u003C\u002Fbody>\n",[28,101582,101583],{"class":30,"line":1904},[28,101584,101585],{"class":127},"  \u003C\u002Fworldbody>\n",[28,101587,101588],{"class":30,"line":1909},[28,101589,101590],{"class":127},"\u003C\u002Fmujoco>\n",[28,101592,101593],{"class":30,"line":1915},[28,101594,95950],{"class":127},[28,101596,101597],{"class":30,"line":1936},[28,101598,2662],{"emptyLinePlaceholder":336},[28,101600,101601],{"class":30,"line":1941},[28,101602,2662],{"emptyLinePlaceholder":336},[28,101604,101605,101607,101609,101612,101614],{"class":30,"line":1955},[28,101606,32203],{"class":34},[28,101608,2235],{"class":2225},[28,101610,101611],{"class":38},"() -> ",[28,101613,95938],{"class":60},[28,101615,4001],{"class":38},[28,101617,101618,101621,101623,101626,101628],{"class":30,"line":1960},[28,101619,101620],{"class":38},"    model ",[28,101622,54],{"class":34},[28,101624,101625],{"class":38}," mujoco.MjModel.from_xml_string(",[28,101627,101527],{"class":60},[28,101629,81],{"class":38},[28,101631,101632,101635,101637],{"class":30,"line":1989},[28,101633,101634],{"class":38},"    data ",[28,101636,54],{"class":34},[28,101638,101639],{"class":38}," mujoco.MjData(model)\n",[28,101641,101642],{"class":30,"line":1994},[28,101643,2662],{"emptyLinePlaceholder":336},[28,101645,101646,101648,101650,101653],{"class":30,"line":2011},[28,101647,31559],{"class":60},[28,101649,413],{"class":38},[28,101651,101652],{"class":127},"\"nq:\"",[28,101654,101655],{"class":38},", model.nq)\n",[28,101657,101658,101660,101662,101665],{"class":30,"line":2016},[28,101659,31559],{"class":60},[28,101661,413],{"class":38},[28,101663,101664],{"class":127},"\"nv:\"",[28,101666,101667],{"class":38},", model.nv)\n",[28,101669,101670,101672,101674,101677],{"class":30,"line":2021},[28,101671,31559],{"class":60},[28,101673,413],{"class":38},[28,101675,101676],{"class":127},"\"nu:\"",[28,101678,101679],{"class":38},", model.nu)\n",[28,101681,101682,101684,101686,101689],{"class":30,"line":2026},[28,101683,31559],{"class":60},[28,101685,413],{"class":38},[28,101687,101688],{"class":127},"\"initial time:\"",[28,101690,101691],{"class":38},", data.time)\n",[28,101693,101694,101696,101698,101701],{"class":30,"line":2040},[28,101695,31559],{"class":60},[28,101697,413],{"class":38},[28,101699,101700],{"class":127},"\"initial qpos:\"",[28,101702,101703],{"class":38},", data.qpos.copy())\n",[28,101705,101706],{"class":30,"line":2045},[28,101707,2662],{"emptyLinePlaceholder":336},[28,101709,101710,101712,101715,101717,101719,101721,101723],{"class":30,"line":2839},[28,101711,3463],{"class":34},[28,101713,101714],{"class":38}," _ ",[28,101716,26306],{"class":34},[28,101718,32699],{"class":60},[28,101720,413],{"class":38},[28,101722,713],{"class":60},[28,101724,31046],{"class":38},[28,101726,101727],{"class":30,"line":2853},[28,101728,101729],{"class":38},"        mujoco.mj_step(model, data)\n",[28,101731,101732],{"class":30,"line":2861},[28,101733,2662],{"emptyLinePlaceholder":336},[28,101735,101736,101738,101740,101743],{"class":30,"line":2866},[28,101737,31559],{"class":60},[28,101739,413],{"class":38},[28,101741,101742],{"class":127},"\"final time:\"",[28,101744,101691],{"class":38},[28,101746,101747,101749,101751,101754],{"class":30,"line":2872},[28,101748,31559],{"class":60},[28,101750,413],{"class":38},[28,101752,101753],{"class":127},"\"final qpos:\"",[28,101755,101703],{"class":38},[28,101757,101758],{"class":30,"line":2878},[28,101759,2662],{"emptyLinePlaceholder":336},[28,101761,101762],{"class":30,"line":2883},[28,101763,2662],{"emptyLinePlaceholder":336},[28,101765,101766,101768,101770,101773,101776],{"class":30,"line":8210},[28,101767,1796],{"class":34},[28,101769,31480],{"class":60},[28,101771,101772],{"class":34}," ==",[28,101774,101775],{"class":127}," \"__main__\"",[28,101777,4001],{"class":38},[28,101779,101780],{"class":30,"line":8234},[28,101781,101782],{"class":38},"    main()\n",[380,101784,101785],{"id":101785},"代码逐段解释",[14,101787,101788],{},"导入库：",[18,101790,101792],{"className":20,"code":101791,"language":22,"meta":23,"style":23},"import mujoco\n",[25,101793,101794],{"__ignoreMap":23},[28,101795,101796,101798],{"class":30,"line":31},[28,101797,35],{"class":34},[28,101799,101514],{"class":38},[14,101801,101802],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101804,101805],{},"定义 XML：",[18,101807,101809],{"className":20,"code":101808,"language":22,"meta":23,"style":23},"XML = \"\"\"\n...\n\"\"\"\n",[25,101810,101811,101819,101824],{"__ignoreMap":23},[28,101812,101813,101815,101817],{"class":30,"line":31},[28,101814,101527],{"class":60},[28,101816,13826],{"class":34},[28,101818,101532],{"class":127},[28,101820,101821],{"class":30,"line":48},[28,101822,101823],{"class":127},"...\n",[28,101825,101826],{"class":30,"line":84},[28,101827,95950],{"class":127},[14,101829,101830,101831,101834],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[25,101832,101833],{},"freejoint"," 的方块。",[14,101836,101837],{},"编译模型：",[18,101839,101841],{"className":20,"code":101840,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\n",[25,101842,101843],{"__ignoreMap":23},[28,101844,101845,101848,101850,101852,101854],{"class":30,"line":31},[28,101846,101847],{"class":38},"model ",[28,101849,54],{"class":34},[28,101851,101625],{"class":38},[28,101853,101527],{"class":60},[28,101855,81],{"class":38},[14,101857,101858],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101860,101861],{},"创建数据：",[18,101863,101865],{"className":20,"code":101864,"language":22,"meta":23,"style":23},"data = mujoco.MjData(model)\n",[25,101866,101867],{"__ignoreMap":23},[28,101868,101869,101872,101874],{"class":30,"line":31},[28,101870,101871],{"class":38},"data ",[28,101873,54],{"class":34},[28,101875,101639],{"class":38},[14,101877,101878,101880,101881,101883],{},[25,101879,33657],{}," 会保存仿真当前状态。刚创建时，时间是 ",[25,101882,244],{},"，方块还在初始位置。",[14,101885,101886],{},"推进仿真：",[18,101888,101890],{"className":20,"code":101889,"language":22,"meta":23,"style":23},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[25,101891,101892,101908],{"__ignoreMap":23},[28,101893,101894,101896,101898,101900,101902,101904,101906],{"class":30,"line":31},[28,101895,3287],{"class":34},[28,101897,101714],{"class":38},[28,101899,26306],{"class":34},[28,101901,32699],{"class":60},[28,101903,413],{"class":38},[28,101905,713],{"class":60},[28,101907,31046],{"class":38},[28,101909,101910],{"class":30,"line":48},[28,101911,101912],{"class":38},"    mujoco.mj_step(model, data)\n",[14,101914,101915,101916,101918],{},"每次 ",[25,101917,101428],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[380,101920,101921],{"id":101921},"代码逐行细讲",[14,101923,101924],{},"下面把完整代码按新手视角拆开讲。",[18,101926,101927],{"className":20,"code":101791,"language":22,"meta":23,"style":23},[25,101928,101929],{"__ignoreMap":23},[28,101930,101931,101933],{"class":30,"line":31},[28,101932,35],{"class":34},[28,101934,101514],{"class":38},[14,101936,101937,101939,101940,617,101942,617,101944,28648],{},[25,101938,35],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[25,101941,100888],{},[25,101943,100893],{},[25,101945,101946],{},"mujoco.mj_step",[18,101948,101949],{"className":20,"code":101808,"language":22,"meta":23,"style":23},[25,101950,101951,101959,101963],{"__ignoreMap":23},[28,101952,101953,101955,101957],{"class":30,"line":31},[28,101954,101527],{"class":60},[28,101956,13826],{"class":34},[28,101958,101532],{"class":127},[28,101960,101961],{"class":30,"line":48},[28,101962,101823],{"class":127},[28,101964,101965],{"class":30,"line":84},[28,101966,95950],{"class":127},[14,101968,101969,101971,101972,101975],{},[25,101970,101527],{}," 是一个变量名。右边的三引号 ",[25,101973,101974],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[18,101977,101978],{"className":53323,"code":101537,"language":53325,"meta":23,"style":23},[25,101979,101980],{"__ignoreMap":23},[28,101981,101982,101984,101986,101989,101991,101994],{"class":30,"line":31},[28,101983,1307],{"class":38},[28,101985,101234],{"class":51556},[28,101987,101988],{"class":2225}," model",[28,101990,54],{"class":38},[28,101992,101993],{"class":127},"\"first_sim\"",[28,101995,51563],{"class":38},[14,101997,101998,101999,102002,102003,28648],{},"这是 XML 的根标签。",[25,102000,102001],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[25,102004,102005],{},"first_sim",[18,102007,102008],{"className":53323,"code":101396,"language":53325,"meta":23,"style":23},[25,102009,102010],{"__ignoreMap":23},[28,102011,102012,102014,102016,102018,102020,102022,102024,102026,102028],{"class":30,"line":31},[28,102013,1307],{"class":38},[28,102015,69422],{"class":51556},[28,102017,101407],{"class":2225},[28,102019,54],{"class":38},[28,102021,101412],{"class":127},[28,102023,101415],{"class":2225},[28,102025,54],{"class":38},[28,102027,101420],{"class":127},[28,102029,101357],{"class":38},[14,102031,102032,102034,102035,102038,102039,102042],{},[25,102033,69422],{}," 用来设置仿真参数。",[25,102036,102037],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[25,102040,102041],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[18,102044,102046],{"className":53323,"code":102045,"language":53325,"meta":23,"style":23},"\u003Cworldbody>\n",[25,102047,102048],{"__ignoreMap":23},[28,102049,102050,102052,102055],{"class":30,"line":31},[28,102051,1307],{"class":38},[28,102053,102054],{"class":51556},"worldbody",[28,102056,51563],{"class":38},[14,102058,102059,102061],{},[25,102060,102054],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[18,102063,102065],{"className":53323,"code":102064,"language":53325,"meta":23,"style":23},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,102066,102067],{"__ignoreMap":23},[28,102068,102069,102071,102073,102075,102077,102080,102082,102084,102087,102089,102091,102094,102096,102098,102101],{"class":30,"line":31},[28,102070,1307],{"class":38},[28,102072,101333],{"class":51556},[28,102074,15182],{"class":2225},[28,102076,54],{"class":38},[28,102078,102079],{"class":127},"\"floor\"",[28,102081,54080],{"class":2225},[28,102083,54],{"class":38},[28,102085,102086],{"class":127},"\"plane\"",[28,102088,101349],{"class":2225},[28,102090,54],{"class":38},[28,102092,102093],{"class":127},"\"2 2 0.1\"",[28,102095,79023],{"class":2225},[28,102097,54],{"class":38},[28,102099,102100],{"class":127},"\"0.8 0.8 0.8 1\"",[28,102102,101357],{"class":38},[14,102104,102105,102106,102108,102109,102112,102113,102116,102117,102119],{},"这行创建地面。",[25,102107,101333],{}," 是几何体。",[25,102110,102111],{},"name=\"floor\""," 是名字。",[25,102114,102115],{},"type=\"plane\""," 表示平面。",[25,102118,55366],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[18,102121,102123],{"className":53323,"code":102122,"language":53325,"meta":23,"style":23},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,102124,102125],{"__ignoreMap":23},[28,102126,102127,102129,102131,102133,102135,102137,102139,102141,102143],{"class":30,"line":31},[28,102128,1307],{"class":38},[28,102130,52056],{"class":51556},[28,102132,15182],{"class":2225},[28,102134,54],{"class":38},[28,102136,53747],{"class":127},[28,102138,101319],{"class":2225},[28,102140,54],{"class":38},[28,102142,101324],{"class":127},[28,102144,51563],{"class":38},[14,102146,102147,102148,28648,102150,102153,102154,102156],{},"这行创建一个刚体，名字叫 ",[25,102149,53970],{},[25,102151,102152],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[25,102155,101382],{},"，也就是离地面 1 米高。",[18,102158,102160],{"className":53323,"code":102159,"language":53325,"meta":23,"style":23},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[25,102161,102162],{"__ignoreMap":23},[28,102163,102164,102166,102168,102170,102172,102175],{"class":30,"line":31},[28,102165,1307],{"class":38},[28,102167,101833],{"class":51556},[28,102169,15182],{"class":2225},[28,102171,54],{"class":38},[28,102173,102174],{"class":127},"\"box_free\"",[28,102176,101357],{"class":38},[14,102178,102179,102180,102182],{},"这行很重要。",[25,102181,101833],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[18,102184,102186],{"className":53323,"code":102185,"language":53325,"meta":23,"style":23},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,102187,102188],{"__ignoreMap":23},[28,102189,102190,102192,102194,102196,102198,102200,102202,102204,102206,102208,102210,102212,102215,102217,102219,102221,102223,102226],{"class":30,"line":31},[28,102191,1307],{"class":38},[28,102193,101333],{"class":51556},[28,102195,15182],{"class":2225},[28,102197,54],{"class":38},[28,102199,101340],{"class":127},[28,102201,54080],{"class":2225},[28,102203,54],{"class":38},[28,102205,53747],{"class":127},[28,102207,101349],{"class":2225},[28,102209,54],{"class":38},[28,102211,101354],{"class":127},[28,102213,102214],{"class":2225}," mass",[28,102216,54],{"class":38},[28,102218,3940],{"class":127},[28,102220,79023],{"class":2225},[28,102222,54],{"class":38},[28,102224,102225],{"class":127},"\"1 0 0 1\"",[28,102227,101357],{"class":38},[14,102229,102230,102231,102234,102235,102238,102239,102242,102243,102246],{},"这行给 box body 添加一个盒子形状。",[25,102232,102233],{},"type=\"box\""," 表示形状是盒子。",[25,102236,102237],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[25,102240,102241],{},"mass=\"1\""," 表示质量是 1。",[25,102244,102245],{},"rgba=\"1 0 0 1\""," 表示红色。",[18,102248,102250],{"className":20,"code":102249,"language":22,"meta":23,"style":23},"def main() -> None:\n",[25,102251,102252],{"__ignoreMap":23},[28,102253,102254,102256,102258,102260,102262],{"class":30,"line":31},[28,102255,32203],{"class":34},[28,102257,2235],{"class":2225},[28,102259,101611],{"class":38},[28,102261,95938],{"class":60},[28,102263,4001],{"class":38},[14,102265,102266,102268,102269,102272,102273,102276],{},[25,102267,32203],{}," 用来定义函数。这里定义了一个叫 ",[25,102270,102271],{},"main"," 的函数。",[25,102274,102275],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[18,102278,102279],{"className":20,"code":101840,"language":22,"meta":23,"style":23},[25,102280,102281],{"__ignoreMap":23},[28,102282,102283,102285,102287,102289,102291],{"class":30,"line":31},[28,102284,101847],{"class":38},[28,102286,54],{"class":34},[28,102288,101625],{"class":38},[28,102290,101527],{"class":60},[28,102292,81],{"class":38},[14,102294,102295,102296,102299],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[25,102297,102298],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[18,102301,102302],{"className":20,"code":101864,"language":22,"meta":23,"style":23},[25,102303,102304],{"__ignoreMap":23},[28,102305,102306,102308,102310],{"class":30,"line":31},[28,102307,101871],{"class":38},[28,102309,54],{"class":34},[28,102311,101639],{"class":38},[14,102313,102314,102315,102317,102318,102320],{},"这行创建仿真数据。",[25,102316,33657],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[25,102319,33657],{}," 都会变化。",[18,102322,102324],{"className":20,"code":102323,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[25,102325,102326,102336,102346],{"__ignoreMap":23},[28,102327,102328,102330,102332,102334],{"class":30,"line":31},[28,102329,30675],{"class":60},[28,102331,413],{"class":38},[28,102333,101652],{"class":127},[28,102335,101655],{"class":38},[28,102337,102338,102340,102342,102344],{"class":30,"line":48},[28,102339,30675],{"class":60},[28,102341,413],{"class":38},[28,102343,101664],{"class":127},[28,102345,101667],{"class":38},[28,102347,102348,102350,102352,102354],{"class":30,"line":84},[28,102349,30675],{"class":60},[28,102351,413],{"class":38},[28,102353,101676],{"class":127},[28,102355,101679],{"class":38},[14,102357,102358,102360,102361,102364,102365,102368,102369,102372,102373,102376],{},[25,102359,30675],{}," 用来输出信息。",[25,102362,102363],{},"model.nq"," 是位置变量数量，",[25,102366,102367],{},"model.nv"," 是速度变量数量，",[25,102370,102371],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[25,102374,102375],{},"nu"," 是 0。",[18,102378,102380],{"className":20,"code":102379,"language":22,"meta":23,"style":23},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[25,102381,102382,102392],{"__ignoreMap":23},[28,102383,102384,102386,102388,102390],{"class":30,"line":31},[28,102385,30675],{"class":60},[28,102387,413],{"class":38},[28,102389,101688],{"class":127},[28,102391,101691],{"class":38},[28,102393,102394,102396,102398,102400],{"class":30,"line":48},[28,102395,30675],{"class":60},[28,102397,413],{"class":38},[28,102399,101700],{"class":127},[28,102401,101703],{"class":38},[14,102403,102404,102405,102407,102408,102410,102411,102414],{},"这里打印初始时间和初始位置。",[25,102406,101280],{}," 一开始是 0。",[25,102409,101283],{}," 是位置数组。",[25,102412,102413],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[18,102416,102417],{"className":20,"code":101889,"language":22,"meta":23,"style":23},[25,102418,102419,102435],{"__ignoreMap":23},[28,102420,102421,102423,102425,102427,102429,102431,102433],{"class":30,"line":31},[28,102422,3287],{"class":34},[28,102424,101714],{"class":38},[28,102426,26306],{"class":34},[28,102428,32699],{"class":60},[28,102430,413],{"class":38},[28,102432,713],{"class":60},[28,102434,31046],{"class":38},[28,102436,102437],{"class":30,"line":48},[28,102438,101912],{"class":38},[14,102440,102441,102443,102444,102447,102448,102450,102451,102453],{},[25,102442,3287],{}," 是循环。",[25,102445,102446],{},"range(100)"," 表示循环 100 次。",[25,102449,1389],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[25,102452,101428],{},"，仿真就前进一步。",[18,102455,102457],{"className":20,"code":102456,"language":22,"meta":23,"style":23},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[25,102458,102459,102469],{"__ignoreMap":23},[28,102460,102461,102463,102465,102467],{"class":30,"line":31},[28,102462,30675],{"class":60},[28,102464,413],{"class":38},[28,102466,101742],{"class":127},[28,102468,101691],{"class":38},[28,102470,102471,102473,102475,102477],{"class":30,"line":48},[28,102472,30675],{"class":60},[28,102474,413],{"class":38},[28,102476,101753],{"class":127},[28,102478,101703],{"class":38},[14,102480,102481],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[18,102483,102485],{"className":20,"code":102484,"language":22,"meta":23,"style":23},"if __name__ == \"__main__\":\n    main()\n",[25,102486,102487,102499],{"__ignoreMap":23},[28,102488,102489,102491,102493,102495,102497],{"class":30,"line":31},[28,102490,1796],{"class":34},[28,102492,31480],{"class":60},[28,102494,101772],{"class":34},[28,102496,101775],{"class":127},[28,102498,4001],{"class":38},[28,102500,102501],{"class":30,"line":48},[28,102502,101782],{"class":38},[14,102504,102505,102506,102509,102510,28648],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[25,102507,102508],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[25,102511,102508],{},[14,102513,102514],{},"运行:",[18,102516,102518],{"className":24084,"code":102517,"language":24086,"meta":23,"style":23},"python ch1_first_sim.py\n",[25,102519,102520],{"__ignoreMap":23},[28,102521,102522,102524],{"class":30,"line":31},[28,102523,22],{"class":2225},[28,102525,101499],{"class":127},[351,102527,102529],{"id":102528},"_5运行结果说明","5.运行结果说明",[14,102531,102532],{},"你应该看到类似输出:",[18,102534,102537],{"className":102535,"code":102536,"language":5449,"meta":23},[5447],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[25,102538,102536],{"__ignoreMap":23},[14,102540,102541,102543,102544,102547,102548,28648],{},[25,102542,101833],{}," 有 7 个位置变量: ",[25,102545,102546],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[25,102549,102550],{},"vx vy vz wx wy wz",[14,102552,102553,102554,102557],{},"你还会看到 ",[25,102555,102556],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[351,102559,102561],{"id":102560},"_6验证步骤","6.验证步骤",[14,102563,102564],{},"确认版本:",[18,102566,102567],{"className":24084,"code":101152,"language":24086,"meta":23,"style":23},[25,102568,102569],{"__ignoreMap":23},[28,102570,102571,102573,102575],{"class":30,"line":31},[28,102572,22],{"class":2225},[28,102574,30621],{"class":60},[28,102576,101163],{"class":127},[14,102578,102579],{},"确认导入的是官方 bindings:",[18,102581,102583],{"className":24084,"code":102582,"language":24086,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco)\"\n",[25,102584,102585],{"__ignoreMap":23},[28,102586,102587,102589,102591],{"class":30,"line":31},[28,102588,22],{"class":2225},[28,102590,30621],{"class":60},[28,102592,102593],{"class":127}," \"import mujoco; print(mujoco)\"\n",[14,102595,102596],{},"运行程序:",[18,102598,102599],{"className":24084,"code":102517,"language":24086,"meta":23,"style":23},[25,102600,102601],{"__ignoreMap":23},[28,102602,102603,102605],{"class":30,"line":31},[28,102604,22],{"class":2225},[28,102606,101499],{"class":127},[14,102608,102609,102610,102613,102614,28648],{},"检查 ",[25,102611,102612],{},"final time"," 是否约等于 ",[25,102615,102616],{},"1.0",[14,102618,102619],{},"再做几个小实验：",[363,102621,102622,102632,102640,102653],{},[366,102623,102624,102625,102627,102628,102631],{},"把 ",[25,102626,102152],{}," 改成 ",[25,102629,102630],{},"pos=\"0 0 2\"","，观察初始高度变化。",[366,102633,102624,102634,102627,102636,102639],{},[25,102635,102041],{},[25,102637,102638],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[366,102641,102624,102642,102627,102644,102647,102648,102650,102651,28648],{},[25,102643,102037],{},[25,102645,102646],{},"timestep=\"0.005\"","，观察 100 步后的 ",[25,102649,102612],{}," 是否变成约 ",[25,102652,35585],{},[366,102654,102655,102656,102659],{},"删除 ",[25,102657,102658],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102661,102662],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[351,102664,102666],{"id":102665},"_7常见错误与解决方案","7.常见错误与解决方案",[380,102668,102670],{"id":102669},"modulenotfounderror-no-module-named-mujoco",[25,102671,102672],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102674,102675],{},"解决:",[18,102677,102679],{"className":24084,"code":102678,"language":24086,"meta":23,"style":23},"pip install \"mujoco>=2.3\"\n",[25,102680,102681],{"__ignoreMap":23},[28,102682,102683,102685,102687],{"class":30,"line":31},[28,102684,24093],{"class":2225},[28,102686,24096],{"class":127},[28,102688,102689],{"class":127}," \"mujoco>=2.3\"\n",[380,102691,102693],{"id":102692},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102695,102696],{},"先安装系统依赖:",[18,102698,102700],{"className":24084,"code":102699,"language":24086,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[25,102701,102702],{"__ignoreMap":23},[28,102703,102704,102706,102708,102710,102712,102715,102717,102720,102722,102725,102727],{"class":30,"line":31},[28,102705,24839],{"class":2225},[28,102707,26578],{"class":127},[28,102709,24096],{"class":127},[28,102711,26663],{"class":60},[28,102713,102714],{"class":127}," mesa-libGL",[28,102716,101027],{"class":127},[28,102718,102719],{"class":127}," glfw",[28,102721,101047],{"class":127},[28,102723,102724],{"class":127}," libX11",[28,102726,101060],{"class":127},[28,102728,102729],{"class":127}," libXrandr\n",[380,102731,102733],{"id":102732},"xml-解析失败","XML 解析失败",[14,102735,102736],{},"检查:",[363,102738,102739,102742,102745,102751],{},[366,102740,102741],{},"标签是否闭合",[366,102743,102744],{},"属性是否带引号",[366,102746,102747,102748],{},"根节点是否是 ",[25,102749,102750],{},"\u003Cmujoco>",[366,102752,102753,102755,102756,102759],{},[25,102754,52056],{}," 是否放在 ",[25,102757,102758],{},"\u003Cworldbody>"," 内部",[380,102761,102763,102765,102766],{"id":102762},"final-time-不是严格等于-10",[25,102764,102612],{}," 不是严格等于 ",[25,102767,102616],{},[14,102769,102770],{},"这通常不是错误。浮点数计算可能得到：",[18,102772,102775],{"className":102773,"code":102774,"language":5449,"meta":23},[5447],"1.0000000000000007\n",[25,102776,102774],{"__ignoreMap":23},[14,102778,102779,102780,102782],{},"只要接近 ",[25,102781,102616],{}," 就正常。",[380,102784,102785],{"id":102785},"方块没有掉下来",[14,102787,102788],{},"检查：",[363,102790,102791,102797,102803,102808],{},[366,102792,102793,102794],{},"方块 body 里是否有 ",[25,102795,102796],{},"\u003Cfreejoint\u002F>",[366,102798,102799,102800],{},"重力是否是 ",[25,102801,102802],{},"0 0 -9.81",[366,102804,102805,102806],{},"是否真的调用了 ",[25,102807,100898],{},[366,102809,102810,102811,102813,102814],{},"你看的是否是 ",[25,102812,102556],{},"，不是 ",[25,102815,102816],{},"initial qpos",[351,102818,102820],{"id":102819},"_8本章小结","8.本章小结",[14,102822,102823],{},"本章你已经完成了 MuJoCo 的最小闭环：",[18,102825,102828],{"className":102826,"code":102827,"language":5449,"meta":23},[5447],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[25,102829,102827],{"__ignoreMap":23},[14,102831,102832],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[328,102834,102835],{},"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":23,"searchDepth":48,"depth":48,"links":102837},[102838,102839,102840,102845,102849,102850,102851,102859],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":102841},[102842,102843,102844],{"id":101295,"depth":84,"text":101296},{"id":101389,"depth":84,"text":101390},{"id":101441,"depth":84,"text":101442},{"id":101465,"depth":48,"text":101466,"children":102846},[102847,102848],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":102852},[102853,102854,102855,102856,102858],{"id":102669,"depth":84,"text":102672},{"id":102692,"depth":84,"text":102693},{"id":102732,"depth":84,"text":102733},{"id":102762,"depth":84,"text":102857},"final time 不是严格等于 1.0",{"id":102785,"depth":84,"text":102785},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100851,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102866,"title":102867,"body":102868,"description":23,"extension":334,"meta":104524,"navigation":336,"path":104525,"seo":104526,"stem":104527,"__hash__":104528},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102869,"toc":104500},[102870,102873,102875,102878,102881,102898,102993,102996,103002,103004,103006,103030,103033,103047,103050,103091,103093,103106,103108,103111,103159,103171,103174,103177,103183,103196,103263,103266,103285,103288,103291,103297,103299,103308,103311,103315,103324,103406,103415,103419,103425,103439,103449,103451,103781,103784,103796,103798,103809,103811,103814,103832,103835,103838,103856,103867,103870,103885,103895,103897,103918,103935,103955,103961,104001,104017,104033,104039,104042,104066,104082,104087,104117,104134,104159,104162,104177,104186,104201,104210,104225,104232,104234,104244,104257,104264,104267,104306,104313,104315,104367,104369,104375,104378,104385,104392,104395,104397,104415,104418,104421,104455,104467,104469,104472,104494,104497],[10,102871,102867],{"id":102872},"_2xml-与-mjcf-物理建模基础",[351,102874,100860],{"id":100859},[14,102876,102877],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102879,102880],{},"本章结束后，你应该能看懂一个简单模型里：",[363,102882,102883,102886,102889,102892,102895],{},[366,102884,102885],{},"地面在哪里。",[366,102887,102888],{},"物体初始位置在哪里。",[366,102890,102891],{},"几何体是什么形状。",[366,102893,102894],{},"哪些 body 可以自由运动。",[366,102896,102897],{},"如何用名字在 Python 里找到 XML 中的对象。",[543,102899,102900,102910],{},[546,102901,102902],{},[549,102903,102904,102907],{},[552,102905,102906],{"align":23998},"标签",[552,102908,102909],{"align":23998},"作用",[590,102911,102912,102921,102931,102940,102950,102960,102973,102983],{},[549,102913,102914,102918],{},[595,102915,102916],{"align":23998},[25,102917,102750],{},[595,102919,102920],{"align":23998},"根节点",[549,102922,102923,102928],{},[595,102924,102925],{"align":23998},[25,102926,102927],{},"\u003Coption>",[595,102929,102930],{"align":23998},"仿真参数",[549,102932,102933,102937],{},[595,102934,102935],{"align":23998},[25,102936,102758],{},[595,102938,102939],{"align":23998},"世界中的物体",[549,102941,102942,102947],{},[595,102943,102944],{"align":23998},[25,102945,102946],{},"\u003Cbody>",[595,102948,102949],{"align":23998},"刚体",[549,102951,102952,102957],{},[595,102953,102954],{"align":23998},[25,102955,102956],{},"\u003Cgeom>",[595,102958,102959],{"align":23998},"几何体、碰撞体、可视体",[549,102961,102962,102970],{},[595,102963,102964,25241,102967],{"align":23998},[25,102965,102966],{},"\u003Cjoint>",[25,102968,102969],{},"\u003Cfreejoint>",[595,102971,102972],{"align":23998},"关节",[549,102974,102975,102980],{},[595,102976,102977],{"align":23998},[25,102978,102979],{},"\u003Csite>",[595,102981,102982],{"align":23998},"标记点",[549,102984,102985,102990],{},[595,102986,102987],{"align":23998},[25,102988,102989],{},"\u003Cactuator>",[595,102991,102992],{"align":23998},"控制器",[14,102994,102995],{},"初学时可以先记住：",[18,102997,103000],{"className":102998,"code":102999,"language":5449,"meta":23},[5447],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[25,103001,102999],{"__ignoreMap":23},[351,103003,100983],{"id":100982},[14,103005,100986],{},[18,103007,103009],{"className":24084,"code":103008,"language":24086,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[25,103010,103011],{"__ignoreMap":23},[28,103012,103013,103015,103017,103019,103021,103023,103025,103027],{"class":30,"line":31},[28,103014,24839],{"class":2225},[28,103016,26578],{"class":127},[28,103018,24096],{"class":127},[28,103020,26663],{"class":60},[28,103022,102714],{"class":127},[28,103024,101027],{"class":127},[28,103026,102719],{"class":127},[28,103028,103029],{"class":127}," glfw-devel\n",[14,103031,103032],{},"pip:",[18,103034,103035],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},[25,103036,103037],{"__ignoreMap":23},[28,103038,103039,103041,103043,103045],{"class":30,"line":31},[28,103040,24093],{"class":2225},[28,103042,24096],{"class":127},[28,103044,101143],{"class":127},[28,103046,101146],{"class":127},[14,103048,103049],{},"conda:",[18,103051,103053],{"className":24084,"code":103052,"language":24086,"meta":23,"style":23},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[25,103054,103055,103072,103081],{"__ignoreMap":23},[28,103056,103057,103059,103061,103063,103066,103068,103070],{"class":30,"line":31},[28,103058,30593],{"class":2225},[28,103060,29439],{"class":127},[28,103062,25378],{"class":60},[28,103064,103065],{"class":127}," mujoco-xml",[28,103067,101188],{"class":127},[28,103069,101191],{"class":60},[28,103071,101194],{"class":60},[28,103073,103074,103076,103078],{"class":30,"line":48},[28,103075,30593],{"class":2225},[28,103077,101201],{"class":127},[28,103079,103080],{"class":127}," mujoco-xml\n",[28,103082,103083,103085,103087,103089],{"class":30,"line":84},[28,103084,24093],{"class":2225},[28,103086,24096],{"class":127},[28,103088,101143],{"class":127},[28,103090,101146],{"class":127},[14,103092,101217],{},[363,103094,103095,103098,103103],{},[366,103096,103097],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[366,103099,103100,103101,28648],{},"本章使用基础标签，适用于 ",[25,103102,101240],{},[366,103104,103105],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[351,103107,101258],{"id":101257},[14,103109,103110],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[18,103112,103114],{"className":53323,"code":103113,"language":53325,"meta":23,"style":23},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[25,103115,103116,103130,103138,103143,103151],{"__ignoreMap":23},[28,103117,103118,103120,103122,103124,103126,103128],{"class":30,"line":31},[28,103119,1307],{"class":38},[28,103121,101234],{"class":51556},[28,103123,101988],{"class":2225},[28,103125,54],{"class":38},[28,103127,62935],{"class":127},[28,103129,51563],{"class":38},[28,103131,103132,103134,103136],{"class":30,"line":48},[28,103133,52400],{"class":38},[28,103135,102054],{"class":51556},[28,103137,51563],{"class":38},[28,103139,103140],{"class":30,"line":84},[28,103141,103142],{"class":38},"    ...\n",[28,103144,103145,103147,103149],{"class":30,"line":91},[28,103146,52673],{"class":38},[28,103148,102054],{"class":51556},[28,103150,51563],{"class":38},[28,103152,103153,103155,103157],{"class":30,"line":97},[28,103154,52041],{"class":38},[28,103156,101234],{"class":51556},[28,103158,51563],{"class":38},[14,103160,103161,103163,103164,103166,103167,103170],{},[25,103162,52056],{}," 表示刚体。",[25,103165,101333],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[25,103168,103169],{},"joint"," 表示刚体相对父刚体如何运动。",[380,103172,103173],{"id":103173},"层级结构非常重要",[14,103175,103176],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[18,103178,103181],{"className":103179,"code":103180,"language":5449,"meta":23},[5447],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[25,103182,103180],{"__ignoreMap":23},[14,103184,103185,101231,103188,103191,103192,103195],{},[25,103186,103187],{},"red_box_geom",[25,103189,103190],{},"box_center"," 都属于 ",[25,103193,103194],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[18,103197,103199],{"className":53323,"code":103198,"language":53325,"meta":23,"style":23},"\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",[25,103200,103201,103221,103235,103255],{"__ignoreMap":23},[28,103202,103203,103205,103207,103209,103211,103213,103215,103217,103219],{"class":30,"line":31},[28,103204,1307],{"class":38},[28,103206,52056],{"class":51556},[28,103208,15182],{"class":2225},[28,103210,54],{"class":38},[28,103212,53747],{"class":127},[28,103214,101319],{"class":2225},[28,103216,54],{"class":38},[28,103218,101324],{"class":127},[28,103220,51563],{"class":38},[28,103222,103223,103225,103227,103229,103231,103233],{"class":30,"line":48},[28,103224,52400],{"class":38},[28,103226,101833],{"class":51556},[28,103228,15182],{"class":2225},[28,103230,54],{"class":38},[28,103232,102174],{"class":127},[28,103234,101357],{"class":38},[28,103236,103237,103239,103241,103243,103245,103247,103249,103251,103253],{"class":30,"line":84},[28,103238,52400],{"class":38},[28,103240,101333],{"class":51556},[28,103242,54080],{"class":2225},[28,103244,54],{"class":38},[28,103246,53747],{"class":127},[28,103248,101349],{"class":2225},[28,103250,54],{"class":38},[28,103252,101354],{"class":127},[28,103254,101357],{"class":38},[28,103256,103257,103259,103261],{"class":30,"line":91},[28,103258,52041],{"class":38},[28,103260,52056],{"class":51556},[28,103262,51563],{"class":38},[14,103264,103265],{},"含义:",[363,103267,103268,103274,103279,103282],{},[366,103269,103270,103271,103273],{},"创建名为 ",[25,103272,53970],{}," 的刚体",[366,103275,103276,103277],{},"初始位置在世界坐标 ",[25,103278,101382],{},[366,103280,103281],{},"它有一个自由关节",[366,103283,103284],{},"它有一个盒子几何体",[380,103286,103287],{"id":103287},"坐标怎么理解",[14,103289,103290],{},"MuJoCo 默认使用三维坐标：",[18,103292,103295],{"className":103293,"code":103294,"language":5449,"meta":23},[5447],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[25,103296,103294],{"__ignoreMap":23},[14,103298,14895],{},[18,103300,103302],{"className":53323,"code":103301,"language":53325,"meta":23,"style":23},"pos=\"0 0 1\"\n",[25,103303,103304],{"__ignoreMap":23},[28,103305,103306],{"class":30,"line":31},[28,103307,103301],{"class":38},[14,103309,103310],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[380,103312,103314],{"id":103313},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103316,103317,103318,82786,103321,103323],{},"不同 ",[25,103319,103320],{},"type",[25,103322,31753],{}," 含义不同：",[543,103325,103326,103341],{},[546,103327,103328],{},[549,103329,103330,103334,103339],{},[552,103331,103332],{"align":23998},[25,103333,103320],{},[552,103335,103336,103338],{"align":23998},[25,103337,31753],{}," 示例",[552,103340,100913],{"align":23998},[590,103342,103343,103357,103372,103391],{},[549,103344,103345,103349,103354],{},[595,103346,103347],{"align":23998},[25,103348,53970],{},[595,103350,103351],{"align":23998},[25,103352,103353],{},"size=\"0.1 0.2 0.3\"",[595,103355,103356],{"align":23998},"x\u002Fy\u002Fz 半边长，不是完整长度",[549,103358,103359,103364,103369],{},[595,103360,103361],{"align":23998},[25,103362,103363],{},"sphere",[595,103365,103366],{"align":23998},[25,103367,103368],{},"size=\"0.1\"",[595,103370,103371],{"align":23998},"球半径",[549,103373,103374,103379,103384],{},[595,103375,103376],{"align":23998},[25,103377,103378],{},"capsule",[595,103380,103381],{"align":23998},[25,103382,103383],{},"size=\"0.03\"",[595,103385,103386,103387,103390],{"align":23998},"胶囊半径，长度常用 ",[25,103388,103389],{},"fromto"," 指定",[549,103392,103393,103398,103403],{},[595,103394,103395],{"align":23998},[25,103396,103397],{},"plane",[595,103399,103400],{"align":23998},[25,103401,103402],{},"size=\"3 3 0.1\"",[595,103404,103405],{"align":23998},"可视平面大小，通常当地面",[14,103407,103408,103409,103411,103412,103414],{},"最容易踩坑的是 box：",[25,103410,102237],{}," 表示边长大约是 ",[25,103413,32293],{},"，因为 MuJoCo 用的是半边长。",[380,103416,103418],{"id":103417},"site-是什么","site 是什么",[14,103420,103421,103424],{},[25,103422,103423],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[363,103426,103427,103430,103433,103436],{},[366,103428,103429],{},"标记机械臂末端。",[366,103431,103432],{},"标记目标位置。",[366,103434,103435],{},"放传感器或相机参考点。",[366,103437,103438],{},"在 Python 中读取某个关键点的世界坐标。",[14,103440,103441,103442,101231,103445,103448],{},"在后面的 Reacher 任务中，",[25,103443,103444],{},"tip",[25,103446,103447],{},"target"," 就会用 site 表示。",[351,103450,101466],{"id":101465},[18,103452,103454],{"className":20,"code":103453,"language":22,"meta":23,"style":23},"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",[25,103455,103456,103462,103472,103476,103480,103488,103493,103497,103501,103505,103510,103514,103519,103524,103529,103534,103538,103542,103546,103550,103554,103558,103570,103582,103590,103594,103609,103624,103628,103641,103656,103669,103682,103686,103702,103706,103710,103721,103733,103745,103757,103761,103765,103777],{"__ignoreMap":23},[28,103457,103458,103460],{"class":30,"line":31},[28,103459,35],{"class":34},[28,103461,101514],{"class":38},[28,103463,103464,103466,103468,103470],{"class":30,"line":48},[28,103465,35],{"class":34},[28,103467,39],{"class":38},[28,103469,42],{"class":34},[28,103471,45],{"class":38},[28,103473,103474],{"class":30,"line":84},[28,103475,2662],{"emptyLinePlaceholder":336},[28,103477,103478],{"class":30,"line":91},[28,103479,2662],{"emptyLinePlaceholder":336},[28,103481,103482,103484,103486],{"class":30,"line":97},[28,103483,101527],{"class":60},[28,103485,13826],{"class":34},[28,103487,101532],{"class":127},[28,103489,103490],{"class":30,"line":103},[28,103491,103492],{"class":127},"\u003Cmujoco model=\"xml_basic\">\n",[28,103494,103495],{"class":30,"line":109},[28,103496,101542],{"class":127},[28,103498,103499],{"class":30,"line":118},[28,103500,2662],{"emptyLinePlaceholder":336},[28,103502,103503],{"class":30,"line":124},[28,103504,101551],{"class":127},[28,103506,103507],{"class":30,"line":131},[28,103508,103509],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[28,103511,103512],{"class":30,"line":137},[28,103513,2662],{"emptyLinePlaceholder":336},[28,103515,103516],{"class":30,"line":143},[28,103517,103518],{"class":127},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[28,103520,103521],{"class":30,"line":149},[28,103522,103523],{"class":127},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[28,103525,103526],{"class":30,"line":1890},[28,103527,103528],{"class":127},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,103530,103531],{"class":30,"line":1904},[28,103532,103533],{"class":127},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,103535,103536],{"class":30,"line":1909},[28,103537,101580],{"class":127},[28,103539,103540],{"class":30,"line":1915},[28,103541,101585],{"class":127},[28,103543,103544],{"class":30,"line":1936},[28,103545,101590],{"class":127},[28,103547,103548],{"class":30,"line":1941},[28,103549,95950],{"class":127},[28,103551,103552],{"class":30,"line":1955},[28,103553,2662],{"emptyLinePlaceholder":336},[28,103555,103556],{"class":30,"line":1960},[28,103557,2662],{"emptyLinePlaceholder":336},[28,103559,103560,103562,103564,103566,103568],{"class":30,"line":1989},[28,103561,32203],{"class":34},[28,103563,2235],{"class":2225},[28,103565,101611],{"class":38},[28,103567,95938],{"class":60},[28,103569,4001],{"class":38},[28,103571,103572,103574,103576,103578,103580],{"class":30,"line":1994},[28,103573,101620],{"class":38},[28,103575,54],{"class":34},[28,103577,101625],{"class":38},[28,103579,101527],{"class":60},[28,103581,81],{"class":38},[28,103583,103584,103586,103588],{"class":30,"line":2011},[28,103585,101634],{"class":38},[28,103587,54],{"class":34},[28,103589,101639],{"class":38},[28,103591,103592],{"class":30,"line":2016},[28,103593,2662],{"emptyLinePlaceholder":336},[28,103595,103596,103599,103601,103604,103607],{"class":30,"line":2021},[28,103597,103598],{"class":38},"    box_body_id ",[28,103600,54],{"class":34},[28,103602,103603],{"class":38}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[28,103605,103606],{"class":127},"\"red_box\"",[28,103608,81],{"class":38},[28,103610,103611,103614,103616,103619,103622],{"class":30,"line":2026},[28,103612,103613],{"class":38},"    site_id ",[28,103615,54],{"class":34},[28,103617,103618],{"class":38}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[28,103620,103621],{"class":127},"\"box_center\"",[28,103623,81],{"class":38},[28,103625,103626],{"class":30,"line":2040},[28,103627,2662],{"emptyLinePlaceholder":336},[28,103629,103630,103632,103635,103637,103639],{"class":30,"line":2045},[28,103631,3363],{"class":34},[28,103633,103634],{"class":38}," box_body_id ",[28,103636,1307],{"class":34},[28,103638,4355],{"class":60},[28,103640,4001],{"class":38},[28,103642,103643,103646,103649,103651,103654],{"class":30,"line":2839},[28,103644,103645],{"class":34},"        raise",[28,103647,103648],{"class":60}," RuntimeError",[28,103650,413],{"class":38},[28,103652,103653],{"class":127},"\"body red_box not found\"",[28,103655,81],{"class":38},[28,103657,103658,103660,103663,103665,103667],{"class":30,"line":2853},[28,103659,3363],{"class":34},[28,103661,103662],{"class":38}," site_id ",[28,103664,1307],{"class":34},[28,103666,4355],{"class":60},[28,103668,4001],{"class":38},[28,103670,103671,103673,103675,103677,103680],{"class":30,"line":2861},[28,103672,103645],{"class":34},[28,103674,103648],{"class":60},[28,103676,413],{"class":38},[28,103678,103679],{"class":127},"\"site box_center not found\"",[28,103681,81],{"class":38},[28,103683,103684],{"class":30,"line":2866},[28,103685,2662],{"emptyLinePlaceholder":336},[28,103687,103688,103690,103692,103694,103696,103698,103700],{"class":30,"line":2872},[28,103689,3463],{"class":34},[28,103691,101714],{"class":38},[28,103693,26306],{"class":34},[28,103695,32699],{"class":60},[28,103697,413],{"class":38},[28,103699,1984],{"class":60},[28,103701,31046],{"class":38},[28,103703,103704],{"class":30,"line":2878},[28,103705,101729],{"class":38},[28,103707,103708],{"class":30,"line":2883},[28,103709,2662],{"emptyLinePlaceholder":336},[28,103711,103712,103714,103716,103719],{"class":30,"line":8210},[28,103713,31559],{"class":60},[28,103715,413],{"class":38},[28,103717,103718],{"class":127},"\"simulation time:\"",[28,103720,101691],{"class":38},[28,103722,103723,103725,103727,103730],{"class":30,"line":8234},[28,103724,31559],{"class":60},[28,103726,413],{"class":38},[28,103728,103729],{"class":127},"\"box body position:\"",[28,103731,103732],{"class":38},", data.xpos[box_body_id].copy())\n",[28,103734,103735,103737,103739,103742],{"class":30,"line":8239},[28,103736,31559],{"class":60},[28,103738,413],{"class":38},[28,103740,103741],{"class":127},"\"site position:\"",[28,103743,103744],{"class":38},", data.site_xpos[site_id].copy())\n",[28,103746,103747,103749,103751,103754],{"class":30,"line":8245},[28,103748,31559],{"class":60},[28,103750,413],{"class":38},[28,103752,103753],{"class":127},"\"box qpos:\"",[28,103755,103756],{"class":38},", np.array(data.qpos))\n",[28,103758,103759],{"class":30,"line":8272},[28,103760,2662],{"emptyLinePlaceholder":336},[28,103762,103763],{"class":30,"line":8277},[28,103764,2662],{"emptyLinePlaceholder":336},[28,103766,103767,103769,103771,103773,103775],{"class":30,"line":8283},[28,103768,1796],{"class":34},[28,103770,31480],{"class":60},[28,103772,101772],{"class":34},[28,103774,101775],{"class":127},[28,103776,4001],{"class":38},[28,103778,103779],{"class":30,"line":8295},[28,103780,101782],{"class":38},[14,103782,103783],{},"保存为：",[18,103785,103787],{"className":24084,"code":103786,"language":24086,"meta":23,"style":23},"touch ch2_xml_basic.py\n",[25,103788,103789],{"__ignoreMap":23},[28,103790,103791,103793],{"class":30,"line":31},[28,103792,101496],{"class":2225},[28,103794,103795],{"class":127}," ch2_xml_basic.py\n",[14,103797,102514],{},[18,103799,103801],{"className":24084,"code":103800,"language":24086,"meta":23,"style":23},"python ch2_xml_basic.py\n",[25,103802,103803],{"__ignoreMap":23},[28,103804,103805,103807],{"class":30,"line":31},[28,103806,22],{"class":2225},[28,103808,103795],{"class":127},[380,103810,101785],{"id":101785},[14,103812,103813],{},"用名字查找 body：",[18,103815,103817],{"className":20,"code":103816,"language":22,"meta":23,"style":23},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[25,103818,103819],{"__ignoreMap":23},[28,103820,103821,103824,103826,103828,103830],{"class":30,"line":31},[28,103822,103823],{"class":38},"box_body_id ",[28,103825,54],{"class":34},[28,103827,103603],{"class":38},[28,103829,103606],{"class":127},[28,103831,81],{"class":38},[14,103833,103834],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103836,103837],{},"用名字查找 site：",[18,103839,103841],{"className":20,"code":103840,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[25,103842,103843],{"__ignoreMap":23},[28,103844,103845,103848,103850,103852,103854],{"class":30,"line":31},[28,103846,103847],{"class":38},"site_id ",[28,103849,54],{"class":34},[28,103851,103618],{"class":38},[28,103853,103621],{"class":127},[28,103855,81],{"class":38},[14,103857,103858,103859,103862,103863,103866],{},"注意第二个参数是对象类型。查 body 就用 ",[25,103860,103861],{},"mjOBJ_BODY","，查 site 就用 ",[25,103864,103865],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103868,103869],{},"读取世界坐标：",[18,103871,103873],{"className":20,"code":103872,"language":22,"meta":23,"style":23},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[25,103874,103875,103880],{"__ignoreMap":23},[28,103876,103877],{"class":30,"line":31},[28,103878,103879],{"class":38},"data.xpos[box_body_id]\n",[28,103881,103882],{"class":30,"line":48},[28,103883,103884],{"class":38},"data.site_xpos[site_id]\n",[14,103886,103887,103890,103891,103894],{},[25,103888,103889],{},"xpos"," 是 body 的世界坐标，",[25,103892,103893],{},"site_xpos"," 是 site 的世界坐标。",[380,103896,101921],{"id":101921},[18,103898,103900],{"className":20,"code":103899,"language":22,"meta":23,"style":23},"import mujoco\nimport numpy as np\n",[25,103901,103902,103908],{"__ignoreMap":23},[28,103903,103904,103906],{"class":30,"line":31},[28,103905,35],{"class":34},[28,103907,101514],{"class":38},[28,103909,103910,103912,103914,103916],{"class":30,"line":48},[28,103911,35],{"class":34},[28,103913,39],{"class":38},[28,103915,42],{"class":34},[28,103917,45],{"class":38},[14,103919,103920,103921,103924,103925,103928,103929,617,103932,28648],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[25,103922,103923],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[25,103926,103927],{},"as np"," 是习惯写法，后面就可以写 ",[25,103930,103931],{},"np.array(...)",[25,103933,103934],{},"np.round(...)",[18,103936,103937],{"className":20,"code":101808,"language":22,"meta":23,"style":23},[25,103938,103939,103947,103951],{"__ignoreMap":23},[28,103940,103941,103943,103945],{"class":30,"line":31},[28,103942,101527],{"class":60},[28,103944,13826],{"class":34},[28,103946,101532],{"class":127},[28,103948,103949],{"class":30,"line":48},[28,103950,101823],{"class":127},[28,103952,103953],{"class":30,"line":84},[28,103954,95950],{"class":127},[14,103956,103957,103958,28648],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[25,103959,103960],{},"mujoco.MjModel.from_xml_string(XML)",[18,103962,103964],{"className":53323,"code":103963,"language":53325,"meta":23,"style":23},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,103965,103966],{"__ignoreMap":23},[28,103967,103968,103970,103972,103974,103976,103978,103980,103982,103985,103987,103989,103992,103994,103996,103999],{"class":30,"line":31},[28,103969,1307],{"class":38},[28,103971,103423],{"class":51556},[28,103973,15182],{"class":2225},[28,103975,54],{"class":38},[28,103977,103621],{"class":127},[28,103979,101319],{"class":2225},[28,103981,54],{"class":38},[28,103983,103984],{"class":127},"\"0 0 0\"",[28,103986,101349],{"class":2225},[28,103988,54],{"class":38},[28,103990,103991],{"class":127},"\"0.03\"",[28,103993,79023],{"class":2225},[28,103995,54],{"class":38},[28,103997,103998],{"class":127},"\"0 1 0 1\"",[28,104000,101357],{"class":38},[14,104002,104003,104005,104006,104009,104010,104012,104013,104016],{},[25,104004,103423],{}," 是标记点。",[25,104007,104008],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[25,104011,103383],{}," 表示显示出来的小球大小。",[25,104014,104015],{},"rgba=\"0 1 0 1\""," 表示绿色。",[18,104018,104019],{"className":20,"code":103816,"language":22,"meta":23,"style":23},[25,104020,104021],{"__ignoreMap":23},[28,104022,104023,104025,104027,104029,104031],{"class":30,"line":31},[28,104024,103823],{"class":38},[28,104026,54],{"class":34},[28,104028,103603],{"class":38},[28,104030,103606],{"class":127},[28,104032,81],{"class":38},[14,104034,104035,104036,104038],{},"这行的作用是：根据名字 ",[25,104037,103606],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104040,104041],{},"拆开看：",[363,104043,104044,104050,104055,104061],{},[366,104045,104046,104049],{},[25,104047,104048],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[366,104051,104052,104054],{},[25,104053,102298],{}," 是被查询的模型。",[366,104056,104057,104060],{},[25,104058,104059],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[366,104062,104063,104065],{},[25,104064,103606],{}," 是 XML 里写的名字。",[18,104067,104068],{"className":20,"code":103840,"language":22,"meta":23,"style":23},[25,104069,104070],{"__ignoreMap":23},[28,104071,104072,104074,104076,104078,104080],{"class":30,"line":31},[28,104073,103847],{"class":38},[28,104075,54],{"class":34},[28,104077,103618],{"class":38},[28,104079,103621],{"class":127},[28,104081,81],{"class":38},[14,104083,104084,104085,28648],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[25,104086,103621],{},[18,104088,104090],{"className":20,"code":104089,"language":22,"meta":23,"style":23},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[25,104091,104092,104104],{"__ignoreMap":23},[28,104093,104094,104096,104098,104100,104102],{"class":30,"line":31},[28,104095,1796],{"class":34},[28,104097,103634],{"class":38},[28,104099,1307],{"class":34},[28,104101,4355],{"class":60},[28,104103,4001],{"class":38},[28,104105,104106,104109,104111,104113,104115],{"class":30,"line":48},[28,104107,104108],{"class":34},"    raise",[28,104110,103648],{"class":60},[28,104112,413],{"class":38},[28,104114,103653],{"class":127},[28,104116,81],{"class":38},[14,104118,104119,104121,104122,104125,104126,104129,104130,104133],{},[25,104120,1796],{}," 是条件判断。",[25,104123,104124],{},"mj_name2id"," 找不到对象时会返回 ",[25,104127,104128],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[25,104131,104132],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[18,104135,104137],{"className":20,"code":104136,"language":22,"meta":23,"style":23},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[25,104138,104139,104155],{"__ignoreMap":23},[28,104140,104141,104143,104145,104147,104149,104151,104153],{"class":30,"line":31},[28,104142,3287],{"class":34},[28,104144,101714],{"class":38},[28,104146,26306],{"class":34},[28,104148,32699],{"class":60},[28,104150,413],{"class":38},[28,104152,1984],{"class":60},[28,104154,31046],{"class":38},[28,104156,104157],{"class":30,"line":48},[28,104158,101912],{"class":38},[14,104160,104161],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[18,104163,104165],{"className":20,"code":104164,"language":22,"meta":23,"style":23},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[25,104166,104167],{"__ignoreMap":23},[28,104168,104169,104171,104173,104175],{"class":30,"line":31},[28,104170,30675],{"class":60},[28,104172,413],{"class":38},[28,104174,103729],{"class":127},[28,104176,103732],{"class":38},[14,104178,104179,104181,104182,104185],{},[25,104180,101292],{}," 保存所有 body 的世界坐标。",[25,104183,104184],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[18,104187,104189],{"className":20,"code":104188,"language":22,"meta":23,"style":23},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[25,104190,104191],{"__ignoreMap":23},[28,104192,104193,104195,104197,104199],{"class":30,"line":31},[28,104194,30675],{"class":60},[28,104196,413],{"class":38},[28,104198,103741],{"class":127},[28,104200,103744],{"class":38},[14,104202,104203,104206,104207,104209],{},[25,104204,104205],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[25,104208,103190],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[18,104211,104213],{"className":20,"code":104212,"language":22,"meta":23,"style":23},"print(\"box qpos:\", np.array(data.qpos))\n",[25,104214,104215],{"__ignoreMap":23},[28,104216,104217,104219,104221,104223],{"class":30,"line":31},[28,104218,30675],{"class":60},[28,104220,413],{"class":38},[28,104222,103753],{"class":127},[28,104224,103756],{"class":38},[14,104226,104227,104228,104231],{},"这里打印广义位置数组。",[25,104229,104230],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[351,104233,102529],{"id":102528},[14,104235,104236,104237,104240,104241,28648],{},"程序会输出 ",[25,104238,104239],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[25,104242,104243],{},"qpos",[14,104245,104246,104248,104249,104252,104253,104256],{},[25,104247,104184],{}," 是 body 的世界坐标位置。",[25,104250,104251],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[25,104254,104255],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104258,82478,104259,82786,104261,104263],{},[25,104260,103190],{},[25,104262,104008],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104265,104266],{},"如果你把 site 改成：",[18,104268,104270],{"className":53323,"code":104269,"language":53325,"meta":23,"style":23},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104271,104272],{"__ignoreMap":23},[28,104273,104274,104276,104278,104280,104282,104285,104287,104289,104292,104294,104296,104298,104300,104302,104304],{"class":30,"line":31},[28,104275,1307],{"class":38},[28,104277,103423],{"class":51556},[28,104279,15182],{"class":2225},[28,104281,54],{"class":38},[28,104283,104284],{"class":127},"\"box_top\"",[28,104286,101319],{"class":2225},[28,104288,54],{"class":38},[28,104290,104291],{"class":127},"\"0 0 0.15\"",[28,104293,101349],{"class":2225},[28,104295,54],{"class":38},[28,104297,103991],{"class":127},[28,104299,79023],{"class":2225},[28,104301,54],{"class":38},[28,104303,103998],{"class":127},[28,104305,101357],{"class":38},[14,104307,104308,104309,104312],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[25,104310,104311],{},"site position"," 就会比 body position 的 z 坐标更高。",[351,104314,102561],{"id":102560},[363,104316,104317,104326,104329,104336,104342,104353],{},[366,104318,102624,104319,104321,104322,102627,104324,28648],{},[25,104320,103194],{}," 的初始高度从 ",[25,104323,61],{},[25,104325,211],{},[366,104327,104328],{},"重新运行程序。",[366,104330,104331,104332,104335],{},"观察 ",[25,104333,104334],{},"box qpos"," 和最终位置是否变化。",[366,104337,104338,104339,104341],{},"故意把 ",[25,104340,103423],{}," 名称改错，确认程序能报错。",[366,104343,102624,104344,104346,104347,102627,104349,104352],{},[25,104345,101333],{}," 的颜色 ",[25,104348,102245],{},[25,104350,104351],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[366,104354,102624,104355,82786,104357,102627,104360,104363,104364,104366],{},[25,104356,103190],{},[25,104358,104359],{},"pos",[25,104361,104362],{},"0 0 0.2","，观察 ",[25,104365,104311],{}," 如何变化。",[351,104368,102666],{"id":102665},[380,104370,104372],{"id":104371},"xml-error-schema-violation",[25,104373,104374],{},"XML Error: Schema violation",[14,104376,104377],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[380,104379,104381,81546,104383],{"id":104380},"mj_name2id-返回-1",[25,104382,104124],{},[25,104384,104128],{},[14,104386,104387,104388,104391],{},"说明名字没有找到。检查 XML 中 ",[25,104389,104390],{},"name=\"...\"","，并确认对象类型正确。",[380,104393,104394],{"id":104394},"物体不下落",[14,104396,102736],{},[363,104398,104399,104404,104409],{},[366,104400,104401,104402],{},"body 是否有 ",[25,104403,101833],{},[366,104405,104406,104407],{},"gravity 是否为 ",[25,104408,102802],{},[366,104410,104411,104412,104414],{},"body 是否被固定在 ",[25,104413,102054],{}," 中",[380,104416,104417],{"id":104417},"坐标看起来不符合预期",[14,104419,104420],{},"先区分两种坐标：",[543,104422,104423,104432],{},[546,104424,104425],{},[549,104426,104427,104430],{},[552,104428,104429],{"align":23998},"坐标",[552,104431,100913],{"align":23998},[590,104433,104434,104444],{},[549,104435,104436,104441],{},[595,104437,104438,104439],{"align":23998},"XML 里的 ",[25,104440,104359],{},[595,104442,104443],{"align":23998},"相对父 body 的局部坐标",[549,104445,104446,104452],{},[595,104447,104448,25241,104450],{"align":23998},[25,104449,101292],{},[25,104451,104205],{},[595,104453,104454],{"align":23998},"仿真更新后的世界坐标",[14,104456,104457,104458,104460,104461,82795,104464,104466],{},"如果你修改了 ",[25,104459,101283],{},"，但还没调用 ",[25,104462,104463],{},"mj_forward",[25,104465,101428],{},"，世界坐标可能还没有更新。",[351,104468,102820],{"id":102819},[14,104470,104471],{},"MJCF 建模先掌握四件事：",[363,104473,104474,104479,104484,104489],{},[366,104475,104476,104478],{},[25,104477,52056],{}," 表示刚体层级。",[366,104480,104481,104483],{},[25,104482,101333],{}," 表示形状、碰撞和质量。",[366,104485,104486,104488],{},[25,104487,103169],{}," 决定 body 能不能动、怎么动。",[366,104490,104491,104493],{},[25,104492,103423],{}," 用来标记关键点，方便 Python 读取位置。",[14,104495,104496],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[328,104498,104499],{},"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":23,"searchDepth":48,"depth":48,"links":104501},[104502,104503,104504,104510,104514,104515,104516,104523],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":104505},[104506,104507,104508,104509],{"id":103173,"depth":84,"text":103173},{"id":103287,"depth":84,"text":103287},{"id":103313,"depth":84,"text":103314},{"id":103417,"depth":84,"text":103418},{"id":101465,"depth":48,"text":101466,"children":104511},[104512,104513],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":104517},[104518,104519,104521,104522],{"id":104371,"depth":84,"text":104374},{"id":104380,"depth":84,"text":104520},"mj_name2id 返回 -1",{"id":104394,"depth":84,"text":104394},{"id":104417,"depth":84,"text":104417},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102867,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104530,"title":104531,"body":104532,"description":23,"extension":334,"meta":106027,"navigation":336,"path":106028,"seo":106029,"stem":106030,"__hash__":106031},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104533,"toc":105999},[104534,104537,104539,104542,104545,104583,104586,104592,104595,104597,104599,104626,104628,104642,104644,104685,104687,104711,104713,104716,104725,104734,104737,104746,104754,104763,104766,104776,104779,104831,104838,104844,104852,104900,104903,104922,104925,104933,104937,104946,104979,104981,105329,105331,105343,105345,105356,105358,105361,105382,105388,105391,105416,105426,105429,105437,105440,105443,105464,105475,105477,105497,105500,105521,105530,105549,105555,105580,105583,105597,105604,105628,105631,105639,105648,105664,105676,105684,105693,105695,105698,105722,105727,105730,105752,105754,105793,105795,105802,105804,105812,105815,105818,105830,105871,105878,105889,105896,105899,105948,105951,105954,105960,105962,105967,105993,105996],[10,104535,104531],{"id":104536},"_3python-控制接口读取状态与推进仿真",[351,104538,100860],{"id":100859},[14,104540,104541],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104543,104544],{},"你将学习:",[363,104546,104547,104552,104557,104561,104566,104577],{},[366,104548,104549],{},[25,104550,104551],{},"MjModel.from_xml_string",[366,104553,104554],{},[25,104555,104556],{},"MjData(model)",[366,104558,104559],{},[25,104560,101428],{},[366,104562,104563],{},[25,104564,104565],{},"mj_resetData",[366,104567,104568,104569,617,104571,617,104574],{},"读取 ",[25,104570,104243],{},[25,104572,104573],{},"qvel",[25,104575,104576],{},"ctrl",[366,104578,104579,104580],{},"使用 ",[25,104581,104582],{},"model.opt.timestep",[14,104584,104585],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[18,104587,104590],{"className":104588,"code":104589,"language":5449,"meta":23},[5447],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[25,104591,104589],{"__ignoreMap":23},[14,104593,104594],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[351,104596,100983],{"id":100982},[14,104598,100986],{},[18,104600,104602],{"className":24084,"code":104601,"language":24086,"meta":23,"style":23},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[25,104603,104604],{"__ignoreMap":23},[28,104605,104606,104608,104610,104612,104614,104617,104619,104621,104623],{"class":30,"line":31},[28,104607,24839],{"class":2225},[28,104609,26578],{"class":127},[28,104611,24096],{"class":127},[28,104613,26663],{"class":60},[28,104615,104616],{"class":127}," python3",[28,104618,101011],{"class":127},[28,104620,102714],{"class":127},[28,104622,101027],{"class":127},[28,104624,104625],{"class":127}," glfw\n",[14,104627,103032],{},[18,104629,104630],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},[25,104631,104632],{"__ignoreMap":23},[28,104633,104634,104636,104638,104640],{"class":30,"line":31},[28,104635,24093],{"class":2225},[28,104637,24096],{"class":127},[28,104639,101143],{"class":127},[28,104641,101146],{"class":127},[14,104643,103049],{},[18,104645,104647],{"className":24084,"code":104646,"language":24086,"meta":23,"style":23},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[25,104648,104649,104666,104675],{"__ignoreMap":23},[28,104650,104651,104653,104655,104657,104660,104662,104664],{"class":30,"line":31},[28,104652,30593],{"class":2225},[28,104654,29439],{"class":127},[28,104656,25378],{"class":60},[28,104658,104659],{"class":127}," mujoco-python-api",[28,104661,101188],{"class":127},[28,104663,101191],{"class":60},[28,104665,101194],{"class":60},[28,104667,104668,104670,104672],{"class":30,"line":48},[28,104669,30593],{"class":2225},[28,104671,101201],{"class":127},[28,104673,104674],{"class":127}," mujoco-python-api\n",[28,104676,104677,104679,104681,104683],{"class":30,"line":84},[28,104678,24093],{"class":2225},[28,104680,24096],{"class":127},[28,104682,101143],{"class":127},[28,104684,101146],{"class":127},[14,104686,101217],{},[363,104688,104689,104696,104705],{},[366,104690,104691,101231,104693,104695],{},[25,104692,100888],{},[25,104694,100893],{}," 是官方 Python bindings 的类名。",[366,104697,104698,104699,104702,104703,28648],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[25,104700,104701],{},"mjModel"," 在 Python 中是 ",[25,104704,100922],{},[366,104706,104707,104708,28648],{},"不要使用 ",[25,104709,104710],{},"sim = mujoco_py.MjSim(...)",[351,104712,101258],{"id":101257},[14,104714,104715],{},"仿真推进核心代码:",[18,104717,104719],{"className":20,"code":104718,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\n",[25,104720,104721],{"__ignoreMap":23},[28,104722,104723],{"class":30,"line":31},[28,104724,104718],{"class":38},[14,104726,104727,104728,617,104730,617,104732,28648],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[25,104729,101283],{},[25,104731,101286],{},[25,104733,101280],{},[14,104735,104736],{},"重置仿真:",[18,104738,104740],{"className":20,"code":104739,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\n",[25,104741,104742],{"__ignoreMap":23},[28,104743,104744],{"class":30,"line":31},[28,104745,104739],{"class":38},[14,104747,104748,104749,82795,104751,104753],{},"如果手动修改了 ",[25,104750,101283],{},[25,104752,101286],{},"，通常应调用:",[18,104755,104757],{"className":20,"code":104756,"language":22,"meta":23,"style":23},"mujoco.mj_forward(model, data)\n",[25,104758,104759],{"__ignoreMap":23},[28,104760,104761],{"class":30,"line":31},[28,104762,104756],{"class":38},[14,104764,104765],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[380,104767,104769,617,104771,617,104773,104775],{"id":104768},"qposqvelctrl-是什么",[25,104770,104243],{},[25,104772,104573],{},[25,104774,104576],{}," 是什么",[14,104777,104778],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[543,104780,104781,104793],{},[546,104782,104783],{},[549,104784,104785,104788,104790],{},[552,104786,104787],{"align":23998},"字段",[552,104789,100913],{"align":23998},[552,104791,104792],{"align":23998},"谁来修改",[590,104794,104795,104807,104819],{},[549,104796,104797,104801,104804],{},[595,104798,104799],{"align":23998},[25,104800,101283],{},[595,104802,104803],{"align":23998},"广义位置，例如小车位置、关节角、自由物体位置姿态",[595,104805,104806],{"align":23998},"MuJoCo 更新，也可以手动设置初始状态",[549,104808,104809,104813,104816],{},[595,104810,104811],{"align":23998},[25,104812,101286],{},[595,104814,104815],{"align":23998},"广义速度，例如小车速度、关节角速度",[595,104817,104818],{"align":23998},"MuJoCo 更新，也可以手动清零",[549,104820,104821,104825,104828],{},[595,104822,104823],{"align":23998},[25,104824,101289],{},[595,104826,104827],{"align":23998},"actuator 的控制输入",[595,104829,104830],{"align":23998},"主要由你的控制代码写入",[14,104832,9287,104833,101231,104835,104837],{},[25,104834,104243],{},[25,104836,104573],{}," 不一定同维。自由刚体就是典型例子：",[18,104839,104842],{"className":104840,"code":104841,"language":5449,"meta":23},[5447],"freejoint: qpos 7 维，qvel 6 维\n",[25,104843,104841],{"__ignoreMap":23},[380,104845,104847,101231,104849,104851],{"id":104846},"mj_step-和-mj_forward-的区别",[25,104848,101428],{},[25,104850,104463],{}," 的区别",[543,104853,104854,104867],{},[546,104855,104856],{},[549,104857,104858,104861,104864],{},[552,104859,104860],{"align":23998},"函数",[552,104862,104863],{"align":23998},"是否推进时间",[552,104865,104866],{"align":23998},"什么时候用",[590,104868,104869,104882],{},[549,104870,104871,104876,104879],{},[595,104872,104873],{"align":23998},[25,104874,104875],{},"mj_step(model, data)",[595,104877,104878],{"align":23998},"是",[595,104880,104881],{"align":23998},"正常仿真循环，每调用一次前进一步",[549,104883,104884,104889,104892],{},[595,104885,104886],{"align":23998},[25,104887,104888],{},"mj_forward(model, data)",[595,104890,104891],{"align":23998},"否",[595,104893,104894,104895,617,104897,104899],{"align":23998},"手动改了 ",[25,104896,104243],{},[25,104898,104573],{}," 后，刷新派生量",[14,104901,104902],{},"例如你写：",[18,104904,104906],{"className":20,"code":104905,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\n",[25,104907,104908],{"__ignoreMap":23},[28,104909,104910,104913,104915,104917,104919],{"class":30,"line":31},[28,104911,104912],{"class":38},"data.qpos[",[28,104914,211],{"class":60},[28,104916,4705],{"class":38},[28,104918,54],{"class":34},[28,104920,104921],{"class":60}," 2.0\n",[14,104923,104924],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[18,104926,104927],{"className":20,"code":104756,"language":22,"meta":23,"style":23},[25,104928,104929],{"__ignoreMap":23},[28,104930,104931],{"class":30,"line":31},[28,104932,104756],{"class":38},[380,104934,104936],{"id":104935},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104938,104939,104942,104943,104945],{},[25,104940,104941],{},"mujoco.mj_resetData(model, data)"," 会把 ",[25,104944,33657],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[18,104947,104949],{"className":20,"code":104948,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[25,104950,104951,104955,104965,104975],{"__ignoreMap":23},[28,104952,104953],{"class":30,"line":31},[28,104954,104739],{"class":38},[28,104956,104957,104960,104962],{"class":30,"line":48},[28,104958,104959],{"class":38},"data.qpos[:] ",[28,104961,54],{"class":34},[28,104963,104964],{"class":38}," random_qpos\n",[28,104966,104967,104970,104972],{"class":30,"line":84},[28,104968,104969],{"class":38},"data.qvel[:] ",[28,104971,54],{"class":34},[28,104973,104974],{"class":60}," 0.0\n",[28,104976,104977],{"class":30,"line":91},[28,104978,104756],{"class":38},[351,104980,101466],{"id":101465},[18,104982,104984],{"className":20,"code":104983,"language":22,"meta":23,"style":23},"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",[25,104985,104986,104992,105002,105006,105010,105018,105023,105027,105031,105035,105040,105044,105049,105054,105059,105063,105067,105071,105075,105079,105083,105102,105109,105121,105132,105148,105164,105168,105172,105184,105196,105204,105208,105219,105223,105239,105243,105247,105256,105260,105265,105274,105278,105291,105296,105305,105309,105313,105325],{"__ignoreMap":23},[28,104987,104988,104990],{"class":30,"line":31},[28,104989,35],{"class":34},[28,104991,101514],{"class":38},[28,104993,104994,104996,104998,105000],{"class":30,"line":48},[28,104995,35],{"class":34},[28,104997,39],{"class":38},[28,104999,42],{"class":34},[28,105001,45],{"class":38},[28,105003,105004],{"class":30,"line":84},[28,105005,2662],{"emptyLinePlaceholder":336},[28,105007,105008],{"class":30,"line":91},[28,105009,2662],{"emptyLinePlaceholder":336},[28,105011,105012,105014,105016],{"class":30,"line":97},[28,105013,101527],{"class":60},[28,105015,13826],{"class":34},[28,105017,101532],{"class":127},[28,105019,105020],{"class":30,"line":103},[28,105021,105022],{"class":127},"\u003Cmujoco model=\"state_api\">\n",[28,105024,105025],{"class":30,"line":109},[28,105026,101542],{"class":127},[28,105028,105029],{"class":30,"line":118},[28,105030,2662],{"emptyLinePlaceholder":336},[28,105032,105033],{"class":30,"line":124},[28,105034,101551],{"class":127},[28,105036,105037],{"class":30,"line":131},[28,105038,105039],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[28,105041,105042],{"class":30,"line":137},[28,105043,2662],{"emptyLinePlaceholder":336},[28,105045,105046],{"class":30,"line":143},[28,105047,105048],{"class":127},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[28,105050,105051],{"class":30,"line":149},[28,105052,105053],{"class":127},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[28,105055,105056],{"class":30,"line":1890},[28,105057,105058],{"class":127},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[28,105060,105061],{"class":30,"line":1904},[28,105062,101580],{"class":127},[28,105064,105065],{"class":30,"line":1909},[28,105066,101585],{"class":127},[28,105068,105069],{"class":30,"line":1915},[28,105070,101590],{"class":127},[28,105072,105073],{"class":30,"line":1936},[28,105074,95950],{"class":127},[28,105076,105077],{"class":30,"line":1941},[28,105078,2662],{"emptyLinePlaceholder":336},[28,105080,105081],{"class":30,"line":1955},[28,105082,2662],{"emptyLinePlaceholder":336},[28,105084,105085,105087,105090,105093,105095,105098,105100],{"class":30,"line":1960},[28,105086,32203],{"class":34},[28,105088,105089],{"class":2225}," print_state",[28,105091,105092],{"class":38},"(prefix: ",[28,105094,1567],{"class":60},[28,105096,105097],{"class":38},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,105099,95938],{"class":60},[28,105101,4001],{"class":38},[28,105103,105104,105106],{"class":30,"line":1989},[28,105105,31559],{"class":60},[28,105107,105108],{"class":38},"(prefix)\n",[28,105110,105111,105113,105115,105118],{"class":30,"line":1994},[28,105112,31559],{"class":60},[28,105114,413],{"class":38},[28,105116,105117],{"class":127},"\"  timestep:\"",[28,105119,105120],{"class":38},", model.opt.timestep)\n",[28,105122,105123,105125,105127,105130],{"class":30,"line":2011},[28,105124,31559],{"class":60},[28,105126,413],{"class":38},[28,105128,105129],{"class":127},"\"  time:\"",[28,105131,101691],{"class":38},[28,105133,105134,105136,105138,105141,105144,105146],{"class":30,"line":2016},[28,105135,31559],{"class":60},[28,105137,413],{"class":38},[28,105139,105140],{"class":127},"\"  qpos:\"",[28,105142,105143],{"class":38},", np.round(data.qpos.copy(), ",[28,105145,73],{"class":60},[28,105147,30757],{"class":38},[28,105149,105150,105152,105154,105157,105160,105162],{"class":30,"line":2021},[28,105151,31559],{"class":60},[28,105153,413],{"class":38},[28,105155,105156],{"class":127},"\"  qvel:\"",[28,105158,105159],{"class":38},", np.round(data.qvel.copy(), ",[28,105161,73],{"class":60},[28,105163,30757],{"class":38},[28,105165,105166],{"class":30,"line":2026},[28,105167,2662],{"emptyLinePlaceholder":336},[28,105169,105170],{"class":30,"line":2040},[28,105171,2662],{"emptyLinePlaceholder":336},[28,105173,105174,105176,105178,105180,105182],{"class":30,"line":2045},[28,105175,32203],{"class":34},[28,105177,2235],{"class":2225},[28,105179,101611],{"class":38},[28,105181,95938],{"class":60},[28,105183,4001],{"class":38},[28,105185,105186,105188,105190,105192,105194],{"class":30,"line":2839},[28,105187,101620],{"class":38},[28,105189,54],{"class":34},[28,105191,101625],{"class":38},[28,105193,101527],{"class":60},[28,105195,81],{"class":38},[28,105197,105198,105200,105202],{"class":30,"line":2853},[28,105199,101634],{"class":38},[28,105201,54],{"class":34},[28,105203,101639],{"class":38},[28,105205,105206],{"class":30,"line":2861},[28,105207,2662],{"emptyLinePlaceholder":336},[28,105209,105210,105213,105216],{"class":30,"line":2866},[28,105211,105212],{"class":38},"    print_state(",[28,105214,105215],{"class":127},"\"initial\"",[28,105217,105218],{"class":38},", model, data)\n",[28,105220,105221],{"class":30,"line":2872},[28,105222,2662],{"emptyLinePlaceholder":336},[28,105224,105225,105227,105229,105231,105233,105235,105237],{"class":30,"line":2878},[28,105226,3463],{"class":34},[28,105228,101714],{"class":38},[28,105230,26306],{"class":34},[28,105232,32699],{"class":60},[28,105234,413],{"class":38},[28,105236,1054],{"class":60},[28,105238,31046],{"class":38},[28,105240,105241],{"class":30,"line":2883},[28,105242,101729],{"class":38},[28,105244,105245],{"class":30,"line":8210},[28,105246,2662],{"emptyLinePlaceholder":336},[28,105248,105249,105251,105254],{"class":30,"line":8234},[28,105250,105212],{"class":38},[28,105252,105253],{"class":127},"\"after 50 steps\"",[28,105255,105218],{"class":38},[28,105257,105258],{"class":30,"line":8239},[28,105259,2662],{"emptyLinePlaceholder":336},[28,105261,105262],{"class":30,"line":8245},[28,105263,105264],{"class":38},"    mujoco.mj_resetData(model, data)\n",[28,105266,105267,105269,105272],{"class":30,"line":8272},[28,105268,105212],{"class":38},[28,105270,105271],{"class":127},"\"after reset\"",[28,105273,105218],{"class":38},[28,105275,105276],{"class":30,"line":8277},[28,105277,2662],{"emptyLinePlaceholder":336},[28,105279,105280,105283,105285,105287,105289],{"class":30,"line":8283},[28,105281,105282],{"class":38},"    data.qpos[",[28,105284,211],{"class":60},[28,105286,4705],{"class":38},[28,105288,54],{"class":34},[28,105290,104921],{"class":60},[28,105292,105293],{"class":30,"line":8295},[28,105294,105295],{"class":38},"    mujoco.mj_forward(model, data)\n",[28,105297,105298,105300,105303],{"class":30,"line":8307},[28,105299,105212],{"class":38},[28,105301,105302],{"class":127},"\"after manual qpos edit\"",[28,105304,105218],{"class":38},[28,105306,105307],{"class":30,"line":8319},[28,105308,2662],{"emptyLinePlaceholder":336},[28,105310,105311],{"class":30,"line":9978},[28,105312,2662],{"emptyLinePlaceholder":336},[28,105314,105315,105317,105319,105321,105323],{"class":30,"line":10003},[28,105316,1796],{"class":34},[28,105318,31480],{"class":60},[28,105320,101772],{"class":34},[28,105322,101775],{"class":127},[28,105324,4001],{"class":38},[28,105326,105327],{"class":30,"line":10026},[28,105328,101782],{"class":38},[14,105330,103783],{},[18,105332,105334],{"className":24084,"code":105333,"language":24086,"meta":23,"style":23},"touch ch3_python_state.py\n",[25,105335,105336],{"__ignoreMap":23},[28,105337,105338,105340],{"class":30,"line":31},[28,105339,101496],{"class":2225},[28,105341,105342],{"class":127}," ch3_python_state.py\n",[14,105344,102514],{},[18,105346,105348],{"className":24084,"code":105347,"language":24086,"meta":23,"style":23},"python ch3_python_state.py\n",[25,105349,105350],{"__ignoreMap":23},[28,105351,105352,105354],{"class":30,"line":31},[28,105353,22],{"class":2225},[28,105355,105342],{"class":127},[380,105357,101785],{"id":101785},[14,105359,105360],{},"打印状态的函数：",[18,105362,105364],{"className":20,"code":105363,"language":22,"meta":23,"style":23},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[25,105365,105366],{"__ignoreMap":23},[28,105367,105368,105370,105372,105374,105376,105378,105380],{"class":30,"line":31},[28,105369,32203],{"class":34},[28,105371,105089],{"class":2225},[28,105373,105092],{"class":38},[28,105375,1567],{"class":60},[28,105377,105097],{"class":38},[28,105379,95938],{"class":60},[28,105381,4001],{"class":38},[14,105383,105384,105385,105387],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[25,105386,33657],{}," 里发生了什么。",[14,105389,105390],{},"推进 50 步：",[18,105392,105394],{"className":20,"code":105393,"language":22,"meta":23,"style":23},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[25,105395,105396,105412],{"__ignoreMap":23},[28,105397,105398,105400,105402,105404,105406,105408,105410],{"class":30,"line":31},[28,105399,3287],{"class":34},[28,105401,101714],{"class":38},[28,105403,26306],{"class":34},[28,105405,32699],{"class":60},[28,105407,413],{"class":38},[28,105409,1054],{"class":60},[28,105411,31046],{"class":38},[28,105413,105414],{"class":30,"line":48},[28,105415,101912],{"class":38},[14,105417,105418,105419,105422,105423,105425],{},"由于 ",[25,105420,105421],{},"timestep=0.01","，所以 50 步后时间约为 ",[25,105424,35585],{}," 秒。",[14,105427,105428],{},"重置：",[18,105430,105431],{"className":20,"code":104739,"language":22,"meta":23,"style":23},[25,105432,105433],{"__ignoreMap":23},[28,105434,105435],{"class":30,"line":31},[28,105436,104739],{"class":38},[14,105438,105439],{},"这会把时间、位置、速度恢复到初始状态。",[14,105441,105442],{},"手动改高度：",[18,105444,105446],{"className":20,"code":105445,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[25,105447,105448,105460],{"__ignoreMap":23},[28,105449,105450,105452,105454,105456,105458],{"class":30,"line":31},[28,105451,104912],{"class":38},[28,105453,211],{"class":60},[28,105455,4705],{"class":38},[28,105457,54],{"class":34},[28,105459,104921],{"class":60},[28,105461,105462],{"class":30,"line":48},[28,105463,104756],{"class":38},[14,105465,105466,105467,105470,105471,105474],{},"这个例子里 ",[25,105468,105469],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[25,105472,105473],{},"2.0"," 表示把小球放到更高的位置。",[380,105476,101921],{"id":101921},[18,105478,105479],{"className":20,"code":105363,"language":22,"meta":23,"style":23},[25,105480,105481],{"__ignoreMap":23},[28,105482,105483,105485,105487,105489,105491,105493,105495],{"class":30,"line":31},[28,105484,32203],{"class":34},[28,105486,105089],{"class":2225},[28,105488,105092],{"class":38},[28,105490,1567],{"class":60},[28,105492,105097],{"class":38},[28,105494,95938],{"class":60},[28,105496,4001],{"class":38},[14,105498,105499],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[363,105501,105502,105511,105516],{},[366,105503,105504,105507,105508,105510],{},[25,105505,105506],{},"prefix","：一段文字，比如 ",[25,105509,105215],{},"，用来说明现在打印的是哪个阶段。",[366,105512,105513,105515],{},[25,105514,102298],{},"：MuJoCo 模型。",[366,105517,105518,105520],{},[25,105519,33657],{},"：MuJoCo 当前状态。",[14,105522,105523,617,105526,105529],{},[25,105524,105525],{},"prefix: str",[25,105527,105528],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[18,105531,105533],{"className":20,"code":105532,"language":22,"meta":23,"style":23},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[25,105534,105535],{"__ignoreMap":23},[28,105536,105537,105539,105541,105543,105545,105547],{"class":30,"line":31},[28,105538,30675],{"class":60},[28,105540,413],{"class":38},[28,105542,105140],{"class":127},[28,105544,105143],{"class":38},[28,105546,73],{"class":60},[28,105548,30757],{"class":38},[14,105550,105551,105554],{},[25,105552,105553],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[18,105556,105558],{"className":20,"code":105557,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[25,105559,105560,105572],{"__ignoreMap":23},[28,105561,105562,105564,105566,105568,105570],{"class":30,"line":31},[28,105563,101847],{"class":38},[28,105565,54],{"class":34},[28,105567,101625],{"class":38},[28,105569,101527],{"class":60},[28,105571,81],{"class":38},[28,105573,105574,105576,105578],{"class":30,"line":48},[28,105575,101871],{"class":38},[28,105577,54],{"class":34},[28,105579,101639],{"class":38},[14,105581,105582],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[18,105584,105586],{"className":20,"code":105585,"language":22,"meta":23,"style":23},"print_state(\"initial\", model, data)\n",[25,105587,105588],{"__ignoreMap":23},[28,105589,105590,105593,105595],{"class":30,"line":31},[28,105591,105592],{"class":38},"print_state(",[28,105594,105215],{"class":127},[28,105596,105218],{"class":38},[14,105598,105599,105600,105603],{},"调用刚才定义的 ",[25,105601,105602],{},"print_state"," 函数，打印初始状态。",[18,105605,105606],{"className":20,"code":105393,"language":22,"meta":23,"style":23},[25,105607,105608,105624],{"__ignoreMap":23},[28,105609,105610,105612,105614,105616,105618,105620,105622],{"class":30,"line":31},[28,105611,3287],{"class":34},[28,105613,101714],{"class":38},[28,105615,26306],{"class":34},[28,105617,32699],{"class":60},[28,105619,413],{"class":38},[28,105621,1054],{"class":60},[28,105623,31046],{"class":38},[28,105625,105626],{"class":30,"line":48},[28,105627,101912],{"class":38},[14,105629,105630],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[18,105632,105633],{"className":20,"code":104739,"language":22,"meta":23,"style":23},[25,105634,105635],{"__ignoreMap":23},[28,105636,105637],{"class":30,"line":31},[28,105638,104739],{"class":38},[14,105640,105641,105642,105644,105645,105647],{},"重置 ",[25,105643,33657],{},"。注意它不会重新创建 ",[25,105646,102298],{},"，因为模型结构没有变，只是状态回到初始值。",[18,105649,105650],{"className":20,"code":104905,"language":22,"meta":23,"style":23},[25,105651,105652],{"__ignoreMap":23},[28,105653,105654,105656,105658,105660,105662],{"class":30,"line":31},[28,105655,104912],{"class":38},[28,105657,211],{"class":60},[28,105659,4705],{"class":38},[28,105661,54],{"class":34},[28,105663,104921],{"class":60},[14,105665,105666,105667,617,105670,617,105673,105675],{},"这行是“手动改状态”。在 freejoint 中，",[25,105668,105669],{},"qpos[0]",[25,105671,105672],{},"qpos[1]",[25,105674,105469],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[18,105677,105678],{"className":20,"code":104756,"language":22,"meta":23,"style":23},[25,105679,105680],{"__ignoreMap":23},[28,105681,105682],{"class":30,"line":31},[28,105683,104756],{"class":38},[14,105685,105686,105687,105689,105690,105692],{},"手动改完 ",[25,105688,104243],{}," 后，调用 ",[25,105691,104463],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[351,105694,102529],{"id":102528},[14,105696,105697],{},"你会看到:",[363,105699,105700,105705,105710,105713],{},[366,105701,105702,105703],{},"初始时间为 ",[25,105704,244],{},[366,105706,105707,105708],{},"50 步后时间约为 ",[25,105709,35585],{},[366,105711,105712],{},"reset 后状态恢复",[366,105714,105715,105716,105719,105720],{},"手动修改 ",[25,105717,105718],{},"data.qpos[2]"," 后，小球高度变为 ",[25,105721,105473],{},[14,105723,105724,105726],{},[25,105725,105469],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105728,105729],{},"输出里可以重点看三件事：",[363,105731,105732,105740,105745],{},[366,105733,105734,105736,105737,105739],{},[25,105735,2649],{}," 是否随着 ",[25,105738,101428],{}," 增加。",[366,105741,105742,105744],{},[25,105743,104243],{}," 的 z 坐标是否因为下落而变化。",[366,105746,105747,105749,105750,28648],{},[25,105748,104565],{}," 后时间是否回到 ",[25,105751,244],{},[351,105753,102561],{"id":102560},[363,105755,105756,105762,105768,105774,105777,105786],{},[366,105757,105758,105759,28648],{},"修改 timestep 为 ",[25,105760,105761],{},"0.005",[366,105763,105764,105765,28648],{},"重新运行，检查 50 步后时间是否约为 ",[25,105766,105767],{},"0.25",[366,105769,105770,105771,28648],{},"修改重力为 ",[25,105772,105773],{},"0 0 -1.0",[366,105775,105776],{},"观察小球下降速度是否变慢。",[366,105778,102624,105779,102627,105782,105785],{},[25,105780,105781],{},"data.qpos[2] = 2.0",[25,105783,105784],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[366,105787,105788,105789,105792],{},"注释掉 ",[25,105790,105791],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[351,105794,102666],{"id":102665},[380,105796,105798,105799,105801],{"id":105797},"修改-dataqpos-后位置没有更新","修改 ",[25,105800,101283],{}," 后位置没有更新",[14,105803,102675],{},[18,105805,105806],{"className":20,"code":104756,"language":22,"meta":23,"style":23},[25,105807,105808],{"__ignoreMap":23},[28,105809,105810],{"class":30,"line":31},[28,105811,104756],{"class":38},[380,105813,105814],{"id":105814},"数组维度看不懂",[14,105816,105817],{},"打印模型维度:",[18,105819,105821],{"className":20,"code":105820,"language":22,"meta":23,"style":23},"print(model.nq, model.nv, model.nu)\n",[25,105822,105823],{"__ignoreMap":23},[28,105824,105825,105827],{"class":30,"line":31},[28,105826,30675],{"class":60},[28,105828,105829],{"class":38},"(model.nq, model.nv, model.nu)\n",[543,105831,105832,105840],{},[546,105833,105834],{},[549,105835,105836,105838],{},[552,105837,104787],{"align":23998},[552,105839,100913],{"align":23998},[590,105841,105842,105852,105862],{},[549,105843,105844,105849],{},[595,105845,105846],{"align":23998},[25,105847,105848],{},"nq",[595,105850,105851],{"align":23998},"位置变量数量",[549,105853,105854,105859],{},[595,105855,105856],{"align":23998},[25,105857,105858],{},"nv",[595,105860,105861],{"align":23998},"速度变量数量",[549,105863,105864,105868],{},[595,105865,105866],{"align":23998},[25,105867,102375],{},[595,105869,105870],{"align":23998},"控制输入数量",[380,105872,105874,105875,105877],{"id":105873},"误以为-qpos-一定等于关节数","误以为 ",[25,105876,104243],{}," 一定等于关节数",[14,105879,105880,105881,82786,105883,105885,105886,105888],{},"不是。例如 ",[25,105882,101833],{},[25,105884,104243],{}," 是 7 维，但 ",[25,105887,104573],{}," 是 6 维。",[380,105890,105892,105893,105895],{"id":105891},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[25,105894,104243],{}," 的第几位",[14,105897,105898],{},"初学时可以先打印：",[18,105900,105902],{"className":20,"code":105901,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[25,105903,105904,105914,105924,105936],{"__ignoreMap":23},[28,105905,105906,105908,105910,105912],{"class":30,"line":31},[28,105907,30675],{"class":60},[28,105909,413],{"class":38},[28,105911,101652],{"class":127},[28,105913,101655],{"class":38},[28,105915,105916,105918,105920,105922],{"class":30,"line":48},[28,105917,30675],{"class":60},[28,105919,413],{"class":38},[28,105921,101664],{"class":127},[28,105923,101667],{"class":38},[28,105925,105926,105928,105930,105933],{"class":30,"line":84},[28,105927,30675],{"class":60},[28,105929,413],{"class":38},[28,105931,105932],{"class":127},"\"qpos:\"",[28,105934,105935],{"class":38},", data.qpos)\n",[28,105937,105938,105940,105942,105945],{"class":30,"line":91},[28,105939,30675],{"class":60},[28,105941,413],{"class":38},[28,105943,105944],{"class":127},"\"qvel:\"",[28,105946,105947],{"class":38},", data.qvel)\n",[14,105949,105950],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[380,105952,105953],{"id":105953},"仿真结果每次都一样",[14,105955,105956,105957,105959],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[25,105958,104243],{},"、目标点或控制输入。",[351,105961,102820],{"id":102819},[14,105963,105964,105965,24881],{},"Python 控制 MuJoCo 的核心就是读写 ",[25,105966,33657],{},[363,105968,105969,105977,105982,105987],{},[366,105970,105971,105972,101231,105974,105976],{},"用 ",[25,105973,101283],{},[25,105975,101286],{}," 读取状态。",[366,105978,105971,105979,105981],{},[25,105980,101289],{}," 写入控制。",[366,105983,105971,105984,105986],{},[25,105985,101428],{}," 推进时间。",[366,105988,105989,105990,105992],{},"手动改状态后用 ",[25,105991,104463],{}," 刷新派生量。",[14,105994,105995],{},"理解这一章后，就可以进入关节和 actuator 控制。",[328,105997,105998],{},"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":23,"searchDepth":48,"depth":48,"links":106000},[106001,106002,106003,106010,106014,106015,106016,106026],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":106004},[106005,106007,106009],{"id":104768,"depth":84,"text":106006},"qpos、qvel、ctrl 是什么",{"id":104846,"depth":84,"text":106008},"mj_step 和 mj_forward 的区别",{"id":104935,"depth":84,"text":104936},{"id":101465,"depth":48,"text":101466,"children":106011},[106012,106013],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":106017},[106018,106020,106021,106023,106025],{"id":105797,"depth":84,"text":106019},"修改 data.qpos 后位置没有更新",{"id":105814,"depth":84,"text":105814},{"id":105873,"depth":84,"text":106022},"误以为 qpos 一定等于关节数",{"id":105891,"depth":84,"text":106024},"不知道某个元素在 qpos 的第几位",{"id":105953,"depth":84,"text":105953},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104531,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106033,"title":106034,"body":106035,"description":23,"extension":334,"meta":107725,"navigation":336,"path":107726,"seo":107727,"stem":107728,"__hash__":107729},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106036,"toc":107701},[106037,106040,106042,106045,106047,106072,106075,106094,106097,106099,106101,106125,106127,106141,106143,106184,106186,106210,106212,106215,106249,106251,106264,106267,106335,106344,106348,106351,106385,106391,106394,106398,106437,106440,106460,106464,106507,106509,106538,106541,106547,106550,106552,106946,106948,106960,106962,106973,106975,106978,107007,107015,107018,107053,107056,107058,107066,107069,107071,107082,107092,107112,107115,107151,107163,107211,107230,107272,107285,107313,107318,107339,107349,107367,107370,107404,107407,107427,107430,107449,107455,107457,107460,107466,107472,107482,107485,107491,107500,107502,107548,107550,107556,107562,107565,107568,107588,107591,107597,107603,107605,107628,107631,107634,107643,107646,107684,107686,107689,107695,107698],[10,106038,106034],{"id":106039},"_4关节actuator-与力控制",[351,106041,100860],{"id":100859},[14,106043,106044],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106046,104544],{},[363,106048,106049,106055,106060,106064,106069],{},[366,106050,106051,106054],{},[25,106052,106053],{},"hinge"," 关节",[366,106056,106057],{},[25,106058,106059],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[366,106061,106062],{},[25,106063,101289],{},[366,106065,106066],{},[25,106067,106068],{},"ctrlrange",[366,106070,106071],{},"读取关节角和角速度",[14,106073,106074],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[18,106076,106078],{"className":20,"code":106077,"language":22,"meta":23,"style":23},"data.ctrl[0] = ...\n",[25,106079,106080],{"__ignoreMap":23},[28,106081,106082,106085,106087,106089,106091],{"class":30,"line":31},[28,106083,106084],{"class":38},"data.ctrl[",[28,106086,244],{"class":60},[28,106088,4705],{"class":38},[28,106090,54],{"class":34},[28,106092,106093],{"class":60}," ...\n",[14,106095,106096],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[351,106098,100983],{"id":100982},[14,106100,100986],{},[18,106102,106103],{"className":24084,"code":104601,"language":24086,"meta":23,"style":23},[25,106104,106105],{"__ignoreMap":23},[28,106106,106107,106109,106111,106113,106115,106117,106119,106121,106123],{"class":30,"line":31},[28,106108,24839],{"class":2225},[28,106110,26578],{"class":127},[28,106112,24096],{"class":127},[28,106114,26663],{"class":60},[28,106116,104616],{"class":127},[28,106118,101011],{"class":127},[28,106120,102714],{"class":127},[28,106122,101027],{"class":127},[28,106124,104625],{"class":127},[14,106126,103032],{},[18,106128,106129],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},[25,106130,106131],{"__ignoreMap":23},[28,106132,106133,106135,106137,106139],{"class":30,"line":31},[28,106134,24093],{"class":2225},[28,106136,24096],{"class":127},[28,106138,101143],{"class":127},[28,106140,101146],{"class":127},[14,106142,103049],{},[18,106144,106146],{"className":24084,"code":106145,"language":24086,"meta":23,"style":23},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[25,106147,106148,106165,106174],{"__ignoreMap":23},[28,106149,106150,106152,106154,106156,106159,106161,106163],{"class":30,"line":31},[28,106151,30593],{"class":2225},[28,106153,29439],{"class":127},[28,106155,25378],{"class":60},[28,106157,106158],{"class":127}," mujoco-control",[28,106160,101188],{"class":127},[28,106162,101191],{"class":60},[28,106164,101194],{"class":60},[28,106166,106167,106169,106171],{"class":30,"line":48},[28,106168,30593],{"class":2225},[28,106170,101201],{"class":127},[28,106172,106173],{"class":127}," mujoco-control\n",[28,106175,106176,106178,106180,106182],{"class":30,"line":84},[28,106177,24093],{"class":2225},[28,106179,24096],{"class":127},[28,106181,101143],{"class":127},[28,106183,101146],{"class":127},[14,106185,101217],{},[363,106187,106188,106194,106201,106207],{},[366,106189,106190,106193],{},[25,106191,106192],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[366,106195,106196,106198,106199,28648],{},[25,106197,101289],{}," 长度等于 ",[25,106200,102371],{},[366,106202,82478,106203,106206],{},[25,106204,106205],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[366,106208,106209],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[351,106211,101258],{"id":101257},[14,106213,106214],{},"关节决定 body 如何运动:",[18,106216,106218],{"className":53323,"code":106217,"language":53325,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,106219,106220],{"__ignoreMap":23},[28,106221,106222,106224,106226,106228,106230,106233,106235,106237,106239,106242,106244,106247],{"class":30,"line":31},[28,106223,1307],{"class":38},[28,106225,103169],{"class":51556},[28,106227,15182],{"class":2225},[28,106229,54],{"class":38},[28,106231,106232],{"class":127},"\"hinge\"",[28,106234,54080],{"class":2225},[28,106236,54],{"class":38},[28,106238,106232],{"class":127},[28,106240,106241],{"class":2225}," axis",[28,106243,54],{"class":38},[28,106245,106246],{"class":127},"\"0 1 0\"",[28,106248,101357],{"class":38},[14,106250,103265],{},[363,106252,106253,106258,106261],{},[366,106254,106255,106256],{},"名字是 ",[25,106257,106053],{},[366,106259,106260],{},"类型是旋转关节",[366,106262,106263],{},"绕 y 轴旋转",[14,106265,106266],{},"actuator 决定如何施加控制:",[18,106268,106270],{"className":53323,"code":106269,"language":53325,"meta":23,"style":23},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[25,106271,106272,106281,106327],{"__ignoreMap":23},[28,106273,106274,106276,106279],{"class":30,"line":31},[28,106275,1307],{"class":38},[28,106277,106278],{"class":51556},"actuator",[28,106280,51563],{"class":38},[28,106282,106283,106285,106288,106290,106292,106295,106298,106300,106302,106305,106307,106309,106312,106314,106317,106320,106322,106325],{"class":30,"line":48},[28,106284,52400],{"class":38},[28,106286,106287],{"class":51556},"motor",[28,106289,15182],{"class":2225},[28,106291,54],{"class":38},[28,106293,106294],{"class":127},"\"hinge_motor\"",[28,106296,106297],{"class":2225}," joint",[28,106299,54],{"class":38},[28,106301,106232],{"class":127},[28,106303,106304],{"class":2225}," gear",[28,106306,54],{"class":38},[28,106308,3940],{"class":127},[28,106310,106311],{"class":2225}," ctrlrange",[28,106313,54],{"class":38},[28,106315,106316],{"class":127},"\"-2 2\"",[28,106318,106319],{"class":2225}," ctrllimited",[28,106321,54],{"class":38},[28,106323,106324],{"class":127},"\"true\"",[28,106326,101357],{"class":38},[28,106328,106329,106331,106333],{"class":30,"line":84},[28,106330,52041],{"class":38},[28,106332,106278],{"class":51556},[28,106334,51563],{"class":38},[14,106336,106337,106340,106341,28648],{},[25,106338,106339],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[25,106342,106343],{},"[-2, 2]",[380,106345,106347],{"id":106346},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106349,106350],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[543,106352,106353,106363],{},[546,106354,106355],{},[549,106356,106357,106359,106361],{},[552,106358,26016],{"align":23998},[552,106360,102909],{"align":23998},[552,106362,100947],{"align":23998},[590,106364,106365,106375],{},[549,106366,106367,106369,106372],{},[595,106368,103169],{"align":23998},[595,106370,106371],{"align":23998},"定义能怎么动",[595,106373,106374],{"align":23998},"门轴允许门旋转",[549,106376,106377,106379,106382],{},[595,106378,106278],{"align":23998},[595,106380,106381],{"align":23998},"定义怎么施力或控制",[595,106383,106384],{"align":23998},"人推门、马达带动门",[14,106386,106387,106388,106390],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[25,106389,101289],{}," 主动控制它。",[14,106392,106393],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[380,106395,106397],{"id":106396},"hinge-joint","hinge joint",[18,106399,106401],{"className":53323,"code":106400,"language":53325,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106402,106403],{"__ignoreMap":23},[28,106404,106405,106407,106409,106411,106413,106415,106417,106419,106421,106423,106425,106427,106430,106432,106435],{"class":30,"line":31},[28,106406,1307],{"class":38},[28,106408,103169],{"class":51556},[28,106410,15182],{"class":2225},[28,106412,54],{"class":38},[28,106414,106232],{"class":127},[28,106416,54080],{"class":2225},[28,106418,54],{"class":38},[28,106420,106232],{"class":127},[28,106422,106241],{"class":2225},[28,106424,54],{"class":38},[28,106426,106246],{"class":127},[28,106428,106429],{"class":2225}," damping",[28,106431,54],{"class":38},[28,106433,106434],{"class":127},"\"0.1\"",[28,106436,101357],{"class":38},[14,106438,106439],{},"含义：",[363,106441,106442,106448,106454],{},[366,106443,106444,106447],{},[25,106445,106446],{},"type=\"hinge\"","：只能绕一个轴旋转。",[366,106449,106450,106453],{},[25,106451,106452],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[366,106455,106456,106459],{},[25,106457,106458],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[380,106461,106463],{"id":106462},"motor-actuator","motor actuator",[18,106465,106467],{"className":53323,"code":106466,"language":53325,"meta":23,"style":23},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106468,106469],{"__ignoreMap":23},[28,106470,106471,106473,106475,106477,106479,106481,106483,106485,106487,106489,106491,106493,106495,106497,106499,106501,106503,106505],{"class":30,"line":31},[28,106472,1307],{"class":38},[28,106474,106287],{"class":51556},[28,106476,15182],{"class":2225},[28,106478,54],{"class":38},[28,106480,106294],{"class":127},[28,106482,106297],{"class":2225},[28,106484,54],{"class":38},[28,106486,106232],{"class":127},[28,106488,106304],{"class":2225},[28,106490,54],{"class":38},[28,106492,3940],{"class":127},[28,106494,106311],{"class":2225},[28,106496,54],{"class":38},[28,106498,106316],{"class":127},[28,106500,106319],{"class":2225},[28,106502,54],{"class":38},[28,106504,106324],{"class":127},[28,106506,101357],{"class":38},[14,106508,106439],{},[363,106510,106511,106520,106526,106532],{},[366,106512,106513,106516,106517,106519],{},[25,106514,106515],{},"joint=\"hinge\"","：这个电机作用在名为 ",[25,106518,106053],{}," 的关节上。",[366,106521,106522,106525],{},[25,106523,106524],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[366,106527,106528,106531],{},[25,106529,106530],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[366,106533,106534,106537],{},[25,106535,106536],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106539,106540],{},"简单理解：",[18,106542,106545],{"className":106543,"code":106544,"language":5449,"meta":23},[5447],"实际施加效果 ≈ data.ctrl[0] * gear\n",[25,106546,106544],{"__ignoreMap":23},[14,106548,106549],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[351,106551,101466],{"id":101465},[18,106553,106555],{"className":20,"code":106554,"language":22,"meta":23,"style":23},"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",[25,106556,106557,106564,106568,106574,106584,106588,106592,106600,106605,106610,106614,106618,106623,106628,106632,106637,106642,106647,106652,106656,106660,106664,106669,106674,106679,106683,106687,106691,106695,106707,106719,106727,106731,106741,106751,106761,106765,106778,106791,106795,106812,106826,106861,106865,106869,106880,106895,106910,106922,106926,106930,106942],{"__ignoreMap":23},[28,106558,106559,106561],{"class":30,"line":31},[28,106560,35],{"class":34},[28,106562,106563],{"class":38}," math\n",[28,106565,106566],{"class":30,"line":48},[28,106567,2662],{"emptyLinePlaceholder":336},[28,106569,106570,106572],{"class":30,"line":84},[28,106571,35],{"class":34},[28,106573,101514],{"class":38},[28,106575,106576,106578,106580,106582],{"class":30,"line":91},[28,106577,35],{"class":34},[28,106579,39],{"class":38},[28,106581,42],{"class":34},[28,106583,45],{"class":38},[28,106585,106586],{"class":30,"line":97},[28,106587,2662],{"emptyLinePlaceholder":336},[28,106589,106590],{"class":30,"line":103},[28,106591,2662],{"emptyLinePlaceholder":336},[28,106593,106594,106596,106598],{"class":30,"line":109},[28,106595,101527],{"class":60},[28,106597,13826],{"class":34},[28,106599,101532],{"class":127},[28,106601,106602],{"class":30,"line":118},[28,106603,106604],{"class":127},"\u003Cmujoco model=\"one_link_motor\">\n",[28,106606,106607],{"class":30,"line":124},[28,106608,106609],{"class":127},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[28,106611,106612],{"class":30,"line":131},[28,106613,2662],{"emptyLinePlaceholder":336},[28,106615,106616],{"class":30,"line":137},[28,106617,101551],{"class":127},[28,106619,106620],{"class":30,"line":143},[28,106621,106622],{"class":127},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[28,106624,106625],{"class":30,"line":149},[28,106626,106627],{"class":127},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[28,106629,106630],{"class":30,"line":1890},[28,106631,2662],{"emptyLinePlaceholder":336},[28,106633,106634],{"class":30,"line":1904},[28,106635,106636],{"class":127},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[28,106638,106639],{"class":30,"line":1909},[28,106640,106641],{"class":127},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,106643,106644],{"class":30,"line":1915},[28,106645,106646],{"class":127},"        \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",[28,106648,106649],{"class":30,"line":1936},[28,106650,106651],{"class":127},"      \u003C\u002Fbody>\n",[28,106653,106654],{"class":30,"line":1941},[28,106655,101580],{"class":127},[28,106657,106658],{"class":30,"line":1955},[28,106659,101585],{"class":127},[28,106661,106662],{"class":30,"line":1960},[28,106663,2662],{"emptyLinePlaceholder":336},[28,106665,106666],{"class":30,"line":1989},[28,106667,106668],{"class":127},"  \u003Cactuator>\n",[28,106670,106671],{"class":30,"line":1994},[28,106672,106673],{"class":127},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[28,106675,106676],{"class":30,"line":2011},[28,106677,106678],{"class":127},"  \u003C\u002Factuator>\n",[28,106680,106681],{"class":30,"line":2016},[28,106682,101590],{"class":127},[28,106684,106685],{"class":30,"line":2021},[28,106686,95950],{"class":127},[28,106688,106689],{"class":30,"line":2026},[28,106690,2662],{"emptyLinePlaceholder":336},[28,106692,106693],{"class":30,"line":2040},[28,106694,2662],{"emptyLinePlaceholder":336},[28,106696,106697,106699,106701,106703,106705],{"class":30,"line":2045},[28,106698,32203],{"class":34},[28,106700,2235],{"class":2225},[28,106702,101611],{"class":38},[28,106704,95938],{"class":60},[28,106706,4001],{"class":38},[28,106708,106709,106711,106713,106715,106717],{"class":30,"line":2839},[28,106710,101620],{"class":38},[28,106712,54],{"class":34},[28,106714,101625],{"class":38},[28,106716,101527],{"class":60},[28,106718,81],{"class":38},[28,106720,106721,106723,106725],{"class":30,"line":2853},[28,106722,101634],{"class":38},[28,106724,54],{"class":34},[28,106726,101639],{"class":38},[28,106728,106729],{"class":30,"line":2861},[28,106730,2662],{"emptyLinePlaceholder":336},[28,106732,106733,106735,106737,106739],{"class":30,"line":2866},[28,106734,31559],{"class":60},[28,106736,413],{"class":38},[28,106738,101652],{"class":127},[28,106740,101655],{"class":38},[28,106742,106743,106745,106747,106749],{"class":30,"line":2872},[28,106744,31559],{"class":60},[28,106746,413],{"class":38},[28,106748,101664],{"class":127},[28,106750,101667],{"class":38},[28,106752,106753,106755,106757,106759],{"class":30,"line":2878},[28,106754,31559],{"class":60},[28,106756,413],{"class":38},[28,106758,101676],{"class":127},[28,106760,101679],{"class":38},[28,106762,106763],{"class":30,"line":2883},[28,106764,2662],{"emptyLinePlaceholder":336},[28,106766,106767,106769,106772,106774,106776],{"class":30,"line":8210},[28,106768,3363],{"class":34},[28,106770,106771],{"class":38}," model.nu ",[28,106773,21210],{"class":34},[28,106775,25381],{"class":60},[28,106777,4001],{"class":38},[28,106779,106780,106782,106784,106786,106789],{"class":30,"line":8234},[28,106781,103645],{"class":34},[28,106783,103648],{"class":60},[28,106785,413],{"class":38},[28,106787,106788],{"class":127},"\"expected exactly one actuator\"",[28,106790,81],{"class":38},[28,106792,106793],{"class":30,"line":8239},[28,106794,2662],{"emptyLinePlaceholder":336},[28,106796,106797,106799,106801,106803,106805,106807,106810],{"class":30,"line":8245},[28,106798,3463],{"class":34},[28,106800,31873],{"class":38},[28,106802,26306],{"class":34},[28,106804,32699],{"class":60},[28,106806,413],{"class":38},[28,106808,106809],{"class":60},"2000",[28,106811,31046],{"class":38},[28,106813,106814,106817,106819,106821,106823],{"class":30,"line":8272},[28,106815,106816],{"class":38},"        t ",[28,106818,54],{"class":34},[28,106820,31873],{"class":38},[28,106822,854],{"class":34},[28,106824,106825],{"class":38}," model.opt.timestep\n",[28,106827,106828,106831,106833,106835,106837,106840,106842,106845,106847,106849,106852,106854,106856,106858],{"class":30,"line":8277},[28,106829,106830],{"class":38},"        data.ctrl[",[28,106832,244],{"class":60},[28,106834,4705],{"class":38},[28,106836,54],{"class":34},[28,106838,106839],{"class":60}," 1.5",[28,106841,6780],{"class":34},[28,106843,106844],{"class":38}," math.sin(",[28,106846,105473],{"class":60},[28,106848,6780],{"class":34},[28,106850,106851],{"class":38}," math.pi ",[28,106853,854],{"class":34},[28,106855,62123],{"class":60},[28,106857,6780],{"class":34},[28,106859,106860],{"class":38}," t)\n",[28,106862,106863],{"class":30,"line":8283},[28,106864,101729],{"class":38},[28,106866,106867],{"class":30,"line":8295},[28,106868,2662],{"emptyLinePlaceholder":336},[28,106870,106871,106873,106875,106878],{"class":30,"line":8307},[28,106872,31559],{"class":60},[28,106874,413],{"class":38},[28,106876,106877],{"class":127},"\"time:\"",[28,106879,101691],{"class":38},[28,106881,106882,106884,106886,106889,106891,106893],{"class":30,"line":8319},[28,106883,31559],{"class":60},[28,106885,413],{"class":38},[28,106887,106888],{"class":127},"\"joint qpos:\"",[28,106890,105143],{"class":38},[28,106892,73],{"class":60},[28,106894,30757],{"class":38},[28,106896,106897,106899,106901,106904,106906,106908],{"class":30,"line":9978},[28,106898,31559],{"class":60},[28,106900,413],{"class":38},[28,106902,106903],{"class":127},"\"joint qvel:\"",[28,106905,105159],{"class":38},[28,106907,73],{"class":60},[28,106909,30757],{"class":38},[28,106911,106912,106914,106916,106919],{"class":30,"line":10003},[28,106913,31559],{"class":60},[28,106915,413],{"class":38},[28,106917,106918],{"class":127},"\"last ctrl:\"",[28,106920,106921],{"class":38},", data.ctrl.copy())\n",[28,106923,106924],{"class":30,"line":10026},[28,106925,2662],{"emptyLinePlaceholder":336},[28,106927,106928],{"class":30,"line":10050},[28,106929,2662],{"emptyLinePlaceholder":336},[28,106931,106932,106934,106936,106938,106940],{"class":30,"line":10055},[28,106933,1796],{"class":34},[28,106935,31480],{"class":60},[28,106937,101772],{"class":34},[28,106939,101775],{"class":127},[28,106941,4001],{"class":38},[28,106943,106944],{"class":30,"line":10060},[28,106945,101782],{"class":38},[14,106947,103783],{},[18,106949,106951],{"className":24084,"code":106950,"language":24086,"meta":23,"style":23},"touch ch4_joint_motor.py\n",[25,106952,106953],{"__ignoreMap":23},[28,106954,106955,106957],{"class":30,"line":31},[28,106956,101496],{"class":2225},[28,106958,106959],{"class":127}," ch4_joint_motor.py\n",[14,106961,102514],{},[18,106963,106965],{"className":24084,"code":106964,"language":24086,"meta":23,"style":23},"python ch4_joint_motor.py\n",[25,106966,106967],{"__ignoreMap":23},[28,106968,106969,106971],{"class":30,"line":31},[28,106970,22],{"class":2225},[28,106972,106959],{"class":127},[380,106974,101785],{"id":101785},[14,106976,106977],{},"检查 actuator 数量：",[18,106979,106981],{"className":20,"code":106980,"language":22,"meta":23,"style":23},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[25,106982,106983,106995],{"__ignoreMap":23},[28,106984,106985,106987,106989,106991,106993],{"class":30,"line":31},[28,106986,1796],{"class":34},[28,106988,106771],{"class":38},[28,106990,21210],{"class":34},[28,106992,25381],{"class":60},[28,106994,4001],{"class":38},[28,106996,106997,106999,107001,107003,107005],{"class":30,"line":48},[28,106998,104108],{"class":34},[28,107000,103648],{"class":60},[28,107002,413],{"class":38},[28,107004,106788],{"class":127},[28,107006,81],{"class":38},[14,107008,107009,107011,107012,107014],{},[25,107010,102371],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[25,107013,101289],{}," 长度应该是 1。",[14,107016,107017],{},"产生正弦控制信号：",[18,107019,107021],{"className":20,"code":107020,"language":22,"meta":23,"style":23},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[25,107022,107023],{"__ignoreMap":23},[28,107024,107025,107027,107029,107031,107033,107035,107037,107039,107041,107043,107045,107047,107049,107051],{"class":30,"line":31},[28,107026,106084],{"class":38},[28,107028,244],{"class":60},[28,107030,4705],{"class":38},[28,107032,54],{"class":34},[28,107034,106839],{"class":60},[28,107036,6780],{"class":34},[28,107038,106844],{"class":38},[28,107040,105473],{"class":60},[28,107042,6780],{"class":34},[28,107044,106851],{"class":38},[28,107046,854],{"class":34},[28,107048,62123],{"class":60},[28,107050,6780],{"class":34},[28,107052,106860],{"class":38},[14,107054,107055],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107057,101886],{},[18,107059,107060],{"className":20,"code":104718,"language":22,"meta":23,"style":23},[25,107061,107062],{"__ignoreMap":23},[28,107063,107064],{"class":30,"line":31},[28,107065,104718],{"class":38},[14,107067,107068],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[380,107070,101921],{"id":101921},[18,107072,107074],{"className":20,"code":107073,"language":22,"meta":23,"style":23},"import math\n",[25,107075,107076],{"__ignoreMap":23},[28,107077,107078,107080],{"class":30,"line":31},[28,107079,35],{"class":34},[28,107081,106563],{"class":38},[14,107083,107084,107085,101231,107088,107091],{},"导入 Python 标准库里的数学模块。后面要用 ",[25,107086,107087],{},"math.sin",[25,107089,107090],{},"math.pi"," 生成周期变化的控制信号。",[18,107093,107094],{"className":20,"code":103899,"language":22,"meta":23,"style":23},[25,107095,107096,107102],{"__ignoreMap":23},[28,107097,107098,107100],{"class":30,"line":31},[28,107099,35],{"class":34},[28,107101,101514],{"class":38},[28,107103,107104,107106,107108,107110],{"class":30,"line":48},[28,107105,35],{"class":34},[28,107107,39],{"class":38},[28,107109,42],{"class":34},[28,107111,45],{"class":38},[14,107113,107114],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[18,107116,107117],{"className":53323,"code":106400,"language":53325,"meta":23,"style":23},[25,107118,107119],{"__ignoreMap":23},[28,107120,107121,107123,107125,107127,107129,107131,107133,107135,107137,107139,107141,107143,107145,107147,107149],{"class":30,"line":31},[28,107122,1307],{"class":38},[28,107124,103169],{"class":51556},[28,107126,15182],{"class":2225},[28,107128,54],{"class":38},[28,107130,106232],{"class":127},[28,107132,54080],{"class":2225},[28,107134,54],{"class":38},[28,107136,106232],{"class":127},[28,107138,106241],{"class":2225},[28,107140,54],{"class":38},[28,107142,106246],{"class":127},[28,107144,106429],{"class":2225},[28,107146,54],{"class":38},[28,107148,106434],{"class":127},[28,107150,101357],{"class":38},[14,107152,107153,107154,107156,107157,107159,107160,107162],{},"这行定义关节。",[25,107155,106053],{}," 表示旋转关节。",[25,107158,106452],{}," 表示绕 y 轴旋转。",[25,107161,106458],{}," 表示有一点阻尼，运动不会完全无损耗。",[18,107164,107166],{"className":53323,"code":107165,"language":53325,"meta":23,"style":23},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[25,107167,107168],{"__ignoreMap":23},[28,107169,107170,107172,107174,107176,107178,107181,107183,107185,107188,107191,107193,107196,107198,107200,107202,107204,107206,107209],{"class":30,"line":31},[28,107171,1307],{"class":38},[28,107173,101333],{"class":51556},[28,107175,15182],{"class":2225},[28,107177,54],{"class":38},[28,107179,107180],{"class":127},"\"link_geom\"",[28,107182,54080],{"class":2225},[28,107184,54],{"class":38},[28,107186,107187],{"class":127},"\"capsule\"",[28,107189,107190],{"class":2225}," fromto",[28,107192,54],{"class":38},[28,107194,107195],{"class":127},"\"0 0 0 0 0 0.5\"",[28,107197,101349],{"class":2225},[28,107199,54],{"class":38},[28,107201,103991],{"class":127},[28,107203,102214],{"class":2225},[28,107205,54],{"class":38},[28,107207,107208],{"class":127},"\"0.5\"",[28,107210,101357],{"class":38},[14,107212,107213,107214,107216,107217,107219,107220,107223,107224,28648,107227,107229],{},"这行定义摆杆的形状。",[25,107215,103378],{}," 是胶囊体，适合表示杆子。",[25,107218,103389],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[25,107221,107222],{},"(0,0,0)"," 延伸到 ",[25,107225,107226],{},"(0,0,0.5)",[25,107228,103383],{}," 是半径。",[18,107231,107232],{"className":53323,"code":106466,"language":53325,"meta":23,"style":23},[25,107233,107234],{"__ignoreMap":23},[28,107235,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254,107256,107258,107260,107262,107264,107266,107268,107270],{"class":30,"line":31},[28,107237,1307],{"class":38},[28,107239,106287],{"class":51556},[28,107241,15182],{"class":2225},[28,107243,54],{"class":38},[28,107245,106294],{"class":127},[28,107247,106297],{"class":2225},[28,107249,54],{"class":38},[28,107251,106232],{"class":127},[28,107253,106304],{"class":2225},[28,107255,54],{"class":38},[28,107257,3940],{"class":127},[28,107259,106311],{"class":2225},[28,107261,54],{"class":38},[28,107263,106316],{"class":127},[28,107265,106319],{"class":2225},[28,107267,54],{"class":38},[28,107269,106324],{"class":127},[28,107271,101357],{"class":38},[14,107273,107274,107275,107277,107278,107281,107282,107284],{},"这行定义电机。它作用在 ",[25,107276,106053],{}," 关节上。",[25,107279,107280],{},"gear"," 可以理解成放大倍数。",[25,107283,106068],{}," 限制控制输入范围。",[18,107286,107287],{"className":20,"code":106980,"language":22,"meta":23,"style":23},[25,107288,107289,107301],{"__ignoreMap":23},[28,107290,107291,107293,107295,107297,107299],{"class":30,"line":31},[28,107292,1796],{"class":34},[28,107294,106771],{"class":38},[28,107296,21210],{"class":34},[28,107298,25381],{"class":60},[28,107300,4001],{"class":38},[28,107302,107303,107305,107307,107309,107311],{"class":30,"line":48},[28,107304,104108],{"class":34},[28,107306,103648],{"class":60},[28,107308,413],{"class":38},[28,107310,106788],{"class":127},[28,107312,81],{"class":38},[14,107314,107315,107317],{},[25,107316,102371],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[18,107319,107321],{"className":20,"code":107320,"language":22,"meta":23,"style":23},"for step in range(2000):\n",[25,107322,107323],{"__ignoreMap":23},[28,107324,107325,107327,107329,107331,107333,107335,107337],{"class":30,"line":31},[28,107326,3287],{"class":34},[28,107328,31873],{"class":38},[28,107330,26306],{"class":34},[28,107332,32699],{"class":60},[28,107334,413],{"class":38},[28,107336,106809],{"class":60},[28,107338,31046],{"class":38},[14,107340,107341,107342,107344,107345,107348],{},"循环 2000 步。这里没有用 ",[25,107343,1389],{},"，而是用 ",[25,107346,107347],{},"step","，因为后面要用当前步数计算时间。",[18,107350,107352],{"className":20,"code":107351,"language":22,"meta":23,"style":23},"t = step * model.opt.timestep\n",[25,107353,107354],{"__ignoreMap":23},[28,107355,107356,107359,107361,107363,107365],{"class":30,"line":31},[28,107357,107358],{"class":38},"t ",[28,107360,54],{"class":34},[28,107362,31873],{"class":38},[28,107364,854],{"class":34},[28,107366,106825],{"class":38},[14,107368,107369],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[18,107371,107372],{"className":20,"code":107020,"language":22,"meta":23,"style":23},[25,107373,107374],{"__ignoreMap":23},[28,107375,107376,107378,107380,107382,107384,107386,107388,107390,107392,107394,107396,107398,107400,107402],{"class":30,"line":31},[28,107377,106084],{"class":38},[28,107379,244],{"class":60},[28,107381,4705],{"class":38},[28,107383,54],{"class":34},[28,107385,106839],{"class":60},[28,107387,6780],{"class":34},[28,107389,106844],{"class":38},[28,107391,105473],{"class":60},[28,107393,6780],{"class":34},[28,107395,106851],{"class":38},[28,107397,854],{"class":34},[28,107399,62123],{"class":60},[28,107401,6780],{"class":34},[28,107403,106860],{"class":38},[14,107405,107406],{},"这行给电机输入一个正弦波。拆开看：",[363,107408,107409,107415,107421],{},[366,107410,107411,107414],{},[25,107412,107413],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[366,107416,107417,107420],{},[25,107418,107419],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[366,107422,107423,107426],{},[25,107424,107425],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107428,107429],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[18,107431,107433],{"className":20,"code":107432,"language":22,"meta":23,"style":23},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[25,107434,107435],{"__ignoreMap":23},[28,107436,107437,107439,107441,107443,107445,107447],{"class":30,"line":31},[28,107438,30675],{"class":60},[28,107440,413],{"class":38},[28,107442,106888],{"class":127},[28,107444,105143],{"class":38},[28,107446,73],{"class":60},[28,107448,30757],{"class":38},[14,107450,107451,107452,107454],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[25,107453,101283],{}," 只有一个数。",[351,107456,102529],{"id":102528},[14,107458,107459],{},"输出类似:",[18,107461,107464],{"className":107462,"code":107463,"language":5449,"meta":23},[5447],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[25,107465,107463],{"__ignoreMap":23},[14,107467,107468,107469,107471],{},"这里 ",[25,107470,106339],{}," 是电机输入。",[14,107473,107474,107477,107478,107481],{},[25,107475,107476],{},"joint qpos"," 是关节角度，单位通常是弧度。",[25,107479,107480],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107483,107484],{},"角度单位提示：",[18,107486,107489],{"className":107487,"code":107488,"language":5449,"meta":23},[5447],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[25,107490,107488],{"__ignoreMap":23},[14,107492,107493,107494,107496,107497,107499],{},"如果你看到 ",[25,107495,104243],{}," 是 ",[25,107498,35585],{},"，大约就是 28.6 度。",[351,107501,102561],{"id":102560},[363,107503,107504,107511,107514,107521,107524,107532,107540],{},[366,107505,102624,107506,102627,107508,28648],{},[25,107507,106524],{},[25,107509,107510],{},"gear=\"5\"",[366,107512,107513],{},"重新运行，观察关节运动是否更剧烈。",[366,107515,102624,107516,102627,107518,28648],{},[25,107517,106068],{},[25,107519,107520],{},"-0.2 0.2",[366,107522,107523],{},"重新运行，观察控制能力是否变弱。",[366,107525,107526,107527,107529,107530,28648],{},"去掉 actuator，确认 ",[25,107528,102371],{}," 变成 ",[25,107531,244],{},[366,107533,102624,107534,102627,107536,107539],{},[25,107535,106458],{},[25,107537,107538],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[366,107541,102624,107542,102627,107544,107547],{},[25,107543,106452],{},[25,107545,107546],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[351,107549,102666],{"id":102665},[380,107551,107553],{"id":107552},"indexerror-index-0-is-out-of-bounds",[25,107554,107555],{},"IndexError: index 0 is out of bounds",[14,107557,107558,107559,107561],{},"原因是 ",[25,107560,106205],{},"，没有 actuator。",[380,107563,107564],{"id":107564},"关节几乎不动",[14,107566,107567],{},"可能原因:",[363,107569,107570,107575,107579,107585],{},[366,107571,107572,107574],{},[25,107573,107280],{}," 太小",[366,107576,107577,107574],{},[25,107578,106068],{},[366,107580,107581,107584],{},[25,107582,107583],{},"damping"," 太大",[366,107586,107587],{},"重力方向导致运动不明显",[380,107589,107590],{"id":107590},"模型编译失败",[14,107592,107593,107594,107596],{},"检查 actuator 引用的 ",[25,107595,106515],{}," 是否存在，joint 名称是否拼写一致。",[380,107598,107600,107602],{"id":107599},"datactrl0-写了但没有效果",[25,107601,106339],{}," 写了但没有效果",[14,107604,102788],{},[363,107606,107607,107612,107615,107620,107625],{},[366,107608,107609,107611],{},[25,107610,102371],{}," 是否大于 0。",[366,107613,107614],{},"motor 是否引用了正确 joint。",[366,107616,107617,107619],{},[25,107618,107280],{}," 是否太小。",[366,107621,107622,107624],{},[25,107623,106068],{}," 是否把输入限制得太小。",[366,107626,107627],{},"body 是否真的有可动 joint。",[380,107629,107630],{"id":107630},"控制输入超过范围会怎样",[14,107632,107633],{},"如果设置了：",[18,107635,107637],{"className":53323,"code":107636,"language":53325,"meta":23,"style":23},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[25,107638,107639],{"__ignoreMap":23},[28,107640,107641],{"class":30,"line":31},[28,107642,107636],{"class":38},[14,107644,107645],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[18,107647,107649],{"className":20,"code":107648,"language":22,"meta":23,"style":23},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[25,107650,107651,107671],{"__ignoreMap":23},[28,107652,107653,107656,107658,107661,107663,107665,107667,107669],{"class":30,"line":31},[28,107654,107655],{"class":38},"action ",[28,107657,54],{"class":34},[28,107659,107660],{"class":38}," np.clip(action, ",[28,107662,930],{"class":34},[28,107664,105473],{"class":60},[28,107666,12697],{"class":38},[28,107668,105473],{"class":60},[28,107670,81],{"class":38},[28,107672,107673,107675,107677,107679,107681],{"class":30,"line":48},[28,107674,106084],{"class":38},[28,107676,244],{"class":60},[28,107678,4705],{"class":38},[28,107680,54],{"class":34},[28,107682,107683],{"class":38}," action\n",[351,107685,102820],{"id":102819},[14,107687,107688],{},"这一章建立了控制任务的基本形式：",[18,107690,107693],{"className":107691,"code":107692,"language":5449,"meta":23},[5447],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[25,107694,107692],{"__ignoreMap":23},[14,107696,107697],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[328,107699,107700],{},"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":23,"searchDepth":48,"depth":48,"links":107702},[107703,107704,107705,107710,107714,107715,107716,107724],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":107706},[107707,107708,107709],{"id":106346,"depth":84,"text":106347},{"id":106396,"depth":84,"text":106397},{"id":106462,"depth":84,"text":106463},{"id":101465,"depth":48,"text":101466,"children":107711},[107712,107713],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":107717},[107718,107719,107720,107721,107723],{"id":107552,"depth":84,"text":107555},{"id":107564,"depth":84,"text":107564},{"id":107590,"depth":84,"text":107590},{"id":107599,"depth":84,"text":107722},"data.ctrl[0] 写了但没有效果",{"id":107630,"depth":84,"text":107630},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106034,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107731,"title":107732,"body":107733,"description":23,"extension":334,"meta":109642,"navigation":336,"path":109643,"seo":109644,"stem":109645,"__hash__":109646},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107734,"toc":109618},[107735,107738,107740,107743,107751,107754,107771,107774,107799,107802,107848,107850,107852,107907,107909,107928,107930,107973,107976,107993,107996,108012,108022,108029,108031,108034,108037,108071,108074,108122,108126,108129,108143,108152,108156,108159,108184,108187,108191,108204,108207,108213,108216,108231,108233,108236,108496,108498,108510,108513,108825,108827,108839,108841,108844,108859,108864,108867,108889,108892,108895,108929,108932,108936,108947,108950,108967,108970,108984,108991,109011,109018,109032,109035,109047,109062,109082,109085,109107,109110,109114,109129,109140,109155,109158,109188,109204,109233,109241,109265,109268,109286,109296,109308,109315,109324,109330,109339,109342,109344,109353,109356,109371,109373,109376,109387,109390,109401,109404,109422,109424,109441,109444,109472,109474,109478,109481,109511,109517,109520,109524,109532,109535,109537,109558,109561,109564,109580,109583,109599,109601,109604,109615],[10,107736,107732],{"id":107737},"_5viewer-可视化与-renderer-离屏渲染",[351,107739,100860],{"id":100859},[14,107741,107742],{},"本章掌握两类可视化方式:",[363,107744,107745,107748],{},[366,107746,107747],{},"交互式 viewer: 适合人工观察仿真",[366,107749,107750],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107752,107753],{},"使用官方接口:",[18,107755,107757],{"className":20,"code":107756,"language":22,"meta":23,"style":23},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[25,107758,107759,107766],{"__ignoreMap":23},[28,107760,107761,107763],{"class":30,"line":31},[28,107762,35],{"class":34},[28,107764,107765],{"class":38}," mujoco.viewer\n",[28,107767,107768],{"class":30,"line":48},[28,107769,107770],{"class":38},"mujoco.viewer.launch_passive(model, data)\n",[14,107772,107773],{},"以及:",[18,107775,107777],{"className":20,"code":107776,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[25,107778,107779,107789],{"__ignoreMap":23},[28,107780,107781,107784,107786],{"class":30,"line":31},[28,107782,107783],{"class":38},"renderer ",[28,107785,54],{"class":34},[28,107787,107788],{"class":38}," mujoco.Renderer(model)\n",[28,107790,107791,107794,107796],{"class":30,"line":48},[28,107792,107793],{"class":38},"image ",[28,107795,54],{"class":34},[28,107797,107798],{"class":38}," renderer.render()\n",[14,107800,107801],{},"新手建议先理解二者区别：",[543,107803,107804,107820],{},[546,107805,107806],{},[549,107807,107808,107811,107814,107817],{},[552,107809,107810],{"align":23998},"工具",[552,107812,107813],{"align":23998},"用途",[552,107815,107816],{"align":23998},"是否打开窗口",[552,107818,107819],{"align":23998},"常见场景",[590,107821,107822,107835],{},[549,107823,107824,107827,107830,107832],{},[595,107825,107826],{"align":23998},"Viewer",[595,107828,107829],{"align":23998},"人眼实时观察仿真",[595,107831,104878],{"align":23998},[595,107833,107834],{"align":23998},"调试模型、看控制效果",[549,107836,107837,107840,107843,107845],{},[595,107838,107839],{"align":23998},"Renderer",[595,107841,107842],{"align":23998},"生成图像数组",[595,107844,104891],{"align":23998},[595,107846,107847],{"align":23998},"保存图片、训练视觉策略、服务器批量采集",[351,107849,100983],{"id":100982},[14,107851,100986],{},[18,107853,107855],{"className":24084,"code":107854,"language":24086,"meta":23,"style":23},"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",[25,107856,107857,107869,107879,107887,107895],{"__ignoreMap":23},[28,107858,107859,107861,107863,107865,107867],{"class":30,"line":31},[28,107860,24839],{"class":2225},[28,107862,26578],{"class":127},[28,107864,24096],{"class":127},[28,107866,26663],{"class":60},[28,107868,24941],{"class":60},[28,107870,107871,107873,107875,107877],{"class":30,"line":48},[28,107872,101021],{"class":127},[28,107874,101024],{"class":127},[28,107876,101027],{"class":127},[28,107878,24941],{"class":60},[28,107880,107881,107883,107885],{"class":30,"line":84},[28,107882,101034],{"class":127},[28,107884,101037],{"class":127},[28,107886,24941],{"class":60},[28,107888,107889,107891,107893],{"class":30,"line":91},[28,107890,101044],{"class":127},[28,107892,101047],{"class":127},[28,107894,24941],{"class":60},[28,107896,107897,107899,107901,107903,107905],{"class":30,"line":97},[28,107898,101054],{"class":127},[28,107900,101057],{"class":127},[28,107902,101060],{"class":127},[28,107904,101063],{"class":127},[28,107906,102729],{"class":127},[14,107908,103032],{},[18,107910,107912],{"className":24084,"code":107911,"language":24086,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy pillow\n",[25,107913,107914],{"__ignoreMap":23},[28,107915,107916,107918,107920,107922,107925],{"class":30,"line":31},[28,107917,24093],{"class":2225},[28,107919,24096],{"class":127},[28,107921,101143],{"class":127},[28,107923,107924],{"class":127}," numpy",[28,107926,107927],{"class":127}," pillow\n",[14,107929,103049],{},[18,107931,107933],{"className":24084,"code":107932,"language":24086,"meta":23,"style":23},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[25,107934,107935,107952,107961],{"__ignoreMap":23},[28,107936,107937,107939,107941,107943,107946,107948,107950],{"class":30,"line":31},[28,107938,30593],{"class":2225},[28,107940,29439],{"class":127},[28,107942,25378],{"class":60},[28,107944,107945],{"class":127}," mujoco-render",[28,107947,101188],{"class":127},[28,107949,101191],{"class":60},[28,107951,101194],{"class":60},[28,107953,107954,107956,107958],{"class":30,"line":48},[28,107955,30593],{"class":2225},[28,107957,101201],{"class":127},[28,107959,107960],{"class":127}," mujoco-render\n",[28,107962,107963,107965,107967,107969,107971],{"class":30,"line":84},[28,107964,24093],{"class":2225},[28,107966,24096],{"class":127},[28,107968,101143],{"class":127},[28,107970,107924],{"class":127},[28,107972,107927],{"class":127},[14,107974,107975],{},"离屏渲染后端:",[18,107977,107979],{"className":24084,"code":107978,"language":24086,"meta":23,"style":23},"export MUJOCO_GL=egl\n",[25,107980,107981],{"__ignoreMap":23},[28,107982,107983,107985,107988,107990],{"class":30,"line":31},[28,107984,25305],{"class":34},[28,107986,107987],{"class":38}," MUJOCO_GL",[28,107989,54],{"class":34},[28,107991,107992],{"class":38},"egl\n",[14,107994,107995],{},"或:",[18,107997,107999],{"className":24084,"code":107998,"language":24086,"meta":23,"style":23},"export MUJOCO_GL=osmesa\n",[25,108000,108001],{"__ignoreMap":23},[28,108002,108003,108005,108007,108009],{"class":30,"line":31},[28,108004,25305],{"class":34},[28,108006,107987],{"class":38},[28,108008,54],{"class":34},[28,108010,108011],{"class":38},"osmesa\n",[14,108013,108014,108015,108018,108019,28648],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[25,108016,108017],{},"egl"," 失败，再尝试 ",[25,108020,108021],{},"osmesa",[14,108023,108024,108025,108028],{},"如果你在本机桌面环境运行，通常先不要设置 ",[25,108026,108027],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[351,108030,101258],{"id":101257},[14,108032,108033],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108035,108036],{},"典型 viewer 流程:",[18,108038,108040],{"className":20,"code":108039,"language":22,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[25,108041,108042,108055,108062,108066],{"__ignoreMap":23},[28,108043,108044,108047,108050,108052],{"class":30,"line":31},[28,108045,108046],{"class":34},"with",[28,108048,108049],{"class":38}," mujoco.viewer.launch_passive(model, data) ",[28,108051,42],{"class":34},[28,108053,108054],{"class":38}," viewer:\n",[28,108056,108057,108059],{"class":30,"line":48},[28,108058,2513],{"class":34},[28,108060,108061],{"class":38}," viewer.is_running():\n",[28,108063,108064],{"class":30,"line":84},[28,108065,101729],{"class":38},[28,108067,108068],{"class":30,"line":91},[28,108069,108070],{"class":38},"        viewer.sync()\n",[14,108072,108073],{},"典型 renderer 流程:",[18,108075,108077],{"className":20,"code":108076,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[25,108078,108079,108105,108109,108114],{"__ignoreMap":23},[28,108080,108081,108083,108085,108088,108090,108092,108094,108096,108098,108100,108103],{"class":30,"line":31},[28,108082,107783],{"class":38},[28,108084,54],{"class":34},[28,108086,108087],{"class":38}," mujoco.Renderer(model, ",[28,108089,25244],{"class":5478},[28,108091,54],{"class":34},[28,108093,42598],{"class":60},[28,108095,12697],{"class":38},[28,108097,25240],{"class":5478},[28,108099,54],{"class":34},[28,108101,108102],{"class":60},"640",[28,108104,81],{"class":38},[28,108106,108107],{"class":30,"line":48},[28,108108,104718],{"class":38},[28,108110,108111],{"class":30,"line":84},[28,108112,108113],{"class":38},"renderer.update_scene(data)\n",[28,108115,108116,108118,108120],{"class":30,"line":91},[28,108117,107793],{"class":38},[28,108119,54],{"class":34},[28,108121,107798],{"class":38},[380,108123,108125],{"id":108124},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108127,108128],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[18,108130,108132],{"className":20,"code":108131,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\nviewer.sync()\n",[25,108133,108134,108138],{"__ignoreMap":23},[28,108135,108136],{"class":30,"line":31},[28,108137,104718],{"class":38},[28,108139,108140],{"class":30,"line":48},[28,108141,108142],{"class":38},"viewer.sync()\n",[14,108144,108145,108147,108148,108151],{},[25,108146,101428],{}," 负责算物理，",[25,108149,108150],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[380,108153,108155],{"id":108154},"为什么要-sleep","为什么要 sleep",[14,108157,108158],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[18,108160,108162],{"className":20,"code":108161,"language":22,"meta":23,"style":23},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[25,108163,108164],{"__ignoreMap":23},[28,108165,108166,108169,108171,108174,108176,108179,108181],{"class":30,"line":31},[28,108167,108168],{"class":38},"sleep_time ",[28,108170,54],{"class":34},[28,108172,108173],{"class":38}," model.opt.timestep ",[28,108175,930],{"class":34},[28,108177,108178],{"class":38}," (time.time() ",[28,108180,930],{"class":34},[28,108182,108183],{"class":38}," step_start)\n",[14,108185,108186],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[380,108188,108190],{"id":108189},"renderer-输出是什么","renderer 输出是什么",[18,108192,108194],{"className":20,"code":108193,"language":22,"meta":23,"style":23},"image = renderer.render()\n",[25,108195,108196],{"__ignoreMap":23},[28,108197,108198,108200,108202],{"class":30,"line":31},[28,108199,107793],{"class":38},[28,108201,54],{"class":34},[28,108203,107798],{"class":38},[14,108205,108206],{},"得到的是 NumPy 数组，形状通常是：",[18,108208,108211],{"className":108209,"code":108210,"language":5449,"meta":23},[5447],"(height, width, 3)\n",[25,108212,108210],{"__ignoreMap":23},[14,108214,108215],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[18,108217,108219],{"className":20,"code":108218,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(\"render_output.png\")\n",[25,108220,108221],{"__ignoreMap":23},[28,108222,108223,108226,108229],{"class":30,"line":31},[28,108224,108225],{"class":38},"Image.fromarray(image).save(",[28,108227,108228],{"class":127},"\"render_output.png\"",[28,108230,81],{"class":38},[351,108232,101466],{"id":101465},[14,108234,108235],{},"交互式 Viewer:",[18,108237,108239],{"className":20,"code":108238,"language":22,"meta":23,"style":23},"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",[25,108240,108241,108247,108251,108257,108263,108267,108271,108279,108284,108288,108292,108296,108301,108306,108310,108314,108318,108323,108327,108331,108335,108339,108343,108347,108359,108371,108379,108383,108393,108413,108423,108428,108433,108437,108454,108467,108472,108476,108480,108492],{"__ignoreMap":23},[28,108242,108243,108245],{"class":30,"line":31},[28,108244,35],{"class":34},[28,108246,32085],{"class":38},[28,108248,108249],{"class":30,"line":48},[28,108250,2662],{"emptyLinePlaceholder":336},[28,108252,108253,108255],{"class":30,"line":84},[28,108254,35],{"class":34},[28,108256,101514],{"class":38},[28,108258,108259,108261],{"class":30,"line":91},[28,108260,35],{"class":34},[28,108262,107765],{"class":38},[28,108264,108265],{"class":30,"line":97},[28,108266,2662],{"emptyLinePlaceholder":336},[28,108268,108269],{"class":30,"line":103},[28,108270,2662],{"emptyLinePlaceholder":336},[28,108272,108273,108275,108277],{"class":30,"line":109},[28,108274,101527],{"class":60},[28,108276,13826],{"class":34},[28,108278,101532],{"class":127},[28,108280,108281],{"class":30,"line":118},[28,108282,108283],{"class":127},"\u003Cmujoco model=\"viewer_demo\">\n",[28,108285,108286],{"class":30,"line":124},[28,108287,101542],{"class":127},[28,108289,108290],{"class":30,"line":131},[28,108291,2662],{"emptyLinePlaceholder":336},[28,108293,108294],{"class":30,"line":137},[28,108295,101551],{"class":127},[28,108297,108298],{"class":30,"line":143},[28,108299,108300],{"class":127},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[28,108302,108303],{"class":30,"line":149},[28,108304,108305],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,108307,108308],{"class":30,"line":1890},[28,108309,2662],{"emptyLinePlaceholder":336},[28,108311,108312],{"class":30,"line":1904},[28,108313,101565],{"class":127},[28,108315,108316],{"class":30,"line":1909},[28,108317,101570],{"class":127},[28,108319,108320],{"class":30,"line":1915},[28,108321,108322],{"class":127},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,108324,108325],{"class":30,"line":1936},[28,108326,101580],{"class":127},[28,108328,108329],{"class":30,"line":1941},[28,108330,101585],{"class":127},[28,108332,108333],{"class":30,"line":1955},[28,108334,101590],{"class":127},[28,108336,108337],{"class":30,"line":1960},[28,108338,95950],{"class":127},[28,108340,108341],{"class":30,"line":1989},[28,108342,2662],{"emptyLinePlaceholder":336},[28,108344,108345],{"class":30,"line":1994},[28,108346,2662],{"emptyLinePlaceholder":336},[28,108348,108349,108351,108353,108355,108357],{"class":30,"line":2011},[28,108350,32203],{"class":34},[28,108352,2235],{"class":2225},[28,108354,101611],{"class":38},[28,108356,95938],{"class":60},[28,108358,4001],{"class":38},[28,108360,108361,108363,108365,108367,108369],{"class":30,"line":2016},[28,108362,101620],{"class":38},[28,108364,54],{"class":34},[28,108366,101625],{"class":38},[28,108368,101527],{"class":60},[28,108370,81],{"class":38},[28,108372,108373,108375,108377],{"class":30,"line":2021},[28,108374,101634],{"class":38},[28,108376,54],{"class":34},[28,108378,101639],{"class":38},[28,108380,108381],{"class":30,"line":2026},[28,108382,2662],{"emptyLinePlaceholder":336},[28,108384,108385,108387,108389,108391],{"class":30,"line":2040},[28,108386,34434],{"class":34},[28,108388,108049],{"class":38},[28,108390,42],{"class":34},[28,108392,108054],{"class":38},[28,108394,108395,108398,108401,108403,108406,108408,108411],{"class":30,"line":2045},[28,108396,108397],{"class":34},"        while",[28,108399,108400],{"class":38}," viewer.is_running() ",[28,108402,30722],{"class":34},[28,108404,108405],{"class":38}," data.time ",[28,108407,1307],{"class":34},[28,108409,108410],{"class":60}," 5.0",[28,108412,4001],{"class":38},[28,108414,108415,108418,108420],{"class":30,"line":2839},[28,108416,108417],{"class":38},"            step_start ",[28,108419,54],{"class":34},[28,108421,108422],{"class":38}," time.time()\n",[28,108424,108425],{"class":30,"line":2853},[28,108426,108427],{"class":38},"            mujoco.mj_step(model, data)\n",[28,108429,108430],{"class":30,"line":2861},[28,108431,108432],{"class":38},"            viewer.sync()\n",[28,108434,108435],{"class":30,"line":2866},[28,108436,2662],{"emptyLinePlaceholder":336},[28,108438,108439,108442,108444,108446,108448,108450,108452],{"class":30,"line":2872},[28,108440,108441],{"class":38},"            sleep_time ",[28,108443,54],{"class":34},[28,108445,108173],{"class":38},[28,108447,930],{"class":34},[28,108449,108178],{"class":38},[28,108451,930],{"class":34},[28,108453,108183],{"class":38},[28,108455,108456,108458,108461,108463,108465],{"class":30,"line":2878},[28,108457,4904],{"class":34},[28,108459,108460],{"class":38}," sleep_time ",[28,108462,1357],{"class":34},[28,108464,4355],{"class":60},[28,108466,4001],{"class":38},[28,108468,108469],{"class":30,"line":2883},[28,108470,108471],{"class":38},"                time.sleep(sleep_time)\n",[28,108473,108474],{"class":30,"line":8210},[28,108475,2662],{"emptyLinePlaceholder":336},[28,108477,108478],{"class":30,"line":8234},[28,108479,2662],{"emptyLinePlaceholder":336},[28,108481,108482,108484,108486,108488,108490],{"class":30,"line":8239},[28,108483,1796],{"class":34},[28,108485,31480],{"class":60},[28,108487,101772],{"class":34},[28,108489,101775],{"class":127},[28,108491,4001],{"class":38},[28,108493,108494],{"class":30,"line":8245},[28,108495,101782],{"class":38},[14,108497,103783],{},[18,108499,108501],{"className":24084,"code":108500,"language":24086,"meta":23,"style":23},"touch ch5_viewer.py\n",[25,108502,108503],{"__ignoreMap":23},[28,108504,108505,108507],{"class":30,"line":31},[28,108506,101496],{"class":2225},[28,108508,108509],{"class":127}," ch5_viewer.py\n",[14,108511,108512],{},"离屏 Renderer 保存图片:",[18,108514,108516],{"className":20,"code":108515,"language":22,"meta":23,"style":23},"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",[25,108517,108518,108530,108534,108540,108550,108554,108558,108566,108571,108575,108579,108583,108587,108592,108596,108600,108604,108608,108612,108616,108620,108624,108628,108632,108636,108648,108660,108668,108693,108697,108713,108717,108721,108736,108745,108749,108763,108768,108773,108777,108789,108801,108805,108809,108821],{"__ignoreMap":23},[28,108519,108520,108522,108525,108527],{"class":30,"line":31},[28,108521,30997],{"class":34},[28,108523,108524],{"class":38}," pathlib ",[28,108526,35],{"class":34},[28,108528,108529],{"class":38}," Path\n",[28,108531,108532],{"class":30,"line":48},[28,108533,2662],{"emptyLinePlaceholder":336},[28,108535,108536,108538],{"class":30,"line":84},[28,108537,35],{"class":34},[28,108539,101514],{"class":38},[28,108541,108542,108544,108546,108548],{"class":30,"line":91},[28,108543,30997],{"class":34},[28,108545,47519],{"class":60},[28,108547,47522],{"class":34},[28,108549,47525],{"class":38},[28,108551,108552],{"class":30,"line":97},[28,108553,2662],{"emptyLinePlaceholder":336},[28,108555,108556],{"class":30,"line":103},[28,108557,2662],{"emptyLinePlaceholder":336},[28,108559,108560,108562,108564],{"class":30,"line":109},[28,108561,101527],{"class":60},[28,108563,13826],{"class":34},[28,108565,101532],{"class":127},[28,108567,108568],{"class":30,"line":118},[28,108569,108570],{"class":127},"\u003Cmujoco model=\"renderer_demo\">\n",[28,108572,108573],{"class":30,"line":124},[28,108574,101542],{"class":127},[28,108576,108577],{"class":30,"line":131},[28,108578,2662],{"emptyLinePlaceholder":336},[28,108580,108581],{"class":30,"line":137},[28,108582,101551],{"class":127},[28,108584,108585],{"class":30,"line":143},[28,108586,108300],{"class":127},[28,108588,108589],{"class":30,"line":149},[28,108590,108591],{"class":127},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[28,108593,108594],{"class":30,"line":1890},[28,108595,108305],{"class":127},[28,108597,108598],{"class":30,"line":1904},[28,108599,2662],{"emptyLinePlaceholder":336},[28,108601,108602],{"class":30,"line":1909},[28,108603,101565],{"class":127},[28,108605,108606],{"class":30,"line":1915},[28,108607,101570],{"class":127},[28,108609,108610],{"class":30,"line":1936},[28,108611,108322],{"class":127},[28,108613,108614],{"class":30,"line":1941},[28,108615,101580],{"class":127},[28,108617,108618],{"class":30,"line":1955},[28,108619,101585],{"class":127},[28,108621,108622],{"class":30,"line":1960},[28,108623,101590],{"class":127},[28,108625,108626],{"class":30,"line":1989},[28,108627,95950],{"class":127},[28,108629,108630],{"class":30,"line":1994},[28,108631,2662],{"emptyLinePlaceholder":336},[28,108633,108634],{"class":30,"line":2011},[28,108635,2662],{"emptyLinePlaceholder":336},[28,108637,108638,108640,108642,108644,108646],{"class":30,"line":2016},[28,108639,32203],{"class":34},[28,108641,2235],{"class":2225},[28,108643,101611],{"class":38},[28,108645,95938],{"class":60},[28,108647,4001],{"class":38},[28,108649,108650,108652,108654,108656,108658],{"class":30,"line":2021},[28,108651,101620],{"class":38},[28,108653,54],{"class":34},[28,108655,101625],{"class":38},[28,108657,101527],{"class":60},[28,108659,81],{"class":38},[28,108661,108662,108664,108666],{"class":30,"line":2026},[28,108663,101634],{"class":38},[28,108665,54],{"class":34},[28,108667,101639],{"class":38},[28,108669,108670,108673,108675,108677,108679,108681,108683,108685,108687,108689,108691],{"class":30,"line":2040},[28,108671,108672],{"class":38},"    renderer ",[28,108674,54],{"class":34},[28,108676,108087],{"class":38},[28,108678,25244],{"class":5478},[28,108680,54],{"class":34},[28,108682,42598],{"class":60},[28,108684,12697],{"class":38},[28,108686,25240],{"class":5478},[28,108688,54],{"class":34},[28,108690,108102],{"class":60},[28,108692,81],{"class":38},[28,108694,108695],{"class":30,"line":2045},[28,108696,2662],{"emptyLinePlaceholder":336},[28,108698,108699,108701,108703,108705,108707,108709,108711],{"class":30,"line":2839},[28,108700,3463],{"class":34},[28,108702,101714],{"class":38},[28,108704,26306],{"class":34},[28,108706,32699],{"class":60},[28,108708,413],{"class":38},[28,108710,713],{"class":60},[28,108712,31046],{"class":38},[28,108714,108715],{"class":30,"line":2853},[28,108716,101729],{"class":38},[28,108718,108719],{"class":30,"line":2861},[28,108720,2662],{"emptyLinePlaceholder":336},[28,108722,108723,108726,108729,108731,108734],{"class":30,"line":2866},[28,108724,108725],{"class":38},"    renderer.update_scene(data, ",[28,108727,108728],{"class":5478},"camera",[28,108730,54],{"class":34},[28,108732,108733],{"class":127},"\"fixed_camera\"",[28,108735,81],{"class":38},[28,108737,108738,108741,108743],{"class":30,"line":2872},[28,108739,108740],{"class":38},"    image ",[28,108742,54],{"class":34},[28,108744,107798],{"class":38},[28,108746,108747],{"class":30,"line":2878},[28,108748,2662],{"emptyLinePlaceholder":336},[28,108750,108751,108754,108756,108759,108761],{"class":30,"line":2883},[28,108752,108753],{"class":38},"    output_path ",[28,108755,54],{"class":34},[28,108757,108758],{"class":38}," Path(",[28,108760,108228],{"class":127},[28,108762,81],{"class":38},[28,108764,108765],{"class":30,"line":8210},[28,108766,108767],{"class":38},"    Image.fromarray(image).save(output_path)\n",[28,108769,108770],{"class":30,"line":8234},[28,108771,108772],{"class":38},"    renderer.close()\n",[28,108774,108775],{"class":30,"line":8239},[28,108776,2662],{"emptyLinePlaceholder":336},[28,108778,108779,108781,108783,108786],{"class":30,"line":8245},[28,108780,31559],{"class":60},[28,108782,413],{"class":38},[28,108784,108785],{"class":127},"\"saved:\"",[28,108787,108788],{"class":38},", output_path.resolve())\n",[28,108790,108791,108793,108795,108798],{"class":30,"line":8272},[28,108792,31559],{"class":60},[28,108794,413],{"class":38},[28,108796,108797],{"class":127},"\"image shape:\"",[28,108799,108800],{"class":38},", image.shape)\n",[28,108802,108803],{"class":30,"line":8277},[28,108804,2662],{"emptyLinePlaceholder":336},[28,108806,108807],{"class":30,"line":8283},[28,108808,2662],{"emptyLinePlaceholder":336},[28,108810,108811,108813,108815,108817,108819],{"class":30,"line":8295},[28,108812,1796],{"class":34},[28,108814,31480],{"class":60},[28,108816,101772],{"class":34},[28,108818,101775],{"class":127},[28,108820,4001],{"class":38},[28,108822,108823],{"class":30,"line":8307},[28,108824,101782],{"class":38},[14,108826,103783],{},[18,108828,108830],{"className":24084,"code":108829,"language":24086,"meta":23,"style":23},"touch ch5_renderer.py\n",[25,108831,108832],{"__ignoreMap":23},[28,108833,108834,108836],{"class":30,"line":31},[28,108835,101496],{"class":2225},[28,108837,108838],{"class":127}," ch5_renderer.py\n",[380,108840,101785],{"id":101785},[14,108842,108843],{},"viewer 上下文：",[18,108845,108847],{"className":20,"code":108846,"language":22,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[25,108848,108849],{"__ignoreMap":23},[28,108850,108851,108853,108855,108857],{"class":30,"line":31},[28,108852,108046],{"class":34},[28,108854,108049],{"class":38},[28,108856,42],{"class":34},[28,108858,108054],{"class":38},[14,108860,108861,108863],{},[25,108862,108046],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108865,108866],{},"窗口循环：",[18,108868,108870],{"className":20,"code":108869,"language":22,"meta":23,"style":23},"while viewer.is_running() and data.time \u003C 5.0:\n",[25,108871,108872],{"__ignoreMap":23},[28,108873,108874,108877,108879,108881,108883,108885,108887],{"class":30,"line":31},[28,108875,108876],{"class":34},"while",[28,108878,108400],{"class":38},[28,108880,30722],{"class":34},[28,108882,108405],{"class":38},[28,108884,1307],{"class":34},[28,108886,108410],{"class":60},[28,108888,4001],{"class":38},[14,108890,108891],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108893,108894],{},"固定相机：",[18,108896,108898],{"className":53323,"code":108897,"language":53325,"meta":23,"style":23},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[25,108899,108900],{"__ignoreMap":23},[28,108901,108902,108904,108906,108908,108910,108912,108914,108916,108919,108922,108924,108927],{"class":30,"line":31},[28,108903,1307],{"class":38},[28,108905,108728],{"class":51556},[28,108907,15182],{"class":2225},[28,108909,54],{"class":38},[28,108911,108733],{"class":127},[28,108913,101319],{"class":2225},[28,108915,54],{"class":38},[28,108917,108918],{"class":127},"\"1.5 -2.0 1.2\"",[28,108920,108921],{"class":2225}," xyaxes",[28,108923,54],{"class":38},[28,108925,108926],{"class":127},"\"1 0.75 0 0 0 1\"",[28,108928,101357],{"class":38},[14,108930,108931],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[380,108933,108935],{"id":108934},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[18,108937,108939],{"className":20,"code":108938,"language":22,"meta":23,"style":23},"import time\n",[25,108940,108941],{"__ignoreMap":23},[28,108942,108943,108945],{"class":30,"line":31},[28,108944,35],{"class":34},[28,108946,32085],{"class":38},[14,108948,108949],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[18,108951,108953],{"className":20,"code":108952,"language":22,"meta":23,"style":23},"import mujoco\nimport mujoco.viewer\n",[25,108954,108955,108961],{"__ignoreMap":23},[28,108956,108957,108959],{"class":30,"line":31},[28,108958,35],{"class":34},[28,108960,101514],{"class":38},[28,108962,108963,108965],{"class":30,"line":48},[28,108964,35],{"class":34},[28,108966,107765],{"class":38},[14,108968,108969],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[18,108971,108972],{"className":20,"code":108846,"language":22,"meta":23,"style":23},[25,108973,108974],{"__ignoreMap":23},[28,108975,108976,108978,108980,108982],{"class":30,"line":31},[28,108977,108046],{"class":34},[28,108979,108049],{"class":38},[28,108981,42],{"class":34},[28,108983,108054],{"class":38},[14,108985,108986,108987,108990],{},"打开一个 viewer 窗口。",[25,108988,108989],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[18,108992,108993],{"className":20,"code":108869,"language":22,"meta":23,"style":23},[25,108994,108995],{"__ignoreMap":23},[28,108996,108997,108999,109001,109003,109005,109007,109009],{"class":30,"line":31},[28,108998,108876],{"class":34},[28,109000,108400],{"class":38},[28,109002,30722],{"class":34},[28,109004,108405],{"class":38},[28,109006,1307],{"class":34},[28,109008,108410],{"class":60},[28,109010,4001],{"class":38},[14,109012,109013,109014,109017],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[25,109015,109016],{},"viewer.is_running()"," 会变成 false，循环结束。",[18,109019,109021],{"className":20,"code":109020,"language":22,"meta":23,"style":23},"step_start = time.time()\n",[25,109022,109023],{"__ignoreMap":23},[28,109024,109025,109028,109030],{"class":30,"line":31},[28,109026,109027],{"class":38},"step_start ",[28,109029,54],{"class":34},[28,109031,108422],{"class":38},[14,109033,109034],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[18,109036,109037],{"className":20,"code":108131,"language":22,"meta":23,"style":23},[25,109038,109039,109043],{"__ignoreMap":23},[28,109040,109041],{"class":30,"line":31},[28,109042,104718],{"class":38},[28,109044,109045],{"class":30,"line":48},[28,109046,108142],{"class":38},[14,109048,109049,109051,109052,109054,109055,109057,109058,109061],{},[25,109050,101428],{}," 推进物理仿真。",[25,109053,108150],{}," 把最新的 ",[25,109056,33657],{}," 同步到窗口里显示。没有 ",[25,109059,109060],{},"sync()","，窗口可能看不到最新状态。",[18,109063,109064],{"className":20,"code":108161,"language":22,"meta":23,"style":23},[25,109065,109066],{"__ignoreMap":23},[28,109067,109068,109070,109072,109074,109076,109078,109080],{"class":30,"line":31},[28,109069,108168],{"class":38},[28,109071,54],{"class":34},[28,109073,108173],{"class":38},[28,109075,930],{"class":34},[28,109077,108178],{"class":38},[28,109079,930],{"class":34},[28,109081,108183],{"class":38},[14,109083,109084],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[18,109086,109088],{"className":20,"code":109087,"language":22,"meta":23,"style":23},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[25,109089,109090,109102],{"__ignoreMap":23},[28,109091,109092,109094,109096,109098,109100],{"class":30,"line":31},[28,109093,1796],{"class":34},[28,109095,108460],{"class":38},[28,109097,1357],{"class":34},[28,109099,4355],{"class":60},[28,109101,4001],{"class":38},[28,109103,109104],{"class":30,"line":48},[28,109105,109106],{"class":38},"    time.sleep(sleep_time)\n",[14,109108,109109],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[380,109111,109113],{"id":109112},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[18,109115,109117],{"className":20,"code":109116,"language":22,"meta":23,"style":23},"from pathlib import Path\n",[25,109118,109119],{"__ignoreMap":23},[28,109120,109121,109123,109125,109127],{"class":30,"line":31},[28,109122,30997],{"class":34},[28,109124,108524],{"class":38},[28,109126,35],{"class":34},[28,109128,108529],{"class":38},[14,109130,109131,109132,109135,109136,109139],{},"导入 ",[25,109133,109134],{},"Path","，用来处理文件路径。相比直接写字符串，",[25,109137,109138],{},"Path(\"render_output.png\")"," 更清晰。",[18,109141,109143],{"className":20,"code":109142,"language":22,"meta":23,"style":23},"from PIL import Image\n",[25,109144,109145],{"__ignoreMap":23},[28,109146,109147,109149,109151,109153],{"class":30,"line":31},[28,109148,30997],{"class":34},[28,109150,47519],{"class":60},[28,109152,47522],{"class":34},[28,109154,47525],{"class":38},[14,109156,109157],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[18,109159,109160],{"className":53323,"code":108897,"language":53325,"meta":23,"style":23},[25,109161,109162],{"__ignoreMap":23},[28,109163,109164,109166,109168,109170,109172,109174,109176,109178,109180,109182,109184,109186],{"class":30,"line":31},[28,109165,1307],{"class":38},[28,109167,108728],{"class":51556},[28,109169,15182],{"class":2225},[28,109171,54],{"class":38},[28,109173,108733],{"class":127},[28,109175,101319],{"class":2225},[28,109177,54],{"class":38},[28,109179,108918],{"class":127},[28,109181,108921],{"class":2225},[28,109183,54],{"class":38},[28,109185,108926],{"class":127},[28,109187,101357],{"class":38},[14,109189,109190,109191,109193,109194,109196,109197,109200,109201,109203],{},"定义一个相机。",[25,109192,80066],{}," 是相机名字。",[25,109195,104359],{}," 是相机在世界里的位置。",[25,109198,109199],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[25,109202,104359],{}," 来调视角。",[18,109205,109207],{"className":20,"code":109206,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[25,109208,109209],{"__ignoreMap":23},[28,109210,109211,109213,109215,109217,109219,109221,109223,109225,109227,109229,109231],{"class":30,"line":31},[28,109212,107783],{"class":38},[28,109214,54],{"class":34},[28,109216,108087],{"class":38},[28,109218,25244],{"class":5478},[28,109220,54],{"class":34},[28,109222,42598],{"class":60},[28,109224,12697],{"class":38},[28,109226,25240],{"class":5478},[28,109228,54],{"class":34},[28,109230,108102],{"class":60},[28,109232,81],{"class":38},[14,109234,109235,109236,101231,109238,109240],{},"创建离屏渲染器。",[25,109237,25244],{},[25,109239,25240],{}," 决定输出图片大小。",[18,109242,109243],{"className":20,"code":101889,"language":22,"meta":23,"style":23},[25,109244,109245,109261],{"__ignoreMap":23},[28,109246,109247,109249,109251,109253,109255,109257,109259],{"class":30,"line":31},[28,109248,3287],{"class":34},[28,109250,101714],{"class":38},[28,109252,26306],{"class":34},[28,109254,32699],{"class":60},[28,109256,413],{"class":38},[28,109258,713],{"class":60},[28,109260,31046],{"class":38},[28,109262,109263],{"class":30,"line":48},[28,109264,101912],{"class":38},[14,109266,109267],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[18,109269,109271],{"className":20,"code":109270,"language":22,"meta":23,"style":23},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[25,109272,109273],{"__ignoreMap":23},[28,109274,109275,109278,109280,109282,109284],{"class":30,"line":31},[28,109276,109277],{"class":38},"renderer.update_scene(data, ",[28,109279,108728],{"class":5478},[28,109281,54],{"class":34},[28,109283,108733],{"class":127},[28,109285,81],{"class":38},[14,109287,109288,109289,109291,109292,109295],{},"告诉 renderer：用当前 ",[25,109290,33657],{}," 的状态更新画面，并使用名为 ",[25,109293,109294],{},"fixed_camera"," 的相机视角。",[18,109297,109298],{"className":20,"code":108193,"language":22,"meta":23,"style":23},[25,109299,109300],{"__ignoreMap":23},[28,109301,109302,109304,109306],{"class":30,"line":31},[28,109303,107793],{"class":38},[28,109305,54],{"class":34},[28,109307,107798],{"class":38},[14,109309,109310,109311,109314],{},"真正渲染出图像。",[25,109312,109313],{},"image"," 是一个 NumPy 数组，不是文件。",[18,109316,109318],{"className":20,"code":109317,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(output_path)\n",[25,109319,109320],{"__ignoreMap":23},[28,109321,109322],{"class":30,"line":31},[28,109323,109317],{"class":38},[14,109325,109326,109327,28648],{},"把数组转换成图片，并保存到 ",[25,109328,109329],{},"render_output.png",[18,109331,109333],{"className":20,"code":109332,"language":22,"meta":23,"style":23},"renderer.close()\n",[25,109334,109335],{"__ignoreMap":23},[28,109336,109337],{"class":30,"line":31},[28,109338,109332],{"class":38},[14,109340,109341],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[351,109343,102529],{"id":102528},[14,109345,109346,109347,109349,109350,28648],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[25,109348,109329],{},"，并输出图像数组形状，例如 ",[25,109351,109352],{},"(480, 640, 3)",[14,109354,109355],{},"如果图片里看不到方块，先检查：",[363,109357,109358,109361,109364],{},[366,109359,109360],{},"方块是否掉到相机视野外。",[366,109362,109363],{},"camera 位置是否合理。",[366,109365,109366,109367,109370],{},"是否在 ",[25,109368,109369],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[351,109372,102561],{"id":102560},[14,109374,109375],{},"运行 viewer:",[18,109377,109379],{"className":24084,"code":109378,"language":24086,"meta":23,"style":23},"python ch5_viewer.py\n",[25,109380,109381],{"__ignoreMap":23},[28,109382,109383,109385],{"class":30,"line":31},[28,109384,22],{"class":2225},[28,109386,108509],{"class":127},[14,109388,109389],{},"运行 renderer:",[18,109391,109393],{"className":24084,"code":109392,"language":24086,"meta":23,"style":23},"python ch5_renderer.py\n",[25,109394,109395],{"__ignoreMap":23},[28,109396,109397,109399],{"class":30,"line":31},[28,109398,22],{"class":2225},[28,109400,108838],{"class":127},[14,109402,109403],{},"如果在服务器上运行:",[18,109405,109407],{"className":24084,"code":109406,"language":24086,"meta":23,"style":23},"MUJOCO_GL=egl python ch5_renderer.py\n",[25,109408,109409],{"__ignoreMap":23},[28,109410,109411,109413,109415,109417,109420],{"class":30,"line":31},[28,109412,108027],{"class":38},[28,109414,54],{"class":34},[28,109416,108017],{"class":127},[28,109418,109419],{"class":2225}," python",[28,109421,108838],{"class":127},[14,109423,107995],{},[18,109425,109427],{"className":24084,"code":109426,"language":24086,"meta":23,"style":23},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[25,109428,109429],{"__ignoreMap":23},[28,109430,109431,109433,109435,109437,109439],{"class":30,"line":31},[28,109432,108027],{"class":38},[28,109434,54],{"class":34},[28,109436,108021],{"class":127},[28,109438,109419],{"class":2225},[28,109440,108838],{"class":127},[14,109442,109443],{},"再做几个练习：",[363,109445,109446,109453,109456,109462],{},[366,109447,109448,109449,109452],{},"把 renderer 分辨率改成 ",[25,109450,109451],{},"height=240, width=320","，观察输出 shape。",[366,109454,109455],{},"把方块颜色改成蓝色，重新保存图片。",[366,109457,109458,109459,109461],{},"把相机 ",[25,109460,104359],{}," 改远一点，观察画面中物体是否变小。",[366,109463,109464,109465,102627,109468,109471],{},"把 viewer 示例中的 ",[25,109466,109467],{},"data.time \u003C 5.0",[25,109469,109470],{},"data.time \u003C 20.0","，观察更长时间。",[351,109473,102666],{"id":102665},[380,109475,109477],{"id":109476},"viewer-窗口打不开","viewer 窗口打不开",[14,109479,109480],{},"安装:",[18,109482,109484],{"className":24084,"code":109483,"language":24086,"meta":23,"style":23},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[25,109485,109486],{"__ignoreMap":23},[28,109487,109488,109490,109492,109494,109496,109498,109500,109502,109504,109506,109508],{"class":30,"line":31},[28,109489,24839],{"class":2225},[28,109491,26578],{"class":127},[28,109493,24096],{"class":127},[28,109495,26663],{"class":60},[28,109497,102719],{"class":127},[28,109499,101047],{"class":127},[28,109501,102724],{"class":127},[28,109503,101060],{"class":127},[28,109505,101066],{"class":127},[28,109507,101057],{"class":127},[28,109509,109510],{"class":127}," libXinerama\n",[380,109512,109514],{"id":109513},"glfwerror",[25,109515,109516],{},"GLFWError",[14,109518,109519],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[380,109521,109523],{"id":109522},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109525,109526,109527,82795,109529,109531],{},"尝试 ",[25,109528,101250],{},[25,109530,101253],{},"。可能存在版本差异。",[380,109533,109534],{"id":109534},"保存图片是黑的",[14,109536,102788],{},[363,109538,109539,109542,109545,109555],{},[366,109540,109541],{},"XML 里是否有 light。",[366,109543,109544],{},"相机是否对着模型。",[366,109546,109547,109548,109551,109552,28648],{},"是否先 ",[25,109549,109550],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[25,109553,109554],{},"renderer.render()",[366,109556,109557],{},"物体是否已经掉出视野。",[380,109559,109560],{"id":109560},"远程服务器没有显示器",[14,109562,109563],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[18,109565,109566],{"className":24084,"code":109406,"language":24086,"meta":23,"style":23},[25,109567,109568],{"__ignoreMap":23},[28,109569,109570,109572,109574,109576,109578],{"class":30,"line":31},[28,109571,108027],{"class":38},[28,109573,54],{"class":34},[28,109575,108017],{"class":127},[28,109577,109419],{"class":2225},[28,109579,108838],{"class":127},[14,109581,109582],{},"如果 EGL 不可用，再尝试：",[18,109584,109585],{"className":24084,"code":109426,"language":24086,"meta":23,"style":23},[25,109586,109587],{"__ignoreMap":23},[28,109588,109589,109591,109593,109595,109597],{"class":30,"line":31},[28,109590,108027],{"class":38},[28,109592,54],{"class":34},[28,109594,108021],{"class":127},[28,109596,109419],{"class":2225},[28,109598,108838],{"class":127},[351,109600,102820],{"id":102819},[14,109602,109603],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[363,109605,109606,109609,109612],{},[366,109607,109608],{},"先用 viewer 看模型和控制是否正常。",[366,109610,109611],{},"再用 renderer 保存图片或构造视觉观测。",[366,109613,109614],{},"最后把状态、动作、图像、奖励组织成训练数据。",[328,109616,109617],{},"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":23,"searchDepth":48,"depth":48,"links":109619},[109620,109621,109622,109627,109632,109633,109634,109641],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":109623},[109624,109625,109626],{"id":108124,"depth":84,"text":108125},{"id":108154,"depth":84,"text":108155},{"id":108189,"depth":84,"text":108190},{"id":101465,"depth":48,"text":101466,"children":109628},[109629,109630,109631],{"id":101785,"depth":84,"text":101785},{"id":108934,"depth":84,"text":108935},{"id":109112,"depth":84,"text":109113},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":109635},[109636,109637,109638,109639,109640],{"id":109476,"depth":84,"text":109477},{"id":109513,"depth":84,"text":109516},{"id":109522,"depth":84,"text":109523},{"id":109534,"depth":84,"text":109534},{"id":109560,"depth":84,"text":109560},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107732,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109648,"title":109649,"body":109650,"description":23,"extension":334,"meta":111561,"navigation":336,"path":111562,"seo":111563,"stem":111564,"__hash__":111565},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109651,"toc":111537},[109652,109655,109657,109660,109662,109681,109684,109690,109693,109695,109697,109721,109723,109737,109739,109780,109782,109793,109795,109798,109804,109807,109841,109844,109876,109879,109911,109915,109918,109958,109961,109967,109970,109976,109980,109983,109989,109992,109996,109999,110039,110041,110054,110057,110059,110641,110643,110655,110658,110669,110671,110674,110693,110705,110708,110729,110732,110735,110778,110781,110784,110804,110811,110813,110831,110846,110849,110855,110858,110864,110881,110888,110919,110930,110964,110975,110992,111001,111009,111014,111028,111031,111052,111058,111072,111077,111107,111117,111142,111150,111173,111176,111192,111195,111203,111209,111231,111244,111265,111274,111313,111324,111326,111329,111335,111338,111341,111347,111350,111370,111373,111375,111414,111416,111419,111427,111430,111433,111460,111463,111473,111479,111482,111488,111490,111496,111500,111503,111505,111508,111532,111535],[10,109653,109649],{"id":109654},"_6控制任务cartpole",[351,109656,100860],{"id":100859},[14,109658,109659],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109661,104544],{},[363,109663,109664,109667,109669,109672,109675,109678],{},[366,109665,109666],{},"slide joint",[366,109668,106397],{},[366,109670,109671],{},"cart force actuator",[366,109673,109674],{},"状态观测",[366,109676,109677],{},"简单控制循环",[366,109679,109680],{},"reward 设计雏形",[14,109682,109683],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[18,109685,109688],{"className":109686,"code":109687,"language":5449,"meta":23},[5447],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[25,109689,109687],{"__ignoreMap":23},[14,109691,109692],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[351,109694,100983],{"id":100982},[14,109696,100986],{},[18,109698,109699],{"className":24084,"code":104601,"language":24086,"meta":23,"style":23},[25,109700,109701],{"__ignoreMap":23},[28,109702,109703,109705,109707,109709,109711,109713,109715,109717,109719],{"class":30,"line":31},[28,109704,24839],{"class":2225},[28,109706,26578],{"class":127},[28,109708,24096],{"class":127},[28,109710,26663],{"class":60},[28,109712,104616],{"class":127},[28,109714,101011],{"class":127},[28,109716,102714],{"class":127},[28,109718,101027],{"class":127},[28,109720,104625],{"class":127},[14,109722,103032],{},[18,109724,109725],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},[25,109726,109727],{"__ignoreMap":23},[28,109728,109729,109731,109733,109735],{"class":30,"line":31},[28,109730,24093],{"class":2225},[28,109732,24096],{"class":127},[28,109734,101143],{"class":127},[28,109736,101146],{"class":127},[14,109738,103049],{},[18,109740,109742],{"className":24084,"code":109741,"language":24086,"meta":23,"style":23},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[25,109743,109744,109761,109770],{"__ignoreMap":23},[28,109745,109746,109748,109750,109752,109755,109757,109759],{"class":30,"line":31},[28,109747,30593],{"class":2225},[28,109749,29439],{"class":127},[28,109751,25378],{"class":60},[28,109753,109754],{"class":127}," mujoco-cartpole",[28,109756,101188],{"class":127},[28,109758,101191],{"class":60},[28,109760,101194],{"class":60},[28,109762,109763,109765,109767],{"class":30,"line":48},[28,109764,30593],{"class":2225},[28,109766,101201],{"class":127},[28,109768,109769],{"class":127}," mujoco-cartpole\n",[28,109771,109772,109774,109776,109778],{"class":30,"line":84},[28,109773,24093],{"class":2225},[28,109775,24096],{"class":127},[28,109777,101143],{"class":127},[28,109779,101146],{"class":127},[14,109781,101217],{},[363,109783,109784,109787,109790],{},[366,109785,109786],{},"本章不依赖 Gymnasium。",[366,109788,109789],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[366,109791,109792],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[351,109794,101258],{"id":101257},[14,109796,109797],{},"Cartpole 的模型结构:",[18,109799,109802],{"className":109800,"code":109801,"language":5449,"meta":23},[5447],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[25,109803,109801],{"__ignoreMap":23},[14,109805,109806],{},"小车通过 slide joint 左右移动:",[18,109808,109810],{"className":53323,"code":109809,"language":53325,"meta":23,"style":23},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[25,109811,109812],{"__ignoreMap":23},[28,109813,109814,109816,109818,109820,109822,109825,109827,109829,109832,109834,109836,109839],{"class":30,"line":31},[28,109815,1307],{"class":38},[28,109817,103169],{"class":51556},[28,109819,15182],{"class":2225},[28,109821,54],{"class":38},[28,109823,109824],{"class":127},"\"cart_x\"",[28,109826,54080],{"class":2225},[28,109828,54],{"class":38},[28,109830,109831],{"class":127},"\"slide\"",[28,109833,106241],{"class":2225},[28,109835,54],{"class":38},[28,109837,109838],{"class":127},"\"1 0 0\"",[28,109840,101357],{"class":38},[14,109842,109843],{},"杆子通过 hinge joint 旋转:",[18,109845,109847],{"className":53323,"code":109846,"language":53325,"meta":23,"style":23},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,109848,109849],{"__ignoreMap":23},[28,109850,109851,109853,109855,109857,109859,109862,109864,109866,109868,109870,109872,109874],{"class":30,"line":31},[28,109852,1307],{"class":38},[28,109854,103169],{"class":51556},[28,109856,15182],{"class":2225},[28,109858,54],{"class":38},[28,109860,109861],{"class":127},"\"pole_hinge\"",[28,109863,54080],{"class":2225},[28,109865,54],{"class":38},[28,109867,106232],{"class":127},[28,109869,106241],{"class":2225},[28,109871,54],{"class":38},[28,109873,106246],{"class":127},[28,109875,101357],{"class":38},[14,109877,109878],{},"控制力作用在小车 slide joint 上:",[18,109880,109882],{"className":53323,"code":109881,"language":53325,"meta":23,"style":23},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[25,109883,109884],{"__ignoreMap":23},[28,109885,109886,109888,109890,109892,109894,109897,109899,109901,109903,109905,109907,109909],{"class":30,"line":31},[28,109887,1307],{"class":38},[28,109889,106287],{"class":51556},[28,109891,15182],{"class":2225},[28,109893,54],{"class":38},[28,109895,109896],{"class":127},"\"cart_motor\"",[28,109898,106297],{"class":2225},[28,109900,54],{"class":38},[28,109902,109824],{"class":127},[28,109904,106304],{"class":2225},[28,109906,54],{"class":38},[28,109908,54572],{"class":127},[28,109910,101357],{"class":38},[380,109912,109914],{"id":109913},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109916,109917],{},"这个简化模型有两个关节：",[543,109919,109920,109931],{},[546,109921,109922],{},[549,109923,109924,109926,109928],{},[552,109925,102972],{"align":23998},[552,109927,23999],{"align":23998},[552,109929,109930],{"align":23998},"对应状态",[590,109932,109933,109946],{},[549,109934,109935,109940,109943],{},[595,109936,109937],{"align":23998},[25,109938,109939],{},"cart_x",[595,109941,109942],{"align":23998},"slide",[595,109944,109945],{"align":23998},"小车 x 位置",[549,109947,109948,109953,109955],{},[595,109949,109950],{"align":23998},[25,109951,109952],{},"pole_hinge",[595,109954,106053],{"align":23998},[595,109956,109957],{"align":23998},"杆子角度",[14,109959,109960],{},"所以：",[18,109962,109965],{"className":109963,"code":109964,"language":5449,"meta":23},[5447],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[25,109966,109964],{"__ignoreMap":23},[14,109968,109969],{},"把它们拼起来就是观测：",[18,109971,109974],{"className":109972,"code":109973,"language":5449,"meta":23},[5447],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,109975,109973],{"__ignoreMap":23},[380,109977,109979],{"id":109978},"action-是什么","action 是什么",[14,109981,109982],{},"本章只有一个 actuator：",[18,109984,109987],{"className":109985,"code":109986,"language":5449,"meta":23},[5447],"data.ctrl[0] = action\n",[25,109988,109986],{"__ignoreMap":23},[14,109990,109991],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[380,109993,109995],{"id":109994},"reward-是什么","reward 是什么",[14,109997,109998],{},"奖励函数：",[18,110000,110002],{"className":20,"code":110001,"language":22,"meta":23,"style":23},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[25,110003,110004],{"__ignoreMap":23},[28,110005,110006,110008,110011,110013,110015,110017,110020,110022,110025,110027,110029,110031,110034,110036],{"class":30,"line":31},[28,110007,17308],{"class":34},[28,110009,110010],{"class":60}," float",[28,110012,413],{"class":38},[28,110014,102616],{"class":60},[28,110016,52527],{"class":34},[28,110018,110019],{"class":60}," 0.1",[28,110021,6780],{"class":34},[28,110023,110024],{"class":38}," cart_x ",[28,110026,854],{"class":34},[28,110028,110024],{"class":38},[28,110030,930],{"class":34},[28,110032,110033],{"class":38}," pole_angle ",[28,110035,854],{"class":34},[28,110037,110038],{"class":38}," pole_angle)\n",[14,110040,106439],{},[363,110042,110043,110048,110051],{},[366,110044,110045,110046,28648],{},"基础奖励是 ",[25,110047,102616],{},[366,110049,110050],{},"小车离中心越远，扣分越多。",[366,110052,110053],{},"杆子角度越大，扣分越多。",[14,110055,110056],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[351,110058,101466],{"id":101465},[18,110060,110062],{"className":20,"code":110061,"language":22,"meta":23,"style":23},"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",[25,110063,110064,110070,110080,110084,110088,110096,110101,110105,110109,110113,110118,110122,110127,110132,110137,110141,110146,110151,110156,110160,110164,110168,110172,110176,110181,110185,110189,110193,110197,110201,110211,110218,110222,110226,110240,110254,110267,110297,110301,110305,110317,110329,110337,110341,110354,110358,110362,110371,110375,110391,110401,110414,110427,110431,110454,110472,110476,110488,110492,110496,110506,110516,110520,110536,110577,110581,110601,110617,110621,110625,110637],{"__ignoreMap":23},[28,110065,110066,110068],{"class":30,"line":31},[28,110067,35],{"class":34},[28,110069,101514],{"class":38},[28,110071,110072,110074,110076,110078],{"class":30,"line":48},[28,110073,35],{"class":34},[28,110075,39],{"class":38},[28,110077,42],{"class":34},[28,110079,45],{"class":38},[28,110081,110082],{"class":30,"line":84},[28,110083,2662],{"emptyLinePlaceholder":336},[28,110085,110086],{"class":30,"line":91},[28,110087,2662],{"emptyLinePlaceholder":336},[28,110089,110090,110092,110094],{"class":30,"line":97},[28,110091,101527],{"class":60},[28,110093,13826],{"class":34},[28,110095,101532],{"class":127},[28,110097,110098],{"class":30,"line":103},[28,110099,110100],{"class":127},"\u003Cmujoco model=\"cartpole\">\n",[28,110102,110103],{"class":30,"line":109},[28,110104,101542],{"class":127},[28,110106,110107],{"class":30,"line":118},[28,110108,2662],{"emptyLinePlaceholder":336},[28,110110,110111],{"class":30,"line":124},[28,110112,101551],{"class":127},[28,110114,110115],{"class":30,"line":131},[28,110116,110117],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,110119,110120],{"class":30,"line":137},[28,110121,2662],{"emptyLinePlaceholder":336},[28,110123,110124],{"class":30,"line":143},[28,110125,110126],{"class":127},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[28,110128,110129],{"class":30,"line":149},[28,110130,110131],{"class":127},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[28,110133,110134],{"class":30,"line":1890},[28,110135,110136],{"class":127},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[28,110138,110139],{"class":30,"line":1904},[28,110140,2662],{"emptyLinePlaceholder":336},[28,110142,110143],{"class":30,"line":1909},[28,110144,110145],{"class":127},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[28,110147,110148],{"class":30,"line":1915},[28,110149,110150],{"class":127},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[28,110152,110153],{"class":30,"line":1936},[28,110154,110155],{"class":127},"        \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",[28,110157,110158],{"class":30,"line":1941},[28,110159,106651],{"class":127},[28,110161,110162],{"class":30,"line":1955},[28,110163,101580],{"class":127},[28,110165,110166],{"class":30,"line":1960},[28,110167,101585],{"class":127},[28,110169,110170],{"class":30,"line":1989},[28,110171,2662],{"emptyLinePlaceholder":336},[28,110173,110174],{"class":30,"line":1994},[28,110175,106668],{"class":127},[28,110177,110178],{"class":30,"line":2011},[28,110179,110180],{"class":127},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,110182,110183],{"class":30,"line":2016},[28,110184,106678],{"class":127},[28,110186,110187],{"class":30,"line":2021},[28,110188,101590],{"class":127},[28,110190,110191],{"class":30,"line":2026},[28,110192,95950],{"class":127},[28,110194,110195],{"class":30,"line":2040},[28,110196,2662],{"emptyLinePlaceholder":336},[28,110198,110199],{"class":30,"line":2045},[28,110200,2662],{"emptyLinePlaceholder":336},[28,110202,110203,110205,110208],{"class":30,"line":2839},[28,110204,32203],{"class":34},[28,110206,110207],{"class":2225}," get_observation",[28,110209,110210],{"class":38},"(data: mujoco.MjData) -> np.ndarray:\n",[28,110212,110213,110215],{"class":30,"line":2853},[28,110214,4352],{"class":34},[28,110216,110217],{"class":38}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[28,110219,110220],{"class":30,"line":2861},[28,110221,2662],{"emptyLinePlaceholder":336},[28,110223,110224],{"class":30,"line":2866},[28,110225,2662],{"emptyLinePlaceholder":336},[28,110227,110228,110230,110233,110236,110238],{"class":30,"line":2872},[28,110229,32203],{"class":34},[28,110231,110232],{"class":2225}," compute_reward",[28,110234,110235],{"class":38},"(obs: np.ndarray) -> ",[28,110237,451],{"class":60},[28,110239,4001],{"class":38},[28,110241,110242,110245,110247,110250,110252],{"class":30,"line":2878},[28,110243,110244],{"class":38},"    cart_x ",[28,110246,54],{"class":34},[28,110248,110249],{"class":38}," obs[",[28,110251,244],{"class":60},[28,110253,33502],{"class":38},[28,110255,110256,110259,110261,110263,110265],{"class":30,"line":2883},[28,110257,110258],{"class":38},"    pole_angle ",[28,110260,54],{"class":34},[28,110262,110249],{"class":38},[28,110264,61],{"class":60},[28,110266,33502],{"class":38},[28,110268,110269,110271,110273,110275,110277,110279,110281,110283,110285,110287,110289,110291,110293,110295],{"class":30,"line":8210},[28,110270,4352],{"class":34},[28,110272,110010],{"class":60},[28,110274,413],{"class":38},[28,110276,102616],{"class":60},[28,110278,52527],{"class":34},[28,110280,110019],{"class":60},[28,110282,6780],{"class":34},[28,110284,110024],{"class":38},[28,110286,854],{"class":34},[28,110288,110024],{"class":38},[28,110290,930],{"class":34},[28,110292,110033],{"class":38},[28,110294,854],{"class":34},[28,110296,110038],{"class":38},[28,110298,110299],{"class":30,"line":8234},[28,110300,2662],{"emptyLinePlaceholder":336},[28,110302,110303],{"class":30,"line":8239},[28,110304,2662],{"emptyLinePlaceholder":336},[28,110306,110307,110309,110311,110313,110315],{"class":30,"line":8245},[28,110308,32203],{"class":34},[28,110310,2235],{"class":2225},[28,110312,101611],{"class":38},[28,110314,95938],{"class":60},[28,110316,4001],{"class":38},[28,110318,110319,110321,110323,110325,110327],{"class":30,"line":8272},[28,110320,101620],{"class":38},[28,110322,54],{"class":34},[28,110324,101625],{"class":38},[28,110326,101527],{"class":60},[28,110328,81],{"class":38},[28,110330,110331,110333,110335],{"class":30,"line":8277},[28,110332,101634],{"class":38},[28,110334,54],{"class":34},[28,110336,101639],{"class":38},[28,110338,110339],{"class":30,"line":8283},[28,110340,2662],{"emptyLinePlaceholder":336},[28,110342,110343,110345,110347,110349,110351],{"class":30,"line":8295},[28,110344,105282],{"class":38},[28,110346,61],{"class":60},[28,110348,4705],{"class":38},[28,110350,54],{"class":34},[28,110352,110353],{"class":60}," 0.1\n",[28,110355,110356],{"class":30,"line":8307},[28,110357,105295],{"class":38},[28,110359,110360],{"class":30,"line":8319},[28,110361,2662],{"emptyLinePlaceholder":336},[28,110363,110364,110367,110369],{"class":30,"line":9978},[28,110365,110366],{"class":38},"    total_reward ",[28,110368,54],{"class":34},[28,110370,104974],{"class":60},[28,110372,110373],{"class":30,"line":10003},[28,110374,2662],{"emptyLinePlaceholder":336},[28,110376,110377,110379,110381,110383,110385,110387,110389],{"class":30,"line":10026},[28,110378,3463],{"class":34},[28,110380,31873],{"class":38},[28,110382,26306],{"class":34},[28,110384,32699],{"class":60},[28,110386,413],{"class":38},[28,110388,6672],{"class":60},[28,110390,31046],{"class":38},[28,110392,110393,110396,110398],{"class":30,"line":10050},[28,110394,110395],{"class":38},"        obs ",[28,110397,54],{"class":34},[28,110399,110400],{"class":38}," get_observation(data)\n",[28,110402,110403,110406,110408,110410,110412],{"class":30,"line":10055},[28,110404,110405],{"class":38},"        pole_angle ",[28,110407,54],{"class":34},[28,110409,110249],{"class":38},[28,110411,61],{"class":60},[28,110413,33502],{"class":38},[28,110415,110416,110419,110421,110423,110425],{"class":30,"line":10060},[28,110417,110418],{"class":38},"        pole_angular_velocity ",[28,110420,54],{"class":34},[28,110422,110249],{"class":38},[28,110424,78],{"class":60},[28,110426,33502],{"class":38},[28,110428,110429],{"class":30,"line":10065},[28,110430,2662],{"emptyLinePlaceholder":336},[28,110432,110433,110436,110438,110441,110443,110445,110447,110449,110451],{"class":30,"line":10074},[28,110434,110435],{"class":38},"        action ",[28,110437,54],{"class":34},[28,110439,110440],{"class":60}," 2.0",[28,110442,6780],{"class":34},[28,110444,110033],{"class":38},[28,110446,880],{"class":34},[28,110448,62123],{"class":60},[28,110450,6780],{"class":34},[28,110452,110453],{"class":38}," pole_angular_velocity\n",[28,110455,110456,110458,110460,110462,110464,110466,110468,110470],{"class":30,"line":10079},[28,110457,110435],{"class":38},[28,110459,54],{"class":34},[28,110461,107660],{"class":38},[28,110463,930],{"class":34},[28,110465,102616],{"class":60},[28,110467,12697],{"class":38},[28,110469,102616],{"class":60},[28,110471,81],{"class":38},[28,110473,110474],{"class":30,"line":10085},[28,110475,2662],{"emptyLinePlaceholder":336},[28,110477,110478,110480,110482,110484,110486],{"class":30,"line":10106},[28,110479,106830],{"class":38},[28,110481,244],{"class":60},[28,110483,4705],{"class":38},[28,110485,54],{"class":34},[28,110487,107683],{"class":38},[28,110489,110490],{"class":30,"line":10112},[28,110491,101729],{"class":38},[28,110493,110494],{"class":30,"line":10126},[28,110495,2662],{"emptyLinePlaceholder":336},[28,110497,110498,110501,110503],{"class":30,"line":10132},[28,110499,110500],{"class":38},"        reward ",[28,110502,54],{"class":34},[28,110504,110505],{"class":38}," compute_reward(get_observation(data))\n",[28,110507,110508,110511,110513],{"class":30,"line":10159},[28,110509,110510],{"class":38},"        total_reward ",[28,110512,9739],{"class":34},[28,110514,110515],{"class":38}," reward\n",[28,110517,110518],{"class":30,"line":10168},[28,110519,2662],{"emptyLinePlaceholder":336},[28,110521,110522,110524,110526,110528,110530,110532,110534],{"class":30,"line":10174},[28,110523,2759],{"class":34},[28,110525,31873],{"class":38},[28,110527,729],{"class":34},[28,110529,6016],{"class":60},[28,110531,101772],{"class":34},[28,110533,4355],{"class":60},[28,110535,4001],{"class":38},[28,110537,110538,110540,110542,110545,110548,110551,110554,110556,110559,110562,110564,110566,110568,110570,110573,110575],{"class":30,"line":10182},[28,110539,34906],{"class":60},[28,110541,413],{"class":38},[28,110543,110544],{"class":127},"\"step:\"",[28,110546,110547],{"class":38},", step, ",[28,110549,110550],{"class":127},"\"obs:\"",[28,110552,110553],{"class":38},", np.round(obs, ",[28,110555,78],{"class":60},[28,110557,110558],{"class":38},"), ",[28,110560,110561],{"class":127},"\"action:\"",[28,110563,12697],{"class":38},[28,110565,32274],{"class":60},[28,110567,413],{"class":38},[28,110569,451],{"class":60},[28,110571,110572],{"class":38},"(action), ",[28,110574,78],{"class":60},[28,110576,30757],{"class":38},[28,110578,110579],{"class":30,"line":10187},[28,110580,2662],{"emptyLinePlaceholder":336},[28,110582,110583,110585,110587,110590,110592,110594,110597,110599],{"class":30,"line":16866},[28,110584,31559],{"class":60},[28,110586,413],{"class":38},[28,110588,110589],{"class":127},"\"total_reward:\"",[28,110591,12697],{"class":38},[28,110593,32274],{"class":60},[28,110595,110596],{"class":38},"(total_reward, ",[28,110598,78],{"class":60},[28,110600,30757],{"class":38},[28,110602,110603,110605,110607,110610,110613,110615],{"class":30,"line":16872},[28,110604,31559],{"class":60},[28,110606,413],{"class":38},[28,110608,110609],{"class":127},"\"final obs:\"",[28,110611,110612],{"class":38},", np.round(get_observation(data), ",[28,110614,78],{"class":60},[28,110616,30757],{"class":38},[28,110618,110619],{"class":30,"line":16895},[28,110620,2662],{"emptyLinePlaceholder":336},[28,110622,110623],{"class":30,"line":16901},[28,110624,2662],{"emptyLinePlaceholder":336},[28,110626,110627,110629,110631,110633,110635],{"class":30,"line":16924},[28,110628,1796],{"class":34},[28,110630,31480],{"class":60},[28,110632,101772],{"class":34},[28,110634,101775],{"class":127},[28,110636,4001],{"class":38},[28,110638,110639],{"class":30,"line":16938},[28,110640,101782],{"class":38},[14,110642,103783],{},[18,110644,110646],{"className":24084,"code":110645,"language":24086,"meta":23,"style":23},"touch ch6_cartpole.py\n",[25,110647,110648],{"__ignoreMap":23},[28,110649,110650,110652],{"class":30,"line":31},[28,110651,101496],{"class":2225},[28,110653,110654],{"class":127}," ch6_cartpole.py\n",[14,110656,110657],{},"运行：",[18,110659,110661],{"className":24084,"code":110660,"language":24086,"meta":23,"style":23},"python ch6_cartpole.py\n",[25,110662,110663],{"__ignoreMap":23},[28,110664,110665,110667],{"class":30,"line":31},[28,110666,22],{"class":2225},[28,110668,110654],{"class":127},[380,110670,101785],{"id":101785},[14,110672,110673],{},"构造观测：",[18,110675,110677],{"className":20,"code":110676,"language":22,"meta":23,"style":23},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[25,110678,110679,110687],{"__ignoreMap":23},[28,110680,110681,110683,110685],{"class":30,"line":31},[28,110682,32203],{"class":34},[28,110684,110207],{"class":2225},[28,110686,110210],{"class":38},[28,110688,110689,110691],{"class":30,"line":48},[28,110690,4352],{"class":34},[28,110692,110217],{"class":38},[14,110694,110695,110698,110699,110701,110702,110704],{},[25,110696,110697],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[25,110700,104243],{}," 2 维，",[25,110703,104573],{}," 2 维，所以 obs 是 4 维。",[14,110706,110707],{},"设置初始角度：",[18,110709,110711],{"className":20,"code":110710,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[25,110712,110713,110725],{"__ignoreMap":23},[28,110714,110715,110717,110719,110721,110723],{"class":30,"line":31},[28,110716,104912],{"class":38},[28,110718,61],{"class":60},[28,110720,4705],{"class":38},[28,110722,54],{"class":34},[28,110724,110353],{"class":60},[28,110726,110727],{"class":30,"line":48},[28,110728,104756],{"class":38},[14,110730,110731],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110733,110734],{},"简单反馈控制：",[18,110736,110738],{"className":20,"code":110737,"language":22,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[25,110739,110740,110760],{"__ignoreMap":23},[28,110741,110742,110744,110746,110748,110750,110752,110754,110756,110758],{"class":30,"line":31},[28,110743,107655],{"class":38},[28,110745,54],{"class":34},[28,110747,110440],{"class":60},[28,110749,6780],{"class":34},[28,110751,110033],{"class":38},[28,110753,880],{"class":34},[28,110755,62123],{"class":60},[28,110757,6780],{"class":34},[28,110759,110453],{"class":38},[28,110761,110762,110764,110766,110768,110770,110772,110774,110776],{"class":30,"line":48},[28,110763,107655],{"class":38},[28,110765,54],{"class":34},[28,110767,107660],{"class":38},[28,110769,930],{"class":34},[28,110771,102616],{"class":60},[28,110773,12697],{"class":38},[28,110775,102616],{"class":60},[28,110777,81],{"class":38},[14,110779,110780],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110782,110783],{},"限制动作：",[18,110785,110787],{"className":20,"code":110786,"language":22,"meta":23,"style":23},"np.clip(action, -1.0, 1.0)\n",[25,110788,110789],{"__ignoreMap":23},[28,110790,110791,110794,110796,110798,110800,110802],{"class":30,"line":31},[28,110792,110793],{"class":38},"np.clip(action, ",[28,110795,930],{"class":34},[28,110797,102616],{"class":60},[28,110799,12697],{"class":38},[28,110801,102616],{"class":60},[28,110803,81],{"class":38},[14,110805,110806,110807,110810],{},"因为 XML 里 ",[25,110808,110809],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[380,110812,101921],{"id":101921},[18,110814,110815],{"className":20,"code":110676,"language":22,"meta":23,"style":23},[25,110816,110817,110825],{"__ignoreMap":23},[28,110818,110819,110821,110823],{"class":30,"line":31},[28,110820,32203],{"class":34},[28,110822,110207],{"class":2225},[28,110824,110210],{"class":38},[28,110826,110827,110829],{"class":30,"line":48},[28,110828,4352],{"class":34},[28,110830,110217],{"class":38},[14,110832,110833,110834,110837,110838,110841,110842,110845],{},"这段定义了一个函数，用来获取当前观测。",[25,110835,110836],{},"data.qpos.copy()"," 是位置数组副本，",[25,110839,110840],{},"data.qvel.copy()"," 是速度数组副本。",[25,110843,110844],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110847,110848],{},"在本章模型里：",[18,110850,110853],{"className":110851,"code":110852,"language":5449,"meta":23},[5447],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[25,110854,110852],{"__ignoreMap":23},[14,110856,110857],{},"所以返回的 obs 是：",[18,110859,110862],{"className":110860,"code":110861,"language":5449,"meta":23},[5447],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[25,110863,110861],{"__ignoreMap":23},[18,110865,110867],{"className":20,"code":110866,"language":22,"meta":23,"style":23},"def compute_reward(obs: np.ndarray) -> float:\n",[25,110868,110869],{"__ignoreMap":23},[28,110870,110871,110873,110875,110877,110879],{"class":30,"line":31},[28,110872,32203],{"class":34},[28,110874,110232],{"class":2225},[28,110876,110235],{"class":38},[28,110878,451],{"class":60},[28,110880,4001],{"class":38},[14,110882,110883,110884,110887],{},"这行定义奖励函数。输入是观测 ",[25,110885,110886],{},"obs","，输出是一个浮点数奖励。",[18,110889,110891],{"className":20,"code":110890,"language":22,"meta":23,"style":23},"cart_x = obs[0]\npole_angle = obs[1]\n",[25,110892,110893,110906],{"__ignoreMap":23},[28,110894,110895,110898,110900,110902,110904],{"class":30,"line":31},[28,110896,110897],{"class":38},"cart_x ",[28,110899,54],{"class":34},[28,110901,110249],{"class":38},[28,110903,244],{"class":60},[28,110905,33502],{"class":38},[28,110907,110908,110911,110913,110915,110917],{"class":30,"line":48},[28,110909,110910],{"class":38},"pole_angle ",[28,110912,54],{"class":34},[28,110914,110249],{"class":38},[28,110916,61],{"class":60},[28,110918,33502],{"class":38},[14,110920,110921,110922,110925,110926,110929],{},"数组索引从 0 开始。",[25,110923,110924],{},"obs[0]"," 是第一个元素，也就是小车位置。",[25,110927,110928],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[18,110931,110932],{"className":20,"code":110001,"language":22,"meta":23,"style":23},[25,110933,110934],{"__ignoreMap":23},[28,110935,110936,110938,110940,110942,110944,110946,110948,110950,110952,110954,110956,110958,110960,110962],{"class":30,"line":31},[28,110937,17308],{"class":34},[28,110939,110010],{"class":60},[28,110941,413],{"class":38},[28,110943,102616],{"class":60},[28,110945,52527],{"class":34},[28,110947,110019],{"class":60},[28,110949,6780],{"class":34},[28,110951,110024],{"class":38},[28,110953,854],{"class":34},[28,110955,110024],{"class":38},[28,110957,930],{"class":34},[28,110959,110033],{"class":38},[28,110961,854],{"class":34},[28,110963,110038],{"class":38},[14,110965,110966,110967,110970,110971,110974],{},"这行计算奖励。",[25,110968,110969],{},"cart_x * cart_x"," 是小车位置的平方，",[25,110972,110973],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[18,110976,110978],{"className":20,"code":110977,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\n",[25,110979,110980],{"__ignoreMap":23},[28,110981,110982,110984,110986,110988,110990],{"class":30,"line":31},[28,110983,104912],{"class":38},[28,110985,61],{"class":60},[28,110987,4705],{"class":38},[28,110989,54],{"class":34},[28,110991,110353],{"class":60},[14,110993,110994,110995,110997,110998,111000],{},"手动设置杆子的初始角度。因为 ",[25,110996,105669],{}," 是小车位置，",[25,110999,105672],{}," 是杆子角度，所以这里改的是杆子。",[18,111002,111003],{"className":20,"code":104756,"language":22,"meta":23,"style":23},[25,111004,111005],{"__ignoreMap":23},[28,111006,111007],{"class":30,"line":31},[28,111008,104756],{"class":38},[14,111010,105715,111011,111013],{},[25,111012,104243],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[18,111015,111017],{"className":20,"code":111016,"language":22,"meta":23,"style":23},"total_reward = 0.0\n",[25,111018,111019],{"__ignoreMap":23},[28,111020,111021,111024,111026],{"class":30,"line":31},[28,111022,111023],{"class":38},"total_reward ",[28,111025,54],{"class":34},[28,111027,104974],{"class":60},[14,111029,111030],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[18,111032,111034],{"className":20,"code":111033,"language":22,"meta":23,"style":23},"for step in range(1000):\n",[25,111035,111036],{"__ignoreMap":23},[28,111037,111038,111040,111042,111044,111046,111048,111050],{"class":30,"line":31},[28,111039,3287],{"class":34},[28,111041,31873],{"class":38},[28,111043,26306],{"class":34},[28,111045,32699],{"class":60},[28,111047,413],{"class":38},[28,111049,6672],{"class":60},[28,111051,31046],{"class":38},[14,111053,111054,111055,111057],{},"循环 1000 步。",[25,111056,107347],{}," 是当前步数，从 0 到 999。",[18,111059,111061],{"className":20,"code":111060,"language":22,"meta":23,"style":23},"obs = get_observation(data)\n",[25,111062,111063],{"__ignoreMap":23},[28,111064,111065,111068,111070],{"class":30,"line":31},[28,111066,111067],{"class":38},"obs ",[28,111069,54],{"class":34},[28,111071,110400],{"class":38},[14,111073,111074,111075,28648],{},"读取当前状态，保存到 ",[25,111076,110886],{},[18,111078,111080],{"className":20,"code":111079,"language":22,"meta":23,"style":23},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[25,111081,111082,111094],{"__ignoreMap":23},[28,111083,111084,111086,111088,111090,111092],{"class":30,"line":31},[28,111085,110910],{"class":38},[28,111087,54],{"class":34},[28,111089,110249],{"class":38},[28,111091,61],{"class":60},[28,111093,33502],{"class":38},[28,111095,111096,111099,111101,111103,111105],{"class":30,"line":48},[28,111097,111098],{"class":38},"pole_angular_velocity ",[28,111100,54],{"class":34},[28,111102,110249],{"class":38},[28,111104,78],{"class":60},[28,111106,33502],{"class":38},[14,111108,111109,111110,111113,111114,28648],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[25,111111,111112],{},"obs[3]","？因为 obs 的顺序是 ",[25,111115,111116],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[18,111118,111120],{"className":20,"code":111119,"language":22,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[25,111121,111122],{"__ignoreMap":23},[28,111123,111124,111126,111128,111130,111132,111134,111136,111138,111140],{"class":30,"line":31},[28,111125,107655],{"class":38},[28,111127,54],{"class":34},[28,111129,110440],{"class":60},[28,111131,6780],{"class":34},[28,111133,110033],{"class":38},[28,111135,880],{"class":34},[28,111137,62123],{"class":60},[28,111139,6780],{"class":34},[28,111141,110453],{"class":38},[14,111143,111144,111145,101231,111147,111149],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[25,111146,105473],{},[25,111148,35585],{}," 是人为设置的系数，不是固定公式。",[18,111151,111153],{"className":20,"code":111152,"language":22,"meta":23,"style":23},"action = np.clip(action, -1.0, 1.0)\n",[25,111154,111155],{"__ignoreMap":23},[28,111156,111157,111159,111161,111163,111165,111167,111169,111171],{"class":30,"line":31},[28,111158,107655],{"class":38},[28,111160,54],{"class":34},[28,111162,107660],{"class":38},[28,111164,930],{"class":34},[28,111166,102616],{"class":60},[28,111168,12697],{"class":38},[28,111170,102616],{"class":60},[28,111172,81],{"class":38},[14,111174,111175],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[18,111177,111178],{"className":20,"code":109986,"language":22,"meta":23,"style":23},[25,111179,111180],{"__ignoreMap":23},[28,111181,111182,111184,111186,111188,111190],{"class":30,"line":31},[28,111183,106084],{"class":38},[28,111185,244],{"class":60},[28,111187,4705],{"class":38},[28,111189,54],{"class":34},[28,111191,107683],{"class":38},[14,111193,111194],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[18,111196,111197],{"className":20,"code":104718,"language":22,"meta":23,"style":23},[25,111198,111199],{"__ignoreMap":23},[28,111200,111201],{"class":30,"line":31},[28,111202,104718],{"class":38},[14,111204,111205,111206,111208],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[25,111207,106339],{}," 计算小车和杆子的下一刻状态。",[18,111210,111212],{"className":20,"code":111211,"language":22,"meta":23,"style":23},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[25,111213,111214,111223],{"__ignoreMap":23},[28,111215,111216,111219,111221],{"class":30,"line":31},[28,111217,111218],{"class":38},"reward ",[28,111220,54],{"class":34},[28,111222,110505],{"class":38},[28,111224,111225,111227,111229],{"class":30,"line":48},[28,111226,111023],{"class":38},[28,111228,9739],{"class":34},[28,111230,110515],{"class":38},[14,111232,111233,111234,111236,111237,111240,111241,28648],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[25,111235,9739],{}," 是简写，",[25,111238,111239],{},"total_reward += reward"," 等价于 ",[25,111242,111243],{},"total_reward = total_reward + reward",[18,111245,111247],{"className":20,"code":111246,"language":22,"meta":23,"style":23},"if step % 100 == 0:\n",[25,111248,111249],{"__ignoreMap":23},[28,111250,111251,111253,111255,111257,111259,111261,111263],{"class":30,"line":31},[28,111252,1796],{"class":34},[28,111254,31873],{"class":38},[28,111256,729],{"class":34},[28,111258,6016],{"class":60},[28,111260,101772],{"class":34},[28,111262,4355],{"class":60},[28,111264,4001],{"class":38},[14,111266,111267,111269,111270,111273],{},[25,111268,729],{}," 是取余数。",[25,111271,111272],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[18,111275,111277],{"className":20,"code":111276,"language":22,"meta":23,"style":23},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[25,111278,111279],{"__ignoreMap":23},[28,111280,111281,111283,111285,111287,111289,111291,111293,111295,111297,111299,111301,111303,111305,111307,111309,111311],{"class":30,"line":31},[28,111282,30675],{"class":60},[28,111284,413],{"class":38},[28,111286,110544],{"class":127},[28,111288,110547],{"class":38},[28,111290,110550],{"class":127},[28,111292,110553],{"class":38},[28,111294,78],{"class":60},[28,111296,110558],{"class":38},[28,111298,110561],{"class":127},[28,111300,12697],{"class":38},[28,111302,32274],{"class":60},[28,111304,413],{"class":38},[28,111306,451],{"class":60},[28,111308,110572],{"class":38},[28,111310,78],{"class":60},[28,111312,30757],{"class":38},[14,111314,111315,111316,111319,111320,111323],{},"打印当前步数、观测和动作。",[25,111317,111318],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[25,111321,111322],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[351,111325,102529],{"id":102528},[14,111327,111328],{},"观测向量:",[18,111330,111333],{"className":111331,"code":111332,"language":5449,"meta":23},[5447],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,111334,111332],{"__ignoreMap":23},[14,111336,111337],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111339,111340],{},"每隔 100 步会打印一次：",[18,111342,111345],{"className":111343,"code":111344,"language":5449,"meta":23},[5447],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[25,111346,111344],{"__ignoreMap":23},[14,111348,111349],{},"重点观察：",[363,111351,111352,111358,111363],{},[366,111353,111354,111357],{},[25,111355,111356],{},"pole_angle"," 是否越来越大。",[366,111359,111360,111362],{},[25,111361,109939],{}," 是否跑得太远。",[366,111364,111365,111366,82795,111368,28648],{},"action 是否经常被 clip 到 ",[25,111367,104128],{},[25,111369,61],{},[14,111371,111372],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[351,111374,102561],{"id":102560},[363,111376,111377,111383,111386,111392,111402,111408,111411],{},[366,111378,111379,111380,28648],{},"把初始角度改为 ",[25,111381,111382],{},"data.qpos[1] = 0.3",[366,111384,111385],{},"重新运行，观察控制是否变差。",[366,111387,111388,111389,111391],{},"把 actuator ",[25,111390,107280],{}," 改小。",[366,111393,111394,111395,111398,111399,28648],{},"打印 ",[25,111396,111397],{},"model.nq, model.nv, model.nu","，应为 ",[25,111400,111401],{},"2 2 1",[366,111403,111404,111405,111407],{},"把 reward 里的 ",[25,111406,110973],{}," 系数改大，观察总奖励变化。",[366,111409,111410],{},"把控制器改成反号，观察杆子是否更容易倒。",[366,111412,111413],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[351,111415,102666],{"id":102665},[380,111417,111418],{"id":111418},"杆子方向和预期不一致",[14,111420,102609,111421,111423,111424,111426],{},[25,111422,106452],{}," 和 capsule 的 ",[25,111425,103389],{},"，必要时用 viewer 可视化确认。",[380,111428,111429],{"id":111429},"控制器越控越倒",[14,111431,111432],{},"说明反馈符号可能反了，尝试:",[18,111434,111436],{"className":20,"code":111435,"language":22,"meta":23,"style":23},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[25,111437,111438],{"__ignoreMap":23},[28,111439,111440,111442,111444,111446,111448,111450,111452,111454,111456,111458],{"class":30,"line":31},[28,111441,107655],{"class":38},[28,111443,54],{"class":34},[28,111445,52527],{"class":34},[28,111447,105473],{"class":60},[28,111449,6780],{"class":34},[28,111451,110033],{"class":38},[28,111453,930],{"class":34},[28,111455,62123],{"class":60},[28,111457,6780],{"class":34},[28,111459,110453],{"class":38},[380,111461,111462],{"id":111462},"小车飞走",[14,111464,111465,111466,111468,111469,111472],{},"降低 ",[25,111467,107280],{}," 或缩小 ",[25,111470,111471],{},"action"," 的 clip 范围。",[380,111474,111476,111478],{"id":111475},"obs3-为什么是杆子角速度",[25,111477,111112],{}," 为什么是杆子角速度",[14,111480,111481],{},"因为这个模型里：",[18,111483,111486],{"className":111484,"code":111485,"language":5449,"meta":23},[5447],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[25,111487,111485],{"__ignoreMap":23},[14,111489,109960],{},[18,111491,111494],{"className":111492,"code":111493,"language":5449,"meta":23},[5447],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[25,111495,111493],{"__ignoreMap":23},[380,111497,111499],{"id":111498},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111501,111502],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[351,111504,102820],{"id":102819},[14,111506,111507],{},"一个控制任务通常包含：",[363,111509,111510,111513,111521,111526,111529],{},[366,111511,111512],{},"模型：Cartpole 的 body、joint、actuator。",[366,111514,111515,111516,617,111518,111520],{},"观测：从 ",[25,111517,104243],{},[25,111519,104573],{}," 里取状态。",[366,111522,111523,111524,28648],{},"动作：写入 ",[25,111525,101289],{},[366,111527,111528],{},"奖励：根据任务目标打分。",[366,111530,111531],{},"循环：obs -> action -> step -> reward。",[14,111533,111534],{},"这就是后面 Gymnasium 环境的基本骨架。",[328,111536,104499],{},{"title":23,"searchDepth":48,"depth":48,"links":111538},[111539,111540,111541,111546,111550,111551,111552,111560],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":111542},[111543,111544,111545],{"id":109913,"depth":84,"text":109914},{"id":109978,"depth":84,"text":109979},{"id":109994,"depth":84,"text":109995},{"id":101465,"depth":48,"text":101466,"children":111547},[111548,111549],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":111553},[111554,111555,111556,111557,111559],{"id":111418,"depth":84,"text":111418},{"id":111429,"depth":84,"text":111429},{"id":111462,"depth":84,"text":111462},{"id":111475,"depth":84,"text":111558},"obs[3] 为什么是杆子角速度",{"id":111498,"depth":84,"text":111499},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109649,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111567,"title":111568,"body":111569,"description":23,"extension":334,"meta":113583,"navigation":336,"path":113584,"seo":113585,"stem":113586,"__hash__":113587},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111570,"toc":113559},[111571,111574,111576,111579,111581,111598,111601,111604,111610,111613,111615,111617,111641,111643,111657,111659,111700,111702,111720,111722,111725,111731,111734,111762,111766,111772,111797,111800,111831,111838,111841,111844,111850,111853,111859,111862,111868,111872,111875,111900,111903,111905,112665,112667,112679,112681,112692,112694,112697,112714,112717,112719,112730,112733,112735,112781,112784,112797,112800,112882,112885,112887,112903,112913,112926,112929,112968,112978,112989,112999,113012,113015,113044,113047,113057,113060,113066,113083,113094,113096,113102,113119,113130,113151,113154,113166,113169,113190,113193,113201,113209,113226,113229,113298,113305,113313,113316,113329,113336,113338,113341,113347,113350,113353,113359,113365,113367,113407,113409,113415,113424,113427,113429,113449,113452,113455,113461,113465,113467,113494,113497,113500,113527,113533,113536,113539,113541,113544,113547,113553,113556],[10,111572,111568],{"id":111573},"_7控制任务reacher-机械臂到达目标",[351,111575,100860],{"id":100859},[14,111577,111578],{},"本章搭建一个二维两关节 reacher 任务。",[14,111580,104544],{},[363,111582,111583,111586,111589,111592,111595],{},[366,111584,111585],{},"两个 hinge joint",[366,111587,111588],{},"两个 motor actuator",[366,111590,111591],{},"site 作为末端点和目标点",[366,111593,111594],{},"根据末端和目标距离设计 reward",[366,111596,111597],{},"构造机械臂任务的基本形式",[14,111599,111600],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111602,111603],{},"Reacher 任务可以理解为：",[18,111605,111608],{"className":111606,"code":111607,"language":5449,"meta":23},[5447],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[25,111609,111607],{"__ignoreMap":23},[14,111611,111612],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[351,111614,100983],{"id":100982},[14,111616,100986],{},[18,111618,111619],{"className":24084,"code":104601,"language":24086,"meta":23,"style":23},[25,111620,111621],{"__ignoreMap":23},[28,111622,111623,111625,111627,111629,111631,111633,111635,111637,111639],{"class":30,"line":31},[28,111624,24839],{"class":2225},[28,111626,26578],{"class":127},[28,111628,24096],{"class":127},[28,111630,26663],{"class":60},[28,111632,104616],{"class":127},[28,111634,101011],{"class":127},[28,111636,102714],{"class":127},[28,111638,101027],{"class":127},[28,111640,104625],{"class":127},[14,111642,103032],{},[18,111644,111645],{"className":24084,"code":101132,"language":24086,"meta":23,"style":23},[25,111646,111647],{"__ignoreMap":23},[28,111648,111649,111651,111653,111655],{"class":30,"line":31},[28,111650,24093],{"class":2225},[28,111652,24096],{"class":127},[28,111654,101143],{"class":127},[28,111656,101146],{"class":127},[14,111658,103049],{},[18,111660,111662],{"className":24084,"code":111661,"language":24086,"meta":23,"style":23},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[25,111663,111664,111681,111690],{"__ignoreMap":23},[28,111665,111666,111668,111670,111672,111675,111677,111679],{"class":30,"line":31},[28,111667,30593],{"class":2225},[28,111669,29439],{"class":127},[28,111671,25378],{"class":60},[28,111673,111674],{"class":127}," mujoco-reacher",[28,111676,101188],{"class":127},[28,111678,101191],{"class":60},[28,111680,101194],{"class":60},[28,111682,111683,111685,111687],{"class":30,"line":48},[28,111684,30593],{"class":2225},[28,111686,101201],{"class":127},[28,111688,111689],{"class":127}," mujoco-reacher\n",[28,111691,111692,111694,111696,111698],{"class":30,"line":84},[28,111693,24093],{"class":2225},[28,111695,24096],{"class":127},[28,111697,101143],{"class":127},[28,111699,101146],{"class":127},[14,111701,101217],{},[363,111703,111704,111707,111710],{},[366,111705,111706],{},"本章使用低维状态，不使用图像输入。",[366,111708,111709],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[366,111711,111712,111713,617,111715,617,111717,111719],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[25,111714,104243],{},[25,111716,104573],{},[25,111718,103893],{}," 的方法一致。",[351,111721,101258],{"id":101257},[14,111723,111724],{},"Reacher 任务核心:",[18,111726,111729],{"className":111727,"code":111728,"language":5449,"meta":23},[5447],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[25,111730,111728],{"__ignoreMap":23},[14,111732,111733],{},"读取 site 世界坐标:",[18,111735,111737],{"className":20,"code":111736,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[25,111738,111739,111752],{"__ignoreMap":23},[28,111740,111741,111743,111745,111747,111750],{"class":30,"line":31},[28,111742,103847],{"class":38},[28,111744,54],{"class":34},[28,111746,103618],{"class":38},[28,111748,111749],{"class":127},"\"tip\"",[28,111751,81],{"class":38},[28,111753,111754,111757,111759],{"class":30,"line":48},[28,111755,111756],{"class":38},"tip_pos ",[28,111758,54],{"class":34},[28,111760,111761],{"class":38}," data.site_xpos[site_id]\n",[380,111763,111765],{"id":111764},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111767,111768,111769,111771],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[25,111770,104243],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[18,111773,111775],{"className":20,"code":111774,"language":22,"meta":23,"style":23},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[25,111776,111777,111787],{"__ignoreMap":23},[28,111778,111779,111782,111784],{"class":30,"line":31},[28,111780,111781],{"class":38},"tip ",[28,111783,54],{"class":34},[28,111785,111786],{"class":38}," data.site_xpos[tip_site_id]\n",[28,111788,111789,111792,111794],{"class":30,"line":48},[28,111790,111791],{"class":38},"target ",[28,111793,54],{"class":34},[28,111795,111796],{"class":38}," data.site_xpos[target_site_id]\n",[14,111798,111799],{},"这样 reward 就很容易写：",[18,111801,111803],{"className":20,"code":111802,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[25,111804,111805,111820],{"__ignoreMap":23},[28,111806,111807,111810,111812,111815,111817],{"class":30,"line":31},[28,111808,111809],{"class":38},"dist ",[28,111811,54],{"class":34},[28,111813,111814],{"class":38}," np.linalg.norm(tip ",[28,111816,930],{"class":34},[28,111818,111819],{"class":38}," target)\n",[28,111821,111822,111824,111826,111828],{"class":30,"line":48},[28,111823,111218],{"class":38},[28,111825,54],{"class":34},[28,111827,52527],{"class":34},[28,111829,111830],{"class":38},"dist\n",[14,111832,111833,111834,111837],{},"距离越小，",[25,111835,111836],{},"-dist"," 越接近 0，奖励越高。",[380,111839,111840],{"id":111840},"两关节机械臂的状态",[14,111842,111843],{},"这个模型有两个 hinge joint：",[18,111845,111848],{"className":111846,"code":111847,"language":5449,"meta":23},[5447],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[25,111849,111847],{"__ignoreMap":23},[14,111851,111852],{},"再加上末端和目标位置：",[18,111854,111857],{"className":111855,"code":111856,"language":5449,"meta":23},[5447],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[25,111858,111856],{"__ignoreMap":23},[14,111860,111861],{},"总维度：",[18,111863,111866],{"className":111864,"code":111865,"language":5449,"meta":23},[5447],"2 + 2 + 3 + 3 = 10\n",[25,111867,111865],{"__ignoreMap":23},[380,111869,111871],{"id":111870},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111873,111874],{},"本章把重力设为：",[18,111876,111878],{"className":53323,"code":111877,"language":53325,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,111879,111880],{"__ignoreMap":23},[28,111881,111882,111884,111886,111888,111890,111892,111894,111896,111898],{"class":30,"line":31},[28,111883,1307],{"class":38},[28,111885,69422],{"class":51556},[28,111887,101407],{"class":2225},[28,111889,54],{"class":38},[28,111891,101412],{"class":127},[28,111893,101415],{"class":2225},[28,111895,54],{"class":38},[28,111897,103984],{"class":127},[28,111899,101357],{"class":38},[14,111901,111902],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[351,111904,101466],{"id":101465},[18,111906,111908],{"className":20,"code":111907,"language":22,"meta":23,"style":23},"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",[25,111909,111910,111916,111926,111930,111934,111942,111947,111952,111956,111960,111965,111970,111974,111979,111984,111989,111993,111998,112003,112008,112013,112017,112021,112025,112029,112033,112038,112043,112047,112051,112055,112059,112063,112078,112087,112099,112122,112129,112133,112137,112147,112161,112175,112182,112186,112190,112204,112216,112228,112241,112256,112273,112277,112281,112293,112305,112313,112321,112325,112341,112346,112359,112372,112387,112391,112426,112458,112462,112466,112475,112479,112495,112505,112516,112532,112548,112564,112580,112584,112602,112622,112641,112645,112649,112661],{"__ignoreMap":23},[28,111911,111912,111914],{"class":30,"line":31},[28,111913,35],{"class":34},[28,111915,101514],{"class":38},[28,111917,111918,111920,111922,111924],{"class":30,"line":48},[28,111919,35],{"class":34},[28,111921,39],{"class":38},[28,111923,42],{"class":34},[28,111925,45],{"class":38},[28,111927,111928],{"class":30,"line":84},[28,111929,2662],{"emptyLinePlaceholder":336},[28,111931,111932],{"class":30,"line":91},[28,111933,2662],{"emptyLinePlaceholder":336},[28,111935,111936,111938,111940],{"class":30,"line":97},[28,111937,101527],{"class":60},[28,111939,13826],{"class":34},[28,111941,101532],{"class":127},[28,111943,111944],{"class":30,"line":103},[28,111945,111946],{"class":127},"\u003Cmujoco model=\"two_link_reacher\">\n",[28,111948,111949],{"class":30,"line":109},[28,111950,111951],{"class":127},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[28,111953,111954],{"class":30,"line":118},[28,111955,2662],{"emptyLinePlaceholder":336},[28,111957,111958],{"class":30,"line":124},[28,111959,101551],{"class":127},[28,111961,111962],{"class":30,"line":131},[28,111963,111964],{"class":127},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[28,111966,111967],{"class":30,"line":137},[28,111968,111969],{"class":127},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[28,111971,111972],{"class":30,"line":143},[28,111973,2662],{"emptyLinePlaceholder":336},[28,111975,111976],{"class":30,"line":149},[28,111977,111978],{"class":127},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[28,111980,111981],{"class":30,"line":1890},[28,111982,111983],{"class":127},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,111985,111986],{"class":30,"line":1904},[28,111987,111988],{"class":127},"      \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",[28,111990,111991],{"class":30,"line":1909},[28,111992,2662],{"emptyLinePlaceholder":336},[28,111994,111995],{"class":30,"line":1915},[28,111996,111997],{"class":127},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[28,111999,112000],{"class":30,"line":1936},[28,112001,112002],{"class":127},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,112004,112005],{"class":30,"line":1941},[28,112006,112007],{"class":127},"        \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",[28,112009,112010],{"class":30,"line":1955},[28,112011,112012],{"class":127},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[28,112014,112015],{"class":30,"line":1960},[28,112016,106651],{"class":127},[28,112018,112019],{"class":30,"line":1989},[28,112020,101580],{"class":127},[28,112022,112023],{"class":30,"line":1994},[28,112024,101585],{"class":127},[28,112026,112027],{"class":30,"line":2011},[28,112028,2662],{"emptyLinePlaceholder":336},[28,112030,112031],{"class":30,"line":2016},[28,112032,106668],{"class":127},[28,112034,112035],{"class":30,"line":2021},[28,112036,112037],{"class":127},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,112039,112040],{"class":30,"line":2026},[28,112041,112042],{"class":127},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,112044,112045],{"class":30,"line":2040},[28,112046,106678],{"class":127},[28,112048,112049],{"class":30,"line":2045},[28,112050,101590],{"class":127},[28,112052,112053],{"class":30,"line":2839},[28,112054,95950],{"class":127},[28,112056,112057],{"class":30,"line":2853},[28,112058,2662],{"emptyLinePlaceholder":336},[28,112060,112061],{"class":30,"line":2861},[28,112062,2662],{"emptyLinePlaceholder":336},[28,112064,112065,112067,112070,112073,112075],{"class":30,"line":2866},[28,112066,32203],{"class":34},[28,112068,112069],{"class":2225}," site_position",[28,112071,112072],{"class":38},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[28,112074,1567],{"class":60},[28,112076,112077],{"class":38},") -> np.ndarray:\n",[28,112079,112080,112082,112084],{"class":30,"line":2872},[28,112081,103613],{"class":38},[28,112083,54],{"class":34},[28,112085,112086],{"class":38}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[28,112088,112089,112091,112093,112095,112097],{"class":30,"line":2878},[28,112090,3363],{"class":34},[28,112092,103662],{"class":38},[28,112094,1307],{"class":34},[28,112096,4355],{"class":60},[28,112098,4001],{"class":38},[28,112100,112101,112103,112105,112107,112109,112112,112114,112116,112118,112120],{"class":30,"line":2883},[28,112102,103645],{"class":34},[28,112104,103648],{"class":60},[28,112106,413],{"class":38},[28,112108,462],{"class":34},[28,112110,112111],{"class":127},"\"site not found: ",[28,112113,1293],{"class":60},[28,112115,80066],{"class":38},[28,112117,1343],{"class":60},[28,112119,654],{"class":127},[28,112121,81],{"class":38},[28,112123,112124,112126],{"class":30,"line":8210},[28,112125,4352],{"class":34},[28,112127,112128],{"class":38}," data.site_xpos[site_id].copy()\n",[28,112130,112131],{"class":30,"line":8234},[28,112132,2662],{"emptyLinePlaceholder":336},[28,112134,112135],{"class":30,"line":8239},[28,112136,2662],{"emptyLinePlaceholder":336},[28,112138,112139,112141,112144],{"class":30,"line":8245},[28,112140,32203],{"class":34},[28,112142,112143],{"class":2225}," get_obs",[28,112145,112146],{"class":38},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[28,112148,112149,112152,112154,112157,112159],{"class":30,"line":8272},[28,112150,112151],{"class":38},"    tip ",[28,112153,54],{"class":34},[28,112155,112156],{"class":38}," site_position(model, data, ",[28,112158,111749],{"class":127},[28,112160,81],{"class":38},[28,112162,112163,112166,112168,112170,112173],{"class":30,"line":8277},[28,112164,112165],{"class":38},"    target ",[28,112167,54],{"class":34},[28,112169,112156],{"class":38},[28,112171,112172],{"class":127},"\"target\"",[28,112174,81],{"class":38},[28,112176,112177,112179],{"class":30,"line":8283},[28,112178,4352],{"class":34},[28,112180,112181],{"class":38}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[28,112183,112184],{"class":30,"line":8295},[28,112185,2662],{"emptyLinePlaceholder":336},[28,112187,112188],{"class":30,"line":8307},[28,112189,2662],{"emptyLinePlaceholder":336},[28,112191,112192,112194,112197,112200,112202],{"class":30,"line":8319},[28,112193,32203],{"class":34},[28,112195,112196],{"class":2225}," reward",[28,112198,112199],{"class":38},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,112201,451],{"class":60},[28,112203,4001],{"class":38},[28,112205,112206,112208,112210,112212,112214],{"class":30,"line":9978},[28,112207,112151],{"class":38},[28,112209,54],{"class":34},[28,112211,112156],{"class":38},[28,112213,111749],{"class":127},[28,112215,81],{"class":38},[28,112217,112218,112220,112222,112224,112226],{"class":30,"line":10003},[28,112219,112165],{"class":38},[28,112221,54],{"class":34},[28,112223,112156],{"class":38},[28,112225,112172],{"class":127},[28,112227,81],{"class":38},[28,112229,112230,112233,112235,112237,112239],{"class":30,"line":10026},[28,112231,112232],{"class":38},"    dist ",[28,112234,54],{"class":34},[28,112236,111814],{"class":38},[28,112238,930],{"class":34},[28,112240,111819],{"class":38},[28,112242,112243,112246,112248,112251,112253],{"class":30,"line":10050},[28,112244,112245],{"class":38},"    control_cost ",[28,112247,54],{"class":34},[28,112249,112250],{"class":60}," 0.01",[28,112252,6780],{"class":34},[28,112254,112255],{"class":38}," np.sum(np.square(data.ctrl))\n",[28,112257,112258,112260,112262,112264,112266,112268,112270],{"class":30,"line":10055},[28,112259,4352],{"class":34},[28,112261,110010],{"class":60},[28,112263,413],{"class":38},[28,112265,930],{"class":34},[28,112267,111809],{"class":38},[28,112269,930],{"class":34},[28,112271,112272],{"class":38}," control_cost)\n",[28,112274,112275],{"class":30,"line":10060},[28,112276,2662],{"emptyLinePlaceholder":336},[28,112278,112279],{"class":30,"line":10065},[28,112280,2662],{"emptyLinePlaceholder":336},[28,112282,112283,112285,112287,112289,112291],{"class":30,"line":10074},[28,112284,32203],{"class":34},[28,112286,2235],{"class":2225},[28,112288,101611],{"class":38},[28,112290,95938],{"class":60},[28,112292,4001],{"class":38},[28,112294,112295,112297,112299,112301,112303],{"class":30,"line":10079},[28,112296,101620],{"class":38},[28,112298,54],{"class":34},[28,112300,101625],{"class":38},[28,112302,101527],{"class":60},[28,112304,81],{"class":38},[28,112306,112307,112309,112311],{"class":30,"line":10085},[28,112308,101634],{"class":38},[28,112310,54],{"class":34},[28,112312,101639],{"class":38},[28,112314,112315,112317,112319],{"class":30,"line":10106},[28,112316,110366],{"class":38},[28,112318,54],{"class":34},[28,112320,104974],{"class":60},[28,112322,112323],{"class":30,"line":10112},[28,112324,2662],{"emptyLinePlaceholder":336},[28,112326,112327,112329,112331,112333,112335,112337,112339],{"class":30,"line":10126},[28,112328,3463],{"class":34},[28,112330,31873],{"class":38},[28,112332,26306],{"class":34},[28,112334,32699],{"class":60},[28,112336,413],{"class":38},[28,112338,65330],{"class":60},[28,112340,31046],{"class":38},[28,112342,112343],{"class":30,"line":10132},[28,112344,112345],{"class":38},"        mujoco.mj_forward(model, data)\n",[28,112347,112348,112351,112353,112355,112357],{"class":30,"line":10159},[28,112349,112350],{"class":38},"        tip ",[28,112352,54],{"class":34},[28,112354,112156],{"class":38},[28,112356,111749],{"class":127},[28,112358,81],{"class":38},[28,112360,112361,112364,112366,112368,112370],{"class":30,"line":10168},[28,112362,112363],{"class":38},"        target ",[28,112365,54],{"class":34},[28,112367,112156],{"class":38},[28,112369,112172],{"class":127},[28,112371,81],{"class":38},[28,112373,112374,112377,112379,112382,112384],{"class":30,"line":10174},[28,112375,112376],{"class":38},"        error ",[28,112378,54],{"class":34},[28,112380,112381],{"class":38}," target ",[28,112383,930],{"class":34},[28,112385,112386],{"class":38}," tip\n",[28,112388,112389],{"class":30,"line":10182},[28,112390,2662],{"emptyLinePlaceholder":336},[28,112392,112393,112395,112397,112399,112401,112404,112406,112408,112411,112413,112416,112418,112420,112422,112424],{"class":30,"line":10187},[28,112394,106830],{"class":38},[28,112396,244],{"class":60},[28,112398,4705],{"class":38},[28,112400,54],{"class":34},[28,112402,112403],{"class":38}," np.clip(",[28,112405,105473],{"class":60},[28,112407,6780],{"class":34},[28,112409,112410],{"class":38}," error[",[28,112412,211],{"class":60},[28,112414,112415],{"class":38},"], ",[28,112417,930],{"class":34},[28,112419,102616],{"class":60},[28,112421,12697],{"class":38},[28,112423,102616],{"class":60},[28,112425,81],{"class":38},[28,112427,112428,112430,112432,112434,112436,112438,112440,112442,112444,112446,112448,112450,112452,112454,112456],{"class":30,"line":16866},[28,112429,106830],{"class":38},[28,112431,61],{"class":60},[28,112433,4705],{"class":38},[28,112435,54],{"class":34},[28,112437,112403],{"class":38},[28,112439,105473],{"class":60},[28,112441,6780],{"class":34},[28,112443,112410],{"class":38},[28,112445,244],{"class":60},[28,112447,112415],{"class":38},[28,112449,930],{"class":34},[28,112451,102616],{"class":60},[28,112453,12697],{"class":38},[28,112455,102616],{"class":60},[28,112457,81],{"class":38},[28,112459,112460],{"class":30,"line":16872},[28,112461,2662],{"emptyLinePlaceholder":336},[28,112463,112464],{"class":30,"line":16895},[28,112465,101729],{"class":38},[28,112467,112468,112470,112472],{"class":30,"line":16901},[28,112469,110510],{"class":38},[28,112471,9739],{"class":34},[28,112473,112474],{"class":38}," reward(model, data)\n",[28,112476,112477],{"class":30,"line":16924},[28,112478,2662],{"emptyLinePlaceholder":336},[28,112480,112481,112483,112485,112487,112489,112491,112493],{"class":30,"line":16938},[28,112482,2759],{"class":34},[28,112484,31873],{"class":38},[28,112486,729],{"class":34},[28,112488,6016],{"class":60},[28,112490,101772],{"class":34},[28,112492,4355],{"class":60},[28,112494,4001],{"class":38},[28,112496,112497,112500,112502],{"class":30,"line":16958},[28,112498,112499],{"class":38},"            obs ",[28,112501,54],{"class":34},[28,112503,112504],{"class":38}," get_obs(model, data)\n",[28,112506,112507,112509,112511,112513],{"class":30,"line":16964},[28,112508,34906],{"class":60},[28,112510,413],{"class":38},[28,112512,110544],{"class":127},[28,112514,112515],{"class":38},", step)\n",[28,112517,112518,112520,112522,112525,112528,112530],{"class":30,"line":16975},[28,112519,34906],{"class":60},[28,112521,413],{"class":38},[28,112523,112524],{"class":127},"\"  tip:\"",[28,112526,112527],{"class":38},", np.round(tip, ",[28,112529,78],{"class":60},[28,112531,30757],{"class":38},[28,112533,112534,112536,112538,112541,112544,112546],{"class":30,"line":16998},[28,112535,34906],{"class":60},[28,112537,413],{"class":38},[28,112539,112540],{"class":127},"\"  target:\"",[28,112542,112543],{"class":38},", np.round(target, ",[28,112545,78],{"class":60},[28,112547,30757],{"class":38},[28,112549,112550,112552,112554,112557,112560,112562],{"class":30,"line":17020},[28,112551,34906],{"class":60},[28,112553,413],{"class":38},[28,112555,112556],{"class":127},"\"  ctrl:\"",[28,112558,112559],{"class":38},", np.round(data.ctrl.copy(), ",[28,112561,78],{"class":60},[28,112563,30757],{"class":38},[28,112565,112566,112568,112570,112573,112576,112578],{"class":30,"line":17025},[28,112567,34906],{"class":60},[28,112569,413],{"class":38},[28,112571,112572],{"class":127},"\"  obs_dim:\"",[28,112574,112575],{"class":38},", obs.shape[",[28,112577,244],{"class":60},[28,112579,4919],{"class":38},[28,112581,112582],{"class":30,"line":17031},[28,112583,2662],{"emptyLinePlaceholder":336},[28,112585,112586,112588,112590,112592,112594,112596,112598,112600],{"class":30,"line":17045},[28,112587,31559],{"class":60},[28,112589,413],{"class":38},[28,112591,110589],{"class":127},[28,112593,12697],{"class":38},[28,112595,32274],{"class":60},[28,112597,110596],{"class":38},[28,112599,78],{"class":60},[28,112601,30757],{"class":38},[28,112603,112604,112606,112608,112611,112614,112616,112618,112620],{"class":30,"line":17058},[28,112605,31559],{"class":60},[28,112607,413],{"class":38},[28,112609,112610],{"class":127},"\"final tip:\"",[28,112612,112613],{"class":38},", np.round(site_position(model, data, ",[28,112615,111749],{"class":127},[28,112617,110558],{"class":38},[28,112619,78],{"class":60},[28,112621,30757],{"class":38},[28,112623,112624,112626,112628,112631,112633,112635,112637,112639],{"class":30,"line":17063},[28,112625,31559],{"class":60},[28,112627,413],{"class":38},[28,112629,112630],{"class":127},"\"target:\"",[28,112632,112613],{"class":38},[28,112634,112172],{"class":127},[28,112636,110558],{"class":38},[28,112638,78],{"class":60},[28,112640,30757],{"class":38},[28,112642,112643],{"class":30,"line":17077},[28,112644,2662],{"emptyLinePlaceholder":336},[28,112646,112647],{"class":30,"line":17082},[28,112648,2662],{"emptyLinePlaceholder":336},[28,112650,112651,112653,112655,112657,112659],{"class":30,"line":17088},[28,112652,1796],{"class":34},[28,112654,31480],{"class":60},[28,112656,101772],{"class":34},[28,112658,101775],{"class":127},[28,112660,4001],{"class":38},[28,112662,112663],{"class":30,"line":17093},[28,112664,101782],{"class":38},[14,112666,103783],{},[18,112668,112670],{"className":24084,"code":112669,"language":24086,"meta":23,"style":23},"touch ch7_reacher.py\n",[25,112671,112672],{"__ignoreMap":23},[28,112673,112674,112676],{"class":30,"line":31},[28,112675,101496],{"class":2225},[28,112677,112678],{"class":127}," ch7_reacher.py\n",[14,112680,110657],{},[18,112682,112684],{"className":24084,"code":112683,"language":24086,"meta":23,"style":23},"python ch7_reacher.py\n",[25,112685,112686],{"__ignoreMap":23},[28,112687,112688,112690],{"class":30,"line":31},[28,112689,22],{"class":2225},[28,112691,112678],{"class":127},[380,112693,101785],{"id":101785},[14,112695,112696],{},"读取 site 坐标：",[18,112698,112700],{"className":20,"code":112699,"language":22,"meta":23,"style":23},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[25,112701,112702],{"__ignoreMap":23},[28,112703,112704,112706,112708,112710,112712],{"class":30,"line":31},[28,112705,32203],{"class":34},[28,112707,112069],{"class":2225},[28,112709,112072],{"class":38},[28,112711,1567],{"class":60},[28,112713,112077],{"class":38},[14,112715,112716],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112718,110673],{},[18,112720,112722],{"className":20,"code":112721,"language":22,"meta":23,"style":23},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112723,112724],{"__ignoreMap":23},[28,112725,112726,112728],{"class":30,"line":31},[28,112727,17308],{"class":34},[28,112729,112181],{"class":38},[14,112731,112732],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112734,109998],{},[18,112736,112738],{"className":20,"code":112737,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[25,112739,112740,112752,112765],{"__ignoreMap":23},[28,112741,112742,112744,112746,112748,112750],{"class":30,"line":31},[28,112743,111809],{"class":38},[28,112745,54],{"class":34},[28,112747,111814],{"class":38},[28,112749,930],{"class":34},[28,112751,111819],{"class":38},[28,112753,112754,112757,112759,112761,112763],{"class":30,"line":48},[28,112755,112756],{"class":38},"control_cost ",[28,112758,54],{"class":34},[28,112760,112250],{"class":60},[28,112762,6780],{"class":34},[28,112764,112255],{"class":38},[28,112766,112767,112769,112771,112773,112775,112777,112779],{"class":30,"line":84},[28,112768,17308],{"class":34},[28,112770,110010],{"class":60},[28,112772,413],{"class":38},[28,112774,930],{"class":34},[28,112776,111809],{"class":38},[28,112778,930],{"class":34},[28,112780,112272],{"class":38},[14,112782,112783],{},"奖励由两部分组成：",[363,112785,112786,112791],{},[366,112787,112788,112790],{},[25,112789,111836],{},"：末端离目标越远，奖励越低。",[366,112792,112793,112796],{},[25,112794,112795],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112798,112799],{},"简单控制器：",[18,112801,112803],{"className":20,"code":112802,"language":22,"meta":23,"style":23},"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",[25,112804,112805,112818,112850],{"__ignoreMap":23},[28,112806,112807,112810,112812,112814,112816],{"class":30,"line":31},[28,112808,112809],{"class":38},"error ",[28,112811,54],{"class":34},[28,112813,112381],{"class":38},[28,112815,930],{"class":34},[28,112817,112386],{"class":38},[28,112819,112820,112822,112824,112826,112828,112830,112832,112834,112836,112838,112840,112842,112844,112846,112848],{"class":30,"line":48},[28,112821,106084],{"class":38},[28,112823,244],{"class":60},[28,112825,4705],{"class":38},[28,112827,54],{"class":34},[28,112829,112403],{"class":38},[28,112831,105473],{"class":60},[28,112833,6780],{"class":34},[28,112835,112410],{"class":38},[28,112837,211],{"class":60},[28,112839,112415],{"class":38},[28,112841,930],{"class":34},[28,112843,102616],{"class":60},[28,112845,12697],{"class":38},[28,112847,102616],{"class":60},[28,112849,81],{"class":38},[28,112851,112852,112854,112856,112858,112860,112862,112864,112866,112868,112870,112872,112874,112876,112878,112880],{"class":30,"line":84},[28,112853,106084],{"class":38},[28,112855,61],{"class":60},[28,112857,4705],{"class":38},[28,112859,54],{"class":34},[28,112861,112403],{"class":38},[28,112863,105473],{"class":60},[28,112865,6780],{"class":34},[28,112867,112410],{"class":38},[28,112869,244],{"class":60},[28,112871,112415],{"class":38},[28,112873,930],{"class":34},[28,112875,102616],{"class":60},[28,112877,12697],{"class":38},[28,112879,102616],{"class":60},[28,112881,81],{"class":38},[14,112883,112884],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[380,112886,101921],{"id":101921},[18,112888,112889],{"className":20,"code":112699,"language":22,"meta":23,"style":23},[25,112890,112891],{"__ignoreMap":23},[28,112892,112893,112895,112897,112899,112901],{"class":30,"line":31},[28,112894,32203],{"class":34},[28,112896,112069],{"class":2225},[28,112898,112072],{"class":38},[28,112900,1567],{"class":60},[28,112902,112077],{"class":38},[14,112904,112905,112906,112908,112909,82795,112911,28648],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[25,112907,80066],{}," 是 site 的名字，比如 ",[25,112910,111749],{},[25,112912,112172],{},[18,112914,112916],{"className":20,"code":112915,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,112917,112918],{"__ignoreMap":23},[28,112919,112920,112922,112924],{"class":30,"line":31},[28,112921,103847],{"class":38},[28,112923,54],{"class":34},[28,112925,112086],{"class":38},[14,112927,112928],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[18,112930,112932],{"className":20,"code":112931,"language":22,"meta":23,"style":23},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[25,112933,112934,112946],{"__ignoreMap":23},[28,112935,112936,112938,112940,112942,112944],{"class":30,"line":31},[28,112937,1796],{"class":34},[28,112939,103662],{"class":38},[28,112941,1307],{"class":34},[28,112943,4355],{"class":60},[28,112945,4001],{"class":38},[28,112947,112948,112950,112952,112954,112956,112958,112960,112962,112964,112966],{"class":30,"line":48},[28,112949,104108],{"class":34},[28,112951,103648],{"class":60},[28,112953,413],{"class":38},[28,112955,462],{"class":34},[28,112957,112111],{"class":127},[28,112959,1293],{"class":60},[28,112961,80066],{"class":38},[28,112963,1343],{"class":60},[28,112965,654],{"class":127},[28,112967,81],{"class":38},[14,112969,112970,112971,112974,112975,112977],{},"如果 site 没找到，就主动报错。",[25,112972,112973],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[25,112976,80066],{}," 的值放进字符串里。",[18,112979,112981],{"className":20,"code":112980,"language":22,"meta":23,"style":23},"return data.site_xpos[site_id].copy()\n",[25,112982,112983],{"__ignoreMap":23},[28,112984,112985,112987],{"class":30,"line":31},[28,112986,17308],{"class":34},[28,112988,112128],{"class":38},[14,112990,112991,112992,112994,112995,112998],{},"返回这个 site 的世界坐标。",[25,112993,103893],{}," 里的每一行都是一个 site 的 ",[25,112996,112997],{},"(x, y, z)"," 坐标。",[18,113000,113002],{"className":20,"code":113001,"language":22,"meta":23,"style":23},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,113003,113004],{"__ignoreMap":23},[28,113005,113006,113008,113010],{"class":30,"line":31},[28,113007,32203],{"class":34},[28,113009,112143],{"class":2225},[28,113011,112146],{"class":38},[14,113013,113014],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[18,113016,113018],{"className":20,"code":113017,"language":22,"meta":23,"style":23},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[25,113019,113020,113032],{"__ignoreMap":23},[28,113021,113022,113024,113026,113028,113030],{"class":30,"line":31},[28,113023,111781],{"class":38},[28,113025,54],{"class":34},[28,113027,112156],{"class":38},[28,113029,111749],{"class":127},[28,113031,81],{"class":38},[28,113033,113034,113036,113038,113040,113042],{"class":30,"line":48},[28,113035,111791],{"class":38},[28,113037,54],{"class":34},[28,113039,112156],{"class":38},[28,113041,112172],{"class":127},[28,113043,81],{"class":38},[14,113045,113046],{},"分别读取末端点和目标点的世界坐标。",[18,113048,113049],{"className":20,"code":112721,"language":22,"meta":23,"style":23},[25,113050,113051],{"__ignoreMap":23},[28,113052,113053,113055],{"class":30,"line":31},[28,113054,17308],{"class":34},[28,113056,112181],{"class":38},[14,113058,113059],{},"把四部分拼成一个观测数组：",[18,113061,113064],{"className":113062,"code":113063,"language":5449,"meta":23},[5447],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[25,113065,113063],{"__ignoreMap":23},[18,113067,113069],{"className":20,"code":113068,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\n",[25,113070,113071],{"__ignoreMap":23},[28,113072,113073,113075,113077,113079,113081],{"class":30,"line":31},[28,113074,111809],{"class":38},[28,113076,54],{"class":34},[28,113078,111814],{"class":38},[28,113080,930],{"class":34},[28,113082,111819],{"class":38},[14,113084,113085,113086,113089,113090,113093],{},"计算 tip 到 target 的距离。",[25,113087,113088],{},"tip - target"," 得到一个三维向量，",[25,113091,113092],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113095,14895],{},[18,113097,113100],{"className":113098,"code":113099,"language":5449,"meta":23},[5447],"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",[25,113101,113099],{"__ignoreMap":23},[18,113103,113105],{"className":20,"code":113104,"language":22,"meta":23,"style":23},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[25,113106,113107],{"__ignoreMap":23},[28,113108,113109,113111,113113,113115,113117],{"class":30,"line":31},[28,113110,112756],{"class":38},[28,113112,54],{"class":34},[28,113114,112250],{"class":60},[28,113116,6780],{"class":34},[28,113118,112255],{"class":38},[14,113120,113121,113122,113125,113126,113129],{},"计算动作惩罚。",[25,113123,113124],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[25,113127,113128],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[18,113131,113133],{"className":20,"code":113132,"language":22,"meta":23,"style":23},"return float(-dist - control_cost)\n",[25,113134,113135],{"__ignoreMap":23},[28,113136,113137,113139,113141,113143,113145,113147,113149],{"class":30,"line":31},[28,113138,17308],{"class":34},[28,113140,110010],{"class":60},[28,113142,413],{"class":38},[28,113144,930],{"class":34},[28,113146,111809],{"class":38},[28,113148,930],{"class":34},[28,113150,112272],{"class":38},[14,113152,113153],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[18,113155,113156],{"className":20,"code":111016,"language":22,"meta":23,"style":23},[25,113157,113158],{"__ignoreMap":23},[28,113159,113160,113162,113164],{"class":30,"line":31},[28,113161,111023],{"class":38},[28,113163,54],{"class":34},[28,113165,104974],{"class":60},[14,113167,113168],{},"累计奖励变量，记录整个运行过程的总分。",[18,113170,113172],{"className":20,"code":113171,"language":22,"meta":23,"style":23},"for step in range(500):\n",[25,113173,113174],{"__ignoreMap":23},[28,113175,113176,113178,113180,113182,113184,113186,113188],{"class":30,"line":31},[28,113177,3287],{"class":34},[28,113179,31873],{"class":38},[28,113181,26306],{"class":34},[28,113183,32699],{"class":60},[28,113185,413],{"class":38},[28,113187,65330],{"class":60},[28,113189,31046],{"class":38},[14,113191,113192],{},"运行 500 个控制步。",[18,113194,113195],{"className":20,"code":104756,"language":22,"meta":23,"style":23},[25,113196,113197],{"__ignoreMap":23},[28,113198,113199],{"class":30,"line":31},[28,113200,104756],{"class":38},[14,113202,113203,113204,101231,113206,113208],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[25,113205,103444],{},[25,113207,103447],{}," 是当前状态下的坐标。",[18,113210,113212],{"className":20,"code":113211,"language":22,"meta":23,"style":23},"error = target - tip\n",[25,113213,113214],{"__ignoreMap":23},[28,113215,113216,113218,113220,113222,113224],{"class":30,"line":31},[28,113217,112809],{"class":38},[28,113219,54],{"class":34},[28,113221,112381],{"class":38},[28,113223,930],{"class":34},[28,113225,112386],{"class":38},[14,113227,113228],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[18,113230,113232],{"className":20,"code":113231,"language":22,"meta":23,"style":23},"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",[25,113233,113234,113266],{"__ignoreMap":23},[28,113235,113236,113238,113240,113242,113244,113246,113248,113250,113252,113254,113256,113258,113260,113262,113264],{"class":30,"line":31},[28,113237,106084],{"class":38},[28,113239,244],{"class":60},[28,113241,4705],{"class":38},[28,113243,54],{"class":34},[28,113245,112403],{"class":38},[28,113247,105473],{"class":60},[28,113249,6780],{"class":34},[28,113251,112410],{"class":38},[28,113253,211],{"class":60},[28,113255,112415],{"class":38},[28,113257,930],{"class":34},[28,113259,102616],{"class":60},[28,113261,12697],{"class":38},[28,113263,102616],{"class":60},[28,113265,81],{"class":38},[28,113267,113268,113270,113272,113274,113276,113278,113280,113282,113284,113286,113288,113290,113292,113294,113296],{"class":30,"line":48},[28,113269,106084],{"class":38},[28,113271,61],{"class":60},[28,113273,4705],{"class":38},[28,113275,54],{"class":34},[28,113277,112403],{"class":38},[28,113279,105473],{"class":60},[28,113281,6780],{"class":34},[28,113283,112410],{"class":38},[28,113285,244],{"class":60},[28,113287,112415],{"class":38},[28,113289,930],{"class":34},[28,113291,102616],{"class":60},[28,113293,12697],{"class":38},[28,113295,102616],{"class":60},[28,113297,81],{"class":38},[14,113299,113300,113301,113304],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[25,113302,113303],{},"error -> ctrl -> step"," 的流程。",[18,113306,113307],{"className":20,"code":104718,"language":22,"meta":23,"style":23},[25,113308,113309],{"__ignoreMap":23},[28,113310,113311],{"class":30,"line":31},[28,113312,104718],{"class":38},[14,113314,113315],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[18,113317,113319],{"className":20,"code":113318,"language":22,"meta":23,"style":23},"obs = get_obs(model, data)\n",[25,113320,113321],{"__ignoreMap":23},[28,113322,113323,113325,113327],{"class":30,"line":31},[28,113324,111067],{"class":38},[28,113326,54],{"class":34},[28,113328,112504],{"class":38},[14,113330,113331,113332,113335],{},"读取最新观测。后面打印 ",[25,113333,113334],{},"obs.shape[0]","，用来确认观测维度是 10。",[351,113337,102529],{"id":102528},[14,113339,113340],{},"观测维度为:",[18,113342,113345],{"className":113343,"code":113344,"language":5449,"meta":23},[5447],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[25,113346,113344],{"__ignoreMap":23},[14,113348,113349],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113351,113352],{},"程序每 100 步打印：",[18,113354,113357],{"className":113355,"code":113356,"language":5449,"meta":23},[5447],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[25,113358,113356],{"__ignoreMap":23},[14,113360,113361,113362,113364],{},"如果控制有效，你应该看到最终 ",[25,113363,103444],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[351,113366,102561],{"id":102560},[363,113368,113369,113372,113375,113381,113387,113394,113404],{},[366,113370,113371],{},"修改目标点位置。",[366,113373,113374],{},"重新运行，观察最终 tip 是否变化。",[366,113376,113377,113378,113380],{},"把 gravity 改成 ",[25,113379,102802],{},"，观察控制是否变差。",[366,113382,111394,113383,111398,113385,28648],{},[25,113384,102371],{},[25,113386,211],{},[366,113388,102624,113389,102627,113391,113393],{},[25,113390,110809],{},[25,113392,107520],{},"，观察机械臂是否更难移动。",[366,113395,102624,113396,82786,113398,102627,113400,113403],{},[25,113397,103447],{},[25,113399,104359],{},[25,113401,113402],{},"0.2 0 0.6","，观察 reward 和 final tip。",[366,113405,113406],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[351,113408,102666],{"id":102665},[380,113410,113412],{"id":113411},"site-not-found",[25,113413,113414],{},"site not found",[14,113416,113417,113418,101231,113421,28648],{},"检查 XML 中是否有 ",[25,113419,113420],{},"site name=\"tip\"",[25,113422,113423],{},"site name=\"target\"",[380,113425,113426],{"id":113426},"机械臂完全不动",[14,113428,102736],{},[363,113430,113431,113436,113439,113444],{},[366,113432,113433,113435],{},[25,113434,102371],{}," 是否为 2",[366,113437,113438],{},"actuator 是否引用正确 joint",[366,113440,113441,113443],{},[25,113442,101289],{}," 是否被赋值",[366,113445,113446,113447],{},"是否执行了 ",[25,113448,100898],{},[380,113450,113451],{"id":113451},"控制效果不好",[14,113453,113454],{},"正常。本章重点不是控制器最优，而是任务结构:",[18,113456,113459],{"className":113457,"code":113458,"language":5449,"meta":23},[5447],"obs → action → mj_step → reward → next_obs\n",[25,113460,113458],{"__ignoreMap":23},[380,113462,113464],{"id":113463},"tip-坐标不变化","tip 坐标不变化",[14,113466,102788],{},[363,113468,113469,113474,113482,113491],{},[366,113470,113471,113472,28648],{},"是否每步调用了 ",[25,113473,100898],{},[366,113475,113476,113477,101231,113479,28648],{},"是否写入了 ",[25,113478,106339],{},[25,113480,113481],{},"data.ctrl[1]",[366,113483,113484,113485,617,113488,28648],{},"actuator 是否正确引用 ",[25,113486,113487],{},"joint1",[25,113489,113490],{},"joint2",[366,113492,113493],{},"控制输入是否太小。",[380,113495,113496],{"id":113496},"目标点不会动",[14,113498,113499],{},"本章的 target 是固定 site：",[18,113501,113503],{"className":53323,"code":113502,"language":53325,"meta":23,"style":23},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[25,113504,113505],{"__ignoreMap":23},[28,113506,113507,113509,113511,113513,113515,113517,113519,113521,113524],{"class":30,"line":31},[28,113508,1307],{"class":38},[28,113510,103423],{"class":51556},[28,113512,15182],{"class":2225},[28,113514,54],{"class":38},[28,113516,112172],{"class":127},[28,113518,101319],{"class":2225},[28,113520,54],{"class":38},[28,113522,113523],{"class":127},"\"0.5 0 0.4\"",[28,113525,113526],{"class":38}," ...\u002F>\n",[14,113528,113529,113530,113532],{},"它直接挂在 ",[25,113531,102054],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[380,113534,113535],{"id":113535},"机械臂不像真实机械臂",[14,113537,113538],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[351,113540,102820],{"id":102819},[14,113542,113543],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113545,113546],{},"核心公式：",[18,113548,113551],{"className":113549,"code":113550,"language":5449,"meta":23},[5447],"distance = ||tip - target||\nreward = -distance - action_cost\n",[25,113552,113550],{"__ignoreMap":23},[14,113554,113555],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[328,113557,113558],{},"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":23,"searchDepth":48,"depth":48,"links":113560},[113561,113562,113563,113568,113572,113573,113574,113582],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":113564},[113565,113566,113567],{"id":111764,"depth":84,"text":111765},{"id":111840,"depth":84,"text":111840},{"id":111870,"depth":84,"text":111871},{"id":101465,"depth":48,"text":101466,"children":113569},[113570,113571],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":113575},[113576,113577,113578,113579,113580,113581],{"id":113411,"depth":84,"text":113414},{"id":113426,"depth":84,"text":113426},{"id":113451,"depth":84,"text":113451},{"id":113463,"depth":84,"text":113464},{"id":113496,"depth":84,"text":113496},{"id":113535,"depth":84,"text":113535},{"id":102819,"depth":48,"text":102820},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111568,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113589,"title":113590,"body":113591,"description":23,"extension":334,"meta":117053,"navigation":336,"path":117054,"seo":117055,"stem":117056,"__hash__":117057},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113592,"toc":117024},[113593,113596,113598,113601,113604,113629,113632,113638,113641,113647,113649,113651,113675,113677,113695,113697,113740,113742,113769,113771,113774,113826,113829,113835,113844,113847,113885,113888,113927,113930,113938,113945,113948,113954,113956,114010,114017,114062,114065,114069,114085,114095,114097,115358,115360,115372,115374,115385,115387,115390,115411,115414,115417,115450,115456,115459,115492,115495,115498,115539,115544,115558,115561,115574,115579,115602,115604,115619,115629,115644,115651,115671,115686,115704,115707,115724,115732,115748,115754,115786,115799,115831,115841,115876,115890,115936,115950,115992,116003,116016,116022,116055,116058,116085,116095,116135,116145,116162,116169,116187,116190,116231,116244,116259,116262,116285,116288,116300,116303,116322,116327,116348,116351,116366,116369,116403,116415,116430,116433,116458,116461,116480,116483,116515,116518,116542,116548,116578,116585,116598,116601,116603,116605,116611,116614,116617,116629,116632,116634,116688,116690,116694,116700,116709,116712,116719,116721,116744,116747,116751,116753,116771,116777,116779,116812,116815,116821,116825,116828,116848,116853,116857,116864,116884,116889,116893,116896,116916,116919,117005,117009,117012,117018,117021],[10,113594,113590],{"id":113595},"_8gymnasium-风格强化学习接口基础",[351,113597,100860],{"id":100859},[14,113599,113600],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113602,113603],{},"你将实现:",[18,113605,113607],{"className":20,"code":113606,"language":22,"meta":23,"style":23},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[25,113608,113609,113619],{"__ignoreMap":23},[28,113610,113611,113614,113616],{"class":30,"line":31},[28,113612,113613],{"class":38},"obs, info ",[28,113615,54],{"class":34},[28,113617,113618],{"class":38}," env.reset()\n",[28,113620,113621,113624,113626],{"class":30,"line":48},[28,113622,113623],{"class":38},"obs, reward, terminated, truncated, info ",[28,113625,54],{"class":34},[28,113627,113628],{"class":38}," env.step(action)\n",[14,113630,113631],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113633,113634,113635,113637],{},"前面章节的代码都是“脚本式”的：在 ",[25,113636,102508],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113639,113640],{},"可以先记住 Gymnasium 环境的核心交互：",[18,113642,113645],{"className":113643,"code":113644,"language":5449,"meta":23},[5447],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[25,113646,113644],{"__ignoreMap":23},[351,113648,100983],{"id":100982},[14,113650,100986],{},[18,113652,113653],{"className":24084,"code":104601,"language":24086,"meta":23,"style":23},[25,113654,113655],{"__ignoreMap":23},[28,113656,113657,113659,113661,113663,113665,113667,113669,113671,113673],{"class":30,"line":31},[28,113658,24839],{"class":2225},[28,113660,26578],{"class":127},[28,113662,24096],{"class":127},[28,113664,26663],{"class":60},[28,113666,104616],{"class":127},[28,113668,101011],{"class":127},[28,113670,102714],{"class":127},[28,113672,101027],{"class":127},[28,113674,104625],{"class":127},[14,113676,103032],{},[18,113678,113680],{"className":24084,"code":113679,"language":24086,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113681,113682],{"__ignoreMap":23},[28,113683,113684,113686,113688,113690,113692],{"class":30,"line":31},[28,113685,24093],{"class":2225},[28,113687,24096],{"class":127},[28,113689,101143],{"class":127},[28,113691,107924],{"class":127},[28,113693,113694],{"class":127}," gymnasium\n",[14,113696,103049],{},[18,113698,113700],{"className":24084,"code":113699,"language":24086,"meta":23,"style":23},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113701,113702,113719,113728],{"__ignoreMap":23},[28,113703,113704,113706,113708,113710,113713,113715,113717],{"class":30,"line":31},[28,113705,30593],{"class":2225},[28,113707,29439],{"class":127},[28,113709,25378],{"class":60},[28,113711,113712],{"class":127}," mujoco-gym-api",[28,113714,101188],{"class":127},[28,113716,101191],{"class":60},[28,113718,101194],{"class":60},[28,113720,113721,113723,113725],{"class":30,"line":48},[28,113722,30593],{"class":2225},[28,113724,101201],{"class":127},[28,113726,113727],{"class":127}," mujoco-gym-api\n",[28,113729,113730,113732,113734,113736,113738],{"class":30,"line":84},[28,113731,24093],{"class":2225},[28,113733,24096],{"class":127},[28,113735,101143],{"class":127},[28,113737,107924],{"class":127},[28,113739,113694],{"class":127},[14,113741,101217],{},[363,113743,113744,113754,113757,113763],{},[366,113745,113746,113747,113750,113751,28648],{},"本章使用 ",[25,113748,113749],{},"gymnasium","，不是旧版 ",[25,113752,113753],{},"gym",[366,113755,113756],{},"Gymnasium API 与旧 Gym API 有差异。",[366,113758,113759,113760,28648],{},"旧 Gym 常见返回值是 4 个: ",[25,113761,113762],{},"obs, reward, done, info",[366,113764,113765,113766,28648],{},"Gymnasium 返回值是 5 个: ",[25,113767,113768],{},"obs, reward, terminated, truncated, info",[351,113770,101258],{"id":101257},[14,113772,113773],{},"强化学习环境接口包含:",[543,113775,113776,113785],{},[546,113777,113778],{},[549,113779,113780,113783],{},[552,113781,113782],{"align":23998},"方法",[552,113784,102909],{"align":23998},[590,113786,113787,113797,113807,113817],{},[549,113788,113789,113794],{},[595,113790,113791],{"align":23998},[25,113792,113793],{},"reset()",[595,113795,113796],{"align":23998},"重置环境",[549,113798,113799,113804],{},[595,113800,113801],{"align":23998},[25,113802,113803],{},"step(action)",[595,113805,113806],{"align":23998},"执行动作",[549,113808,113809,113814],{},[595,113810,113811],{"align":23998},[25,113812,113813],{},"observation_space",[595,113815,113816],{"align":23998},"观测空间",[549,113818,113819,113824],{},[595,113820,113821],{"align":23998},[25,113822,113823],{},"action_space",[595,113825,23916],{"align":23998},[14,113827,113828],{},"一个最小环境需要完成:",[18,113830,113833],{"className":113831,"code":113832,"language":5449,"meta":23},[5447],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[25,113834,113832],{"__ignoreMap":23},[380,113836,113838,101231,113841,104851],{"id":113837},"terminated-和-truncated-的区别",[25,113839,113840],{},"terminated",[25,113842,113843],{},"truncated",[14,113845,113846],{},"Gymnasium 把“结束”拆成两个概念：",[543,113848,113849,113859],{},[546,113850,113851],{},[549,113852,113853,113855,113857],{},[552,113854,104787],{"align":23998},[552,113856,100913],{"align":23998},[552,113858,21449],{"align":23998},[590,113860,113861,113873],{},[549,113862,113863,113867,113870],{},[595,113864,113865],{"align":23998},[25,113866,113840],{},[595,113868,113869],{"align":23998},"任务自然结束",[595,113871,113872],{"align":23998},"机械臂到达目标、机器人摔倒",[549,113874,113875,113879,113882],{},[595,113876,113877],{"align":23998},[25,113878,113843],{},[595,113880,113881],{"align":23998},"因外部限制截断",[595,113883,113884],{"align":23998},"达到最大步数、时间限制",[14,113886,113887],{},"本章中：",[18,113889,113891],{"className":20,"code":113890,"language":22,"meta":23,"style":23},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[25,113892,113893,113908],{"__ignoreMap":23},[28,113894,113895,113898,113900,113903,113905],{"class":30,"line":31},[28,113896,113897],{"class":38},"terminated ",[28,113899,54],{"class":34},[28,113901,113902],{"class":38}," dist ",[28,113904,1307],{"class":34},[28,113906,113907],{"class":60}," 0.05\n",[28,113909,113910,113913,113915,113917,113920,113922,113924],{"class":30,"line":48},[28,113911,113912],{"class":38},"truncated ",[28,113914,54],{"class":34},[28,113916,39129],{"class":60},[28,113918,113919],{"class":38},".steps ",[28,113921,1972],{"class":34},[28,113923,39129],{"class":60},[28,113925,113926],{"class":38},".max_steps\n",[14,113928,113929],{},"也就是：",[363,113931,113932,113935],{},[366,113933,113934],{},"末端距离目标小于 0.05，任务成功结束。",[366,113936,113937],{},"步数超过上限，episode 被截断。",[380,113939,113941,101231,113943],{"id":113940},"observation_space-和-action_space",[25,113942,113813],{},[25,113944,113823],{},[14,113946,113947],{},"这两个对象告诉算法：",[18,113949,113952],{"className":113950,"code":113951,"language":5449,"meta":23},[5447],"观测长什么样\n动作允许多大\n",[25,113953,113951],{"__ignoreMap":23},[14,113955,14895],{},[18,113957,113959],{"className":20,"code":113958,"language":22,"meta":23,"style":23},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[25,113960,113961],{"__ignoreMap":23},[28,113962,113963,113965,113968,113970,113973,113976,113979,113981,113983,113986,113988,113990,113992,113994,113996,113998,114000,114003,114005,114007],{"class":30,"line":31},[28,113964,31083],{"class":60},[28,113966,113967],{"class":38},".action_space ",[28,113969,54],{"class":34},[28,113971,113972],{"class":38}," spaces.Box(",[28,113974,113975],{"class":5478},"low",[28,113977,113978],{"class":34},"=-",[28,113980,102616],{"class":60},[28,113982,12697],{"class":38},[28,113984,113985],{"class":5478},"high",[28,113987,54],{"class":34},[28,113989,102616],{"class":60},[28,113991,12697],{"class":38},[28,113993,96215],{"class":5478},[28,113995,54],{"class":34},[28,113997,413],{"class":38},[28,113999,211],{"class":60},[28,114001,114002],{"class":38},",), ",[28,114004,93754],{"class":5478},[28,114006,54],{"class":34},[28,114008,114009],{"class":38},"np.float32)\n",[14,114011,114012,114013,114016],{},"表示动作是 2 维数组，每个值都在 ",[25,114014,114015],{},"[-1, 1]"," 范围内。",[18,114018,114020],{"className":20,"code":114019,"language":22,"meta":23,"style":23},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[25,114021,114022],{"__ignoreMap":23},[28,114023,114024,114026,114029,114031,114033,114035,114037,114040,114042,114044,114046,114048,114050,114052,114054,114056,114058,114060],{"class":30,"line":31},[28,114025,31083],{"class":60},[28,114027,114028],{"class":38},".observation_space ",[28,114030,54],{"class":34},[28,114032,113972],{"class":38},[28,114034,113975],{"class":5478},[28,114036,113978],{"class":34},[28,114038,114039],{"class":38},"np.inf, ",[28,114041,113985],{"class":5478},[28,114043,54],{"class":34},[28,114045,114039],{"class":38},[28,114047,96215],{"class":5478},[28,114049,54],{"class":34},[28,114051,413],{"class":38},[28,114053,845],{"class":60},[28,114055,114002],{"class":38},[28,114057,93754],{"class":5478},[28,114059,54],{"class":34},[28,114061,114009],{"class":38},[14,114063,114064],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[380,114066,114068],{"id":114067},"frame_skip-是什么","frame_skip 是什么",[18,114070,114072],{"className":20,"code":114071,"language":22,"meta":23,"style":23},"self.frame_skip = 5\n",[25,114073,114074],{"__ignoreMap":23},[28,114075,114076,114078,114081,114083],{"class":30,"line":31},[28,114077,31083],{"class":60},[28,114079,114080],{"class":38},".frame_skip ",[28,114082,54],{"class":34},[28,114084,54683],{"class":60},[14,114086,114087,114088,114091,114092,114094],{},"表示外部调用一次 ",[25,114089,114090],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[25,114093,101428],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[351,114096,101466],{"id":101465},[18,114098,114100],{"className":20,"code":114099,"language":22,"meta":23,"style":23},"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",[25,114101,114102,114114,114120,114130,114141,114145,114149,114157,114162,114166,114170,114174,114178,114182,114186,114190,114195,114199,114203,114207,114212,114216,114220,114224,114228,114232,114236,114240,114244,114248,114252,114256,114260,114264,114282,114297,114301,114314,114324,114339,114356,114360,114381,114400,114425,114439,114443,114453,114465,114475,114479,114521,114559,114563,114573,114589,114604,114623,114630,114634,114647,114662,114677,114690,114709,114725,114729,114770,114785,114800,114804,114843,114854,114867,114871,114881,114890,114894,114904,114919,114937,114941,114952,114969,114982,114986,114996,115000,115011,115022,115026,115040,115054,115070,115074,115087,115104,115119,115126,115130,115134,115146,115156,115174,115186,115198,115202,115210,115226,115235,115244,115252,115294,115307,115312,115316,115334,115338,115342,115354],{"__ignoreMap":23},[28,114103,114104,114106,114109,114111],{"class":30,"line":31},[28,114105,35],{"class":34},[28,114107,114108],{"class":38}," gymnasium ",[28,114110,42],{"class":34},[28,114112,114113],{"class":38}," gym\n",[28,114115,114116,114118],{"class":30,"line":48},[28,114117,35],{"class":34},[28,114119,101514],{"class":38},[28,114121,114122,114124,114126,114128],{"class":30,"line":84},[28,114123,35],{"class":34},[28,114125,39],{"class":38},[28,114127,42],{"class":34},[28,114129,45],{"class":38},[28,114131,114132,114134,114136,114138],{"class":30,"line":91},[28,114133,30997],{"class":34},[28,114135,114108],{"class":38},[28,114137,35],{"class":34},[28,114139,114140],{"class":38}," spaces\n",[28,114142,114143],{"class":30,"line":97},[28,114144,2662],{"emptyLinePlaceholder":336},[28,114146,114147],{"class":30,"line":103},[28,114148,2662],{"emptyLinePlaceholder":336},[28,114150,114151,114153,114155],{"class":30,"line":109},[28,114152,101527],{"class":60},[28,114154,13826],{"class":34},[28,114156,101532],{"class":127},[28,114158,114159],{"class":30,"line":118},[28,114160,114161],{"class":127},"\u003Cmujoco model=\"gym_reacher\">\n",[28,114163,114164],{"class":30,"line":124},[28,114165,111951],{"class":127},[28,114167,114168],{"class":30,"line":131},[28,114169,2662],{"emptyLinePlaceholder":336},[28,114171,114172],{"class":30,"line":137},[28,114173,101551],{"class":127},[28,114175,114176],{"class":30,"line":143},[28,114177,111969],{"class":127},[28,114179,114180],{"class":30,"line":149},[28,114181,2662],{"emptyLinePlaceholder":336},[28,114183,114184],{"class":30,"line":1890},[28,114185,111978],{"class":127},[28,114187,114188],{"class":30,"line":1904},[28,114189,111983],{"class":127},[28,114191,114192],{"class":30,"line":1909},[28,114193,114194],{"class":127},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114196,114197],{"class":30,"line":1915},[28,114198,2662],{"emptyLinePlaceholder":336},[28,114200,114201],{"class":30,"line":1936},[28,114202,111997],{"class":127},[28,114204,114205],{"class":30,"line":1941},[28,114206,112002],{"class":127},[28,114208,114209],{"class":30,"line":1955},[28,114210,114211],{"class":127},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114213,114214],{"class":30,"line":1960},[28,114215,112012],{"class":127},[28,114217,114218],{"class":30,"line":1989},[28,114219,106651],{"class":127},[28,114221,114222],{"class":30,"line":1994},[28,114223,101580],{"class":127},[28,114225,114226],{"class":30,"line":2011},[28,114227,101585],{"class":127},[28,114229,114230],{"class":30,"line":2016},[28,114231,2662],{"emptyLinePlaceholder":336},[28,114233,114234],{"class":30,"line":2021},[28,114235,106668],{"class":127},[28,114237,114238],{"class":30,"line":2026},[28,114239,112037],{"class":127},[28,114241,114242],{"class":30,"line":2040},[28,114243,112042],{"class":127},[28,114245,114246],{"class":30,"line":2045},[28,114247,106678],{"class":127},[28,114249,114250],{"class":30,"line":2839},[28,114251,101590],{"class":127},[28,114253,114254],{"class":30,"line":2853},[28,114255,95950],{"class":127},[28,114257,114258],{"class":30,"line":2861},[28,114259,2662],{"emptyLinePlaceholder":336},[28,114261,114262],{"class":30,"line":2866},[28,114263,2662],{"emptyLinePlaceholder":336},[28,114265,114266,114268,114271,114273,114275,114277,114280],{"class":30,"line":2872},[28,114267,14956],{"class":34},[28,114269,114270],{"class":2225}," ReacherEnv",[28,114272,413],{"class":38},[28,114274,113753],{"class":2225},[28,114276,956],{"class":38},[28,114278,114279],{"class":2225},"Env",[28,114281,31046],{"class":38},[28,114283,114284,114287,114289,114291,114294],{"class":30,"line":2878},[28,114285,114286],{"class":38},"    metadata ",[28,114288,54],{"class":34},[28,114290,4710],{"class":38},[28,114292,114293],{"class":127},"\"render_modes\"",[28,114295,114296],{"class":38},": []}\n",[28,114298,114299],{"class":30,"line":2883},[28,114300,2662],{"emptyLinePlaceholder":336},[28,114302,114303,114305,114307,114310,114312],{"class":30,"line":8210},[28,114304,31061],{"class":34},[28,114306,31064],{"class":60},[28,114308,114309],{"class":38},"(self) -> ",[28,114311,95938],{"class":60},[28,114313,4001],{"class":38},[28,114315,114316,114318,114320,114322],{"class":30,"line":8234},[28,114317,31077],{"class":60},[28,114319,17523],{"class":38},[28,114321,31089],{"class":60},[28,114323,2238],{"class":38},[28,114325,114326,114328,114331,114333,114335,114337],{"class":30,"line":8239},[28,114327,31105],{"class":60},[28,114329,114330],{"class":38},".model ",[28,114332,54],{"class":34},[28,114334,101625],{"class":38},[28,114336,101527],{"class":60},[28,114338,81],{"class":38},[28,114340,114341,114343,114346,114348,114351,114353],{"class":30,"line":8245},[28,114342,31105],{"class":60},[28,114344,114345],{"class":38},".data ",[28,114347,54],{"class":34},[28,114349,114350],{"class":38}," mujoco.MjData(",[28,114352,31083],{"class":60},[28,114354,114355],{"class":38},".model)\n",[28,114357,114358],{"class":30,"line":8272},[28,114359,2662],{"emptyLinePlaceholder":336},[28,114361,114362,114364,114367,114369,114372,114374,114377,114379],{"class":30,"line":8277},[28,114363,31105],{"class":60},[28,114365,114366],{"class":38},".tip_site_id ",[28,114368,54],{"class":34},[28,114370,114371],{"class":38}," mujoco.mj_name2id(",[28,114373,31083],{"class":60},[28,114375,114376],{"class":38},".model, mujoco.mjtObj.mjOBJ_SITE, ",[28,114378,111749],{"class":127},[28,114380,81],{"class":38},[28,114382,114383,114385,114388,114390,114392,114394,114396,114398],{"class":30,"line":8283},[28,114384,31105],{"class":60},[28,114386,114387],{"class":38},".target_site_id ",[28,114389,54],{"class":34},[28,114391,114371],{"class":38},[28,114393,31083],{"class":60},[28,114395,114376],{"class":38},[28,114397,112172],{"class":127},[28,114399,81],{"class":38},[28,114401,114402,114404,114406,114408,114410,114412,114415,114417,114419,114421,114423],{"class":30,"line":8295},[28,114403,2759],{"class":34},[28,114405,39129],{"class":60},[28,114407,114366],{"class":38},[28,114409,1307],{"class":34},[28,114411,4355],{"class":60},[28,114413,114414],{"class":34}," or",[28,114416,39129],{"class":60},[28,114418,114387],{"class":38},[28,114420,1307],{"class":34},[28,114422,4355],{"class":60},[28,114424,4001],{"class":38},[28,114426,114427,114430,114432,114434,114437],{"class":30,"line":8307},[28,114428,114429],{"class":34},"            raise",[28,114431,103648],{"class":60},[28,114433,413],{"class":38},[28,114435,114436],{"class":127},"\"required sites not found\"",[28,114438,81],{"class":38},[28,114440,114441],{"class":30,"line":8319},[28,114442,2662],{"emptyLinePlaceholder":336},[28,114444,114445,114447,114449,114451],{"class":30,"line":9978},[28,114446,31105],{"class":60},[28,114448,114080],{"class":38},[28,114450,54],{"class":34},[28,114452,54683],{"class":60},[28,114454,114455,114457,114460,114462],{"class":30,"line":10003},[28,114456,31105],{"class":60},[28,114458,114459],{"class":38},".max_steps ",[28,114461,54],{"class":34},[28,114463,114464],{"class":60}," 200\n",[28,114466,114467,114469,114471,114473],{"class":30,"line":10026},[28,114468,31105],{"class":60},[28,114470,113919],{"class":38},[28,114472,54],{"class":34},[28,114474,47589],{"class":60},[28,114476,114477],{"class":30,"line":10050},[28,114478,2662],{"emptyLinePlaceholder":336},[28,114480,114481,114483,114485,114487,114489,114491,114493,114495,114497,114499,114501,114503,114505,114507,114509,114511,114513,114515,114517,114519],{"class":30,"line":10055},[28,114482,31105],{"class":60},[28,114484,113967],{"class":38},[28,114486,54],{"class":34},[28,114488,113972],{"class":38},[28,114490,113975],{"class":5478},[28,114492,113978],{"class":34},[28,114494,102616],{"class":60},[28,114496,12697],{"class":38},[28,114498,113985],{"class":5478},[28,114500,54],{"class":34},[28,114502,102616],{"class":60},[28,114504,12697],{"class":38},[28,114506,96215],{"class":5478},[28,114508,54],{"class":34},[28,114510,413],{"class":38},[28,114512,211],{"class":60},[28,114514,114002],{"class":38},[28,114516,93754],{"class":5478},[28,114518,54],{"class":34},[28,114520,114009],{"class":38},[28,114522,114523,114525,114527,114529,114531,114533,114535,114537,114539,114541,114543,114545,114547,114549,114551,114553,114555,114557],{"class":30,"line":10060},[28,114524,31105],{"class":60},[28,114526,114028],{"class":38},[28,114528,54],{"class":34},[28,114530,113972],{"class":38},[28,114532,113975],{"class":5478},[28,114534,113978],{"class":34},[28,114536,114039],{"class":38},[28,114538,113985],{"class":5478},[28,114540,54],{"class":34},[28,114542,114039],{"class":38},[28,114544,96215],{"class":5478},[28,114546,54],{"class":34},[28,114548,413],{"class":38},[28,114550,845],{"class":60},[28,114552,114002],{"class":38},[28,114554,93754],{"class":5478},[28,114556,54],{"class":34},[28,114558,114009],{"class":38},[28,114560,114561],{"class":30,"line":10065},[28,114562,2662],{"emptyLinePlaceholder":336},[28,114564,114565,114567,114570],{"class":30,"line":10074},[28,114566,31061],{"class":34},[28,114568,114569],{"class":2225}," _get_obs",[28,114571,114572],{"class":38},"(self) -> np.ndarray:\n",[28,114574,114575,114577,114579,114581,114584,114586],{"class":30,"line":10079},[28,114576,112350],{"class":38},[28,114578,54],{"class":34},[28,114580,39129],{"class":60},[28,114582,114583],{"class":38},".data.site_xpos[",[28,114585,31083],{"class":60},[28,114587,114588],{"class":38},".tip_site_id].copy()\n",[28,114590,114591,114593,114595,114597,114599,114601],{"class":30,"line":10085},[28,114592,112363],{"class":38},[28,114594,54],{"class":34},[28,114596,39129],{"class":60},[28,114598,114583],{"class":38},[28,114600,31083],{"class":60},[28,114602,114603],{"class":38},".target_site_id].copy()\n",[28,114605,114606,114608,114610,114613,114615,114618,114620],{"class":30,"line":10106},[28,114607,110395],{"class":38},[28,114609,54],{"class":34},[28,114611,114612],{"class":38}," np.concatenate([",[28,114614,31083],{"class":60},[28,114616,114617],{"class":38},".data.qpos.copy(), ",[28,114619,31083],{"class":60},[28,114621,114622],{"class":38},".data.qvel.copy(), tip, target])\n",[28,114624,114625,114627],{"class":30,"line":10112},[28,114626,15014],{"class":34},[28,114628,114629],{"class":38}," obs.astype(np.float32)\n",[28,114631,114632],{"class":30,"line":10126},[28,114633,2662],{"emptyLinePlaceholder":336},[28,114635,114636,114638,114641,114643,114645],{"class":30,"line":10132},[28,114637,31061],{"class":34},[28,114639,114640],{"class":2225}," _get_reward",[28,114642,114309],{"class":38},[28,114644,451],{"class":60},[28,114646,4001],{"class":38},[28,114648,114649,114651,114653,114655,114657,114659],{"class":30,"line":10159},[28,114650,112350],{"class":38},[28,114652,54],{"class":34},[28,114654,39129],{"class":60},[28,114656,114583],{"class":38},[28,114658,31083],{"class":60},[28,114660,114661],{"class":38},".tip_site_id]\n",[28,114663,114664,114666,114668,114670,114672,114674],{"class":30,"line":10168},[28,114665,112363],{"class":38},[28,114667,54],{"class":34},[28,114669,39129],{"class":60},[28,114671,114583],{"class":38},[28,114673,31083],{"class":60},[28,114675,114676],{"class":38},".target_site_id]\n",[28,114678,114679,114682,114684,114686,114688],{"class":30,"line":10174},[28,114680,114681],{"class":38},"        dist ",[28,114683,54],{"class":34},[28,114685,111814],{"class":38},[28,114687,930],{"class":34},[28,114689,111819],{"class":38},[28,114691,114692,114695,114697,114699,114701,114704,114706],{"class":30,"line":10182},[28,114693,114694],{"class":38},"        control_cost ",[28,114696,54],{"class":34},[28,114698,112250],{"class":60},[28,114700,6780],{"class":34},[28,114702,114703],{"class":38}," np.sum(np.square(",[28,114705,31083],{"class":60},[28,114707,114708],{"class":38},".data.ctrl))\n",[28,114710,114711,114713,114715,114717,114719,114721,114723],{"class":30,"line":10187},[28,114712,15014],{"class":34},[28,114714,110010],{"class":60},[28,114716,413],{"class":38},[28,114718,930],{"class":34},[28,114720,111809],{"class":38},[28,114722,930],{"class":34},[28,114724,112272],{"class":38},[28,114726,114727],{"class":30,"line":16866},[28,114728,2662],{"emptyLinePlaceholder":336},[28,114730,114731,114733,114736,114739,114741,114744,114746,114748,114750,114752,114754,114757,114760,114762,114764,114766,114768],{"class":30,"line":16872},[28,114732,31061],{"class":34},[28,114734,114735],{"class":2225}," reset",[28,114737,114738],{"class":38},"(self, ",[28,114740,854],{"class":34},[28,114742,114743],{"class":38},", seed: ",[28,114745,416],{"class":60},[28,114747,25372],{"class":34},[28,114749,39189],{"class":60},[28,114751,13826],{"class":34},[28,114753,39189],{"class":60},[28,114755,114756],{"class":38},", options: ",[28,114758,114759],{"class":60},"dict",[28,114761,25372],{"class":34},[28,114763,39189],{"class":60},[28,114765,13826],{"class":34},[28,114767,39189],{"class":60},[28,114769,31046],{"class":38},[28,114771,114772,114774,114777,114780,114782],{"class":30,"line":16895},[28,114773,31077],{"class":60},[28,114775,114776],{"class":38},"().reset(",[28,114778,114779],{"class":5478},"seed",[28,114781,54],{"class":34},[28,114783,114784],{"class":38},"seed)\n",[28,114786,114787,114790,114792,114795,114797],{"class":30,"line":16901},[28,114788,114789],{"class":38},"        mujoco.mj_resetData(",[28,114791,31083],{"class":60},[28,114793,114794],{"class":38},".model, ",[28,114796,31083],{"class":60},[28,114798,114799],{"class":38},".data)\n",[28,114801,114802],{"class":30,"line":16924},[28,114803,2662],{"emptyLinePlaceholder":336},[28,114805,114806,114808,114811,114813,114815,114818,114820,114822,114824,114826,114828,114830,114832,114834,114836,114838,114840],{"class":30,"line":16938},[28,114807,31105],{"class":60},[28,114809,114810],{"class":38},".data.qpos[:] ",[28,114812,54],{"class":34},[28,114814,39129],{"class":60},[28,114816,114817],{"class":38},".np_random.uniform(",[28,114819,113975],{"class":5478},[28,114821,113978],{"class":34},[28,114823,86466],{"class":60},[28,114825,12697],{"class":38},[28,114827,113985],{"class":5478},[28,114829,54],{"class":34},[28,114831,86466],{"class":60},[28,114833,12697],{"class":38},[28,114835,31753],{"class":5478},[28,114837,54],{"class":34},[28,114839,31083],{"class":60},[28,114841,114842],{"class":38},".model.nq)\n",[28,114844,114845,114847,114850,114852],{"class":30,"line":16958},[28,114846,31105],{"class":60},[28,114848,114849],{"class":38},".data.qvel[:] ",[28,114851,54],{"class":34},[28,114853,104974],{"class":60},[28,114855,114856,114859,114861,114863,114865],{"class":30,"line":16964},[28,114857,114858],{"class":38},"        mujoco.mj_forward(",[28,114860,31083],{"class":60},[28,114862,114794],{"class":38},[28,114864,31083],{"class":60},[28,114866,114799],{"class":38},[28,114868,114869],{"class":30,"line":16975},[28,114870,2662],{"emptyLinePlaceholder":336},[28,114872,114873,114875,114877,114879],{"class":30,"line":16998},[28,114874,31105],{"class":60},[28,114876,113919],{"class":38},[28,114878,54],{"class":34},[28,114880,47589],{"class":60},[28,114882,114883,114885,114887],{"class":30,"line":17020},[28,114884,15014],{"class":34},[28,114886,39129],{"class":60},[28,114888,114889],{"class":38},"._get_obs(), {}\n",[28,114891,114892],{"class":30,"line":17025},[28,114893,2662],{"emptyLinePlaceholder":336},[28,114895,114896,114898,114901],{"class":30,"line":17031},[28,114897,31061],{"class":34},[28,114899,114900],{"class":2225}," step",[28,114902,114903],{"class":38},"(self, action):\n",[28,114905,114906,114908,114910,114913,114915,114917],{"class":30,"line":17045},[28,114907,110435],{"class":38},[28,114909,54],{"class":34},[28,114911,114912],{"class":38}," np.asarray(action, ",[28,114914,93754],{"class":5478},[28,114916,54],{"class":34},[28,114918,114009],{"class":38},[28,114920,114921,114923,114925,114927,114929,114932,114934],{"class":30,"line":17058},[28,114922,110435],{"class":38},[28,114924,54],{"class":34},[28,114926,107660],{"class":38},[28,114928,31083],{"class":60},[28,114930,114931],{"class":38},".action_space.low, ",[28,114933,31083],{"class":60},[28,114935,114936],{"class":38},".action_space.high)\n",[28,114938,114939],{"class":30,"line":17063},[28,114940,2662],{"emptyLinePlaceholder":336},[28,114942,114943,114945,114948,114950],{"class":30,"line":17077},[28,114944,31105],{"class":60},[28,114946,114947],{"class":38},".data.ctrl[:] ",[28,114949,54],{"class":34},[28,114951,107683],{"class":38},[28,114953,114954,114956,114958,114960,114962,114964,114966],{"class":30,"line":17082},[28,114955,3665],{"class":34},[28,114957,101714],{"class":38},[28,114959,26306],{"class":34},[28,114961,32699],{"class":60},[28,114963,413],{"class":38},[28,114965,31083],{"class":60},[28,114967,114968],{"class":38},".frame_skip):\n",[28,114970,114971,114974,114976,114978,114980],{"class":30,"line":17088},[28,114972,114973],{"class":38},"            mujoco.mj_step(",[28,114975,31083],{"class":60},[28,114977,114794],{"class":38},[28,114979,31083],{"class":60},[28,114981,114799],{"class":38},[28,114983,114984],{"class":30,"line":17093},[28,114985,2662],{"emptyLinePlaceholder":336},[28,114987,114988,114990,114992,114994],{"class":30,"line":17107},[28,114989,31105],{"class":60},[28,114991,113919],{"class":38},[28,114993,9739],{"class":34},[28,114995,55955],{"class":60},[28,114997,114998],{"class":30,"line":17112},[28,114999,2662],{"emptyLinePlaceholder":336},[28,115001,115002,115004,115006,115008],{"class":30,"line":17117},[28,115003,110395],{"class":38},[28,115005,54],{"class":34},[28,115007,39129],{"class":60},[28,115009,115010],{"class":38},"._get_obs()\n",[28,115012,115013,115015,115017,115019],{"class":30,"line":17131},[28,115014,110500],{"class":38},[28,115016,54],{"class":34},[28,115018,39129],{"class":60},[28,115020,115021],{"class":38},"._get_reward()\n",[28,115023,115024],{"class":30,"line":17143},[28,115025,2662],{"emptyLinePlaceholder":336},[28,115027,115028,115030,115032,115034,115036,115038],{"class":30,"line":17148},[28,115029,112350],{"class":38},[28,115031,54],{"class":34},[28,115033,39129],{"class":60},[28,115035,114583],{"class":38},[28,115037,31083],{"class":60},[28,115039,114661],{"class":38},[28,115041,115042,115044,115046,115048,115050,115052],{"class":30,"line":17161},[28,115043,112363],{"class":38},[28,115045,54],{"class":34},[28,115047,39129],{"class":60},[28,115049,114583],{"class":38},[28,115051,31083],{"class":60},[28,115053,114676],{"class":38},[28,115055,115056,115058,115060,115062,115065,115067],{"class":30,"line":17166},[28,115057,114681],{"class":38},[28,115059,54],{"class":34},[28,115061,110010],{"class":60},[28,115063,115064],{"class":38},"(np.linalg.norm(tip ",[28,115066,930],{"class":34},[28,115068,115069],{"class":38}," target))\n",[28,115071,115072],{"class":30,"line":17171},[28,115073,2662],{"emptyLinePlaceholder":336},[28,115075,115076,115079,115081,115083,115085],{"class":30,"line":17176},[28,115077,115078],{"class":38},"        terminated ",[28,115080,54],{"class":34},[28,115082,113902],{"class":38},[28,115084,1307],{"class":34},[28,115086,113907],{"class":60},[28,115088,115089,115092,115094,115096,115098,115100,115102],{"class":30,"line":17189},[28,115090,115091],{"class":38},"        truncated ",[28,115093,54],{"class":34},[28,115095,39129],{"class":60},[28,115097,113919],{"class":38},[28,115099,1972],{"class":34},[28,115101,39129],{"class":60},[28,115103,113926],{"class":38},[28,115105,115106,115109,115111,115113,115116],{"class":30,"line":17194},[28,115107,115108],{"class":38},"        info ",[28,115110,54],{"class":34},[28,115112,4710],{"class":38},[28,115114,115115],{"class":127},"\"distance\"",[28,115117,115118],{"class":38},": dist}\n",[28,115120,115121,115123],{"class":30,"line":32889},[28,115122,15014],{"class":34},[28,115124,115125],{"class":38}," obs, reward, terminated, truncated, info\n",[28,115127,115128],{"class":30,"line":32895},[28,115129,2662],{"emptyLinePlaceholder":336},[28,115131,115132],{"class":30,"line":32901},[28,115133,2662],{"emptyLinePlaceholder":336},[28,115135,115136,115138,115140,115142,115144],{"class":30,"line":32907},[28,115137,32203],{"class":34},[28,115139,2235],{"class":2225},[28,115141,101611],{"class":38},[28,115143,95938],{"class":60},[28,115145,4001],{"class":38},[28,115147,115148,115151,115153],{"class":30,"line":32913},[28,115149,115150],{"class":38},"    env ",[28,115152,54],{"class":34},[28,115154,115155],{"class":38}," ReacherEnv()\n",[28,115157,115158,115161,115163,115166,115168,115170,115172],{"class":30,"line":32924},[28,115159,115160],{"class":38},"    obs, info ",[28,115162,54],{"class":34},[28,115164,115165],{"class":38}," env.reset(",[28,115167,114779],{"class":5478},[28,115169,54],{"class":34},[28,115171,244],{"class":60},[28,115173,81],{"class":38},[28,115175,115176,115178,115180,115183],{"class":30,"line":32930},[28,115177,31559],{"class":60},[28,115179,413],{"class":38},[28,115181,115182],{"class":127},"\"initial obs shape:\"",[28,115184,115185],{"class":38},", obs.shape)\n",[28,115187,115188,115190,115192,115195],{"class":30,"line":32950},[28,115189,31559],{"class":60},[28,115191,413],{"class":38},[28,115193,115194],{"class":127},"\"initial info:\"",[28,115196,115197],{"class":38},", info)\n",[28,115199,115200],{"class":30,"line":32956},[28,115201,2662],{"emptyLinePlaceholder":336},[28,115203,115204,115206,115208],{"class":30,"line":32967},[28,115205,110366],{"class":38},[28,115207,54],{"class":34},[28,115209,104974],{"class":60},[28,115211,115212,115214,115216,115218,115220,115222,115224],{"class":30,"line":32973},[28,115213,3463],{"class":34},[28,115215,31873],{"class":38},[28,115217,26306],{"class":34},[28,115219,32699],{"class":60},[28,115221,413],{"class":38},[28,115223,1098],{"class":60},[28,115225,31046],{"class":38},[28,115227,115228,115230,115232],{"class":30,"line":32979},[28,115229,110435],{"class":38},[28,115231,54],{"class":34},[28,115233,115234],{"class":38}," env.action_space.sample()\n",[28,115236,115237,115240,115242],{"class":30,"line":32985},[28,115238,115239],{"class":38},"        obs, reward, terminated, truncated, info ",[28,115241,54],{"class":34},[28,115243,113628],{"class":38},[28,115245,115246,115248,115250],{"class":30,"line":32991},[28,115247,110510],{"class":38},[28,115249,9739],{"class":34},[28,115251,110515],{"class":38},[28,115253,115254,115256,115258,115260,115262,115265,115267,115269,115272,115274,115276,115279,115281,115283,115286,115288,115290,115292],{"class":30,"line":32997},[28,115255,32707],{"class":60},[28,115257,413],{"class":38},[28,115259,110544],{"class":127},[28,115261,110547],{"class":38},[28,115263,115264],{"class":127},"\"reward:\"",[28,115266,12697],{"class":38},[28,115268,32274],{"class":60},[28,115270,115271],{"class":38},"(reward, ",[28,115273,78],{"class":60},[28,115275,110558],{"class":38},[28,115277,115278],{"class":127},"\"distance:\"",[28,115280,12697],{"class":38},[28,115282,32274],{"class":60},[28,115284,115285],{"class":38},"(info[",[28,115287,115115],{"class":127},[28,115289,112415],{"class":38},[28,115291,78],{"class":60},[28,115293,30757],{"class":38},[28,115295,115296,115298,115301,115304],{"class":30,"line":33003},[28,115297,2759],{"class":34},[28,115299,115300],{"class":38}," terminated ",[28,115302,115303],{"class":34},"or",[28,115305,115306],{"class":38}," truncated:\n",[28,115308,115309],{"class":30,"line":33009},[28,115310,115311],{"class":34},"            break\n",[28,115313,115314],{"class":30,"line":33029},[28,115315,2662],{"emptyLinePlaceholder":336},[28,115317,115318,115320,115322,115324,115326,115328,115330,115332],{"class":30,"line":33035},[28,115319,31559],{"class":60},[28,115321,413],{"class":38},[28,115323,110589],{"class":127},[28,115325,12697],{"class":38},[28,115327,32274],{"class":60},[28,115329,110596],{"class":38},[28,115331,78],{"class":60},[28,115333,30757],{"class":38},[28,115335,115336],{"class":30,"line":33051},[28,115337,2662],{"emptyLinePlaceholder":336},[28,115339,115340],{"class":30,"line":33057},[28,115341,2662],{"emptyLinePlaceholder":336},[28,115343,115344,115346,115348,115350,115352],{"class":30,"line":33071},[28,115345,1796],{"class":34},[28,115347,31480],{"class":60},[28,115349,101772],{"class":34},[28,115351,101775],{"class":127},[28,115353,4001],{"class":38},[28,115355,115356],{"class":30,"line":33077},[28,115357,101782],{"class":38},[14,115359,103783],{},[18,115361,115363],{"className":24084,"code":115362,"language":24086,"meta":23,"style":23},"touch ch8_gym_env.py\n",[25,115364,115365],{"__ignoreMap":23},[28,115366,115367,115369],{"class":30,"line":31},[28,115368,101496],{"class":2225},[28,115370,115371],{"class":127}," ch8_gym_env.py\n",[14,115373,110657],{},[18,115375,115377],{"className":24084,"code":115376,"language":24086,"meta":23,"style":23},"python ch8_gym_env.py\n",[25,115378,115379],{"__ignoreMap":23},[28,115380,115381,115383],{"class":30,"line":31},[28,115382,22],{"class":2225},[28,115384,115371],{"class":127},[380,115386,101785],{"id":101785},[14,115388,115389],{},"继承 Gymnasium 环境：",[18,115391,115393],{"className":20,"code":115392,"language":22,"meta":23,"style":23},"class ReacherEnv(gym.Env):\n",[25,115394,115395],{"__ignoreMap":23},[28,115396,115397,115399,115401,115403,115405,115407,115409],{"class":30,"line":31},[28,115398,14956],{"class":34},[28,115400,114270],{"class":2225},[28,115402,413],{"class":38},[28,115404,113753],{"class":2225},[28,115406,956],{"class":38},[28,115408,114279],{"class":2225},[28,115410,31046],{"class":38},[14,115412,115413],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115415,115416],{},"初始化模型：",[18,115418,115420],{"className":20,"code":115419,"language":22,"meta":23,"style":23},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[25,115421,115422,115436],{"__ignoreMap":23},[28,115423,115424,115426,115428,115430,115432,115434],{"class":30,"line":31},[28,115425,31083],{"class":60},[28,115427,114330],{"class":38},[28,115429,54],{"class":34},[28,115431,101625],{"class":38},[28,115433,101527],{"class":60},[28,115435,81],{"class":38},[28,115437,115438,115440,115442,115444,115446,115448],{"class":30,"line":48},[28,115439,31083],{"class":60},[28,115441,114345],{"class":38},[28,115443,54],{"class":34},[28,115445,114350],{"class":38},[28,115447,31083],{"class":60},[28,115449,114355],{"class":38},[14,115451,115452,115453,115455],{},"这和前面章节一样，只是现在放到了类的 ",[25,115454,31089],{}," 里。",[14,115457,115458],{},"缓存 site ID：",[18,115460,115462],{"className":20,"code":115461,"language":22,"meta":23,"style":23},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[25,115463,115464,115478],{"__ignoreMap":23},[28,115465,115466,115468,115470,115472,115474,115476],{"class":30,"line":31},[28,115467,31083],{"class":60},[28,115469,114366],{"class":38},[28,115471,54],{"class":34},[28,115473,114371],{"class":38},[28,115475,89810],{"class":60},[28,115477,81],{"class":38},[28,115479,115480,115482,115484,115486,115488,115490],{"class":30,"line":48},[28,115481,31083],{"class":60},[28,115483,114387],{"class":38},[28,115485,54],{"class":34},[28,115487,114371],{"class":38},[28,115489,89810],{"class":60},[28,115491,81],{"class":38},[14,115493,115494],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115496,115497],{},"reset：",[18,115499,115501],{"className":20,"code":115500,"language":22,"meta":23,"style":23},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[25,115502,115503],{"__ignoreMap":23},[28,115504,115505,115507,115509,115511,115513,115515,115517,115519,115521,115523,115525,115527,115529,115531,115533,115535,115537],{"class":30,"line":31},[28,115506,32203],{"class":34},[28,115508,114735],{"class":2225},[28,115510,114738],{"class":38},[28,115512,854],{"class":34},[28,115514,114743],{"class":38},[28,115516,416],{"class":60},[28,115518,25372],{"class":34},[28,115520,39189],{"class":60},[28,115522,13826],{"class":34},[28,115524,39189],{"class":60},[28,115526,114756],{"class":38},[28,115528,114759],{"class":60},[28,115530,25372],{"class":34},[28,115532,39189],{"class":60},[28,115534,13826],{"class":34},[28,115536,39189],{"class":60},[28,115538,31046],{"class":38},[14,115540,115541,115543],{},[25,115542,70312],{}," 做四件事：",[363,115545,115546,115549,115552,115555],{},[366,115547,115548],{},"设置随机种子。",[366,115550,115551],{},"重置 MuJoCo data。",[366,115553,115554],{},"随机初始化关节角。",[366,115556,115557],{},"返回初始观测和 info。",[14,115559,115560],{},"step：",[18,115562,115564],{"className":20,"code":115563,"language":22,"meta":23,"style":23},"def step(self, action):\n",[25,115565,115566],{"__ignoreMap":23},[28,115567,115568,115570,115572],{"class":30,"line":31},[28,115569,32203],{"class":34},[28,115571,114900],{"class":2225},[28,115573,114903],{"class":38},[14,115575,115576,115578],{},[25,115577,107347],{}," 做六件事：",[363,115580,115581,115584,115590,115593,115596,115599],{},[366,115582,115583],{},"检查并裁剪 action。",[366,115585,115586,115587,28648],{},"写入 ",[25,115588,115589],{},"self.data.ctrl",[366,115591,115592],{},"连续推进若干个 MuJoCo 物理步。",[366,115594,115595],{},"计算新观测。",[366,115597,115598],{},"计算奖励和结束条件。",[366,115600,115601],{},"返回 Gymnasium 标准五元组。",[380,115603,101921],{"id":101921},[18,115605,115607],{"className":20,"code":115606,"language":22,"meta":23,"style":23},"import gymnasium as gym\n",[25,115608,115609],{"__ignoreMap":23},[28,115610,115611,115613,115615,115617],{"class":30,"line":31},[28,115612,35],{"class":34},[28,115614,114108],{"class":38},[28,115616,42],{"class":34},[28,115618,114113],{"class":38},[14,115620,115621,115622,115624,115625,115628],{},"导入 Gymnasium，并起别名 ",[25,115623,113753],{},"。后面写 ",[25,115626,115627],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[18,115630,115632],{"className":20,"code":115631,"language":22,"meta":23,"style":23},"from gymnasium import spaces\n",[25,115633,115634],{"__ignoreMap":23},[28,115635,115636,115638,115640,115642],{"class":30,"line":31},[28,115637,30997],{"class":34},[28,115639,114108],{"class":38},[28,115641,35],{"class":34},[28,115643,114140],{"class":38},[14,115645,115646,115647,115650],{},"导入空间定义工具。",[25,115648,115649],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[18,115652,115653],{"className":20,"code":115392,"language":22,"meta":23,"style":23},[25,115654,115655],{"__ignoreMap":23},[28,115656,115657,115659,115661,115663,115665,115667,115669],{"class":30,"line":31},[28,115658,14956],{"class":34},[28,115660,114270],{"class":2225},[28,115662,413],{"class":38},[28,115664,113753],{"class":2225},[28,115666,956],{"class":38},[28,115668,114279],{"class":2225},[28,115670,31046],{"class":38},[14,115672,115673,115674,115677,115678,115680,115681,101231,115683,115685],{},"定义一个类，名字叫 ",[25,115675,115676],{},"ReacherEnv","。括号里的 ",[25,115679,115627],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[25,115682,70312],{},[25,115684,107347],{}," 这两个核心方法。",[18,115687,115689],{"className":20,"code":115688,"language":22,"meta":23,"style":23},"metadata = {\"render_modes\": []}\n",[25,115690,115691],{"__ignoreMap":23},[28,115692,115693,115696,115698,115700,115702],{"class":30,"line":31},[28,115694,115695],{"class":38},"metadata ",[28,115697,54],{"class":34},[28,115699,4710],{"class":38},[28,115701,114293],{"class":127},[28,115703,114296],{"class":38},[14,115705,115706],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[18,115708,115710],{"className":20,"code":115709,"language":22,"meta":23,"style":23},"def __init__(self) -> None:\n",[25,115711,115712],{"__ignoreMap":23},[28,115713,115714,115716,115718,115720,115722],{"class":30,"line":31},[28,115715,32203],{"class":34},[28,115717,31064],{"class":60},[28,115719,114309],{"class":38},[28,115721,95938],{"class":60},[28,115723,4001],{"class":38},[14,115725,115726,115728,115729,28648],{},[25,115727,31089],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[25,115730,115731],{},"env = ReacherEnv()",[18,115733,115735],{"className":20,"code":115734,"language":22,"meta":23,"style":23},"super().__init__()\n",[25,115736,115737],{"__ignoreMap":23},[28,115738,115739,115742,115744,115746],{"class":30,"line":31},[28,115740,115741],{"class":60},"super",[28,115743,17523],{"class":38},[28,115745,31089],{"class":60},[28,115747,2238],{"class":38},[14,115749,115750,115751,115753],{},"调用父类 ",[25,115752,115627],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[18,115755,115756],{"className":20,"code":115419,"language":22,"meta":23,"style":23},[25,115757,115758,115772],{"__ignoreMap":23},[28,115759,115760,115762,115764,115766,115768,115770],{"class":30,"line":31},[28,115761,31083],{"class":60},[28,115763,114330],{"class":38},[28,115765,54],{"class":34},[28,115767,101625],{"class":38},[28,115769,101527],{"class":60},[28,115771,81],{"class":38},[28,115773,115774,115776,115778,115780,115782,115784],{"class":30,"line":48},[28,115775,31083],{"class":60},[28,115777,114345],{"class":38},[28,115779,54],{"class":34},[28,115781,114350],{"class":38},[28,115783,31083],{"class":60},[28,115785,114355],{"class":38},[14,115787,115788,115789,115791,115792,101231,115795,115798],{},"把 MuJoCo 模型和状态保存到 ",[25,115790,31083],{}," 上。",[25,115793,115794],{},"self.model",[25,115796,115797],{},"self.data"," 表示这个环境对象自己的模型和状态。",[18,115800,115801],{"className":20,"code":115461,"language":22,"meta":23,"style":23},[25,115802,115803,115817],{"__ignoreMap":23},[28,115804,115805,115807,115809,115811,115813,115815],{"class":30,"line":31},[28,115806,31083],{"class":60},[28,115808,114366],{"class":38},[28,115810,54],{"class":34},[28,115812,114371],{"class":38},[28,115814,89810],{"class":60},[28,115816,81],{"class":38},[28,115818,115819,115821,115823,115825,115827,115829],{"class":30,"line":48},[28,115820,31083],{"class":60},[28,115822,114387],{"class":38},[28,115824,54],{"class":34},[28,115826,114371],{"class":38},[28,115828,89810],{"class":60},[28,115830,81],{"class":38},[14,115832,115833,115834,101231,115837,115840],{},"提前查好 tip 和 target 的 site ID。这样 ",[25,115835,115836],{},"_get_obs",[25,115838,115839],{},"_get_reward"," 里就不用每次按名字查找。",[18,115842,115844],{"className":20,"code":115843,"language":22,"meta":23,"style":23},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[25,115845,115846,115856,115866],{"__ignoreMap":23},[28,115847,115848,115850,115852,115854],{"class":30,"line":31},[28,115849,31083],{"class":60},[28,115851,114080],{"class":38},[28,115853,54],{"class":34},[28,115855,54683],{"class":60},[28,115857,115858,115860,115862,115864],{"class":30,"line":48},[28,115859,31083],{"class":60},[28,115861,114459],{"class":38},[28,115863,54],{"class":34},[28,115865,114464],{"class":60},[28,115867,115868,115870,115872,115874],{"class":30,"line":84},[28,115869,31083],{"class":60},[28,115871,113919],{"class":38},[28,115873,54],{"class":34},[28,115875,47589],{"class":60},[14,115877,115878,115881,115882,115885,115886,115889],{},[25,115879,115880],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[25,115883,115884],{},"max_steps"," 是一个 episode 最多运行多少步。",[25,115887,115888],{},"steps"," 记录当前 episode 已经走了多少步。",[18,115891,115892],{"className":20,"code":113958,"language":22,"meta":23,"style":23},[25,115893,115894],{"__ignoreMap":23},[28,115895,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918,115920,115922,115924,115926,115928,115930,115932,115934],{"class":30,"line":31},[28,115897,31083],{"class":60},[28,115899,113967],{"class":38},[28,115901,54],{"class":34},[28,115903,113972],{"class":38},[28,115905,113975],{"class":5478},[28,115907,113978],{"class":34},[28,115909,102616],{"class":60},[28,115911,12697],{"class":38},[28,115913,113985],{"class":5478},[28,115915,54],{"class":34},[28,115917,102616],{"class":60},[28,115919,12697],{"class":38},[28,115921,96215],{"class":5478},[28,115923,54],{"class":34},[28,115925,413],{"class":38},[28,115927,211],{"class":60},[28,115929,114002],{"class":38},[28,115931,93754],{"class":5478},[28,115933,54],{"class":34},[28,115935,114009],{"class":38},[14,115937,115938,115939,115942,115943,101231,115946,115949],{},"定义动作空间。",[25,115940,115941],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[25,115944,115945],{},"low=-1.0",[25,115947,115948],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[18,115951,115952],{"className":20,"code":114019,"language":22,"meta":23,"style":23},[25,115953,115954],{"__ignoreMap":23},[28,115955,115956,115958,115960,115962,115964,115966,115968,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990],{"class":30,"line":31},[28,115957,31083],{"class":60},[28,115959,114028],{"class":38},[28,115961,54],{"class":34},[28,115963,113972],{"class":38},[28,115965,113975],{"class":5478},[28,115967,113978],{"class":34},[28,115969,114039],{"class":38},[28,115971,113985],{"class":5478},[28,115973,54],{"class":34},[28,115975,114039],{"class":38},[28,115977,96215],{"class":5478},[28,115979,54],{"class":34},[28,115981,413],{"class":38},[28,115983,845],{"class":60},[28,115985,114002],{"class":38},[28,115987,93754],{"class":5478},[28,115989,54],{"class":34},[28,115991,114009],{"class":38},[14,115993,115994,115995,115998,115999,116002],{},"定义观测空间。",[25,115996,115997],{},"shape=(10,)"," 表示观测是 10 个数。",[25,116000,116001],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[18,116004,116006],{"className":20,"code":116005,"language":22,"meta":23,"style":23},"def _get_obs(self) -> np.ndarray:\n",[25,116007,116008],{"__ignoreMap":23},[28,116009,116010,116012,116014],{"class":30,"line":31},[28,116011,32203],{"class":34},[28,116013,114569],{"class":2225},[28,116015,114572],{"class":38},[14,116017,116018,116019,116021],{},"定义内部函数，用来生成观测。函数名前面的 ",[25,116020,1389],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[18,116023,116025],{"className":20,"code":116024,"language":22,"meta":23,"style":23},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[25,116026,116027,116041],{"__ignoreMap":23},[28,116028,116029,116031,116033,116035,116037,116039],{"class":30,"line":31},[28,116030,111781],{"class":38},[28,116032,54],{"class":34},[28,116034,39129],{"class":60},[28,116036,114583],{"class":38},[28,116038,31083],{"class":60},[28,116040,114588],{"class":38},[28,116042,116043,116045,116047,116049,116051,116053],{"class":30,"line":48},[28,116044,111791],{"class":38},[28,116046,54],{"class":34},[28,116048,39129],{"class":60},[28,116050,114583],{"class":38},[28,116052,31083],{"class":60},[28,116054,114603],{"class":38},[14,116056,116057],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[18,116059,116061],{"className":20,"code":116060,"language":22,"meta":23,"style":23},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[25,116062,116063,116079],{"__ignoreMap":23},[28,116064,116065,116067,116069,116071,116073,116075,116077],{"class":30,"line":31},[28,116066,111067],{"class":38},[28,116068,54],{"class":34},[28,116070,114612],{"class":38},[28,116072,31083],{"class":60},[28,116074,114617],{"class":38},[28,116076,31083],{"class":60},[28,116078,114622],{"class":38},[28,116080,116081,116083],{"class":30,"line":48},[28,116082,17308],{"class":34},[28,116084,114629],{"class":38},[14,116086,116087,116088,116091,116092,116094],{},"拼接观测，并转换成 ",[25,116089,116090],{},"float32","。很多强化学习库默认使用 ",[25,116093,116090],{},"，所以这里主动转换。",[18,116096,116097],{"className":20,"code":115500,"language":22,"meta":23,"style":23},[25,116098,116099],{"__ignoreMap":23},[28,116100,116101,116103,116105,116107,116109,116111,116113,116115,116117,116119,116121,116123,116125,116127,116129,116131,116133],{"class":30,"line":31},[28,116102,32203],{"class":34},[28,116104,114735],{"class":2225},[28,116106,114738],{"class":38},[28,116108,854],{"class":34},[28,116110,114743],{"class":38},[28,116112,416],{"class":60},[28,116114,25372],{"class":34},[28,116116,39189],{"class":60},[28,116118,13826],{"class":34},[28,116120,39189],{"class":60},[28,116122,114756],{"class":38},[28,116124,114759],{"class":60},[28,116126,25372],{"class":34},[28,116128,39189],{"class":60},[28,116130,13826],{"class":34},[28,116132,39189],{"class":60},[28,116134,31046],{"class":38},[14,116136,116137,116138,116140,116141,116144],{},"定义 reset。",[25,116139,114779],{}," 用来控制随机数，保证实验可以复现。",[25,116142,116143],{},"options"," 用来接收额外配置，本章暂时不用。",[18,116146,116148],{"className":20,"code":116147,"language":22,"meta":23,"style":23},"super().reset(seed=seed)\n",[25,116149,116150],{"__ignoreMap":23},[28,116151,116152,116154,116156,116158,116160],{"class":30,"line":31},[28,116153,115741],{"class":60},[28,116155,114776],{"class":38},[28,116157,114779],{"class":5478},[28,116159,54],{"class":34},[28,116161,114784],{"class":38},[14,116163,116164,116165,116168],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[25,116166,116167],{},"self.np_random"," 生成可复现的随机数。",[18,116170,116172],{"className":20,"code":116171,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(self.model, self.data)\n",[25,116173,116174],{"__ignoreMap":23},[28,116175,116176,116179,116181,116183,116185],{"class":30,"line":31},[28,116177,116178],{"class":38},"mujoco.mj_resetData(",[28,116180,31083],{"class":60},[28,116182,114794],{"class":38},[28,116184,31083],{"class":60},[28,116186,114799],{"class":38},[14,116188,116189],{},"把 MuJoCo 状态重置到默认状态。",[18,116191,116193],{"className":20,"code":116192,"language":22,"meta":23,"style":23},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[25,116194,116195],{"__ignoreMap":23},[28,116196,116197,116199,116201,116203,116205,116207,116209,116211,116213,116215,116217,116219,116221,116223,116225,116227,116229],{"class":30,"line":31},[28,116198,31083],{"class":60},[28,116200,114810],{"class":38},[28,116202,54],{"class":34},[28,116204,39129],{"class":60},[28,116206,114817],{"class":38},[28,116208,113975],{"class":5478},[28,116210,113978],{"class":34},[28,116212,86466],{"class":60},[28,116214,12697],{"class":38},[28,116216,113985],{"class":5478},[28,116218,54],{"class":34},[28,116220,86466],{"class":60},[28,116222,12697],{"class":38},[28,116224,31753],{"class":5478},[28,116226,54],{"class":34},[28,116228,31083],{"class":60},[28,116230,114842],{"class":38},[14,116232,115554,116233,116236,116237,116240,116241,116243],{},[25,116234,116235],{},"[:]"," 表示修改整个数组。",[25,116238,116239],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[25,116242,102363],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[18,116245,116247],{"className":20,"code":116246,"language":22,"meta":23,"style":23},"self.data.qvel[:] = 0.0\n",[25,116248,116249],{"__ignoreMap":23},[28,116250,116251,116253,116255,116257],{"class":30,"line":31},[28,116252,31083],{"class":60},[28,116254,114849],{"class":38},[28,116256,54],{"class":34},[28,116258,104974],{"class":60},[14,116260,116261],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[18,116263,116265],{"className":20,"code":116264,"language":22,"meta":23,"style":23},"self.steps = 0\nreturn self._get_obs(), {}\n",[25,116266,116267,116277],{"__ignoreMap":23},[28,116268,116269,116271,116273,116275],{"class":30,"line":31},[28,116270,31083],{"class":60},[28,116272,113919],{"class":38},[28,116274,54],{"class":34},[28,116276,47589],{"class":60},[28,116278,116279,116281,116283],{"class":30,"line":48},[28,116280,17308],{"class":34},[28,116282,39129],{"class":60},[28,116284,114889],{"class":38},[14,116286,116287],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[18,116289,116290],{"className":20,"code":115563,"language":22,"meta":23,"style":23},[25,116291,116292],{"__ignoreMap":23},[28,116293,116294,116296,116298],{"class":30,"line":31},[28,116295,32203],{"class":34},[28,116297,114900],{"class":2225},[28,116299,114903],{"class":38},[14,116301,116302],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[18,116304,116306],{"className":20,"code":116305,"language":22,"meta":23,"style":23},"action = np.asarray(action, dtype=np.float32)\n",[25,116307,116308],{"__ignoreMap":23},[28,116309,116310,116312,116314,116316,116318,116320],{"class":30,"line":31},[28,116311,107655],{"class":38},[28,116313,54],{"class":34},[28,116315,114912],{"class":38},[28,116317,93754],{"class":5478},[28,116319,54],{"class":34},[28,116321,114009],{"class":38},[14,116323,116324,116325,28648],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[25,116326,116090],{},[18,116328,116330],{"className":20,"code":116329,"language":22,"meta":23,"style":23},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[25,116331,116332],{"__ignoreMap":23},[28,116333,116334,116336,116338,116340,116342,116344,116346],{"class":30,"line":31},[28,116335,107655],{"class":38},[28,116337,54],{"class":34},[28,116339,107660],{"class":38},[28,116341,31083],{"class":60},[28,116343,114931],{"class":38},[28,116345,31083],{"class":60},[28,116347,114936],{"class":38},[14,116349,116350],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[18,116352,116354],{"className":20,"code":116353,"language":22,"meta":23,"style":23},"self.data.ctrl[:] = action\n",[25,116355,116356],{"__ignoreMap":23},[28,116357,116358,116360,116362,116364],{"class":30,"line":31},[28,116359,31083],{"class":60},[28,116361,114947],{"class":38},[28,116363,54],{"class":34},[28,116365,107683],{"class":38},[14,116367,116368],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[18,116370,116372],{"className":20,"code":116371,"language":22,"meta":23,"style":23},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[25,116373,116374,116390],{"__ignoreMap":23},[28,116375,116376,116378,116380,116382,116384,116386,116388],{"class":30,"line":31},[28,116377,3287],{"class":34},[28,116379,101714],{"class":38},[28,116381,26306],{"class":34},[28,116383,32699],{"class":60},[28,116385,413],{"class":38},[28,116387,31083],{"class":60},[28,116389,114968],{"class":38},[28,116391,116392,116395,116397,116399,116401],{"class":30,"line":48},[28,116393,116394],{"class":38},"    mujoco.mj_step(",[28,116396,31083],{"class":60},[28,116398,114794],{"class":38},[28,116400,31083],{"class":60},[28,116402,114799],{"class":38},[14,116404,116405,116406,116409,116410,116412,116413,28648],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[25,116407,116408],{},"frame_skip=5","，所以外部调用一次 ",[25,116411,114090],{},"，内部实际执行 5 次 ",[25,116414,101428],{},[18,116416,116418],{"className":20,"code":116417,"language":22,"meta":23,"style":23},"self.steps += 1\n",[25,116419,116420],{"__ignoreMap":23},[28,116421,116422,116424,116426,116428],{"class":30,"line":31},[28,116423,31083],{"class":60},[28,116425,113919],{"class":38},[28,116427,9739],{"class":34},[28,116429,55955],{"class":60},[14,116431,116432],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[18,116434,116436],{"className":20,"code":116435,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nreward = self._get_reward()\n",[25,116437,116438,116448],{"__ignoreMap":23},[28,116439,116440,116442,116444,116446],{"class":30,"line":31},[28,116441,111067],{"class":38},[28,116443,54],{"class":34},[28,116445,39129],{"class":60},[28,116447,115010],{"class":38},[28,116449,116450,116452,116454,116456],{"class":30,"line":48},[28,116451,111218],{"class":38},[28,116453,54],{"class":34},[28,116455,39129],{"class":60},[28,116457,115021],{"class":38},[14,116459,116460],{},"计算新的观测和奖励。",[18,116462,116464],{"className":20,"code":116463,"language":22,"meta":23,"style":23},"dist = float(np.linalg.norm(tip - target))\n",[25,116465,116466],{"__ignoreMap":23},[28,116467,116468,116470,116472,116474,116476,116478],{"class":30,"line":31},[28,116469,111809],{"class":38},[28,116471,54],{"class":34},[28,116473,110010],{"class":60},[28,116475,115064],{"class":38},[28,116477,930],{"class":34},[28,116479,115069],{"class":38},[14,116481,116482],{},"计算末端到目标的距离，并转换成 Python float。",[18,116484,116485],{"className":20,"code":113890,"language":22,"meta":23,"style":23},[25,116486,116487,116499],{"__ignoreMap":23},[28,116488,116489,116491,116493,116495,116497],{"class":30,"line":31},[28,116490,113897],{"class":38},[28,116492,54],{"class":34},[28,116494,113902],{"class":38},[28,116496,1307],{"class":34},[28,116498,113907],{"class":60},[28,116500,116501,116503,116505,116507,116509,116511,116513],{"class":30,"line":48},[28,116502,113912],{"class":38},[28,116504,54],{"class":34},[28,116506,39129],{"class":60},[28,116508,113919],{"class":38},[28,116510,1972],{"class":34},[28,116512,39129],{"class":60},[28,116514,113926],{"class":38},[14,116516,116517],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[18,116519,116521],{"className":20,"code":116520,"language":22,"meta":23,"style":23},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[25,116522,116523,116536],{"__ignoreMap":23},[28,116524,116525,116528,116530,116532,116534],{"class":30,"line":31},[28,116526,116527],{"class":38},"info ",[28,116529,54],{"class":34},[28,116531,4710],{"class":38},[28,116533,115115],{"class":127},[28,116535,115118],{"class":38},[28,116537,116538,116540],{"class":30,"line":48},[28,116539,17308],{"class":34},[28,116541,115125],{"class":38},[14,116543,116544,116547],{},[25,116545,116546],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[18,116549,116551],{"className":20,"code":116550,"language":22,"meta":23,"style":23},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[25,116552,116553,116562],{"__ignoreMap":23},[28,116554,116555,116558,116560],{"class":30,"line":31},[28,116556,116557],{"class":38},"env ",[28,116559,54],{"class":34},[28,116561,115155],{"class":38},[28,116563,116564,116566,116568,116570,116572,116574,116576],{"class":30,"line":48},[28,116565,113613],{"class":38},[28,116567,54],{"class":34},[28,116569,115165],{"class":38},[28,116571,114779],{"class":5478},[28,116573,54],{"class":34},[28,116575,244],{"class":60},[28,116577,81],{"class":38},[14,116579,116580,116581,116584],{},"创建环境并重置。",[25,116582,116583],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[18,116586,116588],{"className":20,"code":116587,"language":22,"meta":23,"style":23},"action = env.action_space.sample()\n",[25,116589,116590],{"__ignoreMap":23},[28,116591,116592,116594,116596],{"class":30,"line":31},[28,116593,107655],{"class":38},[28,116595,54],{"class":34},[28,116597,115234],{"class":38},[14,116599,116600],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[351,116602,102529],{"id":102528},[14,116604,105697],{},[18,116606,116609],{"className":116607,"code":116608,"language":5449,"meta":23},[5447],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[25,116610,116608],{"__ignoreMap":23},[14,116612,116613],{},"这个环境已经具备强化学习环境的基本结构。",[14,116615,116616],{},"主函数里使用随机动作：",[18,116618,116619],{"className":20,"code":116587,"language":22,"meta":23,"style":23},[25,116620,116621],{"__ignoreMap":23},[28,116622,116623,116625,116627],{"class":30,"line":31},[28,116624,107655],{"class":38},[28,116626,54],{"class":34},[28,116628,115234],{"class":38},[14,116630,116631],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[351,116633,102561],{"id":102560},[363,116635,116636,116639,116645,116654,116663,116672,116678],{},[366,116637,116638],{},"运行程序。",[366,116640,116641,116642,28648],{},"确认 ",[25,116643,116644],{},"obs.shape == (10,)",[366,116646,111394,116647,116650,116651,28648],{},[25,116648,116649],{},"env.action_space","，应类似 ",[25,116652,116653],{},"Box(-1.0, 1.0, (2,), float32)",[366,116655,105798,116656,116659,116660,28648],{},[25,116657,116658],{},"self.max_steps = 10","，确认环境会更快 ",[25,116661,116662],{},"truncated=True",[366,116664,102624,116665,102627,116668,116671],{},[25,116666,116667],{},"terminated = dist \u003C 0.05",[25,116669,116670],{},"dist \u003C 0.2","，观察是否更容易结束。",[366,116673,102624,116674,116677],{},[25,116675,116676],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[366,116679,116680,116681,116683,116684,116687],{},"在 ",[25,116682,116546],{}," 里加入 ",[25,116685,116686],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[351,116689,102666],{"id":102665},[380,116691,116693],{"id":116692},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116695,116696,116697,116699],{},"Gymnasium 的 ",[25,116698,107347],{}," 返回 5 个值:",[18,116701,116703],{"className":20,"code":116702,"language":22,"meta":23,"style":23},"obs, reward, terminated, truncated, info\n",[25,116704,116705],{"__ignoreMap":23},[28,116706,116707],{"class":30,"line":31},[28,116708,116702],{"class":38},[14,116710,116711],{},"不是旧 Gym 的 4 个值。",[380,116713,116715,116718],{"id":116714},"datactrl-action-维度错误",[25,116716,116717],{},"data.ctrl[:] = action"," 维度错误",[14,116720,102736],{},[18,116722,116724],{"className":20,"code":116723,"language":22,"meta":23,"style":23},"print(self.model.nu)\nprint(action.shape)\n",[25,116725,116726,116737],{"__ignoreMap":23},[28,116727,116728,116730,116732,116734],{"class":30,"line":31},[28,116729,30675],{"class":60},[28,116731,413],{"class":38},[28,116733,31083],{"class":60},[28,116735,116736],{"class":38},".model.nu)\n",[28,116738,116739,116741],{"class":30,"line":48},[28,116740,30675],{"class":60},[28,116742,116743],{"class":38},"(action.shape)\n",[14,116745,116746],{},"两者必须匹配。",[380,116748,116750],{"id":116749},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116752,102675],{},[18,116754,116756],{"className":20,"code":116755,"language":22,"meta":23,"style":23},"mujoco.mj_forward(self.model, self.data)\n",[25,116757,116758],{"__ignoreMap":23},[28,116759,116760,116763,116765,116767,116769],{"class":30,"line":31},[28,116761,116762],{"class":38},"mujoco.mj_forward(",[28,116764,31083],{"class":60},[28,116766,114794],{"class":38},[28,116768,31083],{"class":60},[28,116770,114799],{"class":38},[380,116772,116774,116776],{"id":116773},"observation_space-维度和-obs-不一致",[25,116775,113813],{}," 维度和 obs 不一致",[14,116778,102788],{},[18,116780,116782],{"className":20,"code":116781,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[25,116783,116784,116794,116801],{"__ignoreMap":23},[28,116785,116786,116788,116790,116792],{"class":30,"line":31},[28,116787,111067],{"class":38},[28,116789,54],{"class":34},[28,116791,39129],{"class":60},[28,116793,115010],{"class":38},[28,116795,116796,116798],{"class":30,"line":48},[28,116797,30675],{"class":60},[28,116799,116800],{"class":38},"(obs.shape)\n",[28,116802,116803,116805,116807,116809],{"class":30,"line":84},[28,116804,30675],{"class":60},[28,116806,413],{"class":38},[28,116808,31083],{"class":60},[28,116810,116811],{"class":38},".observation_space.shape)\n",[14,116813,116814],{},"两者必须一致。本章观测是：",[18,116816,116819],{"className":116817,"code":116818,"language":5449,"meta":23},[5447],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[25,116820,116818],{"__ignoreMap":23},[380,116822,116824],{"id":116823},"action-超过范围","action 超过范围",[14,116826,116827],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[18,116829,116830],{"className":20,"code":116329,"language":22,"meta":23,"style":23},[25,116831,116832],{"__ignoreMap":23},[28,116833,116834,116836,116838,116840,116842,116844,116846],{"class":30,"line":31},[28,116835,107655],{"class":38},[28,116837,54],{"class":34},[28,116839,107660],{"class":38},[28,116841,31083],{"class":60},[28,116843,114931],{"class":38},[28,116845,31083],{"class":60},[28,116847,114936],{"class":38},[14,116849,116850,116851,28648],{},"这能避免无效动作直接写入 ",[25,116852,101289],{},[380,116854,116856],{"id":116855},"忘记返回-info","忘记返回 info",[14,116858,116696,116859,101231,116861,116863],{},[25,116860,70312],{},[25,116862,107347],{}," 都会返回 info：",[18,116865,116866],{"className":20,"code":113606,"language":22,"meta":23,"style":23},[25,116867,116868,116876],{"__ignoreMap":23},[28,116869,116870,116872,116874],{"class":30,"line":31},[28,116871,113613],{"class":38},[28,116873,54],{"class":34},[28,116875,113618],{"class":38},[28,116877,116878,116880,116882],{"class":30,"line":48},[28,116879,113623],{"class":38},[28,116881,54],{"class":34},[28,116883,113628],{"class":38},[14,116885,116886,116887,28648],{},"即使暂时没有额外信息，也返回 ",[25,116888,32715],{},[351,116890,116892],{"id":116891},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116894,116895],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[363,116897,116898,116901,116904,116907,116910,116913],{},[366,116899,116900],{},"更稳定的 reward。",[366,116902,116903],{},"合理的 episode 长度。",[366,116905,116906],{},"可重复的随机目标采样。",[366,116908,116909],{},"render 接口。",[366,116911,116912],{},"环境注册代码。",[366,116914,116915],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116917,116918],{},"如果只是自己写训练循环，最小形式是：",[18,116920,116922],{"className":20,"code":116921,"language":22,"meta":23,"style":23},"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",[25,116923,116924,116932,116948,116952,116968,116977,116986,116996],{"__ignoreMap":23},[28,116925,116926,116928,116930],{"class":30,"line":31},[28,116927,116557],{"class":38},[28,116929,54],{"class":34},[28,116931,115155],{"class":38},[28,116933,116934,116936,116938,116940,116942,116944,116946],{"class":30,"line":48},[28,116935,113613],{"class":38},[28,116937,54],{"class":34},[28,116939,115165],{"class":38},[28,116941,114779],{"class":5478},[28,116943,54],{"class":34},[28,116945,244],{"class":60},[28,116947,81],{"class":38},[28,116949,116950],{"class":30,"line":84},[28,116951,2662],{"emptyLinePlaceholder":336},[28,116953,116954,116956,116958,116960,116962,116964,116966],{"class":30,"line":91},[28,116955,3287],{"class":34},[28,116957,101714],{"class":38},[28,116959,26306],{"class":34},[28,116961,32699],{"class":60},[28,116963,413],{"class":38},[28,116965,6672],{"class":60},[28,116967,31046],{"class":38},[28,116969,116970,116973,116975],{"class":30,"line":97},[28,116971,116972],{"class":38},"    action ",[28,116974,54],{"class":34},[28,116976,115234],{"class":38},[28,116978,116979,116982,116984],{"class":30,"line":103},[28,116980,116981],{"class":38},"    obs, reward, terminated, truncated, info ",[28,116983,54],{"class":34},[28,116985,113628],{"class":38},[28,116987,116988,116990,116992,116994],{"class":30,"line":109},[28,116989,3363],{"class":34},[28,116991,115300],{"class":38},[28,116993,115303],{"class":34},[28,116995,115306],{"class":38},[28,116997,116998,117001,117003],{"class":30,"line":118},[28,116999,117000],{"class":38},"        obs, info ",[28,117002,54],{"class":34},[28,117004,113618],{"class":38},[351,117006,117008],{"id":117007},"_9本章小结","9.本章小结",[14,117010,117011],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[18,117013,117016],{"className":117014,"code":117015,"language":5449,"meta":23},[5447],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[25,117017,117015],{"__ignoreMap":23},[14,117019,117020],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[328,117022,117023],{},"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":23,"searchDepth":48,"depth":48,"links":117025},[117026,117027,117028,117035,117039,117040,117041,117051,117052],{"id":100859,"depth":48,"text":100860},{"id":100982,"depth":48,"text":100983},{"id":101257,"depth":48,"text":101258,"children":117029},[117030,117032,117034],{"id":113837,"depth":84,"text":117031},"terminated 和 truncated 的区别",{"id":113940,"depth":84,"text":117033},"observation_space 和 action_space",{"id":114067,"depth":84,"text":114068},{"id":101465,"depth":48,"text":101466,"children":117036},[117037,117038],{"id":101785,"depth":84,"text":101785},{"id":101921,"depth":84,"text":101921},{"id":102528,"depth":48,"text":102529},{"id":102560,"depth":48,"text":102561},{"id":102665,"depth":48,"text":102666,"children":117042},[117043,117044,117046,117047,117049,117050],{"id":116692,"depth":84,"text":116693},{"id":116714,"depth":84,"text":117045},"data.ctrl[:] = action 维度错误",{"id":116749,"depth":84,"text":116750},{"id":116773,"depth":84,"text":117048},"observation_space 维度和 obs 不一致",{"id":116823,"depth":84,"text":116824},{"id":116855,"depth":84,"text":116856},{"id":116891,"depth":48,"text":116892},{"id":117007,"depth":48,"text":117008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113590,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117059,"title":117060,"body":117061,"description":117484,"extension":334,"meta":117485,"navigation":336,"path":117486,"seo":117487,"stem":117488,"__hash__":117489},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117062,"toc":117474},[117063,117067,117070,117073,117093,117099,117105,117115,117118,117121,117141,117144,117148,117151,117157,117160,117174,117177,117180,117254,117257,117263,117266,117289,117292,117342,117345,117351,117354,117357,117360,117379,117382,117388,117391,117394,117397,117417,117420,117423,117426,117471],[10,117064,117066],{"id":117065},"mujoco-学习","MuJoCo 学习",[14,117068,117069],{},"初版",[14,117071,117072],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[363,117074,117075,117078,117081,117090],{},[366,117076,117077],{},"MuJoCo 模型文件在描述什么。",[366,117079,117080],{},"Python 代码怎样读取和推进仿真。",[366,117082,117083,617,117085,617,117087,117089],{},[25,117084,104243],{},[25,117086,104573],{},[25,117088,104576],{}," 这些数组为什么重要。",[366,117091,117092],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117094,117095,117096,117098],{},"默认环境为 Fedora 44、Python >= 3.10、",[25,117097,101240],{}," 官方 Python bindings。",[14,117100,117101,117102,117104],{},"注意：本文禁止使用 ",[25,117103,101225],{},"。所有示例均使用：",[18,117106,117107],{"className":20,"code":101791,"language":22,"meta":23,"style":23},[25,117108,117109],{"__ignoreMap":23},[28,117110,117111,117113],{"class":30,"line":31},[28,117112,35],{"class":34},[28,117114,101514],{"class":38},[351,117116,117117],{"id":117117},"适合谁阅读",[14,117119,117120],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[363,117122,117123,117126,117129,117132],{},[366,117124,117125],{},"没学过 MuJoCo，只会一点 Python。",[366,117127,117128],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[366,117130,117131],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[366,117133,117134,117135,117137,117138,117140],{},"以前接触过 ",[25,117136,101225],{},"，现在想迁移到官方 ",[25,117139,101234],{}," Python bindings。",[14,117142,117143],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[351,117145,117147],{"id":117146},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117149,117150],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[18,117152,117155],{"className":117153,"code":117154,"language":5449,"meta":23},[5447],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[25,117156,117154],{"__ignoreMap":23},[14,117158,117159],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[363,117161,117162,117165,117168,117171],{},[366,117163,117164],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[366,117166,117167],{},"快速测试控制算法，不必一开始就上真实机器人。",[366,117169,117170],{},"生成强化学习环境。",[366,117172,117173],{},"采集状态、动作、图像、奖励等训练数据。",[351,117175,117176],{"id":117176},"学习前的心智模型",[14,117178,117179],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[543,117181,117182,117194],{},[546,117183,117184],{},[549,117185,117186,117189,117192],{},[552,117187,117188],{"align":23998},"部分",[552,117190,117191],{"align":23998},"负责什么",[552,117193,21449],{"align":23998},[590,117195,117196,117207,117219,117231,117243],{},[549,117197,117198,117201,117204],{},[595,117199,117200],{"align":23998},"MJCF XML",[595,117202,117203],{"align":23998},"定义世界和机器人结构",[595,117205,117206],{"align":23998},"地面、盒子、关节、电机、摄像头",[549,117208,117209,117213,117216],{},[595,117210,117211],{"align":23998},[25,117212,100922],{},[595,117214,117215],{"align":23998},"编译后的静态模型",[595,117217,117218],{"align":23998},"有几个关节、有几个电机、时间步长是多少",[549,117220,117221,117225,117228],{},[595,117222,117223],{"align":23998},[25,117224,100932],{},[595,117226,117227],{"align":23998},"运行中的动态状态",[595,117229,117230],{"align":23998},"当前时间、位置、速度、电机输入",[549,117232,117233,117237,117240],{},[595,117234,117235],{"align":23998},[25,117236,101428],{},[595,117238,117239],{"align":23998},"推进一步物理仿真",[595,117241,117242],{"align":23998},"根据重力、力、碰撞更新状态",[549,117244,117245,117248,117251],{},[595,117246,117247],{"align":23998},"Viewer \u002F Renderer",[595,117249,117250],{"align":23998},"把仿真显示出来",[595,117252,117253],{"align":23998},"打开窗口或保存图片",[14,117255,117256],{},"一句话总结：",[18,117258,117261],{"className":117259,"code":117260,"language":5449,"meta":23},[5447],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[25,117262,117260],{"__ignoreMap":23},[14,117264,117265],{},"参考来源：",[1404,117267,117268,117275,117282],{},[366,117269,117270,117271],{},"MuJoCo Python 官方文档：",[51,117272,117273],{"href":117273,"rel":117274},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24127],[366,117276,117277,117278],{},"MuJoCo XML Reference：",[51,117279,117280],{"href":117280,"rel":117281},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24127],[366,117283,117284,117285],{},"MuJoCo Overview：",[51,117286,117287],{"href":117287,"rel":117288},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24127],[351,117290,117291],{"id":117291},"章节目录",[363,117293,117294,117300,117306,117312,117318,117324,117330,117336],{},[366,117295,117296],{},[51,117297,117299],{"href":117298},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[366,117301,117302],{},[51,117303,117305],{"href":117304},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[366,117307,117308],{},[51,117309,117311],{"href":117310},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[366,117313,117314],{},[51,117315,117317],{"href":117316},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[366,117319,117320],{},[51,117321,117323],{"href":117322},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[366,117325,117326],{},[51,117327,117329],{"href":117328},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[366,117331,117332],{},[51,117333,117335],{"href":117334},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[366,117337,117338],{},[51,117339,117341],{"href":117340},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[351,117343,117344],{"id":117344},"推荐学习路线",[18,117346,117349],{"className":117347,"code":117348,"language":5449,"meta":23},[5447],"环境安装\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",[25,117350,117348],{"__ignoreMap":23},[14,117352,117353],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[351,117355,117356],{"id":117356},"建议的目录结构",[14,117358,117359],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[18,117361,117363],{"className":24084,"code":117362,"language":24086,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[25,117364,117365,117373],{"__ignoreMap":23},[28,117366,117367,117369,117371],{"class":30,"line":31},[28,117368,101479],{"class":2225},[28,117370,29479],{"class":60},[28,117372,101484],{"class":127},[28,117374,117375,117377],{"class":30,"line":48},[28,117376,101489],{"class":60},[28,117378,101484],{"class":127},[14,117380,117381],{},"每一章的代码都单独保存：",[18,117383,117386],{"className":117384,"code":117385,"language":5449,"meta":23},[5447],"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",[25,117387,117385],{"__ignoreMap":23},[14,117389,117390],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[351,117392,117393],{"id":117393},"学习方法",[14,117395,117396],{},"每章建议按这个顺序操作：",[363,117398,117399,117402,117405,117408,117411,117414],{},[366,117400,117401],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[366,117403,117404],{},"复制最小可运行代码，保存成指定文件。",[366,117406,117407],{},"运行代码，确认没有报错。",[366,117409,117410],{},"对照“运行结果说明”理解输出。",[366,117412,117413],{},"做“验证步骤”，主动改一两个参数。",[366,117415,117416],{},"遇到报错先看“常见错误与解决方案”。",[14,117418,117419],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[351,117421,117422],{"id":117422},"全局排错顺序",[14,117424,117425],{},"遇到问题时，按下面顺序查：",[363,117427,117428,117434,117440,117445,117448,117451,117458,117468],{},[366,117429,117430,117431],{},"Python 环境是否激活：",[25,117432,117433],{},"which python",[366,117435,117436,117437],{},"MuJoCo 是否能导入：",[25,117438,117439],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[366,117441,117442,117443],{},"是否误装了 ",[25,117444,101225],{},[366,117446,117447],{},"XML 标签是否闭合、属性是否拼写正确",[366,117449,117450],{},"actuator 引用的 joint 名字是否存在",[366,117452,117453,117455,117456],{},[25,117454,101289],{}," 的长度是否等于 ",[25,117457,102371],{},[366,117459,105798,117460,82795,117462,117464,117465],{},[25,117461,104243],{},[25,117463,104573],{}," 后是否调用了 ",[25,117466,117467],{},"mujoco.mj_forward",[366,117469,117470],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[328,117472,117473],{},"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":23,"searchDepth":48,"depth":48,"links":117475},[117476,117477,117478,117479,117480,117481,117482,117483],{"id":117117,"depth":48,"text":117117},{"id":117146,"depth":48,"text":117147},{"id":117176,"depth":48,"text":117176},{"id":117291,"depth":48,"text":117291},{"id":117344,"depth":48,"text":117344},{"id":117356,"depth":48,"text":117356},{"id":117393,"depth":48,"text":117393},{"id":117422,"depth":48,"text":117422},"仿真搭建。",{"category":23640},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117060,"description":117484},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117491,"title":117492,"body":117493,"description":333,"extension":334,"meta":117948,"navigation":336,"path":117949,"seo":117950,"stem":117951,"__hash__":117952},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117494,"toc":117946},[117495,117498,117501,117507,117943],[10,117496,117492],{"id":117497},"_1-最常用的基本操作更新",[14,117499,117500],{},"装linux系统教程：",[14,117502,117503],{},[51,117504,117505],{"href":117505,"rel":117506},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24127],[18,117508,117512],{"className":117509,"code":117510,"language":117511,"meta":23,"style":23},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[25,117513,117514,117519,117524,117533,117538,117547,117552,117572,117577,117588,117593,117602,117607,117635,117640,117659,117664,117683,117687,117692,117708,117712,117717,117747,117751,117756,117772,117776,117781,117796,117800,117805,117821,117825,117830,117842,117854,117858,117863,117880,117884,117889,117907,117911,117916,117925,117929,117934],{"__ignoreMap":23},[28,117515,117516],{"class":30,"line":31},[28,117517,117518],{"class":87},"#更新相关的知识\n",[28,117520,117521],{"class":30,"line":48},[28,117522,117523],{"class":87},"# 更新软件包列表（从服务器获取最新软件信息）\n",[28,117525,117526,117528,117531],{"class":30,"line":84},[28,117527,24839],{"class":2225},[28,117529,117530],{"class":127}," apt",[28,117532,26505],{"class":127},[28,117534,117535],{"class":30,"line":91},[28,117536,117537],{"class":87},"# 升级所有可更新的软件包（不删除旧包）\n",[28,117539,117540,117542,117544],{"class":30,"line":97},[28,117541,24839],{"class":2225},[28,117543,117530],{"class":127},[28,117545,117546],{"class":127}," upgrade\n",[28,117548,117549],{"class":30,"line":103},[28,117550,117551],{"class":87},"#更新和升级软件包\n",[28,117553,117554,117556,117558,117561,117563,117565,117567,117570],{"class":30,"line":109},[28,117555,24839],{"class":2225},[28,117557,117530],{"class":127},[28,117559,117560],{"class":127}," update",[28,117562,26453],{"class":38},[28,117564,24839],{"class":2225},[28,117566,117530],{"class":127},[28,117568,117569],{"class":127}," upgrade",[28,117571,101194],{"class":60},[28,117573,117574],{"class":30,"line":118},[28,117575,117576],{"class":87},"#列出可更新的软件包及版本信息\n",[28,117578,117579,117582,117585],{"class":30,"line":124},[28,117580,117581],{"class":2225},"apt",[28,117583,117584],{"class":127}," list",[28,117586,117587],{"class":60}," --upgradable\n",[28,117589,117590],{"class":30,"line":131},[28,117591,117592],{"class":87},"#彻底升级（处理依赖关系，可能删除旧包）\n",[28,117594,117595,117597,117599],{"class":30,"line":137},[28,117596,24839],{"class":2225},[28,117598,117530],{"class":127},[28,117600,117601],{"class":127}," full-upgrade\n",[28,117603,117604],{"class":30,"line":143},[28,117605,117606],{"class":87},"#设置指定版本\n",[28,117608,117609,117611,117613,117615,117617,117620,117622,117624,117626,117628,117631,117633],{"class":30,"line":149},[28,117610,24839],{"class":2225},[28,117612,117530],{"class":127},[28,117614,24096],{"class":127},[28,117616,29165],{"class":34},[28,117618,117619],{"class":127},"package_nam",[28,117621,482],{"class":38},[28,117623,1357],{"class":34},[28,117625,54],{"class":127},[28,117627,1307],{"class":34},[28,117629,117630],{"class":127},"version_numbe",[28,117632,1068],{"class":38},[28,117634,51563],{"class":34},[28,117636,117637],{"class":30,"line":1890},[28,117638,117639],{"class":87},"#只安装软件包不升级\n",[28,117641,117642,117644,117646,117648,117650,117652,117654,117656],{"class":30,"line":1904},[28,117643,24839],{"class":2225},[28,117645,117530],{"class":127},[28,117647,24096],{"class":127},[28,117649,29165],{"class":34},[28,117651,117619],{"class":127},[28,117653,482],{"class":38},[28,117655,1357],{"class":34},[28,117657,117658],{"class":60}," --no-upgrade\n",[28,117660,117661],{"class":30,"line":1909},[28,117662,117663],{"class":87},"#只升级，不存在就不安装\n",[28,117665,117666,117668,117670,117672,117674,117676,117678,117680],{"class":30,"line":1915},[28,117667,24839],{"class":2225},[28,117669,117530],{"class":127},[28,117671,24096],{"class":127},[28,117673,29165],{"class":34},[28,117675,117619],{"class":127},[28,117677,482],{"class":38},[28,117679,1357],{"class":34},[28,117681,117682],{"class":60}," --only-upgrade\n",[28,117684,117685],{"class":30,"line":1936},[28,117686,2662],{"emptyLinePlaceholder":336},[28,117688,117689],{"class":30,"line":1941},[28,117690,117691],{"class":87},"#安装指定的软件命令\n",[28,117693,117694,117696,117698,117700,117702,117704,117706],{"class":30,"line":1955},[28,117695,24839],{"class":2225},[28,117697,117530],{"class":127},[28,117699,24096],{"class":127},[28,117701,29165],{"class":34},[28,117703,117619],{"class":127},[28,117705,482],{"class":38},[28,117707,51563],{"class":34},[28,117709,117710],{"class":30,"line":1960},[28,117711,2662],{"emptyLinePlaceholder":336},[28,117713,117714],{"class":30,"line":1989},[28,117715,117716],{"class":87},"#安装多个软件包\n",[28,117718,117719,117721,117723,117725,117727,117730,117733,117735,117737,117740,117742,117744],{"class":30,"line":1994},[28,117720,24839],{"class":2225},[28,117722,117530],{"class":127},[28,117724,24096],{"class":127},[28,117726,29165],{"class":34},[28,117728,117729],{"class":127},"package_",[28,117731,117732],{"class":34},"1>",[28,117734,29165],{"class":34},[28,117736,117729],{"class":127},[28,117738,117739],{"class":34},"2>",[28,117741,29165],{"class":34},[28,117743,117729],{"class":127},[28,117745,117746],{"class":34},"3>\n",[28,117748,117749],{"class":30,"line":2011},[28,117750,2662],{"emptyLinePlaceholder":336},[28,117752,117753],{"class":30,"line":2016},[28,117754,117755],{"class":87},"#更新指定的软件命令\n",[28,117757,117758,117760,117762,117764,117766,117768,117770],{"class":30,"line":2021},[28,117759,24839],{"class":2225},[28,117761,117530],{"class":127},[28,117763,117560],{"class":127},[28,117765,29165],{"class":34},[28,117767,117619],{"class":127},[28,117769,482],{"class":38},[28,117771,51563],{"class":34},[28,117773,117774],{"class":30,"line":2026},[28,117775,2662],{"emptyLinePlaceholder":336},[28,117777,117778],{"class":30,"line":2040},[28,117779,117780],{"class":87},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[28,117782,117783,117785,117788,117790,117792,117794],{"class":30,"line":2045},[28,117784,117581],{"class":2225},[28,117786,117787],{"class":127}," show",[28,117789,29165],{"class":34},[28,117791,117619],{"class":127},[28,117793,482],{"class":38},[28,117795,51563],{"class":34},[28,117797,117798],{"class":30,"line":2839},[28,117799,2662],{"emptyLinePlaceholder":336},[28,117801,117802],{"class":30,"line":2853},[28,117803,117804],{"class":87},"#删除软件包命令\n",[28,117806,117807,117809,117811,117813,117815,117817,117819],{"class":30,"line":2861},[28,117808,24839],{"class":2225},[28,117810,117530],{"class":127},[28,117812,26342],{"class":127},[28,117814,29165],{"class":34},[28,117816,117619],{"class":127},[28,117818,482],{"class":38},[28,117820,51563],{"class":34},[28,117822,117823],{"class":30,"line":2866},[28,117824,2662],{"emptyLinePlaceholder":336},[28,117826,117827],{"class":30,"line":2872},[28,117828,117829],{"class":87},"# 清理旧版本和缓存（释放磁盘空间）\n",[28,117831,117832,117834,117836,117839],{"class":30,"line":2878},[28,117833,24839],{"class":2225},[28,117835,117530],{"class":127},[28,117837,117838],{"class":127}," autoremove",[28,117840,117841],{"class":87},"  # 删除不再需要的依赖和库文件\n",[28,117843,117844,117846,117848,117851],{"class":30,"line":2883},[28,117845,24839],{"class":2225},[28,117847,117530],{"class":127},[28,117849,117850],{"class":127}," clean",[28,117852,117853],{"class":87},"       # 清理下载的缓存包\n",[28,117855,117856],{"class":30,"line":8210},[28,117857,2662],{"emptyLinePlaceholder":336},[28,117859,117860],{"class":30,"line":8234},[28,117861,117862],{"class":87},"#移除软件包及配置文件\n",[28,117864,117865,117867,117869,117872,117874,117876,117878],{"class":30,"line":8239},[28,117866,24839],{"class":2225},[28,117868,117530],{"class":127},[28,117870,117871],{"class":127}," purge",[28,117873,29165],{"class":34},[28,117875,117619],{"class":127},[28,117877,482],{"class":38},[28,117879,51563],{"class":34},[28,117881,117882],{"class":30,"line":8245},[28,117883,2662],{"emptyLinePlaceholder":336},[28,117885,117886],{"class":30,"line":8272},[28,117887,117888],{"class":87},"#查找软件包命令\n",[28,117890,117891,117893,117895,117898,117900,117903,117905],{"class":30,"line":8277},[28,117892,24839],{"class":2225},[28,117894,117530],{"class":127},[28,117896,117897],{"class":127}," search",[28,117899,29165],{"class":34},[28,117901,117902],{"class":127},"keywor",[28,117904,716],{"class":38},[28,117906,51563],{"class":34},[28,117908,117909],{"class":30,"line":8283},[28,117910,2662],{"emptyLinePlaceholder":336},[28,117912,117913],{"class":30,"line":8295},[28,117914,117915],{"class":87},"#列出所有已安装的包\n",[28,117917,117918,117920,117922],{"class":30,"line":8307},[28,117919,117581],{"class":2225},[28,117921,117584],{"class":127},[28,117923,117924],{"class":60}," --installed\n",[28,117926,117927],{"class":30,"line":8319},[28,117928,2662],{"emptyLinePlaceholder":336},[28,117930,117931],{"class":30,"line":9978},[28,117932,117933],{"class":87},"#列出所有已安装的包的版本信息\n",[28,117935,117936,117938,117940],{"class":30,"line":10003},[28,117937,117581],{"class":2225},[28,117939,117584],{"class":127},[28,117941,117942],{"class":60}," --all-versions\n",[328,117944,117945],{},"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":23,"searchDepth":48,"depth":48,"links":117947},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117492,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117954,"title":117955,"body":117956,"description":333,"extension":334,"meta":118697,"navigation":336,"path":118698,"seo":118699,"stem":118700,"__hash__":118701},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117957,"toc":118684},[117958,117961,117965,117968,117974,117978,117982,117988,117993,117998,118003,118008,118013,118016,118019,118022,118025,118029,118032,118037,118040,118045,118048,118053,118060,118063,118066,118069,118072,118075,118086,118090,118094,118099,118104,118108,118113,118117,118122,118126,118130,118135,118138,118183,118188,118192,118196,118201,118207,118212,118222,118227,118237,118242,118247,118274,118278,118281,118286,118289,118314,118318,118323,118326,118331,118336,118356,118361,118364,118379,118383,118436,118439,118444,118448,118451,118466,118469,118472,118477,118481,118485,118488,118492,118496,118499,118504,118509,118513,118520,118528,118531,118538,118543,118548,118551,118556,118563,118568,118575,118579,118581,118586,118590,118593,118596,118601,118604,118609,118612,118617,118622,118627,118631,118636,118640,118681],[10,117959,117955],{"id":117960},"_2-linux装机教程",[351,117962,117964],{"id":117963},"_21-实体机","2.1 实体机",[14,117966,117967],{},"使用清华源：（Ubuntu24.04）",[14,117969,117970],{},[51,117971,117972],{"href":117972,"rel":117973},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24127],[351,117975,117977],{"id":117976},"_22-普通虚拟机","2.2 普通虚拟机",[380,117979,117981],{"id":117980},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117983,117984],{},[51,117985,117986],{"href":117986,"rel":117987},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24127],[14,117989,117990],{},[1727,117991],{"alt":23,"src":117992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117994,117995],{},[1727,117996],{"alt":23,"src":117997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117999,118000],{},[1727,118001],{"alt":23,"src":118002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118004,118005],{},[1727,118006],{"alt":23,"src":118007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118009,118010],{},[1727,118011],{"alt":23,"src":118012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118014,118015],{},"内存4G（4096MB）；",[14,118017,118018],{},"CPU给4个核；",[14,118020,118021],{},"硬盘动态分配60G；",[14,118023,118024],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[380,118026,118028],{"id":118027},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118030,118031],{},"按照1.1的步骤下载Ubuntu",[14,118033,118034],{},[1727,118035],{"alt":23,"src":118036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118038,118039],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118041,118042],{},[1727,118043],{"alt":23,"src":118044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118046,118047],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118049,118050],{},[1727,118051],{"alt":23,"src":118052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118054,118055,118056,118059],{},"选择“正常安装”(找不到都用Alt+F7)， ",[555,118057,118058],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118061,118062],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118064,118065],{},"将改动写入磁盘吗 继续",[14,118067,118068],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118070,118071],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118073,118074],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118076,118077,118078,118081,118082,118085],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[555,118079,118080],{},"除了"," 选不发送系统信息与不升级之外， ",[555,118083,118084],{},"其它"," 都跳过或前进）",[380,118087,118089],{"id":118088},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22260,118091,118093],{"id":118092},"_2231-全屏","2.2.3.1 全屏",[14,118095,118096],{},[1727,118097],{"alt":23,"src":118098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118100,118101],{},[1727,118102],{"alt":23,"src":118103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22260,118105,118107],{"id":118106},"_2232-文件交换","2.2.3.2 文件交换",[14,118109,118110],{},[1727,118111],{"alt":23,"src":118112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22260,118114,118116],{"id":118115},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118118,118119],{},[1727,118120],{"alt":23,"src":118121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[351,118123,118125],{"id":118124},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[380,118127,118129],{"id":118128},"_231-简介与优缺点","2.3.1 简介与优缺点",[363,118131,118132],{},[366,118133,118134],{},"什么情况下推荐？",[14,118136,118137],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[363,118139,118140],{"start":48},[366,118141,118142,118143],{},"优缺点：",[363,118144,118145,118175],{},[366,118146,118147,118148],{},"优点：",[363,118149,118150,118153,118160,118163,118166,118169,118172],{},[366,118151,118152],{},"WSL2是最好的Linux发行版;(bushi)",[366,118154,118155,118156,118159],{},"性能损耗极低。且比在Windows上跑深度性能 ",[555,118157,118158],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[366,118161,118162],{},"非常方便调用USB设备，可以USB直通;",[366,118164,118165],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[366,118167,118168],{},"非常方便Win与WSL2互相传文件等协同操作;",[366,118170,118171],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[366,118173,118174],{},"非常方便使用Windows的VScode远程开发;",[366,118176,118177,118178],{},"缺点：",[363,118179,118180],{},[366,118181,118182],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118184,118185],{},[1727,118186],{"alt":23,"src":118187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[380,118189,118191],{"id":118190},"_232-安装教程","2.3.2 安装教程",[22260,118193,118195],{"id":118194},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[363,118197,118198],{},[366,118199,118200],{},"方法一(图形界面)",[14,118202,118203,118204,24881],{},"用Win+R输入",[25,118205,118206],{},"appwiz.cpl",[14,118208,118209],{},[1727,118210],{"alt":23,"src":118211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118213,118214,118215,118218,118219,26736],{},"点击OK进入 ",[555,118216,118217],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[555,118220,118221],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118223,118224],{},[1727,118225],{"alt":23,"src":118226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118228,118229,118230,101231,118233,118236],{},"选择 ",[555,118231,118232],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[555,118234,118235],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118238,118239],{},[1727,118240],{"alt":23,"src":118241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[363,118243,118244],{"start":48},[366,118245,118246],{},"方法二(命令行)",[18,118248,118252],{"className":118249,"code":118250,"language":118251,"meta":23,"style":23},"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",[25,118253,118254,118259,118264,118269],{"__ignoreMap":23},[28,118255,118256],{"class":30,"line":31},[28,118257,118258],{},"# 开启 Linux 子系统\n",[28,118260,118261],{"class":30,"line":48},[28,118262,118263],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[28,118265,118266],{"class":30,"line":84},[28,118267,118268],{},"# 开启虚拟机平台\n",[28,118270,118271],{"class":30,"line":91},[28,118272,118273],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22260,118275,118277],{"id":118276},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118279,118280],{},"用管理员权限打开powershell",[14,118282,118283],{},[1727,118284],{"alt":23,"src":118285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118287,118288],{},"升级WSL并设置默认版本为WSL2",[18,118290,118292],{"className":118249,"code":118291,"language":118251,"meta":23,"style":23},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[25,118293,118294,118299,118304,118309],{"__ignoreMap":23},[28,118295,118296],{"class":30,"line":31},[28,118297,118298],{},"# 更新 wsl\n",[28,118300,118301],{"class":30,"line":48},[28,118302,118303],{},"wsl --update\n",[28,118305,118306],{"class":30,"line":84},[28,118307,118308],{},"# 将 wsl 版本设置为 wsl2\n",[28,118310,118311],{"class":30,"line":91},[28,118312,118313],{},"wsl --set-default-version 2\n",[22260,118315,118317],{"id":118316},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[363,118319,118320],{},[366,118321,118322],{},"方式一(商店下载)",[14,118324,118325],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118327,118328],{},[1727,118329],{"alt":23,"src":118330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[363,118332,118333],{"start":48},[366,118334,118335],{},"方式二(命令行安装)",[18,118337,118339],{"className":118249,"code":118338,"language":118251,"meta":23,"style":23},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[25,118340,118341,118346,118351],{"__ignoreMap":23},[28,118342,118343],{"class":30,"line":31},[28,118344,118345],{},"# 列出可安装的 Linux 版本\n",[28,118347,118348],{"class":30,"line":48},[28,118349,118350],{},"#（需要科学手段）\n",[28,118352,118353],{"class":30,"line":84},[28,118354,118355],{},"wsl --list --online\n",[14,118357,118358],{},[1727,118359],{"alt":23,"src":118360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118362,118363],{},"选择对应发行版并安装",[18,118365,118367],{"className":118249,"code":118366,"language":118251,"meta":23,"style":23},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[25,118368,118369,118374],{"__ignoreMap":23},[28,118370,118371],{"class":30,"line":31},[28,118372,118373],{},"# Ubuntu安装完毕后需要重启系统\n",[28,118375,118376],{"class":30,"line":48},[28,118377,118378],{},"wsl --install -d Ubuntu-24.04\n",[22260,118380,118382],{"id":118381},"_2324-查看系统状态","2.3.2.4 查看系统状态",[18,118384,118386],{"className":118249,"code":118385,"language":118251,"meta":23,"style":23},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[25,118387,118388,118393,118398,118403,118408,118412,118416,118421,118426,118431],{"__ignoreMap":23},[28,118389,118390],{"class":30,"line":31},[28,118391,118392],{},"# 查看 wsl\n",[28,118394,118395],{"class":30,"line":48},[28,118396,118397],{},"wsl -l\n",[28,118399,118400],{"class":30,"line":84},[28,118401,118402],{},"# 查看 wsl 运行版本或模式\n",[28,118404,118405],{"class":30,"line":91},[28,118406,118407],{},"wsl -l -v\n",[28,118409,118410],{"class":30,"line":97},[28,118411,2662],{"emptyLinePlaceholder":336},[28,118413,118414],{"class":30,"line":103},[28,118415,2662],{"emptyLinePlaceholder":336},[28,118417,118418],{"class":30,"line":109},[28,118419,118420],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[28,118422,118423],{"class":30,"line":118},[28,118424,118425],{},"wsl --set-version \u003Cdistro> 2\n",[28,118427,118428],{"class":30,"line":124},[28,118429,118430],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[28,118432,118433],{"class":30,"line":131},[28,118434,118435],{},"wsl --unregister \u003Cdistro>\n",[14,118437,118438],{},"输出Version为2即正常",[14,118440,118441],{},[1727,118442],{"alt":23,"src":118443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22260,118445,118447],{"id":118446},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118449,118450],{},"直接在Powershell里输入wsl命令进入子系统",[18,118452,118454],{"className":118249,"code":118453,"language":118251,"meta":23,"style":23},"# 进入子系统\nwsl\n",[25,118455,118456,118461],{"__ignoreMap":23},[28,118457,118458],{"class":30,"line":31},[28,118459,118460],{},"# 进入子系统\n",[28,118462,118463],{"class":30,"line":48},[28,118464,118465],{},"wsl\n",[14,118467,118468],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118470,118471],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118473,118474],{},[1727,118475],{"alt":23,"src":118476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[380,118478,118480],{"id":118479},"_233-配置各种环境","2.3.3 配置各种环境",[22260,118482,118484],{"id":118483},"_2331-换源","2.3.3.1 换源",[14,118486,118487],{},"(同实体机LINUX，往下找教程)",[22260,118489,118491],{"id":118490},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23172,118493,118495],{"id":118494},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118497,118498],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118500,118501],{},[1727,118502],{"alt":23,"src":118503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118505,118506],{},[1727,118507],{"alt":23,"src":118508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23172,118510,118512],{"id":118511},"_23322-cuda","2.3.3.2.2 CUDA",[14,118514,118515,118516],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[51,118517,118518],{"href":118518,"rel":118519},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24127],[14,118521,118522,118525],{},[1727,118523],{"alt":23,"src":118524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1727,118526],{"alt":23,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118529,118530],{},"在下方的网站，选择合适的版本。",[14,118532,118533,118534],{},"WSL2 专属 CUDA 指南：",[51,118535,118536],{"href":118536,"rel":118537},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24127],[14,118539,118540],{},[555,118541,118542],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118544,118545],{},[1727,118546],{"alt":23,"src":118547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118549,118550],{},"挨行敲一遍",[14,118552,118553],{},[1727,118554],{"alt":23,"src":118555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118557,118558,118559,118562],{},"敲完后，输入",[25,118560,118561],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118564,118565],{},[1727,118566],{"alt":23,"src":118567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118569,118570,118571,118574],{},"（请详看下方教程的",[555,118572,118573],{},"安装CUDA的配置环境来看","如何配置环境）",[23172,118576,118578],{"id":118577},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118580,118487],{},[14,118582,118583],{},[1727,118584],{"alt":23,"src":118585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22260,118587,118589],{"id":118588},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118591,118592],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118594,118595],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118597,118598],{},[1727,118599],{"alt":23,"src":118600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118602,118603],{},"连接WSL2",[14,118605,118606],{},[1727,118607],{"alt":23,"src":118608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118610,118611],{},"远程开发成功。",[14,118613,118614],{},[1727,118615],{"alt":23,"src":118616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118618,118619],{},[1727,118620],{"alt":23,"src":118621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118623,118624],{},[1727,118625],{"alt":23,"src":118626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22260,118628,118630],{"id":118629},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118632,118633],{},[1727,118634],{"alt":23,"src":118635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22260,118637,118639],{"id":118638},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[18,118641,118643],{"className":117509,"code":118642,"language":117511,"meta":23,"style":23},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[25,118644,118645,118653,118661,118672,118676],{"__ignoreMap":23},[28,118646,118647,118649,118651],{"class":30,"line":31},[28,118648,24839],{"class":2225},[28,118650,117530],{"class":127},[28,118652,26505],{"class":127},[28,118654,118655,118657,118659],{"class":30,"line":48},[28,118656,24839],{"class":2225},[28,118658,117530],{"class":127},[28,118660,117546],{"class":127},[28,118662,118663,118665,118667,118669],{"class":30,"line":84},[28,118664,24839],{"class":2225},[28,118666,117530],{"class":127},[28,118668,24096],{"class":127},[28,118670,118671],{"class":127}," mesa-utils\n",[28,118673,118674],{"class":30,"line":91},[28,118675,2662],{"emptyLinePlaceholder":336},[28,118677,118678],{"class":30,"line":97},[28,118679,118680],{"class":87},"#然后重启wsl2即可\n",[328,118682,118683],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":48,"depth":48,"links":118685},[118686,118687,118692],{"id":117963,"depth":48,"text":117964},{"id":117976,"depth":48,"text":117977,"children":118688},[118689,118690,118691],{"id":117980,"depth":84,"text":117981},{"id":118027,"depth":84,"text":118028},{"id":118088,"depth":84,"text":118089},{"id":118124,"depth":48,"text":118125,"children":118693},[118694,118695,118696],{"id":118128,"depth":84,"text":118129},{"id":118190,"depth":84,"text":118191},{"id":118479,"depth":84,"text":118480},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117955,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118703,"title":118704,"body":118705,"description":333,"extension":334,"meta":121641,"navigation":336,"path":121642,"seo":121643,"stem":121644,"__hash__":121645},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118706,"toc":121613},[118707,118710,118714,118720,118724,118730,118734,118922,118925,118930,118934,118938,118941,118944,118950,118955,118958,118961,118966,118999,119004,119008,119085,119088,119093,119097,119100,119139,119142,119151,119169,119174,119181,119298,119303,119306,119333,119338,119342,119351,119401,119408,119412,119415,119429,119436,119470,119475,119479,119502,119505,119510,119514,119517,119520,119523,119565,119569,119572,119575,119616,119620,119624,119627,119632,119637,119640,119663,119666,119674,119679,119682,119687,119692,119695,119700,119704,119709,119732,119737,119799,119807,119812,119817,119820,119825,119828,119833,119838,119856,119861,119867,119872,119886,119890,119893,119896,119899,119942,119945,119950,120051,120054,120059,120063,120067,120104,120108,120112,120116,120162,120166,120211,120215,120222,120230,120285,120288,120365,120368,120391,120395,120398,120403,120408,120416,120419,120424,120429,120434,120437,120442,120451,120454,120459,120462,120533,120538,120541,120546,120549,120554,120557,120562,120565,120570,120575,120578,120653,120656,120669,120674,120677,120691,120694,120723,120728,120757,120760,120765,120769,120774,120783,120786,120791,120794,120799,120802,120805,120810,120813,120818,120823,120826,120831,120834,120959,120964,120994,120997,121002,121007,121024,121027,121070,121073,121100,121105,121118,121261,121265,121270,121284,121287,121338,121341,121371,121374,121390,121395,121409,121412,121479,121484,121493,121498,121501,121513,121518,121525,121549,121552,121557,121560,121579,121584,121591,121603,121610],[10,118708,118704],{"id":118709},"_3-安装必备配置",[351,118711,118713],{"id":118712},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[18,118715,118718],{"className":118716,"code":118717,"language":5449},[5447],"  打开下方网站（注意，该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",[25,118719,118717],{"__ignoreMap":23},[380,118721,118723],{"id":118722},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[18,118725,118728],{"className":118726,"code":118727,"language":5449},[5447],"  输入以下命令\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",[25,118729,118727],{"__ignoreMap":23},[380,118731,118733],{"id":118732},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[18,118735,118739],{"className":118736,"code":118737,"language":118738,"meta":23,"style":23},"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",[25,118740,118741,118749,118760,118772,118786,118790,118800,118805,118809,118813,118818,118822,118834,118838,118843,118847,118858,118862,118878,118882,118893,118897,118902,118906,118914],{"__ignoreMap":23},[28,118742,118743,118745,118747],{"class":30,"line":31},[28,118744,24839],{"class":2225},[28,118746,117530],{"class":127},[28,118748,26505],{"class":127},[28,118750,118751,118753,118755,118757],{"class":30,"line":48},[28,118752,24839],{"class":2225},[28,118754,117530],{"class":127},[28,118756,24096],{"class":127},[28,118758,118759],{"class":127}," vim\n",[28,118761,118762,118764,118767,118769],{"class":30,"line":84},[28,118763,24839],{"class":2225},[28,118765,118766],{"class":127}," rm",[28,118768,25588],{"class":60},[28,118770,118771],{"class":127}," \u002Fetc\u002Fapt\u002Fsources.list\n",[28,118773,118774,118776,118778,118780,118783],{"class":30,"line":91},[28,118775,24839],{"class":2225},[28,118777,118766],{"class":127},[28,118779,25588],{"class":60},[28,118781,118782],{"class":127}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[28,118784,118785],{"class":60},"**\n",[28,118787,118788],{"class":30,"line":97},[28,118789,2662],{"emptyLinePlaceholder":336},[28,118791,118792,118794,118797],{"class":30,"line":103},[28,118793,24839],{"class":2225},[28,118795,118796],{"class":127}," vim",[28,118798,118799],{"class":127}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[28,118801,118802],{"class":30,"line":109},[28,118803,118804],{"class":127},"```\n",[28,118806,118807],{"class":30,"line":118},[28,118808,2662],{"emptyLinePlaceholder":336},[28,118810,118811],{"class":30,"line":124},[28,118812,2662],{"emptyLinePlaceholder":336},[28,118814,118815],{"class":30,"line":131},[28,118816,118817],{"class":2225},"选择好Ubuntu版本后，复制下方的内容。\n",[28,118819,118820],{"class":30,"line":137},[28,118821,2662],{"emptyLinePlaceholder":336},[28,118823,118824,118826,118829,118832],{"class":30,"line":143},[28,118825,630],{"class":34},[28,118827,118828],{"class":127},"[](",[28,118830,118831],{"class":2225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[28,118833,81],{"class":127},[28,118835,118836],{"class":30,"line":149},[28,118837,2662],{"emptyLinePlaceholder":336},[28,118839,118840],{"class":30,"line":1890},[28,118841,118842],{"class":2225},"粘贴进去\n",[28,118844,118845],{"class":30,"line":1904},[28,118846,2662],{"emptyLinePlaceholder":336},[28,118848,118849,118851,118853,118856],{"class":30,"line":1909},[28,118850,630],{"class":34},[28,118852,118828],{"class":127},[28,118854,118855],{"class":2225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[28,118857,81],{"class":127},[28,118859,118860],{"class":30,"line":1915},[28,118861,2662],{"emptyLinePlaceholder":336},[28,118863,118864,118867,118870,118873,118875],{"class":30,"line":1936},[28,118865,118866],{"class":2225},"按一下ESC，然后英文冒号，输入",[28,118868,118869],{"class":127}," `",[28,118871,118872],{"class":2225},":wq!",[28,118874,1369],{"class":127},[28,118876,118877],{"class":2225},"然后回车\n",[28,118879,118880],{"class":30,"line":1941},[28,118881,2662],{"emptyLinePlaceholder":336},[28,118883,118884,118886,118888,118891],{"class":30,"line":1955},[28,118885,630],{"class":34},[28,118887,118828],{"class":127},[28,118889,118890],{"class":2225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[28,118892,81],{"class":127},[28,118894,118895],{"class":30,"line":1960},[28,118896,2662],{"emptyLinePlaceholder":336},[28,118898,118899],{"class":30,"line":1989},[28,118900,118901],{"class":2225},"输入以下命令\n",[28,118903,118904],{"class":30,"line":1994},[28,118905,2662],{"emptyLinePlaceholder":336},[28,118907,118908,118911],{"class":30,"line":2011},[28,118909,118910],{"class":127},"```",[28,118912,118913],{"class":2225},"Bash\n",[28,118915,118916,118918,118920],{"class":30,"line":2016},[28,118917,24839],{"class":2225},[28,118919,117530],{"class":127},[28,118921,26505],{"class":127},[14,118923,118924],{},"这里被替换成对应学校则成功",[14,118926,118927],{},[1727,118928],{"alt":23,"src":118929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[351,118931,118933],{"id":118932},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[380,118935,118937],{"id":118936},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118939,118940],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118942,118943],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118945,118946],{},[51,118947,118948],{"href":118948,"rel":118949},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24127],[14,118951,118952],{},[1727,118953],{"alt":23,"src":118954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118956,118957],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118959,118960],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118962,118963],{},[1727,118964],{"alt":23,"src":118965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[18,118967,118969],{"className":117509,"code":118968,"language":117511,"meta":23,"style":23},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[25,118970,118971,118976,118983,118988],{"__ignoreMap":23},[28,118972,118973],{"class":30,"line":31},[28,118974,118975],{"class":87},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[28,118977,118978,118980],{"class":30,"line":48},[28,118979,101489],{"class":60},[28,118981,118982],{"class":127}," ~\u002FDownloads\n",[28,118984,118985],{"class":30,"line":84},[28,118986,118987],{"class":87},"#下方chrome安装包名不一定是这个，根据名字来看\n",[28,118989,118990,118992,118994,118996],{"class":30,"line":91},[28,118991,24839],{"class":2225},[28,118993,117530],{"class":127},[28,118995,24096],{"class":127},[28,118997,118998],{"class":127}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119000,119001],{},[1727,119002],{"alt":23,"src":119003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[380,119005,119007],{"id":119006},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[18,119009,119011],{"className":117509,"code":119010,"language":117511,"meta":23,"style":23},"# 老版\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",[25,119012,119013,119018,119026,119037,119042,119046,119051,119061,119069,119080],{"__ignoreMap":23},[28,119014,119015],{"class":30,"line":31},[28,119016,119017],{"class":87},"# 老版\n",[28,119019,119020,119022,119024],{"class":30,"line":48},[28,119021,24839],{"class":2225},[28,119023,117530],{"class":127},[28,119025,26505],{"class":127},[28,119027,119028,119030,119032,119034],{"class":30,"line":84},[28,119029,24839],{"class":2225},[28,119031,117530],{"class":127},[28,119033,24096],{"class":127},[28,119035,119036],{"class":127}," neofetch\n",[28,119038,119039],{"class":30,"line":91},[28,119040,119041],{"class":2225},"neofetch\n",[28,119043,119044],{"class":30,"line":97},[28,119045,2662],{"emptyLinePlaceholder":336},[28,119047,119048],{"class":30,"line":103},[28,119049,119050],{"class":87},"# 新版\n",[28,119052,119053,119055,119058],{"class":30,"line":109},[28,119054,24839],{"class":2225},[28,119056,119057],{"class":127}," add-apt-repository",[28,119059,119060],{"class":127}," ppa:zhangsongcui3371\u002Ffastfetch\n",[28,119062,119063,119065,119067],{"class":30,"line":118},[28,119064,24839],{"class":2225},[28,119066,117530],{"class":127},[28,119068,26505],{"class":127},[28,119070,119071,119073,119075,119077],{"class":30,"line":124},[28,119072,24839],{"class":2225},[28,119074,117530],{"class":127},[28,119076,24096],{"class":127},[28,119078,119079],{"class":127}," fastfetch\n",[28,119081,119082],{"class":30,"line":131},[28,119083,119084],{"class":2225},"fastfetch\n",[14,119086,119087],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119089,119090],{},[1727,119091],{"alt":23,"src":119092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[380,119094,119096],{"id":119095},"_323-移除snap应用","3.2.3 移除snap应用",[14,119098,119099],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[18,119101,119103],{"className":117509,"code":119102,"language":117511,"meta":23,"style":23},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[25,119104,119105,119117,119128],{"__ignoreMap":23},[28,119106,119107,119109,119111,119114],{"class":30,"line":31},[28,119108,24839],{"class":2225},[28,119110,26776],{"class":127},[28,119112,119113],{"class":127}," disable",[28,119115,119116],{"class":127}," snapd.service\n",[28,119118,119119,119121,119123,119125],{"class":30,"line":48},[28,119120,24839],{"class":2225},[28,119122,26776],{"class":127},[28,119124,119113],{"class":127},[28,119126,119127],{"class":127}," snapd.socket\n",[28,119129,119130,119132,119134,119136],{"class":30,"line":84},[28,119131,24839],{"class":2225},[28,119133,26776],{"class":127},[28,119135,119113],{"class":127},[28,119137,119138],{"class":127}," snapd.seeded.service\n",[14,119140,119141],{},"然后查看snap应用列表",[14,119143,119144,119145,119150],{},"根据你安装的选择不同（最小安装或普通安装），有",[51,119146,119149],{"href":119147,"rel":119148},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24127],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[18,119152,119154],{"className":117509,"code":119153,"language":117511,"meta":23,"style":23},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[25,119155,119156,119161],{"__ignoreMap":23},[28,119157,119158],{"class":30,"line":31},[28,119159,119160],{"class":87},"# 查询当前系统上snap安装了哪些app\n",[28,119162,119163,119166],{"class":30,"line":48},[28,119164,119165],{"class":2225},"snap",[28,119167,119168],{"class":127}," list\n",[14,119170,119171],{},[1727,119172],{"alt":23,"src":119173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119175,119176,119177,119180],{},"卸载掉图中所有应用，按照 ",[555,119178,119179],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[18,119182,119184],{"className":117509,"code":119183,"language":117511,"meta":23,"style":23},"#移除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",[25,119185,119186,119191,119203,119208,119219,119224,119235,119240,119251,119256,119260,119265,119276,119287],{"__ignoreMap":23},[28,119187,119188],{"class":30,"line":31},[28,119189,119190],{"class":87},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[28,119192,119193,119195,119198,119200],{"class":30,"line":48},[28,119194,24839],{"class":2225},[28,119196,119197],{"class":127}," snap",[28,119199,26342],{"class":127},[28,119201,119202],{"class":127}," snap-store\n",[28,119204,119205],{"class":30,"line":84},[28,119206,119207],{"class":87},"#移除firefox浏览器\n",[28,119209,119210,119212,119214,119216],{"class":30,"line":91},[28,119211,24839],{"class":2225},[28,119213,119197],{"class":127},[28,119215,26342],{"class":127},[28,119217,119218],{"class":127}," firefox\n",[28,119220,119221],{"class":30,"line":97},[28,119222,119223],{"class":87},"#移除gnome-42-2204\n",[28,119225,119226,119228,119230,119232],{"class":30,"line":103},[28,119227,24839],{"class":2225},[28,119229,119197],{"class":127},[28,119231,26342],{"class":127},[28,119233,119234],{"class":127}," gnome-42-2204\n",[28,119236,119237],{"class":30,"line":109},[28,119238,119239],{"class":87},"#移除gtk-common-themes\n",[28,119241,119242,119244,119246,119248],{"class":30,"line":118},[28,119243,24839],{"class":2225},[28,119245,119197],{"class":127},[28,119247,26342],{"class":127},[28,119249,119250],{"class":127}," gtk-common-themes\n",[28,119252,119253],{"class":30,"line":124},[28,119254,119255],{"class":87},"#移除其它...\n",[28,119257,119258],{"class":30,"line":131},[28,119259,2936],{"class":38},[28,119261,119262],{"class":30,"line":137},[28,119263,119264],{"class":87},"#移除core22,bare以及snapd\n",[28,119266,119267,119269,119271,119273],{"class":30,"line":143},[28,119268,24839],{"class":2225},[28,119270,119197],{"class":127},[28,119272,26342],{"class":127},[28,119274,119275],{"class":127}," core22\n",[28,119277,119278,119280,119282,119284],{"class":30,"line":149},[28,119279,24839],{"class":2225},[28,119281,119197],{"class":127},[28,119283,26342],{"class":127},[28,119285,119286],{"class":127}," bare\n",[28,119288,119289,119291,119293,119295],{"class":30,"line":1890},[28,119290,24839],{"class":2225},[28,119292,119197],{"class":127},[28,119294,26342],{"class":127},[28,119296,119297],{"class":127}," snapd\n",[14,119299,119300],{},[1727,119301],{"alt":23,"src":119302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119304,119305],{},"输入以下命令查看是否还有snap包",[18,119307,119309],{"className":117509,"code":119308,"language":117511,"meta":23,"style":23},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[25,119310,119311,119317,119321,119325,119329],{"__ignoreMap":23},[28,119312,119313,119315],{"class":30,"line":31},[28,119314,119165],{"class":2225},[28,119316,119168],{"class":127},[28,119318,119319],{"class":30,"line":48},[28,119320,119017],{"class":87},[28,119322,119323],{"class":30,"line":84},[28,119324,119041],{"class":2225},[28,119326,119327],{"class":30,"line":91},[28,119328,119050],{"class":87},[28,119330,119331],{"class":30,"line":97},[28,119332,119084],{"class":2225},[14,119334,119335],{},[1727,119336],{"alt":23,"src":119337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[380,119339,119341],{"id":119340},"_324-移除snap","3.2.4 移除snap",[14,119343,119344,119345,119350],{},"在删除掉",[51,119346,119349],{"href":119347,"rel":119348},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24127],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[18,119352,119354],{"className":117509,"code":119353,"language":117511,"meta":23,"style":23}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[25,119355,119356,119361,119374,119379,119390],{"__ignoreMap":23},[28,119357,119358],{"class":30,"line":31},[28,119359,119360],{"class":87}," #使用apt移除掉snap\n",[28,119362,119363,119365,119367,119369,119372],{"class":30,"line":48},[28,119364,24839],{"class":2225},[28,119366,117530],{"class":127},[28,119368,117838],{"class":127},[28,119370,119371],{"class":60}," --purge",[28,119373,119297],{"class":127},[28,119375,119376],{"class":30,"line":84},[28,119377,119378],{"class":87},"#移除snapd的一些目录\n",[28,119380,119381,119383,119385,119387],{"class":30,"line":91},[28,119382,24839],{"class":2225},[28,119384,118766],{"class":127},[28,119386,25588],{"class":60},[28,119388,119389],{"class":127}," \u002Fvar\u002Fcache\u002Fsnapd\n",[28,119391,119392,119394,119396,119398],{"class":30,"line":97},[28,119393,24839],{"class":2225},[28,119395,118766],{"class":127},[28,119397,25588],{"class":60},[28,119399,119400],{"class":127}," ~\u002Fsnap\n",[14,119402,119403,119404,119407],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[25,119405,119406],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[380,119409,119411],{"id":119410},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119413,119414],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[18,119416,119418],{"className":117509,"code":119417,"language":117511,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[25,119419,119420],{"__ignoreMap":23},[28,119421,119422,119424,119426],{"class":30,"line":31},[28,119423,24839],{"class":2225},[28,119425,118796],{"class":127},[28,119427,119428],{"class":127}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119430,119431,119432,119435],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[25,119433,119434],{},":wq"," 回车",[18,119437,119439],{"className":117509,"code":119438,"language":117511,"meta":23,"style":23},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[25,119440,119441,119448,119462],{"__ignoreMap":23},[28,119442,119443,119446],{"class":30,"line":31},[28,119444,119445],{"class":2225},"Package:",[28,119447,119297],{"class":127},[28,119449,119450,119453,119456,119459],{"class":30,"line":48},[28,119451,119452],{"class":2225},"Pin:",[28,119454,119455],{"class":127}," release",[28,119457,119458],{"class":127}," a=",[28,119460,119461],{"class":60},"*\n",[28,119463,119464,119467],{"class":30,"line":84},[28,119465,119466],{"class":2225},"Pin-Priority:",[28,119468,119469],{"class":60}," -10\n",[14,119471,119472],{},[1727,119473],{"alt":23,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[380,119476,119478],{"id":119477},"_326-测试是否成功","3.2.6 测试是否成功",[18,119480,119482],{"className":117509,"code":119481,"language":117511,"meta":23,"style":23},"sudo apt update\nsudo apt install firefox\n",[25,119483,119484,119492],{"__ignoreMap":23},[28,119485,119486,119488,119490],{"class":30,"line":31},[28,119487,24839],{"class":2225},[28,119489,117530],{"class":127},[28,119491,26505],{"class":127},[28,119493,119494,119496,119498,119500],{"class":30,"line":48},[28,119495,24839],{"class":2225},[28,119497,117530],{"class":127},[28,119499,24096],{"class":127},[28,119501,119218],{"class":127},[14,119503,119504],{},"这里提示snapd无法被安装，就证明成功了",[14,119506,119507],{},[1727,119508],{"alt":23,"src":119509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[380,119511,119513],{"id":119512},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119515,119516],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119518,119519],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119521,119522],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[18,119524,119526],{"className":117509,"code":119525,"language":117511,"meta":23,"style":23},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[25,119527,119528,119533,119542,119547,119555],{"__ignoreMap":23},[28,119529,119530],{"class":30,"line":31},[28,119531,119532],{"class":87},"# 添加Mozilla提供的源\n",[28,119534,119535,119537,119539],{"class":30,"line":48},[28,119536,24839],{"class":2225},[28,119538,119057],{"class":127},[28,119540,119541],{"class":127}," ppa:mozillateam\u002Fppa\n",[28,119543,119544],{"class":30,"line":84},[28,119545,119546],{"class":87},"# 安装Firefox\n",[28,119548,119549,119551,119553],{"class":30,"line":91},[28,119550,24839],{"class":2225},[28,119552,117530],{"class":127},[28,119554,26505],{"class":127},[28,119556,119557,119559,119561,119563],{"class":30,"line":97},[28,119558,24839],{"class":2225},[28,119560,117530],{"class":127},[28,119562,24096],{"class":127},[28,119564,119218],{"class":127},[380,119566,119568],{"id":119567},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119570,119571],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119573,119574],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[18,119576,119578],{"className":117509,"code":119577,"language":117511,"meta":23,"style":23},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[25,119579,119580,119585,119595,119603,119607],{"__ignoreMap":23},[28,119581,119582],{"class":30,"line":31},[28,119583,119584],{"class":87},"#删掉禁止安装snap的配置文件\n",[28,119586,119587,119589,119591,119593],{"class":30,"line":48},[28,119588,24839],{"class":2225},[28,119590,118766],{"class":127},[28,119592,25588],{"class":60},[28,119594,119428],{"class":127},[28,119596,119597,119599,119601],{"class":30,"line":84},[28,119598,24839],{"class":2225},[28,119600,117530],{"class":127},[28,119602,26505],{"class":127},[28,119604,119605],{"class":30,"line":91},[28,119606,2662],{"emptyLinePlaceholder":336},[28,119608,119609,119611,119613],{"class":30,"line":97},[28,119610,24839],{"class":2225},[28,119612,117530],{"class":127},[28,119614,119615],{"class":127}," dist-update\n",[351,119617,119619],{"id":119618},"_33-中文输入法","3.3 中文输入法",[380,119621,119623],{"id":119622},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119625,119626],{},"官网下载搜狗输入法",[14,119628,119629],{},[1727,119630],{"alt":23,"src":119631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119633,119634],{},[1727,119635],{"alt":23,"src":119636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119638,119639],{},"打开终端输入如下",[18,119641,119643],{"className":117509,"code":119642,"language":117511,"meta":23,"style":23},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[25,119644,119645,119652],{"__ignoreMap":23},[28,119646,119647,119649],{"class":30,"line":31},[28,119648,101489],{"class":60},[28,119650,119651],{"class":127}," ~\u002FDownloads\u002F\n",[28,119653,119654,119656,119658,119660],{"class":30,"line":48},[28,119655,24839],{"class":2225},[28,119657,117530],{"class":127},[28,119659,24096],{"class":127},[28,119661,119662],{"class":127}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119664,119665],{},"打开Fcitx",[14,119667,119668,119671],{},[1727,119669],{"alt":23,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1727,119672],{"alt":23,"src":119673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119675,119676],{},[1727,119677],{"alt":23,"src":119678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119680,119681],{},"添加搜狗输入法",[14,119683,119684],{},[1727,119685],{"alt":23,"src":119686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119688,119689],{},[1727,119690],{"alt":23,"src":119691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119693,119694],{},"将搜狗输入法设置为唯一输入法",[14,119696,119697],{},[1727,119698],{"alt":23,"src":119699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[380,119701,119703],{"id":119702},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[363,119705,119706],{},[366,119707,119708],{},"卸载旧输入法",[18,119710,119712],{"className":118736,"code":119711,"language":118738,"meta":23,"style":23},"sudo apt purge fcitx* ibus*\n",[25,119713,119714],{"__ignoreMap":23},[28,119715,119716,119718,119720,119722,119725,119727,119730],{"class":30,"line":31},[28,119717,24839],{"class":2225},[28,119719,117530],{"class":127},[28,119721,117871],{"class":127},[28,119723,119724],{"class":127}," fcitx",[28,119726,854],{"class":60},[28,119728,119729],{"class":127}," ibus",[28,119731,119461],{"class":60},[363,119733,119734],{"start":48},[366,119735,119736],{},"安装Fcitx5",[18,119738,119740],{"className":117509,"code":119739,"language":117511,"meta":23,"style":23},"# 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",[25,119741,119742,119747,119761,119765,119770,119779,119787],{"__ignoreMap":23},[28,119743,119744],{"class":30,"line":31},[28,119745,119746],{"class":87},"# Ubuntu22.04及以上、Debian12及以上\n",[28,119748,119749,119751,119753,119755,119758],{"class":30,"line":48},[28,119750,24839],{"class":2225},[28,119752,117530],{"class":127},[28,119754,24096],{"class":127},[28,119756,119757],{"class":127}," fcitx5",[28,119759,119760],{"class":127}," fcitx5-chinese-addons\n",[28,119762,119763],{"class":30,"line":84},[28,119764,2662],{"emptyLinePlaceholder":336},[28,119766,119767],{"class":30,"line":91},[28,119768,119769],{"class":87},"# Ubuntu20.04\n",[28,119771,119772,119774,119776],{"class":30,"line":97},[28,119773,24839],{"class":2225},[28,119775,119057],{"class":127},[28,119777,119778],{"class":127}," ppa:zhsj\u002Ffcitx5\n",[28,119780,119781,119783,119785],{"class":30,"line":103},[28,119782,24839],{"class":2225},[28,119784,117530],{"class":127},[28,119786,26505],{"class":127},[28,119788,119789,119791,119793,119795,119797],{"class":30,"line":109},[28,119790,24839],{"class":2225},[28,119792,117530],{"class":127},[28,119794,24096],{"class":127},[28,119796,119757],{"class":127},[28,119798,119760],{"class":127},[363,119800,119801,119804],{"start":84},[366,119802,119803],{},"Reboot System",[366,119805,119806],{},"启动Fcitx5",[14,119808,119809],{},[1727,119810],{"alt":23,"src":119811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[363,119813,119814],{"start":97},[366,119815,119816],{},"修改一些设置",[14,119818,119819],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119821,119822],{},[1727,119823],{"alt":23,"src":119824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119826,119827],{},"添加快捷键以便于更好切换中英文",[14,119829,119830],{},[1727,119831],{"alt":23,"src":119832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[363,119834,119835],{"start":103},[366,119836,119837],{},"重启",[18,119839,119841],{"className":118736,"code":119840,"language":118738,"meta":23,"style":23},"sudo shutdown -r now\n",[25,119842,119843],{"__ignoreMap":23},[28,119844,119845,119847,119850,119853],{"class":30,"line":31},[28,119846,24839],{"class":2225},[28,119848,119849],{"class":127}," shutdown",[28,119851,119852],{"class":60}," -r",[28,119854,119855],{"class":127}," now\n",[363,119857,119858],{"start":109},[366,119859,119860],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119862,119863],{},[51,119864,119865],{"href":119865,"rel":119866},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24127],[363,119868,119869],{"start":118},[366,119870,119871],{},"再重启",[18,119873,119874],{"className":118736,"code":119840,"language":118738,"meta":23,"style":23},[25,119875,119876],{"__ignoreMap":23},[28,119877,119878,119880,119882,119884],{"class":30,"line":31},[28,119879,24839],{"class":2225},[28,119881,119849],{"class":127},[28,119883,119852],{"class":60},[28,119885,119855],{"class":127},[351,119887,119889],{"id":119888},"_34-pip3源替换","3.4 pip3源替换",[14,119891,119892],{},"非Debian系发行版需要做。",[14,119894,119895],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119897,119898],{},"使用dnf的系统也可能不用做。",[18,119900,119902],{"className":117509,"code":119901,"language":117511,"meta":23,"style":23},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,119903,119904,119909,119916,119921,119926],{"__ignoreMap":23},[28,119905,119906],{"class":30,"line":31},[28,119907,119908],{"class":87},"# 检查是否已安装 pip\n",[28,119910,119911,119914],{"class":30,"line":48},[28,119912,119913],{"class":2225},"pip3",[28,119915,26556],{"class":60},[28,119917,119918],{"class":30,"line":84},[28,119919,119920],{"class":87},"# 如果未安装，先安装 pip3（见下方）\n",[28,119922,119923],{"class":30,"line":91},[28,119924,119925],{"class":87},"# 配置 pip 使用清华源\n",[28,119927,119928,119930,119933,119936,119939],{"class":30,"line":97},[28,119929,119913],{"class":2225},[28,119931,119932],{"class":127}," config",[28,119934,119935],{"class":127}," set",[28,119937,119938],{"class":127}," global.index-url",[28,119940,119941],{"class":127}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119943,119944],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119946,119947],{},[1727,119948],{"alt":23,"src":119949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[18,119951,119953],{"className":117509,"code":119952,"language":117511,"meta":23,"style":23},"#安装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",[25,119954,119955,119960,119968,119979,119983,119988,120007,120011,120016,120028,120032,120037],{"__ignoreMap":23},[28,119956,119957],{"class":30,"line":31},[28,119958,119959],{"class":87},"#安装pip3\n",[28,119961,119962,119964,119966],{"class":30,"line":48},[28,119963,24839],{"class":2225},[28,119965,117530],{"class":127},[28,119967,26505],{"class":127},[28,119969,119970,119972,119974,119976],{"class":30,"line":84},[28,119971,24839],{"class":2225},[28,119973,26339],{"class":127},[28,119975,24096],{"class":127},[28,119977,119978],{"class":127}," python3-pip\n",[28,119980,119981],{"class":30,"line":91},[28,119982,2662],{"emptyLinePlaceholder":336},[28,119984,119985],{"class":30,"line":97},[28,119986,119987],{"class":87},"#更新pip3\n",[28,119989,119990,119992,119994,119996,119998,120000,120003,120005],{"class":30,"line":103},[28,119991,101092],{"class":2225},[28,119993,101095],{"class":60},[28,119995,101118],{"class":127},[28,119997,24096],{"class":127},[28,119999,26693],{"class":60},[28,120001,120002],{"class":127}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[28,120004,101123],{"class":60},[28,120006,101126],{"class":127},[28,120008,120009],{"class":30,"line":109},[28,120010,2662],{"emptyLinePlaceholder":336},[28,120012,120013],{"class":30,"line":118},[28,120014,120015],{"class":87},"#设置pip源为清华源\n",[28,120017,120018,120020,120022,120024,120026],{"class":30,"line":124},[28,120019,119913],{"class":2225},[28,120021,119932],{"class":127},[28,120023,119935],{"class":127},[28,120025,119938],{"class":127},[28,120027,119941],{"class":127},[28,120029,120030],{"class":30,"line":131},[28,120031,2662],{"emptyLinePlaceholder":336},[28,120033,120034],{"class":30,"line":137},[28,120035,120036],{"class":87},"#测试\n",[28,120038,120039,120041,120043,120045,120047,120049],{"class":30,"line":143},[28,120040,101092],{"class":2225},[28,120042,101095],{"class":60},[28,120044,101118],{"class":127},[28,120046,24096],{"class":127},[28,120048,101123],{"class":60},[28,120050,101126],{"class":127},[14,120052,120053],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120055,120056],{},[1727,120057],{"alt":23,"src":120058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[351,120060,120062],{"id":120061},"_35-显卡驱动安装","3.5 显卡驱动安装",[380,120064,120066],{"id":120065},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[18,120068,120070],{"className":118736,"code":120069,"language":118738,"meta":23,"style":23},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[25,120071,120072,120077,120092,120097],{"__ignoreMap":23},[28,120073,120074],{"class":30,"line":31},[28,120075,120076],{"class":87},"# 如果是使用apt安装的驱动\n",[28,120078,120079,120081,120083,120085,120087,120090],{"class":30,"line":48},[28,120080,24839],{"class":2225},[28,120082,26339],{"class":127},[28,120084,26342],{"class":127},[28,120086,119371],{"class":60},[28,120088,120089],{"class":127}," nvidia",[28,120091,119461],{"class":60},[28,120093,120094],{"class":30,"line":84},[28,120095,120096],{"class":87},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[28,120098,120099,120101],{"class":30,"line":91},[28,120100,24839],{"class":2225},[28,120102,120103],{"class":127}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[380,120105,120107],{"id":120106},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22260,120109,120111],{"id":120110},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23172,120113,120115],{"id":120114},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[18,120117,120119],{"className":118736,"code":120118,"language":118738,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120120,120121,120126,120137,120142,120152,120157],{"__ignoreMap":23},[28,120122,120123],{"class":30,"line":31},[28,120124,120125],{"class":87},"# 安装英伟达驱动\n",[28,120127,120128,120130,120132,120134],{"class":30,"line":48},[28,120129,24839],{"class":2225},[28,120131,117530],{"class":127},[28,120133,24096],{"class":127},[28,120135,120136],{"class":127}," nvidia-driver-版本号\n",[28,120138,120139],{"class":30,"line":84},[28,120140,120141],{"class":87},"# 重启 \n",[28,120143,120144,120146,120148,120150],{"class":30,"line":91},[28,120145,24839],{"class":2225},[28,120147,119849],{"class":127},[28,120149,119852],{"class":60},[28,120151,119855],{"class":127},[28,120153,120154],{"class":30,"line":97},[28,120155,120156],{"class":87},"# 检查驱动是否安装成功\n",[28,120158,120159],{"class":30,"line":103},[28,120160,120161],{"class":2225},"nvidia-smi\n",[23172,120163,120165],{"id":120164},"_35212-debian","3.5.2.1.2 Debian",[18,120167,120169],{"className":118736,"code":120168,"language":118738,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120170,120171,120175,120189,120193,120203,120207],{"__ignoreMap":23},[28,120172,120173],{"class":30,"line":31},[28,120174,120125],{"class":87},[28,120176,120177,120179,120181,120183,120186],{"class":30,"line":48},[28,120178,24839],{"class":2225},[28,120180,117530],{"class":127},[28,120182,24096],{"class":127},[28,120184,120185],{"class":127}," nvidia-driver",[28,120187,120188],{"class":127}," nvidia-settings\n",[28,120190,120191],{"class":30,"line":84},[28,120192,120141],{"class":87},[28,120194,120195,120197,120199,120201],{"class":30,"line":91},[28,120196,24839],{"class":2225},[28,120198,119849],{"class":127},[28,120200,119852],{"class":60},[28,120202,119855],{"class":127},[28,120204,120205],{"class":30,"line":97},[28,120206,120156],{"class":87},[28,120208,120209],{"class":30,"line":103},[28,120210,120161],{"class":2225},[22260,120212,120214],{"id":120213},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120216,120217,120218,120221],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[555,120219,120220],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120223,120224,120225],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23815,120226,120227],{},[555,120228,120229],{},"（也可以不禁用桌面环境，直接进行下一步。）",[18,120231,120233],{"className":118736,"code":120232,"language":118738,"meta":23,"style":23},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[25,120234,120235,120240,120250,120255,120268,120273],{"__ignoreMap":23},[28,120236,120237],{"class":30,"line":31},[28,120238,120239],{"class":87},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[28,120241,120242,120244,120247],{"class":30,"line":48},[28,120243,24839],{"class":2225},[28,120245,120246],{"class":127}," telinit",[28,120248,120249],{"class":60}," 3\n",[28,120251,120252],{"class":30,"line":84},[28,120253,120254],{"class":87},"# ubuntu 使用下方命令\n",[28,120256,120257,120259,120262,120265],{"class":30,"line":91},[28,120258,24839],{"class":2225},[28,120260,120261],{"class":127}," service",[28,120263,120264],{"class":127}," lightdm",[28,120266,120267],{"class":127}," stop\n",[28,120269,120270],{"class":30,"line":97},[28,120271,120272],{"class":87},"# Fedora 使用下方命令\n",[28,120274,120275,120277,120279,120282],{"class":30,"line":103},[28,120276,24839],{"class":2225},[28,120278,26776],{"class":127},[28,120280,120281],{"class":127}," isolate",[28,120283,120284],{"class":127}," multi-user.target\n",[14,120286,120287],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[18,120289,120291],{"className":118736,"code":120290,"language":118738,"meta":23,"style":23},"# 编译环境+准备工作\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",[25,120292,120293,120298,120309,120314,120321,120326,120338,120343,120350,120355],{"__ignoreMap":23},[28,120294,120295],{"class":30,"line":31},[28,120296,120297],{"class":87},"# 编译环境+准备工作\n",[28,120299,120300,120302,120304,120306],{"class":30,"line":48},[28,120301,24839],{"class":2225},[28,120303,117530],{"class":127},[28,120305,24096],{"class":127},[28,120307,120308],{"class":127}," build-essential\n",[28,120310,120311],{"class":30,"line":84},[28,120312,120313],{"class":87},"# 进入到.run目录中\n",[28,120315,120316,120318],{"class":30,"line":91},[28,120317,101489],{"class":60},[28,120319,120320],{"class":127}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[28,120322,120323],{"class":30,"line":97},[28,120324,120325],{"class":87},"# 给驱动文件增加可执行权限：\n",[28,120327,120328,120330,120332,120335],{"class":30,"line":103},[28,120329,24839],{"class":2225},[28,120331,24842],{"class":127},[28,120333,120334],{"class":127}," a+x",[28,120336,120337],{"class":127}," NVIDIA-Linux-x86_64-550.107.02.run\n",[28,120339,120340],{"class":30,"line":109},[28,120341,120342],{"class":87},"# 然后执行安装：\n",[28,120344,120345,120347],{"class":30,"line":118},[28,120346,24839],{"class":2225},[28,120348,120349],{"class":127}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[28,120351,120352],{"class":30,"line":124},[28,120353,120354],{"class":87},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[28,120356,120357,120359,120362],{"class":30,"line":131},[28,120358,24839],{"class":2225},[28,120360,120361],{"class":127}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[28,120363,120364],{"class":60},"  --no-opengl-files\n",[14,120366,120367],{},"安装完毕重启即可",[18,120369,120371],{"className":118736,"code":120370,"language":118738,"meta":23,"style":23},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120372,120373,120377,120383,120387],{"__ignoreMap":23},[28,120374,120375],{"class":30,"line":31},[28,120376,120141],{"class":87},[28,120378,120379,120381],{"class":30,"line":48},[28,120380,24839],{"class":2225},[28,120382,26910],{"class":127},[28,120384,120385],{"class":30,"line":84},[28,120386,120156],{"class":87},[28,120388,120389],{"class":30,"line":91},[28,120390,120161],{"class":2225},[380,120392,120394],{"id":120393},"_353-安装cuda","3.5.3 安装CUDA",[14,120396,120397],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120399,120400],{},[1727,120401],{"alt":23,"src":120402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[363,120404,120405],{},[366,120406,120407],{},"先查看显卡驱动所支持的最高CUDA版本",[18,120409,120410],{"className":118736,"code":120161,"language":118738,"meta":23,"style":23},[25,120411,120412],{"__ignoreMap":23},[28,120413,120414],{"class":30,"line":31},[28,120415,120161],{"class":2225},[14,120417,120418],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120420,120421],{},[1727,120422],{"alt":23,"src":120423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[363,120425,120426],{"start":48},[366,120427,120428],{},"下载CUDA并安装CUDA",[14,120430,118515,120431],{},[51,120432,118518],{"href":118518,"rel":120433},[24127],[14,120435,120436],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120438,120439],{},[1727,120440],{"alt":23,"src":120441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120443,120444,120445,120450],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[51,120446,120449],{"href":120447,"rel":120448},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24127],"Vinci机器人队单片机教程","）",[14,120452,120453],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120455,120456],{},[1727,120457],{"alt":23,"src":120458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120460,120461],{},"将最下方框框里的命令敲入终端",[18,120463,120465],{"className":118736,"code":120464,"language":118738,"meta":23,"style":23},"# 在当前文件夹下创建一个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",[25,120466,120467,120472,120481,120486,120493,120498,120506,120511,120522,120527],{"__ignoreMap":23},[28,120468,120469],{"class":30,"line":31},[28,120470,120471],{"class":87},"# 在当前文件夹下创建一个ttt的子文件夹\n",[28,120473,120474,120476,120478],{"class":30,"line":48},[28,120475,101479],{"class":2225},[28,120477,29479],{"class":60},[28,120479,120480],{"class":127}," .\u002Fttt\n",[28,120482,120483],{"class":30,"line":84},[28,120484,120485],{"class":87},"# 进入ttt文件夹\n",[28,120487,120488,120490],{"class":30,"line":91},[28,120489,101489],{"class":60},[28,120491,120492],{"class":127}," ttt\n",[28,120494,120495],{"class":30,"line":97},[28,120496,120497],{"class":87},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[28,120499,120500,120503],{"class":30,"line":103},[28,120501,120502],{"class":2225},"wget",[28,120504,120505],{"class":127}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120507,120508],{"class":30,"line":109},[28,120509,120510],{"class":87},"# 给予权限\n",[28,120512,120513,120515,120517,120519],{"class":30,"line":118},[28,120514,24839],{"class":2225},[28,120516,24842],{"class":127},[28,120518,120334],{"class":127},[28,120520,120521],{"class":127}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120523,120524],{"class":30,"line":124},[28,120525,120526],{"class":87},"# 运行脚本\n",[28,120528,120529,120531],{"class":30,"line":131},[28,120530,24839],{"class":2225},[28,120532,120521],{"class":127},[14,120534,120535],{},[1727,120536],{"alt":23,"src":120537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120539,120540],{},"正在安装中：",[14,120542,120543],{},[1727,120544],{"alt":23,"src":120545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120547,120548],{},"输入accept接受即可",[14,120550,120551],{},[1727,120552],{"alt":23,"src":120553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120555,120556],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120558,120559],{},[1727,120560],{"alt":23,"src":120561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120563,120564],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120566,120567],{},[1727,120568],{"alt":23,"src":120569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[363,120571,120572],{"start":84},[366,120573,120574],{},"配置环境",[14,120576,120577],{},"根据上方确认一下路径，比如我上面红色框起来的为",[18,120579,120581],{"className":118736,"code":120580,"language":118738,"meta":23,"style":23},"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",[25,120582,120583,120599,120614],{"__ignoreMap":23},[28,120584,120585,120588,120591,120594,120597],{"class":30,"line":31},[28,120586,120587],{"class":2225},"Please",[28,120589,120590],{"class":127}," make",[28,120592,120593],{"class":127}," sure",[28,120595,120596],{"class":127}," that",[28,120598,2936],{"class":38},[28,120600,120601,120603,120606,120609,120612],{"class":30,"line":48},[28,120602,52527],{"class":2225},[28,120604,120605],{"class":127},"   PATH",[28,120607,120608],{"class":127}," includes",[28,120610,120611],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[28,120613,2936],{"class":38},[28,120615,120616,120618,120621,120623,120626,120629,120631,120634,120637,120640,120643,120645,120648,120650],{"class":30,"line":84},[28,120617,52527],{"class":2225},[28,120619,120620],{"class":127},"   LD_LIBRARY_PATH",[28,120622,120608],{"class":127},[28,120624,120625],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[28,120627,120628],{"class":127}," or,",[28,120630,5471],{"class":127},[28,120632,120633],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[28,120635,120636],{"class":127}," to",[28,120638,120639],{"class":127}," \u002Fetc\u002Fld.so.conf",[28,120641,120642],{"class":127}," and",[28,120644,27493],{"class":127},[28,120646,120647],{"class":127}," ldconfig",[28,120649,64860],{"class":127},[28,120651,120652],{"class":127}," root\n",[14,120654,120655],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[18,120657,120659],{"className":118736,"code":120658,"language":118738,"meta":23,"style":23},"which nvcc\n",[25,120660,120661],{"__ignoreMap":23},[28,120662,120663,120666],{"class":30,"line":31},[28,120664,120665],{"class":60},"which",[28,120667,120668],{"class":127}," nvcc\n",[14,120670,120671],{},[1727,120672],{"alt":23,"src":120673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120675,120676],{},"所以我进行以下操作：",[18,120678,120680],{"className":118736,"code":120679,"language":118738,"meta":23,"style":23},"sudo vim ~\u002F.bashrc\n",[25,120681,120682],{"__ignoreMap":23},[28,120683,120684,120686,120688],{"class":30,"line":31},[28,120685,24839],{"class":2225},[28,120687,118796],{"class":127},[28,120689,120690],{"class":127}," ~\u002F.bashrc\n",[14,120692,120693],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[18,120695,120697],{"className":118736,"code":120696,"language":118738,"meta":23,"style":23},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[25,120698,120699,120711],{"__ignoreMap":23},[28,120700,120701,120703,120706,120708],{"class":30,"line":31},[28,120702,25305],{"class":34},[28,120704,120705],{"class":38}," PATH",[28,120707,54],{"class":34},[28,120709,120710],{"class":38},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[28,120712,120713,120715,120718,120720],{"class":30,"line":48},[28,120714,25305],{"class":34},[28,120716,120717],{"class":38}," LD_LIBRARY_PATH",[28,120719,54],{"class":34},[28,120721,120722],{"class":38},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120724,120725],{},[1727,120726],{"alt":23,"src":120727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[18,120729,120731],{"className":118736,"code":120730,"language":118738,"meta":23,"style":23},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[25,120732,120733,120738,120744,120749],{"__ignoreMap":23},[28,120734,120735],{"class":30,"line":31},[28,120736,120737],{"class":87},"# 刷新当前终端的环境变量\n",[28,120739,120740,120742],{"class":30,"line":48},[28,120741,101106],{"class":60},[28,120743,120690],{"class":127},[28,120745,120746],{"class":30,"line":84},[28,120747,120748],{"class":87},"# 验证CUDA是否安装成功\n",[28,120750,120751,120754],{"class":30,"line":91},[28,120752,120753],{"class":2225},"nvcc",[28,120755,120756],{"class":60}," -V\n",[14,120758,120759],{},"出现下图这种则安装成功。",[14,120761,120762],{},[1727,120763],{"alt":23,"src":120764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[380,120766,120768],{"id":120767},"_354-安装cudnn","3.5.4 安装cuDNN",[363,120770,120771],{},[366,120772,120773],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120775,120776,120777,120782],{},"前往 NVIDIA cuDNN 下载页面：",[51,120778,120781],{"href":120779,"rel":120780},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24127],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120784,120785],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120787,120788],{},[1727,120789],{"alt":23,"src":120790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120792,120793],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120795,120796],{},[1727,120797],{"alt":23,"src":120798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120800,120801],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120803,120804],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120806,120807],{},[555,120808,120809],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120811,120812],{},"下载好的：",[14,120814,120815],{},[1727,120816],{"alt":23,"src":120817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[363,120819,120820],{"start":48},[366,120821,120822],{},"安装cuDNN",[14,120824,120825],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120827,120828],{},[1727,120829],{"alt":23,"src":120830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120832,120833],{},"解压文件，并复制到对应位置完成安装",[18,120835,120837],{"className":118736,"code":120836,"language":118738,"meta":23,"style":23},"# 解压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",[25,120838,120839,120844,120855,120860,120867,120872,120888,120902,120907,120918,120927,120931,120947],{"__ignoreMap":23},[28,120840,120841],{"class":30,"line":31},[28,120842,120843],{"class":87},"# 解压cuDNN文件\n",[28,120845,120846,120849,120852],{"class":30,"line":48},[28,120847,120848],{"class":2225},"tar",[28,120850,120851],{"class":60}," -xvf",[28,120853,120854],{"class":127}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[28,120856,120857],{"class":30,"line":84},[28,120858,120859],{"class":87},"# cd进文件夹\n",[28,120861,120862,120864],{"class":30,"line":91},[28,120863,101489],{"class":60},[28,120865,120866],{"class":127}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[28,120868,120869],{"class":30,"line":97},[28,120870,120871],{"class":87},"# 复制cuDNN文件到CUDA目录\n",[28,120873,120874,120876,120878,120881,120883,120886],{"class":30,"line":103},[28,120875,24839],{"class":2225},[28,120877,28124],{"class":127},[28,120879,120880],{"class":127}," include\u002Fcudnn",[28,120882,854],{"class":60},[28,120884,120885],{"class":127},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[28,120887,2936],{"class":38},[28,120889,120890,120892,120894,120897,120899],{"class":30,"line":109},[28,120891,24839],{"class":2225},[28,120893,28124],{"class":127},[28,120895,120896],{"class":127}," lib\u002Flibcudnn",[28,120898,854],{"class":60},[28,120900,120901],{"class":127},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[28,120903,120904],{"class":30,"line":118},[28,120905,120906],{"class":87},"# 对比一下有没有缺文件\n",[28,120908,120909,120911,120914,120916],{"class":30,"line":124},[28,120910,27024],{"class":2225},[28,120912,120913],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[28,120915,854],{"class":60},[28,120917,2936],{"class":38},[28,120919,120920,120922,120925],{"class":30,"line":131},[28,120921,27024],{"class":2225},[28,120923,120924],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[28,120926,119461],{"class":60},[28,120928,120929],{"class":30,"line":137},[28,120930,120510],{"class":87},[28,120932,120933,120935,120937,120940,120942,120944],{"class":30,"line":143},[28,120934,24839],{"class":2225},[28,120936,24842],{"class":127},[28,120938,120939],{"class":127}," a+r",[28,120941,120913],{"class":127},[28,120943,854],{"class":60},[28,120945,120946],{"class":38},"   \n",[28,120948,120949,120951,120953,120955,120957],{"class":30,"line":149},[28,120950,24839],{"class":2225},[28,120952,24842],{"class":127},[28,120954,120939],{"class":127},[28,120956,120924],{"class":127},[28,120958,119461],{"class":60},[363,120960,120961],{"start":84},[366,120962,120963],{},"检查是否安装成功",[18,120965,120967],{"className":118736,"code":120966,"language":118738,"meta":23,"style":23},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[25,120968,120969,120974],{"__ignoreMap":23},[28,120970,120971],{"class":30,"line":31},[28,120972,120973],{"class":87},"# 检查cuDNN版本命令\n",[28,120975,120976,120979,120982,120984,120986,120989,120992],{"class":30,"line":48},[28,120977,120978],{"class":2225},"cat",[28,120980,120981],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[28,120983,25372],{"class":34},[28,120985,30499],{"class":2225},[28,120987,120988],{"class":127}," CUDNN_MAJOR",[28,120990,120991],{"class":60}," -A",[28,120993,47979],{"class":60},[14,120995,120996],{},"出现下图这样的就是安装成功了",[14,120998,120999],{},[1727,121000],{"alt":23,"src":121001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[363,121003,121004],{"start":91},[366,121005,121006],{},"软链接(一般不需要)",[18,121008,121010],{"className":118736,"code":121009,"language":118738,"meta":23,"style":23},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[25,121011,121012,121017],{"__ignoreMap":23},[28,121013,121014],{"class":30,"line":31},[28,121015,121016],{"class":87},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[28,121018,121019,121021],{"class":30,"line":48},[28,121020,24839],{"class":2225},[28,121022,121023],{"class":127}," ldconfig\n",[14,121025,121026],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[18,121028,121033],{"className":121029,"code":121030,"language":121031,"meta":121032,"style":23},"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",[25,121034,121035,121040,121045,121050,121055,121060,121065],{"__ignoreMap":23},[28,121036,121037],{"class":30,"line":31},[28,121038,121039],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[28,121041,121042],{"class":30,"line":48},[28,121043,121044],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[28,121046,121047],{"class":30,"line":84},[28,121048,121049],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[28,121051,121052],{"class":30,"line":91},[28,121053,121054],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[28,121056,121057],{"class":30,"line":97},[28,121058,121059],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[28,121061,121062],{"class":30,"line":103},[28,121063,121064],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[28,121066,121067],{"class":30,"line":109},[28,121068,121069],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121071,121072],{},"运行下方的命令",[18,121074,121076],{"className":118736,"code":121075,"language":118738,"meta":23,"style":23},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[25,121077,121078,121083,121090,121095],{"__ignoreMap":23},[28,121079,121080],{"class":30,"line":31},[28,121081,121082],{"class":87},"# cd进入CUDA路径\n",[28,121084,121085,121087],{"class":30,"line":48},[28,121086,101489],{"class":60},[28,121088,121089],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[28,121091,121092],{"class":30,"line":84},[28,121093,121094],{"class":87}," # 查看本路径下的需要软链接的文件名\n",[28,121096,121097],{"class":30,"line":91},[28,121098,121099],{"class":2225}," ls\n",[14,121101,121102],{},[1727,121103],{"alt":23,"src":121104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121106,121107,121108,18672,121111,18672,121114,121117],{},"如上图，我需要将",[25,121109,121110],{},"libcudnn_xxx_xxxxx.so.8.9.7",[25,121112,121113],{},"libcudnn_xxx_xxxxx.so.8",[25,121115,121116],{},"libcudnn_xxx_xxxxx.so","软链接",[18,121119,121121],{"className":118736,"code":121120,"language":118738,"meta":23,"style":23},"# 创建符号链接。对于每个 .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",[25,121122,121123,121128,121144,121158,121172,121186,121200,121214,121228,121233,121239,121244],{"__ignoreMap":23},[28,121124,121125],{"class":30,"line":31},[28,121126,121127],{"class":87},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[28,121129,121130,121132,121135,121138,121141],{"class":30,"line":48},[28,121131,24839],{"class":2225},[28,121133,121134],{"class":127}," ln",[28,121136,121137],{"class":60}," -sf",[28,121139,121140],{"class":127}," libcudnn_cnn_train.so.8.9.7",[28,121142,121143],{"class":127}," libcudnn_cnn_train.so.8\n",[28,121145,121146,121148,121150,121152,121155],{"class":30,"line":84},[28,121147,24839],{"class":2225},[28,121149,121134],{"class":127},[28,121151,121137],{"class":60},[28,121153,121154],{"class":127}," libcudnn_adv_infer.so.8.9.7",[28,121156,121157],{"class":127}," libcudnn_adv_infer.so.8\n",[28,121159,121160,121162,121164,121166,121169],{"class":30,"line":91},[28,121161,24839],{"class":2225},[28,121163,121134],{"class":127},[28,121165,121137],{"class":60},[28,121167,121168],{"class":127}," libcudnn_adv_train.so.8.9.7",[28,121170,121171],{"class":127}," libcudnn_adv_train.so.8\n",[28,121173,121174,121176,121178,121180,121183],{"class":30,"line":97},[28,121175,24839],{"class":2225},[28,121177,121134],{"class":127},[28,121179,121137],{"class":60},[28,121181,121182],{"class":127}," libcudnn_cnn_infer.so.8.9.7",[28,121184,121185],{"class":127}," libcudnn_cnn_infer.so.8\n",[28,121187,121188,121190,121192,121194,121197],{"class":30,"line":103},[28,121189,24839],{"class":2225},[28,121191,121134],{"class":127},[28,121193,121137],{"class":60},[28,121195,121196],{"class":127}," libcudnn.so.8.9.7",[28,121198,121199],{"class":127}," libcudnn.so.8\n",[28,121201,121202,121204,121206,121208,121211],{"class":30,"line":109},[28,121203,24839],{"class":2225},[28,121205,121134],{"class":127},[28,121207,121137],{"class":60},[28,121209,121210],{"class":127}," libcudnn_ops_infer.so.8.9.7",[28,121212,121213],{"class":127}," libcudnn_ops_infer.so.8\n",[28,121215,121216,121218,121220,121222,121225],{"class":30,"line":118},[28,121217,24839],{"class":2225},[28,121219,121134],{"class":127},[28,121221,121137],{"class":60},[28,121223,121224],{"class":127}," libcudnn_ops_train.so.8.9.7",[28,121226,121227],{"class":127}," libcudnn_ops_train.so.8\n",[28,121229,121230],{"class":30,"line":124},[28,121231,121232],{"class":87},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[28,121234,121235,121237],{"class":30,"line":131},[28,121236,24839],{"class":2225},[28,121238,121023],{"class":127},[28,121240,121241],{"class":30,"line":137},[28,121242,121243],{"class":87},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[28,121245,121246,121248,121251,121254,121256,121259],{"class":30,"line":143},[28,121247,27024],{"class":2225},[28,121249,121250],{"class":60}," -l",[28,121252,121253],{"class":127}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[28,121255,854],{"class":60},[28,121257,121258],{"class":127},".so",[28,121260,119461],{"class":60},[380,121262,121264],{"id":121263},"_355-常见问题","3.5.5 常见问题",[363,121266,121267],{},[366,121268,121269],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[18,121271,121273],{"className":118736,"code":121272,"language":118738,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[25,121274,121275],{"__ignoreMap":23},[28,121276,121277,121279,121281],{"class":30,"line":31},[28,121278,24839],{"class":2225},[28,121280,118796],{"class":127},[28,121282,121283],{"class":127}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121285,121286],{},"blacklist-nouveau.conf文件内容如下：",[18,121288,121290],{"className":118736,"code":121289,"language":118738,"meta":23,"style":23},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[25,121291,121292,121300,121307,121319,121329],{"__ignoreMap":23},[28,121293,121294,121297],{"class":30,"line":31},[28,121295,121296],{"class":2225},"blacklist",[28,121298,121299],{"class":127}," nouveau\n",[28,121301,121302,121304],{"class":30,"line":48},[28,121303,121296],{"class":2225},[28,121305,121306],{"class":127}," lbm-nouveau\n",[28,121308,121309,121311,121314,121317],{"class":30,"line":84},[28,121310,116143],{"class":2225},[28,121312,121313],{"class":127}," nouveau",[28,121315,121316],{"class":127}," modeset=",[28,121318,3347],{"class":60},[28,121320,121321,121324,121326],{"class":30,"line":91},[28,121322,121323],{"class":60},"alias",[28,121325,121313],{"class":127},[28,121327,121328],{"class":127}," off\n",[28,121330,121331,121333,121336],{"class":30,"line":97},[28,121332,121323],{"class":60},[28,121334,121335],{"class":127}," lbm-nouveau",[28,121337,121328],{"class":127},[14,121339,121340],{},"接着运行下方命令",[18,121342,121344],{"className":118736,"code":121343,"language":118738,"meta":23,"style":23},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[25,121345,121346,121356,121361],{"__ignoreMap":23},[28,121347,121348,121350,121353],{"class":30,"line":31},[28,121349,24839],{"class":2225},[28,121351,121352],{"class":127}," update-initramfs",[28,121354,121355],{"class":60}," -u\n",[28,121357,121358],{"class":30,"line":48},[28,121359,121360],{"class":2225},"或者\n",[28,121362,121363,121365,121368],{"class":30,"line":84},[28,121364,24839],{"class":2225},[28,121366,121367],{"class":127}," dracut",[28,121369,121370],{"class":60}," --force\n",[14,121372,121373],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[18,121375,121377],{"className":118736,"code":121376,"language":118738,"meta":23,"style":23},"lsmod | grep nouveau\n",[25,121378,121379],{"__ignoreMap":23},[28,121380,121381,121384,121386,121388],{"class":30,"line":31},[28,121382,121383],{"class":2225},"lsmod",[28,121385,25372],{"class":34},[28,121387,30499],{"class":2225},[28,121389,121299],{"class":127},[363,121391,121392],{"start":48},[366,121393,121394],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[18,121396,121398],{"className":118736,"code":121397,"language":118738,"meta":23,"style":23},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[25,121399,121400],{"__ignoreMap":23},[28,121401,121402,121404,121406],{"class":30,"line":31},[28,121403,24839],{"class":2225},[28,121405,118796],{"class":127},[28,121407,121408],{"class":127}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121410,121411],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[18,121413,121415],{"className":118736,"code":121414,"language":118738,"meta":23,"style":23},"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",[25,121416,121417,121425,121433,121441,121448,121456,121466,121474],{"__ignoreMap":23},[28,121418,121419,121422],{"class":30,"line":31},[28,121420,121421],{"class":2225},"Section",[28,121423,121424],{"class":127}," \"OutputClass\"\n",[28,121426,121427,121430],{"class":30,"line":48},[28,121428,121429],{"class":2225},"   Identifier",[28,121431,121432],{"class":127}," \"nvidia\"\n",[28,121434,121435,121438],{"class":30,"line":84},[28,121436,121437],{"class":2225},"   MatchDriver",[28,121439,121440],{"class":127}," \"nvidia-drm\"\n",[28,121442,121443,121446],{"class":30,"line":91},[28,121444,121445],{"class":2225},"   Driver",[28,121447,121432],{"class":127},[28,121449,121450,121453],{"class":30,"line":97},[28,121451,121452],{"class":2225},"   Option",[28,121454,121455],{"class":127}," \"AllowEmptyInitialConfiguration\"\n",[28,121457,121458,121460,121463],{"class":30,"line":103},[28,121459,121452],{"class":2225},[28,121461,121462],{"class":127}," \"PrimaryGPU\"",[28,121464,121465],{"class":127}," \"yes\"\n",[28,121467,121468,121471],{"class":30,"line":109},[28,121469,121470],{"class":2225},"   ModulePath",[28,121472,121473],{"class":127}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[28,121475,121476],{"class":30,"line":118},[28,121477,121478],{"class":2225},"EndSection\n",[363,121480,121481],{"start":84},[366,121482,121483],{},"安装N卡驱动提示错误",[18,121485,121487],{"className":121029,"code":121486,"language":121031,"meta":121032,"style":23},"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",[25,121488,121489],{"__ignoreMap":23},[28,121490,121491],{"class":30,"line":31},[28,121492,121486],{},[363,121494,121495],{},[366,121496,121497],{},"检查当前运行的内核版本：",[14,121499,121500],{},"运行以下命令以查看你当前正在使用的内核版本：",[18,121502,121504],{"className":117509,"code":121503,"language":117511,"meta":23,"style":23},"uname -r\n",[25,121505,121506],{"__ignoreMap":23},[28,121507,121508,121510],{"class":30,"line":31},[28,121509,70460],{"class":2225},[28,121511,121512],{"class":60}," -r\n",[363,121514,121515],{"start":48},[366,121516,121517],{},"安装内核开发文件：",[14,121519,121520,121521,121524],{},"确保你已经安装了与当前内核版本相匹配的 ",[25,121522,121523],{},"kernel-devel"," 包。运行以下命令来安装：",[18,121526,121528],{"className":117509,"code":121527,"language":117511,"meta":23,"style":23},"sudo dnf install kernel-devel-$(uname -r)\n",[25,121529,121530],{"__ignoreMap":23},[28,121531,121532,121534,121536,121538,121541,121543,121545,121547],{"class":30,"line":31},[28,121533,24839],{"class":2225},[28,121535,26578],{"class":127},[28,121537,24096],{"class":127},[28,121539,121540],{"class":127}," kernel-devel-",[28,121542,25362],{"class":38},[28,121544,70460],{"class":2225},[28,121546,119852],{"class":60},[28,121548,81],{"class":38},[14,121550,121551],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[363,121553,121554],{"start":84},[366,121555,121556],{},"安装内核源代码（如果需要）：",[14,121558,121559],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[18,121561,121563],{"className":117509,"code":121562,"language":117511,"meta":23,"style":23},"sudo dnf install kernel-headers kernel-source\n",[25,121564,121565],{"__ignoreMap":23},[28,121566,121567,121569,121571,121573,121576],{"class":30,"line":31},[28,121568,24839],{"class":2225},[28,121570,26578],{"class":127},[28,121572,24096],{"class":127},[28,121574,121575],{"class":127}," kernel-headers",[28,121577,121578],{"class":127}," kernel-source\n",[363,121580,121581],{"start":91},[366,121582,121583],{},"检查安装：",[14,121585,121586,121587,121590],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[25,121588,121589],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[18,121592,121594],{"className":117509,"code":121593,"language":117511,"meta":23,"style":23},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[25,121595,121596],{"__ignoreMap":23},[28,121597,121598,121600],{"class":30,"line":31},[28,121599,27024],{"class":2225},[28,121601,121602],{"class":127}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121604,121605,121606,121609],{},"如果仍然遇到问题，可以通过 ",[25,121607,121608],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[328,121611,121612],{},"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":23,"searchDepth":48,"depth":48,"links":121614},[121615,121619,121629,121633,121634],{"id":118712,"depth":48,"text":118713,"children":121616},[121617,121618],{"id":118722,"depth":84,"text":118723},{"id":118732,"depth":84,"text":118733},{"id":118932,"depth":48,"text":118933,"children":121620},[121621,121622,121623,121624,121625,121626,121627,121628],{"id":118936,"depth":84,"text":118937},{"id":119006,"depth":84,"text":119007},{"id":119095,"depth":84,"text":119096},{"id":119340,"depth":84,"text":119341},{"id":119410,"depth":84,"text":119411},{"id":119477,"depth":84,"text":119478},{"id":119512,"depth":84,"text":119513},{"id":119567,"depth":84,"text":119568},{"id":119618,"depth":48,"text":119619,"children":121630},[121631,121632],{"id":119622,"depth":84,"text":119623},{"id":119702,"depth":84,"text":119703},{"id":119888,"depth":48,"text":119889},{"id":120061,"depth":48,"text":120062,"children":121635},[121636,121637,121638,121639,121640],{"id":120065,"depth":84,"text":120066},{"id":120106,"depth":84,"text":120107},{"id":120393,"depth":84,"text":120394},{"id":120767,"depth":84,"text":120768},{"id":121263,"depth":84,"text":121264},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118704,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121647,"title":121648,"body":121649,"description":333,"extension":334,"meta":121989,"navigation":336,"path":121990,"seo":121991,"stem":121992,"__hash__":121993},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121650,"toc":121987},[121651,121654,121659,121662,121908,121913,121916,121952,121955,121984],[10,121652,121648],{"id":121653},"_4-命令教程长期积累",[363,121655,121656],{},[366,121657,121658],{},"大多数命令",[14,121660,121661],{},"常用 Linux 命令速查：",[18,121663,121665],{"className":117509,"code":121664,"language":117511,"meta":23,"style":23},"# 文件与目录\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",[25,121666,121667,121672,121679,121686,121694,121701,121708,121716,121724,121731,121738,121746,121750,121755,121762,121770,121777,121781,121786,121793,121801,121809,121817,121825,121829,121834,121842,121849,121856,121864,121872,121876,121881,121890,121899],{"__ignoreMap":23},[28,121668,121669],{"class":30,"line":31},[28,121670,121671],{"class":87},"# 文件与目录\n",[28,121673,121674,121676],{"class":30,"line":48},[28,121675,27024],{"class":2225},[28,121677,121678],{"class":87},"        # 列出目录内容\n",[28,121680,121681,121683],{"class":30,"line":84},[28,121682,101489],{"class":60},[28,121684,121685],{"class":87},"        # 切换目录\n",[28,121687,121688,121691],{"class":30,"line":91},[28,121689,121690],{"class":60},"pwd",[28,121692,121693],{"class":87},"       # 显示当前路径\n",[28,121695,121696,121698],{"class":30,"line":97},[28,121697,101479],{"class":2225},[28,121699,121700],{"class":87},"     # 创建目录\n",[28,121702,121703,121705],{"class":30,"line":103},[28,121704,25585],{"class":2225},[28,121706,121707],{"class":87},"        # 删除文件或目录\n",[28,121709,121710,121713],{"class":30,"line":109},[28,121711,121712],{"class":2225},"cp",[28,121714,121715],{"class":87},"        # 复制文件或目录\n",[28,121717,121718,121721],{"class":30,"line":118},[28,121719,121720],{"class":2225},"mv",[28,121722,121723],{"class":87},"        # 移动\u002F重命名文件或目录\n",[28,121725,121726,121728],{"class":30,"line":124},[28,121727,101496],{"class":2225},[28,121729,121730],{"class":87},"     # 创建空文件\n",[28,121732,121733,121735],{"class":30,"line":131},[28,121734,120978],{"class":2225},[28,121736,121737],{"class":87},"       # 查看文件内容\n",[28,121739,121740,121743],{"class":30,"line":137},[28,121741,121742],{"class":2225},"head\u002Ftail",[28,121744,121745],{"class":87}," # 查看文件头部\u002F尾部\n",[28,121747,121748],{"class":30,"line":143},[28,121749,2662],{"emptyLinePlaceholder":336},[28,121751,121752],{"class":30,"line":149},[28,121753,121754],{"class":87},"# 权限管理\n",[28,121756,121757,121759],{"class":30,"line":1890},[28,121758,24874],{"class":2225},[28,121760,121761],{"class":87},"     # 修改文件权限\n",[28,121763,121764,121767],{"class":30,"line":1904},[28,121765,121766],{"class":2225},"chown",[28,121768,121769],{"class":87},"     # 修改文件所有者\n",[28,121771,121772,121774],{"class":30,"line":1909},[28,121773,24839],{"class":2225},[28,121775,121776],{"class":87},"      # 以管理员身份执行\n",[28,121778,121779],{"class":30,"line":1915},[28,121780,2662],{"emptyLinePlaceholder":336},[28,121782,121783],{"class":30,"line":1936},[28,121784,121785],{"class":87},"# 系统信息\n",[28,121787,121788,121790],{"class":30,"line":1941},[28,121789,70460],{"class":2225},[28,121791,121792],{"class":87},"     # 系统信息\n",[28,121794,121795,121798],{"class":30,"line":1955},[28,121796,121797],{"class":2225},"df",[28,121799,121800],{"class":87},"        # 磁盘使用情况\n",[28,121802,121803,121806],{"class":30,"line":1960},[28,121804,121805],{"class":2225},"free",[28,121807,121808],{"class":87},"      # 内存使用情况\n",[28,121810,121811,121814],{"class":30,"line":1989},[28,121812,121813],{"class":2225},"top\u002Fhtop",[28,121815,121816],{"class":87},"  # 进程监控\n",[28,121818,121819,121822],{"class":30,"line":1994},[28,121820,121821],{"class":2225},"ps",[28,121823,121824],{"class":87},"        # 查看进程\n",[28,121826,121827],{"class":30,"line":2011},[28,121828,2662],{"emptyLinePlaceholder":336},[28,121830,121831],{"class":30,"line":2016},[28,121832,121833],{"class":87},"# 网络\n",[28,121835,121836,121839],{"class":30,"line":2021},[28,121837,121838],{"class":2225},"ping",[28,121840,121841],{"class":87},"      # 测试网络连通性\n",[28,121843,121844,121846],{"class":30,"line":2026},[28,121845,27112],{"class":2225},[28,121847,121848],{"class":87},"      # 发送 HTTP 请求\n",[28,121850,121851,121853],{"class":30,"line":2040},[28,121852,120502],{"class":2225},[28,121854,121855],{"class":87},"      # 下载文件\n",[28,121857,121858,121861],{"class":30,"line":2045},[28,121859,121860],{"class":2225},"ssh",[28,121862,121863],{"class":87},"       # 远程登录\n",[28,121865,121866,121869],{"class":30,"line":2839},[28,121867,121868],{"class":2225},"scp",[28,121870,121871],{"class":87},"       # 远程文件传输\n",[28,121873,121874],{"class":30,"line":2853},[28,121875,2662],{"emptyLinePlaceholder":336},[28,121877,121878],{"class":30,"line":2861},[28,121879,121880],{"class":87},"# 包管理（Debian\u002FUbuntu）\n",[28,121882,121883,121885,121887],{"class":30,"line":2866},[28,121884,117581],{"class":2225},[28,121886,117560],{"class":127},[28,121888,121889],{"class":87},"   # 更新软件源\n",[28,121891,121892,121894,121896],{"class":30,"line":2872},[28,121893,117581],{"class":2225},[28,121895,24096],{"class":127},[28,121897,121898],{"class":87},"  # 安装软件包\n",[28,121900,121901,121903,121905],{"class":30,"line":2878},[28,121902,117581],{"class":2225},[28,121904,26342],{"class":127},[28,121906,121907],{"class":87},"   # 卸载软件包\n",[363,121909,121910],{"start":48},[366,121911,121912],{},"KDE Dolphin 以root打开",[14,121914,121915],{},"kde5",[18,121917,121919],{"className":117509,"code":121918,"language":117511,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[25,121920,121921],{"__ignoreMap":23},[28,121922,121923,121926,121929,121932,121934,121936,121939,121942,121944,121947,121949],{"class":30,"line":31},[28,121924,121925],{"class":2225},"pkexec",[28,121927,121928],{"class":127}," env",[28,121930,121931],{"class":127}," DISPLAY=",[28,121933,28406],{"class":38},[28,121935,28464],{"class":127},[28,121937,121938],{"class":38},"$XAUTHORITY ",[28,121940,121941],{"class":127},"KDE_SESSION_VERSION=",[28,121943,721],{"class":60},[28,121945,121946],{"class":127}," KDE_FULL_SESSION=",[28,121948,1627],{"class":60},[28,121950,121951],{"class":127}," dolphin\n",[14,121953,121954],{},"kde6",[18,121956,121958],{"className":117509,"code":121957,"language":117511,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[25,121959,121960],{"__ignoreMap":23},[28,121961,121962,121964,121966,121968,121970,121972,121974,121976,121978,121980,121982],{"class":30,"line":31},[28,121963,121925],{"class":2225},[28,121965,121928],{"class":127},[28,121967,121931],{"class":127},[28,121969,28406],{"class":38},[28,121971,28464],{"class":127},[28,121973,121938],{"class":38},[28,121975,121941],{"class":127},[28,121977,206],{"class":60},[28,121979,121946],{"class":127},[28,121981,1627],{"class":60},[28,121983,121951],{"class":127},[328,121985,121986],{},"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":23,"searchDepth":48,"depth":48,"links":121988},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121648,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121995,"title":121996,"body":121997,"description":333,"extension":334,"meta":122011,"navigation":336,"path":122012,"seo":122013,"stem":122014,"__hash__":122015},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121998,"toc":122009},[121999,122002],[10,122000,121996],{"id":122001},"_5-各种环境配置",[14,122003,122004],{},[51,122005,122008],{"href":122006,"rel":122007},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24127],"电控组环境搭建大全",{"title":23,"searchDepth":48,"depth":48,"links":122010},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121996,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122017,"title":122018,"body":122019,"description":333,"extension":334,"meta":122367,"navigation":336,"path":122368,"seo":122369,"stem":122370,"__hash__":122371},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122020,"toc":122359},[122021,122024,122028,122032,122036,122041,122048,122052,122345,122349,122356],[10,122022,122018],{"id":122023},"_6-拓展功能",[351,122025,122027],{"id":122026},"_61-wine","6.1 Wine",[351,122029,122031],{"id":122030},"_62-android","6.2 Android",[380,122033,122035],{"id":122034},"_621-i卡a卡","6.2.1 I卡、A卡",[363,122037,122038],{},[366,122039,122040],{},"Wayland-Waydroid(体验超级好)",[14,122042,122043,122044],{},"Waydroid 官网与安装指南：",[51,122045,122046],{"href":122046,"rel":122047},"https:\u002F\u002Fwaydro.id\u002F",[24127],[380,122049,122051],{"id":122050},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[363,122053,122054],{},[366,122055,122056,122057,122059,122060,122064,122066,122069,122074,122271],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53972,122058],{},"BlissOS 官网下载：",[51,122061,122062],{"href":122062,"rel":122063},"https:\u002F\u002Fblissos.org\u002F",[24127],[53972,122065],{},[1727,122067],{"alt":23,"src":122068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[363,122070,122071],{"start":84},[366,122072,122073],{},"比较推荐的配置",[18,122075,122077],{"className":117509,"code":122076,"language":117511,"meta":23,"style":23},"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",[25,122078,122079,122086,122096,122106,122116,122128,122138,122145,122155,122164,122173,122183,122193,122202,122212,122222,122234,122244,122253,122263],{"__ignoreMap":23},[28,122080,122081,122084],{"class":30,"line":31},[28,122082,122083],{"class":2225},"qemu-system-x86_64",[28,122085,24941],{"class":60},[28,122087,122088,122091,122094],{"class":30,"line":48},[28,122089,122090],{"class":60},"        -M",[28,122092,122093],{"class":127}," q35,vmport=off",[28,122095,24941],{"class":60},[28,122097,122098,122101,122104],{"class":30,"line":84},[28,122099,122100],{"class":60},"        -accel",[28,122102,122103],{"class":127}," kvm",[28,122105,24941],{"class":60},[28,122107,122108,122111,122114],{"class":30,"line":91},[28,122109,122110],{"class":60},"        -cpu",[28,122112,122113],{"class":127}," qemu64,+sse3,+sse4.2",[28,122115,24941],{"class":60},[28,122117,122118,122121,122124,122126],{"class":30,"line":97},[28,122119,122120],{"class":60},"        -smp",[28,122122,122123],{"class":127}," 8,cores=",[28,122125,73],{"class":60},[28,122127,24941],{"class":60},[28,122129,122130,122133,122136],{"class":30,"line":103},[28,122131,122132],{"class":60},"        -m",[28,122134,122135],{"class":127}," 6G",[28,122137,24941],{"class":60},[28,122139,122140,122143],{"class":30,"line":109},[28,122141,122142],{"class":60},"        -usb",[28,122144,24941],{"class":60},[28,122146,122147,122150,122153],{"class":30,"line":118},[28,122148,122149],{"class":60},"        -device",[28,122151,122152],{"class":127}," virtio-tablet",[28,122154,24941],{"class":60},[28,122156,122157,122159,122162],{"class":30,"line":124},[28,122158,122149],{"class":60},[28,122160,122161],{"class":127}," virtio-keyboard",[28,122163,24941],{"class":60},[28,122165,122166,122168,122171],{"class":30,"line":131},[28,122167,122149],{"class":60},[28,122169,122170],{"class":127}," usb-tablet",[28,122172,24941],{"class":60},[28,122174,122175,122178,122181],{"class":30,"line":137},[28,122176,122177],{"class":60},"        -bios",[28,122179,122180],{"class":127}," OVMF-pure-efi64.fd",[28,122182,24941],{"class":60},[28,122184,122185,122188,122191],{"class":30,"line":143},[28,122186,122187],{"class":60},"        -net",[28,122189,122190],{"class":127}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[28,122192,24941],{"class":60},[28,122194,122195,122197,122200],{"class":30,"line":149},[28,122196,122187],{"class":60},[28,122198,122199],{"class":127}," nic,model=virtio",[28,122201,24941],{"class":60},[28,122203,122204,122207,122210],{"class":30,"line":1890},[28,122205,122206],{"class":60},"        -audio",[28,122208,122209],{"class":127}," sdl,model=hda",[28,122211,24941],{"class":60},[28,122213,122214,122217,122220],{"class":30,"line":1904},[28,122215,122216],{"class":60},"        -display",[28,122218,122219],{"class":127}," sdl,gl=on,show-cursor=on",[28,122221,24941],{"class":60},[28,122223,122224,122226,122229,122232],{"class":30,"line":1909},[28,122225,122149],{"class":60},[28,122227,122228],{"class":127}," virtio-vga-gl,xres=1920,yres=",[28,122230,122231],{"class":60},"1080",[28,122233,24941],{"class":60},[28,122235,122236,122239,122242],{"class":30,"line":1915},[28,122237,122238],{"class":60},"        -drive",[28,122240,122241],{"class":127}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[28,122243,24941],{"class":60},[28,122245,122246,122248,122251],{"class":30,"line":1936},[28,122247,122238],{"class":60},[28,122249,122250],{"class":127}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[28,122252,24941],{"class":60},[28,122254,122255,122258,122261],{"class":30,"line":1941},[28,122256,122257],{"class":60},"        -monitor",[28,122259,122260],{"class":127}," stdio",[28,122262,24941],{"class":60},[28,122264,122265,122268],{"class":30,"line":1955},[28,122266,122267],{"class":60},"        -serial",[28,122269,122270],{"class":127}," none\n",[363,122272,122273],{"start":97},[366,122274,122275,122276],{},"常用操作：",[363,122277,122278,122281,122337],{},[366,122279,122280],{},"全屏：Ctrl+Alt+F",[366,122282,122283,122284,122289],{},"adb调试",[363,122285,122286],{},[366,122287,122288],{},"使Linux与Android用ADB连接。",[18,122290,122292],{"className":117509,"code":122291,"language":117511,"meta":23,"style":23},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[25,122293,122294,122299,122310,122315,122327,122332],{"__ignoreMap":23},[28,122295,122296],{"class":30,"line":31},[28,122297,122298],{"class":87},"# 连接安卓\n",[28,122300,122301,122304,122307],{"class":30,"line":48},[28,122302,122303],{"class":2225},"adb",[28,122305,122306],{"class":127}," connect",[28,122308,122309],{"class":60}," 127.0.0.1\n",[28,122311,122312],{"class":30,"line":84},[28,122313,122314],{"class":87},"# 打开shell\n",[28,122316,122317,122319,122321,122324],{"class":30,"line":91},[28,122318,122303],{"class":2225},[28,122320,27146],{"class":60},[28,122322,122323],{"class":127}," 127.0.0.1:5555",[28,122325,122326],{"class":127}," shell\n",[28,122328,122329],{"class":30,"line":97},[28,122330,122331],{"class":87},"# 使用root权限\n",[28,122333,122334],{"class":30,"line":103},[28,122335,122336],{"class":2225},"su\n",[366,122338,122339,122340],{},"中文输入法",[363,122341,122342],{},[366,122343,122344],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[351,122346,122348],{"id":122347},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122350,122351,122352],{},"rEFInd 官网与文档：",[51,122353,122354],{"href":122354,"rel":122355},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24127],[328,122357,122358],{},"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":23,"searchDepth":48,"depth":48,"links":122360},[122361,122362,122366],{"id":122026,"depth":48,"text":122027},{"id":122030,"depth":48,"text":122031,"children":122363},[122364,122365],{"id":122034,"depth":84,"text":122035},{"id":122050,"depth":84,"text":122051},{"id":122347,"depth":48,"text":122348},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122018,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122373,"title":122374,"body":122375,"description":333,"extension":334,"meta":125674,"navigation":336,"path":125675,"seo":125676,"stem":125677,"__hash__":125678},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122376,"toc":125648},[122377,122380,122384,122387,122394,122644,122647,122719,122722,122726,122730,122735,122738,122741,122744,122749,122752,122755,122758,122763,122766,122771,122774,122777,122782,122785,122790,122793,122797,122801,122804,122809,122812,122826,122829,122832,122841,122844,122853,122856,122859,122868,122871,122880,122883,122886,122895,122898,122901,122916,122919,122922,122931,122936,122939,122942,122951,122954,122963,122966,122975,122978,122987,122992,122995,123003,123008,123011,123020,123023,123031,123036,123039,123048,123051,123054,123058,123061,123066,123069,123074,123088,123093,123098,123109,123114,123120,123125,123140,123145,123148,123153,123158,123163,123171,123176,123183,123188,123199,123204,123207,123211,123214,123217,123222,123225,123244,123249,123252,123261,123266,123269,123291,123294,123324,123327,123332,123335,123349,123354,123373,123376,123379,123384,123396,123401,123406,123409,123414,123417,123432,123435,123440,123445,123449,123454,123494,123497,123501,123507,123513,123518,123521,123528,123533,123540,123543,123546,123553,123567,123570,123630,123633,123647,123659,123662,123665,123668,123732,123735,123738,123741,123761,123764,123769,123776,123780,123783,123787,123792,123797,123801,123804,123807,123849,123854,123857,123879,123894,123896,123901,123913,123973,123975,123977,124031,124033,124035,124041,124046,124049,124054,124058,124061,124123,124128,124131,124133,124137,124149,124231,124233,124235,124289,124295,124297,124301,124306,124308,124313,124317,124337,124372,124376,124379,124382,124385,124392,124395,124407,124410,124425,124428,124447,124495,124498,124515,124518,124532,124537,124540,124549,124564,124576,124614,124619,124628,124633,124638,124664,124673,124677,124681,124686,124689,124693,124697,124702,124705,124710,124713,124718,124721,124726,124729,124733,124738,124741,124746,124749,124753,124758,124761,124766,124769,124774,124777,124781,124786,124789,124794,124797,124802,124805,124809,124814,124817,124822,124825,124830,124833,124838,124841,124846,124849,124854,124857,124861,124866,124869,124874,124881,124885,124890,124893,124898,124901,124905,124910,124913,124916,124919,124922,124925,124929,124932,124942,124947,124952,124974,124979,124984,124991,124995,125000,125003,125006,125011,125014,125017,125020,125023,125026,125029,125032,125035,125038,125041,125044,125047,125052,125057,125062,125067,125072,125077,125082,125085,125089,125092,125096,125101,125106,125111,125116,125120,125126,125134,125139,125142,125147,125162,125165,125170,125204,125219,125222,125277,125303,125315,125318,125327,125330,125345,125350,125353,125359,125364,125367,125372,125375,125380,125385,125392,125395,125410,125413,125448,125453,125461,125499,125502,125505,125510,125513,125518,125529,125563,125568,125571,125580,125585,125591,125594,125599,125608,125613,125616,125619,125624,125632,125635,125640,125645],[10,122378,122374],{"id":122379},"_7-其他操作",[351,122381,122383],{"id":122382},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122385,122386],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122388,122389,122390,122393],{},"进入工控机的硬盘目录，进入",[25,122391,122392],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[18,122395,122399],{"className":122396,"code":122397,"language":122398,"meta":23,"style":23},"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",[25,122400,122401,122409,122420,122427,122434,122446,122453,122465,122476,122487,122494,122501,122508,122520,122532,122539,122551,122563,122570,122582,122594,122606,122617,122624,122635],{"__ignoreMap":23},[28,122402,122403,122406],{"class":30,"line":31},[28,122404,122405],{"class":51556},"network",[28,122407,122408],{"class":38},": \n",[28,122410,122411,122414,122416,122418],{"class":30,"line":48},[28,122412,122413],{"class":51556},"  version",[28,122415,51693],{"class":38},[28,122417,211],{"class":60},[28,122419,2936],{"class":38},[28,122421,122422,122425],{"class":30,"line":84},[28,122423,122424],{"class":51556},"  wifis",[28,122426,122408],{"class":38},[28,122428,122429,122432],{"class":30,"line":91},[28,122430,122431],{"class":51556},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[28,122433,122408],{"class":38},[28,122435,122436,122439,122441,122444],{"class":30,"line":97},[28,122437,122438],{"class":51556},"      renderer",[28,122440,51693],{"class":38},[28,122442,122443],{"class":127},"NetworkManager",[28,122445,2936],{"class":38},[28,122447,122448,122451],{"class":30,"line":103},[28,122449,122450],{"class":51556},"      match",[28,122452,122408],{"class":38},[28,122454,122455,122458,122460,122463],{"class":30,"line":109},[28,122456,122457],{"class":51556},"        name",[28,122459,51693],{"class":38},[28,122461,122462],{"class":127},"\"wlan0\"",[28,122464,2936],{"class":38},[28,122466,122467,122470,122472,122474],{"class":30,"line":118},[28,122468,122469],{"class":51556},"      dhcp4",[28,122471,51693],{"class":38},[28,122473,1627],{"class":60},[28,122475,2936],{"class":38},[28,122477,122478,122481,122483,122485],{"class":30,"line":124},[28,122479,122480],{"class":51556},"      dhcp6",[28,122482,51693],{"class":38},[28,122484,1627],{"class":60},[28,122486,2936],{"class":38},[28,122488,122489,122492],{"class":30,"line":131},[28,122490,122491],{"class":51556},"      access-points",[28,122493,122408],{"class":38},[28,122495,122496,122499],{"class":30,"line":137},[28,122497,122498],{"class":127},"        \"EMIS_Vinci_Robocon_5G\"",[28,122500,122408],{"class":38},[28,122502,122503,122506],{"class":30,"line":143},[28,122504,122505],{"class":51556},"          auth",[28,122507,122408],{"class":38},[28,122509,122510,122513,122515,122518],{"class":30,"line":149},[28,122511,122512],{"class":51556},"            key-management",[28,122514,51693],{"class":38},[28,122516,122517],{"class":127},"\"psk\"",[28,122519,2936],{"class":38},[28,122521,122522,122525,122527,122530],{"class":30,"line":1890},[28,122523,122524],{"class":51556},"            password",[28,122526,51693],{"class":38},[28,122528,122529],{"class":127},"\"vinci666\"",[28,122531,2936],{"class":38},[28,122533,122534,122537],{"class":30,"line":1904},[28,122535,122536],{"class":51556},"          networkmanager",[28,122538,122408],{"class":38},[28,122540,122541,122544,122546,122549],{"class":30,"line":1909},[28,122542,122543],{"class":51556},"            uuid",[28,122545,51693],{"class":38},[28,122547,122548],{"class":127},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[28,122550,2936],{"class":38},[28,122552,122553,122556,122558,122561],{"class":30,"line":1915},[28,122554,122555],{"class":51556},"            name",[28,122557,51693],{"class":38},[28,122559,122560],{"class":127},"\"EMIS_Vinci_Robocon_5G\"",[28,122562,2936],{"class":38},[28,122564,122565,122568],{"class":30,"line":1936},[28,122566,122567],{"class":51556},"            passthrough",[28,122569,122408],{"class":38},[28,122571,122572,122575,122577,122580],{"class":30,"line":1941},[28,122573,122574],{"class":51556},"              wifi-security.auth-alg",[28,122576,51693],{"class":38},[28,122578,122579],{"class":127},"\"open\"",[28,122581,2936],{"class":38},[28,122583,122584,122587,122589,122592],{"class":30,"line":1955},[28,122585,122586],{"class":51556},"              ipv6.addr-gen-mode",[28,122588,51693],{"class":38},[28,122590,122591],{"class":127},"\"default\"",[28,122593,2936],{"class":38},[28,122595,122596,122599,122601,122604],{"class":30,"line":1960},[28,122597,122598],{"class":51556},"              ipv6.ip6-privacy",[28,122600,51693],{"class":38},[28,122602,122603],{"class":127},"\"-1\"",[28,122605,2936],{"class":38},[28,122607,122608,122611,122613,122615],{"class":30,"line":1989},[28,122609,122610],{"class":51556},"              proxy._",[28,122612,51693],{"class":38},[28,122614,7914],{"class":127},[28,122616,2936],{"class":38},[28,122618,122619,122622],{"class":30,"line":1994},[28,122620,122621],{"class":51556},"      networkmanager",[28,122623,122408],{"class":38},[28,122625,122626,122629,122631,122633],{"class":30,"line":2011},[28,122627,122628],{"class":51556},"        uuid",[28,122630,51693],{"class":38},[28,122632,122548],{"class":127},[28,122634,2936],{"class":38},[28,122636,122637,122639,122641],{"class":30,"line":2016},[28,122638,122457],{"class":51556},[28,122640,51693],{"class":38},[28,122642,122643],{"class":127},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122645,122646],{},"将其改为新wifi的名和密码：",[18,122648,122650],{"className":122396,"code":122649,"language":122398,"meta":23,"style":23},"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",[25,122651,122652,122658,122667,122673,122680,122689,122697,122703,122709],{"__ignoreMap":23},[28,122653,122654,122656],{"class":30,"line":31},[28,122655,122405],{"class":51556},[28,122657,4001],{"class":38},[28,122659,122660,122662,122664],{"class":30,"line":48},[28,122661,122413],{"class":51556},[28,122663,51693],{"class":38},[28,122665,122666],{"class":60},"2\n",[28,122668,122669,122671],{"class":30,"line":84},[28,122670,122424],{"class":51556},[28,122672,4001],{"class":38},[28,122674,122675,122678],{"class":30,"line":91},[28,122676,122677],{"class":51556},"    wlan0",[28,122679,4001],{"class":38},[28,122681,122682,122684,122686],{"class":30,"line":97},[28,122683,122469],{"class":51556},[28,122685,51693],{"class":38},[28,122687,122688],{"class":60},"true\n",[28,122690,122691,122693,122695],{"class":30,"line":103},[28,122692,122480],{"class":51556},[28,122694,51693],{"class":38},[28,122696,122688],{"class":60},[28,122698,122699,122701],{"class":30,"line":109},[28,122700,122491],{"class":51556},[28,122702,4001],{"class":38},[28,122704,122705,122707],{"class":30,"line":118},[28,122706,122498],{"class":127},[28,122708,4001],{"class":38},[28,122710,122711,122714,122716],{"class":30,"line":124},[28,122712,122713],{"class":51556},"          password",[28,122715,51693],{"class":38},[28,122717,122718],{"class":127},"\"vinci666\"\n",[14,122720,122721],{},"工控机开机即可连上网。",[351,122723,122725],{"id":122724},"_72-ssh远程开发","7.2 SSH远程开发",[380,122727,122729],{"id":122728},"_721-环境准备","7.2.1 环境准备",[14,122731,122732],{},[555,122733,122734],{},"1.硬件准备",[14,122736,122737],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122739,122740],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122742,122743],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122745,122746],{},[555,122747,122748],{},"2.设置固定IP",[14,122750,122751],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122753,122754],{},"1.进入设置界面",[14,122756,122757],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122759,122760],{},[1727,122761],{"alt":23,"src":122762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122764,122765],{},"2.配置所连接的网络",[14,122767,122768],{},[1727,122769],{"alt":23,"src":122770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122772,122773],{},"3.设置固定IP",[14,122775,122776],{},"查看当前IP地址。",[14,122778,122779],{},[1727,122780],{"alt":23,"src":122781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122783,122784],{},"设置固定IP。",[14,122786,122787],{},[1727,122788],{"alt":23,"src":122789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122791,122792],{},"至此，IP配置完毕。",[380,122794,122796],{"id":122795},"_722-环境搭建","7.2.2 环境搭建",[14,122798,122799],{},[555,122800,26016],{},[14,122802,122803],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122805,122806],{},[555,122807,122808],{},"实现",[14,122810,122811],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[363,122813,122814,122817,122820,122823],{},[366,122815,122816],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[366,122818,122819],{},"远程主机启动SSH服务；",[366,122821,122822],{},"本地主机登陆远程主机；",[366,122824,122825],{},"实现数据传输。",[14,122827,122828],{},"1.安装SSH客户端与服务端",[14,122830,122831],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[18,122833,122835],{"className":121029,"code":122834,"language":121031,"meta":121032,"style":23}," sudo apt install openssh-server\n",[25,122836,122837],{"__ignoreMap":23},[28,122838,122839],{"class":30,"line":31},[28,122840,122834],{},[14,122842,122843],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[18,122845,122847],{"className":121029,"code":122846,"language":121031,"meta":121032,"style":23},"sudo apt install openssh-client\n",[25,122848,122849],{"__ignoreMap":23},[28,122850,122851],{"class":30,"line":31},[28,122852,122846],{},[14,122854,122855],{},"2.远程主机启动SSH服务",[14,122857,122858],{},"远程主机启动 ssh 服务命令如下：",[18,122860,122862],{"className":121029,"code":122861,"language":121031,"meta":121032,"style":23},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[25,122863,122864],{"__ignoreMap":23},[28,122865,122866],{"class":30,"line":31},[28,122867,122861],{},[14,122869,122870],{},"启动后可使用如下命令查看服务是否正常运行：",[18,122872,122874],{"className":121029,"code":122873,"language":121031,"meta":121032,"style":23},"ps -e | grep ssh\n",[25,122875,122876],{"__ignoreMap":23},[28,122877,122878],{"class":30,"line":31},[28,122879,122873],{},[14,122881,122882],{},"如果启动成功，会包含 sshd 程序。",[14,122884,122885],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[18,122887,122889],{"className":121029,"code":122888,"language":121031,"meta":121032,"style":23},"sudo systemctl enable ssh\n",[25,122890,122891],{"__ignoreMap":23},[28,122892,122893],{"class":30,"line":31},[28,122894,122888],{},[14,122896,122897],{},"3.本地远程登录",[14,122899,122900],{},"登录远程主机可以调用如下命令:",[18,122902,122904],{"className":117509,"code":122903,"language":117511,"meta":23,"style":23},"ssh -X 用户名@ip地址\n",[25,122905,122906],{"__ignoreMap":23},[28,122907,122908,122910,122913],{"class":30,"line":31},[28,122909,121860],{"class":2225},[28,122911,122912],{"class":60}," -X",[28,122914,122915],{"class":127}," 用户名@ip地址\n",[14,122917,122918],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122920,122921],{},"如果退出，可以调用exit命令：",[18,122923,122925],{"className":121029,"code":122924,"language":121031,"meta":121032,"style":23},"exit\n",[25,122926,122927],{"__ignoreMap":23},[28,122928,122929],{"class":30,"line":31},[28,122930,122924],{},[14,122932,122933],{},[555,122934,122935],{},"4.实现数据传输",[14,122937,122938],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122940,122941],{},"上传文件指令格式如下：",[18,122943,122945],{"className":121029,"code":122944,"language":121031,"meta":121032,"style":23},"scp 本地文件路径 账号@ip:路径\n",[25,122946,122947],{"__ignoreMap":23},[28,122948,122949],{"class":30,"line":31},[28,122950,122944],{},[14,122952,122953],{},"上传文件夹指令格式如下：",[18,122955,122957],{"className":121029,"code":122956,"language":121031,"meta":121032,"style":23},"scp -r 本地文件夹路径 账号@ip:路径\n",[25,122958,122959],{"__ignoreMap":23},[28,122960,122961],{"class":30,"line":31},[28,122962,122956],{},[14,122964,122965],{},"下载文件指令格式如下：",[18,122967,122969],{"className":121029,"code":122968,"language":121031,"meta":121032,"style":23},"scp 账号@ip:路径 本地文件夹路径\n",[25,122970,122971],{"__ignoreMap":23},[28,122972,122973],{"class":30,"line":31},[28,122974,122968],{},[14,122976,122977],{},"下载文件夹指令格式如下：",[18,122979,122981],{"className":121029,"code":122980,"language":121031,"meta":121032,"style":23},"scp -r 账号@ip:路径 本地文件夹路径\n",[25,122982,122983],{"__ignoreMap":23},[28,122984,122985],{"class":30,"line":31},[28,122986,122980],{},[14,122988,122989],{},[555,122990,122991],{},"优化",[14,122993,122994],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[363,122996,122997,123000],{},[366,122998,122999],{},"本地生成密钥对；",[366,123001,123002],{},"将公钥上传至远程主机。",[14,123004,123005],{},[555,123006,123007],{},"1.生成密钥对",[14,123009,123010],{},"本地客户端生成公私钥：（一路回车默认即可）",[18,123012,123014],{"className":121029,"code":123013,"language":121031,"meta":121032,"style":23},"ssh-keygen\n",[25,123015,123016],{"__ignoreMap":23},[28,123017,123018],{"class":30,"line":31},[28,123019,123013],{},[14,123021,123022],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[363,123024,123025,123028],{},[366,123026,123027],{},"id_rsa （私钥）；",[366,123029,123030],{},"id_rsa.pub (公钥)。",[14,123032,123033],{},[555,123034,123035],{},"2.公钥上传",[14,123037,123038],{},"上传指令如下：",[18,123040,123042],{"className":121029,"code":123041,"language":121031,"meta":121032,"style":23},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[25,123043,123044],{"__ignoreMap":23},[28,123045,123046],{"class":30,"line":31},[28,123047,123041],{},[14,123049,123050],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123052,123053],{},"以后再远程登录就无需录入密码了。",[380,123055,123057],{"id":123056},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123059,123060],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123062,123063],{},[555,123064,123065],{},"1.准备工作",[14,123067,123068],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123070,123071],{},[555,123072,123073],{},"2.为VScode安装远程开发插件",[14,123075,123076,123077,123080,123081,123084,123085,28648],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[25,123078,123079],{},"扩展：商店","的搜索栏输入",[25,123082,123083],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[25,123086,123087],{},"安装",[14,123089,123090],{},[1727,123091],{"alt":23,"src":123092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123094,123095],{},[555,123096,123097],{},"3.配置远程连接",[14,123099,123100,123101,123104,123105,123108],{},"步骤1：使用快捷键",[25,123102,123103],{},"ctrl + shift + p","打开命令输入窗口，并输入",[25,123106,123107],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123110,123111],{},[1727,123112],{"alt":23,"src":123113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123115,123116,123117,28648],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[25,123118,123119],{},"Add New SSH Host",[14,123121,123122],{},[1727,123123],{"alt":23,"src":123124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123126,123127,123128,123131,123132,123135,123136,123139],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[25,123129,123130],{},"ssh +X ubuntu@192.168.43.164","，其中，",[25,123133,123134],{},"ubuntu","需要替换为你的登录用户名，",[25,123137,123138],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123141,123142],{},[1727,123143],{"alt":23,"src":123144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123146,123147],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123149,123150],{},[1727,123151],{"alt":23,"src":123152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123154,123155],{},[1727,123156],{"alt":23,"src":123157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123159,123160],{},[555,123161,123162],{},"4.使用",[14,123164,123165,123166,123104,123168,123170],{},"步骤1：继续使用快捷键",[25,123167,123103],{},[25,123169,123107],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123172,123173],{},[1727,123174],{"alt":23,"src":123175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123177,123178,123179,123182],{},"或者，也可以点击侧边栏的",[25,123180,123181],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123184,123185],{},[1727,123186],{"alt":23,"src":123187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123189,123190,123191,123194,123195,123198],{},"步骤2：选择菜单栏的",[25,123192,123193],{},"文件","下的",[25,123196,123197],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123200,123201],{},[1727,123202],{"alt":23,"src":123203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123205,123206],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[351,123208,123210],{"id":123209},"_73-远程桌面","7.3 远程桌面",[14,123212,123213],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123215,123216],{},"我们选择使用VNC来看。",[363,123218,123219],{},[366,123220,123221],{},"安装VNC服务器：",[14,123223,123224],{},"这里以TigerVNC为例进行安装：",[18,123226,123228],{"className":117509,"code":123227,"language":117511,"meta":23,"style":23},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[25,123229,123230],{"__ignoreMap":23},[28,123231,123232,123234,123236,123238,123241],{"class":30,"line":31},[28,123233,24839],{"class":2225},[28,123235,117530],{"class":127},[28,123237,24096],{"class":127},[28,123239,123240],{"class":127}," tigervnc-standalone-server",[28,123242,123243],{"class":127}," tigervnc-common\n",[363,123245,123246],{"start":48},[366,123247,123248],{},"设置VNC密码：",[14,123250,123251],{},"为VNC用户设置密码，运行以下命令：",[18,123253,123255],{"className":117509,"code":123254,"language":117511,"meta":23,"style":23},"vncpasswd\n",[25,123256,123257],{"__ignoreMap":23},[28,123258,123259],{"class":30,"line":31},[28,123260,123254],{"class":2225},[363,123262,123263],{"start":84},[366,123264,123265],{},"配置VNC启动脚本:",[14,123267,123268],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[18,123270,123272],{"className":117509,"code":123271,"language":117511,"meta":23,"style":23},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[25,123273,123274,123283],{"__ignoreMap":23},[28,123275,123276,123278,123280],{"class":30,"line":31},[28,123277,101479],{"class":2225},[28,123279,29479],{"class":60},[28,123281,123282],{"class":127}," ~\u002F.vnc\n",[28,123284,123285,123288],{"class":30,"line":48},[28,123286,123287],{"class":2225},"nano",[28,123289,123290],{"class":127}," ~\u002F.vnc\u002Fxstartup\n",[14,123292,123293],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[18,123295,123297],{"className":117509,"code":123296,"language":117511,"meta":23,"style":23},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[25,123298,123299,123304,123312,123319],{"__ignoreMap":23},[28,123300,123301],{"class":30,"line":31},[28,123302,123303],{"class":87},"#!\u002Fbin\u002Fsh\n",[28,123305,123306,123309],{"class":30,"line":48},[28,123307,123308],{"class":60},"unset",[28,123310,123311],{"class":127}," SESSION_MANAGER\n",[28,123313,123314,123316],{"class":30,"line":84},[28,123315,123308],{"class":60},[28,123317,123318],{"class":127}," DBUS_SESSION_BUS_ADDRESS\n",[28,123320,123321],{"class":30,"line":91},[28,123322,123323],{"class":2225},"gnome-session\n",[14,123325,123326],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[363,123328,123329],{"start":91},[366,123330,123331],{},"给予执行权限：",[14,123333,123334],{},"为xstartup文件设置执行权限：",[18,123336,123338],{"className":117509,"code":123337,"language":117511,"meta":23,"style":23},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[25,123339,123340],{"__ignoreMap":23},[28,123341,123342,123344,123347],{"class":30,"line":31},[28,123343,24874],{"class":2225},[28,123345,123346],{"class":127}," +x",[28,123348,123290],{"class":127},[363,123350,123351],{"start":97},[366,123352,123353],{},"启动VNC服务器：",[18,123355,123357],{"className":117509,"code":123356,"language":117511,"meta":23,"style":23},"vncserver -geometry 1920x1080 -localhost=0\n",[25,123358,123359],{"__ignoreMap":23},[28,123360,123361,123364,123367,123370],{"class":30,"line":31},[28,123362,123363],{"class":2225},"vncserver",[28,123365,123366],{"class":60}," -geometry",[28,123368,123369],{"class":127}," 1920x1080",[28,123371,123372],{"class":60}," -localhost=0\n",[14,123374,123375],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123377,123378],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[363,123380,123381],{"start":103},[366,123382,123383],{},"查看已开启的VNC服务器：",[18,123385,123387],{"className":117509,"code":123386,"language":117511,"meta":23,"style":23},"vncserver -list\n",[25,123388,123389],{"__ignoreMap":23},[28,123390,123391,123393],{"class":30,"line":31},[28,123392,123363],{"class":2225},[28,123394,123395],{"class":60}," -list\n",[14,123397,123398],{},[1727,123399],{"alt":23,"src":123400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[363,123402,123403],{"start":109},[366,123404,123405],{},"连接到VNC服务器：",[14,123407,123408],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[363,123410,123411],{"start":118},[366,123412,123413],{},"停止VNC服务器：",[14,123415,123416],{},"如果需要停止VNC服务器，可以使用以下命令：",[18,123418,123420],{"className":117509,"code":123419,"language":117511,"meta":23,"style":23},"vncserver -kill :1\n",[25,123421,123422],{"__ignoreMap":23},[28,123423,123424,123426,123429],{"class":30,"line":31},[28,123425,123363],{"class":2225},[28,123427,123428],{"class":60}," -kill",[28,123430,123431],{"class":127}," :1\n",[14,123433,123434],{},"将:1替换为你实际使用的显示编号。",[14,123436,123437],{},[1727,123438],{"alt":23,"src":123439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123441,123442],{},[1727,123443],{"alt":23,"src":123444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[351,123446,123448],{"id":123447},"_74-usb端口设置","7.4 USB端口设置",[14,123450,123451],{},[555,123452,123453],{},"首先先配置好权限",[18,123455,123457],{"className":117509,"code":123456,"language":117511,"meta":23,"style":23},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[25,123458,123459,123464,123477,123484,123489],{"__ignoreMap":23},[28,123460,123461],{"class":30,"line":31},[28,123462,123463],{"class":87},"# 将用户权限提高\n",[28,123465,123466,123468,123470,123472,123475],{"class":30,"line":48},[28,123467,24839],{"class":2225},[28,123469,26837],{"class":127},[28,123471,26840],{"class":60},[28,123473,123474],{"class":127}," dialout",[28,123476,26845],{"class":38},[28,123478,123479,123481],{"class":30,"line":84},[28,123480,26864],{"class":2225},[28,123482,123483],{"class":127}," dialout\n",[28,123485,123486],{"class":30,"line":91},[28,123487,123488],{"class":87},"# 查看下面命令是否输出dialout（若输出才正常）\n",[28,123490,123491],{"class":30,"line":97},[28,123492,123493],{"class":2225},"groups\n",[14,123495,123496],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[380,123498,123500],{"id":123499},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123502,123503,123506],{},[555,123504,123505],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123508,123509,123512],{},[555,123510,123511],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123514,123515],{},[555,123516,123517],{},"流程如下：",[14,123519,123520],{},"（1）.查找设备idVendor和idProduct",[14,123522,123523,123524,123527],{},"接入两个USB设备，在终端调用指令",[25,123525,123526],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123529,123530],{},[1727,123531],{"alt":23,"src":123532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123534,123535,123536,123539],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[25,123537,123538],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123541,123542],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123544,123545],{},"（2）.编写映射规则",[14,123547,123548,123549,123552],{},"在",[25,123550,123551],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[18,123554,123556],{"className":117509,"code":123555,"language":117511,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[25,123557,123558],{"__ignoreMap":23},[28,123559,123560,123562,123564],{"class":30,"line":31},[28,123561,24839],{"class":2225},[28,123563,118796],{"class":127},[28,123565,123566],{"class":127}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123568,123569],{},"输入如下内容：",[18,123571,123573],{"className":117509,"code":123572,"language":117511,"meta":23,"style":23},"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",[25,123574,123575,123605],{"__ignoreMap":23},[28,123576,123577,123580,123582,123585,123588,123591,123594,123596,123599,123602],{"class":30,"line":31},[28,123578,123579],{"class":38},"KERNEL",[28,123581,54],{"class":34},[28,123583,123584],{"class":127},"=\"ttyUSB*\",",[28,123586,123587],{"class":2225}," ATTRS",[28,123589,123590],{"class":127},"{idVendor}==",[28,123592,123593],{"class":2225},"\"10c4\"",[28,123595,64],{"class":2225},[28,123597,123598],{"class":127}," ATTRS{idProduct}==\"ea60\",",[28,123600,123601],{"class":127}," MODE:=\"0777\",",[28,123603,123604],{"class":127}," SYMLINK+=\"mylidar\"\n",[28,123606,123607,123609,123611,123613,123615,123617,123620,123622,123625,123627],{"class":30,"line":48},[28,123608,123579],{"class":38},[28,123610,54],{"class":34},[28,123612,123584],{"class":127},[28,123614,123587],{"class":2225},[28,123616,123590],{"class":127},[28,123618,123619],{"class":2225},"\"1a86\"",[28,123621,64],{"class":2225},[28,123623,123624],{"class":127}," ATTRS{idProduct}==\"7523\",",[28,123626,123601],{"class":127},[28,123628,123629],{"class":127}," SYMLINK+=\"mycar\"\n",[14,123631,123632],{},"代码解释：",[1404,123634,123635,123638,123641,123644],{},[366,123636,123637],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[366,123639,123640],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[366,123642,123643],{},"SYMLINK是符号连接，即绑定的别名；",[366,123645,123646],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123648,123649,123650,123653,123656],{},"***小提示：***",[23815,123651,123652],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[25,123654,123655],{},"\u002Fetc\u002Fudev\u002Frule.d",[23815,123657,123658],{},"目录即可。",[14,123660,123661],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123663,123664],{},"（3）.使规则生效",[14,123666,123667],{},"在终端下输入如下指令：",[18,123669,123671],{"className":117509,"code":123670,"language":117511,"meta":23,"style":23},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[25,123672,123673,123678,123690,123701,123705,123710,123723],{"__ignoreMap":23},[28,123674,123675],{"class":30,"line":31},[28,123676,123677],{"class":87},"# Ubuntu用下方命令\n",[28,123679,123680,123682,123684,123687],{"class":30,"line":48},[28,123681,24839],{"class":2225},[28,123683,120261],{"class":127},[28,123685,123686],{"class":127}," udev",[28,123688,123689],{"class":127}," reload\n",[28,123691,123692,123694,123696,123698],{"class":30,"line":84},[28,123693,24839],{"class":2225},[28,123695,120261],{"class":127},[28,123697,123686],{"class":127},[28,123699,123700],{"class":127}," restart\n",[28,123702,123703],{"class":30,"line":91},[28,123704,2662],{"emptyLinePlaceholder":336},[28,123706,123707],{"class":30,"line":97},[28,123708,123709],{"class":87},"#Fedora用下方命令\n",[28,123711,123712,123714,123717,123720],{"class":30,"line":103},[28,123713,24839],{"class":2225},[28,123715,123716],{"class":127}," udevadm",[28,123718,123719],{"class":127}," control",[28,123721,123722],{"class":60}," --reload\n",[28,123724,123725,123727,123729],{"class":30,"line":109},[28,123726,24839],{"class":2225},[28,123728,123716],{"class":127},[28,123730,123731],{"class":127}," trigger\n",[14,123733,123734],{},"再重新插拔设备即可。",[14,123736,123737],{},"（4）.测试",[14,123739,123740],{},"终端下输入如下指令",[18,123742,123744],{"className":117509,"code":123743,"language":117511,"meta":23,"style":23},"ll \u002Fdev | grep ttyUSB\n",[25,123745,123746],{"__ignoreMap":23},[28,123747,123748,123751,123754,123756,123758],{"class":30,"line":31},[28,123749,123750],{"class":2225},"ll",[28,123752,123753],{"class":127}," \u002Fdev",[28,123755,25372],{"class":34},[28,123757,30499],{"class":2225},[28,123759,123760],{"class":127}," ttyUSB\n",[14,123762,123763],{},"运行结果如下：",[14,123765,123766],{},[1727,123767],{"alt":23,"src":123768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123770,123771,123772,123775],{},"也可以多次插拔USB设备，会发现设备端口",[25,123773,123774],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123777,123778],{},[555,123779,118177],{},[14,123781,123782],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[380,123784,123786],{"id":123785},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123788,123789,123791],{},[555,123790,123505],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123793,123794,123796],{},[555,123795,123511],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123798,123799],{},[555,123800,123517],{},[14,123802,123803],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123805,123806],{},"调用如下指令查看第一台雷达的USB信息：",[18,123808,123810],{"className":117509,"code":123809,"language":117511,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[25,123811,123812,123832],{"__ignoreMap":23},[28,123813,123814,123817,123819,123822,123825,123827,123829],{"class":30,"line":31},[28,123815,123816],{"class":2225},"udevadm",[28,123818,70077],{"class":127},[28,123820,123821],{"class":60}," --attribute-walk",[28,123823,123824],{"class":60}," --name=\u002Fdev\u002FttyUSB0",[28,123826,25372],{"class":34},[28,123828,30499],{"class":2225},[28,123830,123831],{"class":127}," KERNELS\n",[28,123833,123834,123836,123838,123840,123843,123845,123847],{"class":30,"line":48},[28,123835,123816],{"class":2225},[28,123837,70077],{"class":127},[28,123839,123821],{"class":60},[28,123841,123842],{"class":60}," --name=\u002Fdev\u002FttyACM0",[28,123844,25372],{"class":34},[28,123846,30499],{"class":2225},[28,123848,123831],{"class":127},[14,123850,123851],{},[1727,123852],{"alt":23,"src":123853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123855,123856],{},"调用如下指令查看第二台雷达的USB信息：",[18,123858,123860],{"className":117509,"code":123859,"language":117511,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[25,123861,123862],{"__ignoreMap":23},[28,123863,123864,123866,123868,123870,123873,123875,123877],{"class":30,"line":31},[28,123865,123816],{"class":2225},[28,123867,70077],{"class":127},[28,123869,123821],{"class":60},[28,123871,123872],{"class":60}," --name=\u002Fdev\u002FttyUSB1",[28,123874,25372],{"class":34},[28,123876,30499],{"class":2225},[28,123878,123831],{"class":127},[14,123880,123881,123882,123885,123886,123889,123890,123893],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[25,123883,123884],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[25,123887,123888],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[555,123891,123892],{},"唯一性标识","”。",[14,123895,123545],{},[14,123897,123548,123898,123900],{},[25,123899,123551],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[18,123902,123903],{"className":117509,"code":123555,"language":117511,"meta":23,"style":23},[25,123904,123905],{"__ignoreMap":23},[28,123906,123907,123909,123911],{"class":30,"line":31},[28,123908,24839],{"class":2225},[28,123910,118796],{"class":127},[28,123912,123566],{"class":127},[18,123914,123916],{"className":117509,"code":123915,"language":117511,"meta":23,"style":23},"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",[25,123917,123918,123947],{"__ignoreMap":23},[28,123919,123920,123922,123924,123926,123929,123931,123934,123937,123939,123942,123944],{"class":30,"line":31},[28,123921,123579],{"class":38},[28,123923,54],{"class":34},[28,123925,123584],{"class":127},[28,123927,123928],{"class":38}," KERNELS",[28,123930,54],{"class":34},[28,123932,123933],{"class":127},"=\"1-1.3:1.0\",",[28,123935,123936],{"class":2225}," MODE:",[28,123938,54],{"class":127},[28,123940,123941],{"class":2225},"\"0777\"",[28,123943,64],{"class":2225},[28,123945,123946],{"class":127}," SYMLINK+=\"rplidar_front\"\n",[28,123948,123949,123951,123953,123955,123957,123959,123962,123964,123966,123968,123970],{"class":30,"line":48},[28,123950,123579],{"class":38},[28,123952,54],{"class":34},[28,123954,123584],{"class":127},[28,123956,123928],{"class":38},[28,123958,54],{"class":34},[28,123960,123961],{"class":127},"=\"1-1.4:1.0\",",[28,123963,123936],{"class":2225},[28,123965,54],{"class":127},[28,123967,123941],{"class":2225},[28,123969,64],{"class":2225},[28,123971,123972],{"class":127}," SYMLINK+=\"rplidar_back\"\n",[14,123974,123664],{},[14,123976,123667],{},[18,123978,123979],{"className":117509,"code":123670,"language":117511,"meta":23,"style":23},[25,123980,123981,123985,123995,124005,124009,124013,124023],{"__ignoreMap":23},[28,123982,123983],{"class":30,"line":31},[28,123984,123677],{"class":87},[28,123986,123987,123989,123991,123993],{"class":30,"line":48},[28,123988,24839],{"class":2225},[28,123990,120261],{"class":127},[28,123992,123686],{"class":127},[28,123994,123689],{"class":127},[28,123996,123997,123999,124001,124003],{"class":30,"line":84},[28,123998,24839],{"class":2225},[28,124000,120261],{"class":127},[28,124002,123686],{"class":127},[28,124004,123700],{"class":127},[28,124006,124007],{"class":30,"line":91},[28,124008,2662],{"emptyLinePlaceholder":336},[28,124010,124011],{"class":30,"line":97},[28,124012,123709],{"class":87},[28,124014,124015,124017,124019,124021],{"class":30,"line":103},[28,124016,24839],{"class":2225},[28,124018,123716],{"class":127},[28,124020,123719],{"class":127},[28,124022,123722],{"class":60},[28,124024,124025,124027,124029],{"class":30,"line":109},[28,124026,24839],{"class":2225},[28,124028,123716],{"class":127},[28,124030,123731],{"class":127},[14,124032,123734],{},[14,124034,123737],{},[14,124036,123740,124037,124040],{},[25,124038,124039],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124042,124043],{},[1727,124044],{"alt":23,"src":124045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124047,124048],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124050,124051,124053],{},[555,124052,118177],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[380,124055,124057],{"id":124056},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124059,124060],{},"（1）.查看所连接的主机USB接口的信息",[18,124062,124064],{"className":117509,"code":124063,"language":117511,"meta":23,"style":23},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[25,124065,124066,124096],{"__ignoreMap":23},[28,124067,124068,124070,124072,124075,124077,124079,124081,124083,124086,124089,124091,124094],{"class":30,"line":31},[28,124069,123816],{"class":2225},[28,124071,70077],{"class":127},[28,124073,124074],{"class":60}," -a",[28,124076,29479],{"class":60},[28,124078,28685],{"class":38},[28,124080,123816],{"class":2225},[28,124082,70077],{"class":127},[28,124084,124085],{"class":60}," -q",[28,124087,124088],{"class":127}," path",[28,124090,25378],{"class":60},[28,124092,124093],{"class":127}," \u002Fdev\u002FttyACM0",[28,124095,81],{"class":38},[28,124097,124098,124100,124102,124104,124106,124108,124110,124112,124114,124116,124118,124121],{"class":30,"line":48},[28,124099,123816],{"class":2225},[28,124101,70077],{"class":127},[28,124103,124074],{"class":60},[28,124105,29479],{"class":60},[28,124107,28685],{"class":38},[28,124109,123816],{"class":2225},[28,124111,70077],{"class":127},[28,124113,124085],{"class":60},[28,124115,124088],{"class":127},[28,124117,25378],{"class":60},[28,124119,124120],{"class":127}," \u002Fdev\u002FttyUSB0",[28,124122,81],{"class":38},[14,124124,124125],{},[1727,124126],{"alt":23,"src":124127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124129,124130],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124132,123545],{},[14,124134,123548,124135,123900],{},[25,124136,123551],{},[18,124138,124139],{"className":117509,"code":123555,"language":117511,"meta":23,"style":23},[25,124140,124141],{"__ignoreMap":23},[28,124142,124143,124145,124147],{"class":30,"line":31},[28,124144,24839],{"class":2225},[28,124146,118796],{"class":127},[28,124148,123566],{"class":127},[18,124150,124152],{"className":117509,"code":124151,"language":117511,"meta":23,"style":23},"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",[25,124153,124154,124182,124208],{"__ignoreMap":23},[28,124155,124156,124158,124160,124163,124165,124167,124169,124171,124174,124177,124179],{"class":30,"line":31},[28,124157,123579],{"class":38},[28,124159,54],{"class":34},[28,124161,124162],{"class":127},"=\"ttyACM*\",",[28,124164,123587],{"class":2225},[28,124166,123590],{"class":127},[28,124168,123619],{"class":2225},[28,124170,64],{"class":2225},[28,124172,124173],{"class":127}," ATTRS{idProduct}==\"55d4\",",[28,124175,124176],{"class":127}," ATTRS{serial}==\"0001\",",[28,124178,123601],{"class":127},[28,124180,124181],{"class":127}," SYMLINK+=\"ttyACM_MCU\"\n",[28,124183,124184,124186,124188,124190,124192,124194,124196,124198,124200,124203,124205],{"class":30,"line":48},[28,124185,123579],{"class":38},[28,124187,54],{"class":34},[28,124189,124162],{"class":127},[28,124191,123587],{"class":2225},[28,124193,123590],{"class":127},[28,124195,123619],{"class":2225},[28,124197,64],{"class":2225},[28,124199,124173],{"class":127},[28,124201,124202],{"class":127}," ATTRS{serial}==\"0002\",",[28,124204,123601],{"class":127},[28,124206,124207],{"class":127}," SYMLINK+=\"ttyACM_Lidar\"\n",[28,124209,124210,124212,124214,124216,124218,124220,124222,124224,124226,124228],{"class":30,"line":84},[28,124211,123579],{"class":38},[28,124213,54],{"class":34},[28,124215,123584],{"class":127},[28,124217,123587],{"class":2225},[28,124219,123590],{"class":127},[28,124221,123619],{"class":2225},[28,124223,64],{"class":2225},[28,124225,123624],{"class":127},[28,124227,123601],{"class":127},[28,124229,124230],{"class":127}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124232,123664],{},[14,124234,123667],{},[18,124236,124237],{"className":117509,"code":123670,"language":117511,"meta":23,"style":23},[25,124238,124239,124243,124253,124263,124267,124271,124281],{"__ignoreMap":23},[28,124240,124241],{"class":30,"line":31},[28,124242,123677],{"class":87},[28,124244,124245,124247,124249,124251],{"class":30,"line":48},[28,124246,24839],{"class":2225},[28,124248,120261],{"class":127},[28,124250,123686],{"class":127},[28,124252,123689],{"class":127},[28,124254,124255,124257,124259,124261],{"class":30,"line":84},[28,124256,24839],{"class":2225},[28,124258,120261],{"class":127},[28,124260,123686],{"class":127},[28,124262,123700],{"class":127},[28,124264,124265],{"class":30,"line":91},[28,124266,2662],{"emptyLinePlaceholder":336},[28,124268,124269],{"class":30,"line":97},[28,124270,123709],{"class":87},[28,124272,124273,124275,124277,124279],{"class":30,"line":103},[28,124274,24839],{"class":2225},[28,124276,123716],{"class":127},[28,124278,123719],{"class":127},[28,124280,123722],{"class":60},[28,124282,124283,124285,124287],{"class":30,"line":109},[28,124284,24839],{"class":2225},[28,124286,123716],{"class":127},[28,124288,123731],{"class":127},[14,124290,124291,124292],{},"再重新插拔设备即可，或者 ",[555,124293,124294],{},"直接重启系统。",[14,124296,123737],{},[14,124298,123740,124299,124040],{},[25,124300,124039],{},[14,124302,124303],{},[1727,124304],{"alt":23,"src":124305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124307,124048],{},[14,124309,124310,124312],{},[555,124311,118177],{}," 一些设备可能没有串口号等。",[380,124314,124316],{"id":124315},"_744-其他注意事项","7.4.4 其他注意事项",[14,124318,124319,124320,124322,124323,124326,124327,18672,124330,124333,124334,124336],{},"并非所有的USB设备端口号都是",[25,124321,123774],{},"的格式，比如Arduino的端口号可能是",[25,124324,124325],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[25,124328,124329],{},"videon",[25,124331,124332],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[25,124335,124329],{},"端口，绑定时需要关联的也是该接口。",[14,124338,124339,124340,124343,124344,124347,124348,124350,124351,124354,124355,124358,124359,124362,124363,124362,124366,124362,124369,28648],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[25,124341,124342],{},"KERNEL==\"ttyUSB*\"","修改为",[25,124345,124346],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[25,124349,124342],{},"修改为类似于",[25,124352,124353],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[25,124356,124357],{},"video[0,2,4,6]","表示可以绑定的端口为",[25,124360,124361],{},"video0","或",[25,124364,124365],{},"video2",[25,124367,124368],{},"video4",[25,124370,124371],{},"video6",[351,124373,124375],{"id":124374},"_75-挂载内网网页","7.5 挂载内网网页",[14,124377,124378],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124380,124381],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124383,124384],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124386,124387,124388],{},"Termux 下载地址（F-Droid）：",[51,124389,124390],{"href":124390,"rel":124391},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24127],[14,124393,124394],{},"首先打开app后，先更新软件缓存：",[18,124396,124398],{"className":117509,"code":124397,"language":117511,"meta":23,"style":23},"pkg update\n",[25,124399,124400],{"__ignoreMap":23},[28,124401,124402,124405],{"class":30,"line":31},[28,124403,124404],{"class":2225},"pkg",[28,124406,26505],{"class":127},[14,124408,124409],{},"然后换源",[18,124411,124413],{"className":117509,"code":124412,"language":117511,"meta":23,"style":23},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[25,124414,124415],{"__ignoreMap":23},[28,124416,124417,124419,124422],{"class":30,"line":31},[28,124418,123287],{"class":2225},[28,124420,124421],{"class":38}," $PREFIX",[28,124423,124424],{"class":127},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124426,124427],{},"将该文件内容替换为下面：",[18,124429,124431],{"className":117509,"code":124430,"language":117511,"meta":23,"style":23},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[25,124432,124433],{"__ignoreMap":23},[28,124434,124435,124438,124441,124444],{"class":30,"line":31},[28,124436,124437],{"class":2225},"deb",[28,124439,124440],{"class":127}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[28,124442,124443],{"class":127}," stable",[28,124445,124446],{"class":127}," main\n",[1404,124448,124449,124476],{},[366,124450,124451,124452,124454,124455],{},"如果你使用的是",[25,124453,123287],{},"编辑器：",[1404,124456,124457,124464,124470],{},[366,124458,124459,124460,124463],{},"按 ",[25,124461,124462],{},"Ctrl+O"," 保存文件。",[366,124465,124459,124466,124469],{},[25,124467,124468],{},"Enter"," 确认文件名。",[366,124471,124459,124472,124475],{},[25,124473,124474],{},"Ctrl+X"," 退出编辑器。",[366,124477,124451,124478,124454,124481],{},[25,124479,124480],{},"vim",[1404,124482,124483,124489],{},[366,124484,124459,124485,124488],{},[25,124486,124487],{},"Esc"," 退出编辑模式。",[366,124490,124491,124492,124494],{},"输入 ",[25,124493,119434],{}," 保存并退出。",[14,124496,124497],{},"接下来重新更新软件源：",[18,124499,124501],{"className":117509,"code":124500,"language":117511,"meta":23,"style":23},"pkg update && pkg upgrade\n",[25,124502,124503],{"__ignoreMap":23},[28,124504,124505,124507,124509,124511,124513],{"class":30,"line":31},[28,124506,124404],{"class":2225},[28,124508,117560],{"class":127},[28,124510,26453],{"class":38},[28,124512,124404],{"class":2225},[28,124514,117546],{"class":127},[14,124516,124517],{},"安装python：",[18,124519,124521],{"className":117509,"code":124520,"language":117511,"meta":23,"style":23},"pkg install python\n",[25,124522,124523],{"__ignoreMap":23},[28,124524,124525,124527,124529],{"class":30,"line":31},[28,124526,124404],{"class":2225},[28,124528,24096],{"class":127},[28,124530,124531],{"class":127}," python\n",[14,124533,124534,26736],{},[555,124535,124536],{},"通过Termux访问设备存储",[14,124538,124539],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[18,124541,124543],{"className":117509,"code":124542,"language":117511,"meta":23,"style":23},"termux-setup-storage\n",[25,124544,124545],{"__ignoreMap":23},[28,124546,124547],{"class":30,"line":31},[28,124548,124542],{"class":2225},[363,124550,124551],{},[366,124552,124553,26736,124556],{},[555,124554,124555],{},"进入HTML文件所在的目录",[363,124557,124558],{},[366,124559,124560,124561,124563],{},"使用",[25,124562,101489],{},"命令进入HTML文件所在的目录：",[18,124565,124567],{"className":117509,"code":124566,"language":117511,"meta":23,"style":23},"cd ~\u002Fyour_html_folder\n",[25,124568,124569],{"__ignoreMap":23},[28,124570,124571,124573],{"class":30,"line":31},[28,124572,101489],{"class":60},[28,124574,124575],{"class":127}," ~\u002Fyour_html_folder\n",[363,124577,124578],{"start":48},[366,124579,124580,26736,124583,124588,124605],{},[555,124581,124582],{},"启动Python HTTP服务器",[363,124584,124585],{},[366,124586,124587],{},"运行以下命令启动一个简单的HTTP服务器：",[18,124589,124591],{"className":117509,"code":124590,"language":117511,"meta":23,"style":23},"python -m http.server 8000\n",[25,124592,124593],{"__ignoreMap":23},[28,124594,124595,124597,124599,124602],{"class":30,"line":31},[28,124596,22],{"class":2225},[28,124598,101095],{"class":60},[28,124600,124601],{"class":127}," http.server",[28,124603,124604],{"class":60}," 8000\n",[363,124606,124607],{"start":84},[366,124608,124609,124610,124613],{},"这会在端口",[25,124611,124612],{},"8000","上启动一个Web服务器。",[1404,124615,124616],{},[366,124617,124618],{},"启动服务器后，Termux会显示日志信息，例如：",[18,124620,124622],{"className":121029,"code":124621,"language":121031,"meta":121032,"style":23},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[25,124623,124624],{"__ignoreMap":23},[28,124625,124626],{"class":30,"line":31},[28,124627,124621],{},[1404,124629,124630],{},[366,124631,124632],{},"这表示服务器已成功启动。",[14,124634,124635],{},[555,124636,124637],{},"在浏览器中访问HTML文件",[363,124639,124640],{},[366,124641,124642,26736,124645,124650],{},[555,124643,124644],{},"在同一设备上访问",[363,124646,124647],{},[366,124648,124649],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[18,124651,124654],{"className":124652,"code":124653,"language":71920,"meta":23,"style":23},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[25,124655,124656],{"__ignoreMap":23},[28,124657,124658,124661],{"class":30,"line":31},[28,124659,124660],{"class":38},"http:",[28,124662,124663],{"class":87},"\u002F\u002Flocalhost:8000\n",[1404,124665,124666],{},[366,124667,124668,124669,124672],{},"如果HTML文件中有",[25,124670,124671],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[351,124674,124676],{"id":124675},"_76-linux重点知识","7.6 Linux重点知识",[380,124678,124680],{"id":124679},"_761-关于点的说明","7.6.1 关于点的说明",[14,124682,124683],{},[1727,124684],{"alt":23,"src":124685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124687,124688],{},"一点本目录，两点上目录",[380,124690,124692],{"id":124691},"_762-目录","7.6.2 目录",[22260,124694,124696],{"id":124695},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124698,124699],{},[555,124700,124701],{},"\u002Fboot:",[14,124703,124704],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124706,124707],{},[555,124708,124709],{},"\u002Fetc:",[14,124711,124712],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124714,124715],{},[555,124716,124717],{},"\u002Flib：",[14,124719,124720],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124722,124723],{},[555,124724,124725],{},"\u002Fsys:",[14,124727,124728],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22260,124730,124732],{"id":124731},"_7622-指令集合","7.6.2.2 指令集合",[14,124734,124735],{},[555,124736,124737],{},"\u002Fbin:",[14,124739,124740],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124742,124743],{},[555,124744,124745],{},"\u002Fsbin:",[14,124747,124748],{},"只有系统管理员才能使用的程序和指令",[22260,124750,124752],{"id":124751},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124754,124755],{},[555,124756,124757],{},"\u002Fdev:",[14,124759,124760],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124762,124763],{},[555,124764,124765],{},"\u002Fmedia:",[14,124767,124768],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124770,124771],{},[555,124772,124773],{},"\u002Fmnt:",[14,124775,124776],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22260,124778,124780],{"id":124779},"_7624-临时文件","7.6.2.4 临时文件",[14,124782,124783],{},[555,124784,124785],{},"\u002Frun:",[14,124787,124788],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124790,124791],{},[555,124792,124793],{},"\u002Flost+found:",[14,124795,124796],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124798,124799],{},[555,124800,124801],{},"\u002Ftmp:",[14,124803,124804],{},"这个目录是用来存放一些临时文件的",[22260,124806,124808],{"id":124807},"_7625-账户","7.6.2.5 账户",[14,124810,124811],{},[555,124812,124813],{},"\u002Froot：",[14,124815,124816],{},"系统管理员的用户主目录",[14,124818,124819,26736],{},[555,124820,124821],{},"\u002Fhome",[14,124823,124824],{},"用户的主目录，以用户的账号命名的",[14,124826,124827,26736],{},[555,124828,124829],{},"\u002Fusr",[14,124831,124832],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124834,124835],{},[555,124836,124837],{},"\u002Fusr\u002Fbin：",[14,124839,124840],{},"系统用户使用的应用程序与指令",[14,124842,124843],{},[555,124844,124845],{},"\u002Fusr\u002Fsbin：",[14,124847,124848],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124850,124851],{},[555,124852,124853],{},"\u002Fusr\u002Fsrc：",[14,124855,124856],{},"内核源代码默认的放置目录",[22260,124858,124860],{"id":124859},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124862,124863],{},[555,124864,124865],{},"\u002Fvar：",[14,124867,124868],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124870,124871],{},[555,124872,124873],{},"\u002Fproc:",[14,124875,124876,124877,124880],{},"管理 ",[555,124878,124879],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22260,124882,124884],{"id":124883},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124886,124887],{},[555,124888,124889],{},"\u002Fopt:",[14,124891,124892],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124894,124895],{},[555,124896,124897],{},"\u002Fsrv:",[14,124899,124900],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[380,124902,124904],{"id":124903},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124906,124907],{},[1727,124908],{"alt":23,"src":124909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124911,124912],{},"windows-->linux:",[14,124914,124915],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124917,124918],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124920,124921],{},"linux传输文件到windows",[14,124923,124924],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[380,124926,124928],{"id":124927},"_764-易忘知识","7.6.4 易忘知识",[14,124930,124931],{},"操作系统内核查看",[18,124933,124934],{"className":117509,"code":121503,"language":117511,"meta":23,"style":23},[25,124935,124936],{"__ignoreMap":23},[28,124937,124938,124940],{"class":30,"line":31},[28,124939,70460],{"class":2225},[28,124941,121512],{"class":60},[14,124943,124944],{},[1727,124945],{"alt":23,"src":124946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124948,124949],{},[1727,124950],{"alt":23,"src":124951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[18,124953,124955],{"className":117509,"code":124954,"language":117511,"meta":23,"style":23},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[25,124956,124957,124969],{"__ignoreMap":23},[28,124958,124959,124961,124964,124967],{"class":30,"line":31},[28,124960,121720],{"class":2225},[28,124962,124963],{"class":127}," mvtest",[28,124965,124966],{"class":127}," mvtest2",[28,124968,2936],{"class":38},[28,124970,124971],{"class":30,"line":48},[28,124972,124973],{"class":2225},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124975,124976],{},[1727,124977],{"alt":23,"src":124978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124980,124981],{},[1727,124982],{"alt":23,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124985,124986,124987,124990],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[25,124988,124989],{},"du -a"," 可以快速查看磁盘使用细节。",[380,124992,124994],{"id":124993},"_765-vim","7.6.5 Vim",[14,124996,124997],{},[1727,124998],{"alt":23,"src":124999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125001,125002],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125004,125005],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125007,125008],{},[555,125009,125010],{},"1.命令模式：",[14,125012,125013],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125015,125016],{},"x 删除当前光标所在处的字符",[14,125018,125019],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125021,125022],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125024,125025],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125027,125028],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125030,125031],{},"dd 剪切当前行",[14,125033,125034],{},"yy 复制当前行",[14,125036,125037],{},"p 粘贴剪贴板内容到光标下方",[14,125039,125040],{},"P 粘贴剪贴板内容到光标上方",[14,125042,125043],{},"u 撤销上一次操作",[14,125045,125046],{},"ctrl+r 重做上一次操作",[14,125048,125049,125051],{},[1193,125050],{}," 保存文件",[14,125053,125054,125056],{},[1043,125055],{}," 退出Vim编辑器",[14,125058,125059,125061],{},[1043,125060],{},"! 强制退出Vim编辑器，不保存修改",[14,125063,125064],{},[555,125065,125066],{},"2.输入模式：",[14,125068,125069],{},[1727,125070],{"alt":23,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125073,125074],{},[555,125075,125076],{},"3.底线命令模式：",[14,125078,125079],{},[1727,125080],{"alt":23,"src":125081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125083,125084],{},"按下esc可以退出底线命令模式",[380,125086,125088],{"id":125087},"_766-apt","7.6.6 apt",[14,125090,125091],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[380,125093,125095],{"id":125094},"_767-home与root的区别","7.6.7 home与root的区别",[14,125097,125098],{},[1727,125099],{"alt":23,"src":125100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125102,125103],{},[1727,125104],{"alt":23,"src":125105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125107,125108],{},[1727,125109],{"alt":23,"src":125110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125112,125113],{},[1727,125114],{"alt":23,"src":125115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[380,125117,125119],{"id":125118},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125121,125122],{},[51,125123,125124],{"href":125124,"rel":125125},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24127],[363,125127,125128,125131],{},[366,125129,125130],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[366,125132,125133],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125135,125136],{},[1727,125137],{"alt":23,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125140,125141],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125143,125144],{},[1727,125145],{"alt":23,"src":125146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[18,125148,125150],{"className":121029,"code":125149,"language":121031,"meta":121032,"style":23},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[25,125151,125152,125157],{"__ignoreMap":23},[28,125153,125154],{"class":30,"line":31},[28,125155,125156],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[28,125158,125159],{"class":30,"line":48},[28,125160,125161],{},".\u002Fpycharm.sh\n",[14,125163,125164],{},"3️⃣创建.desktop文件",[14,125166,125167],{},[555,125168,125169],{},"原理：",[1404,125171,125172,125182],{},[366,125173,125174,125175,125181],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[555,125176,125177,125180],{},[25,125178,125179],{},".desktop"," 文件"," 来识别应用。",[366,125183,125184,125186,125187],{},[25,125185,125179],{}," 文件相当于一个“应用注册表”，告诉系统：",[1404,125188,125189,125192,125195,125198,125201],{},[366,125190,125191],{},"应用名字（Name）",[366,125193,125194],{},"图标（Icon）",[366,125196,125197],{},"执行命令（Exec）",[366,125199,125200],{},"分类（Categories）",[366,125202,125203],{},"是否需要终端（Terminal）",[18,125205,125207],{"className":121029,"code":125206,"language":121031,"meta":121032,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[25,125208,125209,125214],{"__ignoreMap":23},[28,125210,125211],{"class":30,"line":31},[28,125212,125213],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[28,125215,125216],{"class":30,"line":48},[28,125217,125218],{},"nano pycharm.desktop\n",[14,125220,125221],{},"nano是一个命令行下的编辑器，也可以使用vim",[18,125223,125225],{"className":121029,"code":125224,"language":121031,"meta":121032,"style":23},"[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",[25,125226,125227,125232,125237,125242,125247,125252,125257,125262,125267,125272],{"__ignoreMap":23},[28,125228,125229],{"class":30,"line":31},[28,125230,125231],{},"[Desktop Entry]\n",[28,125233,125234],{"class":30,"line":48},[28,125235,125236],{},"Version=1.0\n",[28,125238,125239],{"class":30,"line":84},[28,125240,125241],{},"Type=Application\n",[28,125243,125244],{"class":30,"line":91},[28,125245,125246],{},"Name=PyCharm\n",[28,125248,125249],{"class":30,"line":97},[28,125250,125251],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[28,125253,125254],{"class":30,"line":103},[28,125255,125256],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[28,125258,125259],{"class":30,"line":109},[28,125260,125261],{},"Comment=JetBrains PyCharm IDE\n",[28,125263,125264],{"class":30,"line":118},[28,125265,125266],{},"Categories=Development;IDE;\n",[28,125268,125269],{"class":30,"line":124},[28,125270,125271],{},"Terminal=false\n",[28,125273,125274],{"class":30,"line":131},[28,125275,125276],{},"StartupWMClass=jetbrains-pycharm\n",[1404,125278,125279,125285,125291,125297],{},[366,125280,125281,125284],{},[25,125282,125283],{},"Exec"," → 点击图标时执行的命令",[366,125286,125287,125290],{},[25,125288,125289],{},"Icon"," → 显示在菜单和桌面上的图标",[366,125292,125293,125296],{},[25,125294,125295],{},"Terminal=false"," → 不打开终端",[366,125298,125299,125302],{},[25,125300,125301],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125304,125305,125306],"blockquote",{},[14,125307,125308,125309,125311,125312],{},"可以理解成 ",[25,125310,125179],{}," 文件是 Linux 的 ",[555,125313,125314],{},"快捷方式配置文件",[14,125316,125317],{},"4️⃣设置可执行权限",[18,125319,125321],{"className":121029,"code":125320,"language":121031,"meta":121032,"style":23},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[25,125322,125323],{"__ignoreMap":23},[28,125324,125325],{"class":30,"line":31},[28,125326,125320],{},[14,125328,125329],{},"5️⃣桌面图标启动的话如下：",[18,125331,125333],{"className":121029,"code":125332,"language":121031,"meta":121032,"style":23},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[25,125334,125335,125340],{"__ignoreMap":23},[28,125336,125337],{"class":30,"line":31},[28,125338,125339],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[28,125341,125342],{"class":30,"line":48},[28,125343,125344],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[363,125346,125347],{"start":84},[366,125348,125349],{},"下载Appimage文件实现软件的安装",[14,125351,125352],{},"1️⃣先下载appimage",[14,125354,125355],{},[51,125356,125357],{"href":125357,"rel":125358},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24127],[14,125360,125361],{},[1727,125362],{"alt":23,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125365,125366],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125368,125369],{},[1727,125370],{"alt":23,"src":125371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125373,125374],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125376,125377],{},[1727,125378],{"alt":23,"src":125379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125381,125382],{},[1727,125383],{"alt":23,"src":125384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125386,125387,125388,125391],{},"3️⃣给他们放在",[25,125389,125390],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125393,125394],{},"4️⃣给软件执行权限",[18,125396,125398],{"className":121029,"code":125397,"language":121031,"meta":121032,"style":23},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[25,125399,125400,125405],{"__ignoreMap":23},[28,125401,125402],{"class":30,"line":31},[28,125403,125404],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[28,125406,125407],{"class":30,"line":48},[28,125408,125409],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125411,125412],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[18,125414,125416],{"className":117509,"code":125415,"language":117511,"meta":23,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[25,125417,125418,125425,125432,125438],{"__ignoreMap":23},[28,125419,125420,125422],{"class":30,"line":31},[28,125421,101489],{"class":60},[28,125423,125424],{"class":127}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[28,125426,125427,125429],{"class":30,"line":48},[28,125428,101496],{"class":2225},[28,125430,125431],{"class":127}," .\u002Fqqmusic.desktop\n",[28,125433,125434,125436],{"class":30,"line":84},[28,125435,124480],{"class":2225},[28,125437,125431],{"class":127},[28,125439,125440,125442,125444,125446],{"class":30,"line":91},[28,125441,24839],{"class":2225},[28,125443,24842],{"class":127},[28,125445,123346],{"class":127},[28,125447,125431],{"class":127},[14,125449,125450,125452],{},[25,125451,101496],{},"：一个 Linux 命令，主要功能是：",[1404,125454,125455,125458],{},[366,125456,125457],{},"如果文件不存在，就创建一个新的空文件",[366,125459,125460],{},"如果文件已存在，就更新该文件的最后修改时间",[18,125462,125464],{"className":121029,"code":125463,"language":121031,"meta":121032,"style":23},"[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",[25,125465,125466,125470,125475,125480,125485,125489,125494],{"__ignoreMap":23},[28,125467,125468],{"class":30,"line":31},[28,125469,125231],{},[28,125471,125472],{"class":30,"line":48},[28,125473,125474],{},"Name=QQ音乐\n",[28,125476,125477],{"class":30,"line":84},[28,125478,125479],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[28,125481,125482],{"class":30,"line":91},[28,125483,125484],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[28,125486,125487],{"class":30,"line":97},[28,125488,125241],{},[28,125490,125491],{"class":30,"line":103},[28,125492,125493],{},"Categories=Audio;Music;Player;\n",[28,125495,125496],{"class":30,"line":109},[28,125497,125498],{},"Comment=QQ Music Client for Linux\n",[14,125500,125501],{},"将文件复制进去",[14,125503,125504],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125506,125507],{},[1727,125508],{"alt":23,"src":125509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125511,125512],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125514,125515],{},[1727,125516],{"alt":23,"src":125517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125519,125520,125521,125524,125525,125528],{},"如果你用的不是KDE，那么也可以直接修改",[25,125522,125523],{},"qqmuic.desktop","：在exec的末尾加上",[25,125526,125527],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[18,125530,125532],{"className":121029,"code":125531,"language":121031,"meta":121032,"style":23},"[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",[25,125533,125534,125538,125542,125547,125551,125555,125559],{"__ignoreMap":23},[28,125535,125536],{"class":30,"line":31},[28,125537,125231],{},[28,125539,125540],{"class":30,"line":48},[28,125541,125474],{},[28,125543,125544],{"class":30,"line":84},[28,125545,125546],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[28,125548,125549],{"class":30,"line":91},[28,125550,125484],{},[28,125552,125553],{"class":30,"line":97},[28,125554,125241],{},[28,125556,125557],{"class":30,"line":103},[28,125558,125493],{},[28,125560,125561],{"class":30,"line":109},[28,125562,125498],{},[14,125564,125565],{},[1727,125566],{"alt":23,"src":125567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125569,125570],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[18,125572,125574],{"className":121029,"code":125573,"language":121031,"meta":121032,"style":23},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[25,125575,125576],{"__ignoreMap":23},[28,125577,125578],{"class":30,"line":31},[28,125579,125573],{},[363,125581,125582],{"start":91},[366,125583,125584],{},"去Flathub上安装软件",[14,125586,125587],{},[51,125588,125589],{"href":125589,"rel":125590},"https:\u002F\u002Fflathub.org\u002F",[24127],[14,125592,125593],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125595,125596],{},[1727,125597],{"alt":23,"src":125598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[18,125600,125602],{"className":121029,"code":125601,"language":121031,"meta":121032,"style":23},"flatpak install flathub com.obsproject.Studio\n",[25,125603,125604],{"__ignoreMap":23},[28,125605,125606],{"class":30,"line":31},[28,125607,125601],{},[14,125609,125610],{},[1727,125611],{"alt":23,"src":125612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125614,125615],{},"2️⃣运行软件",[14,125617,125618],{},"a.官方方式：",[14,125620,125621],{},[1727,125622],{"alt":23,"src":125623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[18,125625,125626],{"className":121029,"code":125601,"language":121031,"meta":121032,"style":23},[25,125627,125628],{"__ignoreMap":23},[28,125629,125630],{"class":30,"line":31},[28,125631,125601],{},[14,125633,125634],{},"b.当普通软件运行：",[14,125636,125637],{},[1727,125638],{"alt":23,"src":125639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125641,125642],{},[1727,125643],{"alt":23,"src":125644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[328,125646,125647],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":23,"searchDepth":48,"depth":48,"links":125649},[125650,125651,125656,125657,125663,125664],{"id":122382,"depth":48,"text":122383},{"id":122724,"depth":48,"text":122725,"children":125652},[125653,125654,125655],{"id":122728,"depth":84,"text":122729},{"id":122795,"depth":84,"text":122796},{"id":123056,"depth":84,"text":123057},{"id":123209,"depth":48,"text":123210},{"id":123447,"depth":48,"text":123448,"children":125658},[125659,125660,125661,125662],{"id":123499,"depth":84,"text":123500},{"id":123785,"depth":84,"text":123786},{"id":124056,"depth":84,"text":124057},{"id":124315,"depth":84,"text":124316},{"id":124374,"depth":48,"text":124375},{"id":124675,"depth":48,"text":124676,"children":125665},[125666,125667,125668,125669,125670,125671,125672,125673],{"id":124679,"depth":84,"text":124680},{"id":124691,"depth":84,"text":124692},{"id":124903,"depth":84,"text":124904},{"id":124927,"depth":84,"text":124928},{"id":124993,"depth":84,"text":124994},{"id":125087,"depth":84,"text":125088},{"id":125094,"depth":84,"text":125095},{"id":125118,"depth":84,"text":125119},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122374,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125680,"title":125681,"body":125682,"description":333,"extension":334,"meta":125686,"navigation":336,"path":125687,"seo":125688,"stem":125689,"__hash__":125690},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125683,"toc":125684},[],{"title":23,"searchDepth":48,"depth":48,"links":125685},[],{"category":30526},"\u002Fwiki\u002F2025-01-27-linux",{"title":125681,"description":333},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125692,"title":125693,"body":125694,"description":125698,"extension":334,"meta":126089,"navigation":336,"path":126090,"seo":126091,"stem":126092,"__hash__":126093},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125695,"toc":126087},[125696,125699,125703,125720,125723,125776,125780,125782,125822,125831,125835,125838,126079,126084],[14,125697,125698],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125700,125702],{"id":125701},"_1ubuntu环境配置","1.Ubuntu环境配置",[363,125704,125705,125708,125711,125714,125717],{},[366,125706,125707],{},"ubuntu环境换源",[366,125709,125710],{},"安装cuda",[366,125712,125713],{},"安装miniconda",[366,125715,125716],{},"安装pytorch",[366,125718,125719],{},"安装genesis",[14,125721,125722],{},"参考链接：",[18,125724,125726],{"className":24084,"code":125725,"language":24086,"meta":23,"style":23},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[25,125727,125728],{"__ignoreMap":23},[28,125729,125730,125733,125736,125739,125741,125744,125747,125749,125752,125755,125757,125760,125763,125765,125768,125771,125773],{"class":30,"line":31},[28,125731,125732],{"class":2225},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[28,125734,125735],{"class":127},"=blogdetail",[28,125737,125738],{"class":38},"&sharetype",[28,125740,54],{"class":34},[28,125742,125743],{"class":127},"blogdetail",[28,125745,125746],{"class":38},"&sharerId",[28,125748,54],{"class":34},[28,125750,125751],{"class":127},"144728092",[28,125753,125754],{"class":38},"&sharerefer",[28,125756,54],{"class":34},[28,125758,125759],{"class":127},"PC",[28,125761,125762],{"class":38},"&sharesource",[28,125764,54],{"class":34},[28,125766,125767],{"class":127},"qq_69379513",[28,125769,125770],{"class":38},"&sharefrom",[28,125772,54],{"class":34},[28,125774,125775],{"class":127},"from_link\n",[10,125777,125779],{"id":125778},"_2genesis-报错issue","2.Genesis 报错issue",[14,125781,125722],{},[18,125783,125784],{"className":24084,"code":125725,"language":24086,"meta":23,"style":23},[25,125785,125786],{"__ignoreMap":23},[28,125787,125788,125790,125792,125794,125796,125798,125800,125802,125804,125806,125808,125810,125812,125814,125816,125818,125820],{"class":30,"line":31},[28,125789,125732],{"class":2225},[28,125791,125735],{"class":127},[28,125793,125738],{"class":38},[28,125795,54],{"class":34},[28,125797,125743],{"class":127},[28,125799,125746],{"class":38},[28,125801,54],{"class":34},[28,125803,125751],{"class":127},[28,125805,125754],{"class":38},[28,125807,54],{"class":34},[28,125809,125759],{"class":127},[28,125811,125762],{"class":38},[28,125813,54],{"class":34},[28,125815,125767],{"class":127},[28,125817,125770],{"class":38},[28,125819,54],{"class":34},[28,125821,125775],{"class":127},[18,125823,125825],{"className":24084,"code":125824,"language":24086,"meta":23,"style":23},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[25,125826,125827],{"__ignoreMap":23},[28,125828,125829],{"class":30,"line":31},[28,125830,125824],{"class":2225},[10,125832,125834],{"id":125833},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125836,125837],{},"hello_robot.py",[18,125839,125841],{"className":20,"code":125840,"language":22,"meta":23,"style":23},"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",[25,125842,125843,125849,125864,125868,125880,125892,125896,125909,125913,125932,125942,125952,125966,125970,125974,125979,125983,125993,126000,126014,126021,126031,126036,126040,126058,126063,126067,126074],{"__ignoreMap":23},[28,125844,125845,125847],{"class":30,"line":31},[28,125846,35],{"class":34},[28,125848,45561],{"class":38},[28,125850,125851,125854,125857,125859,125861],{"class":30,"line":48},[28,125852,125853],{"class":38},"os.environ[",[28,125855,125856],{"class":127},"'PYOPENGL_PLATFORM'",[28,125858,4705],{"class":38},[28,125860,54],{"class":34},[28,125862,125863],{"class":127}," 'glx'\n",[28,125865,125866],{"class":30,"line":84},[28,125867,2662],{"emptyLinePlaceholder":336},[28,125869,125870,125872,125875,125877],{"class":30,"line":91},[28,125871,35],{"class":34},[28,125873,125874],{"class":38}," genesis ",[28,125876,42],{"class":34},[28,125878,125879],{"class":38}," gs\n",[28,125881,125882,125884,125887,125889],{"class":30,"line":97},[28,125883,30997],{"class":34},[28,125885,125886],{"class":38}," pynput ",[28,125888,35],{"class":34},[28,125890,125891],{"class":38}," keyboard\n",[28,125893,125894],{"class":30,"line":103},[28,125895,2662],{"emptyLinePlaceholder":336},[28,125897,125898,125901,125904,125906],{"class":30,"line":109},[28,125899,125900],{"class":38},"gs.init(",[28,125902,125903],{"class":5478},"backend",[28,125905,54],{"class":34},[28,125907,125908],{"class":38},"gs.gpu)\n",[28,125910,125911],{"class":30,"line":118},[28,125912,2662],{"emptyLinePlaceholder":336},[28,125914,125915,125918,125920,125923,125926,125928,125930],{"class":30,"line":124},[28,125916,125917],{"class":38},"scene ",[28,125919,54],{"class":34},[28,125921,125922],{"class":38}," gs.Scene(",[28,125924,125925],{"class":5478},"show_viewer",[28,125927,54],{"class":34},[28,125929,31733],{"class":60},[28,125931,81],{"class":38},[28,125933,125934,125937,125939],{"class":30,"line":131},[28,125935,125936],{"class":38},"plane ",[28,125938,54],{"class":34},[28,125940,125941],{"class":38}," scene.add_entity(gs.morphs.Plane())\n",[28,125943,125944,125947,125949],{"class":30,"line":137},[28,125945,125946],{"class":38},"franka ",[28,125948,54],{"class":34},[28,125950,125951],{"class":38}," scene.add_entity(\n",[28,125953,125954,125957,125959,125961,125964],{"class":30,"line":143},[28,125955,125956],{"class":38},"    gs.morphs.MJCF(",[28,125958,45610],{"class":5478},[28,125960,54],{"class":34},[28,125962,125963],{"class":127},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[28,125965,38303],{"class":38},[28,125967,125968],{"class":30,"line":149},[28,125969,81],{"class":38},[28,125971,125972],{"class":30,"line":1890},[28,125973,2662],{"emptyLinePlaceholder":336},[28,125975,125976],{"class":30,"line":1904},[28,125977,125978],{"class":38},"scene.build()\n",[28,125980,125981],{"class":30,"line":1909},[28,125982,2662],{"emptyLinePlaceholder":336},[28,125984,125985,125987,125990],{"class":30,"line":1915},[28,125986,32203],{"class":34},[28,125988,125989],{"class":2225}," on_press",[28,125991,125992],{"class":38},"(key):\n",[28,125994,125995,125998],{"class":30,"line":1936},[28,125996,125997],{"class":34},"    try",[28,125999,4001],{"class":38},[28,126001,126002,126004,126007,126009,126012],{"class":30,"line":1941},[28,126003,2759],{"class":34},[28,126005,126006],{"class":38}," key.char ",[28,126008,3211],{"class":34},[28,126010,126011],{"class":127}," 'q'",[28,126013,4001],{"class":38},[28,126015,126016,126018],{"class":30,"line":1955},[28,126017,15994],{"class":34},[28,126019,126020],{"class":60}," False\n",[28,126022,126023,126026,126029],{"class":30,"line":1960},[28,126024,126025],{"class":34},"    except",[28,126027,126028],{"class":60}," AttributeError",[28,126030,4001],{"class":38},[28,126032,126033],{"class":30,"line":1989},[28,126034,126035],{"class":34},"        pass\n",[28,126037,126038],{"class":30,"line":1994},[28,126039,2662],{"emptyLinePlaceholder":336},[28,126041,126042,126045,126047,126050,126053,126055],{"class":30,"line":2011},[28,126043,126044],{"class":38},"listener ",[28,126046,54],{"class":34},[28,126048,126049],{"class":38}," keyboard.Listener(",[28,126051,126052],{"class":5478},"on_press",[28,126054,54],{"class":34},[28,126056,126057],{"class":38},"on_press)\n",[28,126059,126060],{"class":30,"line":2016},[28,126061,126062],{"class":38},"listener.start()\n",[28,126064,126065],{"class":30,"line":2021},[28,126066,2662],{"emptyLinePlaceholder":336},[28,126068,126069,126071],{"class":30,"line":2026},[28,126070,108876],{"class":34},[28,126072,126073],{"class":38}," listener.running:\n",[28,126075,126076],{"class":30,"line":2040},[28,126077,126078],{"class":38},"    scene.step()\n",[14,126080,126081],{},[1727,126082],{"alt":23,"src":126083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[328,126085,126086],{},"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":23,"searchDepth":48,"depth":48,"links":126088},[],{"category":23640},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125693,"description":125698},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126095,"title":126096,"body":126097,"description":333,"extension":334,"meta":126112,"navigation":336,"path":126113,"seo":126114,"stem":126115,"__hash__":126116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126098,"toc":126109},[126099,126102,126106],[10,126100,126096],{"id":126101},"_1-基础知识",[351,126103,126105],{"id":126104},"_11-js的组成","1.1 js的组成",[14,126107,126108],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":23,"searchDepth":48,"depth":48,"links":126110},[126111],{"id":126104,"depth":48,"text":126105},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126096,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126118,"title":126119,"body":126120,"description":333,"extension":334,"meta":126259,"navigation":336,"path":126260,"seo":126261,"stem":126262,"__hash__":126263},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126121,"toc":126247},[126122,126125,126129,126132,126136,126146,126150,126153,126156,126159,126163,126170,126176,126180,126186,126197,126201,126204,126208,126211,126215,126218,126222,126225,126229,126232,126235,126238,126241,126244],[10,126123,126119],{"id":126124},"_2-vscode必备内容",[351,126126,126128],{"id":126127},"_21-标签分类","2.1 标签分类",[14,126130,126131],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[351,126133,126135],{"id":126134},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126137,126138,126139,126141,126142,126145],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[25,126140,630],{}," 然后按 ",[25,126143,126144],{},"Tab","，快速自动生成基本结构。",[351,126147,126149],{"id":126148},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126151,126152],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126154,126155],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126157,126158],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[351,126160,126162],{"id":126161},"_24-视图缩放","2.4 视图缩放",[14,126164,126165,126166,126169],{},"缩放视图 ",[25,126167,126168],{},"ctrl+"," 可实现代码增大。",[14,126171,126172,126175],{},[25,126173,126174],{},"ctrl-"," 可实现代码减小。",[351,126177,126179],{"id":126178},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126181,126182,126183,28648],{},"VSCode 新建文件快捷键为 ",[25,126184,126185],{},"ctrl+N",[14,126187,126188,126189,126192,126193,126196],{},"保存快捷键为 ",[25,126190,126191],{},"ctrl+S","，将文本保存为 ",[25,126194,126195],{},".html"," 文件。",[351,126198,126200],{"id":126199},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126202,126203],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[351,126205,126207],{"id":126206},"_27-vscode-icons","2.7 vscode-icons",[14,126209,126210],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[351,126212,126214],{"id":126213},"_28-easy-less","2.8 Easy LESS",[14,126216,126217],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[351,126219,126221],{"id":126220},"_29-会了吧插件","2.9 会了吧插件",[14,126223,126224],{},"会了吧插件可以展示代码中英语单词的意思。",[351,126226,126228],{"id":126227},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126230,126231],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126233,126234],{},"②选定多个相同的单词:ctrl+D",[14,126236,126237],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126239,126240],{},"④全局替换某些单词:ctrl+h",[14,126242,126243],{},"⑤快速定位到某一行:ctrl+g",[14,126245,126246],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":23,"searchDepth":48,"depth":48,"links":126248},[126249,126250,126251,126252,126253,126254,126255,126256,126257,126258],{"id":126127,"depth":48,"text":126128},{"id":126134,"depth":48,"text":126135},{"id":126148,"depth":48,"text":126149},{"id":126161,"depth":48,"text":126162},{"id":126178,"depth":48,"text":126179},{"id":126199,"depth":48,"text":126200},{"id":126206,"depth":48,"text":126207},{"id":126213,"depth":48,"text":126214},{"id":126220,"depth":48,"text":126221},{"id":126227,"depth":48,"text":126228},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126119,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126265,"title":126266,"body":126267,"description":333,"extension":334,"meta":126426,"navigation":336,"path":126427,"seo":126428,"stem":126429,"__hash__":126430},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126268,"toc":126418},[126269,126272,126276,126286,126292,126298,126302,126311,126315,126320,126323,126326,126330,126333,126343,126352,126361,126370,126380,126387,126392,126397,126410],[10,126270,126266],{"id":126271},"_3-html文本与容器标签",[351,126273,126275],{"id":126274},"_31-标题标签","3.1 标题标签",[14,126277,126278,126281,126282,126285],{},[25,126279,126280],{},"\u003Ch1>","我是一级标签",[25,126283,126284],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126287,126288,126281,126290],{},[25,126289,126280],{},[25,126291,126284],{},[14,126293,123548,126294,126297],{},[25,126295,126296],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[351,126299,126301],{"id":126300},"_32-段落标签","3.2 段落标签",[14,126303,126304,126307,126308],{},[25,126305,126306],{},"\u003Cp>","....",[25,126309,126310],{},"\u003C\u002Fp>",[351,126312,126314],{"id":126313},"_33-换行标签","3.3 换行标签",[14,126316,126317],{},[25,126318,126319],{},"\u003Cbr \u002F>",[14,126321,126322],{},"具有强制换行的作用",[14,126324,126325],{},"单标签",[351,126327,126329],{"id":126328},"_34-文本格式化标签","3.4 文本格式化标签",[14,126331,126332],{},"提供粗体、斜体和下划线等效果",[14,126334,126335,126336,82795,126339,126342],{},"加粗：",[25,126337,126338],{},"\u003Cstrong>...\u003C\u002Fstrong>",[25,126340,126341],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126344,126345,126346,82795,126349,126342],{},"斜体：",[25,126347,126348],{},"\u003Cem>...\u003C\u002Fem>",[25,126350,126351],{},"\u003Ci>...\u003C\u002Fi>",[14,126353,126354,126355,82795,126358,126342],{},"删除线：",[25,126356,126357],{},"\u003Cdel>...\u003C\u002Fdel>",[25,126359,126360],{},"\u003Cs>...\u003C\u002Fs>",[14,126362,126363,126364,82795,126367,126342],{},"下划线：",[25,126365,126366],{},"\u003Cins>...\u003C\u002Fins>",[25,126368,126369],{},"\u003Cu>...\u003C\u002Fu>",[351,126371,126373,126374,18672,126377,102906],{"id":126372},"_35-div和span标签","3.5 ",[25,126375,126376],{},"\u003Cdiv>",[25,126378,126379],{},"\u003Cspan>",[14,126381,126382,101231,126384,126386],{},[25,126383,126376],{},[25,126385,126379],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126388,126389],{},[25,126390,126391],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126393,126394],{},[25,126395,126396],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126398,126399,126400,126402,126403,126405,126406,126409],{},"两者特点：①",[25,126401,126376],{}," 标签用来布局，但一行通常只放一个 ",[25,126404,126376],{},"。可以理解为一个大盒子，独占一行，在 ",[25,126407,126408],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126411,77505,126412,126414,126415,126417],{},[25,126413,126379],{}," 标签也可用于布局，一行可以放多个 ",[25,126416,126379],{},"，可理解为小盒子。",{"title":23,"searchDepth":48,"depth":48,"links":126419},[126420,126421,126422,126423,126424],{"id":126274,"depth":48,"text":126275},{"id":126300,"depth":48,"text":126301},{"id":126313,"depth":48,"text":126314},{"id":126328,"depth":48,"text":126329},{"id":126372,"depth":48,"text":126425},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126266,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126432,"title":126433,"body":126434,"description":333,"extension":334,"meta":126631,"navigation":336,"path":126632,"seo":126633,"stem":126634,"__hash__":126635},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126435,"toc":126623},[126436,126439,126443,126446,126452,126459,126465,126471,126474,126477,126480,126483,126486,126489,126492,126496,126499,126502,126505,126511,126517,126523,126530,126534,126540,126546,126549,126552,126558,126564,126570,126573,126576,126580,126583,126593,126599,126603,126612,126616,126619],[10,126437,126433],{"id":126438},"_4-html图像与链接",[351,126440,126442],{"id":126441},"_41-图像标签","4.1 图像标签",[14,126444,126445],{},"（1）标签",[14,126447,126448,126451],{},[25,126449,126450],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126453,126454,126455,126458],{},"src是",[25,126456,126457],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126460,126461,126462],{},"alt:文本，替换文本。图像不能显示的文字 ",[25,126463,126464],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126466,126467,126468],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[25,126469,126470],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126472,126473],{},"width:像素，设置图像的宽度",[14,126475,126476],{},"height:像素，设置图像的高度",[14,126478,126479],{},"border：像素，设置图像的边框粗细",[14,126481,126482],{},"（2）图像标签属性的注意点：",[14,126484,126485],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126487,126488],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126490,126491],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[351,126493,126495],{"id":126494},"_42-路径注意要点","4.2 路径注意要点：",[14,126497,126498],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126500,126501],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126503,126504],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126506,126507,126508],{},"①同一级路径：图像文件位于HTML文件同一级，如",[25,126509,126510],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126512,126513,126514],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[25,126515,126516],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126518,126519,126520],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[25,126521,126522],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126524,126525,126526,654],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[51,126527,126528],{"href":126528,"rel":126529},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24127],[351,126531,126533],{"id":126532},"_43-超链接标签","4.3 超链接标签",[14,126535,126536,126539],{},[25,126537,126538],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126541,126542,126543],{},"①语法格式：",[25,126544,126545],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126547,126548],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126550,126551],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126553,126554,126555],{},"③链接分类：外部链接：",[25,126556,126557],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126559,126560,126561],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[25,126562,126563],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126565,126566,126567],{},"空链接：如果当时没有确定链接目标时，",[25,126568,126569],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126571,126572],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126574,126575],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[351,126577,126579],{"id":126578},"_44-锚点链接","4.4 锚点链接",[14,126581,126582],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126584,126585,126586,126589,126590],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[25,126587,126588],{},"\u003Ca href=\"#two\">","第二级",[25,126591,126592],{},"\u003C\u002Fa>",[14,126594,126595,126596],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[25,126597,126598],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[351,126600,126602],{"id":126601},"_45-注释标签","4.5 注释标签",[14,126604,126605,126608,126609],{},[25,126606,126607],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[25,126610,126611],{},"ctrl+\u002F",[351,126613,126615],{"id":126614},"_46-特殊字符","4.6 特殊字符",[14,126617,126618],{},"可以实现添加多个空格",[1727,126620],{"style":126621,"src":126622},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":23,"searchDepth":48,"depth":48,"links":126624},[126625,126626,126627,126628,126629,126630],{"id":126441,"depth":48,"text":126442},{"id":126494,"depth":48,"text":126495},{"id":126532,"depth":48,"text":126533},{"id":126578,"depth":48,"text":126579},{"id":126601,"depth":48,"text":126602},{"id":126614,"depth":48,"text":126615},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126433,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126637,"title":126638,"body":126639,"description":333,"extension":334,"meta":126932,"navigation":336,"path":126933,"seo":126934,"stem":126935,"__hash__":126936},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126640,"toc":126923},[126641,126644,126648,126651,126654,126657,126660,126663,126666,126669,126672,126675,126695,126701,126705,126708,126711,126714,126717,126720,126723,126727,126730,126733,126736,126739,126752,126757,126760,126763,126778,126781,126784,126787,126790,126793,126797,126800,126807,126810,126813,126816,126819,126822,126828,126831,126834,126840,126843,126846,126849,126855,126858,126861,126875,126882,126885,126888,126895,126904,126907,126910,126913,126917,126920],[10,126642,126638],{"id":126643},"_5-html表格列表与表单",[351,126645,126647],{"id":126646},"_51-表格标签","5.1 表格标签",[14,126649,126650],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126652,126653],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126655,126656],{},"②表格基本语法：",[1727,126658],{"style":126621,"src":126659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126661,126662],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1727,126664],{"style":126621,"src":126665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126667,126668],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1727,126670],{"style":126621,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126673,126674],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126676,126677,126680,126681,126683,126684,126687,126688,126690,126691,126694],{},[25,126678,126679],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[25,126682,126679],{},"内部必须拥有",[25,126685,126686],{},"\u003Ctr>","标签，一般位于第一行，",[25,126689,126679],{},"比",[25,126692,126693],{},"\u003Cth>","范围广",[14,126696,126697,126700],{},[25,126698,126699],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[351,126702,126704],{"id":126703},"_52-合并单元格","5.2 合并单元格",[14,126706,126707],{},"（1）合并单元格方式：",[14,126709,126710],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126712,126713],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126715,126716],{},"（2）目标单元格：",[14,126718,126719],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126721,126722],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[351,126724,126726],{"id":126725},"_53-列表标签","5.3 列表标签",[14,126728,126729],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126731,126732],{},"①无序列表：",[1727,126734],{"style":126621,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126737,126738],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126740,126741,126744,126745,126748,126749,126751],{},[25,126742,126743],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[25,126746,126747],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[25,126750,126743],{},"中输入其他标签或文字是不对的",[14,126753,126754,126756],{},[25,126755,126747],{},"之间相当于一个容器，可以容纳所有元素",[14,126758,126759],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126761,126762],{},"在css中去除前边的小圆点采用如下代码:",[18,126764,126768],{"className":126765,"code":126766,"language":126767,"meta":23,"style":23},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[25,126769,126770],{"__ignoreMap":23},[28,126771,126772,126775],{"class":30,"line":31},[28,126773,126774],{"class":51556},"list-style",[28,126776,126777],{"class":38},": none;\n",[14,126779,126780],{},"②有序列表：",[1727,126782],{"style":126621,"src":126783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126785,126786],{},"③自定义列表：",[1727,126788],{"style":126621,"src":126789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1727,126791],{"style":126621,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[351,126794,126796],{"id":126795},"_54-表单标签","5.4 表单标签",[14,126798,126799],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126801,126802,126803,126806],{},"（1）表单域：包含单元素的区域，",[25,126804,126805],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1727,126808],{"style":126621,"src":126809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126811,126812],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126814,126815],{},"表单元素提交必须有name属性",[14,126817,126818],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126820,126821],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126823,77482,126824,126827],{},[25,126825,126826],{},"\u003Cinput>","输入表单元素",[1727,126829],{"style":126621,"src":126830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1727,126832],{"style":126621,"src":126833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126835,126836,126837],{},"单选按钮：",[25,126838,126839],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1727,126841],{"style":126621,"src":126842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126844,126845],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1727,126847],{"style":126621,"src":126848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126850,126851,126854],{},[555,126852,126853],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126856,126857],{},"②select下拉表单元素：可以节约页面控件",[1727,126859],{"style":126621,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126862,126863,14057,126865,126868,126869,126871,126872,126874],{},[555,126864,441],{},[25,126866,126867],{},"\u003Cselect>","中至少包含一对",[25,126870,102927],{},"；在",[25,126873,102927],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126876,126877,126878,126881],{},"③",[25,126879,126880],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1727,126883],{"style":126621,"src":126884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126886,126887],{},"3行20列",[351,126889,126891,126892,102906],{"id":126890},"_55-lable标签","5.5 ",[25,126893,126894],{},"\u003Clable>",[14,126896,126897,126898,126900,126901,126903],{},"它不是表单标签，但常常与表单标签搭配使用，",[25,126899,126894],{},"标签用于绑定一个表单标签，当点击",[25,126902,126894],{},"标签内的文本",[14,126905,126906],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1727,126908],{"style":126621,"src":126909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1727,126911],{"style":126621,"src":126912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[351,126914,126916],{"id":126915},"_56-实例","5.6 实例",[1727,126918],{"style":126621,"src":126919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[328,126921,126922],{},"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":23,"searchDepth":48,"depth":48,"links":126924},[126925,126926,126927,126928,126929,126931],{"id":126646,"depth":48,"text":126647},{"id":126703,"depth":48,"text":126704},{"id":126725,"depth":48,"text":126726},{"id":126795,"depth":48,"text":126796},{"id":126890,"depth":48,"text":126930},"5.5 \u003Clable>标签",{"id":126915,"depth":48,"text":126916},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126638,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126938,"title":126939,"body":126940,"description":333,"extension":334,"meta":127489,"navigation":336,"path":127490,"seo":127491,"stem":127492,"__hash__":127493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126941,"toc":127464},[126942,126945,126949,126952,126955,126959,126962,126965,126968,126971,126974,126977,126980,126984,126987,126991,126994,126997,127000,127004,127007,127010,127013,127019,127022,127025,127028,127031,127034,127037,127040,127073,127077,127080,127083,127086,127090,127093,127096,127099,127102,127105,127109,127112,127115,127118,127122,127125,127129,127132,127136,127139,127144,127148,127151,127155,127158,127161,127164,127167,127194,127197,127201,127204,127207,127212,127215,127218,127222,127225,127230,127233,127236,127239,127243,127246,127249,127252,127256,127259,127262,127265,127269,127273,127276,127316,127319,127323,127330,127333,127337,127340,127386,127390,127393,127396,127399,127427,127431,127434,127461],[10,126943,126939],{"id":126944},"_6-css语法与文本样式",[351,126946,126948],{"id":126947},"_61-css语法规范","6.1 css语法规范",[14,126950,126951],{},"由两部分组成，选择器及一条或多条声明",[1727,126953],{"style":126621,"src":126954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126956,126957],{},[555,126958,441],{},[14,126960,126961],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126963,126964],{},"②属性与属性值以“键值对”的形式出现",[14,126966,126967],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126969,126970],{},"④属性和属性值之间用英文“;”分开",[1727,126972],{"style":126621,"src":126973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1727,126975],{"style":126621,"src":126976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1727,126978],{"style":126621,"src":126979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[351,126981,126983],{"id":126982},"_62-css选择器","6.2 css选择器",[14,126985,126986],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[380,126988,126990],{"id":126989},"_621-标签选择器","6.2.1 标签选择器",[14,126992,126993],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126995,126996],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1727,126998],{"style":126621,"src":126999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[380,127001,127003],{"id":127002},"_622-类选择器","6.2.2 类选择器",[14,127005,127006],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127008,127009],{},"②样例",[1727,127011],{"style":126621,"src":127012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127014,127015,127016,127018],{},"③ ",[555,127017,126853],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127020,127021],{},"可以理解为给这个标签起了个名字，来表示；",[14,127023,127024],{},"长名称或词组可以使用横线来为选择器命名；",[14,127026,127027],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127029,127030],{},"命名要有意义；",[1727,127032],{"style":126621,"src":127033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127035,127036],{},"类选择器也可以指定特殊的元素p.center{}",[14,127038,127039],{},"p.center和.center都对",[18,127041,127043],{"className":126765,"code":127042,"language":126767,"meta":23,"style":23},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[25,127044,127045,127050,127059,127069],{"__ignoreMap":23},[28,127046,127047],{"class":30,"line":31},[28,127048,127049],{"class":87},"\u002F* 类选择器指定特殊元素 *\u002F\n",[28,127051,127052,127054,127057],{"class":30,"line":48},[28,127053,14],{"class":51556},[28,127055,127056],{"class":2225},".center",[28,127058,15834],{"class":38},[28,127060,127061,127063,127065,127067],{"class":30,"line":84},[28,127062,70782],{"class":60},[28,127064,51693],{"class":38},[28,127066,51848],{"class":60},[28,127068,1558],{"class":38},[28,127070,127071],{"class":30,"line":91},[28,127072,1830],{"class":38},[380,127074,127076],{"id":127075},"_623-多类名使用","6.2.3 多类名使用",[14,127078,127079],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1727,127081],{"style":126621,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127084,127085],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[380,127087,127089],{"id":127088},"_624-id选择器","6.2.4 id选择器",[14,127091,127092],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127094,127095],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1727,127097],{"style":126621,"src":127098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127100,127101],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127103,127104],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[380,127106,127108],{"id":127107},"_625-通配符选择器","6.2.5 通配符选择器",[14,127110,127111],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127113,127114],{},"* {",[14,127116,127117],{},"color=\"red\"}",[380,127119,127121],{"id":127120},"_626-总结","6.2.6 总结",[1727,127123],{"style":126621,"src":127124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[351,127126,127128],{"id":127127},"_63-css字体属性","6.3 css字体属性",[14,127130,127131],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[380,127133,127135],{"id":127134},"_631-字体系列","6.3.1 字体系列",[14,127137,127138],{},"font-family: '宋体';",[14,127140,127141,127143],{},[555,127142,441],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[380,127145,127147],{"id":127146},"_632-字体大小","6.3.2 字体大小",[14,127149,127150],{},"font-size: 20px",[14,127152,127153,26736],{},[555,127154,126853],{},[14,127156,127157],{},"①px（像素）大小是网页的最常用单位",[14,127159,127160],{},"②谷歌浏览器默认为16px",[14,127162,127163],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127165,127166],{},"④可以给body指定整个页面的大小：会自动引用",[18,127168,127170],{"className":126765,"code":127169,"language":126767,"meta":23,"style":23},"body {\n  font-size: 16px;\n}\n",[25,127171,127172,127178,127190],{"__ignoreMap":23},[28,127173,127174,127176],{"class":30,"line":31},[28,127175,52056],{"class":51556},[28,127177,15834],{"class":38},[28,127179,127180,127182,127184,127186,127188],{"class":30,"line":48},[28,127181,70882],{"class":60},[28,127183,51693],{"class":38},[28,127185,999],{"class":60},[28,127187,51748],{"class":34},[28,127189,1558],{"class":38},[28,127191,127192],{"class":30,"line":84},[28,127193,1830],{"class":38},[14,127195,127196],{},"⑤标题标签比较特殊，需要单独指定大小",[380,127198,127200],{"id":127199},"_633-字体粗细","6.3.3 字体粗细",[14,127202,127203],{},"font-weight: bold;",[14,127205,127206],{},"font-weight: 100；",[14,127208,127209,127211],{},[555,127210,441],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127213,127214],{},"font-weight= 400;",[14,127216,127217],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[380,127219,127221],{"id":127220},"_634-文字样式","6.3.4 文字样式",[14,127223,127224],{},"font-style: normal；",[14,127226,127227,26736],{},[555,127228,127229],{},"属性值",[14,127231,127232],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127234,127235],{},"②italic：浏览器会显示斜体的字体样式",[1727,127237],{"style":126621,"src":127238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[380,127240,127242],{"id":127241},"_635-字体符合属性","6.3.5 字体符合属性",[1727,127244],{"style":126621,"src":127245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1727,127247],{"style":126621,"src":127248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127250,127251],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127253,127254,26736],{},[555,127255,126853],{},[14,127257,127258],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127260,127261],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127263,127264],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[351,127266,127268],{"id":127267},"_64-css-test文本属性","6.4 css test文本属性",[380,127270,127272],{"id":127271},"_641-文本颜色","6.4.1 文本颜色",[14,127274,127275],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[18,127277,127279],{"className":126765,"code":127278,"language":126767,"meta":23,"style":23},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[25,127280,127281,127286,127292,127302,127307,127312],{"__ignoreMap":23},[28,127282,127283],{"class":30,"line":31},[28,127284,127285],{"class":87},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[28,127287,127288,127290],{"class":30,"line":48},[28,127289,14],{"class":51556},[28,127291,15834],{"class":38},[28,127293,127294,127296,127298,127300],{"class":30,"line":84},[28,127295,71161],{"class":60},[28,127297,51693],{"class":38},[28,127299,57677],{"class":60},[28,127301,1558],{"class":38},[28,127303,127304],{"class":30,"line":91},[28,127305,127306],{"class":87},"  \u002F* color: #ff0000; *\u002F\n",[28,127308,127309],{"class":30,"line":97},[28,127310,127311],{"class":87},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[28,127313,127314],{"class":30,"line":103},[28,127315,1830],{"class":38},[1727,127317],{"style":126621,"src":127318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[380,127320,127322],{"id":127321},"_642-对齐文本","6.4.2 对齐文本",[14,127324,127325,127326,127329],{},"text-align属于用于设置元素内文本内容的 ",[555,127327,127328],{},"水平对齐"," 方式",[14,127331,127332],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[380,127334,127336],{"id":127335},"_643-装饰文本","6.4.3 装饰文本",[14,127338,127339],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[18,127341,127343],{"className":126765,"code":127342,"language":126767,"meta":23,"style":23},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[25,127344,127345,127351,127361,127365,127371,127382],{"__ignoreMap":23},[28,127346,127347,127349],{"class":30,"line":31},[28,127348,51],{"class":51556},[28,127350,15834],{"class":38},[28,127352,127353,127355,127357,127359],{"class":30,"line":48},[28,127354,70758],{"class":60},[28,127356,51693],{"class":38},[28,127358,54993],{"class":60},[28,127360,1558],{"class":38},[28,127362,127363],{"class":30,"line":84},[28,127364,1830],{"class":38},[28,127366,127367,127369],{"class":30,"line":91},[28,127368,14],{"class":51556},[28,127370,15834],{"class":38},[28,127372,127373,127375,127377,127380],{"class":30,"line":97},[28,127374,70758],{"class":60},[28,127376,51693],{"class":38},[28,127378,127379],{"class":60},"underline",[28,127381,1558],{"class":38},[28,127383,127384],{"class":30,"line":103},[28,127385,1830],{"class":38},[380,127387,127389],{"id":127388},"_644-文本缩进","6.4.4 文本缩进",[14,127391,127392],{},"实现文本的第一行首行缩进自己指定的距离",[14,127394,127395],{},"20px往右边走；-20px往左边走",[14,127397,127398],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[18,127400,127402],{"className":126765,"code":127401,"language":126767,"meta":23,"style":23},"p {\n  text-indent: 2em;\n}\n",[25,127403,127404,127410,127423],{"__ignoreMap":23},[28,127405,127406,127408],{"class":30,"line":31},[28,127407,14],{"class":51556},[28,127409,15834],{"class":38},[28,127411,127412,127415,127417,127419,127421],{"class":30,"line":48},[28,127413,127414],{"class":60},"  text-indent",[28,127416,51693],{"class":38},[28,127418,211],{"class":60},[28,127420,23815],{"class":34},[28,127422,1558],{"class":38},[28,127424,127425],{"class":30,"line":84},[28,127426,1830],{"class":38},[380,127428,127430],{"id":127429},"_645-行间距","6.4.5 行间距",[14,127432,127433],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[18,127435,127437],{"className":126765,"code":127436,"language":126767,"meta":23,"style":23},"p {\n  line-height: 1.6;\n}\n",[25,127438,127439,127445,127457],{"__ignoreMap":23},[28,127440,127441,127443],{"class":30,"line":31},[28,127442,14],{"class":51556},[28,127444,15834],{"class":38},[28,127446,127447,127450,127452,127455],{"class":30,"line":48},[28,127448,127449],{"class":60},"  line-height",[28,127451,51693],{"class":38},[28,127453,127454],{"class":60},"1.6",[28,127456,1558],{"class":38},[28,127458,127459],{"class":30,"line":84},[28,127460,1830],{"class":38},[328,127462,127463],{},"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":23,"searchDepth":48,"depth":48,"links":127465},[127466,127467,127475,127482],{"id":126947,"depth":48,"text":126948},{"id":126982,"depth":48,"text":126983,"children":127468},[127469,127470,127471,127472,127473,127474],{"id":126989,"depth":84,"text":126990},{"id":127002,"depth":84,"text":127003},{"id":127075,"depth":84,"text":127076},{"id":127088,"depth":84,"text":127089},{"id":127107,"depth":84,"text":127108},{"id":127120,"depth":84,"text":127121},{"id":127127,"depth":48,"text":127128,"children":127476},[127477,127478,127479,127480,127481],{"id":127134,"depth":84,"text":127135},{"id":127146,"depth":84,"text":127147},{"id":127199,"depth":84,"text":127200},{"id":127220,"depth":84,"text":127221},{"id":127241,"depth":84,"text":127242},{"id":127267,"depth":48,"text":127268,"children":127483},[127484,127485,127486,127487,127488],{"id":127271,"depth":84,"text":127272},{"id":127321,"depth":84,"text":127322},{"id":127335,"depth":84,"text":127336},{"id":127388,"depth":84,"text":127389},{"id":127429,"depth":84,"text":127430},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126939,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127495,"title":127496,"body":127497,"description":333,"extension":334,"meta":128146,"navigation":336,"path":128147,"seo":128148,"stem":128149,"__hash__":128150},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127498,"toc":128127},[127499,127502,127506,127510,127570,127574,127584,127587,127590,127594,127619,127623,127626,127629,127632,127635,127638,127642,127645,127648,127690,127693,127719,127725,127728,127732,127736,127742,127745,127748,127751,127754,127757,127760,127805,127809,127812,127815,127819,127823,127852,127855,127860,127863,127866,127869,127872,127876,127880,127883,127885,127888,127892,127895,127899,127902,127905,127908,127912,127916,127922,127932,127935,127938,127941,127944,127947,128070,128078,128086,128124],[10,127500,127496],{"id":127501},"_7-css引入方式与选择器进阶",[351,127503,127505],{"id":127504},"_71-css引入方式","7.1 css引入方式",[380,127507,127509],{"id":127508},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[18,127511,127515],{"className":127512,"code":127513,"language":127514,"meta":23,"style":23},"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",[25,127516,127517,127525,127532,127544,127557,127562],{"__ignoreMap":23},[28,127518,127519,127521,127523],{"class":30,"line":31},[28,127520,1307],{"class":38},[28,127522,328],{"class":51556},[28,127524,51563],{"class":38},[28,127526,127527,127530],{"class":30,"line":48},[28,127528,127529],{"class":51556},"  h1",[28,127531,15834],{"class":38},[28,127533,127534,127537,127539,127542],{"class":30,"line":84},[28,127535,127536],{"class":60},"    color",[28,127538,51693],{"class":38},[28,127540,127541],{"class":60},"blue",[28,127543,1558],{"class":38},[28,127545,127546,127549,127551,127553,127555],{"class":30,"line":91},[28,127547,127548],{"class":60},"    font-size",[28,127550,51693],{"class":38},[28,127552,1198],{"class":60},[28,127554,51748],{"class":34},[28,127556,1558],{"class":38},[28,127558,127559],{"class":30,"line":97},[28,127560,127561],{"class":38},"  }\n",[28,127563,127564,127566,127568],{"class":30,"line":103},[28,127565,52041],{"class":38},[28,127567,328],{"class":51556},[28,127569,51563],{"class":38},[14,127571,127572,26736],{},[555,127573,126853],{},[14,127575,77482,127576,127579,127580,127583],{},[25,127577,127578],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[25,127581,127582],{},"\u003Chead>","标签中",[14,127585,127586],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127588,127589],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[380,127591,127593],{"id":127592},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[18,127595,127597],{"className":127512,"code":127596,"language":127514,"meta":23,"style":23},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[25,127598,127599],{"__ignoreMap":23},[28,127600,127601,127603,127605,127607,127609,127612,127615,127617],{"class":30,"line":31},[28,127602,1307],{"class":38},[28,127604,14],{"class":51556},[28,127606,62882],{"class":2225},[28,127608,54],{"class":38},[28,127610,127611],{"class":127},"\"color: red; font-size: 16px;\"",[28,127613,127614],{"class":38},">这是一个段落\u003C\u002F",[28,127616,14],{"class":51556},[28,127618,51563],{"class":38},[14,127620,127621,26736],{},[555,127622,126853],{},[14,127624,127625],{},"①style其实就是标签的属性",[14,127627,127628],{},"②在双引号中间，写法要符合css规范",[14,127630,127631],{},"③可以控制当前的标签设置样式",[14,127633,127634],{},"④书写繁琐，简单时才用",[14,127636,127637],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[380,127639,127641],{"id":127640},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127643,127644],{},"使用最多，单独建一个css文件，然后html引用",[14,127646,127647],{},"①css文件部分： style.css",[18,127649,127651],{"className":126765,"code":127650,"language":126767,"meta":23,"style":23},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[25,127652,127653,127658,127664,127674,127686],{"__ignoreMap":23},[28,127654,127655],{"class":30,"line":31},[28,127656,127657],{"class":87},"\u002F* style.css *\u002F\n",[28,127659,127660,127662],{"class":30,"line":48},[28,127661,10],{"class":51556},[28,127663,15834],{"class":38},[28,127665,127666,127668,127670,127672],{"class":30,"line":84},[28,127667,71161],{"class":60},[28,127669,51693],{"class":38},[28,127671,127541],{"class":60},[28,127673,1558],{"class":38},[28,127675,127676,127678,127680,127682,127684],{"class":30,"line":91},[28,127677,70882],{"class":60},[28,127679,51693],{"class":38},[28,127681,1198],{"class":60},[28,127683,51748],{"class":34},[28,127685,1558],{"class":38},[28,127687,127688],{"class":30,"line":97},[28,127689,1830],{"class":38},[14,127691,127692],{},"②html部分",[18,127694,127696],{"className":127512,"code":127695,"language":127514,"meta":23,"style":23},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[25,127697,127698],{"__ignoreMap":23},[28,127699,127700,127702,127704,127706,127708,127710,127712,127714,127717],{"class":30,"line":31},[28,127701,1307],{"class":38},[28,127703,69261],{"class":51556},[28,127705,69264],{"class":2225},[28,127707,54],{"class":38},[28,127709,69269],{"class":127},[28,127711,61313],{"class":2225},[28,127713,54],{"class":38},[28,127715,127716],{"class":127},"\"style.css\"",[28,127718,51563],{"class":38},[14,127720,127721,127724],{},[25,127722,127723],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127726,127727],{},"ctrl+0回到页面原来大小",[351,127729,127731],{"id":127730},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[380,127733,127735],{"id":127734},"_721-快速生成html","7.2.1 快速生成html",[14,127737,127738,127739],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[25,127740,127741],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127743,127744],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127746,127747],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127749,127750],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127752,127753],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127755,127756],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127758,127759],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[18,127761,127763],{"className":127512,"code":127762,"language":127514,"meta":23,"style":23},"\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",[25,127764,127765,127770,127775,127780,127785,127790,127795,127800],{"__ignoreMap":23},[28,127766,127767],{"class":30,"line":31},[28,127768,127769],{"class":87},"\u003C!-- Emmet 语法示例 -->\n",[28,127771,127772],{"class":30,"line":48},[28,127773,127774],{"class":87},"\u003C!-- div*3        → 生成3个div -->\n",[28,127776,127777],{"class":30,"line":84},[28,127778,127779],{"class":87},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[28,127781,127782],{"class":30,"line":91},[28,127783,127784],{"class":87},"\u003C!-- div+p        → 兄弟div和p -->\n",[28,127786,127787],{"class":30,"line":97},[28,127788,127789],{"class":87},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[28,127791,127792],{"class":30,"line":103},[28,127793,127794],{"class":87},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[28,127796,127797],{"class":30,"line":109},[28,127798,127799],{"class":87},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[28,127801,127802],{"class":30,"line":118},[28,127803,127804],{"class":87},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[380,127806,127808],{"id":127807},"_722-快速生成css","7.2.2 快速生成css",[14,127810,127811],{},"简写开头",[14,127813,127814],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[351,127816,127818],{"id":127817},"_73-css复合选择器","7.3 css复合选择器",[380,127820,127822],{"id":127821},"_731-后代选择器","7.3.1 后代选择器",[18,127824,127826],{"className":126765,"code":127825,"language":126767,"meta":23,"style":23},".parent .child {\n  color: blue;\n}\n",[25,127827,127828,127838,127848],{"__ignoreMap":23},[28,127829,127830,127833,127836],{"class":30,"line":31},[28,127831,127832],{"class":2225},".parent",[28,127834,127835],{"class":2225}," .child",[28,127837,15834],{"class":38},[28,127839,127840,127842,127844,127846],{"class":30,"line":48},[28,127841,71161],{"class":60},[28,127843,51693],{"class":38},[28,127845,127541],{"class":60},[28,127847,1558],{"class":38},[28,127849,127850],{"class":30,"line":84},[28,127851,1830],{"class":38},[14,127853,127854],{},"元素1 元素2 {样式声明}",[14,127856,127857],{},[555,127858,127859],{},"注意点:",[14,127861,127862],{},"①元素1和元素2中间用空格隔开",[14,127864,127865],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127867,127868],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127870,127871],{},"④元素1和元素2可以是任意基础选择器",[380,127873,127875],{"id":127874},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127877,127878],{},[555,127879,127859],{},[14,127881,127882],{},"①元素1和元素2中间用大于号隔开",[14,127884,127865],{},[14,127886,127887],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[380,127889,127891],{"id":127890},"_733-并集选择器","7.3.3 并集选择器",[14,127893,127894],{},"元素1，元素2 {样式声明}",[14,127896,127897],{},[555,127898,127859],{},[14,127900,127901],{},"①元素1和元素2中间用逗号隔开",[14,127903,127904],{},"②逗号可以理解为和的意思",[14,127906,127907],{},"③并集选择器通常用于集体声明",[380,127909,127911],{"id":127910},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127913,127914],{},[555,127915,127859],{},[14,127917,127918,127919,127921],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69261,127920],{},"－:visited－:hover－:active。",[14,127923,127924,127925,127928,127929,26003],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127926,127927],"hover",{}," 、 ",[127930,127931],"first-child",{},[14,127933,127934],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127936,127937],{},"link对没访问的进行设置",[14,127939,127940],{},"vistied对已访问的进行改变",[14,127942,127943],{},"hover鼠标经过就会变",[14,127945,127946],{},"active常按(点)就会变",[18,127948,127950],{"className":126765,"code":127949,"language":126767,"meta":23,"style":23},"\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",[25,127951,127952,127957,127966,127976,127986,127990,127999,128010,128014,128022,128032,128042,128046,128055,128066],{"__ignoreMap":23},[28,127953,127954],{"class":30,"line":31},[28,127955,127956],{"class":87},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[28,127958,127959,127961,127964],{"class":30,"line":48},[28,127960,51],{"class":51556},[28,127962,127963],{"class":2225},":link",[28,127965,15834],{"class":38},[28,127967,127968,127970,127972,127974],{"class":30,"line":84},[28,127969,71161],{"class":60},[28,127971,51693],{"class":38},[28,127973,62625],{"class":60},[28,127975,1558],{"class":38},[28,127977,127978,127980,127982,127984],{"class":30,"line":91},[28,127979,70758],{"class":60},[28,127981,51693],{"class":38},[28,127983,54993],{"class":60},[28,127985,1558],{"class":38},[28,127987,127988],{"class":30,"line":97},[28,127989,1830],{"class":38},[28,127991,127992,127994,127997],{"class":30,"line":103},[28,127993,51],{"class":51556},[28,127995,127996],{"class":2225},":visited",[28,127998,15834],{"class":38},[28,128000,128001,128003,128005,128008],{"class":30,"line":109},[28,128002,71161],{"class":60},[28,128004,51693],{"class":38},[28,128006,128007],{"class":60},"purple",[28,128009,1558],{"class":38},[28,128011,128012],{"class":30,"line":118},[28,128013,1830],{"class":38},[28,128015,128016,128018,128020],{"class":30,"line":124},[28,128017,51],{"class":51556},[28,128019,61196],{"class":2225},[28,128021,15834],{"class":38},[28,128023,128024,128026,128028,128030],{"class":30,"line":131},[28,128025,71161],{"class":60},[28,128027,51693],{"class":38},[28,128029,55145],{"class":60},[28,128031,1558],{"class":38},[28,128033,128034,128036,128038,128040],{"class":30,"line":137},[28,128035,70758],{"class":60},[28,128037,51693],{"class":38},[28,128039,127379],{"class":60},[28,128041,1558],{"class":38},[28,128043,128044],{"class":30,"line":143},[28,128045,1830],{"class":38},[28,128047,128048,128050,128053],{"class":30,"line":149},[28,128049,51],{"class":51556},[28,128051,128052],{"class":2225},":active",[28,128054,15834],{"class":38},[28,128056,128057,128059,128061,128064],{"class":30,"line":1890},[28,128058,71161],{"class":60},[28,128060,51693],{"class":38},[28,128062,128063],{"class":60},"green",[28,128065,1558],{"class":38},[28,128067,128068],{"class":30,"line":1904},[28,128069,1830],{"class":38},[380,128071,128073,128074,128077],{"id":128072},"_735-伪类选择器","7.3.5 ",[128075,128076],"focus",{},"伪类选择器",[14,128079,128080,128082,128083,128085],{},[128075,128081],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[25,128084,126826],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[18,128087,128089],{"className":126765,"code":128088,"language":126767,"meta":23,"style":23},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[25,128090,128091,128099,128110,128120],{"__ignoreMap":23},[28,128092,128093,128095,128097],{"class":30,"line":31},[28,128094,54077],{"class":51556},[28,128096,62156],{"class":2225},[28,128098,15834],{"class":38},[28,128100,128101,128104,128106,128108],{"class":30,"line":48},[28,128102,128103],{"class":60},"  border-color",[28,128105,51693],{"class":38},[28,128107,55145],{"class":60},[28,128109,1558],{"class":38},[28,128111,128112,128114,128116,128118],{"class":30,"line":84},[28,128113,71054],{"class":60},[28,128115,51693],{"class":38},[28,128117,54993],{"class":60},[28,128119,1558],{"class":38},[28,128121,128122],{"class":30,"line":91},[28,128123,1830],{"class":38},[328,128125,128126],{},"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":23,"searchDepth":48,"depth":48,"links":128128},[128129,128134,128138],{"id":127504,"depth":48,"text":127505,"children":128130},[128131,128132,128133],{"id":127508,"depth":84,"text":127509},{"id":127592,"depth":84,"text":127593},{"id":127640,"depth":84,"text":127641},{"id":127730,"depth":48,"text":127731,"children":128135},[128136,128137],{"id":127734,"depth":84,"text":127735},{"id":127807,"depth":84,"text":127808},{"id":127817,"depth":48,"text":127818,"children":128139},[128140,128141,128142,128143,128144],{"id":127821,"depth":84,"text":127822},{"id":127874,"depth":84,"text":127875},{"id":127890,"depth":84,"text":127891},{"id":127910,"depth":84,"text":127911},{"id":128072,"depth":84,"text":128145},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127496,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128152,"title":128153,"body":128154,"description":333,"extension":334,"meta":130077,"navigation":336,"path":130078,"seo":130079,"stem":130080,"__hash__":130081},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128155,"toc":130051},[128156,128159,128163,128172,128176,128202,128207,128210,128213,128216,128219,128223,128226,128236,128244,128248,128283,128288,128291,128294,128297,128300,128304,128307,128316,128320,128333,128338,128341,128344,128347,128351,128354,128358,128361,128416,128419,128450,128453,128507,128511,128514,128680,128803,128806,128809,128812,128815,128819,128822,128826,128829,128832,128836,128839,128870,128897,128925,128928,128932,128958,129001,129005,129099,129102,129129,129132,129135,129138,129141,129144,129147,129150,129153,129156,129160,129217,129244,129248,129296,129300,129341,129343,129346,129349,129352,129355,129359,129451,129454,129457,129460,129464,129587,129788,129792,129796,129799,129802,129805,129809,129812,129815,129840,129843,129846,129849,129852,129855,129859,129867,129929,129932,129990,129993,129996,129999,130002,130005,130008,130011,130048],[10,128157,128153],{"id":128158},"_8-css显示模式与背景特性",[351,128160,128162],{"id":128161},"_81-css元素显示模式","8.1 css元素显示模式",[14,128164,128165,128166,128168,128169,128171],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[25,128167,126376],{},"自己占一行，比如一行可以放多个",[25,128170,126379],{},"，HTML 元素一般分为块元素和行内元素两种类型",[380,128173,128175],{"id":128174},"_811-块元素","8.1.1 块元素",[14,128177,128178,128179,128181,128182,617,128185,617,128187,617,128189,617,128192,617,128195,128198,128199,128201],{},"常见的块元素有",[25,128180,126280],{},"~",[25,128183,128184],{},"\u003Ch6>",[25,128186,126306],{},[25,128188,126376],{},[25,128190,128191],{},"\u003Cul>",[25,128193,128194],{},"\u003Col>",[25,128196,128197],{},"\u003Cli>","等，其中 ",[25,128200,126376],{}," 标签是最典型的块元素",[14,128203,128204],{},[555,128205,128206],{},"块级元素的特点：",[14,128208,128209],{},"① 比较霸道，自己独占一行。",[14,128211,128212],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128214,128215],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128217,128218],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128220,128221],{},[555,128222,441],{},[14,128224,128225],{},"①文字类的元素内不能使用块级元素",[14,128227,77505,128228,128230,128231,128233,128234],{},[25,128229,126306],{}," 标签主要用于存放文字，因此 ",[25,128232,126306],{}," 里面不能放块级元素，特别是不能放",[25,128235,126376],{},[14,128237,128238,128239,128181,128241,128243],{},"⑥同理， ",[25,128240,126280],{},[25,128242,128184],{},"等都是文字类块级标签，里面也不能放其他块级元素",[380,128245,128247],{"id":128246},"_812-行内元素","8.1.2 行内元素",[14,128249,128250,128251,617,128253,617,128256,617,128259,617,128262,617,128265,617,128268,617,128271,617,128274,617,128277,128279,128280,128282],{},"常见的行内元素有 ",[25,128252,126538],{},[25,128254,128255],{},"\u003Cstrong>",[25,128257,128258],{},"\u003Cb>",[25,128260,128261],{},"\u003Cem>",[25,128263,128264],{},"\u003Ci>",[25,128266,128267],{},"\u003Cdel>",[25,128269,128270],{},"\u003Cs>",[25,128272,128273],{},"\u003Cins>",[25,128275,128276],{},"\u003Cu>",[25,128278,126379],{}," 等，其中 ",[25,128281,126379],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128284,128285],{},[555,128286,128287],{},"特点：",[14,128289,128290],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128292,128293],{},"② 高、宽直接设置是无效的。",[14,128295,128296],{},"③ 默认宽度就是它本身内容的宽度。",[14,128298,128299],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128301,128302],{},[555,128303,441],{},[14,128305,128306],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128308,128309,128310,128312,128313,128315],{},"②特殊情况链接 ",[25,128311,126538],{}," 里面可以放块级元素，但是给 ",[25,128314,126538],{}," 转换一下块级模式最安全",[380,128317,128319],{"id":128318},"_813-行内块元素","8.1.3 行内块元素",[14,128321,128322,128323,617,128326,617,128329,128332],{},"在行内元素中有几个特殊的标签 —— ",[25,128324,128325],{},"\u003Cimg \u002F>",[25,128327,128328],{},"\u003Cinput \u002F>",[25,128330,128331],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128334,128335],{},[555,128336,128337],{},"行内块元素的特点：",[14,128339,128340],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128342,128343],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128345,128346],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[380,128348,128350],{"id":128349},"_814-总结","8.1.4 总结",[1727,128352],{"style":126621,"src":128353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[380,128355,128357],{"id":128356},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128359,128360],{},"①转换为块元素：display:block;",[18,128362,128364],{"className":126765,"code":128363,"language":126767,"meta":23,"style":23},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[25,128365,128366,128371,128377,128388,128400,128412],{"__ignoreMap":23},[28,128367,128368],{"class":30,"line":31},[28,128369,128370],{"class":87},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[28,128372,128373,128375],{"class":30,"line":48},[28,128374,51],{"class":51556},[28,128376,15834],{"class":38},[28,128378,128379,128382,128384,128386],{"class":30,"line":84},[28,128380,128381],{"class":60},"  display",[28,128383,51693],{"class":38},[28,128385,61125],{"class":60},[28,128387,1558],{"class":38},[28,128389,128390,128392,128394,128396,128398],{"class":30,"line":91},[28,128391,70824],{"class":60},[28,128393,51693],{"class":38},[28,128395,713],{"class":60},[28,128397,51748],{"class":34},[28,128399,1558],{"class":38},[28,128401,128402,128404,128406,128408,128410],{"class":30,"line":97},[28,128403,71044],{"class":60},[28,128405,51693],{"class":38},[28,128407,800],{"class":60},[28,128409,51748],{"class":34},[28,128411,1558],{"class":38},[28,128413,128414],{"class":30,"line":103},[28,128415,1830],{"class":38},[14,128417,128418],{},"②转换为行内元素：display:inline;",[18,128420,128422],{"className":126765,"code":128421,"language":126767,"meta":23,"style":23},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[25,128423,128424,128429,128435,128446],{"__ignoreMap":23},[28,128425,128426],{"class":30,"line":31},[28,128427,128428],{"class":87},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[28,128430,128431,128433],{"class":30,"line":48},[28,128432,51867],{"class":51556},[28,128434,15834],{"class":38},[28,128436,128437,128439,128441,128444],{"class":30,"line":84},[28,128438,128381],{"class":60},[28,128440,51693],{"class":38},[28,128442,128443],{"class":60},"inline",[28,128445,1558],{"class":38},[28,128447,128448],{"class":30,"line":91},[28,128449,1830],{"class":38},[14,128451,128452],{},"③转换为行内块：display:inline-block;",[18,128454,128456],{"className":126765,"code":128455,"language":126767,"meta":23,"style":23},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[25,128457,128458,128463,128469,128479,128491,128503],{"__ignoreMap":23},[28,128459,128460],{"class":30,"line":31},[28,128461,128462],{"class":87},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[28,128464,128465,128467],{"class":30,"line":48},[28,128466,28],{"class":51556},[28,128468,15834],{"class":38},[28,128470,128471,128473,128475,128477],{"class":30,"line":84},[28,128472,128381],{"class":60},[28,128474,51693],{"class":38},[28,128476,72639],{"class":60},[28,128478,1558],{"class":38},[28,128480,128481,128483,128485,128487,128489],{"class":30,"line":91},[28,128482,70824],{"class":60},[28,128484,51693],{"class":38},[28,128486,1010],{"class":60},[28,128488,51748],{"class":34},[28,128490,1558],{"class":38},[28,128492,128493,128495,128497,128499,128501],{"class":30,"line":97},[28,128494,71044],{"class":60},[28,128496,51693],{"class":38},[28,128498,1348],{"class":60},[28,128500,51748],{"class":34},[28,128502,1558],{"class":38},[28,128504,128505],{"class":30,"line":103},[28,128506,1830],{"class":38},[380,128508,128510],{"id":128509},"_816-小米侧边栏","8.1.6 小米侧边栏",[1727,128512],{"style":126621,"src":128513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[18,128515,128517],{"className":127512,"code":128516,"language":127514,"meta":23,"style":23},"\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",[25,128518,128519,128524,128539,128558,128577,128596,128615,128634,128653,128672],{"__ignoreMap":23},[28,128520,128521],{"class":30,"line":31},[28,128522,128523],{"class":87},"\u003C!-- 小米侧边栏案例 -->\n",[28,128525,128526,128528,128530,128532,128534,128537],{"class":30,"line":48},[28,128527,1307],{"class":38},[28,128529,51867],{"class":51556},[28,128531,53742],{"class":2225},[28,128533,54],{"class":38},[28,128535,128536],{"class":127},"\"sidebar\"",[28,128538,51563],{"class":38},[28,128540,128541,128543,128545,128547,128549,128551,128554,128556],{"class":30,"line":84},[28,128542,52400],{"class":38},[28,128544,51],{"class":51556},[28,128546,61313],{"class":2225},[28,128548,54],{"class":38},[28,128550,61318],{"class":127},[28,128552,128553],{"class":38},">手机 电话卡\u003C\u002F",[28,128555,51],{"class":51556},[28,128557,51563],{"class":38},[28,128559,128560,128562,128564,128566,128568,128570,128573,128575],{"class":30,"line":91},[28,128561,52400],{"class":38},[28,128563,51],{"class":51556},[28,128565,61313],{"class":2225},[28,128567,54],{"class":38},[28,128569,61318],{"class":127},[28,128571,128572],{"class":38},">电视 盒子\u003C\u002F",[28,128574,51],{"class":51556},[28,128576,51563],{"class":38},[28,128578,128579,128581,128583,128585,128587,128589,128592,128594],{"class":30,"line":97},[28,128580,52400],{"class":38},[28,128582,51],{"class":51556},[28,128584,61313],{"class":2225},[28,128586,54],{"class":38},[28,128588,61318],{"class":127},[28,128590,128591],{"class":38},">笔记本 平板\u003C\u002F",[28,128593,51],{"class":51556},[28,128595,51563],{"class":38},[28,128597,128598,128600,128602,128604,128606,128608,128611,128613],{"class":30,"line":103},[28,128599,52400],{"class":38},[28,128601,51],{"class":51556},[28,128603,61313],{"class":2225},[28,128605,54],{"class":38},[28,128607,61318],{"class":127},[28,128609,128610],{"class":38},">出行 穿戴\u003C\u002F",[28,128612,51],{"class":51556},[28,128614,51563],{"class":38},[28,128616,128617,128619,128621,128623,128625,128627,128630,128632],{"class":30,"line":109},[28,128618,52400],{"class":38},[28,128620,51],{"class":51556},[28,128622,61313],{"class":2225},[28,128624,54],{"class":38},[28,128626,61318],{"class":127},[28,128628,128629],{"class":38},">智能 路由器\u003C\u002F",[28,128631,51],{"class":51556},[28,128633,51563],{"class":38},[28,128635,128636,128638,128640,128642,128644,128646,128649,128651],{"class":30,"line":118},[28,128637,52400],{"class":38},[28,128639,51],{"class":51556},[28,128641,61313],{"class":2225},[28,128643,54],{"class":38},[28,128645,61318],{"class":127},[28,128647,128648],{"class":38},">健康 儿童\u003C\u002F",[28,128650,51],{"class":51556},[28,128652,51563],{"class":38},[28,128654,128655,128657,128659,128661,128663,128665,128668,128670],{"class":30,"line":124},[28,128656,52400],{"class":38},[28,128658,51],{"class":51556},[28,128660,61313],{"class":2225},[28,128662,54],{"class":38},[28,128664,61318],{"class":127},[28,128666,128667],{"class":38},">耳机 音响\u003C\u002F",[28,128669,51],{"class":51556},[28,128671,51563],{"class":38},[28,128673,128674,128676,128678],{"class":30,"line":131},[28,128675,52041],{"class":38},[28,128677,51867],{"class":51556},[28,128679,51563],{"class":38},[18,128681,128683],{"className":126765,"code":128682,"language":126767,"meta":23,"style":23},".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",[25,128684,128685,128694,128704,128717,128729,128741,128753,128763,128774,128778,128788,128799],{"__ignoreMap":23},[28,128686,128687,128690,128692],{"class":30,"line":31},[28,128688,128689],{"class":2225},".sidebar",[28,128691,1663],{"class":51556},[28,128693,15834],{"class":38},[28,128695,128696,128698,128700,128702],{"class":30,"line":48},[28,128697,128381],{"class":60},[28,128699,51693],{"class":38},[28,128701,61125],{"class":60},[28,128703,1558],{"class":38},[28,128705,128706,128708,128710,128713,128715],{"class":30,"line":84},[28,128707,70824],{"class":60},[28,128709,51693],{"class":38},[28,128711,128712],{"class":60},"234",[28,128714,51748],{"class":34},[28,128716,1558],{"class":38},[28,128718,128719,128721,128723,128725,128727],{"class":30,"line":91},[28,128720,71044],{"class":60},[28,128722,51693],{"class":38},[28,128724,851],{"class":60},[28,128726,51748],{"class":34},[28,128728,1558],{"class":38},[28,128730,128731,128733,128735,128737,128739],{"class":30,"line":97},[28,128732,127449],{"class":60},[28,128734,51693],{"class":38},[28,128736,851],{"class":60},[28,128738,51748],{"class":34},[28,128740,1558],{"class":38},[28,128742,128743,128745,128747,128749,128751],{"class":30,"line":103},[28,128744,71079],{"class":60},[28,128746,51693],{"class":38},[28,128748,1348],{"class":60},[28,128750,51748],{"class":34},[28,128752,1558],{"class":38},[28,128754,128755,128757,128759,128761],{"class":30,"line":109},[28,128756,71161],{"class":60},[28,128758,51693],{"class":38},[28,128760,61098],{"class":60},[28,128762,1558],{"class":38},[28,128764,128765,128767,128769,128772],{"class":30,"line":118},[28,128766,71134],{"class":60},[28,128768,51693],{"class":38},[28,128770,128771],{"class":60},"#55585a",[28,128773,1558],{"class":38},[28,128775,128776],{"class":30,"line":124},[28,128777,1830],{"class":38},[28,128779,128780,128782,128784,128786],{"class":30,"line":131},[28,128781,128689],{"class":2225},[28,128783,1663],{"class":51556},[28,128785,61196],{"class":2225},[28,128787,15834],{"class":38},[28,128789,128790,128792,128794,128797],{"class":30,"line":137},[28,128791,71134],{"class":60},[28,128793,51693],{"class":38},[28,128795,128796],{"class":60},"#ff6700",[28,128798,1558],{"class":38},[28,128800,128801],{"class":30,"line":143},[28,128802,1830],{"class":38},[1727,128804],{"style":126621,"src":128805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128807,128808],{},"行高=盒子高度：实现文字的垂直居中",[14,128810,128811],{},"原理讲解：",[1727,128813],{"style":126621,"src":128814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[351,128816,128818],{"id":128817},"_82-css背景","8.2 css背景",[14,128820,128821],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[380,128823,128825],{"id":128824},"_821-背景颜色","8.2.1 背景颜色",[14,128827,128828],{},"background-color:颜色值;",[14,128830,128831],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[380,128833,128835],{"id":128834},"_822-背景图片","8.2.2 背景图片",[14,128837,128838],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[18,128840,128842],{"className":126765,"code":128841,"language":126767,"meta":23,"style":23},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[25,128843,128844,128850,128866],{"__ignoreMap":23},[28,128845,128846,128848],{"class":30,"line":31},[28,128847,51867],{"class":51556},[28,128849,15834],{"class":38},[28,128851,128852,128855,128857,128859,128861,128864],{"class":30,"line":48},[28,128853,128854],{"class":60},"  background-image",[28,128856,51693],{"class":38},[28,128858,61982],{"class":60},[28,128860,413],{"class":38},[28,128862,128863],{"class":5478},"images\u002Fbg.png",[28,128865,2981],{"class":38},[28,128867,128868],{"class":30,"line":84},[28,128869,1830],{"class":38},[543,128871,128872,128881],{},[546,128873,128874],{},[549,128875,128876,128879],{},[552,128877,128878],{"align":23998},"参数值",[552,128880,102909],{"align":23998},[590,128882,128883,128890],{},[549,128884,128885,128887],{},[595,128886,54993],{"align":23998},[595,128888,128889],{"align":23998},"无背景图（默认的）",[549,128891,128892,128894],{},[595,128893,61982],{"align":23998},[595,128895,128896],{"align":23998},"使用绝对或相对地址指定背景图像",[18,128898,128899],{"className":126765,"code":128841,"language":126767,"meta":23,"style":23},[25,128900,128901,128907,128921],{"__ignoreMap":23},[28,128902,128903,128905],{"class":30,"line":31},[28,128904,51867],{"class":51556},[28,128906,15834],{"class":38},[28,128908,128909,128911,128913,128915,128917,128919],{"class":30,"line":48},[28,128910,128854],{"class":60},[28,128912,51693],{"class":38},[28,128914,61982],{"class":60},[28,128916,413],{"class":38},[28,128918,128863],{"class":5478},[28,128920,2981],{"class":38},[28,128922,128923],{"class":30,"line":84},[28,128924,1830],{"class":38},[14,128926,128927],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[380,128929,128931],{"id":128930},"_823-背景平铺","8.2.3 背景平铺",[18,128933,128935],{"className":126765,"code":128934,"language":126767,"meta":23,"style":23},"div {\n  background-repeat: no-repeat;\n}\n",[25,128936,128937,128943,128954],{"__ignoreMap":23},[28,128938,128939,128941],{"class":30,"line":31},[28,128940,51867],{"class":51556},[28,128942,15834],{"class":38},[28,128944,128945,128948,128950,128952],{"class":30,"line":48},[28,128946,128947],{"class":60},"  background-repeat",[28,128949,51693],{"class":38},[28,128951,61992],{"class":60},[28,128953,1558],{"class":38},[28,128955,128956],{"class":30,"line":84},[28,128957,1830],{"class":38},[543,128959,128960,128968],{},[546,128961,128962],{},[549,128963,128964,128966],{},[552,128965,128878],{"align":23998},[552,128967,102909],{"align":23998},[590,128969,128970,128978,128985,128993],{},[549,128971,128972,128975],{},[595,128973,128974],{"align":23998},"repeat",[595,128976,128977],{"align":23998},"背景图像在纵向和横向上平铺（默认的）",[549,128979,128980,128982],{},[595,128981,61992],{"align":23998},[595,128983,128984],{"align":23998},"背景图像不平铺",[549,128986,128987,128990],{},[595,128988,128989],{"align":23998},"repeat-x",[595,128991,128992],{"align":23998},"背景图像在横向上平铺",[549,128994,128995,128998],{},[595,128996,128997],{"align":23998},"repeat-y",[595,128999,129000],{"align":23998},"背景图像在纵向平铺",[380,129002,129004],{"id":129003},"_824-背景图片位置","8.2.4 背景图片位置",[18,129006,129008],{"className":126765,"code":129007,"language":126767,"meta":23,"style":23},"\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",[25,129009,129010,129015,129021,129035,129039,129044,129050,129066,129070,129075,129081,129095],{"__ignoreMap":23},[28,129011,129012],{"class":30,"line":31},[28,129013,129014],{"class":87},"\u002F* 方位名词 *\u002F\n",[28,129016,129017,129019],{"class":30,"line":48},[28,129018,51867],{"class":51556},[28,129020,15834],{"class":38},[28,129022,129023,129026,129028,129030,129033],{"class":30,"line":84},[28,129024,129025],{"class":60},"  background-position",[28,129027,51693],{"class":38},[28,129029,51848],{"class":60},[28,129031,129032],{"class":60}," top",[28,129034,1558],{"class":38},[28,129036,129037],{"class":30,"line":91},[28,129038,1830],{"class":38},[28,129040,129041],{"class":30,"line":97},[28,129042,129043],{"class":87},"\u002F* 精确单位 *\u002F\n",[28,129045,129046,129048],{"class":30,"line":103},[28,129047,51867],{"class":51556},[28,129049,15834],{"class":38},[28,129051,129052,129054,129056,129058,129060,129062,129064],{"class":30,"line":109},[28,129053,129025],{"class":60},[28,129055,51693],{"class":38},[28,129057,1098],{"class":60},[28,129059,51748],{"class":34},[28,129061,57760],{"class":60},[28,129063,51748],{"class":34},[28,129065,1558],{"class":38},[28,129067,129068],{"class":30,"line":118},[28,129069,1830],{"class":38},[28,129071,129072],{"class":30,"line":124},[28,129073,129074],{"class":87},"\u002F* 混合单位 *\u002F\n",[28,129076,129077,129079],{"class":30,"line":131},[28,129078,51867],{"class":51556},[28,129080,15834],{"class":38},[28,129082,129083,129085,129087,129089,129091,129093],{"class":30,"line":137},[28,129084,129025],{"class":60},[28,129086,51693],{"class":38},[28,129088,1098],{"class":60},[28,129090,51748],{"class":34},[28,129092,17406],{"class":60},[28,129094,1558],{"class":38},[28,129096,129097],{"class":30,"line":143},[28,129098,1830],{"class":38},[14,129100,129101],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[543,129103,129104,129112],{},[546,129105,129106],{},[549,129107,129108,129110],{},[552,129109,128878],{"align":23998},[552,129111,26132],{"align":23998},[590,129113,129114,129121],{},[549,129115,129116,129118],{},[595,129117,52224],{"align":23998},[595,129119,129120],{"align":23998},"百分数|由浮点数和单位标识符组成的长度值",[549,129122,129123,129126],{},[595,129124,129125],{"align":23998},"position",[595,129127,129128],{"align":23998},"top|center|bottom|left|center|right 方位名词",[14,129130,129131],{},"其他说明：",[14,129133,129134],{},"①参数是方位名词",[14,129136,129137],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129139,129140],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129142,129143],{},"②参数是精确单位",[14,129145,129146],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129148,129149],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129151,129152],{},"③参数是混合单位",[14,129154,129155],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[380,129157,129159],{"id":129158},"_825-背景图片固定","8.2.5 背景图片固定",[18,129161,129163],{"className":126765,"code":129162,"language":126767,"meta":23,"style":23},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[25,129164,129165,129170,129176,129188,129192,129197,129203,129213],{"__ignoreMap":23},[28,129166,129167],{"class":30,"line":31},[28,129168,129169],{"class":87},"\u002F* 背景滚动（默认） *\u002F\n",[28,129171,129172,129174],{"class":30,"line":48},[28,129173,51867],{"class":51556},[28,129175,15834],{"class":38},[28,129177,129178,129181,129183,129186],{"class":30,"line":84},[28,129179,129180],{"class":60},"  background-attachment",[28,129182,51693],{"class":38},[28,129184,129185],{"class":60},"scroll",[28,129187,1558],{"class":38},[28,129189,129190],{"class":30,"line":91},[28,129191,1830],{"class":38},[28,129193,129194],{"class":30,"line":97},[28,129195,129196],{"class":87},"\u002F* 背景固定 *\u002F\n",[28,129198,129199,129201],{"class":30,"line":103},[28,129200,51867],{"class":51556},[28,129202,15834],{"class":38},[28,129204,129205,129207,129209,129211],{"class":30,"line":109},[28,129206,129180],{"class":60},[28,129208,51693],{"class":38},[28,129210,86489],{"class":60},[28,129212,1558],{"class":38},[28,129214,129215],{"class":30,"line":118},[28,129216,1830],{"class":38},[543,129218,129219,129228],{},[546,129220,129221],{},[549,129222,129223,129226],{},[552,129224,129225],{"align":23998},"参数",[552,129227,102909],{"align":23998},[590,129229,129230,129237],{},[549,129231,129232,129234],{},[595,129233,129185],{"align":23998},[595,129235,129236],{"align":23998},"背景图像是随对象内容滚动",[549,129238,129239,129241],{},[595,129240,86489],{"align":23998},[595,129242,129243],{"align":23998},"背景图像固定",[380,129245,129247],{"id":129246},"_826-背景样式合写","8.2.6 背景样式合写",[18,129249,129251],{"className":126765,"code":129250,"language":126767,"meta":23,"style":23},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[25,129252,129253,129258,129264,129292],{"__ignoreMap":23},[28,129254,129255],{"class":30,"line":31},[28,129256,129257],{"class":87},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[28,129259,129260,129262],{"class":30,"line":48},[28,129261,51867],{"class":51556},[28,129263,15834],{"class":38},[28,129265,129266,129268,129270,129272,129275,129277,129279,129281,129283,129286,129288,129290],{"class":30,"line":84},[28,129267,70867],{"class":60},[28,129269,51693],{"class":38},[28,129271,61098],{"class":60},[28,129273,129274],{"class":60}," url",[28,129276,413],{"class":38},[28,129278,128863],{"class":5478},[28,129280,13976],{"class":38},[28,129282,61992],{"class":60},[28,129284,129285],{"class":60}," fixed",[28,129287,17406],{"class":60},[28,129289,129032],{"class":60},[28,129291,1558],{"class":38},[28,129293,129294],{"class":30,"line":91},[28,129295,1830],{"class":38},[380,129297,129299],{"id":129298},"_827-背景色半透明","8.2.7 背景色半透明",[18,129301,129303],{"className":126765,"code":129302,"language":126767,"meta":23,"style":23},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[25,129304,129305,129311,129337],{"__ignoreMap":23},[28,129306,129307,129309],{"class":30,"line":31},[28,129308,51867],{"class":51556},[28,129310,15834],{"class":38},[28,129312,129313,129315,129317,129319,129321,129323,129325,129327,129329,129331,129333,129335],{"class":30,"line":48},[28,129314,70867],{"class":60},[28,129316,51693],{"class":38},[28,129318,55366],{"class":60},[28,129320,413],{"class":38},[28,129322,244],{"class":60},[28,129324,12697],{"class":38},[28,129326,244],{"class":60},[28,129328,12697],{"class":38},[28,129330,244],{"class":60},[28,129332,12697],{"class":38},[28,129334,100734],{"class":60},[28,129336,2981],{"class":38},[28,129338,129339],{"class":30,"line":84},[28,129340,1830],{"class":38},[14,129342,99609],{},[14,129344,129345],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129347,129348],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129350,129351],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129353,129354],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[380,129356,129358],{"id":129357},"_828-总结","8.2.8 总结",[543,129360,129361,129372],{},[546,129362,129363],{},[549,129364,129365,129368,129370],{},[552,129366,129367],{"align":23998},"属性",[552,129369,102909],{"align":23998},[552,129371,558],{"align":23998},[590,129373,129374,129385,129396,129407,129418,129429,129440],{},[549,129375,129376,129379,129382],{},[595,129377,129378],{"align":23998},"background-color",[595,129380,129381],{"align":23998},"背景颜色",[595,129383,129384],{"align":23998},"预定义的颜色值\u002F十六进制\u002FRGB代码",[549,129386,129387,129390,129393],{},[595,129388,129389],{"align":23998},"background-image",[595,129391,129392],{"align":23998},"背景图片",[595,129394,129395],{"align":23998},"url(图片路径)",[549,129397,129398,129401,129404],{},[595,129399,129400],{"align":23998},"background-repeat",[595,129402,129403],{"align":23998},"是否平铺",[595,129405,129406],{"align":23998},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[549,129408,129409,129412,129415],{},[595,129410,129411],{"align":23998},"background-position",[595,129413,129414],{"align":23998},"背景位置",[595,129416,129417],{"align":23998},"length\u002Fposition 分别是x和y坐标",[549,129419,129420,129423,129426],{},[595,129421,129422],{"align":23998},"background-attachment",[595,129424,129425],{"align":23998},"背景附着",[595,129427,129428],{"align":23998},"scroll(背景滚动) \u002Ffixed (背景固定)",[549,129430,129431,129434,129437],{},[595,129432,129433],{"align":23998},"背景简写",[595,129435,129436],{"align":23998},"书写更简单",[595,129438,129439],{"align":23998},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[549,129441,129442,129445,129448],{},[595,129443,129444],{"align":23998},"背景半透明",[595,129446,129447],{"align":23998},"背景颜色半透明",[595,129449,129450],{"align":23998},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129452,129453],{},"颜色渐变：",[1727,129455],{"style":126621,"src":129456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1727,129458],{"style":126621,"src":129459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[380,129461,129463],{"id":129462},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[18,129465,129467],{"className":127512,"code":129466,"language":127514,"meta":23,"style":23},"\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",[25,129468,129469,129484,129503,129522,129541,129560,129579],{"__ignoreMap":23},[28,129470,129471,129473,129475,129477,129479,129482],{"class":30,"line":31},[28,129472,1307],{"class":38},[28,129474,51867],{"class":51556},[28,129476,53742],{"class":2225},[28,129478,54],{"class":38},[28,129480,129481],{"class":127},"\"nav\"",[28,129483,51563],{"class":38},[28,129485,129486,129488,129490,129492,129494,129496,129499,129501],{"class":30,"line":48},[28,129487,52400],{"class":38},[28,129489,51],{"class":51556},[28,129491,61313],{"class":2225},[28,129493,54],{"class":38},[28,129495,61318],{"class":127},[28,129497,129498],{"class":38},">五彩导航1\u003C\u002F",[28,129500,51],{"class":51556},[28,129502,51563],{"class":38},[28,129504,129505,129507,129509,129511,129513,129515,129518,129520],{"class":30,"line":84},[28,129506,52400],{"class":38},[28,129508,51],{"class":51556},[28,129510,61313],{"class":2225},[28,129512,54],{"class":38},[28,129514,61318],{"class":127},[28,129516,129517],{"class":38},">五彩导航2\u003C\u002F",[28,129519,51],{"class":51556},[28,129521,51563],{"class":38},[28,129523,129524,129526,129528,129530,129532,129534,129537,129539],{"class":30,"line":91},[28,129525,52400],{"class":38},[28,129527,51],{"class":51556},[28,129529,61313],{"class":2225},[28,129531,54],{"class":38},[28,129533,61318],{"class":127},[28,129535,129536],{"class":38},">五彩导航3\u003C\u002F",[28,129538,51],{"class":51556},[28,129540,51563],{"class":38},[28,129542,129543,129545,129547,129549,129551,129553,129556,129558],{"class":30,"line":97},[28,129544,52400],{"class":38},[28,129546,51],{"class":51556},[28,129548,61313],{"class":2225},[28,129550,54],{"class":38},[28,129552,61318],{"class":127},[28,129554,129555],{"class":38},">五彩导航4\u003C\u002F",[28,129557,51],{"class":51556},[28,129559,51563],{"class":38},[28,129561,129562,129564,129566,129568,129570,129572,129575,129577],{"class":30,"line":103},[28,129563,52400],{"class":38},[28,129565,51],{"class":51556},[28,129567,61313],{"class":2225},[28,129569,54],{"class":38},[28,129571,61318],{"class":127},[28,129573,129574],{"class":38},">五彩导航5\u003C\u002F",[28,129576,51],{"class":51556},[28,129578,51563],{"class":38},[28,129580,129581,129583,129585],{"class":30,"line":109},[28,129582,52041],{"class":38},[28,129584,51867],{"class":51556},[28,129586,51563],{"class":38},[18,129588,129590],{"className":126765,"code":129589,"language":126767,"meta":23,"style":23},".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",[25,129591,129592,129601,129611,129623,129635,129645,129657,129667,129671,129696,129719,129742,129765],{"__ignoreMap":23},[28,129593,129594,129597,129599],{"class":30,"line":31},[28,129595,129596],{"class":2225},".nav",[28,129598,1663],{"class":51556},[28,129600,15834],{"class":38},[28,129602,129603,129605,129607,129609],{"class":30,"line":48},[28,129604,128381],{"class":60},[28,129606,51693],{"class":38},[28,129608,72639],{"class":60},[28,129610,1558],{"class":38},[28,129612,129613,129615,129617,129619,129621],{"class":30,"line":84},[28,129614,70824],{"class":60},[28,129616,51693],{"class":38},[28,129618,1215],{"class":60},[28,129620,51748],{"class":34},[28,129622,1558],{"class":38},[28,129624,129625,129627,129629,129631,129633],{"class":30,"line":91},[28,129626,71044],{"class":60},[28,129628,51693],{"class":38},[28,129630,1253],{"class":60},[28,129632,51748],{"class":34},[28,129634,1558],{"class":38},[28,129636,129637,129639,129641,129643],{"class":30,"line":97},[28,129638,70782],{"class":60},[28,129640,51693],{"class":38},[28,129642,51848],{"class":60},[28,129644,1558],{"class":38},[28,129646,129647,129649,129651,129653,129655],{"class":30,"line":103},[28,129648,127449],{"class":60},[28,129650,51693],{"class":38},[28,129652,1253],{"class":60},[28,129654,51748],{"class":34},[28,129656,1558],{"class":38},[28,129658,129659,129661,129663,129665],{"class":30,"line":109},[28,129660,71161],{"class":60},[28,129662,51693],{"class":38},[28,129664,61098],{"class":60},[28,129666,1558],{"class":38},[28,129668,129669],{"class":30,"line":118},[28,129670,1830],{"class":38},[28,129672,129673,129675,129677,129680,129682,129684,129687,129689,129691,129693],{"class":30,"line":124},[28,129674,129596],{"class":2225},[28,129676,1663],{"class":51556},[28,129678,129679],{"class":2225},":nth-child",[28,129681,413],{"class":38},[28,129683,61],{"class":60},[28,129685,129686],{"class":38},") { ",[28,129688,129378],{"class":60},[28,129690,51693],{"class":38},[28,129692,128796],{"class":60},[28,129694,129695],{"class":38},"; }\n",[28,129697,129698,129700,129702,129704,129706,129708,129710,129712,129714,129717],{"class":30,"line":131},[28,129699,129596],{"class":2225},[28,129701,1663],{"class":51556},[28,129703,129679],{"class":2225},[28,129705,413],{"class":38},[28,129707,211],{"class":60},[28,129709,129686],{"class":38},[28,129711,129378],{"class":60},[28,129713,51693],{"class":38},[28,129715,129716],{"class":60},"#ff0000",[28,129718,129695],{"class":38},[28,129720,129721,129723,129725,129727,129729,129731,129733,129735,129737,129740],{"class":30,"line":137},[28,129722,129596],{"class":2225},[28,129724,1663],{"class":51556},[28,129726,129679],{"class":2225},[28,129728,413],{"class":38},[28,129730,78],{"class":60},[28,129732,129686],{"class":38},[28,129734,129378],{"class":60},[28,129736,51693],{"class":38},[28,129738,129739],{"class":60},"#00a4ff",[28,129741,129695],{"class":38},[28,129743,129744,129746,129748,129750,129752,129754,129756,129758,129760,129763],{"class":30,"line":143},[28,129745,129596],{"class":2225},[28,129747,1663],{"class":51556},[28,129749,129679],{"class":2225},[28,129751,413],{"class":38},[28,129753,73],{"class":60},[28,129755,129686],{"class":38},[28,129757,129378],{"class":60},[28,129759,51693],{"class":38},[28,129761,129762],{"class":60},"#ff00ff",[28,129764,129695],{"class":38},[28,129766,129767,129769,129771,129773,129775,129777,129779,129781,129783,129786],{"class":30,"line":149},[28,129768,129596],{"class":2225},[28,129770,1663],{"class":51556},[28,129772,129679],{"class":2225},[28,129774,413],{"class":38},[28,129776,721],{"class":60},[28,129778,129686],{"class":38},[28,129780,129378],{"class":60},[28,129782,51693],{"class":38},[28,129784,129785],{"class":60},"#00ff00",[28,129787,129695],{"class":38},[351,129789,129791],{"id":129790},"_83-css三大特性","8.3 css三大特性",[380,129793,129795],{"id":129794},"_831-层叠性","8.3.1 层叠性",[14,129797,129798],{},"为了解决样式冲突问题",[14,129800,129801],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129803,129804],{},"   ②样式不冲突，不会层叠",[380,129806,129808],{"id":129807},"_832-继承性","8.3.2 继承性",[14,129810,129811],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129813,129814],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[18,129816,129818],{"className":126765,"code":129817,"language":126767,"meta":23,"style":23},"p {\n  color: #333;\n}\n",[25,129819,129820,129826,129836],{"__ignoreMap":23},[28,129821,129822,129824],{"class":30,"line":31},[28,129823,14],{"class":51556},[28,129825,15834],{"class":38},[28,129827,129828,129830,129832,129834],{"class":30,"line":48},[28,129829,71161],{"class":60},[28,129831,51693],{"class":38},[28,129833,62625],{"class":60},[28,129835,1558],{"class":38},[28,129837,129838],{"class":30,"line":84},[28,129839,1830],{"class":38},[1727,129841],{"style":126621,"src":129842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129844,129845],{},"解释：①行高可以跟单位也可以不跟单位",[14,129847,129848],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129850,129851],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129853,129854],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[380,129856,129858],{"id":129857},"_833-优先级","8.3.3 优先级",[363,129860,129861,129864],{},[366,129862,129863],{},"选择器相同，则执行层叠性",[366,129865,129866],{},"选择器不同，则根据选择器权重执行",[543,129868,129869,129879],{},[546,129870,129871],{},[549,129872,129873,129876],{},[552,129874,129875],{"align":23998},"选择器",[552,129877,129878],{"align":23998},"选择器权重",[590,129880,129881,129889,129897,129905,129913,129921],{},[549,129882,129883,129886],{},[595,129884,129885],{"align":23998},"继承 或者*",[595,129887,129888],{"align":23998},"0，0，0，0",[549,129890,129891,129894],{},[595,129892,129893],{"align":23998},"标签选择器",[595,129895,129896],{"align":23998},"0，0，0，1",[549,129898,129899,129902],{},[595,129900,129901],{"align":23998},"类选择器，伪类选择器",[595,129903,129904],{"align":23998},"0，0，1，0",[549,129906,129907,129910],{},[595,129908,129909],{"align":23998},"ID选择器",[595,129911,129912],{"align":23998},"0，1，0，0",[549,129914,129915,129918],{},[595,129916,129917],{"align":23998},"行内样式",[595,129919,129920],{"align":23998},"1，0，0，0",[549,129922,129923,129926],{},[595,129924,129925],{"align":23998},"！important",[595,129927,129928],{"align":23998},"无穷大",[14,129930,129931],{},"! important用法：",[18,129933,129935],{"className":126765,"code":129934,"language":126767,"meta":23,"style":23},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[25,129936,129937,129942,129948,129961,129965,129970,129976,129986],{"__ignoreMap":23},[28,129938,129939],{"class":30,"line":31},[28,129940,129941],{"class":87},"\u002F* !important 拥有最高优先级 *\u002F\n",[28,129943,129944,129946],{"class":30,"line":48},[28,129945,51867],{"class":51556},[28,129947,15834],{"class":38},[28,129949,129950,129952,129954,129956,129959],{"class":30,"line":84},[28,129951,71161],{"class":60},[28,129953,51693],{"class":38},[28,129955,51901],{"class":60},[28,129957,129958],{"class":34}," !important",[28,129960,1558],{"class":38},[28,129962,129963],{"class":30,"line":91},[28,129964,1830],{"class":38},[28,129966,129967],{"class":30,"line":97},[28,129968,129969],{"class":87},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[28,129971,129972,129974],{"class":30,"line":103},[28,129973,51867],{"class":51556},[28,129975,15834],{"class":38},[28,129977,129978,129980,129982,129984],{"class":30,"line":109},[28,129979,71161],{"class":60},[28,129981,51693],{"class":38},[28,129983,57677],{"class":60},[28,129985,1558],{"class":38},[28,129987,129988],{"class":30,"line":118},[28,129989,1830],{"class":38},[14,129991,129992],{},"优先级注意点：",[14,129994,129995],{},"①权重是有4组数字组成,但是不会有进位",[14,129997,129998],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130000,130001],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130003,130004],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130006,130007],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130009,130010],{},"⑥复合选择器",[543,130012,130013,130023],{},[546,130014,130015],{},[549,130016,130017,130020],{},[552,130018,130019],{"align":23998},"div ul li",[552,130021,130022],{"align":23998},"0,0,0,3",[590,130024,130025,130033,130041],{},[549,130026,130027,130030],{},[595,130028,130029],{"align":23998},".nav ul li",[595,130031,130032],{"align":23998},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[549,130034,130035,130038],{},[595,130036,130037],{"align":23998},"a:hover",[595,130039,130040],{"align":23998},"0,0,1,1",[549,130042,130043,130046],{},[595,130044,130045],{"align":23998},".nav a",[595,130047,130040],{"align":23998},[328,130049,130050],{},"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":23,"searchDepth":48,"depth":48,"links":130052},[130053,130061,130072],{"id":128161,"depth":48,"text":128162,"children":130054},[130055,130056,130057,130058,130059,130060],{"id":128174,"depth":84,"text":128175},{"id":128246,"depth":84,"text":128247},{"id":128318,"depth":84,"text":128319},{"id":128349,"depth":84,"text":128350},{"id":128356,"depth":84,"text":128357},{"id":128509,"depth":84,"text":128510},{"id":128817,"depth":48,"text":128818,"children":130062},[130063,130064,130065,130066,130067,130068,130069,130070,130071],{"id":128824,"depth":84,"text":128825},{"id":128834,"depth":84,"text":128835},{"id":128930,"depth":84,"text":128931},{"id":129003,"depth":84,"text":129004},{"id":129158,"depth":84,"text":129159},{"id":129246,"depth":84,"text":129247},{"id":129298,"depth":84,"text":129299},{"id":129357,"depth":84,"text":129358},{"id":129462,"depth":84,"text":129463},{"id":129790,"depth":48,"text":129791,"children":130073},[130074,130075,130076],{"id":129794,"depth":84,"text":129795},{"id":129807,"depth":84,"text":129808},{"id":129857,"depth":84,"text":129858},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128153,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130083,"title":130084,"body":130085,"description":333,"extension":334,"meta":131675,"navigation":336,"path":131676,"seo":131677,"stem":131678,"__hash__":131679},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130086,"toc":131654},[130087,130090,130094,130097,130100,130103,130106,130109,130112,130115,130119,130127,130164,130200,130203,130217,130222,130256,130259,130352,130357,130360,130390,130393,130398,130406,130410,130417,130463,130507,130512,130515,130518,130521,130524,130527,130530,130532,130535,130539,130544,130588,130593,130596,130599,130636,130641,130644,130647,130650,130653,130685,130688,130691,130694,130726,130729,130732,130735,130739,130742,130774,130777,130781,130801,130804,130812,130815,130819,130824,130827,130859,130864,130867,130905,130909,130914,130917,130920,130951,130954,130971,130976,131028,131088,131093,131147,131185,131189,131193,131196,131200,131208,131211,131213,131224,131229,131277,131311,131314,131317,131320,131323,131367,131370,131373,131376,131379,131382,131385,131429,131432,131435,131438,131441,131444,131447,131453,131456,131500,131503,131506,131509,131512,131515,131559,131562,131564,131567,131571,131575,131613,131617,131620,131623,131627,131635,131639,131642,131645,131648,131651],[10,130088,130084],{"id":130089},"_9-css盒模型浮动与切图",[351,130091,130093],{"id":130092},"_91-盒子模型","9.1 盒子模型",[14,130095,130096],{},"利用盒子来设计网页",[14,130098,130099],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130101,130102],{},"网页布局设置：",[14,130104,130105],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130107,130108],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130110,130111],{},"③往盒子里装内容",[1727,130113],{"style":126621,"src":130114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[380,130116,130118],{"id":130117},"_911-边框border","9.1.1 边框（border）",[363,130120,130121,130124],{},[366,130122,130123],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[366,130125,130126],{},"语法",[18,130128,130130],{"className":126765,"code":130129,"language":126767,"meta":23,"style":23},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[25,130131,130132,130137,130143,130160],{"__ignoreMap":23},[28,130133,130134],{"class":30,"line":31},[28,130135,130136],{"class":87},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[28,130138,130139,130141],{"class":30,"line":48},[28,130140,51867],{"class":51556},[28,130142,15834],{"class":38},[28,130144,130145,130147,130149,130151,130153,130155,130158],{"class":30,"line":84},[28,130146,71152],{"class":60},[28,130148,51693],{"class":38},[28,130150,61],{"class":60},[28,130152,51748],{"class":34},[28,130154,51777],{"class":60},[28,130156,130157],{"class":60}," #ccc",[28,130159,1558],{"class":38},[28,130161,130162],{"class":30,"line":91},[28,130163,1830],{"class":38},[543,130165,130166,130174],{},[546,130167,130168],{},[549,130169,130170,130172],{},[552,130171,129367],{"align":23998},[552,130173,102909],{"align":23998},[590,130175,130176,130184,130192],{},[549,130177,130178,130181],{},[595,130179,130180],{"align":23998},"border-width",[595,130182,130183],{"align":23998},"定义边框粗细，单位是px",[549,130185,130186,130189],{},[595,130187,130188],{"align":23998},"border-style",[595,130190,130191],{"align":23998},"边框的样式",[549,130193,130194,130197],{},[595,130195,130196],{"align":23998},"border-color",[595,130198,130199],{"align":23998},"边框的颜色",[14,130201,130202],{},"边框样式 border-style 可以设置如下值：",[1404,130204,130205,130208,130211,130214],{},[366,130206,130207],{},"none：没有边框即忽略所有边框的宽度（默认值）",[366,130209,130210],{},"solid：边框为单实线(最为常用的)",[366,130212,130213],{},"dashed：边框为虚线",[366,130215,130216],{},"dotted：边框为点线",[363,130218,130219],{"start":84},[366,130220,130221],{},"边框的合写分写",[18,130223,130224],{"className":126765,"code":130129,"language":126767,"meta":23,"style":23},[25,130225,130226,130230,130236,130252],{"__ignoreMap":23},[28,130227,130228],{"class":30,"line":31},[28,130229,130136],{"class":87},[28,130231,130232,130234],{"class":30,"line":48},[28,130233,51867],{"class":51556},[28,130235,15834],{"class":38},[28,130237,130238,130240,130242,130244,130246,130248,130250],{"class":30,"line":84},[28,130239,71152],{"class":60},[28,130241,51693],{"class":38},[28,130243,61],{"class":60},[28,130245,51748],{"class":34},[28,130247,51777],{"class":60},[28,130249,130157],{"class":60},[28,130251,1558],{"class":38},[28,130253,130254],{"class":30,"line":91},[28,130255,1830],{"class":38},[14,130257,130258],{},"边框分开写法：",[18,130260,130262],{"className":126765,"code":130261,"language":126767,"meta":23,"style":23},"\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",[25,130263,130264,130269,130275,130293,130311,130330,130348],{"__ignoreMap":23},[28,130265,130266],{"class":30,"line":31},[28,130267,130268],{"class":87},"\u002F* 边框分开写法 *\u002F\n",[28,130270,130271,130273],{"class":30,"line":48},[28,130272,51867],{"class":51556},[28,130274,15834],{"class":38},[28,130276,130277,130280,130282,130284,130286,130288,130291],{"class":30,"line":84},[28,130278,130279],{"class":60},"  border-top",[28,130281,51693],{"class":38},[28,130283,61],{"class":60},[28,130285,51748],{"class":34},[28,130287,51777],{"class":60},[28,130289,130290],{"class":60}," #000",[28,130292,1558],{"class":38},[28,130294,130295,130298,130300,130302,130304,130306,130309],{"class":30,"line":91},[28,130296,130297],{"class":60},"  border-right",[28,130299,51693],{"class":38},[28,130301,211],{"class":60},[28,130303,51748],{"class":34},[28,130305,62497],{"class":60},[28,130307,130308],{"class":60}," #333",[28,130310,1558],{"class":38},[28,130312,130313,130316,130318,130320,130322,130325,130328],{"class":30,"line":97},[28,130314,130315],{"class":60},"  border-bottom",[28,130317,51693],{"class":38},[28,130319,78],{"class":60},[28,130321,51748],{"class":34},[28,130323,130324],{"class":60}," dotted",[28,130326,130327],{"class":60}," #666",[28,130329,1558],{"class":38},[28,130331,130332,130335,130337,130339,130341,130343,130346],{"class":30,"line":103},[28,130333,130334],{"class":60},"  border-left",[28,130336,51693],{"class":38},[28,130338,61],{"class":60},[28,130340,51748],{"class":34},[28,130342,51777],{"class":60},[28,130344,130345],{"class":60}," #999",[28,130347,1558],{"class":38},[28,130349,130350],{"class":30,"line":109},[28,130351,1830],{"class":38},[363,130353,130354],{"start":91},[366,130355,130356],{},"表格的细线边框",[14,130358,130359],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[18,130361,130363],{"className":126765,"code":130362,"language":126767,"meta":23,"style":23},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[25,130364,130365,130370,130376,130386],{"__ignoreMap":23},[28,130366,130367],{"class":30,"line":31},[28,130368,130369],{"class":87},"\u002F* 表格细线边框合并 *\u002F\n",[28,130371,130372,130374],{"class":30,"line":48},[28,130373,543],{"class":51556},[28,130375,15834],{"class":38},[28,130377,130378,130380,130382,130384],{"class":30,"line":84},[28,130379,70834],{"class":60},[28,130381,51693],{"class":38},[28,130383,65291],{"class":60},[28,130385,1558],{"class":38},[28,130387,130388],{"class":30,"line":91},[28,130389,1830],{"class":38},[14,130391,130392],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[363,130394,130395],{"start":97},[366,130396,130397],{},"解决边框额外增加盒子的实际大小的方法：",[1404,130399,130400,130403],{},[366,130401,130402],{},"测量盒子大小的时候,不量边框",[366,130404,130405],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[380,130407,130409],{"id":130408},"_912-内边距","9.1.2 内边距",[363,130411,130412,130415],{},[366,130413,130414],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[366,130416,130126],{},[543,130418,130419,130429],{},[546,130420,130421],{},[549,130422,130423,130426],{},[552,130424,130425],{"align":23998},"值的个数",[552,130427,130428],{"align":23998},"表达意思",[590,130430,130431,130439,130447,130455],{},[549,130432,130433,130436],{},[595,130434,130435],{"align":23998},"padding: 5px;",[595,130437,130438],{"align":23998},"1个值，代表上下左右都有5个元素",[549,130440,130441,130444],{},[595,130442,130443],{"align":23998},"padding: 5px 10px;",[595,130445,130446],{"align":23998},"2个值，代表上下内边距为5像素，左右内边距为10像素",[549,130448,130449,130452],{},[595,130450,130451],{"align":23998},"padding: 5px 10px 20px;",[595,130453,130454],{"align":23998},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[549,130456,130457,130460],{},[595,130458,130459],{"align":23998},"padding: 5px 10px 20px 30px;",[595,130461,130462],{"align":23998},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[543,130464,130465,130473],{},[546,130466,130467],{},[549,130468,130469,130471],{},[552,130470,129367],{"align":23998},[552,130472,102909],{"align":23998},[590,130474,130475,130483,130491,130499],{},[549,130476,130477,130480],{},[595,130478,130479],{"align":23998},"padding-left",[595,130481,130482],{"align":23998},"左内边距",[549,130484,130485,130488],{},[595,130486,130487],{"align":23998},"padding-right",[595,130489,130490],{"align":23998},"右内边距",[549,130492,130493,130496],{},[595,130494,130495],{"align":23998},"padding-top",[595,130497,130498],{"align":23998},"上内边距",[549,130500,130501,130504],{},[595,130502,130503],{"align":23998},"padding-bottom",[595,130505,130506],{"align":23998},"下内边距",[363,130508,130509],{"start":84},[366,130510,130511],{},"内边距会影响盒子的实际大小",[14,130513,130514],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130516,130517],{},"①内容和边框有了距离，添加了内边距",[14,130519,130520],{},"②padding影响了盒子实际大小",[14,130522,130523],{},"内边距对盒子大小的影响：",[14,130525,130526],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130528,130529],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130531,95472],{},[14,130533,130534],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[380,130536,130538],{"id":130537},"_913-外边距","9.1.3 外边距",[363,130540,130541],{},[366,130542,130543],{},"控制盒子与盒子之间的距离",[543,130545,130546,130554],{},[546,130547,130548],{},[549,130549,130550,130552],{},[552,130551,129367],{"align":23998},[552,130553,102909],{"align":23998},[590,130555,130556,130564,130572,130580],{},[549,130557,130558,130561],{},[595,130559,130560],{"align":23998},"margin-left",[595,130562,130563],{"align":23998},"左外边距",[549,130565,130566,130569],{},[595,130567,130568],{"align":23998},"margin-right",[595,130570,130571],{"align":23998},"右外边距",[549,130573,130574,130577],{},[595,130575,130576],{"align":23998},"margin-top",[595,130578,130579],{"align":23998},"上外边距",[549,130581,130582,130585],{},[595,130583,130584],{"align":23998},"margin-bottom",[595,130586,130587],{"align":23998},"下外边距",[363,130589,130590],{"start":48},[366,130591,130592],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130594,130595],{},"①盒子必须指定了宽度（width）",[14,130597,130598],{},"②盒子左右的外边距都设置为 auto",[18,130600,130602],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,130603,130604,130609,130616,130632],{"__ignoreMap":23},[28,130605,130606],{"class":30,"line":31},[28,130607,130608],{"class":87},"\u002F* margin 复合写法（同上） *\u002F\n",[28,130610,130611,130614],{"class":30,"line":48},[28,130612,130613],{"class":2225},".box",[28,130615,15834],{"class":38},[28,130617,130618,130620,130622,130624,130626,130629],{"class":30,"line":84},[28,130619,70726],{"class":60},[28,130621,51693],{"class":38},[28,130623,244],{"class":60},[28,130625,51812],{"class":60},[28,130627,130628],{"class":38},";  ",[28,130630,130631],{"class":87},"\u002F* 块级盒子水平居中 *\u002F\n",[28,130633,130634],{"class":30,"line":91},[28,130635,1830],{"class":38},[363,130637,130638],{"start":84},[366,130639,130640],{},"外边距塌陷问题",[14,130642,130643],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1727,130645],{"style":126621,"src":130646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130648,130649],{},"解决方案：",[14,130651,130652],{},"①可以为父亲元素定义上边距",[18,130654,130655],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,130656,130657,130661,130667,130681],{"__ignoreMap":23},[28,130658,130659],{"class":30,"line":31},[28,130660,130608],{"class":87},[28,130662,130663,130665],{"class":30,"line":48},[28,130664,130613],{"class":2225},[28,130666,15834],{"class":38},[28,130668,130669,130671,130673,130675,130677,130679],{"class":30,"line":84},[28,130670,70726],{"class":60},[28,130672,51693],{"class":38},[28,130674,244],{"class":60},[28,130676,51812],{"class":60},[28,130678,130628],{"class":38},[28,130680,130631],{"class":87},[28,130682,130683],{"class":30,"line":91},[28,130684,1830],{"class":38},[14,130686,130687],{},"②可以为父亲元素定义上内边距",[14,130689,130690],{},"③可以为父亲元素添加overflow:hidden",[1727,130692],{"style":126621,"src":130693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[18,130695,130696],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,130697,130698,130702,130708,130722],{"__ignoreMap":23},[28,130699,130700],{"class":30,"line":31},[28,130701,130608],{"class":87},[28,130703,130704,130706],{"class":30,"line":48},[28,130705,130613],{"class":2225},[28,130707,15834],{"class":38},[28,130709,130710,130712,130714,130716,130718,130720],{"class":30,"line":84},[28,130711,70726],{"class":60},[28,130713,51693],{"class":38},[28,130715,244],{"class":60},[28,130717,51812],{"class":60},[28,130719,130628],{"class":38},[28,130721,130631],{"class":87},[28,130723,130724],{"class":30,"line":91},[28,130725,1830],{"class":38},[1727,130727],{"style":126621,"src":130728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130730,130731],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130733,130734],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[380,130736,130738],{"id":130737},"_914-清除内外边距","9.1.4 清除内外边距",[14,130740,130741],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[18,130743,130744],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,130745,130746,130750,130756,130770],{"__ignoreMap":23},[28,130747,130748],{"class":30,"line":31},[28,130749,130608],{"class":87},[28,130751,130752,130754],{"class":30,"line":48},[28,130753,130613],{"class":2225},[28,130755,15834],{"class":38},[28,130757,130758,130760,130762,130764,130766,130768],{"class":30,"line":84},[28,130759,70726],{"class":60},[28,130761,51693],{"class":38},[28,130763,244],{"class":60},[28,130765,51812],{"class":60},[28,130767,130628],{"class":38},[28,130769,130631],{"class":87},[28,130771,130772],{"class":30,"line":91},[28,130773,1830],{"class":38},[14,130775,130776],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[380,130778,130780],{"id":130779},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1404,130782,130783,130786,130789,130792,130795,130798],{},[366,130784,130785],{},"文件→打开 ：可以打开我们要测量的图片",[366,130787,130788],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[366,130790,130791],{},"右击标尺，把里面的单位改为像素",[366,130793,130794],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[366,130796,130797],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[366,130799,130800],{},"用选区拖动 可以测量大小",[1727,130802],{"style":126621,"src":130803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1404,130805,130806,130809],{},[366,130807,130808],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[366,130810,130811],{},"吸管取色工具",[1727,130813],{"style":126621,"src":130814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[380,130816,130818],{"id":130817},"_916-案例","9.1.6 案例",[363,130820,130821],{},[366,130822,130823],{},"小米商品",[1727,130825],{"style":126621,"src":130826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[18,130828,130829],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,130830,130831,130835,130841,130855],{"__ignoreMap":23},[28,130832,130833],{"class":30,"line":31},[28,130834,130608],{"class":87},[28,130836,130837,130839],{"class":30,"line":48},[28,130838,130613],{"class":2225},[28,130840,15834],{"class":38},[28,130842,130843,130845,130847,130849,130851,130853],{"class":30,"line":84},[28,130844,70726],{"class":60},[28,130846,51693],{"class":38},[28,130848,244],{"class":60},[28,130850,51812],{"class":60},[28,130852,130628],{"class":38},[28,130854,130631],{"class":87},[28,130856,130857],{"class":30,"line":91},[28,130858,1830],{"class":38},[363,130860,130861],{"start":48},[366,130862,130863],{},"快报模块",[1727,130865],{"style":126621,"src":130866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[18,130868,130870],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[25,130871,130872,130877,130892,130897],{"__ignoreMap":23},[28,130873,130874],{"class":30,"line":31},[28,130875,130876],{"class":87},"\u003C!-- HTML 代码示例 -->\n",[28,130878,130879,130881,130883,130885,130887,130890],{"class":30,"line":48},[28,130880,1307],{"class":38},[28,130882,51867],{"class":51556},[28,130884,53742],{"class":2225},[28,130886,54],{"class":38},[28,130888,130889],{"class":127},"\"example\"",[28,130891,51563],{"class":38},[28,130893,130894],{"class":30,"line":84},[28,130895,130896],{"class":38},"  示例内容\n",[28,130898,130899,130901,130903],{"class":30,"line":91},[28,130900,52041],{"class":38},[28,130902,51867],{"class":51556},[28,130904,51563],{"class":38},[380,130906,130908],{"id":130907},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[363,130910,130911],{},[366,130912,130913],{},"圆角边框",[14,130915,130916],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1727,130918],{"style":126621,"src":130919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[18,130921,130923],{"className":126765,"code":130922,"language":126767,"meta":23,"style":23},"div {\n  border: 1px solid #ccc;\n}\n",[25,130924,130925,130931,130947],{"__ignoreMap":23},[28,130926,130927,130929],{"class":30,"line":31},[28,130928,51867],{"class":51556},[28,130930,15834],{"class":38},[28,130932,130933,130935,130937,130939,130941,130943,130945],{"class":30,"line":48},[28,130934,71152],{"class":60},[28,130936,51693],{"class":38},[28,130938,61],{"class":60},[28,130940,51748],{"class":34},[28,130942,51777],{"class":60},[28,130944,130157],{"class":60},[28,130946,1558],{"class":38},[28,130948,130949],{"class":30,"line":84},[28,130950,1830],{"class":38},[14,130952,130953],{},"解释:",[1404,130955,130956,130959,130962,130965,130968],{},[366,130957,130958],{},"参数值可以为数值或百分比的形式",[366,130960,130961],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[366,130963,130964],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[366,130966,130967],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[366,130969,130970],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[363,130972,130973],{"start":48},[366,130974,130975],{},"盒子阴影",[18,130977,130979],{"className":126765,"code":130978,"language":126767,"meta":23,"style":23},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[25,130980,130981,130987,131024],{"__ignoreMap":23},[28,130982,130983,130985],{"class":30,"line":31},[28,130984,51867],{"class":51556},[28,130986,15834],{"class":38},[28,130988,130989,130992,130994,130996,130998,131000,131002,131004,131006,131008,131010,131012,131014,131016,131018,131020,131022],{"class":30,"line":48},[28,130990,130991],{"class":60},"  box-shadow",[28,130993,51693],{"class":38},[28,130995,244],{"class":60},[28,130997,15017],{"class":60},[28,130999,51748],{"class":34},[28,131001,2300],{"class":60},[28,131003,51748],{"class":34},[28,131005,79023],{"class":60},[28,131007,413],{"class":38},[28,131009,244],{"class":60},[28,131011,12697],{"class":38},[28,131013,244],{"class":60},[28,131015,12697],{"class":38},[28,131017,244],{"class":60},[28,131019,12697],{"class":38},[28,131021,86466],{"class":60},[28,131023,2981],{"class":38},[28,131025,131026],{"class":30,"line":84},[28,131027,1830],{"class":38},[543,131029,131030,131038],{},[546,131031,131032],{},[549,131033,131034,131036],{},[552,131035,558],{"align":23998},[552,131037,27752],{"align":23998},[590,131039,131040,131048,131056,131064,131072,131080],{},[549,131041,131042,131045],{},[595,131043,131044],{"align":23998},"h-shadow",[595,131046,131047],{"align":23998},"必需,水平阴影的位置,允许负值",[549,131049,131050,131053],{},[595,131051,131052],{"align":23998},"v-shadow",[595,131054,131055],{"align":23998},"必需,垂直阴影的位置,允许负值",[549,131057,131058,131061],{},[595,131059,131060],{"align":23998},"blur",[595,131062,131063],{"align":23998},"可选,模糊距离,就是影子的虚实",[549,131065,131066,131069],{},[595,131067,131068],{"align":23998},"spread",[595,131070,131071],{"align":23998},"可选,阴影尺寸",[549,131073,131074,131077],{},[595,131075,131076],{"align":23998},"color",[595,131078,131079],{"align":23998},"可选,阴影的颜色",[549,131081,131082,131085],{},[595,131083,131084],{"align":23998},"inset",[595,131086,131087],{"align":23998},"可选,将外部阴影(outset)改为内部阴影",[363,131089,131090],{"start":84},[366,131091,131092],{},"文字阴影",[18,131094,131096],{"className":126765,"code":131095,"language":126767,"meta":23,"style":23},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[25,131097,131098,131104,131143],{"__ignoreMap":23},[28,131099,131100,131102],{"class":30,"line":31},[28,131101,14],{"class":51556},[28,131103,15834],{"class":38},[28,131105,131106,131109,131111,131113,131115,131117,131119,131121,131123,131125,131127,131129,131131,131133,131135,131137,131139,131141],{"class":30,"line":48},[28,131107,131108],{"class":60},"  text-shadow",[28,131110,51693],{"class":38},[28,131112,61],{"class":60},[28,131114,51748],{"class":34},[28,131116,25381],{"class":60},[28,131118,51748],{"class":34},[28,131120,15017],{"class":60},[28,131122,51748],{"class":34},[28,131124,79023],{"class":60},[28,131126,413],{"class":38},[28,131128,244],{"class":60},[28,131130,12697],{"class":38},[28,131132,244],{"class":60},[28,131134,12697],{"class":38},[28,131136,244],{"class":60},[28,131138,12697],{"class":38},[28,131140,100734],{"class":60},[28,131142,2981],{"class":38},[28,131144,131145],{"class":30,"line":84},[28,131146,1830],{"class":38},[543,131148,131149,131157],{},[546,131150,131151],{},[549,131152,131153,131155],{},[552,131154,558],{"align":23998},[552,131156,27752],{"align":23998},[590,131158,131159,131165,131172,131179],{},[549,131160,131161,131163],{},[595,131162,131044],{"align":23998},[595,131164,131047],{"align":23998},[549,131166,131167,131169],{},[595,131168,131052],{"align":23998},[595,131170,131171],{"align":23998},"必需,垂直阴影位置,允许负值",[549,131173,131174,131176],{},[595,131175,131060],{"align":23998},[595,131177,131178],{"align":23998},"可选,模糊的距离",[549,131180,131181,131183],{},[595,131182,131076],{"align":23998},[595,131184,131079],{"align":23998},[351,131186,131188],{"id":131187},"_92-浮动","9.2 浮动",[380,131190,131192],{"id":131191},"_921-浮动介绍","9.2.1 浮动介绍",[14,131194,131195],{},"在16.2中详细介绍",[380,131197,131199],{"id":131198},"_922-清除浮动","9.2.2 清除浮动",[363,131201,131202,131205],{},[366,131203,131204],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[366,131206,131207],{},"清除浮动的本质",[14,131209,131210],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131212,9287],{},[1404,131214,131215,131218,131221],{},[366,131216,131217],{},"如果父盒子本身有高度，则不需要清除浮动",[366,131219,131220],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[366,131222,131223],{},"父级有了高度，就不会影响下面的标准流了",[363,131225,131226],{"start":84},[366,131227,131228],{},"清除浮动样式",[18,131230,131232],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[25,131233,131234,131241,131252,131256,131263,131273],{"__ignoreMap":23},[28,131235,131236,131239],{"class":30,"line":31},[28,131237,131238],{"class":2225},".left",[28,131240,15834],{"class":38},[28,131242,131243,131246,131248,131250],{"class":30,"line":48},[28,131244,131245],{"class":60},"  float",[28,131247,51693],{"class":38},[28,131249,23998],{"class":60},[28,131251,1558],{"class":38},[28,131253,131254],{"class":30,"line":84},[28,131255,1830],{"class":38},[28,131257,131258,131261],{"class":30,"line":91},[28,131259,131260],{"class":2225},".right",[28,131262,15834],{"class":38},[28,131264,131265,131267,131269,131271],{"class":30,"line":97},[28,131266,131245],{"class":60},[28,131268,51693],{"class":38},[28,131270,72778],{"class":60},[28,131272,1558],{"class":38},[28,131274,131275],{"class":30,"line":103},[28,131276,1830],{"class":38},[543,131278,131279,131287],{},[546,131280,131281],{},[549,131282,131283,131285],{},[552,131284,127229],{"align":23998},[552,131286,27752],{"align":23998},[590,131288,131289,131296,131303],{},[549,131290,131291,131293],{},[595,131292,23998],{"align":23998},[595,131294,131295],{"align":23998},"不允许左侧有浮动元素（清除左侧浮动的影响）",[549,131297,131298,131300],{},[595,131299,72778],{"align":23998},[595,131301,131302],{"align":23998},"不允许右侧有浮动元素（清除右侧浮动的影响）",[549,131304,131305,131308],{},[595,131306,131307],{"align":23998},"both",[595,131309,131310],{"align":23998},"同时清除左右侧浮动的影响",[14,131312,131313],{},"法一",[14,131315,131316],{},"额外标签法也称为隔墙法",[14,131318,131319],{},"使用方式：",[14,131321,131322],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[18,131324,131325],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,131326,131327,131333,131343,131347,131353,131363],{"__ignoreMap":23},[28,131328,131329,131331],{"class":30,"line":31},[28,131330,131238],{"class":2225},[28,131332,15834],{"class":38},[28,131334,131335,131337,131339,131341],{"class":30,"line":48},[28,131336,131245],{"class":60},[28,131338,51693],{"class":38},[28,131340,23998],{"class":60},[28,131342,1558],{"class":38},[28,131344,131345],{"class":30,"line":84},[28,131346,1830],{"class":38},[28,131348,131349,131351],{"class":30,"line":91},[28,131350,131260],{"class":2225},[28,131352,15834],{"class":38},[28,131354,131355,131357,131359,131361],{"class":30,"line":97},[28,131356,131245],{"class":60},[28,131358,51693],{"class":38},[28,131360,72778],{"class":60},[28,131362,1558],{"class":38},[28,131364,131365],{"class":30,"line":103},[28,131366,1830],{"class":38},[14,131368,131369],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131371,131372],{},"优点： 通俗易懂，书写方便",[14,131374,131375],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131377,131378],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131380,131381],{},"法二",[14,131383,131384],{},"父级添加overflow属性",[18,131386,131387],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,131388,131389,131395,131405,131409,131415,131425],{"__ignoreMap":23},[28,131390,131391,131393],{"class":30,"line":31},[28,131392,131238],{"class":2225},[28,131394,15834],{"class":38},[28,131396,131397,131399,131401,131403],{"class":30,"line":48},[28,131398,131245],{"class":60},[28,131400,51693],{"class":38},[28,131402,23998],{"class":60},[28,131404,1558],{"class":38},[28,131406,131407],{"class":30,"line":84},[28,131408,1830],{"class":38},[28,131410,131411,131413],{"class":30,"line":91},[28,131412,131260],{"class":2225},[28,131414,15834],{"class":38},[28,131416,131417,131419,131421,131423],{"class":30,"line":97},[28,131418,131245],{"class":60},[28,131420,51693],{"class":38},[28,131422,72778],{"class":60},[28,131424,1558],{"class":38},[28,131426,131427],{"class":30,"line":103},[28,131428,1830],{"class":38},[14,131430,131431],{},"overflow: hidden;",[14,131433,131434],{},"优点：代码简洁",[14,131436,131437],{},"缺点：无法显示溢出的部分",[14,131439,131440],{},"注意：是给父元素添加代码",[14,131442,131443],{},"法三",[14,131445,131446],{},"父级添加after伪元素",[14,131448,131449,131452],{},[131450,131451],"after",{}," 方式是额外标签法的升级版",[14,131454,131455],{},"使用的时候复制就可以",[18,131457,131458],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,131459,131460,131466,131476,131480,131486,131496],{"__ignoreMap":23},[28,131461,131462,131464],{"class":30,"line":31},[28,131463,131238],{"class":2225},[28,131465,15834],{"class":38},[28,131467,131468,131470,131472,131474],{"class":30,"line":48},[28,131469,131245],{"class":60},[28,131471,51693],{"class":38},[28,131473,23998],{"class":60},[28,131475,1558],{"class":38},[28,131477,131478],{"class":30,"line":84},[28,131479,1830],{"class":38},[28,131481,131482,131484],{"class":30,"line":91},[28,131483,131260],{"class":2225},[28,131485,15834],{"class":38},[28,131487,131488,131490,131492,131494],{"class":30,"line":97},[28,131489,131245],{"class":60},[28,131491,51693],{"class":38},[28,131493,72778],{"class":60},[28,131495,1558],{"class":38},[28,131497,131498],{"class":30,"line":103},[28,131499,1830],{"class":38},[14,131501,131502],{},"优点：没有增加标签，结构更简单",[14,131504,131505],{},"缺点：照顾低版本浏览器",[14,131507,131508],{},"代表网站： 百度、淘宝网、网易等",[14,131510,131511],{},"法四",[14,131513,131514],{},"父级添加双伪元素",[18,131516,131517],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,131518,131519,131525,131535,131539,131545,131555],{"__ignoreMap":23},[28,131520,131521,131523],{"class":30,"line":31},[28,131522,131238],{"class":2225},[28,131524,15834],{"class":38},[28,131526,131527,131529,131531,131533],{"class":30,"line":48},[28,131528,131245],{"class":60},[28,131530,51693],{"class":38},[28,131532,23998],{"class":60},[28,131534,1558],{"class":38},[28,131536,131537],{"class":30,"line":84},[28,131538,1830],{"class":38},[28,131540,131541,131543],{"class":30,"line":91},[28,131542,131260],{"class":2225},[28,131544,15834],{"class":38},[28,131546,131547,131549,131551,131553],{"class":30,"line":97},[28,131548,131245],{"class":60},[28,131550,51693],{"class":38},[28,131552,72778],{"class":60},[28,131554,1558],{"class":38},[28,131556,131557],{"class":30,"line":103},[28,131558,1830],{"class":38},[14,131560,131561],{},"优点：代码更简洁",[14,131563,131505],{},[14,131565,131566],{},"代表网站：小米、腾讯等",[351,131568,131570],{"id":131569},"_93-ps切图","9.3 PS切图",[380,131572,131574],{"id":131573},"_931-常见图片格式","9.3.1 常见图片格式",[543,131576,131577,131587],{},[546,131578,131579],{},[549,131580,131581,131584],{},[552,131582,131583],{"align":23998},"jpg图像格式",[552,131585,131586],{"align":23998},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[590,131588,131589,131597,131605],{},[549,131590,131591,131594],{},[595,131592,131593],{"align":23998},"gif图像格式",[595,131595,131596],{"align":23998},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[549,131598,131599,131602],{},[595,131600,131601],{"align":23998},"png图像格式",[595,131603,131604],{"align":23998},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[549,131606,131607,131610],{},[595,131608,131609],{"align":23998},"PSD图像格式",[595,131611,131612],{"align":23998},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[380,131614,131616],{"id":131615},"_932-图层切图","9.3.2 图层切图",[14,131618,131619],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131621,131622],{},"按住shift选中两个图层->图层菜单->合并图层",[380,131624,131626],{"id":131625},"_933-切片切图","9.3.3 切片切图",[1404,131628,131629,131632],{},[366,131630,131631],{},"利用切片工具手动划出",[366,131633,131634],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[380,131636,131638],{"id":131637},"_934-切图步骤","9.3.4 切图步骤",[14,131640,131641],{},"用切片工具选中：",[1727,131643],{"style":126621,"src":131644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131646,131647],{},"文件 -> 导出",[1727,131649],{"style":126621,"src":131650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[328,131652,131653],{},"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":23,"searchDepth":48,"depth":48,"links":131655},[131656,131665,131669],{"id":130092,"depth":48,"text":130093,"children":131657},[131658,131659,131660,131661,131662,131663,131664],{"id":130117,"depth":84,"text":130118},{"id":130408,"depth":84,"text":130409},{"id":130537,"depth":84,"text":130538},{"id":130737,"depth":84,"text":130738},{"id":130779,"depth":84,"text":130780},{"id":130817,"depth":84,"text":130818},{"id":130907,"depth":84,"text":130908},{"id":131187,"depth":48,"text":131188,"children":131666},[131667,131668],{"id":131191,"depth":84,"text":131192},{"id":131198,"depth":84,"text":131199},{"id":131569,"depth":48,"text":131570,"children":131670},[131671,131672,131673,131674],{"id":131573,"depth":84,"text":131574},{"id":131615,"depth":84,"text":131616},{"id":131625,"depth":84,"text":131626},{"id":131637,"depth":84,"text":131638},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130084,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131681,"title":131682,"body":131683,"description":333,"extension":334,"meta":132324,"navigation":336,"path":132325,"seo":132326,"stem":132327,"__hash__":132328},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131684,"toc":132312},[131685,131688,131692,131718,131752,131756,131760,131763,131805,131812,131822,131830,131832,131835,131838,131841,131848,131862,131866,131869,131898,131902,131905,131919,131923,131926,131954,131958,131961,131987,131991,131996,132029,132034,132062,132066,132083,132129,132134,132178,132195,132302,132310],[10,131686,131682],{"id":131687},"_10-css规范与学成在线案例",[351,131689,131691],{"id":131690},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[363,131693,131694,131700,131706,131712],{},[366,131695,131696,131699],{},[555,131697,131698],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[366,131701,131702,131705],{},[555,131703,131704],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[366,131707,131708,131711],{},[555,131709,131710],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[366,131713,131714,131717],{},[555,131715,131716],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[18,131719,131720],{"className":126765,"code":130129,"language":126767,"meta":23,"style":23},[25,131721,131722,131726,131732,131748],{"__ignoreMap":23},[28,131723,131724],{"class":30,"line":31},[28,131725,130136],{"class":87},[28,131727,131728,131730],{"class":30,"line":48},[28,131729,51867],{"class":51556},[28,131731,15834],{"class":38},[28,131733,131734,131736,131738,131740,131742,131744,131746],{"class":30,"line":84},[28,131735,71152],{"class":60},[28,131737,51693],{"class":38},[28,131739,61],{"class":60},[28,131741,51748],{"class":34},[28,131743,51777],{"class":60},[28,131745,130157],{"class":60},[28,131747,1558],{"class":38},[28,131749,131750],{"class":30,"line":91},[28,131751,1830],{"class":38},[351,131753,131755],{"id":131754},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[380,131757,131759],{"id":131758},"_1021-header头部制作","10.2.1 header头部制作",[1727,131761],{"style":126621,"src":131762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1404,131764,131765,131772,131779,131785,131792,131799],{},[366,131766,131767,131768,131771],{},"1号是版心盒子 ",[555,131769,131770],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[366,131773,131774,131775,131778],{},"版心盒子 里面包含 2号盒子 ",[555,131776,131777],{},"logo"," 图标",[366,131780,131781,131782,131784],{},"版心盒子 里面包含 3号盒子 ",[555,131783,53969],{}," 导航栏",[366,131786,131787,131788,131791],{},"版心盒子 里面包含 4号盒子 ",[555,131789,131790],{},"search"," 搜索框",[366,131793,131794,131795,131798],{},"版心盒子 里面包含 5号盒子 ",[555,131796,131797],{},"user"," 个人信息",[366,131800,131801,131802],{},"注意，要求里面的 ",[555,131803,131804],{},"4个子盒子 必须都浮动",[363,131806,131807],{},[366,131808,131809],{},[555,131810,131811],{},"导航栏注意点:",[14,131813,131814,131815,131818,131819],{},"实际开发中， ",[555,131816,131817],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[555,131820,131821],{},"用 li 包含链接(li+a)的做法",[1404,131823,131824,131827],{},[366,131825,131826],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[366,131828,131829],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131831,9287],{},[14,131833,131834],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131836,131837],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131839,131840],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[363,131842,131843],{"start":48},[366,131844,131845],{},[555,131846,131847],{},"4号盒子search的细节：",[1404,131849,131850,131853,131856],{},[366,131851,131852],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[366,131854,131855],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[366,131857,131858,131861],{},[25,131859,131860],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[380,131863,131865],{"id":131864},"_1022-banner制作","10.2.2 banner制作",[1727,131867],{"style":126621,"src":131868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1404,131870,131871,131878,131884,131891],{},[366,131872,131873,131874,131877],{},"1号盒子是通栏的大盒子 ",[555,131875,131876],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[366,131879,131880,131881,131883],{},"2号盒子是版心 ",[555,131882,1193],{}," ， 要水平居中对齐",[366,131885,131886,131887,131890],{},"3号盒子版心内，左对齐 ",[555,131888,131889],{},"subnav"," 侧导航栏",[366,131892,131893,131894,131897],{},"4号盒子版心内，右对齐 ",[555,131895,131896],{},"course"," 课程",[380,131899,131901],{"id":131900},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1727,131903],{"style":126621,"src":131904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1404,131906,131907,131910,131913,131916],{},[366,131908,131909],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[366,131911,131912],{},"1号盒子是标题 H3 左侧浮动",[366,131914,131915],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[366,131917,131918],{},"3号盒子 右浮动 mod 修改",[380,131920,131922],{"id":131921},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1727,131924],{"style":126621,"src":131925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1404,131927,131928,131934,131941,131948,131951],{},[366,131929,131930,131931,131933],{},"1号盒子为最大的盒子 ",[555,131932,53970],{}," 版心水平居中对齐",[366,131935,131936,131937,131940],{},"2号盒子为上面部分 ",[555,131938,131939],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[366,131942,131943,131944,131947],{},"3号盒子为底下部分 ",[555,131945,131946],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[366,131949,131950],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[366,131952,131953],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[380,131955,131957],{"id":131956},"_1025-底部模块制作","10.2.5 底部模块制作",[1727,131959],{"style":126621,"src":131960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1404,131962,131963,131970,131973,131980],{},[366,131964,131965,131966,131969],{},"1号盒子通栏大盒子 底部 ",[555,131967,131968],{},"footer"," 给高度 底色是白色",[366,131971,131972],{},"2号盒子版心水平居中",[366,131974,131975,131976,131979],{},"3号盒子版权 ",[555,131977,131978],{},"copyright"," 左对齐",[366,131981,131982,131983,131986],{},"4号盒子 链接组 ",[555,131984,131985],{},"links"," 右对齐",[380,131988,131990],{"id":131989},"_1026-代码模块","10.2.6 代码模块",[363,131992,131993],{},[366,131994,131995],{},"html部分",[18,131997,131999],{"className":127512,"code":131998,"language":127514,"meta":23,"style":23},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[25,132000,132001],{"__ignoreMap":23},[28,132002,132003,132005,132007,132009,132011,132014,132017,132019,132022,132025,132027],{"class":30,"line":31},[28,132004,1307],{"class":38},[28,132006,51],{"class":51556},[28,132008,61313],{"class":2225},[28,132010,54],{"class":38},[28,132012,132013],{"class":127},"\"https:\u002F\u002Fexample.com\"",[28,132015,132016],{"class":2225}," target",[28,132018,54],{"class":38},[28,132020,132021],{"class":127},"\"_blank\"",[28,132023,132024],{"class":38},">链接文字\u003C\u002F",[28,132026,51],{"class":51556},[28,132028,51563],{"class":38},[363,132030,132031],{"start":48},[366,132032,132033],{},"css部分",[18,132035,132036],{"className":127512,"code":131998,"language":127514,"meta":23,"style":23},[25,132037,132038],{"__ignoreMap":23},[28,132039,132040,132042,132044,132046,132048,132050,132052,132054,132056,132058,132060],{"class":30,"line":31},[28,132041,1307],{"class":38},[28,132043,51],{"class":51556},[28,132045,61313],{"class":2225},[28,132047,54],{"class":38},[28,132049,132013],{"class":127},[28,132051,132016],{"class":2225},[28,132053,54],{"class":38},[28,132055,132021],{"class":127},[28,132057,132024],{"class":38},[28,132059,51],{"class":51556},[28,132061,51563],{"class":38},[380,132063,132065],{"id":132064},"_1027-收获","10.2.7 收获",[363,132067,132068,132071,132074,132077,132080],{},[366,132069,132070],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[366,132072,132073],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[366,132075,132076],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[366,132078,132079],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[366,132081,132082],{},"遗忘代码",[18,132084,132086],{"className":126765,"code":132085,"language":126767,"meta":23,"style":23},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[25,132087,132088,132110,132115,132125],{"__ignoreMap":23},[28,132089,132090,132092,132094,132096,132098,132100,132102,132104,132106,132108],{"class":30,"line":31},[28,132091,51867],{"class":51556},[28,132093,12697],{"class":38},[28,132095,14],{"class":51556},[28,132097,12697],{"class":38},[28,132099,10],{"class":51556},[28,132101,12697],{"class":38},[28,132103,1404],{"class":51556},[28,132105,12697],{"class":38},[28,132107,366],{"class":51556},[28,132109,15834],{"class":38},[28,132111,132112],{"class":30,"line":48},[28,132113,132114],{"class":87},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[28,132116,132117,132119,132121,132123],{"class":30,"line":84},[28,132118,128381],{"class":60},[28,132120,51693],{"class":38},[28,132122,61125],{"class":60},[28,132124,1558],{"class":38},[28,132126,132127],{"class":30,"line":91},[28,132128,1830],{"class":38},[363,132130,132131],{"start":103},[366,132132,132133],{},"html引css的程序",[18,132135,132136],{"className":126765,"code":132085,"language":126767,"meta":23,"style":23},[25,132137,132138,132160,132164,132174],{"__ignoreMap":23},[28,132139,132140,132142,132144,132146,132148,132150,132152,132154,132156,132158],{"class":30,"line":31},[28,132141,51867],{"class":51556},[28,132143,12697],{"class":38},[28,132145,14],{"class":51556},[28,132147,12697],{"class":38},[28,132149,10],{"class":51556},[28,132151,12697],{"class":38},[28,132153,1404],{"class":51556},[28,132155,12697],{"class":38},[28,132157,366],{"class":51556},[28,132159,15834],{"class":38},[28,132161,132162],{"class":30,"line":48},[28,132163,132114],{"class":87},[28,132165,132166,132168,132170,132172],{"class":30,"line":84},[28,132167,128381],{"class":60},[28,132169,51693],{"class":38},[28,132171,61125],{"class":60},[28,132173,1558],{"class":38},[28,132175,132176],{"class":30,"line":91},[28,132177,1830],{"class":38},[363,132179,132180,132183,132186,132189,132192],{"start":109},[366,132181,132182],{},"浮动的盒子不会有外边距合并问题",[366,132184,132185],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[366,132187,132188],{},"ctrl+g快速定位行；shift+alt多个光标",[366,132190,132191],{},"学习上方各个模块的选择器起名方法，以后就这样用",[366,132193,132194],{},"在写选择器时尽量写全一些，例如",[18,132196,132198],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},"\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",[25,132199,132200,132205,132221,132226,132241,132246,132261,132266,132281,132286],{"__ignoreMap":23},[28,132201,132202],{"class":30,"line":31},[28,132203,132204],{"class":87},"\u002F* 静态定位（默认） *\u002F\n",[28,132206,132207,132210,132212,132214,132216,132219],{"class":30,"line":48},[28,132208,132209],{"class":2225},".static",[28,132211,80063],{"class":38},[28,132213,129125],{"class":60},[28,132215,51693],{"class":38},[28,132217,132218],{"class":60},"static",[28,132220,129695],{"class":38},[28,132222,132223],{"class":30,"line":84},[28,132224,132225],{"class":87},"\u002F* 相对定位 *\u002F\n",[28,132227,132228,132231,132233,132235,132237,132239],{"class":30,"line":91},[28,132229,132230],{"class":2225},".relative",[28,132232,80063],{"class":38},[28,132234,129125],{"class":60},[28,132236,51693],{"class":38},[28,132238,55020],{"class":60},[28,132240,129695],{"class":38},[28,132242,132243],{"class":30,"line":97},[28,132244,132245],{"class":87},"\u002F* 绝对定位 *\u002F\n",[28,132247,132248,132251,132253,132255,132257,132259],{"class":30,"line":103},[28,132249,132250],{"class":2225},".absolute",[28,132252,80063],{"class":38},[28,132254,129125],{"class":60},[28,132256,51693],{"class":38},[28,132258,55087],{"class":60},[28,132260,129695],{"class":38},[28,132262,132263],{"class":30,"line":109},[28,132264,132265],{"class":87},"\u002F* 固定定位 *\u002F\n",[28,132267,132268,132271,132273,132275,132277,132279],{"class":30,"line":118},[28,132269,132270],{"class":2225},".fixed",[28,132272,80063],{"class":38},[28,132274,129125],{"class":60},[28,132276,51693],{"class":38},[28,132278,86489],{"class":60},[28,132280,129695],{"class":38},[28,132282,132283],{"class":30,"line":124},[28,132284,132285],{"class":87},"\u002F* 粘性定位 *\u002F\n",[28,132287,132288,132291,132293,132295,132297,132300],{"class":30,"line":131},[28,132289,132290],{"class":2225},".sticky",[28,132292,80063],{"class":38},[28,132294,129125],{"class":60},[28,132296,51693],{"class":38},[28,132298,132299],{"class":60},"sticky",[28,132301,129695],{"class":38},[363,132303,132304,132307],{"start":143},[366,132305,132306],{},"一定要用好注释",[366,132308,132309],{},"浮动的盒子不会有外边距合并的问题",[328,132311,131653],{},{"title":23,"searchDepth":48,"depth":48,"links":132313},[132314,132315],{"id":131690,"depth":48,"text":131691},{"id":131754,"depth":48,"text":131755,"children":132316},[132317,132318,132319,132320,132321,132322,132323],{"id":131758,"depth":84,"text":131759},{"id":131864,"depth":84,"text":131865},{"id":131900,"depth":84,"text":131901},{"id":131921,"depth":84,"text":131922},{"id":131956,"depth":84,"text":131957},{"id":131989,"depth":84,"text":131990},{"id":132064,"depth":84,"text":132065},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131682,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132330,"title":132331,"body":132332,"description":333,"extension":334,"meta":133818,"navigation":336,"path":133819,"seo":133820,"stem":133821,"__hash__":133822},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132333,"toc":133810},[132334,132337,132341,132345,132356,132360,132377,132421,132454,132457,132474,132477,132480,132524,132528,132532,132535,132538,132542,132545,132556,132619,132660,132663,132678,132732,132740,132743,132754,132808,132834,132837,132850,132904,132936,132990,133013,133067,133070,133073,133080,133134,133155,133209,133212,133215,133300,133308,133365,133388,133392,133395,133413,133417,133436,133490,133528,133532,133535,133538,133560,133564,133572,133575,133580,133591,133594,133598,133612,133656,133659,133663,133666,133671,133697,133702,133779,133782,133786,133789,133792,133795,133798,133801,133804,133807],[10,132335,132331],{"id":132336},"_11-传统布局与定位体系",[351,132338,132340],{"id":132339},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[380,132342,132344],{"id":132343},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1404,132346,132347,132350,132353],{},[366,132348,132349],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[366,132351,132352],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[366,132354,132355],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[380,132357,132359],{"id":132358},"_1112-浮动","11.1.2 浮动",[1404,132361,132362,132365,132368,132371,132374],{},[366,132363,132364],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[366,132366,132367],{},"浮动可以改变元素标签默认的排列方式",[366,132369,132370],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[366,132372,132373],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[366,132375,132376],{},"在使用行内块转换时盒子之间是有空隙的",[18,132378,132379],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,132380,132381,132387,132397,132401,132407,132417],{"__ignoreMap":23},[28,132382,132383,132385],{"class":30,"line":31},[28,132384,131238],{"class":2225},[28,132386,15834],{"class":38},[28,132388,132389,132391,132393,132395],{"class":30,"line":48},[28,132390,131245],{"class":60},[28,132392,51693],{"class":38},[28,132394,23998],{"class":60},[28,132396,1558],{"class":38},[28,132398,132399],{"class":30,"line":84},[28,132400,1830],{"class":38},[28,132402,132403,132405],{"class":30,"line":91},[28,132404,131260],{"class":2225},[28,132406,15834],{"class":38},[28,132408,132409,132411,132413,132415],{"class":30,"line":97},[28,132410,131245],{"class":60},[28,132412,51693],{"class":38},[28,132414,72778],{"class":60},[28,132416,1558],{"class":38},[28,132418,132419],{"class":30,"line":103},[28,132420,1830],{"class":38},[543,132422,132423,132431],{},[546,132424,132425],{},[549,132426,132427,132429],{},[552,132428,127229],{"align":23998},[552,132430,27752],{"align":23998},[590,132432,132433,132440,132447],{},[549,132434,132435,132437],{},[595,132436,54993],{"align":23998},[595,132438,132439],{"align":23998},"元素不浮动（默认值）",[549,132441,132442,132444],{},[595,132443,23998],{"align":23998},[595,132445,132446],{"align":23998},"元素向左浮动",[549,132448,132449,132451],{},[595,132450,72778],{"align":23998},[595,132452,132453],{"align":23998},"元素向右浮动",[14,132455,132456],{},"浮动重点：",[1404,132458,132459,132462,132465,132468,132471],{},[366,132460,132461],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[366,132463,132464],{},"浮动的元素会一行内显示并且元素顶部对齐",[366,132466,132467],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[366,132469,132470],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[366,132472,132473],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132475,132476],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132478,132479],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[18,132481,132482],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,132483,132484,132490,132500,132504,132510,132520],{"__ignoreMap":23},[28,132485,132486,132488],{"class":30,"line":31},[28,132487,131238],{"class":2225},[28,132489,15834],{"class":38},[28,132491,132492,132494,132496,132498],{"class":30,"line":48},[28,132493,131245],{"class":60},[28,132495,51693],{"class":38},[28,132497,23998],{"class":60},[28,132499,1558],{"class":38},[28,132501,132502],{"class":30,"line":84},[28,132503,1830],{"class":38},[28,132505,132506,132508],{"class":30,"line":91},[28,132507,131260],{"class":2225},[28,132509,15834],{"class":38},[28,132511,132512,132514,132516,132518],{"class":30,"line":97},[28,132513,131245],{"class":60},[28,132515,51693],{"class":38},[28,132517,72778],{"class":60},[28,132519,1558],{"class":38},[28,132521,132522],{"class":30,"line":103},[28,132523,1830],{"class":38},[380,132525,132527],{"id":132526},"_1113-定位","11.1.3 定位",[22260,132529,132531],{"id":132530},"_11131-使用场景","11.1.3.1 使用场景",[14,132533,132534],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132536,132537],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22260,132539,132541],{"id":132540},"_11132-定位组成","11.1.3.2 定位组成",[14,132543,132544],{},"定位 = 定位模式 + 边偏移",[363,132546,132547],{},[366,132548,132549,132552,132553],{},[555,132550,132551],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[555,132554,132555],{},"定位模式",[18,132557,132559],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[25,132560,132561,132567,132581,132598,132615],{"__ignoreMap":23},[28,132562,132563,132565],{"class":30,"line":31},[28,132564,130613],{"class":2225},[28,132566,15834],{"class":38},[28,132568,132569,132572,132574,132576,132578],{"class":30,"line":48},[28,132570,132571],{"class":60},"  position",[28,132573,51693],{"class":38},[28,132575,55020],{"class":60},[28,132577,130628],{"class":38},[28,132579,132580],{"class":87},"\u002F* 定位模式 *\u002F\n",[28,132582,132583,132586,132588,132590,132592,132595],{"class":30,"line":84},[28,132584,132585],{"class":60},"  top",[28,132587,51693],{"class":38},[28,132589,845],{"class":60},[28,132591,51748],{"class":34},[28,132593,132594],{"class":38},";           ",[28,132596,132597],{"class":87},"\u002F* 边偏移：上 *\u002F\n",[28,132599,132600,132603,132605,132607,132609,132612],{"class":30,"line":91},[28,132601,132602],{"class":60},"  left",[28,132604,51693],{"class":38},[28,132606,1098],{"class":60},[28,132608,51748],{"class":34},[28,132610,132611],{"class":38},";          ",[28,132613,132614],{"class":87},"\u002F* 边偏移：左 *\u002F\n",[28,132616,132617],{"class":30,"line":97},[28,132618,1830],{"class":38},[543,132620,132621,132630],{},[546,132622,132623],{},[549,132624,132625,132627],{},[552,132626,558],{"align":23998},[552,132628,132629],{"align":23998},"语义",[590,132631,132632,132639,132646,132653],{},[549,132633,132634,132636],{},[595,132635,132218],{"align":23998},[595,132637,132638],{"align":23998},"静态定位",[549,132640,132641,132643],{},[595,132642,55020],{"align":23998},[595,132644,132645],{"align":23998},"相对定位",[549,132647,132648,132650],{},[595,132649,55087],{"align":23998},[595,132651,132652],{"align":23998},"绝对定位",[549,132654,132655,132657],{},[595,132656,86489],{"align":23998},[595,132658,132659],{"align":23998},"固定定位",[14,132661,132662],{},"（1）静态定位：",[1404,132664,132665,132676],{},[366,132666,132667,132668,132671,132672,132675],{},"静态定位是元素的 ",[555,132669,132670],{},"默认定位方式"," ， ",[555,132673,132674],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[366,132677,5443],{},[18,132679,132680],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,132681,132682,132688,132700,132714,132728],{"__ignoreMap":23},[28,132683,132684,132686],{"class":30,"line":31},[28,132685,130613],{"class":2225},[28,132687,15834],{"class":38},[28,132689,132690,132692,132694,132696,132698],{"class":30,"line":48},[28,132691,132571],{"class":60},[28,132693,51693],{"class":38},[28,132695,55020],{"class":60},[28,132697,130628],{"class":38},[28,132699,132580],{"class":87},[28,132701,132702,132704,132706,132708,132710,132712],{"class":30,"line":84},[28,132703,132585],{"class":60},[28,132705,51693],{"class":38},[28,132707,845],{"class":60},[28,132709,51748],{"class":34},[28,132711,132594],{"class":38},[28,132713,132597],{"class":87},[28,132715,132716,132718,132720,132722,132724,132726],{"class":30,"line":91},[28,132717,132602],{"class":60},[28,132719,51693],{"class":38},[28,132721,1098],{"class":60},[28,132723,51748],{"class":34},[28,132725,132611],{"class":38},[28,132727,132614],{"class":87},[28,132729,132730],{"class":30,"line":97},[28,132731,1830],{"class":38},[1404,132733,132734,132737],{},[366,132735,132736],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[366,132738,132739],{},"静态定位在布局时我们几乎不用的",[14,132741,132742],{},"（2）相对定位",[1404,132744,132745,132752],{},[366,132746,132747,132748,132751],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[555,132749,132750],{},"原来的位置"," 来说的（自恋型）",[366,132753,5443],{},[18,132755,132756],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,132757,132758,132764,132776,132790,132804],{"__ignoreMap":23},[28,132759,132760,132762],{"class":30,"line":31},[28,132761,130613],{"class":2225},[28,132763,15834],{"class":38},[28,132765,132766,132768,132770,132772,132774],{"class":30,"line":48},[28,132767,132571],{"class":60},[28,132769,51693],{"class":38},[28,132771,55020],{"class":60},[28,132773,130628],{"class":38},[28,132775,132580],{"class":87},[28,132777,132778,132780,132782,132784,132786,132788],{"class":30,"line":84},[28,132779,132585],{"class":60},[28,132781,51693],{"class":38},[28,132783,845],{"class":60},[28,132785,51748],{"class":34},[28,132787,132594],{"class":38},[28,132789,132597],{"class":87},[28,132791,132792,132794,132796,132798,132800,132802],{"class":30,"line":91},[28,132793,132602],{"class":60},[28,132795,51693],{"class":38},[28,132797,1098],{"class":60},[28,132799,51748],{"class":34},[28,132801,132611],{"class":38},[28,132803,132614],{"class":87},[28,132805,132806],{"class":30,"line":97},[28,132807,1830],{"class":38},[1404,132809,132810],{},[366,132811,132812,132813,132815,132816,132818,132819,132822,132823,132826,132827,132829,132830,132833],{},"相对定位的特点：",[53972,132814],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53972,132817],{},"  ② ",[555,132820,132821],{},"原来"," 在标准流的 ",[555,132824,132825],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53972,132828],{},"  ③因此， ",[555,132831,132832],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132835,132836],{},"（3）绝对定位",[1404,132838,132839,132848],{},[366,132840,132841,132843,132844,132847],{},[555,132842,132652],{}," 是元素在移动位置的时候，是相对于它 ",[555,132845,132846],{},"祖先元素"," 来说的（拼爹型）",[366,132849,5443],{},[18,132851,132852],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,132853,132854,132860,132872,132886,132900],{"__ignoreMap":23},[28,132855,132856,132858],{"class":30,"line":31},[28,132857,130613],{"class":2225},[28,132859,15834],{"class":38},[28,132861,132862,132864,132866,132868,132870],{"class":30,"line":48},[28,132863,132571],{"class":60},[28,132865,51693],{"class":38},[28,132867,55020],{"class":60},[28,132869,130628],{"class":38},[28,132871,132580],{"class":87},[28,132873,132874,132876,132878,132880,132882,132884],{"class":30,"line":84},[28,132875,132585],{"class":60},[28,132877,51693],{"class":38},[28,132879,845],{"class":60},[28,132881,51748],{"class":34},[28,132883,132594],{"class":38},[28,132885,132597],{"class":87},[28,132887,132888,132890,132892,132894,132896,132898],{"class":30,"line":91},[28,132889,132602],{"class":60},[28,132891,51693],{"class":38},[28,132893,1098],{"class":60},[28,132895,51748],{"class":34},[28,132897,132611],{"class":38},[28,132899,132614],{"class":87},[28,132901,132902],{"class":30,"line":97},[28,132903,1830],{"class":38},[1404,132905,132906,132921,132930,132933],{},[366,132907,132908,132909,132911,132912,132914,132915,132917,132918,132920],{},"绝对定位的特点：",[53972,132910],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53972,132913],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53972,132916],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53972,132919],{},"  (4)固定定位",[366,132922,132923,132925,132926,132929],{},[555,132924,132659],{}," 是元素 ",[555,132927,132928],{},"固定于浏览器可视区的位置"," 。（认死理型）",[366,132931,132932],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[366,132934,132935],{},"语法:",[18,132937,132938],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,132939,132940,132946,132958,132972,132986],{"__ignoreMap":23},[28,132941,132942,132944],{"class":30,"line":31},[28,132943,130613],{"class":2225},[28,132945,15834],{"class":38},[28,132947,132948,132950,132952,132954,132956],{"class":30,"line":48},[28,132949,132571],{"class":60},[28,132951,51693],{"class":38},[28,132953,55020],{"class":60},[28,132955,130628],{"class":38},[28,132957,132580],{"class":87},[28,132959,132960,132962,132964,132966,132968,132970],{"class":30,"line":84},[28,132961,132585],{"class":60},[28,132963,51693],{"class":38},[28,132965,845],{"class":60},[28,132967,51748],{"class":34},[28,132969,132594],{"class":38},[28,132971,132597],{"class":87},[28,132973,132974,132976,132978,132980,132982,132984],{"class":30,"line":91},[28,132975,132602],{"class":60},[28,132977,51693],{"class":38},[28,132979,1098],{"class":60},[28,132981,51748],{"class":34},[28,132983,132611],{"class":38},[28,132985,132614],{"class":87},[28,132987,132988],{"class":30,"line":97},[28,132989,1830],{"class":38},[1404,132991,132992,133001],{},[366,132993,132994,132995,132997,132998,133000],{},"特点:",[53972,132996],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53972,132999],{},"  ②固定定位不再占有原先的位置,完全脱标",[366,133002,133003,133004,133006,133007,133009,133010,133012],{},"固定在版心位置的方法:",[53972,133005],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53972,133008],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53972,133011],{},"  实例：",[18,133014,133015],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,133016,133017,133023,133035,133049,133063],{"__ignoreMap":23},[28,133018,133019,133021],{"class":30,"line":31},[28,133020,130613],{"class":2225},[28,133022,15834],{"class":38},[28,133024,133025,133027,133029,133031,133033],{"class":30,"line":48},[28,133026,132571],{"class":60},[28,133028,51693],{"class":38},[28,133030,55020],{"class":60},[28,133032,130628],{"class":38},[28,133034,132580],{"class":87},[28,133036,133037,133039,133041,133043,133045,133047],{"class":30,"line":84},[28,133038,132585],{"class":60},[28,133040,51693],{"class":38},[28,133042,845],{"class":60},[28,133044,51748],{"class":34},[28,133046,132594],{"class":38},[28,133048,132597],{"class":87},[28,133050,133051,133053,133055,133057,133059,133061],{"class":30,"line":91},[28,133052,132602],{"class":60},[28,133054,51693],{"class":38},[28,133056,1098],{"class":60},[28,133058,51748],{"class":34},[28,133060,132611],{"class":38},[28,133062,132614],{"class":87},[28,133064,133065],{"class":30,"line":97},[28,133066,1830],{"class":38},[1727,133068],{"style":126621,"src":133069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133071,133072],{},"(5)粘性定位",[1404,133074,133075,133078],{},[366,133076,133077],{},"粘性定位可以被认为是相对定位和固定定位的混合",[366,133079,5443],{},[18,133081,133082],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,133083,133084,133090,133102,133116,133130],{"__ignoreMap":23},[28,133085,133086,133088],{"class":30,"line":31},[28,133087,130613],{"class":2225},[28,133089,15834],{"class":38},[28,133091,133092,133094,133096,133098,133100],{"class":30,"line":48},[28,133093,132571],{"class":60},[28,133095,51693],{"class":38},[28,133097,55020],{"class":60},[28,133099,130628],{"class":38},[28,133101,132580],{"class":87},[28,133103,133104,133106,133108,133110,133112,133114],{"class":30,"line":84},[28,133105,132585],{"class":60},[28,133107,51693],{"class":38},[28,133109,845],{"class":60},[28,133111,51748],{"class":34},[28,133113,132594],{"class":38},[28,133115,132597],{"class":87},[28,133117,133118,133120,133122,133124,133126,133128],{"class":30,"line":91},[28,133119,132602],{"class":60},[28,133121,51693],{"class":38},[28,133123,1098],{"class":60},[28,133125,51748],{"class":34},[28,133127,132611],{"class":38},[28,133129,132614],{"class":87},[28,133131,133132],{"class":30,"line":97},[28,133133,1830],{"class":38},[1404,133135,133136],{},[366,133137,133138,133139,133141,133142,133144,133145,133147,133148,133151,133152,133154],{},"粘性定位的特点：",[53972,133140],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53972,133143],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53972,133146],{},"  ③必须添加 top 、left、right、bottom ",[555,133149,133150],{},"其中一个"," 才有效",[53972,133153],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[18,133156,133157],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,133158,133159,133165,133177,133191,133205],{"__ignoreMap":23},[28,133160,133161,133163],{"class":30,"line":31},[28,133162,130613],{"class":2225},[28,133164,15834],{"class":38},[28,133166,133167,133169,133171,133173,133175],{"class":30,"line":48},[28,133168,132571],{"class":60},[28,133170,51693],{"class":38},[28,133172,55020],{"class":60},[28,133174,130628],{"class":38},[28,133176,132580],{"class":87},[28,133178,133179,133181,133183,133185,133187,133189],{"class":30,"line":84},[28,133180,132585],{"class":60},[28,133182,51693],{"class":38},[28,133184,845],{"class":60},[28,133186,51748],{"class":34},[28,133188,132594],{"class":38},[28,133190,132597],{"class":87},[28,133192,133193,133195,133197,133199,133201,133203],{"class":30,"line":91},[28,133194,132602],{"class":60},[28,133196,51693],{"class":38},[28,133198,1098],{"class":60},[28,133200,51748],{"class":34},[28,133202,132611],{"class":38},[28,133204,132614],{"class":87},[28,133206,133207],{"class":30,"line":97},[28,133208,1830],{"class":38},[1727,133210],{"style":126621,"src":133211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133213,133214],{},"(6)总结",[543,133216,133217,133232],{},[546,133218,133219],{},[549,133220,133221,133223,133226,133229],{},[552,133222,132555],{"align":23998},[552,133224,133225],{"align":23998},"是否脱标",[552,133227,133228],{"align":23998},"移动位置",[552,133230,133231],{"align":23998},"是否常用",[590,133233,133234,133247,133261,133275,133288],{},[549,133235,133236,133239,133241,133244],{},[595,133237,133238],{"align":23998},"Static 静态定位",[595,133240,104891],{"align":23998},[595,133242,133243],{"align":23998},"不能使用边偏移",[595,133245,133246],{"align":23998},"很少",[549,133248,133249,133252,133255,133258],{},[595,133250,133251],{"align":23998},"Relative 相对定位",[595,133253,133254],{"align":23998},"否(占有位置)",[595,133256,133257],{"align":23998},"相对于自身位置移动",[595,133259,133260],{"align":23998},"基本单独使用",[549,133262,133263,133266,133269,133272],{},[595,133264,133265],{"align":23998},"Absolute 绝对定位",[595,133267,133268],{"align":23998},"是(不占有位置)",[595,133270,133271],{"align":23998},"带有定位的父级",[595,133273,133274],{"align":23998},"要和定位父级元素搭配使用",[549,133276,133277,133280,133282,133285],{},[595,133278,133279],{"align":23998},"Fixed 固定定位",[595,133281,133268],{"align":23998},[595,133283,133284],{"align":23998},"浏览器可视区",[595,133286,133287],{"align":23998},"单独使用,不需要父级",[549,133289,133290,133293,133295,133297],{},[595,133291,133292],{"align":23998},"Sticky 粘性定位",[595,133294,133254],{"align":23998},[595,133296,133284],{"align":23998},[595,133298,133299],{"align":23998},"当前阶段少",[363,133301,133302],{"start":48},[366,133303,133304,133307],{},[555,133305,133306],{},"边偏移"," 则决定了该元素的最终位置",[543,133309,133310,133321],{},[546,133311,133312],{},[549,133313,133314,133317,133319],{},[552,133315,133316],{"align":23998},"边偏移属性",[552,133318,27755],{"align":23998},[552,133320,27752],{"align":23998},[590,133322,133323,133334,133345,133355],{},[549,133324,133325,133328,133331],{},[595,133326,133327],{"align":23998},"top",[595,133329,133330],{"align":23998},"top: 80px;",[595,133332,133333],{"align":23998},"顶端偏移量，定义元素相对于父元素上边线的距离",[549,133335,133336,133339,133342],{},[595,133337,133338],{"align":23998},"bottom",[595,133340,133341],{"align":23998},"bottom: 80px ;",[595,133343,133344],{"align":23998},"底部偏移量，定义元素相对于其父元素下边线的距离",[549,133346,133347,133349,133352],{},[595,133348,23998],{"align":23998},[595,133350,133351],{"align":23998},"left: 80px ;",[595,133353,133354],{"align":23998},"左侧偏移量，定义元素相对于其父元素左边线的距离",[549,133356,133357,133359,133362],{},[595,133358,72778],{"align":23998},[595,133360,133361],{"align":23998},"right: 80px ;",[595,133363,133364],{"align":23998},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1404,133366,133367],{},[366,133368,9287,133369,133371,133372,133374,133375,133377,133378,133381,133382,133384,133385,133387],{},[53972,133370],{},"  ① ",[555,133373,133306],{}," 需要和 ",[555,133376,132555],{}," 联合使用， ",[555,133379,133380],{},"单独使用无效"," ；",[53972,133383],{},"  ②top和bottom不要同时使用",[53972,133386],{},"  ③left和right不要同时使用",[22260,133389,133391],{"id":133390},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133393,133394],{},"子级是绝对定位的话，父级要用相对定位",[1404,133396,133397,133400,133403,133406],{},[366,133398,133399],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[366,133401,133402],{},"父盒子需要加定位限制子盒子在父盒子内显示",[366,133404,133405],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[366,133407,133408,133409,133412],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[555,133410,133411],{},"子绝父绝"," 也会遇到",[22260,133414,133416],{"id":133415},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1404,133418,133419,133434],{},[366,133420,133421,133422,133425,133426,133429,133430,133433],{},"在使用 ",[555,133423,133424],{},"定位"," 布局时，可能会 ",[555,133427,133428],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[555,133431,133432],{},"z-index"," 来控制盒子的前后次序 (z轴)",[366,133435,5443],{},[18,133437,133438],{"className":126765,"code":132558,"language":126767,"meta":23,"style":23},[25,133439,133440,133446,133458,133472,133486],{"__ignoreMap":23},[28,133441,133442,133444],{"class":30,"line":31},[28,133443,130613],{"class":2225},[28,133445,15834],{"class":38},[28,133447,133448,133450,133452,133454,133456],{"class":30,"line":48},[28,133449,132571],{"class":60},[28,133451,51693],{"class":38},[28,133453,55020],{"class":60},[28,133455,130628],{"class":38},[28,133457,132580],{"class":87},[28,133459,133460,133462,133464,133466,133468,133470],{"class":30,"line":84},[28,133461,132585],{"class":60},[28,133463,51693],{"class":38},[28,133465,845],{"class":60},[28,133467,51748],{"class":34},[28,133469,132594],{"class":38},[28,133471,132597],{"class":87},[28,133473,133474,133476,133478,133480,133482,133484],{"class":30,"line":91},[28,133475,132602],{"class":60},[28,133477,51693],{"class":38},[28,133479,1098],{"class":60},[28,133481,51748],{"class":34},[28,133483,132611],{"class":38},[28,133485,132614],{"class":87},[28,133487,133488],{"class":30,"line":97},[28,133489,1830],{"class":38},[1404,133491,133492],{},[366,133493,133494,133495,133371,133497,133499,133500,127928,133503,82795,133506,133508,133509,133511,133512,133515,133516,133381,133519,133521,133522,133525,133527],{},"z-index的特性",[53972,133496],{},[555,133498,127229],{}," ： ",[555,133501,133502],{},"正整数",[555,133504,133505],{},"负整数",[555,133507,244],{}," ，默认值是 0，数值越大，盒子越靠上；",[53972,133510],{},"  ②如果 ",[555,133513,133514],{},"属性值相同"," ，则按照书写顺序， ",[555,133517,133518],{},"后来居上",[53972,133520],{},"  ③数字后面 ",[555,133523,133524],{},"不能加单位",[53972,133526],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22260,133529,133531],{"id":133530},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133533,133534],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133536,133537],{},"方法:",[1404,133539,133540,133550],{},[366,133541,133542,133543,133546,133547],{},"left: 50%; 让 ",[555,133544,133545],{},"盒子的左侧"," 移动到 ",[555,133548,133549],{},"父级元素的水平中心位置",[366,133551,133552,133553,133556,133557],{},"margin-left: -100px; 让盒子 ",[555,133554,133555],{},"向左"," 移动 ",[555,133558,133559],{},"自身宽度的一半",[22260,133561,133563],{"id":133562},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[363,133565,133566,133569],{},[366,133567,133568],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[366,133570,133571],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133573,133574],{},"也就是说绝对定位和固定定位和浮动类似",[363,133576,133577],{"start":84},[366,133578,133579],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1404,133581,133582,133585,133588],{},[366,133583,133584],{},"可以用inline-block 转换为行内块",[366,133586,133587],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[366,133589,133590],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133592,133593],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22260,133595,133597],{"id":133596},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[363,133599,133600,133603,133606,133609],{},[366,133601,133602],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[366,133604,133605],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[366,133607,133608],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[366,133610,133611],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[18,133613,133614],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,133615,133616,133622,133632,133636,133642,133652],{"__ignoreMap":23},[28,133617,133618,133620],{"class":30,"line":31},[28,133619,131238],{"class":2225},[28,133621,15834],{"class":38},[28,133623,133624,133626,133628,133630],{"class":30,"line":48},[28,133625,131245],{"class":60},[28,133627,51693],{"class":38},[28,133629,23998],{"class":60},[28,133631,1558],{"class":38},[28,133633,133634],{"class":30,"line":84},[28,133635,1830],{"class":38},[28,133637,133638,133640],{"class":30,"line":91},[28,133639,131260],{"class":2225},[28,133641,15834],{"class":38},[28,133643,133644,133646,133648,133650],{"class":30,"line":97},[28,133645,131245],{"class":60},[28,133647,51693],{"class":38},[28,133649,72778],{"class":60},[28,133651,1558],{"class":38},[28,133653,133654],{"class":30,"line":103},[28,133655,1830],{"class":38},[1727,133657],{"style":126621,"src":133658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22260,133660,133662],{"id":133661},"_11138-轮播图","11.1.3.8 轮播图",[1727,133664],{"style":126621,"src":133665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[363,133667,133668],{},[366,133669,133670],{},"制作顺序:",[1404,133672,133673,133676,133679,133688],{},[366,133674,133675],{},"大盒子我们类名为： tb-promo 淘宝广告",[366,133677,133678],{},"里面先放一张图片",[366,133680,133681,133682,133684,133685,133687],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53972,133683],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53972,133686],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[366,133689,133690,133691,133693,133694,133696],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53972,133692],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53972,133695],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[363,133698,133699],{"start":48},[366,133700,133701],{},"代码模块",[18,133703,133705],{"className":126765,"code":133704,"language":126767,"meta":23,"style":23},"\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",[25,133706,133707,133712,133719,133729,133739,133749,133753,133758,133765,133775],{"__ignoreMap":23},[28,133708,133709],{"class":30,"line":31},[28,133710,133711],{"class":87},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[28,133713,133714,133717],{"class":30,"line":48},[28,133715,133716],{"class":2225},".son",[28,133718,15834],{"class":38},[28,133720,133721,133723,133725,133727],{"class":30,"line":84},[28,133722,132571],{"class":60},[28,133724,51693],{"class":38},[28,133726,55087],{"class":60},[28,133728,1558],{"class":38},[28,133730,133731,133733,133735,133737],{"class":30,"line":91},[28,133732,132585],{"class":60},[28,133734,51693],{"class":38},[28,133736,244],{"class":60},[28,133738,1558],{"class":38},[28,133740,133741,133743,133745,133747],{"class":30,"line":97},[28,133742,132602],{"class":60},[28,133744,51693],{"class":38},[28,133746,244],{"class":60},[28,133748,1558],{"class":38},[28,133750,133751],{"class":30,"line":103},[28,133752,1830],{"class":38},[28,133754,133755],{"class":30,"line":109},[28,133756,133757],{"class":87},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[28,133759,133760,133763],{"class":30,"line":118},[28,133761,133762],{"class":2225},".father",[28,133764,15834],{"class":38},[28,133766,133767,133769,133771,133773],{"class":30,"line":124},[28,133768,132571],{"class":60},[28,133770,51693],{"class":38},[28,133772,55020],{"class":60},[28,133774,1558],{"class":38},[28,133776,133777],{"class":30,"line":131},[28,133778,1830],{"class":38},[14,133780,133781],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[380,133783,133785],{"id":133784},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1727,133787],{"style":126621,"src":133788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133790,133791],{},"✨ 黄金口诀：",[14,133793,133794],{},"\"TOP正下负上，LEFT正右负左\"",[14,133796,133797],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133799,133800],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133802,133803],{},"✨ 简单记：",[14,133805,133806],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[328,133808,133809],{},"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":23,"searchDepth":48,"depth":48,"links":133811},[133812],{"id":132339,"depth":48,"text":132340,"children":133813},[133814,133815,133816,133817],{"id":132343,"depth":84,"text":132344},{"id":132358,"depth":84,"text":132359},{"id":132526,"depth":84,"text":132527},{"id":133784,"depth":84,"text":133785},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132331,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133824,"title":133825,"body":133826,"description":333,"extension":334,"meta":135249,"navigation":336,"path":135250,"seo":135251,"stem":135252,"__hash__":135253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133827,"toc":135228},[133828,133831,133835,133843,133847,133852,133860,133872,133876,133881,133889,133900,133904,133909,133950,133958,133962,133965,133968,133971,134065,134068,134162,134165,134259,134262,134265,134300,134303,134306,134336,134339,134342,134345,134348,134351,134354,134357,134427,134430,134434,134438,134479,134483,134489,134492,134495,134499,134502,134505,134508,134589,134592,134595,134599,134603,134606,134609,134612,134615,134618,134624,134633,134637,134656,134660,134670,134673,134676,134679,134682,134685,134688,134691,134694,134703,134707,134716,134719,134724,134777,134782,134948,134951,134954,134959,134962,134965,134968,134971,134976,135124,135127,135130,135135,135138,135143,135177,135180,135183,135187,135190,135197,135200,135203,135206,135209,135212,135215,135218,135222,135225],[10,133829,133825],{"id":133830},"_12-显示隐藏与图形资源",[351,133832,133834],{"id":133833},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1404,133836,133837,133840],{},[366,133838,133839],{},"目的:让一个元素在页面中消失或者显示出来",[366,133841,133842],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[380,133844,133846],{"id":133845},"_1211-display-显示","12.1.1 display 显示",[363,133848,133849],{},[366,133850,133851],{},"display 设置或检索对象是否及如何显示",[1404,133853,133854,133857],{},[366,133855,133856],{},"display: none;隐藏对象",[366,133858,133859],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[363,133861,133862,133869],{"start":48},[366,133863,133864,133865,133868],{},"特点： display 隐藏元素后， ",[555,133866,133867],{},"不再占"," 有原来的位置",[366,133870,133871],{},"在js中使用非常的广泛",[380,133873,133875],{"id":133874},"_1212-visibility可见性","12.1.2 visibility可见性",[363,133877,133878],{},[366,133879,133880],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1404,133882,133883,133886],{},[366,133884,133885],{},"visibility： visible；元素可见",[366,133887,133888],{},"visibility：hidden；元素隐藏",[363,133890,133891,133894,133897],{"start":48},[366,133892,133893],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[366,133895,133896],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[366,133898,133899],{},"隐藏后继续占有原有位置",[380,133901,133903],{"id":133902},"_1213-overflow溢出","12.1.3 overflow溢出",[1404,133905,133906],{},[366,133907,133908],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[543,133910,133911,133919],{},[546,133912,133913],{},[549,133914,133915,133917],{},[552,133916,127229],{"align":23998},[552,133918,27752],{"align":23998},[590,133920,133921,133929,133936,133943],{},[549,133922,133923,133926],{},[595,133924,133925],{"align":23998},"visible",[595,133927,133928],{"align":23998},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[549,133930,133931,133933],{},[595,133932,61970],{"align":23998},[595,133934,133935],{"align":23998},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[549,133937,133938,133940],{},[595,133939,129185],{"align":23998},[595,133941,133942],{"align":23998},"不管超出内容否，总是显示滚动条",[549,133944,133945,133947],{},[595,133946,72919],{"align":23998},[595,133948,133949],{"align":23998},"超出自动显示滚动条，不超出不显示滚动条",[1404,133951,133952,133955],{},[366,133953,133954],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[366,133956,133957],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[380,133959,133961],{"id":133960},"_1214-案例收获","12.1.4 案例收获",[1727,133963],{"style":126621,"src":133964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133966,133967],{},"问题：没做出来动态效果，使用hover没实现",[14,133969,133970],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[18,133972,133973],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,133974,133975,133979,133993,133997,134011,134015,134029,134033,134047,134051],{"__ignoreMap":23},[28,133976,133977],{"class":30,"line":31},[28,133978,132204],{"class":87},[28,133980,133981,133983,133985,133987,133989,133991],{"class":30,"line":48},[28,133982,132209],{"class":2225},[28,133984,80063],{"class":38},[28,133986,129125],{"class":60},[28,133988,51693],{"class":38},[28,133990,132218],{"class":60},[28,133992,129695],{"class":38},[28,133994,133995],{"class":30,"line":84},[28,133996,132225],{"class":87},[28,133998,133999,134001,134003,134005,134007,134009],{"class":30,"line":91},[28,134000,132230],{"class":2225},[28,134002,80063],{"class":38},[28,134004,129125],{"class":60},[28,134006,51693],{"class":38},[28,134008,55020],{"class":60},[28,134010,129695],{"class":38},[28,134012,134013],{"class":30,"line":97},[28,134014,132245],{"class":87},[28,134016,134017,134019,134021,134023,134025,134027],{"class":30,"line":103},[28,134018,132250],{"class":2225},[28,134020,80063],{"class":38},[28,134022,129125],{"class":60},[28,134024,51693],{"class":38},[28,134026,55087],{"class":60},[28,134028,129695],{"class":38},[28,134030,134031],{"class":30,"line":109},[28,134032,132265],{"class":87},[28,134034,134035,134037,134039,134041,134043,134045],{"class":30,"line":118},[28,134036,132270],{"class":2225},[28,134038,80063],{"class":38},[28,134040,129125],{"class":60},[28,134042,51693],{"class":38},[28,134044,86489],{"class":60},[28,134046,129695],{"class":38},[28,134048,134049],{"class":30,"line":124},[28,134050,132285],{"class":87},[28,134052,134053,134055,134057,134059,134061,134063],{"class":30,"line":131},[28,134054,132290],{"class":2225},[28,134056,80063],{"class":38},[28,134058,129125],{"class":60},[28,134060,51693],{"class":38},[28,134062,132299],{"class":60},[28,134064,129695],{"class":38},[14,134066,134067],{},"完整代码：",[18,134069,134070],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,134071,134072,134076,134090,134094,134108,134112,134126,134130,134144,134148],{"__ignoreMap":23},[28,134073,134074],{"class":30,"line":31},[28,134075,132204],{"class":87},[28,134077,134078,134080,134082,134084,134086,134088],{"class":30,"line":48},[28,134079,132209],{"class":2225},[28,134081,80063],{"class":38},[28,134083,129125],{"class":60},[28,134085,51693],{"class":38},[28,134087,132218],{"class":60},[28,134089,129695],{"class":38},[28,134091,134092],{"class":30,"line":84},[28,134093,132225],{"class":87},[28,134095,134096,134098,134100,134102,134104,134106],{"class":30,"line":91},[28,134097,132230],{"class":2225},[28,134099,80063],{"class":38},[28,134101,129125],{"class":60},[28,134103,51693],{"class":38},[28,134105,55020],{"class":60},[28,134107,129695],{"class":38},[28,134109,134110],{"class":30,"line":97},[28,134111,132245],{"class":87},[28,134113,134114,134116,134118,134120,134122,134124],{"class":30,"line":103},[28,134115,132250],{"class":2225},[28,134117,80063],{"class":38},[28,134119,129125],{"class":60},[28,134121,51693],{"class":38},[28,134123,55087],{"class":60},[28,134125,129695],{"class":38},[28,134127,134128],{"class":30,"line":109},[28,134129,132265],{"class":87},[28,134131,134132,134134,134136,134138,134140,134142],{"class":30,"line":118},[28,134133,132270],{"class":2225},[28,134135,80063],{"class":38},[28,134137,129125],{"class":60},[28,134139,51693],{"class":38},[28,134141,86489],{"class":60},[28,134143,129695],{"class":38},[28,134145,134146],{"class":30,"line":124},[28,134147,132285],{"class":87},[28,134149,134150,134152,134154,134156,134158,134160],{"class":30,"line":131},[28,134151,132290],{"class":2225},[28,134153,80063],{"class":38},[28,134155,129125],{"class":60},[28,134157,51693],{"class":38},[28,134159,132299],{"class":60},[28,134161,129695],{"class":38},[14,134163,134164],{},"分布思路重点详解：",[18,134166,134167],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,134168,134169,134173,134187,134191,134205,134209,134223,134227,134241,134245],{"__ignoreMap":23},[28,134170,134171],{"class":30,"line":31},[28,134172,132204],{"class":87},[28,134174,134175,134177,134179,134181,134183,134185],{"class":30,"line":48},[28,134176,132209],{"class":2225},[28,134178,80063],{"class":38},[28,134180,129125],{"class":60},[28,134182,51693],{"class":38},[28,134184,132218],{"class":60},[28,134186,129695],{"class":38},[28,134188,134189],{"class":30,"line":84},[28,134190,132225],{"class":87},[28,134192,134193,134195,134197,134199,134201,134203],{"class":30,"line":91},[28,134194,132230],{"class":2225},[28,134196,80063],{"class":38},[28,134198,129125],{"class":60},[28,134200,51693],{"class":38},[28,134202,55020],{"class":60},[28,134204,129695],{"class":38},[28,134206,134207],{"class":30,"line":97},[28,134208,132245],{"class":87},[28,134210,134211,134213,134215,134217,134219,134221],{"class":30,"line":103},[28,134212,132250],{"class":2225},[28,134214,80063],{"class":38},[28,134216,129125],{"class":60},[28,134218,51693],{"class":38},[28,134220,55087],{"class":60},[28,134222,129695],{"class":38},[28,134224,134225],{"class":30,"line":109},[28,134226,132265],{"class":87},[28,134228,134229,134231,134233,134235,134237,134239],{"class":30,"line":118},[28,134230,132270],{"class":2225},[28,134232,80063],{"class":38},[28,134234,129125],{"class":60},[28,134236,51693],{"class":38},[28,134238,86489],{"class":60},[28,134240,129695],{"class":38},[28,134242,134243],{"class":30,"line":124},[28,134244,132285],{"class":87},[28,134246,134247,134249,134251,134253,134255,134257],{"class":30,"line":131},[28,134248,132290],{"class":2225},[28,134250,80063],{"class":38},[28,134252,129125],{"class":60},[28,134254,51693],{"class":38},[28,134256,132299],{"class":60},[28,134258,129695],{"class":38},[1727,134260],{"style":126621,"src":134261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134263,134264],{},"图片太大，盒子太小，此时需要修改图片的大小",[18,134266,134268],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[25,134269,134270],{"__ignoreMap":23},[28,134271,134272,134274,134276,134278,134280,134283,134285,134287,134290,134293,134295,134298],{"class":30,"line":31},[28,134273,1307],{"class":38},[28,134275,1727],{"class":51556},[28,134277,55495],{"class":2225},[28,134279,54],{"class":38},[28,134281,134282],{"class":127},"\"images\u002Fpic.jpg\"",[28,134284,55503],{"class":2225},[28,134286,54],{"class":38},[28,134288,134289],{"class":127},"\"描述文字\"",[28,134291,134292],{"class":2225}," title",[28,134294,54],{"class":38},[28,134296,134297],{"class":127},"\"悬停提示\"",[28,134299,51563],{"class":38},[1727,134301],{"style":126621,"src":134302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134304,134305],{},"制造遮罩层",[18,134307,134308],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,134309,134310],{"__ignoreMap":23},[28,134311,134312,134314,134316,134318,134320,134322,134324,134326,134328,134330,134332,134334],{"class":30,"line":31},[28,134313,1307],{"class":38},[28,134315,1727],{"class":51556},[28,134317,55495],{"class":2225},[28,134319,54],{"class":38},[28,134321,134282],{"class":127},[28,134323,55503],{"class":2225},[28,134325,54],{"class":38},[28,134327,134289],{"class":127},[28,134329,134292],{"class":2225},[28,134331,54],{"class":38},[28,134333,134297],{"class":127},[28,134335,51563],{"class":38},[14,134337,134338],{},"此时是这样的为标准流",[1727,134340],{"style":126621,"src":134341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134343,134344],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134346,134347],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134349,134350],{},"让他在中间，用center(background-position)",[14,134352,134353],{},"将需要变的尽可能放到一个盒子中",[14,134355,134356],{},"放大盒子上内部盒子发生变化",[18,134358,134360],{"className":126765,"code":134359,"language":126767,"meta":23,"style":23},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[25,134361,134362,134368,134378,134382,134389,134399,134411,134423],{"__ignoreMap":23},[28,134363,134364,134366],{"class":30,"line":31},[28,134365,127832],{"class":2225},[28,134367,15834],{"class":38},[28,134369,134370,134372,134374,134376],{"class":30,"line":48},[28,134371,132571],{"class":60},[28,134373,51693],{"class":38},[28,134375,55020],{"class":60},[28,134377,1558],{"class":38},[28,134379,134380],{"class":30,"line":84},[28,134381,1830],{"class":38},[28,134383,134384,134387],{"class":30,"line":91},[28,134385,134386],{"class":2225},".child",[28,134388,15834],{"class":38},[28,134390,134391,134393,134395,134397],{"class":30,"line":97},[28,134392,132571],{"class":60},[28,134394,51693],{"class":38},[28,134396,55087],{"class":60},[28,134398,1558],{"class":38},[28,134400,134401,134403,134405,134407,134409],{"class":30,"line":103},[28,134402,132585],{"class":60},[28,134404,51693],{"class":38},[28,134406,1054],{"class":60},[28,134408,729],{"class":34},[28,134410,1558],{"class":38},[28,134412,134413,134415,134417,134419,134421],{"class":30,"line":109},[28,134414,132602],{"class":60},[28,134416,51693],{"class":38},[28,134418,1054],{"class":60},[28,134420,729],{"class":34},[28,134422,1558],{"class":38},[28,134424,134425],{"class":30,"line":118},[28,134426,1830],{"class":38},[14,134428,134429],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[351,134431,134433],{"id":134432},"_122-精灵图","12.2 精灵图",[380,134435,134437],{"id":134436},"_1221-理解","12.2.1 理解",[363,134439,134440,134458],{},[366,134441,134442,134443,132671,134446,134449,134450,134453,134454,134457],{},"目的： ",[555,134444,134445],{},"为了有效地减少服务器接收和发送请求的次数",[555,134447,134448],{},"提高"," 页面的 ",[555,134451,134452],{},"加载速度"," ，出现了 ",[555,134455,134456],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[366,134459,134460,134461,134463,134464,134466,134467,134469,134470,134472,134473,134475,134476,134478],{},"使用精灵图核心：",[53972,134462],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53972,134465],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53972,134468],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53972,134471],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53972,134474],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53972,134477],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[380,134480,134482],{"id":134481},"_1222-扒图","12.2.2 扒图",[18,134484,134487],{"className":134485,"code":134486,"language":5449},[5447],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[25,134488,134486],{"__ignoreMap":23},[1727,134490],{"style":126621,"src":134491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1727,134493],{"style":126621,"src":134494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[380,134496,134498],{"id":134497},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1727,134500],{"style":126621,"src":134501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134503,134504],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1727,134506],{"style":126621,"src":134507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[18,134509,134511],{"className":126765,"code":134510,"language":126767,"meta":23,"style":23},"\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",[25,134512,134513,134518,134525,134537,134549,134568,134585],{"__ignoreMap":23},[28,134514,134515],{"class":30,"line":31},[28,134516,134517],{"class":87},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[28,134519,134520,134523],{"class":30,"line":48},[28,134521,134522],{"class":2225},".icon",[28,134524,15834],{"class":38},[28,134526,134527,134529,134531,134533,134535],{"class":30,"line":84},[28,134528,70824],{"class":60},[28,134530,51693],{"class":38},[28,134532,1098],{"class":60},[28,134534,51748],{"class":34},[28,134536,1558],{"class":38},[28,134538,134539,134541,134543,134545,134547],{"class":30,"line":91},[28,134540,71044],{"class":60},[28,134542,51693],{"class":38},[28,134544,1098],{"class":60},[28,134546,51748],{"class":34},[28,134548,1558],{"class":38},[28,134550,134551,134553,134555,134557,134559,134562,134564,134566],{"class":30,"line":97},[28,134552,70867],{"class":60},[28,134554,51693],{"class":38},[28,134556,61982],{"class":60},[28,134558,413],{"class":38},[28,134560,134561],{"class":5478},"sprites.png",[28,134563,13976],{"class":38},[28,134565,61992],{"class":60},[28,134567,1558],{"class":38},[28,134569,134570,134572,134574,134576,134578,134581,134583],{"class":30,"line":103},[28,134571,129025],{"class":60},[28,134573,51693],{"class":38},[28,134575,52019],{"class":60},[28,134577,51748],{"class":34},[28,134579,134580],{"class":60}," -20",[28,134582,51748],{"class":34},[28,134584,1558],{"class":38},[28,134586,134587],{"class":30,"line":109},[28,134588,1830],{"class":38},[1727,134590],{"style":126621,"src":134591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134593,134594],{},"在前端中坐标轴的正方向是右和下",[351,134596,134598],{"id":134597},"_123-字体图标","12.3 字体图标",[380,134600,134602],{"id":134601},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134604,134605],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134607,134608],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134610,134611],{},"1.图片文件还是比较大的。",[14,134613,134614],{},"2.图片本身放大和缩小会失真。",[14,134616,134617],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134619,134620,134621,26003],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[555,134622,134623],{},"字体图标 iconfont",[14,134625,134626,134629,134630,28648],{},[555,134627,134628],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[555,134631,134632],{},"展示的是图标，本质属于字体",[380,134634,134636],{"id":134635},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1404,134638,134639,134644,134647,134650,134653],{},[366,134640,134641,134643],{},[555,134642,26139],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[366,134645,134646],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[366,134648,134649],{},"兼容性：几乎支持所有的浏览器，请放心使用",[366,134651,134652],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[366,134654,134655],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[380,134657,134659],{"id":134658},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1404,134661,134662],{},[366,134663,134664,134665],{},"icomoon字体库：",[51,134666,134669],{"href":134667,"rel":134668},"http:\u002F\u002Ficomoon.io\u002F",[24127],"http:\u002F\u002Ficomoon.io",[14,134671,134672],{},"进去之后点icomoon app",[1727,134674],{"style":126621,"src":134675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134677,134678],{},"可以对其编辑：",[1727,134680],{"style":126621,"src":134681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134683,134684],{},"生成字体：",[1727,134686],{"style":126621,"src":134687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134689,134690],{},"下载：",[1727,134692],{"style":126621,"src":134693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1404,134695,134696],{},[366,134697,134698,134699],{},"阿里iconfont字体库： ",[51,134700,134701],{"href":134701,"rel":134702},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24127],[380,134704,134706],{"id":134705},"_1234-字体图标的引入","12.3.4 字体图标的引入",[363,134708,134709],{},[366,134710,134711,134712,134715],{},"把下载包里面的 ",[555,134713,134714],{},"fonts"," 文件夹放入页面根目录下",[1727,134717],{"style":126621,"src":134718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[363,134720,134721],{"start":48},[366,134722,134723],{},"字体文件格式",[543,134725,134726,134735],{},[546,134727,134728],{},[549,134729,134730,134733],{},[552,134731,134732],{"align":23998},"格式",[552,134734,24002],{"align":23998},[590,134736,134737,134747,134757,134767],{},[549,134738,134739,134744],{},[595,134740,134741],{"align":23998},[555,134742,134743],{},".ttf",[595,134745,134746],{"align":23998},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[549,134748,134749,134754],{},[595,134750,134751],{"align":23998},[555,134752,134753],{},".woff",[595,134755,134756],{"align":23998},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[549,134758,134759,134764],{},[595,134760,134761],{"align":23998},[555,134762,134763],{},".eot",[595,134765,134766],{"align":23998},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[549,134768,134769,134774],{},[595,134770,134771],{"align":23998},[555,134772,134773],{},"svg",[595,134775,134776],{"align":23998},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[363,134778,134779],{"start":84},[366,134780,134781],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[18,134783,134785],{"className":126765,"code":134784,"language":126767,"meta":23,"style":23},"\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",[25,134786,134787,134792,134799,134811,134827,134852,134873,134893,134913,134917,134923,134933,134944],{"__ignoreMap":23},[28,134788,134789],{"class":30,"line":31},[28,134790,134791],{"class":87},"\u002F* 引入字体图标 *\u002F\n",[28,134793,134794,134797],{"class":30,"line":48},[28,134795,134796],{"class":34},"@font-face",[28,134798,15834],{"class":38},[28,134800,134801,134804,134806,134809],{"class":30,"line":84},[28,134802,134803],{"class":60},"  font-family",[28,134805,51693],{"class":38},[28,134807,134808],{"class":127},"'icomoon'",[28,134810,1558],{"class":38},[28,134812,134813,134816,134818,134820,134822,134825],{"class":30,"line":91},[28,134814,134815],{"class":60},"  src",[28,134817,51693],{"class":38},[28,134819,61982],{"class":60},[28,134821,413],{"class":38},[28,134823,134824],{"class":127},"'fonts\u002Ficomoon.eot'",[28,134826,2981],{"class":38},[28,134828,134829,134831,134833,134835,134837,134840,134842,134845,134847,134850],{"class":30,"line":97},[28,134830,134815],{"class":60},[28,134832,51693],{"class":38},[28,134834,61982],{"class":60},[28,134836,413],{"class":38},[28,134838,134839],{"class":127},"'fonts\u002Ficomoon.eot?#iefix'",[28,134841,13976],{"class":38},[28,134843,134844],{"class":60},"format",[28,134846,413],{"class":38},[28,134848,134849],{"class":127},"'embedded-opentype'",[28,134851,38303],{"class":38},[28,134853,134854,134857,134859,134862,134864,134866,134868,134871],{"class":30,"line":103},[28,134855,134856],{"class":60},"       url",[28,134858,413],{"class":38},[28,134860,134861],{"class":127},"'fonts\u002Ficomoon.woff'",[28,134863,13976],{"class":38},[28,134865,134844],{"class":60},[28,134867,413],{"class":38},[28,134869,134870],{"class":127},"'woff'",[28,134872,38303],{"class":38},[28,134874,134875,134877,134879,134882,134884,134886,134888,134891],{"class":30,"line":109},[28,134876,134856],{"class":60},[28,134878,413],{"class":38},[28,134880,134881],{"class":127},"'fonts\u002Ficomoon.ttf'",[28,134883,13976],{"class":38},[28,134885,134844],{"class":60},[28,134887,413],{"class":38},[28,134889,134890],{"class":127},"'truetype'",[28,134892,38303],{"class":38},[28,134894,134895,134897,134899,134902,134904,134906,134908,134911],{"class":30,"line":118},[28,134896,134856],{"class":60},[28,134898,413],{"class":38},[28,134900,134901],{"class":127},"'fonts\u002Ficomoon.svg#icomoon'",[28,134903,13976],{"class":38},[28,134905,134844],{"class":60},[28,134907,413],{"class":38},[28,134909,134910],{"class":127},"'svg'",[28,134912,2981],{"class":38},[28,134914,134915],{"class":30,"line":124},[28,134916,1830],{"class":38},[28,134918,134919,134921],{"class":30,"line":131},[28,134920,134522],{"class":2225},[28,134922,15834],{"class":38},[28,134924,134925,134927,134929,134931],{"class":30,"line":137},[28,134926,134803],{"class":60},[28,134928,51693],{"class":38},[28,134930,134808],{"class":127},[28,134932,1558],{"class":38},[28,134934,134935,134938,134940,134942],{"class":30,"line":143},[28,134936,134937],{"class":60},"  font-style",[28,134939,51693],{"class":38},[28,134941,64097],{"class":60},[28,134943,1558],{"class":38},[28,134945,134946],{"class":30,"line":149},[28,134947,1830],{"class":38},[14,134949,134950],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1727,134952],{"style":126621,"src":134953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[363,134955,134956],{"start":91},[366,134957,134958],{},"添加字体",[1727,134960],{"style":126621,"src":134961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134963,134964],{},"复制：",[1727,134966],{"style":126621,"src":134967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134969,134970],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[363,134972,134973],{"start":97},[366,134974,134975],{},"代码展示：",[18,134977,134978],{"className":126765,"code":134784,"language":126767,"meta":23,"style":23},[25,134979,134980,134984,134990,135000,135014,135036,135054,135072,135090,135094,135100,135110,135120],{"__ignoreMap":23},[28,134981,134982],{"class":30,"line":31},[28,134983,134791],{"class":87},[28,134985,134986,134988],{"class":30,"line":48},[28,134987,134796],{"class":34},[28,134989,15834],{"class":38},[28,134991,134992,134994,134996,134998],{"class":30,"line":84},[28,134993,134803],{"class":60},[28,134995,51693],{"class":38},[28,134997,134808],{"class":127},[28,134999,1558],{"class":38},[28,135001,135002,135004,135006,135008,135010,135012],{"class":30,"line":91},[28,135003,134815],{"class":60},[28,135005,51693],{"class":38},[28,135007,61982],{"class":60},[28,135009,413],{"class":38},[28,135011,134824],{"class":127},[28,135013,2981],{"class":38},[28,135015,135016,135018,135020,135022,135024,135026,135028,135030,135032,135034],{"class":30,"line":97},[28,135017,134815],{"class":60},[28,135019,51693],{"class":38},[28,135021,61982],{"class":60},[28,135023,413],{"class":38},[28,135025,134839],{"class":127},[28,135027,13976],{"class":38},[28,135029,134844],{"class":60},[28,135031,413],{"class":38},[28,135033,134849],{"class":127},[28,135035,38303],{"class":38},[28,135037,135038,135040,135042,135044,135046,135048,135050,135052],{"class":30,"line":103},[28,135039,134856],{"class":60},[28,135041,413],{"class":38},[28,135043,134861],{"class":127},[28,135045,13976],{"class":38},[28,135047,134844],{"class":60},[28,135049,413],{"class":38},[28,135051,134870],{"class":127},[28,135053,38303],{"class":38},[28,135055,135056,135058,135060,135062,135064,135066,135068,135070],{"class":30,"line":109},[28,135057,134856],{"class":60},[28,135059,413],{"class":38},[28,135061,134881],{"class":127},[28,135063,13976],{"class":38},[28,135065,134844],{"class":60},[28,135067,413],{"class":38},[28,135069,134890],{"class":127},[28,135071,38303],{"class":38},[28,135073,135074,135076,135078,135080,135082,135084,135086,135088],{"class":30,"line":118},[28,135075,134856],{"class":60},[28,135077,413],{"class":38},[28,135079,134901],{"class":127},[28,135081,13976],{"class":38},[28,135083,134844],{"class":60},[28,135085,413],{"class":38},[28,135087,134910],{"class":127},[28,135089,2981],{"class":38},[28,135091,135092],{"class":30,"line":124},[28,135093,1830],{"class":38},[28,135095,135096,135098],{"class":30,"line":131},[28,135097,134522],{"class":2225},[28,135099,15834],{"class":38},[28,135101,135102,135104,135106,135108],{"class":30,"line":137},[28,135103,134803],{"class":60},[28,135105,51693],{"class":38},[28,135107,134808],{"class":127},[28,135109,1558],{"class":38},[28,135111,135112,135114,135116,135118],{"class":30,"line":143},[28,135113,134937],{"class":60},[28,135115,51693],{"class":38},[28,135117,64097],{"class":60},[28,135119,1558],{"class":38},[28,135121,135122],{"class":30,"line":149},[28,135123,1830],{"class":38},[1727,135125],{"style":126621,"src":135126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135128,135129],{},"更加细节展示：",[363,135131,135132],{},[366,135133,135134],{},"html 标签内添加小图标",[1727,135136],{"style":126621,"src":135137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[363,135139,135140],{"start":48},[366,135141,135142],{},"给标签定义字体",[18,135144,135145],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,135146,135147,135151,135165,135169],{"__ignoreMap":23},[28,135148,135149],{"class":30,"line":31},[28,135150,130876],{"class":87},[28,135152,135153,135155,135157,135159,135161,135163],{"class":30,"line":48},[28,135154,1307],{"class":38},[28,135156,51867],{"class":51556},[28,135158,53742],{"class":2225},[28,135160,54],{"class":38},[28,135162,130889],{"class":127},[28,135164,51563],{"class":38},[28,135166,135167],{"class":30,"line":84},[28,135168,130896],{"class":38},[28,135170,135171,135173,135175],{"class":30,"line":91},[28,135172,52041],{"class":38},[28,135174,51867],{"class":51556},[28,135176,51563],{"class":38},[14,135178,135179],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1727,135181],{"style":126621,"src":135182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[380,135184,135186],{"id":135185},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135188,135189],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135191,135192,135193,135196],{},"把压缩包里面的 ",[555,135194,135195],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135198,135199],{},"打开网站，点下方：",[1727,135201],{"style":126621,"src":135202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1727,135204],{"style":126621,"src":135205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1727,135207],{"style":126621,"src":135208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135210,135211],{},"点yes重新加载",[14,135213,135214],{},"然后重复之前的操作就可以实现了",[14,135216,135217],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[380,135219,135221],{"id":135220},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1727,135223],{"style":126621,"src":135224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[328,135226,135227],{},"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":23,"searchDepth":48,"depth":48,"links":135229},[135230,135236,135241],{"id":133833,"depth":48,"text":133834,"children":135231},[135232,135233,135234,135235],{"id":133845,"depth":84,"text":133846},{"id":133874,"depth":84,"text":133875},{"id":133902,"depth":84,"text":133903},{"id":133960,"depth":84,"text":133961},{"id":134432,"depth":48,"text":134433,"children":135237},[135238,135239,135240],{"id":134436,"depth":84,"text":134437},{"id":134481,"depth":84,"text":134482},{"id":134497,"depth":84,"text":134498},{"id":134597,"depth":48,"text":134598,"children":135242},[135243,135244,135245,135246,135247,135248],{"id":134601,"depth":84,"text":134602},{"id":134635,"depth":84,"text":134636},{"id":134658,"depth":84,"text":134659},{"id":134705,"depth":84,"text":134706},{"id":135185,"depth":84,"text":135186},{"id":135220,"depth":84,"text":135221},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133825,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135255,"title":135256,"body":135257,"description":333,"extension":334,"meta":136484,"navigation":336,"path":136485,"seo":136486,"stem":136487,"__hash__":136488},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135258,"toc":136465},[135259,135262,135266,135269,135283,135351,135381,135384,135388,135392,135494,135541,135545,135548,135551,135585,135588,135591,135594,135597,135600,135603,135606,135608,135611,135614,135617,135620,135623,135626,135629,135657,135660,135664,135667,135674,135677,135680,135706,135709,135713,135716,135719,135726,135730,135733,135735,135767,135770,135773,135785,135791,135794,135797,135800,135802,135806,135809,135812,135815,135860,135864,135866,135869,135876,135918,135921,135925,135930,135944,135948,135951,135954,135957,135960,135963,135997,136000,136003,136057,136060,136063,136066,136069,136121,136124,136127,136176,136180,136182,136185,136188,136191,136194,136197,136255,136258,136264,136267,136270,136302,136305,136309,136313,136316,136348,136352,136355,136399,136403,136406,136409,136412,136415,136418,136421,136424,136426,136429,136431,136434,136437,136440,136443,136448,136451,136453,136456,136459,136462],[10,135260,135256],{"id":135261},"_13-界面样式与布局技巧",[351,135263,135265],{"id":135264},"_131-css三角","13.1 css三角",[14,135267,135268],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1404,135270,135271,135274,135277,135280],{},[366,135272,135273],{},"用css 边框可以模拟三角效果",[366,135275,135276],{},"宽度高度为0",[366,135278,135279],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[366,135281,135282],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[18,135284,135286],{"className":126765,"code":135285,"language":126767,"meta":23,"style":23},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[25,135287,135288,135293,135300,135310,135320,135336,135347],{"__ignoreMap":23},[28,135289,135290],{"class":30,"line":31},[28,135291,135292],{"class":87},"\u002F* CSS 实现三角形 *\u002F\n",[28,135294,135295,135298],{"class":30,"line":48},[28,135296,135297],{"class":2225},".triangle",[28,135299,15834],{"class":38},[28,135301,135302,135304,135306,135308],{"class":30,"line":84},[28,135303,70824],{"class":60},[28,135305,51693],{"class":38},[28,135307,244],{"class":60},[28,135309,1558],{"class":38},[28,135311,135312,135314,135316,135318],{"class":30,"line":91},[28,135313,71044],{"class":60},[28,135315,51693],{"class":38},[28,135317,244],{"class":60},[28,135319,1558],{"class":38},[28,135321,135322,135324,135326,135328,135330,135332,135334],{"class":30,"line":97},[28,135323,71152],{"class":60},[28,135325,51693],{"class":38},[28,135327,845],{"class":60},[28,135329,51748],{"class":34},[28,135331,51777],{"class":60},[28,135333,64247],{"class":60},[28,135335,1558],{"class":38},[28,135337,135338,135341,135343,135345],{"class":30,"line":103},[28,135339,135340],{"class":60},"  border-bottom-color",[28,135342,51693],{"class":38},[28,135344,62625],{"class":60},[28,135346,1558],{"class":38},[28,135348,135349],{"class":30,"line":109},[28,135350,1830],{"class":38},[18,135352,135353],{"className":126765,"code":130922,"language":126767,"meta":23,"style":23},[25,135354,135355,135361,135377],{"__ignoreMap":23},[28,135356,135357,135359],{"class":30,"line":31},[28,135358,51867],{"class":51556},[28,135360,15834],{"class":38},[28,135362,135363,135365,135367,135369,135371,135373,135375],{"class":30,"line":48},[28,135364,71152],{"class":60},[28,135366,51693],{"class":38},[28,135368,61],{"class":60},[28,135370,51748],{"class":34},[28,135372,51777],{"class":60},[28,135374,130157],{"class":60},[28,135376,1558],{"class":38},[28,135378,135379],{"class":30,"line":84},[28,135380,1830],{"class":38},[1727,135382],{"style":126621,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[351,135385,135387],{"id":135386},"_132-css用户界面样式","13.2 css用户界面样式",[380,135389,135391],{"id":135390},"_1321-鼠标样式","13.2.1 鼠标样式",[18,135393,135395],{"className":126765,"code":135394,"language":126767,"meta":23,"style":23},"\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",[25,135396,135397,135402,135421,135439,135458,135475],{"__ignoreMap":23},[28,135398,135399],{"class":30,"line":31},[28,135400,135401],{"class":87},"\u002F* 鼠标样式 *\u002F\n",[28,135403,135404,135406,135408,135411,135413,135415,135418],{"class":30,"line":48},[28,135405,51867],{"class":51556},[28,135407,80063],{"class":38},[28,135409,135410],{"class":60},"cursor",[28,135412,51693],{"class":38},[28,135414,62286],{"class":60},[28,135416,135417],{"class":38},"; }   ",[28,135419,135420],{"class":87},"\u002F* 手型 *\u002F\n",[28,135422,135423,135425,135427,135429,135431,135434,135436],{"class":30,"line":84},[28,135424,51867],{"class":51556},[28,135426,80063],{"class":38},[28,135428,135410],{"class":60},[28,135430,51693],{"class":38},[28,135432,135433],{"class":60},"default",[28,135435,135417],{"class":38},[28,135437,135438],{"class":87},"\u002F* 默认 *\u002F\n",[28,135440,135441,135443,135445,135447,135449,135452,135455],{"class":30,"line":91},[28,135442,51867],{"class":51556},[28,135444,80063],{"class":38},[28,135446,135410],{"class":60},[28,135448,51693],{"class":38},[28,135450,135451],{"class":60},"move",[28,135453,135454],{"class":38},"; }      ",[28,135456,135457],{"class":87},"\u002F* 移动 *\u002F\n",[28,135459,135460,135462,135464,135466,135468,135470,135472],{"class":30,"line":97},[28,135461,51867],{"class":51556},[28,135463,80063],{"class":38},[28,135465,135410],{"class":60},[28,135467,51693],{"class":38},[28,135469,5449],{"class":60},[28,135471,135454],{"class":38},[28,135473,135474],{"class":87},"\u002F* 文本 *\u002F\n",[28,135476,135477,135479,135481,135483,135485,135488,135491],{"class":30,"line":103},[28,135478,51867],{"class":51556},[28,135480,80063],{"class":38},[28,135482,135410],{"class":60},[28,135484,51693],{"class":38},[28,135486,135487],{"class":60},"not-allowed",[28,135489,135490],{"class":38},"; } ",[28,135492,135493],{"class":87},"\u002F* 禁止 *\u002F\n",[543,135495,135496,135504],{},[546,135497,135498],{},[549,135499,135500,135502],{},[552,135501,127229],{"align":23998},[552,135503,27752],{"align":23998},[590,135505,135506,135513,135520,135527,135534],{},[549,135507,135508,135510],{},[595,135509,135433],{"align":23998},[595,135511,135512],{"align":23998},"小白 默认",[549,135514,135515,135517],{},[595,135516,62286],{"align":23998},[595,135518,135519],{"align":23998},"小手",[549,135521,135522,135524],{},[595,135523,135451],{"align":23998},[595,135525,135526],{"align":23998},"移动",[549,135528,135529,135531],{},[595,135530,5449],{"align":23998},[595,135532,135533],{"align":23998},"文本",[549,135535,135536,135538],{},[595,135537,135487],{"align":23998},[595,135539,135540],{"align":23998},"禁止",[380,135542,135544],{"id":135543},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135546,135547],{},"去除表单轮廓线",[14,135549,135550],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[18,135552,135553],{"className":126765,"code":130129,"language":126767,"meta":23,"style":23},[25,135554,135555,135559,135565,135581],{"__ignoreMap":23},[28,135556,135557],{"class":30,"line":31},[28,135558,130136],{"class":87},[28,135560,135561,135563],{"class":30,"line":48},[28,135562,51867],{"class":51556},[28,135564,15834],{"class":38},[28,135566,135567,135569,135571,135573,135575,135577,135579],{"class":30,"line":84},[28,135568,71152],{"class":60},[28,135570,51693],{"class":38},[28,135572,61],{"class":60},[28,135574,51748],{"class":34},[28,135576,51777],{"class":60},[28,135578,130157],{"class":60},[28,135580,1558],{"class":38},[28,135582,135583],{"class":30,"line":91},[28,135584,1830],{"class":38},[14,135586,135587],{},"文本域：",[1727,135589],{"style":126621,"src":135590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135592,135593],{},"此时会有一个空白区域",[1727,135595],{"style":126621,"src":135596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135598,135599],{},"写在同一行就不会出现这个问题",[1727,135601],{"style":126621,"src":135602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135604,135605],{},"文本域是行内块元素，一定记住！！！",[14,135607,98485],{},[1727,135609],{"style":126621,"src":135610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135612,135613],{},"文本域尽量放在一行",[14,135615,135616],{},"知识回顾：cols是列，rols是行",[1727,135618],{"style":126621,"src":135619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135621,135622],{},"它可以进行拖动，显然这是我们不愿意看到的",[1727,135624],{"style":126621,"src":135625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135627,135628],{},"使用resize进行解决",[18,135630,135632],{"className":126765,"code":135631,"language":126767,"meta":23,"style":23},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[25,135633,135634,135640,135653],{"__ignoreMap":23},[28,135635,135636,135638],{"class":30,"line":31},[28,135637,54077],{"class":51556},[28,135639,15834],{"class":38},[28,135641,135642,135644,135646,135648,135650],{"class":30,"line":48},[28,135643,71054],{"class":60},[28,135645,51693],{"class":38},[28,135647,54993],{"class":60},[28,135649,130628],{"class":38},[28,135651,135652],{"class":87},"\u002F* 取消表单轮廓线 *\u002F\n",[28,135654,135655],{"class":30,"line":84},[28,135656,1830],{"class":38},[14,135658,135659],{},"此时就无法通过右下方实现拖动了",[380,135661,135663],{"id":135662},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135665,135666],{},"实现一个盒子中的文字和图片对齐",[14,135668,135669,135670,135673],{},"用于设置一个元素的 ",[555,135671,135672],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135675,135676],{},"图片和文字默认是基线对齐",[1727,135678],{"style":126621,"src":135679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[18,135681,135682],{"className":126765,"code":135631,"language":126767,"meta":23,"style":23},[25,135683,135684,135690,135702],{"__ignoreMap":23},[28,135685,135686,135688],{"class":30,"line":31},[28,135687,54077],{"class":51556},[28,135689,15834],{"class":38},[28,135691,135692,135694,135696,135698,135700],{"class":30,"line":48},[28,135693,71054],{"class":60},[28,135695,51693],{"class":38},[28,135697,54993],{"class":60},[28,135699,130628],{"class":38},[28,135701,135652],{"class":87},[28,135703,135704],{"class":30,"line":84},[28,135705,1830],{"class":38},[1727,135707],{"style":126621,"src":135708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22260,135710,135712],{"id":135711},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135714,135715],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1727,135717],{"style":126621,"src":135718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135720,135721,135722,135725],{},"此时可以给图片、表单这些行内块元素的 ",[555,135723,135724],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22260,135727,135729],{"id":135728},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135731,135732],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135734,14895],{},[18,135736,135738],{"className":126765,"code":135737,"language":126767,"meta":23,"style":23},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[25,135739,135740,135745,135751,135763],{"__ignoreMap":23},[28,135741,135742],{"class":30,"line":31},[28,135743,135744],{"class":87},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[28,135746,135747,135749],{"class":30,"line":48},[28,135748,1727],{"class":51556},[28,135750,15834],{"class":38},[28,135752,135753,135756,135758,135761],{"class":30,"line":84},[28,135754,135755],{"class":60},"  vertical-align",[28,135757,51693],{"class":38},[28,135759,135760],{"class":60},"middle",[28,135762,1558],{"class":38},[28,135764,135765],{"class":30,"line":91},[28,135766,1830],{"class":38},[1727,135768],{"style":126621,"src":135769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135771,135772],{},"主要解决方法有两种：",[363,135774,135775],{},[366,135776,135777,135780,135781,135784],{},[555,135778,135779],{},"给图片"," 添加 ",[555,135782,135783],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135786,135787,135788],{},"2.把图片转换为块级元素 ",[555,135789,135790],{},"display: block",[14,135792,135793],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135795,135796],{},"img {",[14,135798,135799],{},"vertical-align:middle;",[14,135801,1343],{},[380,135803,135805],{"id":135804},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135807,135808],{},"效果：",[1727,135810],{"style":126621,"src":135811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135813,135814],{},"单行文本溢出显示省略号--必须满足三个条件：",[18,135816,135818],{"className":126765,"code":135817,"language":126767,"meta":23,"style":23},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[25,135819,135820,135825,135831,135841,135846,135856],{"__ignoreMap":23},[28,135821,135822],{"class":30,"line":31},[28,135823,135824],{"class":87},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[28,135826,135827,135829],{"class":30,"line":48},[28,135828,1727],{"class":51556},[28,135830,15834],{"class":38},[28,135832,135833,135835,135837,135839],{"class":30,"line":84},[28,135834,135755],{"class":60},[28,135836,51693],{"class":38},[28,135838,135760],{"class":60},[28,135840,1558],{"class":38},[28,135842,135843],{"class":30,"line":91},[28,135844,135845],{"class":87},"  \u002F* 或 *\u002F\n",[28,135847,135848,135850,135852,135854],{"class":30,"line":97},[28,135849,128381],{"class":60},[28,135851,51693],{"class":38},[28,135853,61125],{"class":60},[28,135855,1558],{"class":38},[28,135857,135858],{"class":30,"line":103},[28,135859,1830],{"class":38},[380,135861,135863],{"id":135862},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135865,135808],{},[1727,135867],{"style":126621,"src":135868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135870,135871,135872,135875],{},"多行文本溢出显示省略号， ",[555,135873,135874],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[18,135877,135878],{"className":126765,"code":135817,"language":126767,"meta":23,"style":23},[25,135879,135880,135884,135890,135900,135904,135914],{"__ignoreMap":23},[28,135881,135882],{"class":30,"line":31},[28,135883,135824],{"class":87},[28,135885,135886,135888],{"class":30,"line":48},[28,135887,1727],{"class":51556},[28,135889,15834],{"class":38},[28,135891,135892,135894,135896,135898],{"class":30,"line":84},[28,135893,135755],{"class":60},[28,135895,51693],{"class":38},[28,135897,135760],{"class":60},[28,135899,1558],{"class":38},[28,135901,135902],{"class":30,"line":91},[28,135903,135845],{"class":87},[28,135905,135906,135908,135910,135912],{"class":30,"line":97},[28,135907,128381],{"class":60},[28,135909,51693],{"class":38},[28,135911,61125],{"class":60},[28,135913,1558],{"class":38},[28,135915,135916],{"class":30,"line":103},[28,135917,1830],{"class":38},[14,135919,135920],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[351,135922,135924],{"id":135923},"_133-常见布局技巧","13.3 常见布局技巧",[14,135926,135927],{},[555,135928,135929],{},"巧妙利用一个技术更快更好的布局：",[363,135931,135932,135935,135938,135941],{},[366,135933,135934],{},"margin负值的运用",[366,135936,135937],{},"文字围绕浮动元素",[366,135939,135940],{},"行内块的巧妙运用",[366,135942,135943],{},"CSS三角强化",[380,135945,135947],{"id":135946},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135949,135950],{},"应用场景：",[1727,135952],{"style":126621,"src":135953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1727,135955],{"style":126621,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135958,135959],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135961,135962],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[18,135964,135965],{"className":126765,"code":130129,"language":126767,"meta":23,"style":23},[25,135966,135967,135971,135977,135993],{"__ignoreMap":23},[28,135968,135969],{"class":30,"line":31},[28,135970,130136],{"class":87},[28,135972,135973,135975],{"class":30,"line":48},[28,135974,51867],{"class":51556},[28,135976,15834],{"class":38},[28,135978,135979,135981,135983,135985,135987,135989,135991],{"class":30,"line":84},[28,135980,71152],{"class":60},[28,135982,51693],{"class":38},[28,135984,61],{"class":60},[28,135986,51748],{"class":34},[28,135988,51777],{"class":60},[28,135990,130157],{"class":60},[28,135992,1558],{"class":38},[28,135994,135995],{"class":30,"line":91},[28,135996,1830],{"class":38},[1727,135998],{"style":126621,"src":135999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136001,136002],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[18,136004,136006],{"className":126765,"code":136005,"language":126767,"meta":23,"style":23},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,136007,136008,136013,136019,136029,136041,136053],{"__ignoreMap":23},[28,136009,136010],{"class":30,"line":31},[28,136011,136012],{"class":87},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[28,136014,136015,136017],{"class":30,"line":48},[28,136016,130613],{"class":2225},[28,136018,15834],{"class":38},[28,136020,136021,136023,136025,136027],{"class":30,"line":84},[28,136022,132571],{"class":60},[28,136024,51693],{"class":38},[28,136026,55020],{"class":60},[28,136028,1558],{"class":38},[28,136030,136031,136033,136035,136037,136039],{"class":30,"line":91},[28,136032,132585],{"class":60},[28,136034,51693],{"class":38},[28,136036,845],{"class":60},[28,136038,51748],{"class":34},[28,136040,1558],{"class":38},[28,136042,136043,136045,136047,136049,136051],{"class":30,"line":97},[28,136044,132602],{"class":60},[28,136046,51693],{"class":38},[28,136048,1098],{"class":60},[28,136050,51748],{"class":34},[28,136052,1558],{"class":38},[28,136054,136055],{"class":30,"line":103},[28,136056,1830],{"class":38},[14,136058,136059],{},"加上上述代码会发现：",[1727,136061],{"style":126621,"src":136062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136064,136065],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136067,136068],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[18,136070,136071],{"className":126765,"code":136005,"language":126767,"meta":23,"style":23},[25,136072,136073,136077,136083,136093,136105,136117],{"__ignoreMap":23},[28,136074,136075],{"class":30,"line":31},[28,136076,136012],{"class":87},[28,136078,136079,136081],{"class":30,"line":48},[28,136080,130613],{"class":2225},[28,136082,15834],{"class":38},[28,136084,136085,136087,136089,136091],{"class":30,"line":84},[28,136086,132571],{"class":60},[28,136088,51693],{"class":38},[28,136090,55020],{"class":60},[28,136092,1558],{"class":38},[28,136094,136095,136097,136099,136101,136103],{"class":30,"line":91},[28,136096,132585],{"class":60},[28,136098,51693],{"class":38},[28,136100,845],{"class":60},[28,136102,51748],{"class":34},[28,136104,1558],{"class":38},[28,136106,136107,136109,136111,136113,136115],{"class":30,"line":97},[28,136108,132602],{"class":60},[28,136110,51693],{"class":38},[28,136112,1098],{"class":60},[28,136114,51748],{"class":34},[28,136116,1558],{"class":38},[28,136118,136119],{"class":30,"line":103},[28,136120,1830],{"class":38},[14,136122,136123],{},"解决方式2：",[14,136125,136126],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[18,136128,136130],{"className":126765,"code":136129,"language":126767,"meta":23,"style":23},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,136131,136132,136138,136148,136160,136172],{"__ignoreMap":23},[28,136133,136134,136136],{"class":30,"line":31},[28,136135,51867],{"class":51556},[28,136137,15834],{"class":38},[28,136139,136140,136142,136144,136146],{"class":30,"line":48},[28,136141,132571],{"class":60},[28,136143,51693],{"class":38},[28,136145,55020],{"class":60},[28,136147,1558],{"class":38},[28,136149,136150,136152,136154,136156,136158],{"class":30,"line":84},[28,136151,132585],{"class":60},[28,136153,51693],{"class":38},[28,136155,845],{"class":60},[28,136157,51748],{"class":34},[28,136159,1558],{"class":38},[28,136161,136162,136164,136166,136168,136170],{"class":30,"line":91},[28,136163,132602],{"class":60},[28,136165,51693],{"class":38},[28,136167,1098],{"class":60},[28,136169,51748],{"class":34},[28,136171,1558],{"class":38},[28,136173,136174],{"class":30,"line":97},[28,136175,1830],{"class":38},[380,136177,136179],{"id":136178},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136181,135950],{},[1727,136183],{"style":126621,"src":136184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136186,136187],{},"实现结构图：",[1727,136189],{"style":126621,"src":136190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136192,136193],{},"巧妙运用浮动元素不会压住文字的特性",[14,136195,136196],{},"代码显示：",[18,136198,136200],{"className":126765,"code":136199,"language":126767,"meta":23,"style":23},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,136201,136202,136208,136218,136222,136227,136231,136237,136251],{"__ignoreMap":23},[28,136203,136204,136206],{"class":30,"line":31},[28,136205,130613],{"class":2225},[28,136207,15834],{"class":38},[28,136209,136210,136212,136214,136216],{"class":30,"line":48},[28,136211,131245],{"class":60},[28,136213,51693],{"class":38},[28,136215,23998],{"class":60},[28,136217,1558],{"class":38},[28,136219,136220],{"class":30,"line":84},[28,136221,1830],{"class":38},[28,136223,136224],{"class":30,"line":91},[28,136225,136226],{"class":38},"```Css\n",[28,136228,136229],{"class":30,"line":97},[28,136230,130608],{"class":87},[28,136232,136233,136235],{"class":30,"line":103},[28,136234,130613],{"class":2225},[28,136236,15834],{"class":38},[28,136238,136239,136241,136243,136245,136247,136249],{"class":30,"line":109},[28,136240,70726],{"class":60},[28,136242,51693],{"class":38},[28,136244,244],{"class":60},[28,136246,51812],{"class":60},[28,136248,130628],{"class":38},[28,136250,130631],{"class":87},[28,136252,136253],{"class":30,"line":118},[28,136254,1830],{"class":38},[14,136256,136257],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[18,136259,136262],{"className":136260,"code":136261,"language":5449},[5447],"\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",[25,136263,136261],{"__ignoreMap":23},[1727,136265],{"style":126621,"src":136266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136268,136269],{},"最终展示结果：",[18,136271,136272],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,136273,136274,136278,136284,136298],{"__ignoreMap":23},[28,136275,136276],{"class":30,"line":31},[28,136277,130608],{"class":87},[28,136279,136280,136282],{"class":30,"line":48},[28,136281,130613],{"class":2225},[28,136283,15834],{"class":38},[28,136285,136286,136288,136290,136292,136294,136296],{"class":30,"line":84},[28,136287,70726],{"class":60},[28,136289,51693],{"class":38},[28,136291,244],{"class":60},[28,136293,51812],{"class":60},[28,136295,130628],{"class":38},[28,136297,130631],{"class":87},[28,136299,136300],{"class":30,"line":91},[28,136301,1830],{"class":38},[1727,136303],{"style":126621,"src":136304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[351,136306,136308],{"id":136307},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[380,136310,136312],{"id":136311},"_1341-原理","13.4.1 原理",[1727,136314],{"style":126621,"src":136315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[18,136317,136318],{"className":126765,"code":130601,"language":126767,"meta":23,"style":23},[25,136319,136320,136324,136330,136344],{"__ignoreMap":23},[28,136321,136322],{"class":30,"line":31},[28,136323,130608],{"class":87},[28,136325,136326,136328],{"class":30,"line":48},[28,136327,130613],{"class":2225},[28,136329,15834],{"class":38},[28,136331,136332,136334,136336,136338,136340,136342],{"class":30,"line":84},[28,136333,70726],{"class":60},[28,136335,51693],{"class":38},[28,136337,244],{"class":60},[28,136339,51812],{"class":60},[28,136341,130628],{"class":38},[28,136343,130631],{"class":87},[28,136345,136346],{"class":30,"line":91},[28,136347,1830],{"class":38},[380,136349,136351],{"id":136350},"_1342-实例","13.4.2 实例",[1727,136353],{"style":126621,"src":136354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[18,136356,136357],{"className":126765,"code":131231,"language":126767,"meta":23,"style":23},[25,136358,136359,136365,136375,136379,136385,136395],{"__ignoreMap":23},[28,136360,136361,136363],{"class":30,"line":31},[28,136362,131238],{"class":2225},[28,136364,15834],{"class":38},[28,136366,136367,136369,136371,136373],{"class":30,"line":48},[28,136368,131245],{"class":60},[28,136370,51693],{"class":38},[28,136372,23998],{"class":60},[28,136374,1558],{"class":38},[28,136376,136377],{"class":30,"line":84},[28,136378,1830],{"class":38},[28,136380,136381,136383],{"class":30,"line":91},[28,136382,131260],{"class":2225},[28,136384,15834],{"class":38},[28,136386,136387,136389,136391,136393],{"class":30,"line":97},[28,136388,131245],{"class":60},[28,136390,51693],{"class":38},[28,136392,72778],{"class":60},[28,136394,1558],{"class":38},[28,136396,136397],{"class":30,"line":103},[28,136398,1830],{"class":38},[351,136400,136402],{"id":136401},"_135-css的初始化","13.5 css的初始化",[14,136404,136405],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136407,136408],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136410,136411],{},"每个网页都必须首先进行 CSS初始化。",[14,136413,136414],{},"这里我们以 京东CSS初始化代码为例。",[14,136416,136417],{},"在网页右键查看网页源代码",[14,136419,136420],{},"找到css的link引入语句",[14,136422,136423],{},"然后ctrl+f 输入body",[14,136425,77482],{},[1727,136427],{"style":126621,"src":136428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136430,77505],{},[1727,136432],{"style":126621,"src":136433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136435,136436],{},"③打开了网页上传压缩的代码",[1727,136438],{"style":126621,"src":136439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136441,136442],{},"④从body前可以查看这个网页的初始化代码",[14,136444,136445],{},[555,136446,136447],{},"Unicode编码字体：",[14,136449,136450],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136452,83463],{},[14,136454,136455],{},"黑体 \\9ED1\\4F53",[14,136457,136458],{},"宋体 \\5B8B\\4F53",[14,136460,136461],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[328,136463,136464],{},"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":23,"searchDepth":48,"depth":48,"links":136466},[136467,136468,136475,136479,136483],{"id":135264,"depth":48,"text":135265},{"id":135386,"depth":48,"text":135387,"children":136469},[136470,136471,136472,136473,136474],{"id":135390,"depth":84,"text":135391},{"id":135543,"depth":84,"text":135544},{"id":135662,"depth":84,"text":135663},{"id":135804,"depth":84,"text":135805},{"id":135862,"depth":84,"text":135863},{"id":135923,"depth":48,"text":135924,"children":136476},[136477,136478],{"id":135946,"depth":84,"text":135947},{"id":136178,"depth":84,"text":136179},{"id":136307,"depth":48,"text":136308,"children":136480},[136481,136482],{"id":136311,"depth":84,"text":136312},{"id":136350,"depth":84,"text":136351},{"id":136401,"depth":48,"text":136402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135256,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136490,"title":136491,"body":136492,"description":333,"extension":334,"meta":138178,"navigation":336,"path":138179,"seo":138180,"stem":138181,"__hash__":138182},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136493,"toc":138167},[136494,136497,136501,136505,136508,136515,136518,136521,136559,136562,136564,136578,136582,136591,136595,136600,136603,136606,136609,136644,136649,136652,136682,136685,136690,136693,136696,136726,136729,136783,136786,136790,136795,136807,136810,136814,136844,136847,136852,136855,136885,136888,136892,136909,136913,136917,136920,136953,136956,136960,136963,136966,136969,136972,136975,137086,137089,137092,137095,137197,137200,137204,137208,137212,137215,137255,137258,137260,137276,137280,137283,137288,137369,137372,137375,137501,137506,137509,137517,137520,137525,137610,137613,137617,137620,137623,137627,137647,137652,137736,137739,137744,137747,137750,137828,137831,137834,137837,137840,137843,137848,137851,137854,137926,137929,137934,137937,138034,138037,138043,138046,138049,138052,138055,138058,138061,138064,138067,138071,138076,138079,138112,138117,138120,138161,138164],[10,136495,136491],{"id":136496},"_14-html5与css3新特性",[351,136498,136500],{"id":136499},"_141-html5的新特性","14.1 HTML5的新特性",[380,136502,136504],{"id":136503},"_1411-基本标签","14.1.1 基本标签",[14,136506,136507],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136509,136510,136511,136514],{},"这些新特性都有兼容性问题，基本是 ",[555,136512,136513],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136516,136517],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136519,136520],{},"现在使用的是新特性：",[1404,136522,136523,136529,136535,136541,136547,136553],{},[366,136524,136525,136528],{},[25,136526,136527],{},"\u003Cheader>"," 头部标签",[366,136530,136531,136534],{},[25,136532,136533],{},"\u003Cnav>"," 导航标签",[366,136536,136537,136540],{},[25,136538,136539],{},"\u003Carticle>"," 内容标签",[366,136542,136543,136546],{},[25,136544,136545],{},"\u003Csection>"," 定义文档某个区域",[366,136548,136549,136552],{},[25,136550,136551],{},"\u003Caside>"," 侧边栏标签",[366,136554,136555,136558],{},[25,136556,136557],{},"\u003Cfooter>"," 尾部标签",[1727,136560],{"style":126621,"src":136561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136563,441],{},[1404,136565,136566,136569,136572,136575],{},[366,136567,136568],{},"这种语义化标准主要是针对搜索引擎的",[366,136570,136571],{},"这些标签页面中可以经常使用",[366,136573,136574],{},"在IE9中，需要把这些元素转换为块级元素",[366,136576,136577],{},"移动端更喜欢使用这些标签",[380,136579,136581],{"id":136580},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136583,136584,136585,136587,136588,136590],{},"音频 ",[555,136586,28437],{}," 和视频 ",[555,136589,28446],{}," 两个标签",[22260,136592,136594],{"id":136593},"_14121-视频标签-video","14.1.2.1 视频标签- video",[363,136596,136597],{},[366,136598,136599],{},"支持格式：",[1727,136601],{"style":126621,"src":136602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136604,136605],{},"尽量使用MP4，兼容性好",[14,136607,136608],{},"用MP4就可以",[18,136610,136612],{"className":127512,"code":136611,"language":127514,"meta":23,"style":23},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[25,136613,136614],{"__ignoreMap":23},[28,136615,136616,136618,136620,136622,136624,136627,136629,136632,136635,136638,136640,136642],{"class":30,"line":31},[28,136617,1307],{"class":38},[28,136619,28446],{"class":51556},[28,136621,55495],{"class":2225},[28,136623,54],{"class":38},[28,136625,136626],{"class":127},"\"movie.mp4\"",[28,136628,92679],{"class":2225},[28,136630,136631],{"class":2225}," autoplay",[28,136633,136634],{"class":2225}," muted",[28,136636,136637],{"class":2225}," loop",[28,136639,55570],{"class":38},[28,136641,28446],{"class":51556},[28,136643,51563],{"class":38},[363,136645,136646],{"start":48},[366,136647,136648],{},"兼容写法",[14,136650,136651],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[18,136653,136654],{"className":127512,"code":136611,"language":127514,"meta":23,"style":23},[25,136655,136656],{"__ignoreMap":23},[28,136657,136658,136660,136662,136664,136666,136668,136670,136672,136674,136676,136678,136680],{"class":30,"line":31},[28,136659,1307],{"class":38},[28,136661,28446],{"class":51556},[28,136663,55495],{"class":2225},[28,136665,54],{"class":38},[28,136667,136626],{"class":127},[28,136669,92679],{"class":2225},[28,136671,136631],{"class":2225},[28,136673,136634],{"class":2225},[28,136675,136637],{"class":2225},[28,136677,55570],{"class":38},[28,136679,28446],{"class":51556},[28,136681,51563],{"class":38},[14,136683,136684],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[363,136686,136687],{"start":84},[366,136688,136689],{},"video常用属性",[1727,136691],{"style":126621,"src":136692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136694,136695],{},"poster属性后面是跟的等待加载图片的地址",[18,136697,136698],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,136699,136700],{"__ignoreMap":23},[28,136701,136702,136704,136706,136708,136710,136712,136714,136716,136718,136720,136722,136724],{"class":30,"line":31},[28,136703,1307],{"class":38},[28,136705,1727],{"class":51556},[28,136707,55495],{"class":2225},[28,136709,54],{"class":38},[28,136711,134282],{"class":127},[28,136713,55503],{"class":2225},[28,136715,54],{"class":38},[28,136717,134289],{"class":127},[28,136719,134292],{"class":2225},[28,136721,54],{"class":38},[28,136723,134297],{"class":127},[28,136725,51563],{"class":38},[14,136727,136728],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[18,136730,136732],{"className":126765,"code":136731,"language":126767,"meta":23,"style":23},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[25,136733,136734,136739,136745,136769,136774,136779],{"__ignoreMap":23},[28,136735,136736],{"class":30,"line":31},[28,136737,136738],{"class":87},"\u002F* 2D 位移 *\u002F\n",[28,136740,136741,136743],{"class":30,"line":48},[28,136742,51867],{"class":51556},[28,136744,15834],{"class":38},[28,136746,136747,136750,136752,136755,136757,136759,136761,136763,136765,136767],{"class":30,"line":84},[28,136748,136749],{"class":60},"  transform",[28,136751,51693],{"class":38},[28,136753,136754],{"class":60},"translate",[28,136756,413],{"class":38},[28,136758,713],{"class":60},[28,136760,51748],{"class":34},[28,136762,12697],{"class":38},[28,136764,1054],{"class":60},[28,136766,51748],{"class":34},[28,136768,2981],{"class":38},[28,136770,136771],{"class":30,"line":91},[28,136772,136773],{"class":87},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[28,136775,136776],{"class":30,"line":97},[28,136777,136778],{"class":87},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[28,136780,136781],{"class":30,"line":103},[28,136782,1830],{"class":38},[14,136784,136785],{},"muted:自动静音属性",[22260,136787,136789],{"id":136788},"_14122-音频标签audio","14.1.2.2 音频标签audio",[363,136791,136792],{},[366,136793,136794],{},"基本使用",[14,136796,136797,136798,136803,136804],{},"当前 ",[555,136799,136800],{},[25,136801,136802],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[555,136805,136806],{},"mp3格式",[1727,136808],{"style":126621,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[363,136811,136812],{"start":48},[366,136813,136648],{},[18,136815,136816],{"className":127512,"code":136611,"language":127514,"meta":23,"style":23},[25,136817,136818],{"__ignoreMap":23},[28,136819,136820,136822,136824,136826,136828,136830,136832,136834,136836,136838,136840,136842],{"class":30,"line":31},[28,136821,1307],{"class":38},[28,136823,28446],{"class":51556},[28,136825,55495],{"class":2225},[28,136827,54],{"class":38},[28,136829,136626],{"class":127},[28,136831,92679],{"class":2225},[28,136833,136631],{"class":2225},[28,136835,136634],{"class":2225},[28,136837,136637],{"class":2225},[28,136839,55570],{"class":38},[28,136841,28446],{"class":51556},[28,136843,51563],{"class":38},[14,136845,136846],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[363,136848,136849],{"start":84},[366,136850,136851],{},"常用属性",[1727,136853],{"style":126621,"src":136854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[18,136856,136857],{"className":127512,"code":136611,"language":127514,"meta":23,"style":23},[25,136858,136859],{"__ignoreMap":23},[28,136860,136861,136863,136865,136867,136869,136871,136873,136875,136877,136879,136881,136883],{"class":30,"line":31},[28,136862,1307],{"class":38},[28,136864,28446],{"class":51556},[28,136866,55495],{"class":2225},[28,136868,54],{"class":38},[28,136870,136626],{"class":127},[28,136872,92679],{"class":2225},[28,136874,136631],{"class":2225},[28,136876,136634],{"class":2225},[28,136878,136637],{"class":2225},[28,136880,55570],{"class":38},[28,136882,28446],{"class":51556},[28,136884,51563],{"class":38},[14,136886,136887],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22260,136889,136891],{"id":136890},"_14123-总结","14.1.2.3 总结",[1404,136893,136894,136897,136900,136903,136906],{},[366,136895,136896],{},"音频标签和视频标签使用方式基本一致",[366,136898,136899],{},"浏览器支持情况不同",[366,136901,136902],{},"谷歌浏览器把音频和视频自动播放禁止了",[366,136904,136905],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[366,136907,136908],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[380,136910,136912],{"id":136911},"_1413-表单元素","14.1.3 表单元素",[22260,136914,136916],{"id":136915},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1727,136918],{"style":126621,"src":136919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[18,136921,136923],{"className":127512,"code":136922,"language":127514,"meta":23,"style":23},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[25,136924,136925],{"__ignoreMap":23},[28,136926,136927,136929,136931,136933,136935,136937,136939,136941,136944,136946,136948,136951],{"class":30,"line":31},[28,136928,1307],{"class":38},[28,136930,54077],{"class":51556},[28,136932,54080],{"class":2225},[28,136934,54],{"class":38},[28,136936,62955],{"class":127},[28,136938,15182],{"class":2225},[28,136940,54],{"class":38},[28,136942,136943],{"class":127},"\"username\"",[28,136945,61276],{"class":2225},[28,136947,54],{"class":38},[28,136949,136950],{"class":127},"\"请输入用户名\"",[28,136952,51563],{"class":38},[1727,136954],{"style":126621,"src":136955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22260,136957,136959],{"id":136958},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1727,136961],{"style":126621,"src":136962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136964,136965],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136967,136968],{},"快捷操作：",[1727,136970],{"style":126621,"src":136971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136973,136974],{},"例子1：",[18,136976,136978],{"className":127512,"code":136977,"language":127514,"meta":23,"style":23},"\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",[25,136979,136980,137003,137030,137059,137078],{"__ignoreMap":23},[28,136981,136982,136984,136986,136988,136990,136993,136996,136998,137001],{"class":30,"line":31},[28,136983,1307],{"class":38},[28,136985,66881],{"class":51556},[28,136987,66884],{"class":2225},[28,136989,54],{"class":38},[28,136991,136992],{"class":127},"\"\u002Fsubmit\"",[28,136994,136995],{"class":2225}," method",[28,136997,54],{"class":38},[28,136999,137000],{"class":127},"\"post\"",[28,137002,51563],{"class":38},[28,137004,137005,137007,137009,137011,137013,137015,137017,137019,137021,137023,137025,137028],{"class":30,"line":48},[28,137006,52400],{"class":38},[28,137008,54077],{"class":51556},[28,137010,54080],{"class":2225},[28,137012,54],{"class":38},[28,137014,62955],{"class":127},[28,137016,15182],{"class":2225},[28,137018,54],{"class":38},[28,137020,136943],{"class":127},[28,137022,61276],{"class":2225},[28,137024,54],{"class":38},[28,137026,137027],{"class":127},"\"用户名\"",[28,137029,51563],{"class":38},[28,137031,137032,137034,137036,137038,137040,137043,137045,137047,137050,137052,137054,137057],{"class":30,"line":84},[28,137033,52400],{"class":38},[28,137035,54077],{"class":51556},[28,137037,54080],{"class":2225},[28,137039,54],{"class":38},[28,137041,137042],{"class":127},"\"password\"",[28,137044,15182],{"class":2225},[28,137046,54],{"class":38},[28,137048,137049],{"class":127},"\"pwd\"",[28,137051,61276],{"class":2225},[28,137053,54],{"class":38},[28,137055,137056],{"class":127},"\"密码\"",[28,137058,51563],{"class":38},[28,137060,137061,137063,137065,137067,137069,137071,137074,137076],{"class":30,"line":91},[28,137062,52400],{"class":38},[28,137064,54143],{"class":51556},[28,137066,54080],{"class":2225},[28,137068,54],{"class":38},[28,137070,66904],{"class":127},[28,137072,137073],{"class":38},">提交\u003C\u002F",[28,137075,54143],{"class":51556},[28,137077,51563],{"class":38},[28,137079,137080,137082,137084],{"class":30,"line":97},[28,137081,52041],{"class":38},[28,137083,66881],{"class":51556},[28,137085,51563],{"class":38},[1727,137087],{"style":126621,"src":137088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137090,137091],{},"value是表单域的内容",[14,137093,137094],{},"例子2：",[18,137096,137097],{"className":127512,"code":136977,"language":127514,"meta":23,"style":23},[25,137098,137099,137119,137145,137171,137189],{"__ignoreMap":23},[28,137100,137101,137103,137105,137107,137109,137111,137113,137115,137117],{"class":30,"line":31},[28,137102,1307],{"class":38},[28,137104,66881],{"class":51556},[28,137106,66884],{"class":2225},[28,137108,54],{"class":38},[28,137110,136992],{"class":127},[28,137112,136995],{"class":2225},[28,137114,54],{"class":38},[28,137116,137000],{"class":127},[28,137118,51563],{"class":38},[28,137120,137121,137123,137125,137127,137129,137131,137133,137135,137137,137139,137141,137143],{"class":30,"line":48},[28,137122,52400],{"class":38},[28,137124,54077],{"class":51556},[28,137126,54080],{"class":2225},[28,137128,54],{"class":38},[28,137130,62955],{"class":127},[28,137132,15182],{"class":2225},[28,137134,54],{"class":38},[28,137136,136943],{"class":127},[28,137138,61276],{"class":2225},[28,137140,54],{"class":38},[28,137142,137027],{"class":127},[28,137144,51563],{"class":38},[28,137146,137147,137149,137151,137153,137155,137157,137159,137161,137163,137165,137167,137169],{"class":30,"line":84},[28,137148,52400],{"class":38},[28,137150,54077],{"class":51556},[28,137152,54080],{"class":2225},[28,137154,54],{"class":38},[28,137156,137042],{"class":127},[28,137158,15182],{"class":2225},[28,137160,54],{"class":38},[28,137162,137049],{"class":127},[28,137164,61276],{"class":2225},[28,137166,54],{"class":38},[28,137168,137056],{"class":127},[28,137170,51563],{"class":38},[28,137172,137173,137175,137177,137179,137181,137183,137185,137187],{"class":30,"line":91},[28,137174,52400],{"class":38},[28,137176,54143],{"class":51556},[28,137178,54080],{"class":2225},[28,137180,54],{"class":38},[28,137182,66904],{"class":127},[28,137184,137073],{"class":38},[28,137186,54143],{"class":51556},[28,137188,51563],{"class":38},[28,137190,137191,137193,137195],{"class":30,"line":97},[28,137192,52041],{"class":38},[28,137194,66881],{"class":51556},[28,137196,51563],{"class":38},[1727,137198],{"style":126621,"src":137199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[351,137201,137203],{"id":137202},"_142-css新特性","14.2 CSS新特性",[380,137205,137207],{"id":137206},"_1421-新增选择器","14.2.1 新增选择器",[22260,137209,137211],{"id":137210},"_14211-属性选择器","14.2.1.1 属性选择器",[1727,137213],{"style":126621,"src":137214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[18,137216,137218],{"className":126765,"code":137217,"language":126767,"meta":23,"style":23},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[25,137219,137220,137235,137251],{"__ignoreMap":23},[28,137221,137222,137224,137226,137228,137230,137232],{"class":30,"line":31},[28,137223,54077],{"class":51556},[28,137225,1287],{"class":38},[28,137227,103320],{"class":2225},[28,137229,54],{"class":34},[28,137231,62955],{"class":127},[28,137233,137234],{"class":38},"] {\n",[28,137236,137237,137239,137241,137243,137245,137247,137249],{"class":30,"line":48},[28,137238,71152],{"class":60},[28,137240,51693],{"class":38},[28,137242,61],{"class":60},[28,137244,51748],{"class":34},[28,137246,51777],{"class":60},[28,137248,130345],{"class":60},[28,137250,1558],{"class":38},[28,137252,137253],{"class":30,"line":84},[28,137254,1830],{"class":38},[1727,137256],{"style":126621,"src":137257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137259,441],{},[1404,137261,137262,137265,137268,137271],{},[366,137263,137264],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[366,137266,137267],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[366,137269,137270],{},"属性选择器也可以选择出来自定义的属性",[366,137272,137273,137275],{},[555,137274,9287],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22260,137277,137279],{"id":137278},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1727,137281],{"style":126621,"src":137282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[363,137284,137285],{},[366,137286,137287],{},"fist-child",[18,137289,137291],{"className":126765,"code":137290,"language":126767,"meta":23,"style":23},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[25,137292,137293,137298,137313,137333,137351],{"__ignoreMap":23},[28,137294,137295],{"class":30,"line":31},[28,137296,137297],{"class":87},"\u002F* 属性选择器 *\u002F\n",[28,137299,137300,137302,137304,137306,137308,137310],{"class":30,"line":48},[28,137301,54077],{"class":51556},[28,137303,1287],{"class":38},[28,137305,103320],{"class":2225},[28,137307,54],{"class":34},[28,137309,62955],{"class":127},[28,137311,137312],{"class":38},"] { }\n",[28,137314,137315,137317,137319,137321,137324,137327,137330],{"class":30,"line":84},[28,137316,54077],{"class":51556},[28,137318,1287],{"class":38},[28,137320,14956],{"class":2225},[28,137322,137323],{"class":34},"^=",[28,137325,137326],{"class":127},"\"icon\"",[28,137328,137329],{"class":38},"] { }  ",[28,137331,137332],{"class":87},"\u002F* 以 icon 开头 *\u002F\n",[28,137334,137335,137337,137339,137341,137344,137346,137348],{"class":30,"line":91},[28,137336,54077],{"class":51556},[28,137338,1287],{"class":38},[28,137340,14956],{"class":2225},[28,137342,137343],{"class":34},"$=",[28,137345,137326],{"class":127},[28,137347,137329],{"class":38},[28,137349,137350],{"class":87},"\u002F* 以 icon 结尾 *\u002F\n",[28,137352,137353,137355,137357,137359,137362,137364,137366],{"class":30,"line":97},[28,137354,54077],{"class":51556},[28,137356,1287],{"class":38},[28,137358,14956],{"class":2225},[28,137360,137361],{"class":34},"*=",[28,137363,137326],{"class":127},[28,137365,137329],{"class":38},[28,137367,137368],{"class":87},"\u002F* 包含 icon *\u002F\n",[14,137370,137371],{},"ul的第一个儿子文本为红色",[14,137373,137374],{},"一定要在冒号前加空格，不然就是选中所有的了",[18,137376,137378],{"className":126765,"code":137377,"language":126767,"meta":23,"style":23},".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",[25,137379,137380,137386,137396,137400,137404,137409,137422,137435,137451,137468,137485],{"__ignoreMap":23},[28,137381,137382,137384],{"class":30,"line":31},[28,137383,127056],{"class":2225},[28,137385,15834],{"class":38},[28,137387,137388,137390,137392,137394],{"class":30,"line":48},[28,137389,71161],{"class":60},[28,137391,51693],{"class":38},[28,137393,57677],{"class":60},[28,137395,1558],{"class":38},[28,137397,137398],{"class":30,"line":84},[28,137399,1830],{"class":38},[28,137401,137402],{"class":30,"line":91},[28,137403,136226],{"class":38},[28,137405,137406],{"class":30,"line":97},[28,137407,137408],{"class":87},"\u002F* 结构伪类选择器 *\u002F\n",[28,137410,137411,137413,137416,137419],{"class":30,"line":103},[28,137412,366],{"class":51556},[28,137414,137415],{"class":2225},":first-child",[28,137417,137418],{"class":38}," { }           ",[28,137420,137421],{"class":87},"\u002F* 第一个 *\u002F\n",[28,137423,137424,137426,137429,137432],{"class":30,"line":109},[28,137425,366],{"class":51556},[28,137427,137428],{"class":2225},":last-child",[28,137430,137431],{"class":38}," { }            ",[28,137433,137434],{"class":87},"\u002F* 最后一个 *\u002F\n",[28,137436,137437,137439,137441,137443,137445,137448],{"class":30,"line":118},[28,137438,366],{"class":51556},[28,137440,129679],{"class":2225},[28,137442,413],{"class":38},[28,137444,211],{"class":60},[28,137446,137447],{"class":38},") { }          ",[28,137449,137450],{"class":87},"\u002F* 第2个 *\u002F\n",[28,137452,137453,137455,137457,137459,137462,137465],{"class":30,"line":124},[28,137454,366],{"class":51556},[28,137456,129679],{"class":2225},[28,137458,413],{"class":38},[28,137460,137461],{"class":60},"2n",[28,137463,137464],{"class":38},") { }         ",[28,137466,137467],{"class":87},"\u002F* 偶数 *\u002F\n",[28,137469,137470,137472,137474,137476,137479,137482],{"class":30,"line":131},[28,137471,366],{"class":51556},[28,137473,129679],{"class":2225},[28,137475,413],{"class":38},[28,137477,137478],{"class":60},"2n+1",[28,137480,137481],{"class":38},") { }       ",[28,137483,137484],{"class":87},"\u002F* 奇数 *\u002F\n",[28,137486,137487,137489,137491,137493,137496,137498],{"class":30,"line":137},[28,137488,366],{"class":51556},[28,137490,129679],{"class":2225},[28,137492,413],{"class":38},[28,137494,137495],{"class":60},"-n+3",[28,137497,137481],{"class":38},[28,137499,137500],{"class":87},"\u002F* 前3个 *\u002F\n",[51867,137502,137505],{"className":137503},[137504],"example","\n  示例内容\n",[14,137507,137508],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1404,137510,137511],{},[366,137512,137513,137516],{},[25,137514,137515],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137518,137519],{},"也就是说它选择的是熊大",[363,137521,137522],{"start":103},[366,137523,137524],{},"权重",[18,137526,137528],{"className":126765,"code":137527,"language":126767,"meta":23,"style":23},"\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",[25,137529,137530,137534,137544,137554,137568,137582,137596],{"__ignoreMap":23},[28,137531,137532],{"class":30,"line":31},[28,137533,137408],{"class":87},[28,137535,137536,137538,137540,137542],{"class":30,"line":48},[28,137537,366],{"class":51556},[28,137539,137415],{"class":2225},[28,137541,137418],{"class":38},[28,137543,137421],{"class":87},[28,137545,137546,137548,137550,137552],{"class":30,"line":84},[28,137547,366],{"class":51556},[28,137549,137428],{"class":2225},[28,137551,137431],{"class":38},[28,137553,137434],{"class":87},[28,137555,137556,137558,137560,137562,137564,137566],{"class":30,"line":91},[28,137557,366],{"class":51556},[28,137559,129679],{"class":2225},[28,137561,413],{"class":38},[28,137563,211],{"class":60},[28,137565,137447],{"class":38},[28,137567,137450],{"class":87},[28,137569,137570,137572,137574,137576,137578,137580],{"class":30,"line":97},[28,137571,366],{"class":51556},[28,137573,129679],{"class":2225},[28,137575,413],{"class":38},[28,137577,137461],{"class":60},[28,137579,137464],{"class":38},[28,137581,137467],{"class":87},[28,137583,137584,137586,137588,137590,137592,137594],{"class":30,"line":103},[28,137585,366],{"class":51556},[28,137587,129679],{"class":2225},[28,137589,413],{"class":38},[28,137591,137478],{"class":60},[28,137593,137481],{"class":38},[28,137595,137484],{"class":87},[28,137597,137598,137600,137602,137604,137606,137608],{"class":30,"line":109},[28,137599,366],{"class":51556},[28,137601,129679],{"class":2225},[28,137603,413],{"class":38},[28,137605,137495],{"class":60},[28,137607,137481],{"class":38},[28,137609,137500],{"class":87},[14,137611,137612],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22260,137614,137616],{"id":137615},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137618,137619],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1727,137621],{"style":126621,"src":137622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[363,137624,137625],{},[366,137626,441],{},[1404,137628,137629,137632,137635,137638,137641,137644],{},[366,137630,137631],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[366,137633,137634],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[366,137636,137637],{},"语法： element::before {}",[366,137639,137640],{},"before 和 after 必须有 content 属性",[366,137642,137643],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[366,137645,137646],{},"伪元素选择器和标签选择器一样，权重为 1",[363,137648,137649],{"start":48},[366,137650,137651],{},"实例",[18,137653,137654],{"className":126765,"code":137527,"language":126767,"meta":23,"style":23},[25,137655,137656,137660,137670,137680,137694,137708,137722],{"__ignoreMap":23},[28,137657,137658],{"class":30,"line":31},[28,137659,137408],{"class":87},[28,137661,137662,137664,137666,137668],{"class":30,"line":48},[28,137663,366],{"class":51556},[28,137665,137415],{"class":2225},[28,137667,137418],{"class":38},[28,137669,137421],{"class":87},[28,137671,137672,137674,137676,137678],{"class":30,"line":84},[28,137673,366],{"class":51556},[28,137675,137428],{"class":2225},[28,137677,137431],{"class":38},[28,137679,137434],{"class":87},[28,137681,137682,137684,137686,137688,137690,137692],{"class":30,"line":91},[28,137683,366],{"class":51556},[28,137685,129679],{"class":2225},[28,137687,413],{"class":38},[28,137689,211],{"class":60},[28,137691,137447],{"class":38},[28,137693,137450],{"class":87},[28,137695,137696,137698,137700,137702,137704,137706],{"class":30,"line":97},[28,137697,366],{"class":51556},[28,137699,129679],{"class":2225},[28,137701,413],{"class":38},[28,137703,137461],{"class":60},[28,137705,137464],{"class":38},[28,137707,137467],{"class":87},[28,137709,137710,137712,137714,137716,137718,137720],{"class":30,"line":103},[28,137711,366],{"class":51556},[28,137713,129679],{"class":2225},[28,137715,413],{"class":38},[28,137717,137478],{"class":60},[28,137719,137481],{"class":38},[28,137721,137484],{"class":87},[28,137723,137724,137726,137728,137730,137732,137734],{"class":30,"line":109},[28,137725,366],{"class":51556},[28,137727,129679],{"class":2225},[28,137729,413],{"class":38},[28,137731,137495],{"class":60},[28,137733,137481],{"class":38},[28,137735,137500],{"class":87},[1727,137737],{"style":126621,"src":137738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[363,137740,137741],{"start":84},[366,137742,137743],{},"使用场景1",[1727,137745],{"style":126621,"src":137746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137748,137749],{},"不需要再加盒子来整红色那部分了",[18,137751,137753],{"className":126765,"code":137752,"language":126767,"meta":23,"style":23},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[25,137754,137755,137760,137769,137780,137790,137794,137803,137814,137824],{"__ignoreMap":23},[28,137756,137757],{"class":30,"line":31},[28,137758,137759],{"class":87},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[28,137761,137762,137764,137767],{"class":30,"line":48},[28,137763,51867],{"class":51556},[28,137765,137766],{"class":2225},"::before",[28,137768,15834],{"class":38},[28,137770,137771,137774,137776,137778],{"class":30,"line":84},[28,137772,137773],{"class":60},"  content",[28,137775,51693],{"class":38},[28,137777,7914],{"class":127},[28,137779,1558],{"class":38},[28,137781,137782,137784,137786,137788],{"class":30,"line":91},[28,137783,128381],{"class":60},[28,137785,51693],{"class":38},[28,137787,61125],{"class":60},[28,137789,1558],{"class":38},[28,137791,137792],{"class":30,"line":97},[28,137793,1830],{"class":38},[28,137795,137796,137798,137801],{"class":30,"line":103},[28,137797,51867],{"class":51556},[28,137799,137800],{"class":2225},"::after",[28,137802,15834],{"class":38},[28,137804,137805,137807,137809,137812],{"class":30,"line":109},[28,137806,137773],{"class":60},[28,137808,51693],{"class":38},[28,137810,137811],{"class":127},"\"→\"",[28,137813,1558],{"class":38},[28,137815,137816,137818,137820,137822],{"class":30,"line":118},[28,137817,71161],{"class":60},[28,137819,51693],{"class":38},[28,137821,62326],{"class":60},[28,137823,1558],{"class":38},[28,137825,137826],{"class":30,"line":124},[28,137827,1830],{"class":38},[1727,137829],{"style":126621,"src":137830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137832,137833],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1727,137835],{"style":126621,"src":137836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137838,137839],{},"但是在引用时需要先转义一下",[14,137841,137842],{},"content='\\e930'",[363,137844,137845],{"start":91},[366,137846,137847],{},"使用场景2",[14,137849,137850],{},"仿土豆效果",[14,137852,137853],{},"通过使用伪元素选择器可以减少body中盒子的数量",[18,137855,137856],{"className":126765,"code":137752,"language":126767,"meta":23,"style":23},[25,137857,137858,137862,137870,137880,137890,137894,137902,137912,137922],{"__ignoreMap":23},[28,137859,137860],{"class":30,"line":31},[28,137861,137759],{"class":87},[28,137863,137864,137866,137868],{"class":30,"line":48},[28,137865,51867],{"class":51556},[28,137867,137766],{"class":2225},[28,137869,15834],{"class":38},[28,137871,137872,137874,137876,137878],{"class":30,"line":84},[28,137873,137773],{"class":60},[28,137875,51693],{"class":38},[28,137877,7914],{"class":127},[28,137879,1558],{"class":38},[28,137881,137882,137884,137886,137888],{"class":30,"line":91},[28,137883,128381],{"class":60},[28,137885,51693],{"class":38},[28,137887,61125],{"class":60},[28,137889,1558],{"class":38},[28,137891,137892],{"class":30,"line":97},[28,137893,1830],{"class":38},[28,137895,137896,137898,137900],{"class":30,"line":103},[28,137897,51867],{"class":51556},[28,137899,137800],{"class":2225},[28,137901,15834],{"class":38},[28,137903,137904,137906,137908,137910],{"class":30,"line":109},[28,137905,137773],{"class":60},[28,137907,51693],{"class":38},[28,137909,137811],{"class":127},[28,137911,1558],{"class":38},[28,137913,137914,137916,137918,137920],{"class":30,"line":118},[28,137915,71161],{"class":60},[28,137917,51693],{"class":38},[28,137919,62326],{"class":60},[28,137921,1558],{"class":38},[28,137923,137924],{"class":30,"line":124},[28,137925,1830],{"class":38},[1727,137927],{"style":126621,"src":137928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[363,137930,137931],{"start":97},[366,137932,137933],{},"使用场景3",[14,137935,137936],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[18,137938,137940],{"className":126765,"code":137939,"language":126767,"meta":23,"style":23},".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",[25,137941,137942,137948,137958,137962,137966,137970,137978,137988,137998,138002,138010,138020,138030],{"__ignoreMap":23},[28,137943,137944,137946],{"class":30,"line":31},[28,137945,130613],{"class":2225},[28,137947,15834],{"class":38},[28,137949,137950,137952,137954,137956],{"class":30,"line":48},[28,137951,131245],{"class":60},[28,137953,51693],{"class":38},[28,137955,23998],{"class":60},[28,137957,1558],{"class":38},[28,137959,137960],{"class":30,"line":84},[28,137961,1830],{"class":38},[28,137963,137964],{"class":30,"line":91},[28,137965,136226],{"class":38},[28,137967,137968],{"class":30,"line":97},[28,137969,137759],{"class":87},[28,137971,137972,137974,137976],{"class":30,"line":103},[28,137973,51867],{"class":51556},[28,137975,137766],{"class":2225},[28,137977,15834],{"class":38},[28,137979,137980,137982,137984,137986],{"class":30,"line":109},[28,137981,137773],{"class":60},[28,137983,51693],{"class":38},[28,137985,7914],{"class":127},[28,137987,1558],{"class":38},[28,137989,137990,137992,137994,137996],{"class":30,"line":118},[28,137991,128381],{"class":60},[28,137993,51693],{"class":38},[28,137995,61125],{"class":60},[28,137997,1558],{"class":38},[28,137999,138000],{"class":30,"line":124},[28,138001,1830],{"class":38},[28,138003,138004,138006,138008],{"class":30,"line":131},[28,138005,51867],{"class":51556},[28,138007,137800],{"class":2225},[28,138009,15834],{"class":38},[28,138011,138012,138014,138016,138018],{"class":30,"line":137},[28,138013,137773],{"class":60},[28,138015,51693],{"class":38},[28,138017,137811],{"class":127},[28,138019,1558],{"class":38},[28,138021,138022,138024,138026,138028],{"class":30,"line":143},[28,138023,71161],{"class":60},[28,138025,51693],{"class":38},[28,138027,62326],{"class":60},[28,138029,1558],{"class":38},[28,138031,138032],{"class":30,"line":149},[28,138033,1830],{"class":38},[14,138035,138036],{},"div {\nmargin: 0 auto;\n}",[18,138038,138041],{"className":138039,"code":138040,"language":5449},[5447],"\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",[25,138042,138040],{"__ignoreMap":23},[14,138044,138045],{},"如果想让多个元素都发生变化",[14,138047,138048],{},"不能如下操作：",[14,138050,138051],{},"transition: width 2s ease 0.5s;",[14,138053,138054],{},"transition: height 2s ease 0.5s;不对！！！",[14,138056,138057],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138059,138060],{},"使用如下：加逗号隔开",[14,138062,138063],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138065,138066],{},"transition all 2s ease;",[380,138068,138070],{"id":138069},"_1426-过渡练习","14.2.6 过渡练习",[363,138072,138073],{},[366,138074,138075],{},"进度条",[1727,138077],{"style":126621,"src":138078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[18,138080,138082],{"className":126765,"code":138081,"language":126767,"meta":23,"style":23},"div {\n  transition: all 0.3s ease;\n}\n",[25,138083,138084,138090,138108],{"__ignoreMap":23},[28,138085,138086,138088],{"class":30,"line":31},[28,138087,51867],{"class":51556},[28,138089,15834],{"class":38},[28,138091,138092,138095,138097,138099,138102,138104,138106],{"class":30,"line":48},[28,138093,138094],{"class":60},"  transition",[28,138096,51693],{"class":38},[28,138098,28384],{"class":60},[28,138100,138101],{"class":60}," 0.3",[28,138103,1093],{"class":34},[28,138105,78936],{"class":60},[28,138107,1558],{"class":38},[28,138109,138110],{"class":30,"line":84},[28,138111,1830],{"class":38},[363,138113,138114],{"start":48},[366,138115,138116],{},"小米logo",[14,138118,138119],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[18,138121,138123],{"className":126765,"code":138122,"language":126767,"meta":23,"style":23},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[25,138124,138125,138130,138136,138152,138157],{"__ignoreMap":23},[28,138126,138127],{"class":30,"line":31},[28,138128,138129],{"class":87},"\u002F* CSS3 过渡 *\u002F\n",[28,138131,138132,138134],{"class":30,"line":48},[28,138133,51867],{"class":51556},[28,138135,15834],{"class":38},[28,138137,138138,138140,138142,138144,138146,138148,138150],{"class":30,"line":84},[28,138139,138094],{"class":60},[28,138141,51693],{"class":38},[28,138143,28384],{"class":60},[28,138145,138101],{"class":60},[28,138147,1093],{"class":34},[28,138149,78936],{"class":60},[28,138151,1558],{"class":38},[28,138153,138154],{"class":30,"line":91},[28,138155,138156],{"class":87},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[28,138158,138159],{"class":30,"line":97},[28,138160,1830],{"class":38},[14,138162,138163],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[328,138165,138166],{},"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":23,"searchDepth":48,"depth":48,"links":138168},[138169,138174],{"id":136499,"depth":48,"text":136500,"children":138170},[138171,138172,138173],{"id":136503,"depth":84,"text":136504},{"id":136580,"depth":84,"text":136581},{"id":136911,"depth":84,"text":136912},{"id":137202,"depth":48,"text":137203,"children":138175},[138176,138177],{"id":137206,"depth":84,"text":137207},{"id":138069,"depth":84,"text":138070},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136491,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138184,"title":138185,"body":138186,"description":333,"extension":334,"meta":139930,"navigation":336,"path":139931,"seo":139932,"stem":139933,"__hash__":139934},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138187,"toc":139911},[138188,138191,138195,138198,138204,138210,138214,138216,138219,138222,138225,138228,138231,138234,138237,138241,138245,138248,138251,138254,138258,138261,138264,138269,138272,138275,138278,138282,138285,138294,138297,138300,138304,138307,138310,138315,138322,138336,138344,138351,138356,138359,138362,138365,138372,138376,138382,138388,138391,138394,138399,138405,138407,138415,138420,138423,138429,138431,138436,138441,138444,138446,138451,138454,138459,138464,138498,138502,138506,138509,138513,138516,138602,138605,138642,138645,138681,138685,138690,138703,138757,138759,138787,138789,138817,138823,138837,138839,138883,138885,138929,138932,138939,138950,138952,138979,138981,139007,139014,139030,139032,139126,139128,139222,139229,139232,139237,139243,139317,139320,139322,139358,139360,139396,139399,139406,139425,139428,139431,139433,139458,139460,139484,139487,139490,139520,139524,139527,139590,139592,139658,139660,139724,139727,139759,139761,139787,139789,139815,139818,139849,139851,139877,139879,139905,139908],[10,138189,138185],{"id":138190},"_15-品优购项目上篇-搭建与公共模块",[351,138192,138194],{"id":138193},"_151-项目规划","15.1 项目规划",[1727,138196],{"style":126621,"src":138197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138199,138200,138203],{},[555,138201,138202],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138205,138206,138209],{},[555,138207,138208],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[351,138211,138213],{"id":138212},"_152-项目介绍","15.2 项目介绍",[14,138215,138202],{},[1727,138217],{"style":126621,"src":138218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138220,138221],{},"主页：",[1727,138223],{"style":126621,"src":138224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138226,138227],{},"列表页：",[1727,138229],{"style":126621,"src":138230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138232,138233],{},"注册页：",[1727,138235],{"style":126621,"src":138236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[351,138238,138240],{"id":138239},"_153-项目搭建工作","15.3 项目搭建工作",[380,138242,138244],{"id":138243},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1727,138246],{"style":126621,"src":138247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138249,138250],{},"经常更换的图片要放到upload文件夹中",[14,138252,138253],{},"不经常换的放到images文件夹中",[380,138255,138257],{"id":138256},"_1532-创建文件如下","15.3.2 创建文件如下",[1727,138259],{"style":126621,"src":138260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1727,138262],{"style":126621,"src":138263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138265,138266],{},[555,138267,138268],{},"初始化样式：",[14,138270,138271],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138273,138274],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138276,138277],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[380,138279,138281],{"id":138280},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138283,138284],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138286,138287,138288,138293],{},"这里最典型的应用就是 ",[555,138289,138290],{},[25,138291,138292],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1727,138295],{"style":126621,"src":138296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138298,138299],{},"通过link方法来引入",[380,138301,138303],{"id":138302},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1727,138305],{"style":126621,"src":138306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138308,138309],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[363,138311,138312],{},[366,138313,138314],{},"制作favicon图标",[14,138316,138317,138318,138321],{},"①把品优购图标切成 ",[25,138319,138320],{},"png"," 图片",[14,138323,138324,138325,138327,138328,138331,138332],{},"②把 ",[25,138326,138320],{}," 图片转换为 ",[25,138329,138330],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[51,138333,138334],{"href":138334,"rel":138335},"http:\u002F\u002Fwww.bitbug.net\u002F",[24127],[363,138337,138338,138341],{"start":48},[366,138339,138340],{},"favicon图标放到网站根目录下",[366,138342,138343],{},"HTML页面引入favicon",[14,138345,138346,138347,138350],{},"在html 页面里面的 ",[25,138348,138349],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138352,138353],{},[25,138354,138355],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138357,138358],{},"复制这行代码或者在生成这个的网站进行复制",[1727,138360],{"style":126621,"src":138361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138363,138364],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138366,138367,138368],{},"例如:",[51,138369,138370],{"href":138370,"rel":138371},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24127],[380,138373,138375],{"id":138374},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138377,138378,138381],{},[555,138379,138380],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138383,138384,138387],{},[555,138385,138386],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138389,138390],{},"页面必须有三个标签用来符合 SEO 优化",[1727,138392],{"style":126621,"src":138393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[363,138395,138396],{},[366,138397,138398],{},"title网站标题",[14,138400,138401,138404],{},[555,138402,138403],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138406,69046],{},[1404,138408,138409,138412],{},[366,138410,138411],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[366,138413,138414],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[363,138416,138417],{"start":48},[366,138418,138419],{},"description网站描述",[14,138421,138422],{},"简要说明我们网站主要是做什么的",[14,138424,138425,138428],{},[555,138426,138427],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138430,69046],{},[14,138432,138433],{},[25,138434,138435],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[363,138437,138438],{"start":84},[366,138439,138440],{},"keywords关键词",[14,138442,138443],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138445,69046],{},[14,138447,138448],{},[25,138449,138450],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138452,138453],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138455,138456],{},[555,138457,138458],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[363,138460,138461],{"start":91},[366,138462,138463],{},"代码总结",[18,138465,138466],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,138467,138468,138472,138486,138490],{"__ignoreMap":23},[28,138469,138470],{"class":30,"line":31},[28,138471,130876],{"class":87},[28,138473,138474,138476,138478,138480,138482,138484],{"class":30,"line":48},[28,138475,1307],{"class":38},[28,138477,51867],{"class":51556},[28,138479,53742],{"class":2225},[28,138481,54],{"class":38},[28,138483,130889],{"class":127},[28,138485,51563],{"class":38},[28,138487,138488],{"class":30,"line":84},[28,138489,130896],{"class":38},[28,138491,138492,138494,138496],{"class":30,"line":91},[28,138493,52041],{"class":38},[28,138495,51867],{"class":51556},[28,138497,51563],{"class":38},[351,138499,138501],{"id":138500},"_154-项目公共部分制作","15.4 项目公共部分制作",[380,138503,138505],{"id":138504},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1727,138507],{"style":126621,"src":138508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[380,138510,138512],{"id":138511},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138514,138515],{},"布局思路：",[1404,138517,138518,138521,138524,138546,138579],{},[366,138519,138520],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[366,138522,138523],{},"里面包含版心的盒子",[366,138525,138526,138527],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1404,138528,138529,138537,138543],{},[366,138530,138531,138532,21762,138534,138536],{},"1 号盒子 里面包含一个",[25,138533,1404],{},[25,138535,1404],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[366,138538,138539,138540,138542],{},"里面的内容是水平排列，所以需要给",[25,138541,366],{},"设置浮动",[366,138544,138545],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[366,138547,138548,138549],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1404,138550,138551,138565,138570],{},[366,138552,138553,138554,21762,138556,138558,138559,138561,138562,138564],{},"2 号盒子 里面包含一个",[25,138555,1404],{},[25,138557,1404],{},"包裹",[25,138560,366],{},"，中间的",[25,138563,1318],{},"可以用样式去设置，也可以用字符 |",[366,138566,138567,138568,138542],{},"里面内容水平排列，给",[25,138569,366],{},[366,138571,138572,138573,138575,138576,138578],{},"找到里面所有偶数的 ",[25,138574,366],{}," 设置样式（偶数的 ",[25,138577,366],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[366,138580,138581,138582],{},"需要用到字体图标",[1404,138583,138584,138590,138593,138596,138599],{},[366,138585,138586,138587],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[25,138588,138589],{},"arrow-icon",[366,138591,138592],{},"先要引入字体图片的资源",[366,138594,138595],{},"在样式里面利用 font-face 来进行声明",[366,138597,138598],{},"在伪元素的 content属性设置 图标的编码",[366,138600,138601],{},"给伪元素设置font-family属性",[14,138603,138604],{},"结构实例代码：",[18,138606,138608],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},"div::before {\n  content: \"\";\n  display: block;\n}\n",[25,138609,138610,138618,138628,138638],{"__ignoreMap":23},[28,138611,138612,138614,138616],{"class":30,"line":31},[28,138613,51867],{"class":51556},[28,138615,137766],{"class":2225},[28,138617,15834],{"class":38},[28,138619,138620,138622,138624,138626],{"class":30,"line":48},[28,138621,137773],{"class":60},[28,138623,51693],{"class":38},[28,138625,7914],{"class":127},[28,138627,1558],{"class":38},[28,138629,138630,138632,138634,138636],{"class":30,"line":84},[28,138631,128381],{"class":60},[28,138633,51693],{"class":38},[28,138635,61125],{"class":60},[28,138637,1558],{"class":38},[28,138639,138640],{"class":30,"line":91},[28,138641,1830],{"class":38},[14,138643,138644],{},"样式实例代码：",[18,138646,138647],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,138648,138649,138657,138667,138677],{"__ignoreMap":23},[28,138650,138651,138653,138655],{"class":30,"line":31},[28,138652,51867],{"class":51556},[28,138654,137766],{"class":2225},[28,138656,15834],{"class":38},[28,138658,138659,138661,138663,138665],{"class":30,"line":48},[28,138660,137773],{"class":60},[28,138662,51693],{"class":38},[28,138664,7914],{"class":127},[28,138666,1558],{"class":38},[28,138668,138669,138671,138673,138675],{"class":30,"line":84},[28,138670,128381],{"class":60},[28,138672,51693],{"class":38},[28,138674,61125],{"class":60},[28,138676,1558],{"class":38},[28,138678,138679],{"class":30,"line":91},[28,138680,1830],{"class":38},[380,138682,138684],{"id":138683},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1404,138686,138687],{},[366,138688,138689],{},"header 盒子必须要有高度",[14,138691,138692,138693,138695,138696],{},"1 号盒子是 ",[25,138694,131777],{}," 标志定位，在正常开发过程中， ",[555,138697,138698,138699,138702],{},"logo的布局其实是有讲究的，需要进行 ",[25,138700,138701],{},"logoSEO","的优化 （★★★）",[1404,138704,138705,138713,138721,138748],{},[366,138706,138707,138709,138710,138712],{},[25,138708,131777],{}," 里面首先放一个 ",[25,138711,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[366,138714,138715,138717,138718,138720],{},[25,138716,10],{}," 里面再放一个链接，可以返回首页的，把 ",[25,138719,131777],{}," 的背景图片给链接即可",[366,138722,138723,138724],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1404,138725,138726,138741],{},[366,138727,138728,138729,138732,138733,138736,138737,138740],{},"方法1：",[25,138730,138731],{},"text-indent"," 移到盒子外面（",[25,138734,138735],{},"text-indent: -9999px",") ，然后 ",[25,138738,138739],{},"overflow:hidden"," ，淘宝的做法",[366,138742,138743,138744,138747],{},"方法2：直接给 ",[25,138745,138746],{},"font-size: 0;"," 就看不到文字了，京东的做法",[366,138749,138750,138751,138753,138754,138756],{},"最后给链接一个 ",[25,138752,51663],{}," 属性，这样鼠标放到 ",[25,138755,131777],{}," 上就可以看到提示文字了",[14,138758,138604],{},[18,138760,138761],{"className":127512,"code":131998,"language":127514,"meta":23,"style":23},[25,138762,138763],{"__ignoreMap":23},[28,138764,138765,138767,138769,138771,138773,138775,138777,138779,138781,138783,138785],{"class":30,"line":31},[28,138766,1307],{"class":38},[28,138768,51],{"class":51556},[28,138770,61313],{"class":2225},[28,138772,54],{"class":38},[28,138774,132013],{"class":127},[28,138776,132016],{"class":2225},[28,138778,54],{"class":38},[28,138780,132021],{"class":127},[28,138782,132024],{"class":38},[28,138784,51],{"class":51556},[28,138786,51563],{"class":38},[14,138788,138644],{},[18,138790,138791],{"className":127512,"code":131998,"language":127514,"meta":23,"style":23},[25,138792,138793],{"__ignoreMap":23},[28,138794,138795,138797,138799,138801,138803,138805,138807,138809,138811,138813,138815],{"class":30,"line":31},[28,138796,1307],{"class":38},[28,138798,51],{"class":51556},[28,138800,61313],{"class":2225},[28,138802,54],{"class":38},[28,138804,132013],{"class":127},[28,138806,132016],{"class":2225},[28,138808,54],{"class":38},[28,138810,132021],{"class":127},[28,138812,132024],{"class":38},[28,138814,51],{"class":51556},[28,138816,51563],{"class":38},[14,138818,138819,138820,138822],{},"2 号盒子是 ",[25,138821,131790],{}," 搜索模块定位",[1404,138824,138825,138828,138831,138834],{},[366,138826,138827],{},"search盒子利用定位的方式放在对应的位置",[366,138829,138830],{},"search盒子设置绝对定位，header盒子设置相对定位",[366,138832,138833],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[366,138835,138836],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138838,138604],{},[18,138840,138841],{"className":126765,"code":132085,"language":126767,"meta":23,"style":23},[25,138842,138843,138865,138869,138879],{"__ignoreMap":23},[28,138844,138845,138847,138849,138851,138853,138855,138857,138859,138861,138863],{"class":30,"line":31},[28,138846,51867],{"class":51556},[28,138848,12697],{"class":38},[28,138850,14],{"class":51556},[28,138852,12697],{"class":38},[28,138854,10],{"class":51556},[28,138856,12697],{"class":38},[28,138858,1404],{"class":51556},[28,138860,12697],{"class":38},[28,138862,366],{"class":51556},[28,138864,15834],{"class":38},[28,138866,138867],{"class":30,"line":48},[28,138868,132114],{"class":87},[28,138870,138871,138873,138875,138877],{"class":30,"line":84},[28,138872,128381],{"class":60},[28,138874,51693],{"class":38},[28,138876,61125],{"class":60},[28,138878,1558],{"class":38},[28,138880,138881],{"class":30,"line":91},[28,138882,1830],{"class":38},[14,138884,138644],{},[18,138886,138887],{"className":126765,"code":132085,"language":126767,"meta":23,"style":23},[25,138888,138889,138911,138915,138925],{"__ignoreMap":23},[28,138890,138891,138893,138895,138897,138899,138901,138903,138905,138907,138909],{"class":30,"line":31},[28,138892,51867],{"class":51556},[28,138894,12697],{"class":38},[28,138896,14],{"class":51556},[28,138898,12697],{"class":38},[28,138900,10],{"class":51556},[28,138902,12697],{"class":38},[28,138904,1404],{"class":51556},[28,138906,12697],{"class":38},[28,138908,366],{"class":51556},[28,138910,15834],{"class":38},[28,138912,138913],{"class":30,"line":48},[28,138914,132114],{"class":87},[28,138916,138917,138919,138921,138923],{"class":30,"line":84},[28,138918,128381],{"class":60},[28,138920,51693],{"class":38},[28,138922,61125],{"class":60},[28,138924,1558],{"class":38},[28,138926,138927],{"class":30,"line":91},[28,138928,1830],{"class":38},[14,138930,138931],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138933,138934,138935,138938],{},"3 号盒子是 ",[25,138936,138937],{},"hotwords"," 热词模块定位",[1404,138940,138941,138944,138947],{},[366,138942,138943],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[366,138945,138946],{},"给里面所有的a标签设置 左右10px的外边距",[366,138948,138949],{},"给第一个a标签设置文字变红色（#c81623）",[14,138951,138604],{},[18,138953,138955],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},"div {\n  margin: 0 auto;\n}\n",[25,138956,138957,138963,138975],{"__ignoreMap":23},[28,138958,138959,138961],{"class":30,"line":31},[28,138960,51867],{"class":51556},[28,138962,15834],{"class":38},[28,138964,138965,138967,138969,138971,138973],{"class":30,"line":48},[28,138966,70726],{"class":60},[28,138968,51693],{"class":38},[28,138970,244],{"class":60},[28,138972,51812],{"class":60},[28,138974,1558],{"class":38},[28,138976,138977],{"class":30,"line":84},[28,138978,1830],{"class":38},[14,138980,138644],{},[18,138982,138983],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,138984,138985,138991,139003],{"__ignoreMap":23},[28,138986,138987,138989],{"class":30,"line":31},[28,138988,51867],{"class":51556},[28,138990,15834],{"class":38},[28,138992,138993,138995,138997,138999,139001],{"class":30,"line":48},[28,138994,70726],{"class":60},[28,138996,51693],{"class":38},[28,138998,244],{"class":60},[28,139000,51812],{"class":60},[28,139002,1558],{"class":38},[28,139004,139005],{"class":30,"line":84},[28,139006,1830],{"class":38},[14,139008,139009,139010,139013],{},"4 号盒子是 ",[25,139011,139012],{},"shopcar"," 购物车模块",[1404,139015,139016,139021,139024,139027],{},[366,139017,123548,139018,139020],{},[25,139019,139012],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[366,139022,139023],{},"count 统计部分用绝对定位做",[366,139025,139026],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[366,139028,139029],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139031,138604],{},[18,139033,139034],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,139035,139036,139040,139054,139058,139072,139076,139090,139094,139108,139112],{"__ignoreMap":23},[28,139037,139038],{"class":30,"line":31},[28,139039,132204],{"class":87},[28,139041,139042,139044,139046,139048,139050,139052],{"class":30,"line":48},[28,139043,132209],{"class":2225},[28,139045,80063],{"class":38},[28,139047,129125],{"class":60},[28,139049,51693],{"class":38},[28,139051,132218],{"class":60},[28,139053,129695],{"class":38},[28,139055,139056],{"class":30,"line":84},[28,139057,132225],{"class":87},[28,139059,139060,139062,139064,139066,139068,139070],{"class":30,"line":91},[28,139061,132230],{"class":2225},[28,139063,80063],{"class":38},[28,139065,129125],{"class":60},[28,139067,51693],{"class":38},[28,139069,55020],{"class":60},[28,139071,129695],{"class":38},[28,139073,139074],{"class":30,"line":97},[28,139075,132245],{"class":87},[28,139077,139078,139080,139082,139084,139086,139088],{"class":30,"line":103},[28,139079,132250],{"class":2225},[28,139081,80063],{"class":38},[28,139083,129125],{"class":60},[28,139085,51693],{"class":38},[28,139087,55087],{"class":60},[28,139089,129695],{"class":38},[28,139091,139092],{"class":30,"line":109},[28,139093,132265],{"class":87},[28,139095,139096,139098,139100,139102,139104,139106],{"class":30,"line":118},[28,139097,132270],{"class":2225},[28,139099,80063],{"class":38},[28,139101,129125],{"class":60},[28,139103,51693],{"class":38},[28,139105,86489],{"class":60},[28,139107,129695],{"class":38},[28,139109,139110],{"class":30,"line":124},[28,139111,132285],{"class":87},[28,139113,139114,139116,139118,139120,139122,139124],{"class":30,"line":131},[28,139115,132290],{"class":2225},[28,139117,80063],{"class":38},[28,139119,129125],{"class":60},[28,139121,51693],{"class":38},[28,139123,132299],{"class":60},[28,139125,129695],{"class":38},[14,139127,138644],{},[18,139129,139130],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,139131,139132,139136,139150,139154,139168,139172,139186,139190,139204,139208],{"__ignoreMap":23},[28,139133,139134],{"class":30,"line":31},[28,139135,132204],{"class":87},[28,139137,139138,139140,139142,139144,139146,139148],{"class":30,"line":48},[28,139139,132209],{"class":2225},[28,139141,80063],{"class":38},[28,139143,129125],{"class":60},[28,139145,51693],{"class":38},[28,139147,132218],{"class":60},[28,139149,129695],{"class":38},[28,139151,139152],{"class":30,"line":84},[28,139153,132225],{"class":87},[28,139155,139156,139158,139160,139162,139164,139166],{"class":30,"line":91},[28,139157,132230],{"class":2225},[28,139159,80063],{"class":38},[28,139161,129125],{"class":60},[28,139163,51693],{"class":38},[28,139165,55020],{"class":60},[28,139167,129695],{"class":38},[28,139169,139170],{"class":30,"line":97},[28,139171,132245],{"class":87},[28,139173,139174,139176,139178,139180,139182,139184],{"class":30,"line":103},[28,139175,132250],{"class":2225},[28,139177,80063],{"class":38},[28,139179,129125],{"class":60},[28,139181,51693],{"class":38},[28,139183,55087],{"class":60},[28,139185,129695],{"class":38},[28,139187,139188],{"class":30,"line":109},[28,139189,132265],{"class":87},[28,139191,139192,139194,139196,139198,139200,139202],{"class":30,"line":118},[28,139193,132270],{"class":2225},[28,139195,80063],{"class":38},[28,139197,129125],{"class":60},[28,139199,51693],{"class":38},[28,139201,86489],{"class":60},[28,139203,129695],{"class":38},[28,139205,139206],{"class":30,"line":124},[28,139207,132285],{"class":87},[28,139209,139210,139212,139214,139216,139218,139220],{"class":30,"line":131},[28,139211,132290],{"class":2225},[28,139213,80063],{"class":38},[28,139215,129125],{"class":60},[28,139217,51693],{"class":38},[28,139219,132299],{"class":60},[28,139221,129695],{"class":38},[380,139223,139225,139226,139228],{"id":139224},"_1544-nav导航模块制作","15.4.4 ",[25,139227,53969],{},"导航模块制作",[1727,139230],{"style":126621,"src":139231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139233,139234,139236],{},[25,139235,53969],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139238,139239,139240],{},"1 号盒子左侧浮动，",[25,139241,139242],{},"dropdown",[1404,139244,139245,139255,139263,139269,139277,139287,139295,139306],{},[366,139246,139247,139248,101231,139251,139254],{},"1号盒子有讲究，根据相关性 里面包含 ",[25,139249,139250],{},".dt",[25,139252,139253],{},".dd"," 两个盒子",[366,139256,139257,139259,139260,139262],{},[25,139258,139250],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[25,139261,139253],{}," 挤到下面去了",[366,139264,139265,139266,139268],{},"给 ",[25,139267,139253],{}," 盒子设置宽度 和 高度，以及背景颜色",[366,139270,139265,139271,139273,139274,120450],{},[25,139272,139253],{}," 盒子里面定义 无序列表 （",[25,139275,139276],{},"ul > li > a",[366,139278,139279,139280,139282,139283,139286],{},"每个 ",[25,139281,366],{}," 都有一个高度（",[25,139284,139285],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[366,139288,139265,139289,139291,139292,120450],{},[25,139290,366],{}," 里面的a设置文字大小（",[25,139293,139294],{},"14px",[366,139296,139265,139297,139299,139300,139302,139303,139305],{},[25,139298,366],{}," 设置 ",[25,139301,127926],{},"，当鼠标移入的时候，让",[25,139304,366],{},"的背景变成白色，让里面的文字变成红色",[366,139307,139308,139310,139311,139313,139314,139316],{},[25,139309,366],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[25,139312,366],{},"的右侧，那么给",[25,139315,366],{},"设置相对定位",[14,139318,139319],{},"一定要注意相关性",[14,139321,138604],{},[18,139323,139324],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,139325,139326,139334,139344,139354],{"__ignoreMap":23},[28,139327,139328,139330,139332],{"class":30,"line":31},[28,139329,51867],{"class":51556},[28,139331,137766],{"class":2225},[28,139333,15834],{"class":38},[28,139335,139336,139338,139340,139342],{"class":30,"line":48},[28,139337,137773],{"class":60},[28,139339,51693],{"class":38},[28,139341,7914],{"class":127},[28,139343,1558],{"class":38},[28,139345,139346,139348,139350,139352],{"class":30,"line":84},[28,139347,128381],{"class":60},[28,139349,51693],{"class":38},[28,139351,61125],{"class":60},[28,139353,1558],{"class":38},[28,139355,139356],{"class":30,"line":91},[28,139357,1830],{"class":38},[14,139359,138644],{},[18,139361,139362],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,139363,139364,139372,139382,139392],{"__ignoreMap":23},[28,139365,139366,139368,139370],{"class":30,"line":31},[28,139367,51867],{"class":51556},[28,139369,137766],{"class":2225},[28,139371,15834],{"class":38},[28,139373,139374,139376,139378,139380],{"class":30,"line":48},[28,139375,137773],{"class":60},[28,139377,51693],{"class":38},[28,139379,7914],{"class":127},[28,139381,1558],{"class":38},[28,139383,139384,139386,139388,139390],{"class":30,"line":84},[28,139385,128381],{"class":60},[28,139387,51693],{"class":38},[28,139389,61125],{"class":60},[28,139391,1558],{"class":38},[28,139393,139394],{"class":30,"line":91},[28,139395,1830],{"class":38},[14,139397,139398],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139400,139401,139402,139405],{},"2 号盒子左侧浮动，",[25,139403,139404],{},"navitems"," 导航栏组",[1404,139407,139408,139413,139422],{},[366,139409,139410,139411],{},"里面结构是 ",[25,139412,139276],{},[366,139414,139415,139416,139418,139419,139421],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[25,139417,51],{},"左右的",[25,139420,31143],{},"把两侧撑开",[366,139423,139424],{},"让文字垂直居中（行高等于高度）",[1727,139426],{"style":126621,"src":139427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139429,139430],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139432,138604],{},[18,139434,139436],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},".box {\n  float: left;\n}\n",[25,139437,139438,139444,139454],{"__ignoreMap":23},[28,139439,139440,139442],{"class":30,"line":31},[28,139441,130613],{"class":2225},[28,139443,15834],{"class":38},[28,139445,139446,139448,139450,139452],{"class":30,"line":48},[28,139447,131245],{"class":60},[28,139449,51693],{"class":38},[28,139451,23998],{"class":60},[28,139453,1558],{"class":38},[28,139455,139456],{"class":30,"line":84},[28,139457,1830],{"class":38},[14,139459,138644],{},[18,139461,139462],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,139463,139464,139470,139480],{"__ignoreMap":23},[28,139465,139466,139468],{"class":30,"line":31},[28,139467,130613],{"class":2225},[28,139469,15834],{"class":38},[28,139471,139472,139474,139476,139478],{"class":30,"line":48},[28,139473,131245],{"class":60},[28,139475,51693],{"class":38},[28,139477,23998],{"class":60},[28,139479,1558],{"class":38},[28,139481,139482],{"class":30,"line":84},[28,139483,1830],{"class":38},[14,139485,139486],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1727,139488],{"style":126621,"src":139489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[18,139491,139492],{"className":126765,"code":130922,"language":126767,"meta":23,"style":23},[25,139493,139494,139500,139516],{"__ignoreMap":23},[28,139495,139496,139498],{"class":30,"line":31},[28,139497,51867],{"class":51556},[28,139499,15834],{"class":38},[28,139501,139502,139504,139506,139508,139510,139512,139514],{"class":30,"line":48},[28,139503,71152],{"class":60},[28,139505,51693],{"class":38},[28,139507,61],{"class":60},[28,139509,51748],{"class":34},[28,139511,51777],{"class":60},[28,139513,130157],{"class":60},[28,139515,1558],{"class":38},[28,139517,139518],{"class":30,"line":84},[28,139519,1830],{"class":38},[380,139521,139523],{"id":139522},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1727,139525],{"style":126621,"src":139526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1404,139528,139529,139534,139539],{},[366,139530,139531,139533],{},[25,139532,131968],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[366,139535,139536,139538],{},[25,139537,131968],{}," 里面有一个大的版心",[366,139540,139541,139542,139545,139546],{},"版心里面包含 1 号盒子，",[25,139543,139544],{},"mod_service"," 是服务模块，mod 是模块的意思",[1404,139547,139548,139553,139566,139582,139587],{},[366,139549,139265,139550,139552],{},[25,139551,139544],{}," 设置高度（80px）和下边框",[366,139554,139555,139556,139559,139560,139562,139563,139565],{},"在里面定义 ",[25,139557,139558],{},"ul > li"," ,每个",[25,139561,366],{}," 宽度是300px 高度是 50px，给每个",[25,139564,366],{},"设置35px的左内边距",[366,139567,139568,139569,139571,139572,139574,139575,139577,139578,18672,139580,120450],{},"在每个",[25,139570,366],{},"里面，放一个 ",[25,139573,23172],{},"（里面放图标），一个",[25,139576,51867],{},"（里面放",[25,139579,51867],{},[25,139581,14],{},[366,139583,139265,139584,139586],{},[25,139585,23172],{},"设置浮动，让h5与这个div左右排列",[366,139588,139589],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139591,138604],{},[18,139593,139595],{"className":126765,"code":139594,"language":126767,"meta":23,"style":23},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[25,139596,139597,139603,139615,139627,139654],{"__ignoreMap":23},[28,139598,139599,139601],{"class":30,"line":31},[28,139600,134522],{"class":2225},[28,139602,15834],{"class":38},[28,139604,139605,139607,139609,139611,139613],{"class":30,"line":48},[28,139606,70824],{"class":60},[28,139608,51693],{"class":38},[28,139610,1098],{"class":60},[28,139612,51748],{"class":34},[28,139614,1558],{"class":38},[28,139616,139617,139619,139621,139623,139625],{"class":30,"line":84},[28,139618,71044],{"class":60},[28,139620,51693],{"class":38},[28,139622,1098],{"class":60},[28,139624,51748],{"class":34},[28,139626,1558],{"class":38},[28,139628,139629,139631,139633,139635,139637,139639,139641,139643,139646,139648,139650,139652],{"class":30,"line":91},[28,139630,70867],{"class":60},[28,139632,51693],{"class":38},[28,139634,61982],{"class":60},[28,139636,413],{"class":38},[28,139638,134561],{"class":5478},[28,139640,13976],{"class":38},[28,139642,61992],{"class":60},[28,139644,139645],{"class":60}," -10",[28,139647,51748],{"class":34},[28,139649,134580],{"class":60},[28,139651,51748],{"class":34},[28,139653,1558],{"class":38},[28,139655,139656],{"class":30,"line":97},[28,139657,1830],{"class":38},[14,139659,138644],{},[18,139661,139662],{"className":126765,"code":139594,"language":126767,"meta":23,"style":23},[25,139663,139664,139670,139682,139694,139720],{"__ignoreMap":23},[28,139665,139666,139668],{"class":30,"line":31},[28,139667,134522],{"class":2225},[28,139669,15834],{"class":38},[28,139671,139672,139674,139676,139678,139680],{"class":30,"line":48},[28,139673,70824],{"class":60},[28,139675,51693],{"class":38},[28,139677,1098],{"class":60},[28,139679,51748],{"class":34},[28,139681,1558],{"class":38},[28,139683,139684,139686,139688,139690,139692],{"class":30,"line":84},[28,139685,71044],{"class":60},[28,139687,51693],{"class":38},[28,139689,1098],{"class":60},[28,139691,51748],{"class":34},[28,139693,1558],{"class":38},[28,139695,139696,139698,139700,139702,139704,139706,139708,139710,139712,139714,139716,139718],{"class":30,"line":91},[28,139697,70867],{"class":60},[28,139699,51693],{"class":38},[28,139701,61982],{"class":60},[28,139703,413],{"class":38},[28,139705,134561],{"class":5478},[28,139707,13976],{"class":38},[28,139709,61992],{"class":60},[28,139711,139645],{"class":60},[28,139713,51748],{"class":34},[28,139715,134580],{"class":60},[28,139717,51748],{"class":34},[28,139719,1558],{"class":38},[28,139721,139722],{"class":30,"line":97},[28,139723,1830],{"class":38},[14,139725,139726],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1404,139728,139729,139732,139738,139744,139756],{},[366,139730,139731],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[366,139733,139734,139735,120450],{},"里面的布局利用 自定义列表来实现（",[25,139736,139737],{},"dl > dt + dd",[366,139739,139265,139740,139743],{},[25,139741,139742],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[366,139745,139265,139746,139749,139750,18672,139752,139755],{},[25,139747,139748],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[25,139751,139748],{},[25,139753,139754],{},"dd","之间有些距离",[366,139757,139758],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139760,138604],{},[18,139762,139763],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,139764,139765,139771,139783],{"__ignoreMap":23},[28,139766,139767,139769],{"class":30,"line":31},[28,139768,51867],{"class":51556},[28,139770,15834],{"class":38},[28,139772,139773,139775,139777,139779,139781],{"class":30,"line":48},[28,139774,70726],{"class":60},[28,139776,51693],{"class":38},[28,139778,244],{"class":60},[28,139780,51812],{"class":60},[28,139782,1558],{"class":38},[28,139784,139785],{"class":30,"line":84},[28,139786,1830],{"class":38},[14,139788,138644],{},[18,139790,139791],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,139792,139793,139799,139811],{"__ignoreMap":23},[28,139794,139795,139797],{"class":30,"line":31},[28,139796,51867],{"class":51556},[28,139798,15834],{"class":38},[28,139800,139801,139803,139805,139807,139809],{"class":30,"line":48},[28,139802,70726],{"class":60},[28,139804,51693],{"class":38},[28,139806,244],{"class":60},[28,139808,51812],{"class":60},[28,139810,1558],{"class":38},[28,139812,139813],{"class":30,"line":84},[28,139814,1830],{"class":38},[14,139816,139817],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1404,139819,139820,139829,139832,139843],{},[366,139821,139822,139823,139825,139826,139828],{},"分为上下两块，上面是 ",[25,139824,131985],{}," 友情链接，下面是 ",[25,139827,131978],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[366,139830,139831],{},"把内容分别复制到相应模块中",[366,139833,139265,139834,139836,139837,139839,139840,139842],{},[25,139835,131985],{}," 设置 15px 的下外边距，给",[25,139838,131985],{}," 里面 的 ",[25,139841,51],{}," 标签设置 左右 3px 的外边距",[366,139844,139845,139846,139848],{},"给",[25,139847,131978],{}," 设置 20px 的行高",[14,139850,138604],{},[18,139852,139853],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,139854,139855,139861,139873],{"__ignoreMap":23},[28,139856,139857,139859],{"class":30,"line":31},[28,139858,51867],{"class":51556},[28,139860,15834],{"class":38},[28,139862,139863,139865,139867,139869,139871],{"class":30,"line":48},[28,139864,70726],{"class":60},[28,139866,51693],{"class":38},[28,139868,244],{"class":60},[28,139870,51812],{"class":60},[28,139872,1558],{"class":38},[28,139874,139875],{"class":30,"line":84},[28,139876,1830],{"class":38},[14,139878,138644],{},[18,139880,139881],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,139882,139883,139889,139901],{"__ignoreMap":23},[28,139884,139885,139887],{"class":30,"line":31},[28,139886,51867],{"class":51556},[28,139888,15834],{"class":38},[28,139890,139891,139893,139895,139897,139899],{"class":30,"line":48},[28,139892,70726],{"class":60},[28,139894,51693],{"class":38},[28,139896,244],{"class":60},[28,139898,51812],{"class":60},[28,139900,1558],{"class":38},[28,139902,139903],{"class":30,"line":84},[28,139904,1830],{"class":38},[14,139906,139907],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[328,139909,139910],{},"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":23,"searchDepth":48,"depth":48,"links":139912},[139913,139914,139915,139922],{"id":138193,"depth":48,"text":138194},{"id":138212,"depth":48,"text":138213},{"id":138239,"depth":48,"text":138240,"children":139916},[139917,139918,139919,139920,139921],{"id":138243,"depth":84,"text":138244},{"id":138256,"depth":84,"text":138257},{"id":138280,"depth":84,"text":138281},{"id":138302,"depth":84,"text":138303},{"id":138374,"depth":84,"text":138375},{"id":138500,"depth":48,"text":138501,"children":139923},[139924,139925,139926,139927,139929],{"id":138504,"depth":84,"text":138505},{"id":138511,"depth":84,"text":138512},{"id":138683,"depth":84,"text":138684},{"id":139224,"depth":84,"text":139928},"15.4.4 nav导航模块制作",{"id":139522,"depth":84,"text":139523},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138185,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139936,"title":139937,"body":139938,"description":333,"extension":334,"meta":142340,"navigation":336,"path":142341,"seo":142342,"stem":142343,"__hash__":142344},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139939,"toc":142317},[139940,139943,139947,139951,139963,139966,139969,139972,139983,139985,140009,140011,140035,140040,140043,140045,140081,140083,140119,140122,140127,140130,140133,140136,140166,140173,140176,140186,140188,140222,140225,140259,140265,140282,140284,140320,140322,140358,140363,140388,140390,140416,140418,140442,140449,140452,140516,140518,140560,140562,140602,140609,140614,140616,140646,140648,140678,140682,140685,140692,140704,140706,140732,140734,140758,140761,140763,140787,140793,140803,140805,140835,140837,140867,140874,140915,140917,140953,140955,140991,140995,140998,141001,141004,141010,141015,141018,141041,141044,141068,141071,141095,141100,141103,141106,141109,141112,141115,141189,141191,141221,141223,141253,141256,141259,141291,141295,141299,141313,141322,141325,141330,141332,141426,141428,141522,141545,141547,141571,141573,141597,141604,141607,141617,141619,141643,141648,141656,141658,141688,141693,141733,141735,141761,141763,141789,141793,141796,141801,141804,141808,141816,141823,141831,141833,141863,141865,141895,141903,141906,141909,141911,141941,141943,141973,141976,141981,141983,142007,142009,142033,142036,142121,142123,142147,142149,142173,142177,142179,142203,142205,142239,142243,142257,142260,142265,142268,142273,142276,142306,142314],[10,139941,139937],{"id":139942},"_16-品优购项目下篇-主体与页面开发",[351,139944,139946],{"id":139945},"_161-项目主体模块制作","16.1 项目主体模块制作",[380,139948,139950],{"id":139949},"_1611-首页制作","16.1.1 首页制作",[14,139952,139953,139955,139956,139958,139959,139962],{},[555,139954,102271],{}," 主体模块是 ",[555,139957,74314],{}," 里面专有的，注意需要新的样式文件 ",[555,139960,139961],{},"index.css，"," 就不要写在common.css中了",[1727,139964],{"style":126621,"src":139965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1727,139967],{"style":126621,"src":139968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139970,139971],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1404,139973,139974,139977,139980],{},[366,139975,139976],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[366,139978,139979],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[366,139981,139982],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139984,138604],{},[18,139986,139987],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,139988,139989,139995,140005],{"__ignoreMap":23},[28,139990,139991,139993],{"class":30,"line":31},[28,139992,130613],{"class":2225},[28,139994,15834],{"class":38},[28,139996,139997,139999,140001,140003],{"class":30,"line":48},[28,139998,131245],{"class":60},[28,140000,51693],{"class":38},[28,140002,23998],{"class":60},[28,140004,1558],{"class":38},[28,140006,140007],{"class":30,"line":84},[28,140008,1830],{"class":38},[14,140010,138644],{},[18,140012,140013],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,140014,140015,140021,140031],{"__ignoreMap":23},[28,140016,140017,140019],{"class":30,"line":31},[28,140018,130613],{"class":2225},[28,140020,15834],{"class":38},[28,140022,140023,140025,140027,140029],{"class":30,"line":48},[28,140024,131245],{"class":60},[28,140026,51693],{"class":38},[28,140028,23998],{"class":60},[28,140030,1558],{"class":38},[28,140032,140033],{"class":30,"line":84},[28,140034,1830],{"class":38},[363,140036,140037],{},[366,140038,140039],{},"左侧focus模块制作",[1727,140041],{"style":126621,"src":140042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140044,138604],{},[18,140046,140047],{"className":126765,"code":128088,"language":126767,"meta":23,"style":23},[25,140048,140049,140057,140067,140077],{"__ignoreMap":23},[28,140050,140051,140053,140055],{"class":30,"line":31},[28,140052,54077],{"class":51556},[28,140054,62156],{"class":2225},[28,140056,15834],{"class":38},[28,140058,140059,140061,140063,140065],{"class":30,"line":48},[28,140060,128103],{"class":60},[28,140062,51693],{"class":38},[28,140064,55145],{"class":60},[28,140066,1558],{"class":38},[28,140068,140069,140071,140073,140075],{"class":30,"line":84},[28,140070,71054],{"class":60},[28,140072,51693],{"class":38},[28,140074,54993],{"class":60},[28,140076,1558],{"class":38},[28,140078,140079],{"class":30,"line":91},[28,140080,1830],{"class":38},[14,140082,138644],{},[18,140084,140085],{"className":126765,"code":128088,"language":126767,"meta":23,"style":23},[25,140086,140087,140095,140105,140115],{"__ignoreMap":23},[28,140088,140089,140091,140093],{"class":30,"line":31},[28,140090,54077],{"class":51556},[28,140092,62156],{"class":2225},[28,140094,15834],{"class":38},[28,140096,140097,140099,140101,140103],{"class":30,"line":48},[28,140098,128103],{"class":60},[28,140100,51693],{"class":38},[28,140102,55145],{"class":60},[28,140104,1558],{"class":38},[28,140106,140107,140109,140111,140113],{"class":30,"line":84},[28,140108,71054],{"class":60},[28,140110,51693],{"class":38},[28,140112,54993],{"class":60},[28,140114,1558],{"class":38},[28,140116,140117],{"class":30,"line":91},[28,140118,1830],{"class":38},[14,140120,140121],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[363,140123,140124],{"start":48},[366,140125,140126],{},"右侧newsflash模块制作",[1727,140128],{"style":126621,"src":140129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140131,140132],{},"右侧的模块 分为上中下三个盒子",[14,140134,140135],{},"结构代码：",[18,140137,140138],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,140139,140140],{"__ignoreMap":23},[28,140141,140142,140144,140146,140148,140150,140152,140154,140156,140158,140160,140162,140164],{"class":30,"line":31},[28,140143,1307],{"class":38},[28,140145,1727],{"class":51556},[28,140147,55495],{"class":2225},[28,140149,54],{"class":38},[28,140151,134282],{"class":127},[28,140153,55503],{"class":2225},[28,140155,54],{"class":38},[28,140157,134289],{"class":127},[28,140159,134292],{"class":2225},[28,140161,54],{"class":38},[28,140163,134297],{"class":127},[28,140165,51563],{"class":38},[14,140167,140168,140169,140172],{},"1 号盒子为 ",[25,140170,140171],{},"news"," 新闻模块 高度为 165px",[1727,140174],{"style":126621,"src":140175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140177,140178,140179,140182,140183],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[25,140180,140181],{},"news-hd","，下面是 ",[25,140184,140185],{},"news-bd",[14,140187,140135],{},[18,140189,140190],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,140191,140192,140196,140210,140214],{"__ignoreMap":23},[28,140193,140194],{"class":30,"line":31},[28,140195,130876],{"class":87},[28,140197,140198,140200,140202,140204,140206,140208],{"class":30,"line":48},[28,140199,1307],{"class":38},[28,140201,51867],{"class":51556},[28,140203,53742],{"class":2225},[28,140205,54],{"class":38},[28,140207,130889],{"class":127},[28,140209,51563],{"class":38},[28,140211,140212],{"class":30,"line":84},[28,140213,130896],{"class":38},[28,140215,140216,140218,140220],{"class":30,"line":91},[28,140217,52041],{"class":38},[28,140219,51867],{"class":51556},[28,140221,51563],{"class":38},[14,140223,140224],{},"样式代码：",[18,140226,140227],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,140228,140229,140233,140247,140251],{"__ignoreMap":23},[28,140230,140231],{"class":30,"line":31},[28,140232,130876],{"class":87},[28,140234,140235,140237,140239,140241,140243,140245],{"class":30,"line":48},[28,140236,1307],{"class":38},[28,140238,51867],{"class":51556},[28,140240,53742],{"class":2225},[28,140242,54],{"class":38},[28,140244,130889],{"class":127},[28,140246,51563],{"class":38},[28,140248,140249],{"class":30,"line":84},[28,140250,130896],{"class":38},[28,140252,140253,140255,140257],{"class":30,"line":91},[28,140254,52041],{"class":38},[28,140256,51867],{"class":51556},[28,140258,51563],{"class":38},[14,140260,140261,140262,140264],{},"上面是",[25,140263,140181],{},"，设置高度是 33px，设置下边框",[1404,140266,140267,140273],{},[366,140268,140269,140270,140272],{},"里面放一个",[25,140271,23172],{}," 标题",[366,140274,140275,140276,140278,140279,140281],{},"放一个a",[25,140277,102906],{},"，内容是 更多，然后让 ",[25,140280,51],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140283,140135],{},[18,140285,140286],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,140287,140288,140296,140306,140316],{"__ignoreMap":23},[28,140289,140290,140292,140294],{"class":30,"line":31},[28,140291,51867],{"class":51556},[28,140293,137766],{"class":2225},[28,140295,15834],{"class":38},[28,140297,140298,140300,140302,140304],{"class":30,"line":48},[28,140299,137773],{"class":60},[28,140301,51693],{"class":38},[28,140303,7914],{"class":127},[28,140305,1558],{"class":38},[28,140307,140308,140310,140312,140314],{"class":30,"line":84},[28,140309,128381],{"class":60},[28,140311,51693],{"class":38},[28,140313,61125],{"class":60},[28,140315,1558],{"class":38},[28,140317,140318],{"class":30,"line":91},[28,140319,1830],{"class":38},[14,140321,140224],{},[18,140323,140324],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,140325,140326,140334,140344,140354],{"__ignoreMap":23},[28,140327,140328,140330,140332],{"class":30,"line":31},[28,140329,51867],{"class":51556},[28,140331,137766],{"class":2225},[28,140333,15834],{"class":38},[28,140335,140336,140338,140340,140342],{"class":30,"line":48},[28,140337,137773],{"class":60},[28,140339,51693],{"class":38},[28,140341,7914],{"class":127},[28,140343,1558],{"class":38},[28,140345,140346,140348,140350,140352],{"class":30,"line":84},[28,140347,128381],{"class":60},[28,140349,51693],{"class":38},[28,140351,61125],{"class":60},[28,140353,1558],{"class":38},[28,140355,140356],{"class":30,"line":91},[28,140357,1830],{"class":38},[14,140359,140360,140361],{},"下面是",[25,140362,140185],{},[1404,140364,140365,140373],{},[366,140366,140367,140368,101231,140370,140372],{},"里面包含 ",[25,140369,1404],{},[25,140371,366],{}," 还有链接",[366,140374,139845,140375,140377,140378,140380,140381,140384,140385],{},[25,140376,366],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[25,140379,131431],{}," 2.设置 ",[25,140382,140383],{},"white-space: nowrap;"," 3. 设置 ",[25,140386,140387],{},"text-overflow: ellipsis;",[14,140389,140135],{},[18,140391,140393],{"className":126765,"code":140392,"language":126767,"meta":23,"style":23},"div {\n  overflow: hidden;\n}\n",[25,140394,140395,140401,140412],{"__ignoreMap":23},[28,140396,140397,140399],{"class":30,"line":31},[28,140398,51867],{"class":51556},[28,140400,15834],{"class":38},[28,140402,140403,140406,140408,140410],{"class":30,"line":48},[28,140404,140405],{"class":60},"  overflow",[28,140407,51693],{"class":38},[28,140409,61970],{"class":60},[28,140411,1558],{"class":38},[28,140413,140414],{"class":30,"line":84},[28,140415,1830],{"class":38},[14,140417,140224],{},[18,140419,140420],{"className":126765,"code":140392,"language":126767,"meta":23,"style":23},[25,140421,140422,140428,140438],{"__ignoreMap":23},[28,140423,140424,140426],{"class":30,"line":31},[28,140425,51867],{"class":51556},[28,140427,15834],{"class":38},[28,140429,140430,140432,140434,140436],{"class":30,"line":48},[28,140431,140405],{"class":60},[28,140433,51693],{"class":38},[28,140435,61970],{"class":60},[28,140437,1558],{"class":38},[28,140439,140440],{"class":30,"line":84},[28,140441,1830],{"class":38},[14,140443,140444,140445,140448],{},"2 号盒子为 ",[25,140446,140447],{},"lifeservice"," 生活服务模块 高度为 209px",[1727,140450],{"style":126621,"src":140451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1404,140453,140454,140457,140467,140491,140502],{},[366,140455,140456],{},"设置边框（左右下边框）",[366,140458,140459,140460,140463,140464,140466],{},"里面的内容 是 ",[25,140461,140462],{},"ul > 12*li","，给",[25,140465,366],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[366,140468,140469,140470],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1404,140471,140472,140477,140486],{},[366,140473,140474,140476],{},[25,140475,140447],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[366,140478,140479,140480,140482,140483,140485],{},"可以让 ",[25,140481,140447],{}," 里面的 ",[25,140484,1404],{}," 宽度为 252，就可以装的下 4 个 小 li",[366,140487,140488,140490],{},[25,140489,140447],{}," 盒子 overflow 隐藏多余的部分就可以了",[366,140492,116680,140493,140495,140496,140498,140499,140501],{},[25,140494,366],{}," 里面放一个 ",[25,140497,840],{},"（里面放图标），下面的文本用 ",[25,140500,14],{}," 标签包裹",[366,140503,139265,140504,140506,140507,140509,140510,139299,140512,140515],{},[25,140505,840],{}," 设置 24px宽和28px的高（注意 ",[25,140508,840],{}," 是行内元素， 转成行内块），给 ",[25,140511,366],{},[25,140513,140514],{},"text-align:center"," 让里面内容居中显示",[14,140517,140135],{},[18,140519,140521],{"className":126765,"code":140520,"language":126767,"meta":23,"style":23},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[25,140522,140523,140541,140546,140556],{"__ignoreMap":23},[28,140524,140525,140527,140529,140531,140533,140535,140537,140539],{"class":30,"line":31},[28,140526,28],{"class":51556},[28,140528,12697],{"class":38},[28,140530,51],{"class":51556},[28,140532,12697],{"class":38},[28,140534,23815],{"class":51556},[28,140536,12697],{"class":38},[28,140538,555],{"class":51556},[28,140540,15834],{"class":38},[28,140542,140543],{"class":30,"line":48},[28,140544,140545],{"class":87},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[28,140547,140548,140550,140552,140554],{"class":30,"line":84},[28,140549,128381],{"class":60},[28,140551,51693],{"class":38},[28,140553,128443],{"class":60},[28,140555,1558],{"class":38},[28,140557,140558],{"class":30,"line":91},[28,140559,1830],{"class":38},[14,140561,140224],{},[18,140563,140564],{"className":126765,"code":140520,"language":126767,"meta":23,"style":23},[25,140565,140566,140584,140588,140598],{"__ignoreMap":23},[28,140567,140568,140570,140572,140574,140576,140578,140580,140582],{"class":30,"line":31},[28,140569,28],{"class":51556},[28,140571,12697],{"class":38},[28,140573,51],{"class":51556},[28,140575,12697],{"class":38},[28,140577,23815],{"class":51556},[28,140579,12697],{"class":38},[28,140581,555],{"class":51556},[28,140583,15834],{"class":38},[28,140585,140586],{"class":30,"line":48},[28,140587,140545],{"class":87},[28,140589,140590,140592,140594,140596],{"class":30,"line":84},[28,140591,128381],{"class":60},[28,140593,51693],{"class":38},[28,140595,128443],{"class":60},[28,140597,1558],{"class":38},[28,140599,140600],{"class":30,"line":91},[28,140601,1830],{"class":38},[14,140603,140604,140605,140608],{},"3 号盒子为 ",[25,140606,140607],{},"bargain"," 特价商品",[1404,140610,140611],{},[366,140612,140613],{},"这个比较简单，直接插入一张图片即可",[14,140615,140135],{},[18,140617,140618],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,140619,140620],{"__ignoreMap":23},[28,140621,140622,140624,140626,140628,140630,140632,140634,140636,140638,140640,140642,140644],{"class":30,"line":31},[28,140623,1307],{"class":38},[28,140625,1727],{"class":51556},[28,140627,55495],{"class":2225},[28,140629,54],{"class":38},[28,140631,134282],{"class":127},[28,140633,55503],{"class":2225},[28,140635,54],{"class":38},[28,140637,134289],{"class":127},[28,140639,134292],{"class":2225},[28,140641,54],{"class":38},[28,140643,134297],{"class":127},[28,140645,51563],{"class":38},[14,140647,140224],{},[18,140649,140650],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,140651,140652],{"__ignoreMap":23},[28,140653,140654,140656,140658,140660,140662,140664,140666,140668,140670,140672,140674,140676],{"class":30,"line":31},[28,140655,1307],{"class":38},[28,140657,1727],{"class":51556},[28,140659,55495],{"class":2225},[28,140661,54],{"class":38},[28,140663,134282],{"class":127},[28,140665,55503],{"class":2225},[28,140667,54],{"class":38},[28,140669,134289],{"class":127},[28,140671,134292],{"class":2225},[28,140673,54],{"class":38},[28,140675,134297],{"class":127},[28,140677,51563],{"class":38},[380,140679,140681],{"id":140680},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1727,140683],{"style":126621,"src":140684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140686,140687,140688,140691],{},"大盒子 ",[25,140689,140690],{},"recom"," 推荐模块 recommend",[1404,140693,140694],{},[366,140695,140696,140697,140699,140700,140703],{},"给这个 ",[25,140698,140690],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[25,140701,140702],{},"#ebebeb","），设置距离上边 12px",[14,140705,140135],{},[18,140707,140709],{"className":126765,"code":140708,"language":126767,"meta":23,"style":23},"div {\n  background-color: #f0f0f0;\n}\n",[25,140710,140711,140717,140728],{"__ignoreMap":23},[28,140712,140713,140715],{"class":30,"line":31},[28,140714,51867],{"class":51556},[28,140716,15834],{"class":38},[28,140718,140719,140721,140723,140726],{"class":30,"line":48},[28,140720,71134],{"class":60},[28,140722,51693],{"class":38},[28,140724,140725],{"class":60},"#f0f0f0",[28,140727,1558],{"class":38},[28,140729,140730],{"class":30,"line":84},[28,140731,1830],{"class":38},[14,140733,140224],{},[18,140735,140736],{"className":126765,"code":140708,"language":126767,"meta":23,"style":23},[25,140737,140738,140744,140754],{"__ignoreMap":23},[28,140739,140740,140742],{"class":30,"line":31},[28,140741,51867],{"class":51556},[28,140743,15834],{"class":38},[28,140745,140746,140748,140750,140752],{"class":30,"line":48},[28,140747,71134],{"class":60},[28,140749,51693],{"class":38},[28,140751,140725],{"class":60},[28,140753,1558],{"class":38},[28,140755,140756],{"class":30,"line":84},[28,140757,1830],{"class":38},[14,140759,140760],{},"里面包含 2 个盒子， 浮动即可",[14,140762,140135],{},[18,140764,140765],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,140766,140767,140773,140783],{"__ignoreMap":23},[28,140768,140769,140771],{"class":30,"line":31},[28,140770,130613],{"class":2225},[28,140772,15834],{"class":38},[28,140774,140775,140777,140779,140781],{"class":30,"line":48},[28,140776,131245],{"class":60},[28,140778,51693],{"class":38},[28,140780,23998],{"class":60},[28,140782,1558],{"class":38},[28,140784,140785],{"class":30,"line":84},[28,140786,1830],{"class":38},[14,140788,140789,140790],{},"1 号盒子 ",[25,140791,140792],{},"recom_hd",[1404,140794,140795,140798],{},[366,140796,140797],{},"设置宽度205px，高度163px",[366,140799,140269,140800,140802],{},[25,140801,1727],{},"标签，插入图片即可",[14,140804,140135],{},[18,140806,140807],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,140808,140809],{"__ignoreMap":23},[28,140810,140811,140813,140815,140817,140819,140821,140823,140825,140827,140829,140831,140833],{"class":30,"line":31},[28,140812,1307],{"class":38},[28,140814,1727],{"class":51556},[28,140816,55495],{"class":2225},[28,140818,54],{"class":38},[28,140820,134282],{"class":127},[28,140822,55503],{"class":2225},[28,140824,54],{"class":38},[28,140826,134289],{"class":127},[28,140828,134292],{"class":2225},[28,140830,54],{"class":38},[28,140832,134297],{"class":127},[28,140834,51563],{"class":38},[14,140836,140224],{},[18,140838,140839],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,140840,140841],{"__ignoreMap":23},[28,140842,140843,140845,140847,140849,140851,140853,140855,140857,140859,140861,140863,140865],{"class":30,"line":31},[28,140844,1307],{"class":38},[28,140846,1727],{"class":51556},[28,140848,55495],{"class":2225},[28,140850,54],{"class":38},[28,140852,134282],{"class":127},[28,140854,55503],{"class":2225},[28,140856,54],{"class":38},[28,140858,134289],{"class":127},[28,140860,134292],{"class":2225},[28,140862,54],{"class":38},[28,140864,134297],{"class":127},[28,140866,51563],{"class":38},[14,140868,140869,140870,140873],{},"2 号盒子 ",[25,140871,140872],{},"recom_bd"," ，注意里面的小竖线",[1404,140875,140876,140887,140890,140895,140900],{},[366,140877,140878,140879,140881,140882,140884,140885],{},"右侧结构里面放 ",[25,140880,1404],{}," 包含 4个 ",[25,140883,366],{},"，每个li里面包含一个",[25,140886,1727],{},[366,140888,140889],{},"直接利用切片工具把里面的内容当成一张图片",[366,140891,139265,140892,140894],{},[25,140893,366],{}," 设置浮动",[366,140896,139265,140897,140899],{},[25,140898,1727],{}," 设置宽高，宽度 248px，高度 163px",[366,140901,140902,140903,140463,140906,140908,140909,140911,140912],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[25,140904,140905],{},"top 10px",[25,140907,366],{},"设置相对定位（注意，最后一个",[25,140910,366],{},"不用设置伪元素），可以利用 ",[25,140913,140914],{},"nth-child(-n+3){...}",[14,140916,140135],{},[18,140918,140919],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,140920,140921,140929,140939,140949],{"__ignoreMap":23},[28,140922,140923,140925,140927],{"class":30,"line":31},[28,140924,51867],{"class":51556},[28,140926,137766],{"class":2225},[28,140928,15834],{"class":38},[28,140930,140931,140933,140935,140937],{"class":30,"line":48},[28,140932,137773],{"class":60},[28,140934,51693],{"class":38},[28,140936,7914],{"class":127},[28,140938,1558],{"class":38},[28,140940,140941,140943,140945,140947],{"class":30,"line":84},[28,140942,128381],{"class":60},[28,140944,51693],{"class":38},[28,140946,61125],{"class":60},[28,140948,1558],{"class":38},[28,140950,140951],{"class":30,"line":91},[28,140952,1830],{"class":38},[14,140954,140224],{},[18,140956,140957],{"className":126765,"code":138607,"language":126767,"meta":23,"style":23},[25,140958,140959,140967,140977,140987],{"__ignoreMap":23},[28,140960,140961,140963,140965],{"class":30,"line":31},[28,140962,51867],{"class":51556},[28,140964,137766],{"class":2225},[28,140966,15834],{"class":38},[28,140968,140969,140971,140973,140975],{"class":30,"line":48},[28,140970,137773],{"class":60},[28,140972,51693],{"class":38},[28,140974,7914],{"class":127},[28,140976,1558],{"class":38},[28,140978,140979,140981,140983,140985],{"class":30,"line":84},[28,140980,128381],{"class":60},[28,140982,51693],{"class":38},[28,140984,61125],{"class":60},[28,140986,1558],{"class":38},[28,140988,140989],{"class":30,"line":91},[28,140990,1830],{"class":38},[380,140992,140994],{"id":140993},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1727,140996],{"style":126621,"src":140997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140999,141000],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141002,141003],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141005,141006,141009],{},[25,141007,141008],{},"box_hd"," 制作",[14,141011,140789,141012,141014],{},[25,141013,141008],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1727,141016],{"style":126621,"src":141017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1404,141019,141020,141025,141030,141033],{},[366,141021,141022,141024],{},[25,141023,141008],{}," 给 30px 的高度，2个像素的下边框",[366,141026,141027,141028],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[25,141029,139276],{},[366,141031,141032],{},"左侧盒左浮动，右侧盒子右浮动",[366,141034,141035,141037,141038,141040],{},[25,141036,51],{},"标签之间的距离用左右的",[25,141039,31143],{},"撑开即可",[14,141042,141043],{},"结构代码",[18,141045,141046],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141047,141048,141054,141064],{"__ignoreMap":23},[28,141049,141050,141052],{"class":30,"line":31},[28,141051,130613],{"class":2225},[28,141053,15834],{"class":38},[28,141055,141056,141058,141060,141062],{"class":30,"line":48},[28,141057,131245],{"class":60},[28,141059,51693],{"class":38},[28,141061,23998],{"class":60},[28,141063,1558],{"class":38},[28,141065,141066],{"class":30,"line":84},[28,141067,1830],{"class":38},[14,141069,141070],{},"样式代码",[18,141072,141073],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141074,141075,141081,141091],{"__ignoreMap":23},[28,141076,141077,141079],{"class":30,"line":31},[28,141078,130613],{"class":2225},[28,141080,15834],{"class":38},[28,141082,141083,141085,141087,141089],{"class":30,"line":48},[28,141084,131245],{"class":60},[28,141086,51693],{"class":38},[28,141088,23998],{"class":60},[28,141090,1558],{"class":38},[28,141092,141093],{"class":30,"line":84},[28,141094,1830],{"class":38},[14,141096,141097,141009],{},[25,141098,141099],{},"box_bd",[14,141101,141102],{},"2 号盒子 box_bd，不要给高度",[1727,141104],{"style":126621,"src":141105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141107,141108],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141110,141111],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141113,141114],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1404,141116,141117,141129,141145],{},[366,141118,141119,141121,141122,141125,141126,141128],{},[25,141120,141099],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[25,141123,141124],{},"tab_content","，在",[25,141127,141124],{}," 里面包裹tab选项卡对应的内容",[366,141130,141131,141132,141135,141136,141138,141139,141141,141142,141144],{},"内容被一个大盒子包裹（",[25,141133,141134],{},"tab_list_item","），里面是 ",[25,141137,1404],{}," 包裹 5个 ",[25,141140,366],{},"，每个",[25,141143,366],{},"设置对应的宽度，然后设置浮动",[366,141146,141147,141148,141150,141151,141153,141154],{},"而这5个",[25,141149,366],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[25,141152,366],{},"设置",[1404,141155,141156,141174,141177],{},[366,141157,141158,141159,141161,141162,141164,141165,141167,141168,141170,141171,141173],{},"第一个小 ",[25,141160,366],{}," 分为上下结构，上面是 ",[25,141163,1404],{}," 包裹 ",[25,141166,366],{}," ，",[25,141169,366],{},"里面包裹 ",[25,141172,51],{},"，下面插入一张图片",[366,141175,141176],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[366,141178,141179,141180,141182,141183,141185,141186,141188],{},"后面的小 ",[25,141181,366],{}," 里面先放一个",[25,141184,51],{},"标签，然后在",[25,141187,51],{},"标签里面插入图片即可",[14,141190,141043],{},[18,141192,141193],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,141194,141195],{"__ignoreMap":23},[28,141196,141197,141199,141201,141203,141205,141207,141209,141211,141213,141215,141217,141219],{"class":30,"line":31},[28,141198,1307],{"class":38},[28,141200,1727],{"class":51556},[28,141202,55495],{"class":2225},[28,141204,54],{"class":38},[28,141206,134282],{"class":127},[28,141208,55503],{"class":2225},[28,141210,54],{"class":38},[28,141212,134289],{"class":127},[28,141214,134292],{"class":2225},[28,141216,54],{"class":38},[28,141218,134297],{"class":127},[28,141220,51563],{"class":38},[14,141222,141070],{},[18,141224,141225],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,141226,141227],{"__ignoreMap":23},[28,141228,141229,141231,141233,141235,141237,141239,141241,141243,141245,141247,141249,141251],{"class":30,"line":31},[28,141230,1307],{"class":38},[28,141232,1727],{"class":51556},[28,141234,55495],{"class":2225},[28,141236,54],{"class":38},[28,141238,134282],{"class":127},[28,141240,55503],{"class":2225},[28,141242,54],{"class":38},[28,141244,134289],{"class":127},[28,141246,134292],{"class":2225},[28,141248,54],{"class":38},[28,141250,134297],{"class":127},[28,141252,51563],{"class":38},[14,141254,141255],{},"tab栏切换需求！！！！！！介绍：",[1727,141257],{"style":126621,"src":141258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1404,141260,141261,141269,141275,141278],{},[366,141262,141263,141266,141267],{},[25,141264,141265],{},"tab","栏的布局是 ",[25,141268,139276],{},[366,141270,141271,141272,141274],{},"有多少个",[25,141273,141265],{},"选项卡，那么对应就有多少个内容",[366,141276,141277],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[366,141279,141280,141281,141284,141285,141287,141288,141290],{},"等后面我们学习了",[25,141282,141283],{},"js","之后，我们就会配合",[25,141286,141283],{},"来实现，",[25,141289,141265],{},"栏的切换",[351,141292,141294],{"id":141293},"_162-列表制作","16.2 列表制作",[380,141296,141298],{"id":141297},"_1621-准备工作","16.2.1 准备工作",[1404,141300,141301,141304,141307,141310],{},[366,141302,141303],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[366,141305,141306],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[366,141308,141309],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[366,141311,141312],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[380,141314,141316,141317,101231,141319,141321],{"id":141315},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[25,141318,131770],{},[25,141320,53969],{}," 修改",[1727,141323],{"style":126621,"src":141324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1404,141326,141327],{},[366,141328,141329],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141331,140135],{},[18,141333,141334],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,141335,141336,141340,141354,141358,141372,141376,141390,141394,141408,141412],{"__ignoreMap":23},[28,141337,141338],{"class":30,"line":31},[28,141339,132204],{"class":87},[28,141341,141342,141344,141346,141348,141350,141352],{"class":30,"line":48},[28,141343,132209],{"class":2225},[28,141345,80063],{"class":38},[28,141347,129125],{"class":60},[28,141349,51693],{"class":38},[28,141351,132218],{"class":60},[28,141353,129695],{"class":38},[28,141355,141356],{"class":30,"line":84},[28,141357,132225],{"class":87},[28,141359,141360,141362,141364,141366,141368,141370],{"class":30,"line":91},[28,141361,132230],{"class":2225},[28,141363,80063],{"class":38},[28,141365,129125],{"class":60},[28,141367,51693],{"class":38},[28,141369,55020],{"class":60},[28,141371,129695],{"class":38},[28,141373,141374],{"class":30,"line":97},[28,141375,132245],{"class":87},[28,141377,141378,141380,141382,141384,141386,141388],{"class":30,"line":103},[28,141379,132250],{"class":2225},[28,141381,80063],{"class":38},[28,141383,129125],{"class":60},[28,141385,51693],{"class":38},[28,141387,55087],{"class":60},[28,141389,129695],{"class":38},[28,141391,141392],{"class":30,"line":109},[28,141393,132265],{"class":87},[28,141395,141396,141398,141400,141402,141404,141406],{"class":30,"line":118},[28,141397,132270],{"class":2225},[28,141399,80063],{"class":38},[28,141401,129125],{"class":60},[28,141403,51693],{"class":38},[28,141405,86489],{"class":60},[28,141407,129695],{"class":38},[28,141409,141410],{"class":30,"line":124},[28,141411,132285],{"class":87},[28,141413,141414,141416,141418,141420,141422,141424],{"class":30,"line":131},[28,141415,132290],{"class":2225},[28,141417,80063],{"class":38},[28,141419,129125],{"class":60},[28,141421,51693],{"class":38},[28,141423,132299],{"class":60},[28,141425,129695],{"class":38},[14,141427,140224],{},[18,141429,141430],{"className":126765,"code":132197,"language":126767,"meta":23,"style":23},[25,141431,141432,141436,141450,141454,141468,141472,141486,141490,141504,141508],{"__ignoreMap":23},[28,141433,141434],{"class":30,"line":31},[28,141435,132204],{"class":87},[28,141437,141438,141440,141442,141444,141446,141448],{"class":30,"line":48},[28,141439,132209],{"class":2225},[28,141441,80063],{"class":38},[28,141443,129125],{"class":60},[28,141445,51693],{"class":38},[28,141447,132218],{"class":60},[28,141449,129695],{"class":38},[28,141451,141452],{"class":30,"line":84},[28,141453,132225],{"class":87},[28,141455,141456,141458,141460,141462,141464,141466],{"class":30,"line":91},[28,141457,132230],{"class":2225},[28,141459,80063],{"class":38},[28,141461,129125],{"class":60},[28,141463,51693],{"class":38},[28,141465,55020],{"class":60},[28,141467,129695],{"class":38},[28,141469,141470],{"class":30,"line":97},[28,141471,132245],{"class":87},[28,141473,141474,141476,141478,141480,141482,141484],{"class":30,"line":103},[28,141475,132250],{"class":2225},[28,141477,80063],{"class":38},[28,141479,129125],{"class":60},[28,141481,51693],{"class":38},[28,141483,55087],{"class":60},[28,141485,129695],{"class":38},[28,141487,141488],{"class":30,"line":109},[28,141489,132265],{"class":87},[28,141491,141492,141494,141496,141498,141500,141502],{"class":30,"line":118},[28,141493,132270],{"class":2225},[28,141495,80063],{"class":38},[28,141497,129125],{"class":60},[28,141499,51693],{"class":38},[28,141501,86489],{"class":60},[28,141503,129695],{"class":38},[28,141505,141506],{"class":30,"line":124},[28,141507,132285],{"class":87},[28,141509,141510,141512,141514,141516,141518,141520],{"class":30,"line":131},[28,141511,132290],{"class":2225},[28,141513,80063],{"class":38},[28,141515,129125],{"class":60},[28,141517,51693],{"class":38},[28,141519,132299],{"class":60},[28,141521,129695],{"class":38},[1404,141523,141524,141535],{},[366,141525,141526,141527,141530,141531,101231,141533],{},"1 号盒子左侧浮动 ",[25,141528,141529],{},"sk_list"," 里面包含 ",[25,141532,1404],{},[25,141534,366],{},[366,141536,141537,141538,141530,141541,101231,141543],{},"2 号盒子左侧浮动 ",[25,141539,141540],{},"sk_con",[25,141542,1404],{},[25,141544,366],{},[14,141546,140135],{},[18,141548,141549],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141550,141551,141557,141567],{"__ignoreMap":23},[28,141552,141553,141555],{"class":30,"line":31},[28,141554,130613],{"class":2225},[28,141556,15834],{"class":38},[28,141558,141559,141561,141563,141565],{"class":30,"line":48},[28,141560,131245],{"class":60},[28,141562,51693],{"class":38},[28,141564,23998],{"class":60},[28,141566,1558],{"class":38},[28,141568,141569],{"class":30,"line":84},[28,141570,1830],{"class":38},[14,141572,140224],{},[18,141574,141575],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141576,141577,141583,141593],{"__ignoreMap":23},[28,141578,141579,141581],{"class":30,"line":31},[28,141580,130613],{"class":2225},[28,141582,15834],{"class":38},[28,141584,141585,141587,141589,141591],{"class":30,"line":48},[28,141586,131245],{"class":60},[28,141588,51693],{"class":38},[28,141590,23998],{"class":60},[28,141592,1558],{"class":38},[28,141594,141595],{"class":30,"line":84},[28,141596,1830],{"class":38},[380,141598,141600,141601],{"id":141599},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[25,141602,141603],{},"sk_container",[1727,141605],{"style":126621,"src":141606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1404,141608,141609,141614],{},[366,141610,140789,141611,141613],{},[25,141612,141603],{}," 给宽度 1200，不要给高度",[366,141615,141616],{},"一定不要忘记清除浮动",[14,141618,140135],{},[18,141620,141621],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141622,141623,141629,141639],{"__ignoreMap":23},[28,141624,141625,141627],{"class":30,"line":31},[28,141626,130613],{"class":2225},[28,141628,15834],{"class":38},[28,141630,141631,141633,141635,141637],{"class":30,"line":48},[28,141632,131245],{"class":60},[28,141634,51693],{"class":38},[28,141636,23998],{"class":60},[28,141638,1558],{"class":38},[28,141640,141641],{"class":30,"line":84},[28,141642,1830],{"class":38},[363,141644,141645],{},[366,141646,141647],{},"sk_hd制作",[1404,141649,141650],{},[366,141651,140869,141652,141655],{},[25,141653,141654],{},"sk_hd"," ，插入图片即可",[14,141657,140135],{},[18,141659,141660],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,141661,141662],{"__ignoreMap":23},[28,141663,141664,141666,141668,141670,141672,141674,141676,141678,141680,141682,141684,141686],{"class":30,"line":31},[28,141665,1307],{"class":38},[28,141667,1727],{"class":51556},[28,141669,55495],{"class":2225},[28,141671,54],{"class":38},[28,141673,134282],{"class":127},[28,141675,55503],{"class":2225},[28,141677,54],{"class":38},[28,141679,134289],{"class":127},[28,141681,134292],{"class":2225},[28,141683,54],{"class":38},[28,141685,134297],{"class":127},[28,141687,51563],{"class":38},[363,141689,141690],{"start":48},[366,141691,141692],{},"sk_bd制作",[1404,141694,141695],{},[366,141696,141697,141698,141701,141702,101231,141704,141706],{},"3 号盒子 ",[25,141699,141700],{},"sk_bd"," ，里面包含很多的 ",[25,141703,1404],{},[25,141705,366],{},[1404,141707,141708,141717],{},[366,141709,141710,141711,141713,141714,141716],{},"当鼠标移入到 ",[25,141712,366],{}," 上面的时候显示红色的边框，在这里先给 ",[25,141715,366],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[366,141718,141719,141720,141722,141723,141725,141726,141729,141730,141732],{},"由于给每个 ",[25,141721,366],{}," 都设置了外边距，导致一行的最后一个 ",[25,141724,366],{}," 掉了下来，在这里我们利用 ",[25,141727,141728],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[25,141731,366],{},"，去掉外边距就好了",[14,141734,140135],{},[18,141736,141737],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,141738,141739,141745,141757],{"__ignoreMap":23},[28,141740,141741,141743],{"class":30,"line":31},[28,141742,51867],{"class":51556},[28,141744,15834],{"class":38},[28,141746,141747,141749,141751,141753,141755],{"class":30,"line":48},[28,141748,70726],{"class":60},[28,141750,51693],{"class":38},[28,141752,244],{"class":60},[28,141754,51812],{"class":60},[28,141756,1558],{"class":38},[28,141758,141759],{"class":30,"line":84},[28,141760,1830],{"class":38},[14,141762,140224],{},[18,141764,141765],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,141766,141767,141773,141785],{"__ignoreMap":23},[28,141768,141769,141771],{"class":30,"line":31},[28,141770,51867],{"class":51556},[28,141772,15834],{"class":38},[28,141774,141775,141777,141779,141781,141783],{"class":30,"line":48},[28,141776,70726],{"class":60},[28,141778,51693],{"class":38},[28,141780,244],{"class":60},[28,141782,51812],{"class":60},[28,141784,1558],{"class":38},[28,141786,141787],{"class":30,"line":84},[28,141788,1830],{"class":38},[351,141790,141792],{"id":141791},"_163-注册页面制作","16.3 注册页面制作",[1727,141794],{"style":126621,"src":141795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141797,141798,141800],{},[555,141799,9287],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1727,141802],{"style":126621,"src":141803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[380,141805,141807],{"id":141806},"_1631-准备工作","16.3.1 准备工作",[1404,141809,141810,141813],{},[366,141811,141812],{},"创建register.html，引入 base.css，引入favicon图标",[366,141814,141815],{},"创建register.css ，在html页面进行引入",[380,141817,141819,141820,141822],{"id":141818},"_1632-header-头部实现","16.3.2 ",[25,141821,131770],{}," 头部实现",[1404,141824,141825,141828],{},[366,141826,141827],{},"整个内容用 版心 进行包裹",[366,141829,141830],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141832,140135],{},[18,141834,141835],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,141836,141837],{"__ignoreMap":23},[28,141838,141839,141841,141843,141845,141847,141849,141851,141853,141855,141857,141859,141861],{"class":30,"line":31},[28,141840,1307],{"class":38},[28,141842,1727],{"class":51556},[28,141844,55495],{"class":2225},[28,141846,54],{"class":38},[28,141848,134282],{"class":127},[28,141850,55503],{"class":2225},[28,141852,54],{"class":38},[28,141854,134289],{"class":127},[28,141856,134292],{"class":2225},[28,141858,54],{"class":38},[28,141860,134297],{"class":127},[28,141862,51563],{"class":38},[14,141864,140224],{},[18,141866,141867],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,141868,141869],{"__ignoreMap":23},[28,141870,141871,141873,141875,141877,141879,141881,141883,141885,141887,141889,141891,141893],{"class":30,"line":31},[28,141872,1307],{"class":38},[28,141874,1727],{"class":51556},[28,141876,55495],{"class":2225},[28,141878,54],{"class":38},[28,141880,134282],{"class":127},[28,141882,55503],{"class":2225},[28,141884,54],{"class":38},[28,141886,134289],{"class":127},[28,141888,134292],{"class":2225},[28,141890,54],{"class":38},[28,141892,134297],{"class":127},[28,141894,51563],{"class":38},[380,141896,141898,141899,141902],{"id":141897},"_1633-registerarea-主体模块实现","16.3.3 ",[25,141900,141901],{},"registerarea"," 主体模块实现",[1727,141904],{"style":126621,"src":141905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141907,141908],{},"整个大盒子 高度为 522px，设置4个边框",[14,141910,140135],{},[18,141912,141913],{"className":126765,"code":130922,"language":126767,"meta":23,"style":23},[25,141914,141915,141921,141937],{"__ignoreMap":23},[28,141916,141917,141919],{"class":30,"line":31},[28,141918,51867],{"class":51556},[28,141920,15834],{"class":38},[28,141922,141923,141925,141927,141929,141931,141933,141935],{"class":30,"line":48},[28,141924,71152],{"class":60},[28,141926,51693],{"class":38},[28,141928,61],{"class":60},[28,141930,51748],{"class":34},[28,141932,51777],{"class":60},[28,141934,130157],{"class":60},[28,141936,1558],{"class":38},[28,141938,141939],{"class":30,"line":84},[28,141940,1830],{"class":38},[14,141942,140224],{},[18,141944,141945],{"className":126765,"code":130922,"language":126767,"meta":23,"style":23},[25,141946,141947,141953,141969],{"__ignoreMap":23},[28,141948,141949,141951],{"class":30,"line":31},[28,141950,51867],{"class":51556},[28,141952,15834],{"class":38},[28,141954,141955,141957,141959,141961,141963,141965,141967],{"class":30,"line":48},[28,141956,71152],{"class":60},[28,141958,51693],{"class":38},[28,141960,61],{"class":60},[28,141962,51748],{"class":34},[28,141964,51777],{"class":60},[28,141966,130157],{"class":60},[28,141968,1558],{"class":38},[28,141970,141971],{"class":30,"line":84},[28,141972,1830],{"class":38},[14,141974,141975],{},"1号盒子 是一个 h3 标签，放标题",[1404,141977,141978],{},[366,141979,141980],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141982,140135],{},[18,141984,141985],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,141986,141987,141993,142003],{"__ignoreMap":23},[28,141988,141989,141991],{"class":30,"line":31},[28,141990,130613],{"class":2225},[28,141992,15834],{"class":38},[28,141994,141995,141997,141999,142001],{"class":30,"line":48},[28,141996,131245],{"class":60},[28,141998,51693],{"class":38},[28,142000,23998],{"class":60},[28,142002,1558],{"class":38},[28,142004,142005],{"class":30,"line":84},[28,142006,1830],{"class":38},[14,142008,140224],{},[18,142010,142011],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,142012,142013,142019,142029],{"__ignoreMap":23},[28,142014,142015,142017],{"class":30,"line":31},[28,142016,130613],{"class":2225},[28,142018,15834],{"class":38},[28,142020,142021,142023,142025,142027],{"class":30,"line":48},[28,142022,131245],{"class":60},[28,142024,51693],{"class":38},[28,142026,23998],{"class":60},[28,142028,1558],{"class":38},[28,142030,142031],{"class":30,"line":84},[28,142032,1830],{"class":38},[14,142034,142035],{},"2号盒子 里面放注册的内容",[1404,142037,142038,142041,142050,142064,142077,142080,142083,142101,142115],{},[366,142039,142040],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[366,142042,142043,142044,142046,142047,142049],{},"里面的内容利用 ",[25,142045,1404],{}," 包含 ",[25,142048,366],{}," 来实现的（不需要用表格）",[366,142051,139279,142052,142054,142055,142057,142058,142060,142061,142063],{},[25,142053,366],{}," 里面，左侧放 ",[25,142056,33864],{}," 标签， 中间放",[25,142059,54077],{}," 标签， 右侧放 ",[25,142062,28],{}," 提示信息",[366,142065,142066,142067,142069,142070,142072,142073,142076],{},"左侧 ",[25,142068,33864],{},"里面的文字都是右对齐，我们可以给",[25,142071,33864],{},"设置一个宽度（88px），然后利用",[25,142074,142075],{},"text-align"," 来设置右对齐",[366,142078,142079],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[366,142081,142082],{},"右侧 span修饰一下文字颜色",[366,142084,142085,142086],{},"提示信息的样式优化",[1404,142087,142088,142091,142094],{},[366,142089,142090],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[366,142092,142093],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[366,142095,142096,142097,142100],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[25,142098,142099],{},"vertical-algin"," 来设置 图片与文字对齐方式",[366,142102,142103,142104],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1404,142105,142106,142112],{},[366,142107,142108,142109,142111],{},"设置 ",[25,142110,23815],{}," 的 左右 12px 的内边距，设置一下文字颜色",[366,142113,142114],{},"分别设置 背景颜色",[366,142116,142117,142118,142120],{},"同意协议 和 完成注册 都是用 ",[25,142119,366],{}," 进行包裹",[14,142122,140135],{},[18,142124,142125],{"className":126765,"code":140708,"language":126767,"meta":23,"style":23},[25,142126,142127,142133,142143],{"__ignoreMap":23},[28,142128,142129,142131],{"class":30,"line":31},[28,142130,51867],{"class":51556},[28,142132,15834],{"class":38},[28,142134,142135,142137,142139,142141],{"class":30,"line":48},[28,142136,71134],{"class":60},[28,142138,51693],{"class":38},[28,142140,140725],{"class":60},[28,142142,1558],{"class":38},[28,142144,142145],{"class":30,"line":84},[28,142146,1830],{"class":38},[14,142148,140224],{},[18,142150,142151],{"className":126765,"code":140708,"language":126767,"meta":23,"style":23},[25,142152,142153,142159,142169],{"__ignoreMap":23},[28,142154,142155,142157],{"class":30,"line":31},[28,142156,51867],{"class":51556},[28,142158,15834],{"class":38},[28,142160,142161,142163,142165,142167],{"class":30,"line":48},[28,142162,71134],{"class":60},[28,142164,51693],{"class":38},[28,142166,140725],{"class":60},[28,142168,1558],{"class":38},[28,142170,142171],{"class":30,"line":84},[28,142172,1830],{"class":38},[380,142174,142176],{"id":142175},"_1634-底部实现","16.3.4 底部实现",[14,142178,140135],{},[18,142180,142181],{"className":126765,"code":140708,"language":126767,"meta":23,"style":23},[25,142182,142183,142189,142199],{"__ignoreMap":23},[28,142184,142185,142187],{"class":30,"line":31},[28,142186,51867],{"class":51556},[28,142188,15834],{"class":38},[28,142190,142191,142193,142195,142197],{"class":30,"line":48},[28,142192,71134],{"class":60},[28,142194,51693],{"class":38},[28,142196,140725],{"class":60},[28,142198,1558],{"class":38},[28,142200,142201],{"class":30,"line":84},[28,142202,1830],{"class":38},[14,142204,140224],{},[18,142206,142207],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,142208,142209,142213,142227,142231],{"__ignoreMap":23},[28,142210,142211],{"class":30,"line":31},[28,142212,130876],{"class":87},[28,142214,142215,142217,142219,142221,142223,142225],{"class":30,"line":48},[28,142216,1307],{"class":38},[28,142218,51867],{"class":51556},[28,142220,53742],{"class":2225},[28,142222,54],{"class":38},[28,142224,130889],{"class":127},[28,142226,51563],{"class":38},[28,142228,142229],{"class":30,"line":84},[28,142230,130896],{"class":38},[28,142232,142233,142235,142237],{"class":30,"line":91},[28,142234,52041],{"class":38},[28,142236,51867],{"class":51556},[28,142238,51563],{"class":38},[351,142240,142242],{"id":142241},"_164-项目总结","16.4 项目总结",[363,142244,142245,142248,142251,142254],{},[366,142246,142247],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[366,142249,142250],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[366,142252,142253],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[366,142255,142256],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1727,142258],{"style":126621,"src":142259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[363,142261,142262],{"start":97},[366,142263,142264],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1727,142266],{"style":126621,"src":142267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[363,142269,142270],{"start":103},[366,142271,142272],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1727,142274],{"style":126621,"src":142275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[18,142277,142278],{"className":127512,"code":136922,"language":127514,"meta":23,"style":23},[25,142279,142280],{"__ignoreMap":23},[28,142281,142282,142284,142286,142288,142290,142292,142294,142296,142298,142300,142302,142304],{"class":30,"line":31},[28,142283,1307],{"class":38},[28,142285,54077],{"class":51556},[28,142287,54080],{"class":2225},[28,142289,54],{"class":38},[28,142291,62955],{"class":127},[28,142293,15182],{"class":2225},[28,142295,54],{"class":38},[28,142297,136943],{"class":127},[28,142299,61276],{"class":2225},[28,142301,54],{"class":38},[28,142303,136950],{"class":127},[28,142305,51563],{"class":38},[363,142307,142308,142311],{"start":109},[366,142309,142310],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[366,142312,142313],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[328,142315,142316],{},"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":23,"searchDepth":48,"depth":48,"links":142318},[142319,142324,142331,142339],{"id":139945,"depth":48,"text":139946,"children":142320},[142321,142322,142323],{"id":139949,"depth":84,"text":139950},{"id":140680,"depth":84,"text":140681},{"id":140993,"depth":84,"text":140994},{"id":141293,"depth":48,"text":141294,"children":142325},[142326,142327,142329],{"id":141297,"depth":84,"text":141298},{"id":141315,"depth":84,"text":142328},"16.2.2 列表页 header 和 nav 修改",{"id":141599,"depth":84,"text":142330},"16.2.3 列表页主体 sk_container",{"id":141791,"depth":48,"text":141792,"children":142332},[142333,142334,142336,142338],{"id":141806,"depth":84,"text":141807},{"id":141818,"depth":84,"text":142335},"16.3.2 header 头部实现",{"id":141897,"depth":84,"text":142337},"16.3.3 registerarea 主体模块实现",{"id":142175,"depth":84,"text":142176},{"id":142241,"depth":48,"text":142242},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139937,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142346,"title":142347,"body":142348,"description":333,"extension":334,"meta":142456,"navigation":336,"path":142457,"seo":142458,"stem":142459,"__hash__":142460},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142349,"toc":142451},[142350,142353,142357,142360,142363,142372,142381,142385,142390,142397,142415,142418,142421,142424,142427,142430,142433,142436,142439,142442,142445,142448],[10,142351,142347],{"id":142352},"_17-web服务器与网站发布",[351,142354,142356],{"id":142355},"_171-web服务器","17.1 Web服务器",[14,142358,142359],{},"把自己网站上传到服务器上，可以让其他人访问",[1727,142361],{"style":126621,"src":142362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142364,142365,142368,142369],{},[555,142366,142367],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[555,142370,142371],{},"Web 服务器等",[14,142373,142374,142375,101231,142378,26003],{},"根据服务器在网络中所在的位置不同，又可分为 ",[555,142376,142377],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[555,142379,142380],{},"远程服务器",[380,142382,142384],{"id":142383},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142386,142387],{},[555,142388,142389],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142391,142392,142393],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[51,142394,142395],{"href":142395,"rel":142396},"http:\u002F\u002Ffree.3v.do\u002F",[24127],[1404,142398,142399,142402,142405,142412],{},[366,142400,142401],{},"去免费空间网站注册账号。",[366,142403,142404],{},"记录下主机名、用户名、密码、域名。",[366,142406,142407,142408,142411],{},"利用 ",[25,142409,142410],{},"utftp"," 软件 上传网站到远程服务器",[366,142413,142414],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142416,142417],{},"使用软件上传，对上传软件文件进行解压",[1727,142419],{"style":126621,"src":142420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1727,142422],{"style":126621,"src":142423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142425,142426],{},"输入刚刚申请的服务器账号信息：",[1727,142428],{"style":126621,"src":142429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1727,142431],{"style":126621,"src":142432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1727,142434],{"style":126621,"src":142435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1727,142437],{"style":126621,"src":142438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142440,142441],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1727,142443],{"style":126621,"src":142444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142446,142447],{},"浏览器输入域名即可访问",[14,142449,142450],{},"首页一定必须是index",{"title":23,"searchDepth":48,"depth":48,"links":142452},[142453],{"id":142355,"depth":48,"text":142356,"children":142454},[142455],{"id":142383,"depth":84,"text":142384},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142347,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142462,"title":142463,"body":142464,"description":333,"extension":334,"meta":143391,"navigation":336,"path":143392,"seo":143393,"stem":143394,"__hash__":143395},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142465,"toc":143374},[142466,142469,142473,142476,142479,142490,142493,142497,142501,142506,142509,142512,142515,142518,142522,142548,142552,142556,142559,142562,142566,142599,142603,142606,142609,142673,142677,142681,142684,142687,142690,142694,142739,142743,142746,142776,142780,142784,142787,142790,142794,142797,142866,142869,142977,142979,142985,142989,142992,142995,143091,143094,143098,143122,143126,143129,143133,143136,143140,143143,143146,143149,143152,143156,143159,143162,143166,143170,143173,143176,143179,143182,143186,143189,143193,143196,143199,143244,143248,143252,143255,143258,143261,143293,143297,143300,143334,143338,143341,143371],[10,142467,142463],{"id":142468},"_18-2d动画与3d转换",[351,142470,142472],{"id":142471},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142474,142475],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142477,142478],{},"转换（transform）你可以简单理解为变形",[1404,142480,142481,142484,142487],{},[366,142482,142483],{},"移动：translate",[366,142485,142486],{},"旋转：rotate",[366,142488,142489],{},"缩放：scale",[1727,142491],{"style":126621,"src":142492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[380,142494,142496],{"id":142495},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22260,142498,142500],{"id":142499},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142502,142503,142504],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[555,142505,133424],{},[1727,142507],{"style":126621,"src":142508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142510,142511],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142513,142514],{},"对于行内元素无效",[14,142516,142517],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22260,142519,142521],{"id":142520},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[18,142523,142524],{"className":126765,"code":138954,"language":126767,"meta":23,"style":23},[25,142525,142526,142532,142544],{"__ignoreMap":23},[28,142527,142528,142530],{"class":30,"line":31},[28,142529,51867],{"class":51556},[28,142531,15834],{"class":38},[28,142533,142534,142536,142538,142540,142542],{"class":30,"line":48},[28,142535,70726],{"class":60},[28,142537,51693],{"class":38},[28,142539,244],{"class":60},[28,142541,51812],{"class":60},[28,142543,1558],{"class":38},[28,142545,142546],{"class":30,"line":84},[28,142547,1830],{"class":38},[380,142549,142551],{"id":142550},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22260,142553,142555],{"id":142554},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142557,142558],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1727,142560],{"style":126621,"src":142561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22260,142563,142565],{"id":142564},"_18122-旋转效果","18.1.2.2 旋转效果",[18,142567,142569],{"className":126765,"code":142568,"language":126767,"meta":23,"style":23},"div {\n  transform: rotate(45deg);\n}\n",[25,142570,142571,142577,142595],{"__ignoreMap":23},[28,142572,142573,142575],{"class":30,"line":31},[28,142574,51867],{"class":51556},[28,142576,15834],{"class":38},[28,142578,142579,142581,142583,142586,142588,142590,142593],{"class":30,"line":48},[28,142580,136749],{"class":60},[28,142582,51693],{"class":38},[28,142584,142585],{"class":60},"rotate",[28,142587,413],{"class":38},[28,142589,927],{"class":60},[28,142591,142592],{"class":34},"deg",[28,142594,2981],{"class":38},[28,142596,142597],{"class":30,"line":84},[28,142598,1830],{"class":38},[22260,142600,142602],{"id":142601},"_18123-三角做法","18.1.2.3 三角做法",[14,142604,142605],{},"该下标当经过最外层大盒子时会实现向上反转",[1727,142607],{"style":126621,"src":142608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[18,142610,142611],{"className":126765,"code":135285,"language":126767,"meta":23,"style":23},[25,142612,142613,142617,142623,142633,142643,142659,142669],{"__ignoreMap":23},[28,142614,142615],{"class":30,"line":31},[28,142616,135292],{"class":87},[28,142618,142619,142621],{"class":30,"line":48},[28,142620,135297],{"class":2225},[28,142622,15834],{"class":38},[28,142624,142625,142627,142629,142631],{"class":30,"line":84},[28,142626,70824],{"class":60},[28,142628,51693],{"class":38},[28,142630,244],{"class":60},[28,142632,1558],{"class":38},[28,142634,142635,142637,142639,142641],{"class":30,"line":91},[28,142636,71044],{"class":60},[28,142638,51693],{"class":38},[28,142640,244],{"class":60},[28,142642,1558],{"class":38},[28,142644,142645,142647,142649,142651,142653,142655,142657],{"class":30,"line":97},[28,142646,71152],{"class":60},[28,142648,51693],{"class":38},[28,142650,845],{"class":60},[28,142652,51748],{"class":34},[28,142654,51777],{"class":60},[28,142656,64247],{"class":60},[28,142658,1558],{"class":38},[28,142660,142661,142663,142665,142667],{"class":30,"line":103},[28,142662,135340],{"class":60},[28,142664,51693],{"class":38},[28,142666,62625],{"class":60},[28,142668,1558],{"class":38},[28,142670,142671],{"class":30,"line":109},[28,142672,1830],{"class":38},[380,142674,142676],{"id":142675},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22260,142678,142680],{"id":142679},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142682,142683],{},"设置中心点",[1727,142685],{"style":126621,"src":142686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142688,142689],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22260,142691,142693],{"id":142692},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[18,142695,142697],{"className":126765,"code":142696,"language":126767,"meta":23,"style":23},"\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",[25,142698,142699,142704,142710,142725,142730,142735],{"__ignoreMap":23},[28,142700,142701],{"class":30,"line":31},[28,142702,142703],{"class":87},"\u002F* 转换中心点 *\u002F\n",[28,142705,142706,142708],{"class":30,"line":48},[28,142707,51867],{"class":51556},[28,142709,15834],{"class":38},[28,142711,142712,142715,142717,142719,142721,142723],{"class":30,"line":84},[28,142713,142714],{"class":60},"  transform-origin",[28,142716,51693],{"class":38},[28,142718,51848],{"class":60},[28,142720,17406],{"class":60},[28,142722,130628],{"class":38},[28,142724,135438],{"class":87},[28,142726,142727],{"class":30,"line":91},[28,142728,142729],{"class":87},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[28,142731,142732],{"class":30,"line":97},[28,142733,142734],{"class":87},"  \u002F* transform-origin: left top; *\u002F\n",[28,142736,142737],{"class":30,"line":103},[28,142738,1830],{"class":38},[22260,142740,142742],{"id":142741},"_18133-旋转案例","18.1.3.3 旋转案例",[1727,142744],{"style":126621,"src":142745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[18,142747,142748],{"className":126765,"code":142568,"language":126767,"meta":23,"style":23},[25,142749,142750,142756,142772],{"__ignoreMap":23},[28,142751,142752,142754],{"class":30,"line":31},[28,142753,51867],{"class":51556},[28,142755,15834],{"class":38},[28,142757,142758,142760,142762,142764,142766,142768,142770],{"class":30,"line":48},[28,142759,136749],{"class":60},[28,142761,51693],{"class":38},[28,142763,142585],{"class":60},[28,142765,413],{"class":38},[28,142767,927],{"class":60},[28,142769,142592],{"class":34},[28,142771,2981],{"class":38},[28,142773,142774],{"class":30,"line":84},[28,142775,1830],{"class":38},[380,142777,142779],{"id":142778},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22260,142781,142783],{"id":142782},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142785,142786],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1727,142788],{"style":126621,"src":142789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22260,142791,142793],{"id":142792},"_18142-分页按钮","18.1.4.2 分页按钮",[1727,142795],{"style":126621,"src":142796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[18,142798,142800],{"className":126765,"code":142799,"language":126767,"meta":23,"style":23},"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",[25,142801,142802,142808,142824,142828,142832,142837,142843,142857,142862],{"__ignoreMap":23},[28,142803,142804,142806],{"class":30,"line":31},[28,142805,51867],{"class":51556},[28,142807,15834],{"class":38},[28,142809,142810,142812,142814,142817,142819,142822],{"class":30,"line":48},[28,142811,136749],{"class":60},[28,142813,51693],{"class":38},[28,142815,142816],{"class":60},"scale",[28,142818,413],{"class":38},[28,142820,142821],{"class":60},"1.2",[28,142823,2981],{"class":38},[28,142825,142826],{"class":30,"line":84},[28,142827,1830],{"class":38},[28,142829,142830],{"class":30,"line":91},[28,142831,136226],{"class":38},[28,142833,142834],{"class":30,"line":97},[28,142835,142836],{"class":87},"\u002F* 2D 缩放 *\u002F\n",[28,142838,142839,142841],{"class":30,"line":103},[28,142840,51867],{"class":51556},[28,142842,15834],{"class":38},[28,142844,142845,142847,142849,142851,142853,142855],{"class":30,"line":109},[28,142846,136749],{"class":60},[28,142848,51693],{"class":38},[28,142850,142816],{"class":60},[28,142852,413],{"class":38},[28,142854,142821],{"class":60},[28,142856,2981],{"class":38},[28,142858,142859],{"class":30,"line":118},[28,142860,142861],{"class":87},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[28,142863,142864],{"class":30,"line":124},[28,142865,1830],{"class":38},[14,142867,142868],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[18,142870,142872],{"className":126765,"code":142871,"language":126767,"meta":23,"style":23},"\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",[25,142873,142874,142879,142889,142910,142931,142935,142940,142946,142973],{"__ignoreMap":23},[28,142875,142876],{"class":30,"line":31},[28,142877,142878],{"class":87},"\u002F* 定义动画 *\u002F\n",[28,142880,142881,142884,142887],{"class":30,"line":48},[28,142882,142883],{"class":34},"@keyframes",[28,142885,142886],{"class":5478}," move",[28,142888,15834],{"class":38},[28,142890,142891,142894,142896,142898,142900,142903,142905,142907],{"class":30,"line":84},[28,142892,142893],{"class":2225},"  0%",[28,142895,80063],{"class":38},[28,142897,48390],{"class":60},[28,142899,51693],{"class":38},[28,142901,142902],{"class":60},"translateX",[28,142904,413],{"class":38},[28,142906,244],{"class":60},[28,142908,142909],{"class":38},"); }\n",[28,142911,142912,142915,142917,142919,142921,142923,142925,142927,142929],{"class":30,"line":91},[28,142913,142914],{"class":2225},"  100%",[28,142916,80063],{"class":38},[28,142918,48390],{"class":60},[28,142920,51693],{"class":38},[28,142922,142902],{"class":60},[28,142924,413],{"class":38},[28,142926,713],{"class":60},[28,142928,51748],{"class":34},[28,142930,142909],{"class":38},[28,142932,142933],{"class":30,"line":97},[28,142934,1830],{"class":38},[28,142936,142937],{"class":30,"line":103},[28,142938,142939],{"class":87},"\u002F* 调用动画 *\u002F\n",[28,142941,142942,142944],{"class":30,"line":109},[28,142943,51867],{"class":51556},[28,142945,15834],{"class":38},[28,142947,142948,142951,142953,142955,142957,142959,142961,142963,142965,142968,142971],{"class":30,"line":118},[28,142949,142950],{"class":60},"  animation",[28,142952,51693],{"class":38},[28,142954,135451],{"class":60},[28,142956,25381],{"class":60},[28,142958,1093],{"class":34},[28,142960,78936],{"class":60},[28,142962,4355],{"class":60},[28,142964,1093],{"class":34},[28,142966,142967],{"class":60}," infinite",[28,142969,142970],{"class":60}," alternate",[28,142972,1558],{"class":38},[28,142974,142975],{"class":30,"line":124},[28,142976,1830],{"class":38},[14,142978,142868],{},[18,142980,142983],{"className":142981,"code":142982,"language":5449},[5447],"\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",[25,142984,142982],{"__ignoreMap":23},[22260,142986,142988],{"id":142987},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142990,142991],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1727,142993],{"style":126621,"src":142994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[18,142996,142997],{"className":126765,"code":142871,"language":126767,"meta":23,"style":23},[25,142998,142999,143003,143011,143029,143049,143053,143057,143063,143087],{"__ignoreMap":23},[28,143000,143001],{"class":30,"line":31},[28,143002,142878],{"class":87},[28,143004,143005,143007,143009],{"class":30,"line":48},[28,143006,142883],{"class":34},[28,143008,142886],{"class":5478},[28,143010,15834],{"class":38},[28,143012,143013,143015,143017,143019,143021,143023,143025,143027],{"class":30,"line":84},[28,143014,142893],{"class":2225},[28,143016,80063],{"class":38},[28,143018,48390],{"class":60},[28,143020,51693],{"class":38},[28,143022,142902],{"class":60},[28,143024,413],{"class":38},[28,143026,244],{"class":60},[28,143028,142909],{"class":38},[28,143030,143031,143033,143035,143037,143039,143041,143043,143045,143047],{"class":30,"line":91},[28,143032,142914],{"class":2225},[28,143034,80063],{"class":38},[28,143036,48390],{"class":60},[28,143038,51693],{"class":38},[28,143040,142902],{"class":60},[28,143042,413],{"class":38},[28,143044,713],{"class":60},[28,143046,51748],{"class":34},[28,143048,142909],{"class":38},[28,143050,143051],{"class":30,"line":97},[28,143052,1830],{"class":38},[28,143054,143055],{"class":30,"line":103},[28,143056,142939],{"class":87},[28,143058,143059,143061],{"class":30,"line":109},[28,143060,51867],{"class":51556},[28,143062,15834],{"class":38},[28,143064,143065,143067,143069,143071,143073,143075,143077,143079,143081,143083,143085],{"class":30,"line":118},[28,143066,142950],{"class":60},[28,143068,51693],{"class":38},[28,143070,135451],{"class":60},[28,143072,25381],{"class":60},[28,143074,1093],{"class":34},[28,143076,78936],{"class":60},[28,143078,4355],{"class":60},[28,143080,1093],{"class":34},[28,143082,142967],{"class":60},[28,143084,142970],{"class":60},[28,143086,1558],{"class":38},[28,143088,143089],{"class":30,"line":124},[28,143090,1830],{"class":38},[14,143092,143093],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[380,143095,143097],{"id":143096},"_1823-知识点回顾","18.2.3 知识点回顾",[18,143099,143100],{"className":126765,"code":128934,"language":126767,"meta":23,"style":23},[25,143101,143102,143108,143118],{"__ignoreMap":23},[28,143103,143104,143106],{"class":30,"line":31},[28,143105,51867],{"class":51556},[28,143107,15834],{"class":38},[28,143109,143110,143112,143114,143116],{"class":30,"line":48},[28,143111,128947],{"class":60},[28,143113,51693],{"class":38},[28,143115,61992],{"class":60},[28,143117,1558],{"class":38},[28,143119,143120],{"class":30,"line":84},[28,143121,1830],{"class":38},[351,143123,143125],{"id":143124},"_183-3d-转换","18.3 3D 转换",[14,143127,143128],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[380,143130,143132],{"id":143131},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1727,143134],{"style":126621,"src":143135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[380,143137,143139],{"id":143138},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1727,143141],{"style":126621,"src":143142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143144,143145],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143147,143148],{},"translate3d的效果需要搭配透视perspective来使用",[1727,143150],{"style":126621,"src":143151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[380,143153,143155],{"id":143154},"_1833-透视-perspective","18.3.3 透视 perspective",[1727,143157],{"style":126621,"src":143158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143160,143161],{},"透视写在父盒子上，单位为像素",[380,143163,143165],{"id":143164},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22260,143167,143169],{"id":143168},"_18341-分开解释","18.3.4.1 分开解释",[1727,143171],{"style":126621,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1727,143174],{"style":126621,"src":143175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1727,143177],{"style":126621,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143180,143181],{},"总结来说就是左手原则",[22260,143183,143185],{"id":143184},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1727,143187],{"style":126621,"src":143188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[380,143190,143192],{"id":143191},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1727,143194],{"style":126621,"src":143195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1727,143197],{"style":126621,"src":143198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[18,143200,143202],{"className":126765,"code":143201,"language":126767,"meta":23,"style":23},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[25,143203,143204,143210,143223,143240],{"__ignoreMap":23},[28,143205,143206,143208],{"class":30,"line":31},[28,143207,51867],{"class":51556},[28,143209,15834],{"class":38},[28,143211,143212,143215,143217,143219,143221],{"class":30,"line":48},[28,143213,143214],{"class":60},"  perspective",[28,143216,51693],{"class":38},[28,143218,65330],{"class":60},[28,143220,51748],{"class":34},[28,143222,1558],{"class":38},[28,143224,143225,143227,143229,143232,143234,143236,143238],{"class":30,"line":84},[28,143226,136749],{"class":60},[28,143228,51693],{"class":38},[28,143230,143231],{"class":60},"rotateX",[28,143233,413],{"class":38},[28,143235,927],{"class":60},[28,143237,142592],{"class":34},[28,143239,2981],{"class":38},[28,143241,143242],{"class":30,"line":91},[28,143243,1830],{"class":38},[380,143245,143247],{"id":143246},"_1836-案例","18.3.6 案例",[22260,143249,143251],{"id":143250},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1727,143253],{"style":126621,"src":143254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1727,143256],{"style":126621,"src":143257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1727,143259],{"style":126621,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[18,143262,143264],{"className":126765,"code":143263,"language":126767,"meta":23,"style":23},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[25,143265,143266,143271,143277,143289],{"__ignoreMap":23},[28,143267,143268],{"class":30,"line":31},[28,143269,143270],{"class":87},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[28,143272,143273,143275],{"class":30,"line":48},[28,143274,133762],{"class":2225},[28,143276,15834],{"class":38},[28,143278,143279,143281,143283,143285,143287],{"class":30,"line":84},[28,143280,143214],{"class":60},[28,143282,51693],{"class":38},[28,143284,65330],{"class":60},[28,143286,51748],{"class":34},[28,143288,1558],{"class":38},[28,143290,143291],{"class":30,"line":91},[28,143292,1830],{"class":38},[22260,143294,143296],{"id":143295},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1727,143298],{"style":126621,"src":143299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[18,143301,143302],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,143303,143304,143308,143322,143326],{"__ignoreMap":23},[28,143305,143306],{"class":30,"line":31},[28,143307,130876],{"class":87},[28,143309,143310,143312,143314,143316,143318,143320],{"class":30,"line":48},[28,143311,1307],{"class":38},[28,143313,51867],{"class":51556},[28,143315,53742],{"class":2225},[28,143317,54],{"class":38},[28,143319,130889],{"class":127},[28,143321,51563],{"class":38},[28,143323,143324],{"class":30,"line":84},[28,143325,130896],{"class":38},[28,143327,143328,143330,143332],{"class":30,"line":91},[28,143329,52041],{"class":38},[28,143331,51867],{"class":51556},[28,143333,51563],{"class":38},[22260,143335,143337],{"id":143336},"_18363-旋转木马","18.3.6.3 旋转木马",[1727,143339],{"style":126621,"src":143340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[18,143342,143343],{"className":126765,"code":142568,"language":126767,"meta":23,"style":23},[25,143344,143345,143351,143367],{"__ignoreMap":23},[28,143346,143347,143349],{"class":30,"line":31},[28,143348,51867],{"class":51556},[28,143350,15834],{"class":38},[28,143352,143353,143355,143357,143359,143361,143363,143365],{"class":30,"line":48},[28,143354,136749],{"class":60},[28,143356,51693],{"class":38},[28,143358,142585],{"class":60},[28,143360,413],{"class":38},[28,143362,927],{"class":60},[28,143364,142592],{"class":34},[28,143366,2981],{"class":38},[28,143368,143369],{"class":30,"line":84},[28,143370,1830],{"class":38},[328,143372,143373],{},"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":23,"searchDepth":48,"depth":48,"links":143375},[143376,143383],{"id":142471,"depth":48,"text":142472,"children":143377},[143378,143379,143380,143381,143382],{"id":142495,"depth":84,"text":142496},{"id":142550,"depth":84,"text":142551},{"id":142675,"depth":84,"text":142676},{"id":142778,"depth":84,"text":142779},{"id":143096,"depth":84,"text":143097},{"id":143124,"depth":48,"text":143125,"children":143384},[143385,143386,143387,143388,143389,143390],{"id":143131,"depth":84,"text":143132},{"id":143138,"depth":84,"text":143139},{"id":143154,"depth":84,"text":143155},{"id":143164,"depth":84,"text":143165},{"id":143191,"depth":84,"text":143192},{"id":143246,"depth":84,"text":143247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142463,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143397,"title":143398,"body":143399,"description":333,"extension":334,"meta":143602,"navigation":336,"path":143603,"seo":143604,"stem":143605,"__hash__":143606},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143400,"toc":143591},[143401,143404,143408,143411,143414,143418,143421,143424,143427,143431,143434,143438,143441,143445,143448,143452,143466,143470,143495,143498,143501,143518,143522,143526,143529,143532,143536,143539,143542,143560,143564,143567,143581,143585,143588],[10,143402,143398],{"id":143403},"_19-移动端基础-前缀现状与视口",[351,143405,143407],{"id":143406},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1727,143409],{"style":126621,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143412,143413],{},"意思就是加个前缀，增加兼容性",[351,143415,143417],{"id":143416},"_192-移动端现状认识","19.2 移动端现状认识",[1727,143419],{"style":126621,"src":143420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143422,143423],{},"调试方法：",[1727,143425],{"style":126621,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[351,143428,143430],{"id":143429},"_193-视口","19.3 视口",[14,143432,143433],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[380,143435,143437],{"id":143436},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1727,143439],{"style":126621,"src":143440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[380,143442,143444],{"id":143443},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1727,143446],{"style":126621,"src":143447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[380,143449,143451],{"id":143450},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1404,143453,143454,143457,143460,143463],{},[366,143455,143456],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[366,143458,143459],{},"理想视口，对设备来讲，是最理想的视口尺寸",[366,143461,143462],{},"需要手动添写meta视口标签通知浏览器操作",[366,143464,143465],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[380,143467,143469],{"id":143468},"_1934-meta视口标签","19.3.4 meta视口标签",[18,143471,143473],{"className":127512,"code":143472,"language":127514,"meta":23,"style":23},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[25,143474,143475],{"__ignoreMap":23},[28,143476,143477,143479,143481,143483,143485,143487,143489,143491,143493],{"class":30,"line":31},[28,143478,1307],{"class":38},[28,143480,51600],{"class":51556},[28,143482,15182],{"class":2225},[28,143484,54],{"class":38},[28,143486,51647],{"class":127},[28,143488,51627],{"class":2225},[28,143490,54],{"class":38},[28,143492,51654],{"class":127},[28,143494,51563],{"class":38},[1727,143496],{"style":126621,"src":143497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143499,143500],{},"标准视口设置：",[363,143502,143503,143506,143509,143512,143515],{},[366,143504,143505],{},"视口宽度和设备保持一致",[366,143507,143508],{},"视口的默认缩放比例1.0",[366,143510,143511],{},"不允许用户自行缩放",[366,143513,143514],{},"最大允许的缩放比例1.0",[366,143516,143517],{},"最小允许的缩放比例1.0",[380,143519,143521],{"id":143520},"_1935-二倍图","19.3.5 二倍图",[22260,143523,143525],{"id":143524},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1727,143527],{"style":126621,"src":143528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1727,143530],{"style":126621,"src":143531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22260,143533,143535],{"id":143534},"_19352-多倍图","19.3.5.2 多倍图",[1727,143537],{"style":126621,"src":143538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143540,143541],{},"二倍图法，代码如下：",[18,143543,143545],{"className":126765,"code":143544,"language":126767,"meta":23,"style":23},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[25,143546,143547,143552],{"__ignoreMap":23},[28,143548,143549],{"class":30,"line":31},[28,143550,143551],{"class":87},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[28,143553,143554,143557],{"class":30,"line":48},[28,143555,143556],{"class":51556},"background-size",[28,143558,143559],{"class":38},": 50% 50%;\n",[22260,143561,143563],{"id":143562},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1727,143565],{"style":126621,"src":143566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[363,143568,143569,143572,143575,143578],{},[366,143570,143571],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[366,143573,143574],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[366,143576,143577],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[366,143579,143580],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22260,143582,143584],{"id":143583},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1727,143586],{"style":126621,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[328,143589,143590],{},"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":23,"searchDepth":48,"depth":48,"links":143592},[143593,143594,143595],{"id":143406,"depth":48,"text":143407},{"id":143416,"depth":48,"text":143417},{"id":143429,"depth":48,"text":143430,"children":143596},[143597,143598,143599,143600,143601],{"id":143436,"depth":84,"text":143437},{"id":143443,"depth":84,"text":143444},{"id":143450,"depth":84,"text":143451},{"id":143468,"depth":84,"text":143469},{"id":143520,"depth":84,"text":143521},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143398,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143608,"title":143609,"body":143610,"description":333,"extension":334,"meta":144487,"navigation":336,"path":144488,"seo":144489,"stem":144490,"__hash__":144491},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143611,"toc":144471},[143612,143615,143619,143626,143629,143636,143639,143644,143647,143651,143655,143662,143665,143668,143672,143675,143678,143681,143684,143687,143691,143694,143698,143700,143703,143706,143709,143712,143714,143717,143719,143749,143751,143781,143785,143788,143792,143795,143812,143815,143818,143894,143896,143899,143902,143905,143908,143910,143913,143916,143920,143942,143945,143948,143952,143955,143961,143964,143968,143971,143974,143978,143981,143984,143987,143991,143994,143997,144000,144003,144007,144010,144014,144021,144024,144027,144030,144033,144043,144046,144049,144056,144059,144063,144066,144069,144073,144076,144079,144082,144127,144130,144133,144136,144138,144267,144269,144307,144310,144313,144315,144433,144435,144469],[10,143613,143609],{"id":143614},"_20-移动端布局实战上篇",[351,143616,143618],{"id":143617},"_201-移动端主流方案","20.1 移动端主流方案",[363,143620,143621],{},[366,143622,143623],{},[555,143624,143625],{},"单独移动端页面（主流）",[1727,143627],{"style":126621,"src":143628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[363,143630,143631],{"start":48},[366,143632,143633],{},[555,143634,143635],{},"响应式兼容PC移动端",[1727,143637],{"style":126621,"src":143638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[363,143640,143641],{"start":84},[366,143642,143643],{},"两种页面选型布局方式",[1727,143645],{"style":126621,"src":143646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[351,143648,143650],{"id":143649},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[380,143652,143654],{"id":143653},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143656,143657,143658],{},"官网地址： ",[51,143659,143660],{"href":143660,"rel":143661},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24127],[1727,143663],{"style":126621,"src":143664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1727,143666],{"style":126621,"src":143667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[380,143669,143671],{"id":143670},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1727,143673],{"style":126621,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1727,143676],{"style":126621,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143679,143680],{},"去除高亮：",[14,143682,143683],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143685,143686],{},"-webkit- tap-highlight-color: transparent;",[351,143688,143690],{"id":143689},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1727,143692],{"style":126621,"src":143693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[351,143695,143697],{"id":143696},"_204-流式布局案例","20.4 流式布局案例",[14,143699,441],{},[14,143701,143702],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143704,143705],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143707,143708],{},"图片格式：",[1727,143710],{"style":126621,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143713,135808],{},[1727,143715],{"style":126621,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143718,140135],{},[18,143720,143721],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,143722,143723],{"__ignoreMap":23},[28,143724,143725,143727,143729,143731,143733,143735,143737,143739,143741,143743,143745,143747],{"class":30,"line":31},[28,143726,1307],{"class":38},[28,143728,1727],{"class":51556},[28,143730,55495],{"class":2225},[28,143732,54],{"class":38},[28,143734,134282],{"class":127},[28,143736,55503],{"class":2225},[28,143738,54],{"class":38},[28,143740,134289],{"class":127},[28,143742,134292],{"class":2225},[28,143744,54],{"class":38},[28,143746,134297],{"class":127},[28,143748,51563],{"class":38},[14,143750,140224],{},[18,143752,143753],{"className":127512,"code":134267,"language":127514,"meta":23,"style":23},[25,143754,143755],{"__ignoreMap":23},[28,143756,143757,143759,143761,143763,143765,143767,143769,143771,143773,143775,143777,143779],{"class":30,"line":31},[28,143758,1307],{"class":38},[28,143760,1727],{"class":51556},[28,143762,55495],{"class":2225},[28,143764,54],{"class":38},[28,143766,134282],{"class":127},[28,143768,55503],{"class":2225},[28,143770,54],{"class":38},[28,143772,134289],{"class":127},[28,143774,134292],{"class":2225},[28,143776,54],{"class":38},[28,143778,134297],{"class":127},[28,143780,51563],{"class":38},[351,143782,143784],{"id":143783},"_205-flex布局","20.5 flex布局",[1727,143786],{"style":126621,"src":143787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[380,143789,143791],{"id":143790},"_2051-布局原理","20.5.1 布局原理",[14,143793,143794],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1404,143796,143797,143800,143803,143806,143809],{},[366,143798,143799],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[366,143801,143802],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[366,143804,143805],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[366,143807,143808],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[366,143810,143811],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143813,143814],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143816,143817],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[18,143819,143821],{"className":126765,"code":143820,"language":126767,"meta":23,"style":23},"\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",[25,143822,143823,143828,143835,143845,143857,143868,143879,143890],{"__ignoreMap":23},[28,143824,143825],{"class":30,"line":31},[28,143826,143827],{"class":87},"\u002F* Flex 弹性布局 *\u002F\n",[28,143829,143830,143833],{"class":30,"line":48},[28,143831,143832],{"class":2225},".container",[28,143834,15834],{"class":38},[28,143836,143837,143839,143841,143843],{"class":30,"line":84},[28,143838,128381],{"class":60},[28,143840,51693],{"class":38},[28,143842,51733],{"class":60},[28,143844,1558],{"class":38},[28,143846,143847,143850,143852,143855],{"class":30,"line":91},[28,143848,143849],{"class":60},"  flex-direction",[28,143851,51693],{"class":38},[28,143853,143854],{"class":60},"row",[28,143856,1558],{"class":38},[28,143858,143859,143862,143864,143866],{"class":30,"line":97},[28,143860,143861],{"class":60},"  justify-content",[28,143863,51693],{"class":38},[28,143865,51924],{"class":60},[28,143867,1558],{"class":38},[28,143869,143870,143873,143875,143877],{"class":30,"line":103},[28,143871,143872],{"class":60},"  align-items",[28,143874,51693],{"class":38},[28,143876,51848],{"class":60},[28,143878,1558],{"class":38},[28,143880,143881,143884,143886,143888],{"class":30,"line":109},[28,143882,143883],{"class":60},"  flex-wrap",[28,143885,51693],{"class":38},[28,143887,78866],{"class":60},[28,143889,1558],{"class":38},[28,143891,143892],{"class":30,"line":118},[28,143893,1830],{"class":38},[14,143895,70709],{},[14,143897,143898],{},".form-item .male-label {",[14,143900,143901],{},"   margin-right: 20px;",[14,143903,143904],{},"   display: inline-flex;",[14,143906,143907],{},"   align-items: center;",[14,143909,1343],{},[1727,143911],{"style":126621,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1727,143914],{"style":126621,"src":143915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[380,143917,143919],{"id":143918},"_2052-常见父项属性","20.5.2 常见父项属性",[363,143921,143922,143925,143928,143931,143934,143937,143940],{},[366,143923,143924],{},"flex-direction：设置主轴的方向",[366,143926,143927],{},"justify-content：设置主轴上的子元素排列方式",[366,143929,143930],{},"flex-wrap：设置子元素是否换行",[366,143932,143933],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[366,143935,143936],{},"align-items：设置侧轴上的子元素排列方式（单行）",[366,143938,143939],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[366,143941,143924],{},[1727,143943],{"style":126621,"src":143944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1727,143946],{"style":126621,"src":143947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[363,143949,143950],{"start":48},[366,143951,143927],{},[1727,143953],{"style":126621,"src":143954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143956,143957,143960],{},[25,143958,143959],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143962,143963],{},"跟着主轴走",[363,143965,143966],{"start":84},[366,143967,143930],{},[1727,143969],{"style":126621,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143972,143973],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[363,143975,143976],{"start":91},[366,143977,143933],{},[1727,143979],{"style":126621,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143982,143983],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143985,143986],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[363,143988,143989],{"start":97},[366,143990,143936],{},[1727,143992],{"style":126621,"src":143993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143995,143996],{},"align-items与align-content之间的区别：",[14,143998,143999],{},"单找items，多找content",[1727,144001],{"style":126621,"src":144002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[363,144004,144005],{"start":103},[366,144006,143939],{},[1727,144008],{"style":126621,"src":144009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[380,144011,144013],{"id":144012},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[363,144015,144016],{},[366,144017,144018],{},[555,144019,144020],{},"flex 属性",[14,144022,144023],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1727,144025],{"style":126621,"src":144026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144028,144029],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144031,144032],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[363,144034,144035],{"start":48},[366,144036,144037,14057,144040],{},[555,144038,144039],{},"align-self",[555,144041,144042],{},"控制子项自己在侧轴上的排列方式",[1727,144044],{"style":126621,"src":144045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144047,144048],{},"单个子盒子在父盒子侧轴上的排列方式",[363,144050,144051],{"start":84},[366,144052,144053,144055],{},[555,144054,95549],{}," 属性定义项目的排列顺序",[1727,144057],{"style":126621,"src":144058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[380,144060,144062],{"id":144061},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1727,144064],{"style":126621,"src":144065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144067,144068],{},"必须要添加浏览器的私有前缀",[380,144070,144072],{"id":144071},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144074,144075],{},"学到最重要的知识：",[14,144077,144078],{},"flex处理这样的布局思路",[1727,144080],{"style":126621,"src":144081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[18,144083,144085],{"className":126765,"code":144084,"language":126767,"meta":23,"style":23},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[25,144086,144087,144093,144103,144113,144123],{"__ignoreMap":23},[28,144088,144089,144091],{"class":30,"line":31},[28,144090,143832],{"class":2225},[28,144092,15834],{"class":38},[28,144094,144095,144097,144099,144101],{"class":30,"line":48},[28,144096,128381],{"class":60},[28,144098,51693],{"class":38},[28,144100,51733],{"class":60},[28,144102,1558],{"class":38},[28,144104,144105,144107,144109,144111],{"class":30,"line":84},[28,144106,143861],{"class":60},[28,144108,51693],{"class":38},[28,144110,51848],{"class":60},[28,144112,1558],{"class":38},[28,144114,144115,144117,144119,144121],{"class":30,"line":91},[28,144116,143872],{"class":60},[28,144118,51693],{"class":38},[28,144120,51848],{"class":60},[28,144122,1558],{"class":38},[28,144124,144125],{"class":30,"line":97},[28,144126,1830],{"class":38},[14,144128,144129],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144131,144132],{},"使用属性选择器",[1727,144134],{"style":126621,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144137,69145],{},[18,144139,144141],{"className":127512,"code":144140,"language":127514,"meta":23,"style":23},"\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",[25,144142,144143,144148,144162,144167,144187,144192,144211,144216,144235,144240,144259],{"__ignoreMap":23},[28,144144,144145],{"class":30,"line":31},[28,144146,144147],{"class":87},"\u003C!-- 携程网移动端案例结构 -->\n",[28,144149,144150,144152,144154,144156,144158,144160],{"class":30,"line":48},[28,144151,1307],{"class":38},[28,144153,51867],{"class":51556},[28,144155,53742],{"class":2225},[28,144157,54],{"class":38},[28,144159,92579],{"class":127},[28,144161,51563],{"class":38},[28,144163,144164],{"class":30,"line":84},[28,144165,144166],{"class":87},"  \u003C!-- 搜索栏 -->\n",[28,144168,144169,144171,144173,144175,144177,144180,144183,144185],{"class":30,"line":91},[28,144170,52400],{"class":38},[28,144172,51867],{"class":51556},[28,144174,53742],{"class":2225},[28,144176,54],{"class":38},[28,144178,144179],{"class":127},"\"search-index\"",[28,144181,144182],{"class":38},">...\u003C\u002F",[28,144184,51867],{"class":51556},[28,144186,51563],{"class":38},[28,144188,144189],{"class":30,"line":97},[28,144190,144191],{"class":87},"  \u003C!-- 焦点图 -->\n",[28,144193,144194,144196,144198,144200,144202,144205,144207,144209],{"class":30,"line":103},[28,144195,52400],{"class":38},[28,144197,51867],{"class":51556},[28,144199,53742],{"class":2225},[28,144201,54],{"class":38},[28,144203,144204],{"class":127},"\"focus\"",[28,144206,144182],{"class":38},[28,144208,51867],{"class":51556},[28,144210,51563],{"class":38},[28,144212,144213],{"class":30,"line":109},[28,144214,144215],{"class":87},"  \u003C!-- 主导航 -->\n",[28,144217,144218,144220,144222,144224,144226,144229,144231,144233],{"class":30,"line":118},[28,144219,52400],{"class":38},[28,144221,51867],{"class":51556},[28,144223,53742],{"class":2225},[28,144225,54],{"class":38},[28,144227,144228],{"class":127},"\"local-nav\"",[28,144230,144182],{"class":38},[28,144232,51867],{"class":51556},[28,144234,51563],{"class":38},[28,144236,144237],{"class":30,"line":124},[28,144238,144239],{"class":87},"  \u003C!-- 子导航 -->\n",[28,144241,144242,144244,144246,144248,144250,144253,144255,144257],{"class":30,"line":131},[28,144243,52400],{"class":38},[28,144245,51867],{"class":51556},[28,144247,53742],{"class":2225},[28,144249,54],{"class":38},[28,144251,144252],{"class":127},"\"nav-common\"",[28,144254,144182],{"class":38},[28,144256,51867],{"class":51556},[28,144258,51563],{"class":38},[28,144260,144261,144263,144265],{"class":30,"line":137},[28,144262,52041],{"class":38},[28,144264,51867],{"class":51556},[28,144266,51563],{"class":38},[14,144268,70709],{},[18,144270,144271],{"className":126765,"code":137217,"language":126767,"meta":23,"style":23},[25,144272,144273,144287,144303],{"__ignoreMap":23},[28,144274,144275,144277,144279,144281,144283,144285],{"class":30,"line":31},[28,144276,54077],{"class":51556},[28,144278,1287],{"class":38},[28,144280,103320],{"class":2225},[28,144282,54],{"class":34},[28,144284,62955],{"class":127},[28,144286,137234],{"class":38},[28,144288,144289,144291,144293,144295,144297,144299,144301],{"class":30,"line":48},[28,144290,71152],{"class":60},[28,144292,51693],{"class":38},[28,144294,61],{"class":60},[28,144296,51748],{"class":34},[28,144298,51777],{"class":60},[28,144300,130345],{"class":60},[28,144302,1558],{"class":38},[28,144304,144305],{"class":30,"line":84},[28,144306,1830],{"class":38},[14,144308,144309],{},"总代码和效果展示：",[1727,144311],{"style":126621,"src":144312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144314,69145],{},[18,144316,144317],{"className":127512,"code":144140,"language":127514,"meta":23,"style":23},[25,144318,144319,144323,144337,144341,144359,144363,144381,144385,144403,144407,144425],{"__ignoreMap":23},[28,144320,144321],{"class":30,"line":31},[28,144322,144147],{"class":87},[28,144324,144325,144327,144329,144331,144333,144335],{"class":30,"line":48},[28,144326,1307],{"class":38},[28,144328,51867],{"class":51556},[28,144330,53742],{"class":2225},[28,144332,54],{"class":38},[28,144334,92579],{"class":127},[28,144336,51563],{"class":38},[28,144338,144339],{"class":30,"line":84},[28,144340,144166],{"class":87},[28,144342,144343,144345,144347,144349,144351,144353,144355,144357],{"class":30,"line":91},[28,144344,52400],{"class":38},[28,144346,51867],{"class":51556},[28,144348,53742],{"class":2225},[28,144350,54],{"class":38},[28,144352,144179],{"class":127},[28,144354,144182],{"class":38},[28,144356,51867],{"class":51556},[28,144358,51563],{"class":38},[28,144360,144361],{"class":30,"line":97},[28,144362,144191],{"class":87},[28,144364,144365,144367,144369,144371,144373,144375,144377,144379],{"class":30,"line":103},[28,144366,52400],{"class":38},[28,144368,51867],{"class":51556},[28,144370,53742],{"class":2225},[28,144372,54],{"class":38},[28,144374,144204],{"class":127},[28,144376,144182],{"class":38},[28,144378,51867],{"class":51556},[28,144380,51563],{"class":38},[28,144382,144383],{"class":30,"line":109},[28,144384,144215],{"class":87},[28,144386,144387,144389,144391,144393,144395,144397,144399,144401],{"class":30,"line":118},[28,144388,52400],{"class":38},[28,144390,51867],{"class":51556},[28,144392,53742],{"class":2225},[28,144394,54],{"class":38},[28,144396,144228],{"class":127},[28,144398,144182],{"class":38},[28,144400,51867],{"class":51556},[28,144402,51563],{"class":38},[28,144404,144405],{"class":30,"line":124},[28,144406,144239],{"class":87},[28,144408,144409,144411,144413,144415,144417,144419,144421,144423],{"class":30,"line":131},[28,144410,52400],{"class":38},[28,144412,51867],{"class":51556},[28,144414,53742],{"class":2225},[28,144416,54],{"class":38},[28,144418,144252],{"class":127},[28,144420,144182],{"class":38},[28,144422,51867],{"class":51556},[28,144424,51563],{"class":38},[28,144426,144427,144429,144431],{"class":30,"line":137},[28,144428,52041],{"class":38},[28,144430,51867],{"class":51556},[28,144432,51563],{"class":38},[14,144434,70709],{},[18,144436,144437],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,144438,144439,144443,144457,144461],{"__ignoreMap":23},[28,144440,144441],{"class":30,"line":31},[28,144442,130876],{"class":87},[28,144444,144445,144447,144449,144451,144453,144455],{"class":30,"line":48},[28,144446,1307],{"class":38},[28,144448,51867],{"class":51556},[28,144450,53742],{"class":2225},[28,144452,54],{"class":38},[28,144454,130889],{"class":127},[28,144456,51563],{"class":38},[28,144458,144459],{"class":30,"line":84},[28,144460,130896],{"class":38},[28,144462,144463,144465,144467],{"class":30,"line":91},[28,144464,52041],{"class":38},[28,144466,51867],{"class":51556},[28,144468,51563],{"class":38},[328,144470,138166],{},{"title":23,"searchDepth":48,"depth":48,"links":144472},[144473,144474,144478,144479,144480],{"id":143617,"depth":48,"text":143618},{"id":143649,"depth":48,"text":143650,"children":144475},[144476,144477],{"id":143653,"depth":84,"text":143654},{"id":143670,"depth":84,"text":143671},{"id":143689,"depth":48,"text":143690},{"id":143696,"depth":48,"text":143697},{"id":143783,"depth":48,"text":143784,"children":144481},[144482,144483,144484,144485,144486],{"id":143790,"depth":84,"text":143791},{"id":143918,"depth":84,"text":143919},{"id":144012,"depth":84,"text":144013},{"id":144061,"depth":84,"text":144062},{"id":144071,"depth":84,"text":144072},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143609,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144493,"title":144494,"body":144495,"description":333,"extension":334,"meta":145722,"navigation":336,"path":145723,"seo":145724,"stem":145725,"__hash__":145726},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144496,"toc":145700},[144497,144500,144504,144508,144511,144514,144518,144523,144526,144529,144532,144535,144538,144595,144598,144603,144606,144609,144613,144624,144628,144631,144634,144641,144646,144650,144653,144659,144662,144666,144669,144676,144679,144682,144689,144692,144699,144702,144705,144712,144715,144718,144720,144737,144741,144744,144747,144750,144754,144757,144760,144763,144766,144769,144772,144774,144777,144780,144842,144845,144955,144962,144968,144971,144974,144978,144981,144985,144990,144993,145000,145003,145009,145014,145017,145020,145023,145026,145029,145032,145035,145038,145094,145096,145122,145126,145129,145132,145135,145143,145146,145149,145153,145209,145212,145216,145222,145233,145236,145241,145244,145247,145253,145256,145259,145262,145265,145268,145271,145274,145277,145302,145308,145311,145314,145317,145320,145323,145326,145331,145334,145337,145340,145348,145351,145358,145361,145364,145366,145390,145392,145395,145398,145401,145404,145407,145410,145413,145447,145450,145453,145487,145494,145497,145500,145503,145506,145509,145512,145519,145522,145525,145528,145531,145538,145541,145544,145551,145554,145557,145561,145564,145567,145570,145573,145576,145579,145582,145585,145587,145611,145613,145637,145641,145652,145655,145658,145661,145664,145667,145670,145673,145676,145679,145682,145685,145688,145691,145694,145697],[10,144498,144494],{"id":144499},"_21-移动端布局实战下篇",[351,144501,144503],{"id":144502},"_211-rem适配布局","21.1 rem适配布局",[380,144505,144507],{"id":144506},"_2111-rem单位","21.1.1 rem单位",[1727,144509],{"style":126621,"src":144510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144512,144513],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[380,144515,144517],{"id":144516},"_2112-媒体查询","21.1.2 媒体查询",[363,144519,144520],{},[366,144521,144522],{},"参数介绍",[1727,144524],{"style":126621,"src":144525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1727,144527],{"style":126621,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1727,144530],{"style":126621,"src":144531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1727,144533],{"style":126621,"src":144534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1727,144536],{"style":126621,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[18,144539,144541],{"className":126765,"code":144540,"language":126767,"meta":23,"style":23},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[25,144542,144543,144548,144567,144574,144587,144591],{"__ignoreMap":23},[28,144544,144545],{"class":30,"line":31},[28,144546,144547],{"class":87},"\u002F* 媒体查询 *\u002F\n",[28,144549,144550,144553,144555,144558,144560,144563,144565],{"class":30,"line":48},[28,144551,144552],{"class":34},"@media",[28,144554,1920],{"class":38},[28,144556,144557],{"class":60},"max-width",[28,144559,51693],{"class":38},[28,144561,144562],{"class":60},"768",[28,144564,51748],{"class":34},[28,144566,12704],{"class":38},[28,144568,144569,144572],{"class":30,"line":84},[28,144570,144571],{"class":2225},"  .container",[28,144573,15834],{"class":38},[28,144575,144576,144579,144581,144583,144585],{"class":30,"line":91},[28,144577,144578],{"class":60},"    width",[28,144580,51693],{"class":38},[28,144582,713],{"class":60},[28,144584,729],{"class":34},[28,144586,1558],{"class":38},[28,144588,144589],{"class":30,"line":97},[28,144590,127561],{"class":38},[28,144592,144593],{"class":30,"line":103},[28,144594,1830],{"class":38},[14,144596,144597],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[363,144599,144600],{"start":48},[366,144601,144602],{},"引入资源",[1727,144604],{"style":126621,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144607,144608],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[380,144610,144612],{"id":144611},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1404,144614,144615,144618,144621],{},[366,144616,144617],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[366,144619,144620],{},"媒体查询可以根据不同设备宽度来修改样式",[366,144622,144623],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[351,144625,144627],{"id":144626},"_212-less基础","21.2 Less基础",[14,144629,144630],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144632,144633],{},"Less可以解决该问题，它是css的扩展语言",[14,144635,144636,144637],{},"Less中文网址： ",[51,144638,144639],{"href":144639,"rel":144640},"http:\u002F\u002Flesscss.cn\u002F",[24127],[14,144642,144643],{},[555,144644,144645],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[380,144647,144649],{"id":144648},"_2121-less安装","21.2.1 less安装",[14,144651,144652],{},"如果使用vscode，则无需进行下方安装步骤",[14,144654,144655],{},[51,144656,144657],{"href":144657,"rel":144658},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24127],[1727,144660],{"style":126621,"src":144661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[380,144663,144665],{"id":144664},"_2122-less使用","21.2.2 less使用",[14,144667,144668],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[363,144670,144671],{},[366,144672,144673],{},[555,144674,144675],{},"Less 变量",[1727,144677],{"style":126621,"src":144678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1727,144680],{"style":126621,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[363,144683,144684],{"start":48},[366,144685,144686],{},[555,144687,144688],{},"Less 编译",[1727,144690],{"style":126621,"src":144691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[363,144693,144694],{"start":84},[366,144695,144696],{},[555,144697,144698],{},"Less 嵌套",[1727,144700],{"style":126621,"src":144701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1727,144703],{"style":126621,"src":144704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[363,144706,144707],{"start":91},[366,144708,144709],{},[555,144710,144711],{},"Less 运算",[1727,144713],{"style":126621,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144716,144717],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144719,441],{},[1404,144721,144722,144725,144728,144731,144734],{},[366,144723,144724],{},"乘号（*）和除号（\u002F）的写法",[366,144726,144727],{},"运算符中间左右有个空格隔开 1px + 5",[366,144729,144730],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[366,144732,144733],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[366,144735,144736],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[351,144738,144740],{"id":144739},"_213-rem-适配方案","21.3 rem 适配方案",[14,144742,144743],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144745,144746],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1727,144748],{"style":126621,"src":144749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[380,144751,144753],{"id":144752},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144755,144756],{},"rem + 媒体查询 + less 技术",[1727,144758],{"style":126621,"src":144759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144761,144762],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144764,144765],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1727,144767],{"style":126621,"src":144768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144770,144771],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144773,14895],{},[1727,144775],{"style":126621,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144778,144779],{},"index.html:",[18,144781,144783],{"className":126765,"code":144782,"language":126767,"meta":23,"style":23},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[25,144784,144785,144790,144796,144812,144816,144822,144838],{"__ignoreMap":23},[28,144786,144787],{"class":30,"line":31},[28,144788,144789],{"class":87},"\u002F* rem 适配方案 *\u002F\n",[28,144791,144792,144794],{"class":30,"line":48},[28,144793,50891],{"class":51556},[28,144795,15834],{"class":38},[28,144797,144798,144800,144802,144805,144807,144809],{"class":30,"line":84},[28,144799,70882],{"class":60},[28,144801,51693],{"class":38},[28,144803,144804],{"class":60},"62.5",[28,144806,729],{"class":34},[28,144808,130628],{"class":38},[28,144810,144811],{"class":87},"\u002F* 1rem = 10px *\u002F\n",[28,144813,144814],{"class":30,"line":91},[28,144815,1830],{"class":38},[28,144817,144818,144820],{"class":30,"line":97},[28,144819,130613],{"class":2225},[28,144821,15834],{"class":38},[28,144823,144824,144826,144828,144830,144833,144835],{"class":30,"line":103},[28,144825,70824],{"class":60},[28,144827,51693],{"class":38},[28,144829,845],{"class":60},[28,144831,144832],{"class":34},"rem",[28,144834,130628],{"class":38},[28,144836,144837],{"class":87},"\u002F* 100px *\u002F\n",[28,144839,144840],{"class":30,"line":109},[28,144841,1830],{"class":38},[14,144843,144844],{},"common.less",[18,144846,144848],{"className":126765,"code":144847,"language":126767,"meta":23,"style":23},"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",[25,144849,144850,144856,144871,144875,144881,144895,144899,144903,144907,144913,144927,144931,144937,144951],{"__ignoreMap":23},[28,144851,144852,144854],{"class":30,"line":31},[28,144853,50891],{"class":51556},[28,144855,15834],{"class":38},[28,144857,144858,144860,144862,144864,144866,144868],{"class":30,"line":48},[28,144859,70882],{"class":60},[28,144861,51693],{"class":38},[28,144863,144804],{"class":60},[28,144865,729],{"class":34},[28,144867,26330],{"class":38},[28,144869,144870],{"class":87},"\u002F* 10px *\u002F\n",[28,144872,144873],{"class":30,"line":84},[28,144874,1830],{"class":38},[28,144876,144877,144879],{"class":30,"line":91},[28,144878,51867],{"class":51556},[28,144880,15834],{"class":38},[28,144882,144883,144885,144887,144889,144891,144893],{"class":30,"line":97},[28,144884,70824],{"class":60},[28,144886,51693],{"class":38},[28,144888,845],{"class":60},[28,144890,144832],{"class":34},[28,144892,26330],{"class":38},[28,144894,144837],{"class":87},[28,144896,144897],{"class":30,"line":103},[28,144898,1830],{"class":38},[28,144900,144901],{"class":30,"line":109},[28,144902,136226],{"class":38},[28,144904,144905],{"class":30,"line":118},[28,144906,144789],{"class":87},[28,144908,144909,144911],{"class":30,"line":124},[28,144910,50891],{"class":51556},[28,144912,15834],{"class":38},[28,144914,144915,144917,144919,144921,144923,144925],{"class":30,"line":131},[28,144916,70882],{"class":60},[28,144918,51693],{"class":38},[28,144920,144804],{"class":60},[28,144922,729],{"class":34},[28,144924,130628],{"class":38},[28,144926,144811],{"class":87},[28,144928,144929],{"class":30,"line":137},[28,144930,1830],{"class":38},[28,144932,144933,144935],{"class":30,"line":143},[28,144934,130613],{"class":2225},[28,144936,15834],{"class":38},[28,144938,144939,144941,144943,144945,144947,144949],{"class":30,"line":149},[28,144940,70824],{"class":60},[28,144942,51693],{"class":38},[28,144944,845],{"class":60},[28,144946,144832],{"class":34},[28,144948,130628],{"class":38},[28,144950,144837],{"class":87},[28,144952,144953],{"class":30,"line":1890},[28,144954,1830],{"class":38},[14,144956,144957,144958,144961],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23815,144959,144960],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[18,144963,144966],{"className":144964,"code":144965,"language":5449},[5447],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[25,144967,144965],{"__ignoreMap":23},[14,144969,144970],{},"less保存时会自动变成.css文件",[14,144972,144973],{},"好好搞懂上述代码写法",[380,144975,144977],{"id":144976},"_2132-样式导入样式","21.3.2 样式导入样式",[1727,144979],{"style":126621,"src":144980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[380,144982,144984],{"id":144983},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[363,144986,144987],{},[366,144988,144989],{},"准备工作",[1727,144991],{"style":126621,"src":144992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144994,144995,144996],{},"github地址：",[51,144997,144998],{"href":144998,"rel":144999},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24127],[14,145001,145002],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145004,145005,145006],{},"js文件引入到index.html中使用的是",[25,145007,145008],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[363,145010,145011],{"start":48},[366,145012,145013],{},"vscode插件",[1727,145015],{"style":126621,"src":145016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145018,145019],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145021,145022],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1727,145024],{"style":126621,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145027,145028],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1727,145030],{"style":126621,"src":145031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145033,145034],{},"修改成75就可以，alt+z为快捷键",[14,145036,145037],{},"index.css：",[18,145039,145040],{"className":126765,"code":144782,"language":126767,"meta":23,"style":23},[25,145041,145042,145046,145052,145066,145070,145076,145090],{"__ignoreMap":23},[28,145043,145044],{"class":30,"line":31},[28,145045,144789],{"class":87},[28,145047,145048,145050],{"class":30,"line":48},[28,145049,50891],{"class":51556},[28,145051,15834],{"class":38},[28,145053,145054,145056,145058,145060,145062,145064],{"class":30,"line":84},[28,145055,70882],{"class":60},[28,145057,51693],{"class":38},[28,145059,144804],{"class":60},[28,145061,729],{"class":34},[28,145063,130628],{"class":38},[28,145065,144811],{"class":87},[28,145067,145068],{"class":30,"line":91},[28,145069,1830],{"class":38},[28,145071,145072,145074],{"class":30,"line":97},[28,145073,130613],{"class":2225},[28,145075,15834],{"class":38},[28,145077,145078,145080,145082,145084,145086,145088],{"class":30,"line":103},[28,145079,70824],{"class":60},[28,145081,51693],{"class":38},[28,145083,845],{"class":60},[28,145085,144832],{"class":34},[28,145087,130628],{"class":38},[28,145089,144837],{"class":87},[28,145091,145092],{"class":30,"line":109},[28,145093,1830],{"class":38},[14,145095,144779],{},[18,145097,145098],{"className":126765,"code":127169,"language":126767,"meta":23,"style":23},[25,145099,145100,145106,145118],{"__ignoreMap":23},[28,145101,145102,145104],{"class":30,"line":31},[28,145103,52056],{"class":51556},[28,145105,15834],{"class":38},[28,145107,145108,145110,145112,145114,145116],{"class":30,"line":48},[28,145109,70882],{"class":60},[28,145111,51693],{"class":38},[28,145113,999],{"class":60},[28,145115,51748],{"class":34},[28,145117,1558],{"class":38},[28,145119,145120],{"class":30,"line":84},[28,145121,1830],{"class":38},[351,145123,145125],{"id":145124},"_214-响应式开发","21.4 响应式开发",[14,145127,145128],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1727,145130],{"style":126621,"src":145131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145133,145134],{},"做法：",[1404,145136,145137,145140],{},[366,145138,145139],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[366,145141,145142],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1727,145144],{"style":126621,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145147,145148],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[380,145150,145152],{"id":145151},"_2141-简单代码示范","21.4.1 简单代码示范",[18,145154,145155],{"className":126765,"code":144782,"language":126767,"meta":23,"style":23},[25,145156,145157,145161,145167,145181,145185,145191,145205],{"__ignoreMap":23},[28,145158,145159],{"class":30,"line":31},[28,145160,144789],{"class":87},[28,145162,145163,145165],{"class":30,"line":48},[28,145164,50891],{"class":51556},[28,145166,15834],{"class":38},[28,145168,145169,145171,145173,145175,145177,145179],{"class":30,"line":84},[28,145170,70882],{"class":60},[28,145172,51693],{"class":38},[28,145174,144804],{"class":60},[28,145176,729],{"class":34},[28,145178,130628],{"class":38},[28,145180,144811],{"class":87},[28,145182,145183],{"class":30,"line":91},[28,145184,1830],{"class":38},[28,145186,145187,145189],{"class":30,"line":97},[28,145188,130613],{"class":2225},[28,145190,15834],{"class":38},[28,145192,145193,145195,145197,145199,145201,145203],{"class":30,"line":103},[28,145194,70824],{"class":60},[28,145196,51693],{"class":38},[28,145198,845],{"class":60},[28,145200,144832],{"class":34},[28,145202,130628],{"class":38},[28,145204,144837],{"class":87},[28,145206,145207],{"class":30,"line":109},[28,145208,1830],{"class":38},[14,145210,145211],{},"父盒子一般命名为container",[380,145213,145215],{"id":145214},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145217,145218,145219],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[555,145220,145221],{},"使得 Web 开发更加快捷",[1404,145223,145224],{},[366,145225,145226,145227],{},"官网：",[555,145228,145229],{},[51,145230,145231],{"href":145231,"rel":145232},"http:\u002F\u002Fgetbootstrap.com\u002F",[24127],[14,145234,145235],{},"可以直接去官网拿现成的东西",[363,145237,145238],{},[366,145239,145240],{},"Bootstrap的使用",[14,145242,145243],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145245,145246],{},"Bootstrap 使用四步曲：",[14,145248,145249,145252],{},[555,145250,145251],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1727,145254],{"style":126621,"src":145255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145257,145258],{},"打开Bootstrap官网，然后下载",[1727,145260],{"style":126621,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1727,145263],{"style":126621,"src":145264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145266,145267],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145269,145270],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145272,145273],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1727,145275],{"style":126621,"src":145276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[18,145278,145280],{"className":126765,"code":145279,"language":126767,"meta":23,"style":23},".center {\n  color: red;\n}\n",[25,145281,145282,145288,145298],{"__ignoreMap":23},[28,145283,145284,145286],{"class":30,"line":31},[28,145285,127056],{"class":2225},[28,145287,15834],{"class":38},[28,145289,145290,145292,145294,145296],{"class":30,"line":48},[28,145291,71161],{"class":60},[28,145293,51693],{"class":38},[28,145295,57677],{"class":60},[28,145297,1558],{"class":38},[28,145299,145300],{"class":30,"line":84},[28,145301,1830],{"class":38},[14,145303,145304,145307],{},[25,145305,145306],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1727,145309],{"style":126621,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1727,145312],{"style":126621,"src":145313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1727,145315],{"style":126621,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145318,145319],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1727,145321],{"style":126621,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145324,145325],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[363,145327,145328],{"start":48},[366,145329,145330],{},"布局容器",[1727,145332],{"style":126621,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145335,145336],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145338,145339],{},"container-fluid用于移动式布局比较方便",[363,145341,145342],{"start":84},[366,145343,145344,145345],{},"bootstrap ",[555,145346,145347],{},"栅格系统原理",[1727,145349],{"style":126621,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[363,145352,145353],{"start":91},[366,145354,145355],{},[555,145356,145357],{},"栅格选项参数",[1727,145359],{"style":126621,"src":145360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145362,145363],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145365,14895],{},[18,145367,145368],{"className":126765,"code":145279,"language":126767,"meta":23,"style":23},[25,145369,145370,145376,145386],{"__ignoreMap":23},[28,145371,145372,145374],{"class":30,"line":31},[28,145373,127056],{"class":2225},[28,145375,15834],{"class":38},[28,145377,145378,145380,145382,145384],{"class":30,"line":48},[28,145379,71161],{"class":60},[28,145381,51693],{"class":38},[28,145383,57677],{"class":60},[28,145385,1558],{"class":38},[28,145387,145388],{"class":30,"line":84},[28,145389,1830],{"class":38},[14,145391,135808],{},[1727,145393],{"style":126621,"src":145394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145396,145397],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145399,145400],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145402,145403],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145405,145406],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145408,145409],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145411,145412],{},"汇总展示说明：",[18,145414,145415],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,145416,145417,145421,145435,145439],{"__ignoreMap":23},[28,145418,145419],{"class":30,"line":31},[28,145420,130876],{"class":87},[28,145422,145423,145425,145427,145429,145431,145433],{"class":30,"line":48},[28,145424,1307],{"class":38},[28,145426,51867],{"class":51556},[28,145428,53742],{"class":2225},[28,145430,54],{"class":38},[28,145432,130889],{"class":127},[28,145434,51563],{"class":38},[28,145436,145437],{"class":30,"line":84},[28,145438,130896],{"class":38},[28,145440,145441,145443,145445],{"class":30,"line":91},[28,145442,52041],{"class":38},[28,145444,51867],{"class":51556},[28,145446,51563],{"class":38},[1727,145448],{"style":126621,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145451,145452],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[18,145454,145455],{"className":127512,"code":130869,"language":127514,"meta":23,"style":23},[25,145456,145457,145461,145475,145479],{"__ignoreMap":23},[28,145458,145459],{"class":30,"line":31},[28,145460,130876],{"class":87},[28,145462,145463,145465,145467,145469,145471,145473],{"class":30,"line":48},[28,145464,1307],{"class":38},[28,145466,51867],{"class":51556},[28,145468,53742],{"class":2225},[28,145470,54],{"class":38},[28,145472,130889],{"class":127},[28,145474,51563],{"class":38},[28,145476,145477],{"class":30,"line":84},[28,145478,130896],{"class":38},[28,145480,145481,145483,145485],{"class":30,"line":91},[28,145482,52041],{"class":38},[28,145484,51867],{"class":51556},[28,145486,51563],{"class":38},[363,145488,145489],{"start":97},[366,145490,145491],{},[555,145492,145493],{},"列嵌套",[1727,145495],{"style":126621,"src":145496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145498,145499],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145501,145502],{},"没加row内部这样：",[1727,145504],{"style":126621,"src":145505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145507,145508],{},"加上row之后内部为：",[1727,145510],{"style":126621,"src":145511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[363,145513,145514],{"start":103},[366,145515,145516],{},[555,145517,145518],{},"列偏移",[1727,145520],{"style":126621,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145523,145524],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145526,145527],{},"要加偏移量，即偏移份数",[14,145529,145530],{},"偏移的份数=12-两个盒子的份数",[363,145532,145533],{"start":109},[366,145534,145535],{},[555,145536,145537],{},"列排序",[1727,145539],{"style":126621,"src":145540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145542,145543],{},"pull拉左；push推右",[363,145545,145546],{"start":118},[366,145547,145548],{},[555,145549,145550],{},"响应式工具",[1727,145552],{"style":126621,"src":145553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145555,145556],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[380,145558,145560],{"id":145559},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145562,145563],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145565,145566],{},"ul {",[14,145568,145569],{},"list-style: none;",[14,145571,145572],{},"margin:0;",[14,145574,145575],{},"padding:0; }",[1727,145577],{"style":126621,"src":145578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1727,145580],{"style":126621,"src":145581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145583,145584],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145586,69145],{},[18,145588,145589],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,145590,145591,145597,145607],{"__ignoreMap":23},[28,145592,145593,145595],{"class":30,"line":31},[28,145594,130613],{"class":2225},[28,145596,15834],{"class":38},[28,145598,145599,145601,145603,145605],{"class":30,"line":48},[28,145600,131245],{"class":60},[28,145602,51693],{"class":38},[28,145604,23998],{"class":60},[28,145606,1558],{"class":38},[28,145608,145609],{"class":30,"line":84},[28,145610,1830],{"class":38},[14,145612,70709],{},[18,145614,145615],{"className":126765,"code":139435,"language":126767,"meta":23,"style":23},[25,145616,145617,145623,145633],{"__ignoreMap":23},[28,145618,145619,145621],{"class":30,"line":31},[28,145620,130613],{"class":2225},[28,145622,15834],{"class":38},[28,145624,145625,145627,145629,145631],{"class":30,"line":48},[28,145626,131245],{"class":60},[28,145628,51693],{"class":38},[28,145630,23998],{"class":60},[28,145632,1558],{"class":38},[28,145634,145635],{"class":30,"line":84},[28,145636,1830],{"class":38},[351,145638,145640],{"id":145639},"_215-swiper-插件使用","21.5 swiper 插件使用",[1404,145642,145643,145646,145649],{},[366,145644,145645],{},"下载需要的css和js文件html页面中 引入相关文件",[366,145647,145648],{},"官网找到类似案例，复制html结构，css样式 js 语法",[366,145650,145651],{},"根据需求定制修改模块",[1727,145653],{"style":126621,"src":145654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145656,145657],{},"解压后将这两部分放到项目中",[1727,145659],{"style":126621,"src":145660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145662,145663],{},"这个插件可以帮助我们实现轮播图效果",[14,145665,145666],{},"用法：",[1727,145668],{"style":126621,"src":145669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145671,145672],{},"找到自己喜欢的",[1727,145674],{"style":126621,"src":145675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145677,145678],{},"右键，查看网页源代码",[1727,145680],{"style":126621,"src":145681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145683,145684],{},"复制人家的结构内容",[14,145686,145687],{},"然后去看API文档：",[1727,145689],{"style":126621,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145692,145693],{},"可以看看如何修改样式",[14,145695,145696],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[328,145698,145699],{},"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":23,"searchDepth":48,"depth":48,"links":145701},[145702,145707,145711,145716,145721],{"id":144502,"depth":48,"text":144503,"children":145703},[145704,145705,145706],{"id":144506,"depth":84,"text":144507},{"id":144516,"depth":84,"text":144517},{"id":144611,"depth":84,"text":144612},{"id":144626,"depth":48,"text":144627,"children":145708},[145709,145710],{"id":144648,"depth":84,"text":144649},{"id":144664,"depth":84,"text":144665},{"id":144739,"depth":48,"text":144740,"children":145712},[145713,145714,145715],{"id":144752,"depth":84,"text":144753},{"id":144976,"depth":84,"text":144977},{"id":144983,"depth":84,"text":144984},{"id":145124,"depth":48,"text":145125,"children":145717},[145718,145719,145720],{"id":145151,"depth":84,"text":145152},{"id":145214,"depth":84,"text":145215},{"id":145559,"depth":84,"text":145560},{"id":145639,"depth":48,"text":145640},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144494,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145728,"title":145729,"body":145730,"description":333,"extension":334,"meta":145950,"navigation":336,"path":145951,"seo":145952,"stem":145953,"__hash__":145954},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145731,"toc":145946},[145732,145735,145739,145742,145757,145762,145765,145770,145805,145810,145822,145827,145840,145845,145862,145867,145887,145892,145910,145913,145916,145919,145922,145926,145929,145932,145935,145938,145941,145944],[10,145733,145729],{"id":145734},"_22-代码提交与新型相对单位",[351,145736,145738],{"id":145737},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145740,145741],{},"法1：",[363,145743,145744,145751,145754],{},[366,145745,145746,145747],{},"登录网站注册：",[51,145748,145749],{"href":145749,"rel":145750},"https:\u002F\u002Fgitee.com\u002F",[24127],[366,145752,145753],{},"码云创建新的仓库",[366,145755,145756],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1404,145758,145759],{},[366,145760,145761],{},"在网站根目录右键-- Git Bash Here",[1727,145763],{"style":126621,"src":145764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1404,145766,145767],{},[366,145768,145769],{},"如果是第一次利用git提交，请配置好全局选项",[18,145771,145773],{"className":117509,"code":145772,"language":117511,"meta":23,"style":23},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[25,145774,145775,145791],{"__ignoreMap":23},[28,145776,145777,145780,145782,145785,145788],{"class":30,"line":31},[28,145778,145779],{"class":2225},"git",[28,145781,119932],{"class":127},[28,145783,145784],{"class":60}," --global",[28,145786,145787],{"class":127}," user.name",[28,145789,145790],{"class":127}," \"你的名字\"\n",[28,145792,145793,145795,145797,145799,145802],{"class":30,"line":48},[28,145794,145779],{"class":2225},[28,145796,119932],{"class":127},[28,145798,145784],{"class":60},[28,145800,145801],{"class":127}," user.email",[28,145803,145804],{"class":127}," \"你的邮箱\"\n",[1404,145806,145807],{},[366,145808,145809],{},"初始化仓库",[18,145811,145813],{"className":117509,"code":145812,"language":117511,"meta":23,"style":23},"git init\n",[25,145814,145815],{"__ignoreMap":23},[28,145816,145817,145819],{"class":30,"line":31},[28,145818,145779],{"class":2225},[28,145820,145821],{"class":127}," init\n",[1404,145823,145824],{},[366,145825,145826],{},"把本地文件放到暂存区",[18,145828,145830],{"className":117509,"code":145829,"language":117511,"meta":23,"style":23},"git add .\n",[25,145831,145832],{"__ignoreMap":23},[28,145833,145834,145836,145838],{"class":30,"line":31},[28,145835,145779],{"class":2225},[28,145837,5471],{"class":127},[28,145839,29004],{"class":127},[1404,145841,145842],{},[366,145843,145844],{},"把本地文件放到本地仓库里面",[18,145846,145848],{"className":117509,"code":145847,"language":117511,"meta":23,"style":23},"git commit -m \"first commit\"\n",[25,145849,145850],{"__ignoreMap":23},[28,145851,145852,145854,145857,145859],{"class":30,"line":31},[28,145853,145779],{"class":2225},[28,145855,145856],{"class":127}," commit",[28,145858,101095],{"class":60},[28,145860,145861],{"class":127}," \"first commit\"\n",[1404,145863,145864],{},[366,145865,145866],{},"链接远程仓库",[18,145868,145870],{"className":117509,"code":145869,"language":117511,"meta":23,"style":23},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[25,145871,145872],{"__ignoreMap":23},[28,145873,145874,145876,145879,145881,145884],{"class":30,"line":31},[28,145875,145779],{"class":2225},[28,145877,145878],{"class":127}," remote",[28,145880,5471],{"class":127},[28,145882,145883],{"class":127}," origin",[28,145885,145886],{"class":127}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1404,145888,145889],{},[366,145890,145891],{},"把本地仓库的文件推送到远程仓库 push",[18,145893,145895],{"className":117509,"code":145894,"language":117511,"meta":23,"style":23},"git push -u origin master\n",[25,145896,145897],{"__ignoreMap":23},[28,145898,145899,145901,145903,145905,145907],{"class":30,"line":31},[28,145900,145779],{"class":2225},[28,145902,29279],{"class":127},[28,145904,28553],{"class":60},[28,145906,145883],{"class":127},[28,145908,145909],{"class":127}," master\n",[1727,145911],{"style":126621,"src":145912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145914,145915],{},"上方方法暂未实现，后边学完git后在整",[14,145917,145918],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1727,145920],{"style":126621,"src":145921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[351,145923,145925],{"id":145924},"_222-新型相对单位","22.2 新型相对单位",[1727,145927],{"style":126621,"src":145928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1727,145930],{"style":126621,"src":145931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145933,145934],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145936,145937],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1727,145939],{"style":126621,"src":145940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145942,145943],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[328,145945,24220],{},{"title":23,"searchDepth":48,"depth":48,"links":145947},[145948,145949],{"id":145737,"depth":48,"text":145738},{"id":145924,"depth":48,"text":145925},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145729,"description":333},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145956,"title":145957,"body":145958,"description":145962,"extension":334,"meta":145963,"navigation":336,"path":145964,"seo":145965,"stem":145966,"__hash__":145967},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145959,"toc":145960},[],{"title":23,"searchDepth":48,"depth":48,"links":145961},[],"自己正经开始学编程的第一门语言！",{"category":93095},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145957,"description":145962},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145969,"title":145970,"body":145971,"description":333,"extension":334,"meta":147118,"navigation":336,"path":147119,"seo":147120,"stem":147121,"__hash__":147122},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145972,"toc":147094},[145973,145976,145980,145983,145986,146011,146014,146020,146024,146027,146054,146057,146097,146100,146112,146115,146121,146125,146129,146156,146173,146180,146184,146187,146213,146216,146220,146223,146263,146266,146283,146289,146293,146298,146342,146345,146363,146366,146434,146438,146445,146448,146463,146466,146475,146478,146489,146492,146501,146504,146521,146524,146539,146543,146547,146550,146552,146572,146576,146579,146582,146593,146596,146602,146606,146612,146639,146642,146654,146657,146668,146671,146677,146681,146687,146737,146740,146782,146785,146818,146821,146855,146859,146862,146882,146885,146921,146924,146937,146941,146945,146951,146954,146967,146971,146974,146980,146983,146987,146990,146993,147042,147046,147062,147068,147075,147081,147091],[10,145974,145970],{"id":145975},"_1-python环境与第一个程序",[351,145977,145979],{"id":145978},"_11-什么是python","1.1 什么是Python",[14,145981,145982],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145984,145985],{},"理解 Python 时抓住三个关键词：",[363,145987,145988,145991,145994],{},[366,145989,145990],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[366,145992,145993],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[366,145995,145996,145997,617,146000,617,146003,617,146006,617,146008,28648],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[25,145998,145999],{},"os",[25,146001,146002],{},"sys",[25,146004,146005],{},"json",[25,146007,58116],{},[25,146009,146010],{},"datetime",[14,146012,146013],{},"Python 程序的运行链路：",[18,146015,146018],{"className":146016,"code":146017,"language":5449,"meta":23},[5447],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[25,146019,146017],{"__ignoreMap":23},[351,146021,146023],{"id":146022},"_12-python解释器","1.2 Python解释器",[14,146025,146026],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[18,146028,146030],{"className":24084,"code":146029,"language":24086,"meta":23,"style":23},"python --version\npython3 --version\npython\npython3\n",[25,146031,146032,146038,146044,146049],{"__ignoreMap":23},[28,146033,146034,146036],{"class":30,"line":31},[28,146035,22],{"class":2225},[28,146037,26556],{"class":60},[28,146039,146040,146042],{"class":30,"line":48},[28,146041,101092],{"class":2225},[28,146043,26556],{"class":60},[28,146045,146046],{"class":30,"line":84},[28,146047,146048],{"class":2225},"python\n",[28,146050,146051],{"class":30,"line":91},[28,146052,146053],{"class":2225},"python3\n",[14,146055,146056],{},"进入交互模式后，可以直接输入表达式：",[18,146058,146060],{"className":20,"code":146059,"language":22,"meta":23,"style":23},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[25,146061,146062,146073,146078,146092],{"__ignoreMap":23},[28,146063,146064,146067,146069,146071],{"class":30,"line":31},[28,146065,146066],{"class":34},">>>",[28,146068,25381],{"class":60},[28,146070,45822],{"class":34},[28,146072,47979],{"class":60},[28,146074,146075],{"class":30,"line":48},[28,146076,146077],{"class":60},"3\n",[28,146079,146080,146082,146085,146087,146090],{"class":30,"line":84},[28,146081,146066],{"class":34},[28,146083,146084],{"class":60}," print",[28,146086,413],{"class":38},[28,146088,146089],{"class":127},"\"hello python\"",[28,146091,81],{"class":38},[28,146093,146094],{"class":30,"line":91},[28,146095,146096],{"class":38},"hello python\n",[14,146098,146099],{},"退出交互模式：",[18,146101,146103],{"className":20,"code":146102,"language":22,"meta":23,"style":23},"exit()\n",[25,146104,146105],{"__ignoreMap":23},[28,146106,146107,146110],{"class":30,"line":31},[28,146108,146109],{"class":60},"exit",[28,146111,2238],{"class":38},[14,146113,146114],{},"或使用快捷键：",[18,146116,146119],{"className":146117,"code":146118,"language":5449,"meta":23},[5447],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[25,146120,146118],{"__ignoreMap":23},[351,146122,146124],{"id":146123},"_13-安装python","1.3 安装Python",[380,146126,146128],{"id":146127},"_131-windows安装","1.3.1 Windows安装",[363,146130,146131,146138,146141,146147,146153],{},[366,146132,146133,146134],{},"打开 Python 官网：",[51,146135,146136],{"href":146136,"rel":146137},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24127],[366,146139,146140],{},"下载 Windows Installer。",[366,146142,146143,146144,28648],{},"安装时勾选 ",[25,146145,146146],{},"Add Python to PATH",[366,146148,146149,146150,28648],{},"点击 ",[25,146151,146152],{},"Install Now",[366,146154,146155],{},"安装完成后打开命令提示符验证：",[18,146157,146159],{"className":24084,"code":146158,"language":24086,"meta":23,"style":23},"python --version\npip --version\n",[25,146160,146161,146167],{"__ignoreMap":23},[28,146162,146163,146165],{"class":30,"line":31},[28,146164,22],{"class":2225},[28,146166,26556],{"class":60},[28,146168,146169,146171],{"class":30,"line":48},[28,146170,24093],{"class":2225},[28,146172,26556],{"class":60},[14,146174,146175,146176,146179],{},"如果提示 ",[25,146177,146178],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[380,146181,146183],{"id":146182},"_132-macos安装","1.3.2 macOS安装",[14,146185,146186],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[18,146188,146190],{"className":24084,"code":146189,"language":24086,"meta":23,"style":23},"brew install python\npython3 --version\npip3 --version\n",[25,146191,146192,146201,146207],{"__ignoreMap":23},[28,146193,146194,146197,146199],{"class":30,"line":31},[28,146195,146196],{"class":2225},"brew",[28,146198,24096],{"class":127},[28,146200,124531],{"class":127},[28,146202,146203,146205],{"class":30,"line":48},[28,146204,101092],{"class":2225},[28,146206,26556],{"class":60},[28,146208,146209,146211],{"class":30,"line":84},[28,146210,119913],{"class":2225},[28,146212,26556],{"class":60},[14,146214,146215],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[380,146217,146219],{"id":146218},"_133-linux安装","1.3.3 Linux安装",[14,146221,146222],{},"Ubuntu\u002FDebian：",[18,146224,146226],{"className":24084,"code":146225,"language":24086,"meta":23,"style":23},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[25,146227,146228,146236,146251,146257],{"__ignoreMap":23},[28,146229,146230,146232,146234],{"class":30,"line":31},[28,146231,24839],{"class":2225},[28,146233,117530],{"class":127},[28,146235,26505],{"class":127},[28,146237,146238,146240,146242,146244,146246,146248],{"class":30,"line":48},[28,146239,24839],{"class":2225},[28,146241,117530],{"class":127},[28,146243,24096],{"class":127},[28,146245,104616],{"class":127},[28,146247,101011],{"class":127},[28,146249,146250],{"class":127}," python3-venv\n",[28,146252,146253,146255],{"class":30,"line":84},[28,146254,101092],{"class":2225},[28,146256,26556],{"class":60},[28,146258,146259,146261],{"class":30,"line":91},[28,146260,119913],{"class":2225},[28,146262,26556],{"class":60},[14,146264,146265],{},"Fedora：",[18,146267,146269],{"className":24084,"code":146268,"language":24086,"meta":23,"style":23},"sudo dnf install python3 python3-pip\n",[25,146270,146271],{"__ignoreMap":23},[28,146272,146273,146275,146277,146279,146281],{"class":30,"line":31},[28,146274,24839],{"class":2225},[28,146276,26578],{"class":127},[28,146278,24096],{"class":127},[28,146280,104616],{"class":127},[28,146282,119978],{"class":127},[14,146284,146285,146286,146288],{},"Linux 上通常使用 ",[25,146287,101092],{}," 命令，避免和系统旧版本 Python 冲突。",[351,146290,146292],{"id":146291},"_14-pip包管理器","1.4 pip包管理器",[14,146294,146295,146297],{},[25,146296,24093],{}," 用来安装第三方库。",[18,146299,146301],{"className":24084,"code":146300,"language":24086,"meta":23,"style":23},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[25,146302,146303,146312,146321,146329,146335],{"__ignoreMap":23},[28,146304,146305,146307,146309],{"class":30,"line":31},[28,146306,24093],{"class":2225},[28,146308,24096],{"class":127},[28,146310,146311],{"class":127}," requests\n",[28,146313,146314,146316,146319],{"class":30,"line":48},[28,146315,24093],{"class":2225},[28,146317,146318],{"class":127}," uninstall",[28,146320,146311],{"class":127},[28,146322,146323,146325,146327],{"class":30,"line":84},[28,146324,24093],{"class":2225},[28,146326,117787],{"class":127},[28,146328,146311],{"class":127},[28,146330,146331,146333],{"class":30,"line":91},[28,146332,24093],{"class":2225},[28,146334,119168],{"class":127},[28,146336,146337,146339],{"class":30,"line":97},[28,146338,24093],{"class":2225},[28,146340,146341],{"class":127}," freeze\n",[14,146343,146344],{},"国内网络较慢时可以临时使用镜像：",[18,146346,146348],{"className":24084,"code":146347,"language":24086,"meta":23,"style":23},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,146349,146350],{"__ignoreMap":23},[28,146351,146352,146354,146356,146359,146361],{"class":30,"line":31},[28,146353,24093],{"class":2225},[28,146355,24096],{"class":127},[28,146357,146358],{"class":127}," requests",[28,146360,26693],{"class":60},[28,146362,119941],{"class":127},[14,146364,146365],{},"常见第三方库：",[543,146367,146368,146377],{},[546,146369,146370],{},[549,146371,146372,146375],{},[552,146373,146374],{},"库",[552,146376,102909],{},[590,146378,146379,146387,146394,146402,146410,146418,146426],{},[549,146380,146381,146384],{},[595,146382,146383],{},"requests",[595,146385,146386],{},"网络请求",[549,146388,146389,146391],{},[595,146390,100839],{},[595,146392,146393],{},"数值计算",[549,146395,146396,146399],{},[595,146397,146398],{},"pandas",[595,146400,146401],{},"表格数据处理",[549,146403,146404,146407],{},[595,146405,146406],{},"matplotlib",[595,146408,146409],{},"绘图",[549,146411,146412,146415],{},[595,146413,146414],{},"pyecharts",[595,146416,146417],{},"ECharts 图表",[549,146419,146420,146423],{},[595,146421,146422],{},"flask",[595,146424,146425],{},"Web 后端",[549,146427,146428,146431],{},[595,146429,146430],{},"pytest",[595,146432,146433],{},"自动化测试",[351,146435,146437],{"id":146436},"_15-虚拟环境","1.5 虚拟环境",[14,146439,146440,146441,146444],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[25,146442,146443],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146446,146447],{},"创建虚拟环境：",[18,146449,146451],{"className":24084,"code":146450,"language":24086,"meta":23,"style":23},"python -m venv .venv\n",[25,146452,146453],{"__ignoreMap":23},[28,146454,146455,146457,146459,146461],{"class":30,"line":31},[28,146456,22],{"class":2225},[28,146458,101095],{"class":60},[28,146460,101098],{"class":127},[28,146462,101101],{"class":127},[14,146464,146465],{},"Windows 激活：",[18,146467,146469],{"className":24084,"code":146468,"language":24086,"meta":23,"style":23},".venv\\Scripts\\activate\n",[25,146470,146471],{"__ignoreMap":23},[28,146472,146473],{"class":30,"line":31},[28,146474,146468],{"class":2225},[14,146476,146477],{},"macOS\u002FLinux 激活：",[18,146479,146481],{"className":24084,"code":146480,"language":24086,"meta":23,"style":23},"source .venv\u002Fbin\u002Factivate\n",[25,146482,146483],{"__ignoreMap":23},[28,146484,146485,146487],{"class":30,"line":31},[28,146486,101106],{"class":60},[28,146488,101109],{"class":127},[14,146490,146491],{},"退出虚拟环境：",[18,146493,146495],{"className":24084,"code":146494,"language":24086,"meta":23,"style":23},"deactivate\n",[25,146496,146497],{"__ignoreMap":23},[28,146498,146499],{"class":30,"line":31},[28,146500,146494],{"class":2225},[14,146502,146503],{},"保存依赖：",[18,146505,146507],{"className":24084,"code":146506,"language":24086,"meta":23,"style":23},"pip freeze > requirements.txt\n",[25,146508,146509],{"__ignoreMap":23},[28,146510,146511,146513,146516,146518],{"class":30,"line":31},[28,146512,24093],{"class":2225},[28,146514,146515],{"class":127}," freeze",[28,146517,26485],{"class":34},[28,146519,146520],{"class":127}," requirements.txt\n",[14,146522,146523],{},"安装依赖：",[18,146525,146527],{"className":24084,"code":146526,"language":24086,"meta":23,"style":23},"pip install -r requirements.txt\n",[25,146528,146529],{"__ignoreMap":23},[28,146530,146531,146533,146535,146537],{"class":30,"line":31},[28,146532,24093],{"class":2225},[28,146534,24096],{"class":127},[28,146536,119852],{"class":60},[28,146538,146520],{"class":127},[351,146540,146542],{"id":146541},"_16-开发工具","1.6 开发工具",[380,146544,146546],{"id":146545},"_161-pycharm","1.6.1 PyCharm",[14,146548,146549],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146551,122275],{},[363,146553,146554,146557,146560,146566,146569],{},[366,146555,146556],{},"New Project：创建项目。",[366,146558,146559],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[366,146561,146562,146563,126196],{},"New Python File：创建 ",[25,146564,146565],{},".py",[366,146567,146568],{},"Run：运行当前文件。",[366,146570,146571],{},"Debug：断点调试。",[380,146573,146575],{"id":146574},"_162-vs-code","1.6.2 VS Code",[14,146577,146578],{},"VS Code 轻量，适合后续多语言开发。",[14,146580,146581],{},"建议安装插件：",[363,146583,146584,146587,146590],{},[366,146585,146586],{},"Python。",[366,146588,146589],{},"Pylance。",[366,146591,146592],{},"Jupyter。",[14,146594,146595],{},"选择解释器：",[18,146597,146600],{"className":146598,"code":146599,"language":5449,"meta":23},[5447],"Ctrl + Shift + P -> Python: Select Interpreter\n",[25,146601,146599],{"__ignoreMap":23},[351,146603,146605],{"id":146604},"_17-第一个python程序","1.7 第一个Python程序",[14,146607,146608,146609,24881],{},"创建文件 ",[25,146610,146611],{},"hello.py",[18,146613,146615],{"className":20,"code":146614,"language":22,"meta":23,"style":23},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[25,146616,146617,146628],{"__ignoreMap":23},[28,146618,146619,146621,146623,146626],{"class":30,"line":31},[28,146620,30675],{"class":60},[28,146622,413],{"class":38},[28,146624,146625],{"class":127},"\"Hello World\"",[28,146627,81],{"class":38},[28,146629,146630,146632,146634,146637],{"class":30,"line":48},[28,146631,30675],{"class":60},[28,146633,413],{"class":38},[28,146635,146636],{"class":127},"\"你好，Python\"",[28,146638,81],{"class":38},[14,146640,146641],{},"在终端运行：",[18,146643,146645],{"className":24084,"code":146644,"language":24086,"meta":23,"style":23},"python hello.py\n",[25,146646,146647],{"__ignoreMap":23},[28,146648,146649,146651],{"class":30,"line":31},[28,146650,22],{"class":2225},[28,146652,146653],{"class":127}," hello.py\n",[14,146655,146656],{},"或：",[18,146658,146660],{"className":24084,"code":146659,"language":24086,"meta":23,"style":23},"python3 hello.py\n",[25,146661,146662],{"__ignoreMap":23},[28,146663,146664,146666],{"class":30,"line":31},[28,146665,101092],{"class":2225},[28,146667,146653],{"class":127},[14,146669,146670],{},"输出：",[18,146672,146675],{"className":146673,"code":146674,"language":5449,"meta":23},[5447],"Hello World\n你好，Python\n",[25,146676,146674],{"__ignoreMap":23},[351,146678,146680],{"id":146679},"_18-print函数","1.8 print函数",[14,146682,146683,146686],{},[25,146684,146685],{},"print()"," 用来输出内容。",[18,146688,146690],{"className":20,"code":146689,"language":22,"meta":23,"style":23},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[25,146691,146692,146702,146712,146722],{"__ignoreMap":23},[28,146693,146694,146696,146698,146700],{"class":30,"line":31},[28,146695,30675],{"class":60},[28,146697,413],{"class":38},[28,146699,6106],{"class":127},[28,146701,81],{"class":38},[28,146703,146704,146706,146708,146710],{"class":30,"line":48},[28,146705,30675],{"class":60},[28,146707,413],{"class":38},[28,146709,713],{"class":60},[28,146711,81],{"class":38},[28,146713,146714,146716,146718,146720],{"class":30,"line":84},[28,146715,30675],{"class":60},[28,146717,413],{"class":38},[28,146719,459],{"class":60},[28,146721,81],{"class":38},[28,146723,146724,146726,146728,146731,146733,146735],{"class":30,"line":91},[28,146725,30675],{"class":60},[28,146727,413],{"class":38},[28,146729,146730],{"class":127},"\"年龄:\"",[28,146732,12697],{"class":38},[28,146734,1048],{"class":60},[28,146736,81],{"class":38},[14,146738,146739],{},"多个内容用逗号隔开，默认中间加空格：",[18,146741,146743],{"className":20,"code":146742,"language":22,"meta":23,"style":23},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[25,146744,146745,146755,146765],{"__ignoreMap":23},[28,146746,146747,146750,146752],{"class":30,"line":31},[28,146748,146749],{"class":38},"name ",[28,146751,54],{"class":34},[28,146753,146754],{"class":127}," \"张三\"\n",[28,146756,146757,146760,146762],{"class":30,"line":48},[28,146758,146759],{"class":38},"age ",[28,146761,54],{"class":34},[28,146763,146764],{"class":60}," 18\n",[28,146766,146767,146769,146771,146774,146777,146779],{"class":30,"line":84},[28,146768,30675],{"class":60},[28,146770,413],{"class":38},[28,146772,146773],{"class":127},"\"姓名:\"",[28,146775,146776],{"class":38},", name, ",[28,146778,146730],{"class":127},[28,146780,146781],{"class":38},", age)\n",[14,146783,146784],{},"修改分隔符：",[18,146786,146788],{"className":20,"code":146787,"language":22,"meta":23,"style":23},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[25,146789,146790],{"__ignoreMap":23},[28,146791,146792,146794,146796,146799,146801,146803,146805,146807,146809,146812,146814,146816],{"class":30,"line":31},[28,146793,30675],{"class":60},[28,146795,413],{"class":38},[28,146797,146798],{"class":127},"\"2024\"",[28,146800,12697],{"class":38},[28,146802,54572],{"class":127},[28,146804,12697],{"class":38},[28,146806,54572],{"class":127},[28,146808,12697],{"class":38},[28,146810,146811],{"class":5478},"sep",[28,146813,54],{"class":34},[28,146815,32739],{"class":127},[28,146817,81],{"class":38},[14,146819,146820],{},"修改结尾符：",[18,146822,146824],{"className":20,"code":146823,"language":22,"meta":23,"style":23},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[25,146825,146826,146844],{"__ignoreMap":23},[28,146827,146828,146830,146832,146834,146836,146838,146840,146842],{"class":30,"line":31},[28,146829,30675],{"class":60},[28,146831,413],{"class":38},[28,146833,6106],{"class":127},[28,146835,12697],{"class":38},[28,146837,46057],{"class":5478},[28,146839,54],{"class":34},[28,146841,4621],{"class":127},[28,146843,81],{"class":38},[28,146845,146846,146848,146850,146853],{"class":30,"line":48},[28,146847,30675],{"class":60},[28,146849,413],{"class":38},[28,146851,146852],{"class":127},"\"python\"",[28,146854,81],{"class":38},[351,146856,146858],{"id":146857},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146860,146861],{},"交互运行适合临时验证：",[18,146863,146865],{"className":20,"code":146864,"language":22,"meta":23,"style":23},">>> 10 * 3\n30\n",[25,146866,146867,146877],{"__ignoreMap":23},[28,146868,146869,146871,146873,146875],{"class":30,"line":31},[28,146870,146066],{"class":34},[28,146872,2300],{"class":60},[28,146874,6780],{"class":34},[28,146876,120249],{"class":60},[28,146878,146879],{"class":30,"line":48},[28,146880,146881],{"class":60},"30\n",[14,146883,146884],{},"脚本运行适合保存程序：",[18,146886,146888],{"className":20,"code":146887,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(price * count)\n",[25,146889,146890,146900,146909],{"__ignoreMap":23},[28,146891,146892,146895,146897],{"class":30,"line":31},[28,146893,146894],{"class":38},"price ",[28,146896,54],{"class":34},[28,146898,146899],{"class":60}," 8\n",[28,146901,146902,146905,146907],{"class":30,"line":48},[28,146903,146904],{"class":38},"count ",[28,146906,54],{"class":34},[28,146908,54683],{"class":60},[28,146910,146911,146913,146916,146918],{"class":30,"line":84},[28,146912,30675],{"class":60},[28,146914,146915],{"class":38},"(price ",[28,146917,854],{"class":34},[28,146919,146920],{"class":38}," count)\n",[14,146922,146923],{},"实际学习中推荐：",[363,146925,146926,146929,146934],{},[366,146927,146928],{},"临时试一个语法，用交互模式。",[366,146930,146931,146932,126196],{},"写完整练习，用 ",[25,146933,146565],{},[366,146935,146936],{},"写项目，用独立目录和虚拟环境。",[351,146938,146940],{"id":146939},"_110-常见错误","1.10 常见错误",[380,146942,146944],{"id":146943},"_1101-命令找不到","1.10.1 命令找不到",[18,146946,146949],{"className":146947,"code":146948,"language":5449,"meta":23},[5447],"python: command not found\n",[25,146950,146948],{"__ignoreMap":23},[14,146952,146953],{},"原因：",[363,146955,146956,146959,146962],{},[366,146957,146958],{},"没安装 Python。",[366,146960,146961],{},"PATH 没配置。",[366,146963,146964,146965,28648],{},"Linux\u002FmacOS 应该使用 ",[25,146966,101092],{},[380,146968,146970],{"id":146969},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146972,146973],{},"不要把文件命名为：",[18,146975,146978],{"className":146976,"code":146977,"language":5449,"meta":23},[5447],"random.py\njson.py\ntime.py\nrequests.py\n",[25,146979,146977],{"__ignoreMap":23},[14,146981,146982],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[380,146984,146986],{"id":146985},"_1103-中文乱码","1.10.3 中文乱码",[14,146988,146989],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146991,146992],{},"如果读写文件出现乱码，要明确指定编码：",[18,146994,146996],{"className":20,"code":146995,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[25,146997,146998,147032],{"__ignoreMap":23},[28,146999,147000,147002,147005,147007,147010,147012,147015,147017,147020,147022,147025,147027,147029],{"class":30,"line":31},[28,147001,108046],{"class":34},[28,147003,147004],{"class":60}," open",[28,147006,413],{"class":38},[28,147008,147009],{"class":127},"\"data.txt\"",[28,147011,12697],{"class":38},[28,147013,147014],{"class":127},"\"r\"",[28,147016,12697],{"class":38},[28,147018,147019],{"class":5478},"encoding",[28,147021,54],{"class":34},[28,147023,147024],{"class":127},"\"utf-8\"",[28,147026,13976],{"class":38},[28,147028,42],{"class":34},[28,147030,147031],{"class":38}," f:\n",[28,147033,147034,147037,147039],{"class":30,"line":48},[28,147035,147036],{"class":38},"    content ",[28,147038,54],{"class":34},[28,147040,147041],{"class":38}," f.read()\n",[351,147043,147045],{"id":147044},"_111-本章练习","1.11 本章练习",[363,147047,147048,147051,147057],{},[366,147049,147050],{},"安装 Python，并在终端输出版本号。",[366,147052,147053,147054,147056],{},"新建 ",[25,147055,146611],{},"，输出自己的姓名、年龄、学习目标。",[366,147058,104579,147059,147061],{},[25,147060,146685],{}," 输出下面格式：",[18,147063,147066],{"className":147064,"code":147065,"language":5449,"meta":23},[5447],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[25,147067,147065],{"__ignoreMap":23},[363,147069,147070],{"start":91},[366,147071,104579,147072,147074],{},[25,147073,146811],{}," 输出日期：",[18,147076,147079],{"className":147077,"code":147078,"language":5449,"meta":23},[5447],"2024-10-10\n",[25,147080,147078],{"__ignoreMap":23},[363,147082,147083],{"start":97},[366,147084,104579,147085,147087,147088,147090],{},[25,147086,46057],{}," 让两次 ",[25,147089,146685],{}," 输出在同一行。",[328,147092,147093],{},"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":23,"searchDepth":48,"depth":48,"links":147095},[147096,147097,147098,147103,147104,147105,147109,147110,147111,147112,147117],{"id":145978,"depth":48,"text":145979},{"id":146022,"depth":48,"text":146023},{"id":146123,"depth":48,"text":146124,"children":147099},[147100,147101,147102],{"id":146127,"depth":84,"text":146128},{"id":146182,"depth":84,"text":146183},{"id":146218,"depth":84,"text":146219},{"id":146291,"depth":48,"text":146292},{"id":146436,"depth":48,"text":146437},{"id":146541,"depth":48,"text":146542,"children":147106},[147107,147108],{"id":146545,"depth":84,"text":146546},{"id":146574,"depth":84,"text":146575},{"id":146604,"depth":48,"text":146605},{"id":146679,"depth":48,"text":146680},{"id":146857,"depth":48,"text":146858},{"id":146939,"depth":48,"text":146940,"children":147113},[147114,147115,147116],{"id":146943,"depth":84,"text":146944},{"id":146969,"depth":84,"text":146970},{"id":146985,"depth":84,"text":146986},{"id":147044,"depth":48,"text":147045},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145970,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147124,"title":147125,"body":147126,"description":333,"extension":334,"meta":149530,"navigation":336,"path":149531,"seo":149532,"stem":149533,"__hash__":149534},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147127,"toc":149515},[147128,147131,147135,147138,147141,147158,147161,147203,147206,147210,147213,147216,147253,147256,147290,147293,147385,147389,147403,147406,147433,147436,147440,147543,147550,147553,147570,147574,147581,147770,147773,147846,147850,147853,147937,147940,147972,147976,148180,148183,148187,148193,148295,148298,148554,148558,148561,148564,148578,148580,148766,148770,149132,149138,149142,149145,149269,149272,149451,149454,149458,149491,149495,149512],[10,147129,147125],{"id":147130},"_10-json与pyecharts折线图",[351,147132,147134],{"id":147133},"_101-数据可视化","10.1 数据可视化",[14,147136,147137],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147139,147140],{},"常见图表：",[363,147142,147143,147146,147149,147152,147155],{},[366,147144,147145],{},"折线图：看趋势。",[366,147147,147148],{},"柱状图：看分类对比。",[366,147150,147151],{},"饼图：看占比。",[366,147153,147154],{},"地图：看地域分布。",[366,147156,147157],{},"散点图：看两个变量之间的关系。",[14,147159,147160],{},"Python 可视化常用库：",[543,147162,147163,147171],{},[546,147164,147165],{},[549,147166,147167,147169],{},[552,147168,146374],{},[552,147170,24002],{},[590,147172,147173,147180,147188,147195],{},[549,147174,147175,147177],{},[595,147176,146406],{},[595,147178,147179],{},"基础、经典、可定制",[549,147181,147182,147185],{},[595,147183,147184],{},"seaborn",[595,147186,147187],{},"统计图表更美观",[549,147189,147190,147192],{},[595,147191,146414],{},[595,147193,147194],{},"生成交互式网页图表",[549,147196,147197,147200],{},[595,147198,147199],{},"plotly",[595,147201,147202],{},"交互图表能力强",[14,147204,147205],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[351,147207,147209],{"id":147208},"_102-json回顾","10.2 JSON回顾",[14,147211,147212],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147214,147215],{},"Python 字典：",[18,147217,147219],{"className":20,"code":147218,"language":22,"meta":23,"style":23},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[25,147220,147221,147229,147240,147249],{"__ignoreMap":23},[28,147222,147223,147225,147227],{"class":30,"line":31},[28,147224,101871],{"class":38},[28,147226,54],{"class":34},[28,147228,15834],{"class":38},[28,147230,147231,147234,147236,147238],{"class":30,"line":48},[28,147232,147233],{"class":127},"    \"name\"",[28,147235,51693],{"class":38},[28,147237,69525],{"class":127},[28,147239,31723],{"class":38},[28,147241,147242,147245,147247],{"class":30,"line":84},[28,147243,147244],{"class":127},"    \"value\"",[28,147246,51693],{"class":38},[28,147248,97710],{"class":60},[28,147250,147251],{"class":30,"line":91},[28,147252,1830],{"class":38},[14,147254,147255],{},"JSON 字符串：",[18,147257,147260],{"className":147258,"code":147259,"language":146005,"meta":23,"style":23},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[25,147261,147262,147266,147277,147286],{"__ignoreMap":23},[28,147263,147264],{"class":30,"line":31},[28,147265,1811],{"class":38},[28,147267,147268,147271,147273,147275],{"class":30,"line":48},[28,147269,147270],{"class":60},"  \"name\"",[28,147272,51693],{"class":38},[28,147274,69525],{"class":127},[28,147276,31723],{"class":38},[28,147278,147279,147282,147284],{"class":30,"line":84},[28,147280,147281],{"class":60},"  \"value\"",[28,147283,51693],{"class":38},[28,147285,97710],{"class":60},[28,147287,147288],{"class":30,"line":91},[28,147289,1830],{"class":38},[14,147291,147292],{},"Python 与 JSON 的转换：",[18,147294,147296],{"className":20,"code":147295,"language":22,"meta":23,"style":23},"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",[25,147297,147298,147305,147309,147334,147338,147357,147364,147368,147378],{"__ignoreMap":23},[28,147299,147300,147302],{"class":30,"line":31},[28,147301,35],{"class":34},[28,147303,147304],{"class":38}," json\n",[28,147306,147307],{"class":30,"line":48},[28,147308,2662],{"emptyLinePlaceholder":336},[28,147310,147311,147313,147315,147317,147319,147321,147323,147325,147328,147330,147332],{"class":30,"line":84},[28,147312,101871],{"class":38},[28,147314,54],{"class":34},[28,147316,4710],{"class":38},[28,147318,62935],{"class":127},[28,147320,51693],{"class":38},[28,147322,69525],{"class":127},[28,147324,12697],{"class":38},[28,147326,147327],{"class":127},"\"value\"",[28,147329,51693],{"class":38},[28,147331,713],{"class":60},[28,147333,1830],{"class":38},[28,147335,147336],{"class":30,"line":91},[28,147337,2662],{"emptyLinePlaceholder":336},[28,147339,147340,147343,147345,147348,147351,147353,147355],{"class":30,"line":97},[28,147341,147342],{"class":38},"json_text ",[28,147344,54],{"class":34},[28,147346,147347],{"class":38}," json.dumps(data, ",[28,147349,147350],{"class":5478},"ensure_ascii",[28,147352,54],{"class":34},[28,147354,34243],{"class":60},[28,147356,81],{"class":38},[28,147358,147359,147361],{"class":30,"line":103},[28,147360,30675],{"class":60},[28,147362,147363],{"class":38},"(json_text)\n",[28,147365,147366],{"class":30,"line":109},[28,147367,2662],{"emptyLinePlaceholder":336},[28,147369,147370,147373,147375],{"class":30,"line":118},[28,147371,147372],{"class":38},"new_data ",[28,147374,54],{"class":34},[28,147376,147377],{"class":38}," json.loads(json_text)\n",[28,147379,147380,147382],{"class":30,"line":124},[28,147381,30675],{"class":60},[28,147383,147384],{"class":38},"(new_data)\n",[351,147386,147388],{"id":147387},"_103-安装pyecharts","10.3 安装pyecharts",[18,147390,147392],{"className":24084,"code":147391,"language":24086,"meta":23,"style":23},"pip install pyecharts\n",[25,147393,147394],{"__ignoreMap":23},[28,147395,147396,147398,147400],{"class":30,"line":31},[28,147397,24093],{"class":2225},[28,147399,24096],{"class":127},[28,147401,147402],{"class":127}," pyecharts\n",[14,147404,147405],{},"验证：",[18,147407,147409],{"className":20,"code":147408,"language":22,"meta":23,"style":23},"import pyecharts\n\nprint(pyecharts.__version__)\n",[25,147410,147411,147417,147421],{"__ignoreMap":23},[28,147412,147413,147415],{"class":30,"line":31},[28,147414,35],{"class":34},[28,147416,147402],{"class":38},[28,147418,147419],{"class":30,"line":48},[28,147420,2662],{"emptyLinePlaceholder":336},[28,147422,147423,147425,147428,147431],{"class":30,"line":84},[28,147424,30675],{"class":60},[28,147426,147427],{"class":38},"(pyecharts.",[28,147429,147430],{"class":60},"__version__",[28,147432,81],{"class":38},[14,147434,147435],{},"如果使用虚拟环境，要先激活环境再安装。",[351,147437,147439],{"id":147438},"_104-第一个折线图","10.4 第一个折线图",[18,147441,147443],{"className":20,"code":147442,"language":22,"meta":23,"style":23},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[25,147444,147445,147457,147461,147471,147501,147533],{"__ignoreMap":23},[28,147446,147447,147449,147452,147454],{"class":30,"line":31},[28,147448,30997],{"class":34},[28,147450,147451],{"class":38}," pyecharts.charts ",[28,147453,35],{"class":34},[28,147455,147456],{"class":38}," Line\n",[28,147458,147459],{"class":30,"line":48},[28,147460,2662],{"emptyLinePlaceholder":336},[28,147462,147463,147466,147468],{"class":30,"line":84},[28,147464,147465],{"class":38},"line ",[28,147467,54],{"class":34},[28,147469,147470],{"class":38}," Line()\n",[28,147472,147473,147476,147479,147481,147484,147486,147489,147491,147494,147496,147499],{"class":30,"line":91},[28,147474,147475],{"class":38},"line.add_xaxis([",[28,147477,147478],{"class":127},"\"周一\"",[28,147480,12697],{"class":38},[28,147482,147483],{"class":127},"\"周二\"",[28,147485,12697],{"class":38},[28,147487,147488],{"class":127},"\"周三\"",[28,147490,12697],{"class":38},[28,147492,147493],{"class":127},"\"周四\"",[28,147495,12697],{"class":38},[28,147497,147498],{"class":127},"\"周五\"",[28,147500,4919],{"class":38},[28,147502,147503,147506,147509,147511,147513,147515,147517,147519,147521,147523,147526,147528,147531],{"class":30,"line":97},[28,147504,147505],{"class":38},"line.add_yaxis(",[28,147507,147508],{"class":127},"\"销售额\"",[28,147510,77774],{"class":38},[28,147512,713],{"class":60},[28,147514,12697],{"class":38},[28,147516,1215],{"class":60},[28,147518,12697],{"class":38},[28,147520,1259],{"class":60},[28,147522,12697],{"class":38},[28,147524,147525],{"class":60},"150",[28,147527,12697],{"class":38},[28,147529,147530],{"class":60},"180",[28,147532,4919],{"class":38},[28,147534,147535,147538,147541],{"class":30,"line":103},[28,147536,147537],{"class":38},"line.render(",[28,147539,147540],{"class":127},"\"line.html\"",[28,147542,81],{"class":38},[14,147544,147545,147546,147549],{},"运行后会生成 ",[25,147547,147548],{},"line.html","，用浏览器打开即可看到图表。",[14,147551,147552],{},"核心步骤：",[363,147554,147555,147558,147561,147564,147567],{},[366,147556,147557],{},"导入图表类。",[366,147559,147560],{},"创建图表对象。",[366,147562,147563],{},"添加 x 轴数据。",[366,147565,147566],{},"添加 y 轴数据。",[366,147568,147569],{},"渲染为 HTML。",[351,147571,147573],{"id":147572},"_105-全局配置","10.5 全局配置",[14,147575,147576,147577,147580],{},"常用配置在 ",[25,147578,147579],{},"pyecharts.options"," 中。",[18,147582,147584],{"className":20,"code":147583,"language":22,"meta":23,"style":23},"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",[25,147585,147586,147603,147613,147617,147625,147649,147677,147682,147701,147720,147738,147758,147762],{"__ignoreMap":23},[28,147587,147588,147590,147593,147595,147598,147600],{"class":30,"line":31},[28,147589,30997],{"class":34},[28,147591,147592],{"class":38}," pyecharts ",[28,147594,35],{"class":34},[28,147596,147597],{"class":38}," options ",[28,147599,42],{"class":34},[28,147601,147602],{"class":38}," opts\n",[28,147604,147605,147607,147609,147611],{"class":30,"line":48},[28,147606,30997],{"class":34},[28,147608,147451],{"class":38},[28,147610,35],{"class":34},[28,147612,147456],{"class":38},[28,147614,147615],{"class":30,"line":84},[28,147616,2662],{"emptyLinePlaceholder":336},[28,147618,147619,147621,147623],{"class":30,"line":91},[28,147620,147465],{"class":38},[28,147622,54],{"class":34},[28,147624,147470],{"class":38},[28,147626,147627,147629,147631,147633,147635,147637,147639,147641,147643,147645,147647],{"class":30,"line":97},[28,147628,147475],{"class":38},[28,147630,147478],{"class":127},[28,147632,12697],{"class":38},[28,147634,147483],{"class":127},[28,147636,12697],{"class":38},[28,147638,147488],{"class":127},[28,147640,12697],{"class":38},[28,147642,147493],{"class":127},[28,147644,12697],{"class":38},[28,147646,147498],{"class":127},[28,147648,4919],{"class":38},[28,147650,147651,147653,147655,147657,147659,147661,147663,147665,147667,147669,147671,147673,147675],{"class":30,"line":103},[28,147652,147505],{"class":38},[28,147654,147508],{"class":127},[28,147656,77774],{"class":38},[28,147658,713],{"class":60},[28,147660,12697],{"class":38},[28,147662,1215],{"class":60},[28,147664,12697],{"class":38},[28,147666,1259],{"class":60},[28,147668,12697],{"class":38},[28,147670,147525],{"class":60},[28,147672,12697],{"class":38},[28,147674,147530],{"class":60},[28,147676,4919],{"class":38},[28,147678,147679],{"class":30,"line":109},[28,147680,147681],{"class":38},"line.set_global_opts(\n",[28,147683,147684,147687,147689,147692,147694,147696,147699],{"class":30,"line":118},[28,147685,147686],{"class":5478},"    title_opts",[28,147688,54],{"class":34},[28,147690,147691],{"class":38},"opts.TitleOpts(",[28,147693,51663],{"class":5478},[28,147695,54],{"class":34},[28,147697,147698],{"class":127},"\"一周销售额\"",[28,147700,38303],{"class":38},[28,147702,147703,147706,147708,147711,147713,147715,147718],{"class":30,"line":124},[28,147704,147705],{"class":5478},"    xaxis_opts",[28,147707,54],{"class":34},[28,147709,147710],{"class":38},"opts.AxisOpts(",[28,147712,80066],{"class":5478},[28,147714,54],{"class":34},[28,147716,147717],{"class":127},"\"日期\"",[28,147719,38303],{"class":38},[28,147721,147722,147725,147727,147729,147731,147733,147736],{"class":30,"line":131},[28,147723,147724],{"class":5478},"    yaxis_opts",[28,147726,54],{"class":34},[28,147728,147710],{"class":38},[28,147730,80066],{"class":5478},[28,147732,54],{"class":34},[28,147734,147735],{"class":127},"\"金额\"",[28,147737,38303],{"class":38},[28,147739,147740,147743,147745,147748,147751,147753,147756],{"class":30,"line":137},[28,147741,147742],{"class":5478},"    tooltip_opts",[28,147744,54],{"class":34},[28,147746,147747],{"class":38},"opts.TooltipOpts(",[28,147749,147750],{"class":5478},"trigger",[28,147752,54],{"class":34},[28,147754,147755],{"class":127},"\"axis\"",[28,147757,38303],{"class":38},[28,147759,147760],{"class":30,"line":143},[28,147761,81],{"class":38},[28,147763,147764,147766,147768],{"class":30,"line":149},[28,147765,147537],{"class":38},[28,147767,147540],{"class":127},[28,147769,81],{"class":38},[14,147771,147772],{},"常见全局配置：",[543,147774,147775,147784],{},[546,147776,147777],{},[549,147778,147779,147782],{},[552,147780,147781],{},"配置",[552,147783,102909],{},[590,147785,147786,147796,147806,147816,147826,147836],{},[549,147787,147788,147793],{},[595,147789,147790],{},[25,147791,147792],{},"TitleOpts",[595,147794,147795],{},"标题",[549,147797,147798,147803],{},[595,147799,147800],{},[25,147801,147802],{},"LegendOpts",[595,147804,147805],{},"图例",[549,147807,147808,147813],{},[595,147809,147810],{},[25,147811,147812],{},"TooltipOpts",[595,147814,147815],{},"提示框",[549,147817,147818,147823],{},[595,147819,147820],{},[25,147821,147822],{},"AxisOpts",[595,147824,147825],{},"坐标轴",[549,147827,147828,147833],{},[595,147829,147830],{},[25,147831,147832],{},"VisualMapOpts",[595,147834,147835],{},"视觉映射",[549,147837,147838,147843],{},[595,147839,147840],{},[25,147841,147842],{},"DataZoomOpts",[595,147844,147845],{},"区域缩放",[351,147847,147849],{"id":147848},"_106-系列配置","10.6 系列配置",[14,147851,147852],{},"系列配置作用于某一组数据。",[18,147854,147856],{"className":20,"code":147855,"language":22,"meta":23,"style":23},"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",[25,147857,147858,147863,147874,147903,147914,147933],{"__ignoreMap":23},[28,147859,147860],{"class":30,"line":31},[28,147861,147862],{"class":38},"line.add_yaxis(\n",[28,147864,147865,147868,147870,147872],{"class":30,"line":48},[28,147866,147867],{"class":5478},"    series_name",[28,147869,54],{"class":34},[28,147871,147508],{"class":127},[28,147873,31723],{"class":38},[28,147875,147876,147879,147881,147883,147885,147887,147889,147891,147893,147895,147897,147899,147901],{"class":30,"line":84},[28,147877,147878],{"class":5478},"    y_axis",[28,147880,54],{"class":34},[28,147882,1287],{"class":38},[28,147884,713],{"class":60},[28,147886,12697],{"class":38},[28,147888,1215],{"class":60},[28,147890,12697],{"class":38},[28,147892,1259],{"class":60},[28,147894,12697],{"class":38},[28,147896,147525],{"class":60},[28,147898,12697],{"class":38},[28,147900,147530],{"class":60},[28,147902,88092],{"class":38},[28,147904,147905,147908,147910,147912],{"class":30,"line":91},[28,147906,147907],{"class":5478},"    is_smooth",[28,147909,54],{"class":34},[28,147911,31733],{"class":60},[28,147913,31723],{"class":38},[28,147915,147916,147919,147921,147924,147927,147929,147931],{"class":30,"line":97},[28,147917,147918],{"class":5478},"    label_opts",[28,147920,54],{"class":34},[28,147922,147923],{"class":38},"opts.LabelOpts(",[28,147925,147926],{"class":5478},"is_show",[28,147928,54],{"class":34},[28,147930,31733],{"class":60},[28,147932,38303],{"class":38},[28,147934,147935],{"class":30,"line":103},[28,147936,81],{"class":38},[14,147938,147939],{},"常用参数：",[363,147941,147942,147948,147954,147960,147966],{},[366,147943,147944,147947],{},[25,147945,147946],{},"series_name","：系列名称。",[366,147949,147950,147953],{},[25,147951,147952],{},"y_axis","：y 轴数据。",[366,147955,147956,147959],{},[25,147957,147958],{},"is_smooth","：是否平滑曲线。",[366,147961,147962,147965],{},[25,147963,147964],{},"label_opts","：标签配置。",[366,147967,147968,147971],{},[25,147969,147970],{},"symbol_size","：标记点大小。",[351,147973,147975],{"id":147974},"_107-多条折线","10.7 多条折线",[18,147977,147979],{"className":20,"code":147978,"language":22,"meta":23,"style":23},"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",[25,147980,147981,147995,148005,148009,148038,148042,148050,148055,148093,148130,148134,148151,148167,148171],{"__ignoreMap":23},[28,147982,147983,147985,147987,147989,147991,147993],{"class":30,"line":31},[28,147984,30997],{"class":34},[28,147986,147592],{"class":38},[28,147988,35],{"class":34},[28,147990,147597],{"class":38},[28,147992,42],{"class":34},[28,147994,147602],{"class":38},[28,147996,147997,147999,148001,148003],{"class":30,"line":48},[28,147998,30997],{"class":34},[28,148000,147451],{"class":38},[28,148002,35],{"class":34},[28,148004,147456],{"class":38},[28,148006,148007],{"class":30,"line":84},[28,148008,2662],{"emptyLinePlaceholder":336},[28,148010,148011,148014,148016,148018,148020,148022,148024,148026,148028,148030,148032,148034,148036],{"class":30,"line":91},[28,148012,148013],{"class":38},"dates ",[28,148015,54],{"class":34},[28,148017,52482],{"class":38},[28,148019,147478],{"class":127},[28,148021,12697],{"class":38},[28,148023,147483],{"class":127},[28,148025,12697],{"class":38},[28,148027,147488],{"class":127},[28,148029,12697],{"class":38},[28,148031,147493],{"class":127},[28,148033,12697],{"class":38},[28,148035,147498],{"class":127},[28,148037,33502],{"class":38},[28,148039,148040],{"class":30,"line":97},[28,148041,2662],{"emptyLinePlaceholder":336},[28,148043,148044,148046,148048],{"class":30,"line":103},[28,148045,147465],{"class":38},[28,148047,54],{"class":34},[28,148049,147470],{"class":38},[28,148051,148052],{"class":30,"line":109},[28,148053,148054],{"class":38},"line.add_xaxis(dates)\n",[28,148056,148057,148059,148062,148064,148066,148068,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089,148091],{"class":30,"line":118},[28,148058,147505],{"class":38},[28,148060,148061],{"class":127},"\"线上销售\"",[28,148063,77774],{"class":38},[28,148065,713],{"class":60},[28,148067,12697],{"class":38},[28,148069,148070],{"class":60},"130",[28,148072,12697],{"class":38},[28,148074,1215],{"class":60},[28,148076,12697],{"class":38},[28,148078,21310],{"class":60},[28,148080,12697],{"class":38},[28,148082,1984],{"class":60},[28,148084,112415],{"class":38},[28,148086,147958],{"class":5478},[28,148088,54],{"class":34},[28,148090,31733],{"class":60},[28,148092,81],{"class":38},[28,148094,148095,148097,148100,148102,148104,148106,148108,148110,148112,148114,148116,148118,148120,148122,148124,148126,148128],{"class":30,"line":124},[28,148096,147505],{"class":38},[28,148098,148099],{"class":127},"\"线下销售\"",[28,148101,77774],{"class":38},[28,148103,1010],{"class":60},[28,148105,12697],{"class":38},[28,148107,1259],{"class":60},[28,148109,12697],{"class":38},[28,148111,713],{"class":60},[28,148113,12697],{"class":38},[28,148115,1215],{"class":60},[28,148117,12697],{"class":38},[28,148119,147525],{"class":60},[28,148121,112415],{"class":38},[28,148123,147958],{"class":5478},[28,148125,54],{"class":34},[28,148127,31733],{"class":60},[28,148129,81],{"class":38},[28,148131,148132],{"class":30,"line":131},[28,148133,147681],{"class":38},[28,148135,148136,148138,148140,148142,148144,148146,148149],{"class":30,"line":137},[28,148137,147686],{"class":5478},[28,148139,54],{"class":34},[28,148141,147691],{"class":38},[28,148143,51663],{"class":5478},[28,148145,54],{"class":34},[28,148147,148148],{"class":127},"\"线上线下销售趋势\"",[28,148150,38303],{"class":38},[28,148152,148153,148155,148157,148159,148161,148163,148165],{"class":30,"line":143},[28,148154,147742],{"class":5478},[28,148156,54],{"class":34},[28,148158,147747],{"class":38},[28,148160,147750],{"class":5478},[28,148162,54],{"class":34},[28,148164,147755],{"class":127},[28,148166,38303],{"class":38},[28,148168,148169],{"class":30,"line":149},[28,148170,81],{"class":38},[28,148172,148173,148175,148178],{"class":30,"line":1890},[28,148174,147537],{"class":38},[28,148176,148177],{"class":127},"\"sales.html\"",[28,148179,81],{"class":38},[14,148181,148182],{},"多条折线适合比较不同指标或不同地区。",[351,148184,148186],{"id":148185},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148188,148189,148190,24881],{},"假设 ",[25,148191,148192],{},"sales.json",[18,148194,148196],{"className":147258,"code":148195,"language":146005,"meta":23,"style":23},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[25,148197,148198,148203,148235,148263,148291],{"__ignoreMap":23},[28,148199,148200],{"class":30,"line":31},[28,148201,148202],{"class":38},"[\n",[28,148204,148205,148208,148211,148213,148215,148217,148220,148222,148224,148226,148229,148231,148233],{"class":30,"line":48},[28,148206,148207],{"class":38},"  {",[28,148209,148210],{"class":60},"\"date\"",[28,148212,51693],{"class":38},[28,148214,147478],{"class":127},[28,148216,12697],{"class":38},[28,148218,148219],{"class":60},"\"online\"",[28,148221,51693],{"class":38},[28,148223,713],{"class":60},[28,148225,12697],{"class":38},[28,148227,148228],{"class":60},"\"offline\"",[28,148230,51693],{"class":38},[28,148232,1010],{"class":60},[28,148234,5192],{"class":38},[28,148236,148237,148239,148241,148243,148245,148247,148249,148251,148253,148255,148257,148259,148261],{"class":30,"line":84},[28,148238,148207],{"class":38},[28,148240,148210],{"class":60},[28,148242,51693],{"class":38},[28,148244,147483],{"class":127},[28,148246,12697],{"class":38},[28,148248,148219],{"class":60},[28,148250,51693],{"class":38},[28,148252,148070],{"class":60},[28,148254,12697],{"class":38},[28,148256,148228],{"class":60},[28,148258,51693],{"class":38},[28,148260,1259],{"class":60},[28,148262,5192],{"class":38},[28,148264,148265,148267,148269,148271,148273,148275,148277,148279,148281,148283,148285,148287,148289],{"class":30,"line":91},[28,148266,148207],{"class":38},[28,148268,148210],{"class":60},[28,148270,51693],{"class":38},[28,148272,147488],{"class":127},[28,148274,12697],{"class":38},[28,148276,148219],{"class":60},[28,148278,51693],{"class":38},[28,148280,1215],{"class":60},[28,148282,12697],{"class":38},[28,148284,148228],{"class":60},[28,148286,51693],{"class":38},[28,148288,713],{"class":60},[28,148290,1830],{"class":38},[28,148292,148293],{"class":30,"line":97},[28,148294,33502],{"class":38},[14,148296,148297],{},"读取并绘图：",[18,148299,148301],{"className":20,"code":148300,"language":22,"meta":23,"style":23},"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",[25,148302,148303,148309,148323,148333,148337,148369,148382,148386,148394,148403,148412,148416,148428,148437,148446,148455,148459,148467,148471,148488,148505,148509,148526,148542,148546],{"__ignoreMap":23},[28,148304,148305,148307],{"class":30,"line":31},[28,148306,35],{"class":34},[28,148308,147304],{"class":38},[28,148310,148311,148313,148315,148317,148319,148321],{"class":30,"line":48},[28,148312,30997],{"class":34},[28,148314,147592],{"class":38},[28,148316,35],{"class":34},[28,148318,147597],{"class":38},[28,148320,42],{"class":34},[28,148322,147602],{"class":38},[28,148324,148325,148327,148329,148331],{"class":30,"line":84},[28,148326,30997],{"class":34},[28,148328,147451],{"class":38},[28,148330,35],{"class":34},[28,148332,147456],{"class":38},[28,148334,148335],{"class":30,"line":91},[28,148336,2662],{"emptyLinePlaceholder":336},[28,148338,148339,148341,148343,148345,148348,148350,148352,148354,148356,148358,148360,148362,148364,148367],{"class":30,"line":97},[28,148340,108046],{"class":34},[28,148342,147004],{"class":60},[28,148344,413],{"class":38},[28,148346,148347],{"class":127},"\"sales.json\"",[28,148349,12697],{"class":38},[28,148351,147014],{"class":127},[28,148353,12697],{"class":38},[28,148355,147019],{"class":5478},[28,148357,54],{"class":34},[28,148359,147024],{"class":127},[28,148361,13976],{"class":38},[28,148363,42],{"class":34},[28,148365,148366],{"class":5478}," file",[28,148368,4001],{"class":38},[28,148370,148371,148373,148375,148378,148380],{"class":30,"line":103},[28,148372,101634],{"class":38},[28,148374,54],{"class":34},[28,148376,148377],{"class":38}," json.load(",[28,148379,45610],{"class":5478},[28,148381,81],{"class":38},[28,148383,148384],{"class":30,"line":109},[28,148385,2662],{"emptyLinePlaceholder":336},[28,148387,148388,148390,148392],{"class":30,"line":118},[28,148389,148013],{"class":38},[28,148391,54],{"class":34},[28,148393,52094],{"class":38},[28,148395,148396,148399,148401],{"class":30,"line":124},[28,148397,148398],{"class":38},"online_sales ",[28,148400,54],{"class":34},[28,148402,52094],{"class":38},[28,148404,148405,148408,148410],{"class":30,"line":131},[28,148406,148407],{"class":38},"offline_sales ",[28,148409,54],{"class":34},[28,148411,52094],{"class":38},[28,148413,148414],{"class":30,"line":137},[28,148415,2662],{"emptyLinePlaceholder":336},[28,148417,148418,148420,148423,148425],{"class":30,"line":143},[28,148419,3287],{"class":34},[28,148421,148422],{"class":38}," item ",[28,148424,26306],{"class":34},[28,148426,148427],{"class":38}," data:\n",[28,148429,148430,148433,148435],{"class":30,"line":149},[28,148431,148432],{"class":38},"    dates.append(item[",[28,148434,148210],{"class":127},[28,148436,4919],{"class":38},[28,148438,148439,148442,148444],{"class":30,"line":1890},[28,148440,148441],{"class":38},"    online_sales.append(item[",[28,148443,148219],{"class":127},[28,148445,4919],{"class":38},[28,148447,148448,148451,148453],{"class":30,"line":1904},[28,148449,148450],{"class":38},"    offline_sales.append(item[",[28,148452,148228],{"class":127},[28,148454,4919],{"class":38},[28,148456,148457],{"class":30,"line":1909},[28,148458,2662],{"emptyLinePlaceholder":336},[28,148460,148461,148463,148465],{"class":30,"line":1915},[28,148462,147465],{"class":38},[28,148464,54],{"class":34},[28,148466,147470],{"class":38},[28,148468,148469],{"class":30,"line":1936},[28,148470,148054],{"class":38},[28,148472,148473,148475,148477,148480,148482,148484,148486],{"class":30,"line":1941},[28,148474,147505],{"class":38},[28,148476,148061],{"class":127},[28,148478,148479],{"class":38},", online_sales, ",[28,148481,147958],{"class":5478},[28,148483,54],{"class":34},[28,148485,31733],{"class":60},[28,148487,81],{"class":38},[28,148489,148490,148492,148494,148497,148499,148501,148503],{"class":30,"line":1955},[28,148491,147505],{"class":38},[28,148493,148099],{"class":127},[28,148495,148496],{"class":38},", offline_sales, ",[28,148498,147958],{"class":5478},[28,148500,54],{"class":34},[28,148502,31733],{"class":60},[28,148504,81],{"class":38},[28,148506,148507],{"class":30,"line":1960},[28,148508,147681],{"class":38},[28,148510,148511,148513,148515,148517,148519,148521,148524],{"class":30,"line":1989},[28,148512,147686],{"class":5478},[28,148514,54],{"class":34},[28,148516,147691],{"class":38},[28,148518,51663],{"class":5478},[28,148520,54],{"class":34},[28,148522,148523],{"class":127},"\"销售趋势\"",[28,148525,38303],{"class":38},[28,148527,148528,148530,148532,148534,148536,148538,148540],{"class":30,"line":1994},[28,148529,147742],{"class":5478},[28,148531,54],{"class":34},[28,148533,147747],{"class":38},[28,148535,147750],{"class":5478},[28,148537,54],{"class":34},[28,148539,147755],{"class":127},[28,148541,38303],{"class":38},[28,148543,148544],{"class":30,"line":2011},[28,148545,81],{"class":38},[28,148547,148548,148550,148552],{"class":30,"line":2016},[28,148549,147537],{"class":38},[28,148551,148177],{"class":127},[28,148553,81],{"class":38},[351,148555,148557],{"id":148556},"_109-数据清洗","10.9 数据清洗",[14,148559,148560],{},"真实数据经常不整齐，需要清洗。",[14,148562,148563],{},"常见问题：",[363,148565,148566,148569,148572,148575],{},[366,148567,148568],{},"数字是字符串。",[366,148570,148571],{},"字段缺失。",[366,148573,148574],{},"空值。",[366,148576,148577],{},"日期格式不统一。",[14,148579,15397],{},[18,148581,148583],{"className":20,"code":148582,"language":22,"meta":23,"style":23},"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",[25,148584,148585,148594,148617,148637,148658,148662,148666,148674,148683,148687,148698,148712,148721,148726,148730,148738,148748,148752,148759],{"__ignoreMap":23},[28,148586,148587,148590,148592],{"class":30,"line":31},[28,148588,148589],{"class":38},"raw_data ",[28,148591,54],{"class":34},[28,148593,55703],{"class":38},[28,148595,148596,148599,148601,148603,148605,148607,148610,148612,148615],{"class":30,"line":48},[28,148597,148598],{"class":38},"    {",[28,148600,148210],{"class":127},[28,148602,51693],{"class":38},[28,148604,147478],{"class":127},[28,148606,12697],{"class":38},[28,148608,148609],{"class":127},"\"sales\"",[28,148611,51693],{"class":38},[28,148613,148614],{"class":127},"\"100\"",[28,148616,5192],{"class":38},[28,148618,148619,148621,148623,148625,148627,148629,148631,148633,148635],{"class":30,"line":84},[28,148620,148598],{"class":38},[28,148622,148210],{"class":127},[28,148624,51693],{"class":38},[28,148626,147483],{"class":127},[28,148628,12697],{"class":38},[28,148630,148609],{"class":127},[28,148632,51693],{"class":38},[28,148634,7914],{"class":127},[28,148636,5192],{"class":38},[28,148638,148639,148641,148643,148645,148647,148649,148651,148653,148656],{"class":30,"line":91},[28,148640,148598],{"class":38},[28,148642,148210],{"class":127},[28,148644,51693],{"class":38},[28,148646,147488],{"class":127},[28,148648,12697],{"class":38},[28,148650,148609],{"class":127},[28,148652,51693],{"class":38},[28,148654,148655],{"class":127},"\"120\"",[28,148657,5192],{"class":38},[28,148659,148660],{"class":30,"line":97},[28,148661,33502],{"class":38},[28,148663,148664],{"class":30,"line":103},[28,148665,2662],{"emptyLinePlaceholder":336},[28,148667,148668,148670,148672],{"class":30,"line":109},[28,148669,148013],{"class":38},[28,148671,54],{"class":34},[28,148673,52094],{"class":38},[28,148675,148676,148679,148681],{"class":30,"line":118},[28,148677,148678],{"class":38},"sales ",[28,148680,54],{"class":34},[28,148682,52094],{"class":38},[28,148684,148685],{"class":30,"line":124},[28,148686,2662],{"emptyLinePlaceholder":336},[28,148688,148689,148691,148693,148695],{"class":30,"line":131},[28,148690,3287],{"class":34},[28,148692,148422],{"class":38},[28,148694,26306],{"class":34},[28,148696,148697],{"class":38}," raw_data:\n",[28,148699,148700,148703,148705,148708,148710],{"class":30,"line":137},[28,148701,148702],{"class":38},"    value ",[28,148704,54],{"class":34},[28,148706,148707],{"class":38}," item.get(",[28,148709,148609],{"class":127},[28,148711,81],{"class":38},[28,148713,148714,148716,148718],{"class":30,"line":143},[28,148715,3363],{"class":34},[28,148717,39186],{"class":34},[28,148719,148720],{"class":38}," value:\n",[28,148722,148723],{"class":30,"line":149},[28,148724,148725],{"class":34},"        continue\n",[28,148727,148728],{"class":30,"line":1890},[28,148729,2662],{"emptyLinePlaceholder":336},[28,148731,148732,148734,148736],{"class":30,"line":1904},[28,148733,148432],{"class":38},[28,148735,148210],{"class":127},[28,148737,4919],{"class":38},[28,148739,148740,148743,148745],{"class":30,"line":1909},[28,148741,148742],{"class":38},"    sales.append(",[28,148744,416],{"class":60},[28,148746,148747],{"class":38},"(value))\n",[28,148749,148750],{"class":30,"line":1915},[28,148751,2662],{"emptyLinePlaceholder":336},[28,148753,148754,148756],{"class":30,"line":1936},[28,148755,30675],{"class":60},[28,148757,148758],{"class":38},"(dates)\n",[28,148760,148761,148763],{"class":30,"line":1941},[28,148762,30675],{"class":60},[28,148764,148765],{"class":38},"(sales)\n",[351,148767,148769],{"id":148768},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[18,148771,148773],{"className":20,"code":148772,"language":22,"meta":23,"style":23},"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",[25,148774,148775,148789,148799,148803,148811,148832,148854,148876,148898,148920,148924,148928,148950,148971,148975,148983,148987,148991,149001,149010,149020,149036,149040,149044,149061,149077,149093,149109,149119,149123],{"__ignoreMap":23},[28,148776,148777,148779,148781,148783,148785,148787],{"class":30,"line":31},[28,148778,30997],{"class":34},[28,148780,147592],{"class":38},[28,148782,35],{"class":34},[28,148784,147597],{"class":38},[28,148786,42],{"class":34},[28,148788,147602],{"class":38},[28,148790,148791,148793,148795,148797],{"class":30,"line":48},[28,148792,30997],{"class":34},[28,148794,147451],{"class":38},[28,148796,35],{"class":34},[28,148798,147456],{"class":38},[28,148800,148801],{"class":30,"line":84},[28,148802,2662],{"emptyLinePlaceholder":336},[28,148804,148805,148807,148809],{"class":30,"line":91},[28,148806,148678],{"class":38},[28,148808,54],{"class":34},[28,148810,55703],{"class":38},[28,148812,148813,148815,148817,148819,148822,148824,148826,148828,148830],{"class":30,"line":97},[28,148814,148598],{"class":38},[28,148816,148210],{"class":127},[28,148818,51693],{"class":38},[28,148820,148821],{"class":127},"\"2024-10-01\"",[28,148823,12697],{"class":38},[28,148825,84340],{"class":127},[28,148827,51693],{"class":38},[28,148829,92279],{"class":60},[28,148831,5192],{"class":38},[28,148833,148834,148836,148838,148840,148843,148845,148847,148849,148852],{"class":30,"line":103},[28,148835,148598],{"class":38},[28,148837,148210],{"class":127},[28,148839,51693],{"class":38},[28,148841,148842],{"class":127},"\"2024-10-02\"",[28,148844,12697],{"class":38},[28,148846,84340],{"class":127},[28,148848,51693],{"class":38},[28,148850,148851],{"class":60},"1800",[28,148853,5192],{"class":38},[28,148855,148856,148858,148860,148862,148865,148867,148869,148871,148874],{"class":30,"line":109},[28,148857,148598],{"class":38},[28,148859,148210],{"class":127},[28,148861,51693],{"class":38},[28,148863,148864],{"class":127},"\"2024-10-03\"",[28,148866,12697],{"class":38},[28,148868,84340],{"class":127},[28,148870,51693],{"class":38},[28,148872,148873],{"class":60},"1500",[28,148875,5192],{"class":38},[28,148877,148878,148880,148882,148884,148887,148889,148891,148893,148896],{"class":30,"line":118},[28,148879,148598],{"class":38},[28,148881,148210],{"class":127},[28,148883,51693],{"class":38},[28,148885,148886],{"class":127},"\"2024-10-04\"",[28,148888,12697],{"class":38},[28,148890,84340],{"class":127},[28,148892,51693],{"class":38},[28,148894,148895],{"class":60},"2100",[28,148897,5192],{"class":38},[28,148899,148900,148902,148904,148906,148909,148911,148913,148915,148918],{"class":30,"line":124},[28,148901,148598],{"class":38},[28,148903,148210],{"class":127},[28,148905,51693],{"class":38},[28,148907,148908],{"class":127},"\"2024-10-05\"",[28,148910,12697],{"class":38},[28,148912,84340],{"class":127},[28,148914,51693],{"class":38},[28,148916,148917],{"class":60},"2600",[28,148919,5192],{"class":38},[28,148921,148922],{"class":30,"line":131},[28,148923,33502],{"class":38},[28,148925,148926],{"class":30,"line":137},[28,148927,2662],{"emptyLinePlaceholder":336},[28,148929,148930,148932,148934,148937,148939,148941,148943,148945,148947],{"class":30,"line":143},[28,148931,148013],{"class":38},[28,148933,54],{"class":34},[28,148935,148936],{"class":38}," [item[",[28,148938,148210],{"class":127},[28,148940,4705],{"class":38},[28,148942,3287],{"class":34},[28,148944,148422],{"class":38},[28,148946,26306],{"class":34},[28,148948,148949],{"class":38}," sales]\n",[28,148951,148952,148955,148957,148959,148961,148963,148965,148967,148969],{"class":30,"line":149},[28,148953,148954],{"class":38},"amounts ",[28,148956,54],{"class":34},[28,148958,148936],{"class":38},[28,148960,84340],{"class":127},[28,148962,4705],{"class":38},[28,148964,3287],{"class":34},[28,148966,148422],{"class":38},[28,148968,26306],{"class":34},[28,148970,148949],{"class":38},[28,148972,148973],{"class":30,"line":1890},[28,148974,2662],{"emptyLinePlaceholder":336},[28,148976,148977,148979,148981],{"class":30,"line":1904},[28,148978,147465],{"class":38},[28,148980,54],{"class":34},[28,148982,147470],{"class":38},[28,148984,148985],{"class":30,"line":1909},[28,148986,148054],{"class":38},[28,148988,148989],{"class":30,"line":1915},[28,148990,147862],{"class":38},[28,148992,148993,148995,148997,148999],{"class":30,"line":1936},[28,148994,147867],{"class":5478},[28,148996,54],{"class":34},[28,148998,147508],{"class":127},[28,149000,31723],{"class":38},[28,149002,149003,149005,149007],{"class":30,"line":1941},[28,149004,147878],{"class":5478},[28,149006,54],{"class":34},[28,149008,149009],{"class":38},"amounts,\n",[28,149011,149012,149014,149016,149018],{"class":30,"line":1955},[28,149013,147907],{"class":5478},[28,149015,54],{"class":34},[28,149017,31733],{"class":60},[28,149019,31723],{"class":38},[28,149021,149022,149024,149026,149028,149030,149032,149034],{"class":30,"line":1960},[28,149023,147918],{"class":5478},[28,149025,54],{"class":34},[28,149027,147923],{"class":38},[28,149029,147926],{"class":5478},[28,149031,54],{"class":34},[28,149033,31733],{"class":60},[28,149035,38303],{"class":38},[28,149037,149038],{"class":30,"line":1989},[28,149039,81],{"class":38},[28,149041,149042],{"class":30,"line":1994},[28,149043,147681],{"class":38},[28,149045,149046,149048,149050,149052,149054,149056,149059],{"class":30,"line":2011},[28,149047,147686],{"class":5478},[28,149049,54],{"class":34},[28,149051,147691],{"class":38},[28,149053,51663],{"class":5478},[28,149055,54],{"class":34},[28,149057,149058],{"class":127},"\"每日销售额\"",[28,149060,38303],{"class":38},[28,149062,149063,149065,149067,149069,149071,149073,149075],{"class":30,"line":2016},[28,149064,147705],{"class":5478},[28,149066,54],{"class":34},[28,149068,147710],{"class":38},[28,149070,80066],{"class":5478},[28,149072,54],{"class":34},[28,149074,147717],{"class":127},[28,149076,38303],{"class":38},[28,149078,149079,149081,149083,149085,149087,149089,149091],{"class":30,"line":2021},[28,149080,147724],{"class":5478},[28,149082,54],{"class":34},[28,149084,147710],{"class":38},[28,149086,80066],{"class":5478},[28,149088,54],{"class":34},[28,149090,147735],{"class":127},[28,149092,38303],{"class":38},[28,149094,149095,149097,149099,149101,149103,149105,149107],{"class":30,"line":2026},[28,149096,147742],{"class":5478},[28,149098,54],{"class":34},[28,149100,147747],{"class":38},[28,149102,147750],{"class":5478},[28,149104,54],{"class":34},[28,149106,147755],{"class":127},[28,149108,38303],{"class":38},[28,149110,149111,149114,149116],{"class":30,"line":2040},[28,149112,149113],{"class":5478},"    datazoom_opts",[28,149115,54],{"class":34},[28,149117,149118],{"class":38},"[opts.DataZoomOpts()],\n",[28,149120,149121],{"class":30,"line":2045},[28,149122,81],{"class":38},[28,149124,149125,149127,149130],{"class":30,"line":2839},[28,149126,147537],{"class":38},[28,149128,149129],{"class":127},"\"daily_sales.html\"",[28,149131,81],{"class":38},[14,149133,149134,149137],{},[25,149135,149136],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[351,149139,149141],{"id":149140},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149143,149144],{},"如果数据结构如下：",[18,149146,149148],{"className":20,"code":149147,"language":22,"meta":23,"style":23},"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",[25,149149,149150,149158,149166,149188,149209,149214,149221,149241,149261,149265],{"__ignoreMap":23},[28,149151,149152,149154,149156],{"class":30,"line":31},[28,149153,101871],{"class":38},[28,149155,54],{"class":34},[28,149157,15834],{"class":38},[28,149159,149160,149163],{"class":30,"line":48},[28,149161,149162],{"class":127},"    \"北京\"",[28,149164,149165],{"class":38},": [\n",[28,149167,149168,149170,149172,149174,149177,149179,149182,149184,149186],{"class":30,"line":84},[28,149169,5179],{"class":38},[28,149171,148210],{"class":127},[28,149173,51693],{"class":38},[28,149175,149176],{"class":127},"\"2024-01-01\"",[28,149178,12697],{"class":38},[28,149180,149181],{"class":127},"\"confirm\"",[28,149183,51693],{"class":38},[28,149185,845],{"class":60},[28,149187,5192],{"class":38},[28,149189,149190,149192,149194,149196,149199,149201,149203,149205,149207],{"class":30,"line":91},[28,149191,5179],{"class":38},[28,149193,148210],{"class":127},[28,149195,51693],{"class":38},[28,149197,149198],{"class":127},"\"2024-01-02\"",[28,149200,12697],{"class":38},[28,149202,149181],{"class":127},[28,149204,51693],{"class":38},[28,149206,897],{"class":60},[28,149208,5192],{"class":38},[28,149210,149211],{"class":30,"line":97},[28,149212,149213],{"class":38},"    ],\n",[28,149215,149216,149219],{"class":30,"line":103},[28,149217,149218],{"class":127},"    \"上海\"",[28,149220,149165],{"class":38},[28,149222,149223,149225,149227,149229,149231,149233,149235,149237,149239],{"class":30,"line":109},[28,149224,5179],{"class":38},[28,149226,148210],{"class":127},[28,149228,51693],{"class":38},[28,149230,149176],{"class":127},[28,149232,12697],{"class":38},[28,149234,149181],{"class":127},[28,149236,51693],{"class":38},[28,149238,794],{"class":60},[28,149240,5192],{"class":38},[28,149242,149243,149245,149247,149249,149251,149253,149255,149257,149259],{"class":30,"line":118},[28,149244,5179],{"class":38},[28,149246,148210],{"class":127},[28,149248,51693],{"class":38},[28,149250,149198],{"class":127},[28,149252,12697],{"class":38},[28,149254,149181],{"class":127},[28,149256,51693],{"class":38},[28,149258,67],{"class":60},[28,149260,5192],{"class":38},[28,149262,149263],{"class":30,"line":124},[28,149264,149213],{"class":38},[28,149266,149267],{"class":30,"line":131},[28,149268,1830],{"class":38},[14,149270,149271],{},"绘制多地区趋势：",[18,149273,149275],{"className":20,"code":149274,"language":22,"meta":23,"style":23},"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",[25,149276,149277,149291,149301,149305,149330,149334,149342,149346,149350,149362,149384,149397,149401,149405,149422,149438,149442],{"__ignoreMap":23},[28,149278,149279,149281,149283,149285,149287,149289],{"class":30,"line":31},[28,149280,30997],{"class":34},[28,149282,147592],{"class":38},[28,149284,35],{"class":34},[28,149286,147597],{"class":38},[28,149288,42],{"class":34},[28,149290,147602],{"class":38},[28,149292,149293,149295,149297,149299],{"class":30,"line":48},[28,149294,30997],{"class":34},[28,149296,147451],{"class":38},[28,149298,35],{"class":34},[28,149300,147456],{"class":38},[28,149302,149303],{"class":30,"line":84},[28,149304,2662],{"emptyLinePlaceholder":336},[28,149306,149307,149309,149311,149313,149315,149317,149319,149321,149323,149326,149328],{"class":30,"line":91},[28,149308,148013],{"class":38},[28,149310,54],{"class":34},[28,149312,148936],{"class":38},[28,149314,148210],{"class":127},[28,149316,4705],{"class":38},[28,149318,3287],{"class":34},[28,149320,148422],{"class":38},[28,149322,26306],{"class":34},[28,149324,149325],{"class":38}," data[",[28,149327,69525],{"class":127},[28,149329,77783],{"class":38},[28,149331,149332],{"class":30,"line":97},[28,149333,2662],{"emptyLinePlaceholder":336},[28,149335,149336,149338,149340],{"class":30,"line":103},[28,149337,147465],{"class":38},[28,149339,54],{"class":34},[28,149341,147470],{"class":38},[28,149343,149344],{"class":30,"line":109},[28,149345,148054],{"class":38},[28,149347,149348],{"class":30,"line":118},[28,149349,2662],{"emptyLinePlaceholder":336},[28,149351,149352,149354,149357,149359],{"class":30,"line":124},[28,149353,3287],{"class":34},[28,149355,149356],{"class":38}," city, records ",[28,149358,26306],{"class":34},[28,149360,149361],{"class":38}," data.items():\n",[28,149363,149364,149367,149369,149371,149373,149375,149377,149379,149381],{"class":30,"line":131},[28,149365,149366],{"class":38},"    values ",[28,149368,54],{"class":34},[28,149370,148936],{"class":38},[28,149372,149181],{"class":127},[28,149374,4705],{"class":38},[28,149376,3287],{"class":34},[28,149378,148422],{"class":38},[28,149380,26306],{"class":34},[28,149382,149383],{"class":38}," records]\n",[28,149385,149386,149389,149391,149393,149395],{"class":30,"line":137},[28,149387,149388],{"class":38},"    line.add_yaxis(city, values, ",[28,149390,147958],{"class":5478},[28,149392,54],{"class":34},[28,149394,31733],{"class":60},[28,149396,81],{"class":38},[28,149398,149399],{"class":30,"line":143},[28,149400,2662],{"emptyLinePlaceholder":336},[28,149402,149403],{"class":30,"line":149},[28,149404,147681],{"class":38},[28,149406,149407,149409,149411,149413,149415,149417,149420],{"class":30,"line":1890},[28,149408,147686],{"class":5478},[28,149410,54],{"class":34},[28,149412,147691],{"class":38},[28,149414,51663],{"class":5478},[28,149416,54],{"class":34},[28,149418,149419],{"class":127},"\"多地区趋势图\"",[28,149421,38303],{"class":38},[28,149423,149424,149426,149428,149430,149432,149434,149436],{"class":30,"line":1904},[28,149425,147742],{"class":5478},[28,149427,54],{"class":34},[28,149429,147747],{"class":38},[28,149431,147750],{"class":5478},[28,149433,54],{"class":34},[28,149435,147755],{"class":127},[28,149437,38303],{"class":38},[28,149439,149440],{"class":30,"line":1909},[28,149441,81],{"class":38},[28,149443,149444,149446,149449],{"class":30,"line":1915},[28,149445,147537],{"class":38},[28,149447,149448],{"class":127},"\"trend.html\"",[28,149450,81],{"class":38},[14,149452,149453],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[351,149455,149457],{"id":149456},"_1012-易错点","10.12 易错点",[363,149459,149460,149466,149472,149482,149488],{},[366,149461,149462,149465],{},[25,149463,149464],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[366,149467,149468,149471],{},[25,149469,149470],{},"render()"," 生成的是 HTML，不是图片。",[366,149473,149474,149475,149478,149479,28648],{},"JSON 字符串用 ",[25,149476,149477],{},"json.loads()","，JSON 文件用 ",[25,149480,149481],{},"json.load()",[366,149483,149484,149485,28648],{},"中文 JSON 保存时加 ",[25,149486,149487],{},"ensure_ascii=False",[366,149489,149490],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[351,149492,149494],{"id":149493},"_1013-本章练习","10.13 本章练习",[363,149496,149497,149500,149503,149506,149509],{},[366,149498,149499],{},"安装 pyecharts 并生成第一个折线图。",[366,149501,149502],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[366,149504,149505],{},"绘制两条折线，对比线上和线下销售额。",[366,149507,149508],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[366,149510,149511],{},"对含有空值的销售数据进行清洗后再绘图。",[328,149513,149514],{},"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":23,"searchDepth":48,"depth":48,"links":149516},[149517,149518,149519,149520,149521,149522,149523,149524,149525,149526,149527,149528,149529],{"id":147133,"depth":48,"text":147134},{"id":147208,"depth":48,"text":147209},{"id":147387,"depth":48,"text":147388},{"id":147438,"depth":48,"text":147439},{"id":147572,"depth":48,"text":147573},{"id":147848,"depth":48,"text":147849},{"id":147974,"depth":48,"text":147975},{"id":148185,"depth":48,"text":148186},{"id":148556,"depth":48,"text":148557},{"id":148768,"depth":48,"text":148769},{"id":149140,"depth":48,"text":149141},{"id":149456,"depth":48,"text":149457},{"id":149493,"depth":48,"text":149494},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147125,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149536,"title":149537,"body":149538,"description":333,"extension":334,"meta":151898,"navigation":336,"path":151899,"seo":151900,"stem":151901,"__hash__":151902},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149539,"toc":151875},[149540,149543,149547,149550,149553,149629,149632,149723,149726,149730,149733,149777,149790,149794,149797,149864,149867,149871,149874,149958,149966,149970,149975,150116,150119,150130,150136,150142,150256,150260,150263,150266,150519,150522,150526,150529,150633,150636,150640,150791,150795,150802,150915,150919,150922,151028,151031,151035,151038,151069,151072,151177,151180,151184,151188,151198,151266,151270,151277,151341,151344,151348,151354,151450,151459,151463,151787,151796,151800,151828,151832,151872],[10,149541,149537],{"id":149542},"_11-面向对象基础",[351,149544,149546],{"id":149545},"_111-什么是面向对象","11.1 什么是面向对象",[14,149548,149549],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149551,149552],{},"面向过程：",[18,149554,149556],{"className":20,"code":149555,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[25,149557,149558,149567,149575,149579,149589,149620,149624],{"__ignoreMap":23},[28,149559,149560,149562,149564],{"class":30,"line":31},[28,149561,146749],{"class":38},[28,149563,54],{"class":34},[28,149565,149566],{"class":127}," \"小明\"\n",[28,149568,149569,149571,149573],{"class":30,"line":48},[28,149570,146759],{"class":38},[28,149572,54],{"class":34},[28,149574,146764],{"class":60},[28,149576,149577],{"class":30,"line":84},[28,149578,2662],{"emptyLinePlaceholder":336},[28,149580,149581,149583,149586],{"class":30,"line":91},[28,149582,32203],{"class":34},[28,149584,149585],{"class":2225}," introduce",[28,149587,149588],{"class":38},"(name, age):\n",[28,149590,149591,149593,149595,149597,149600,149602,149604,149606,149609,149611,149613,149615,149618],{"class":30,"line":97},[28,149592,31559],{"class":60},[28,149594,413],{"class":38},[28,149596,462],{"class":34},[28,149598,149599],{"class":127},"\"我叫",[28,149601,1293],{"class":60},[28,149603,80066],{"class":38},[28,149605,1343],{"class":60},[28,149607,149608],{"class":127},"，今年",[28,149610,1293],{"class":60},[28,149612,70477],{"class":38},[28,149614,1343],{"class":60},[28,149616,149617],{"class":127},"岁\"",[28,149619,81],{"class":38},[28,149621,149622],{"class":30,"line":103},[28,149623,2662],{"emptyLinePlaceholder":336},[28,149625,149626],{"class":30,"line":109},[28,149627,149628],{"class":38},"introduce(name, age)\n",[14,149630,149631],{},"面向对象：",[18,149633,149635],{"className":20,"code":149634,"language":22,"meta":23,"style":23},"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",[25,149636,149637,149645,149653,149682,149686,149690,149700,149709,149718],{"__ignoreMap":23},[28,149638,149639,149641,149643],{"class":30,"line":31},[28,149640,14956],{"class":34},[28,149642,8160],{"class":2225},[28,149644,4001],{"class":38},[28,149646,149647,149649,149651],{"class":30,"line":48},[28,149648,31061],{"class":34},[28,149650,149585],{"class":2225},[28,149652,31067],{"class":38},[28,149654,149655,149657,149659,149661,149663,149666,149668,149670,149672,149674,149676,149678,149680],{"class":30,"line":84},[28,149656,32707],{"class":60},[28,149658,413],{"class":38},[28,149660,462],{"class":34},[28,149662,149599],{"class":127},[28,149664,149665],{"class":60},"{self",[28,149667,80557],{"class":38},[28,149669,1343],{"class":60},[28,149671,149608],{"class":127},[28,149673,149665],{"class":60},[28,149675,80569],{"class":38},[28,149677,1343],{"class":60},[28,149679,149617],{"class":127},[28,149681,81],{"class":38},[28,149683,149684],{"class":30,"line":91},[28,149685,2662],{"emptyLinePlaceholder":336},[28,149687,149688],{"class":30,"line":97},[28,149689,2662],{"emptyLinePlaceholder":336},[28,149691,149692,149695,149697],{"class":30,"line":103},[28,149693,149694],{"class":38},"student ",[28,149696,54],{"class":34},[28,149698,149699],{"class":38}," Student()\n",[28,149701,149702,149705,149707],{"class":30,"line":109},[28,149703,149704],{"class":38},"student.name ",[28,149706,54],{"class":34},[28,149708,149566],{"class":127},[28,149710,149711,149714,149716],{"class":30,"line":118},[28,149712,149713],{"class":38},"student.age ",[28,149715,54],{"class":34},[28,149717,146764],{"class":60},[28,149719,149720],{"class":30,"line":124},[28,149721,149722],{"class":38},"student.introduce()\n",[14,149724,149725],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[351,149727,149729],{"id":149728},"_112-类和对象","11.2 类和对象",[14,149731,149732],{},"类是模板，对象是根据模板创建出来的具体实例。",[18,149734,149736],{"className":20,"code":149735,"language":22,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[25,149737,149738,149746,149751,149755,149759,149768],{"__ignoreMap":23},[28,149739,149740,149742,149744],{"class":30,"line":31},[28,149741,14956],{"class":34},[28,149743,8160],{"class":2225},[28,149745,4001],{"class":38},[28,149747,149748],{"class":30,"line":48},[28,149749,149750],{"class":34},"    pass\n",[28,149752,149753],{"class":30,"line":84},[28,149754,2662],{"emptyLinePlaceholder":336},[28,149756,149757],{"class":30,"line":91},[28,149758,2662],{"emptyLinePlaceholder":336},[28,149760,149761,149764,149766],{"class":30,"line":97},[28,149762,149763],{"class":38},"student1 ",[28,149765,54],{"class":34},[28,149767,149699],{"class":38},[28,149769,149770,149773,149775],{"class":30,"line":103},[28,149771,149772],{"class":38},"student2 ",[28,149774,54],{"class":34},[28,149776,149699],{"class":38},[14,149778,149779,149782,149783,101231,149786,149789],{},[25,149780,149781],{},"Student"," 是类，",[25,149784,149785],{},"student1",[25,149787,149788],{},"student2"," 是对象。",[351,149791,149793],{"id":149792},"_113-属性","11.3 属性",[14,149795,149796],{},"属性是对象保存的数据。",[18,149798,149800],{"className":20,"code":149799,"language":22,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[25,149801,149802,149810,149814,149818,149822,149830,149838,149846,149850,149857],{"__ignoreMap":23},[28,149803,149804,149806,149808],{"class":30,"line":31},[28,149805,14956],{"class":34},[28,149807,8160],{"class":2225},[28,149809,4001],{"class":38},[28,149811,149812],{"class":30,"line":48},[28,149813,149750],{"class":34},[28,149815,149816],{"class":30,"line":84},[28,149817,2662],{"emptyLinePlaceholder":336},[28,149819,149820],{"class":30,"line":91},[28,149821,2662],{"emptyLinePlaceholder":336},[28,149823,149824,149826,149828],{"class":30,"line":97},[28,149825,149694],{"class":38},[28,149827,54],{"class":34},[28,149829,149699],{"class":38},[28,149831,149832,149834,149836],{"class":30,"line":103},[28,149833,149704],{"class":38},[28,149835,54],{"class":34},[28,149837,149566],{"class":127},[28,149839,149840,149842,149844],{"class":30,"line":109},[28,149841,149713],{"class":38},[28,149843,54],{"class":34},[28,149845,146764],{"class":60},[28,149847,149848],{"class":30,"line":118},[28,149849,2662],{"emptyLinePlaceholder":336},[28,149851,149852,149854],{"class":30,"line":124},[28,149853,30675],{"class":60},[28,149855,149856],{"class":38},"(student.name)\n",[28,149858,149859,149861],{"class":30,"line":131},[28,149860,30675],{"class":60},[28,149862,149863],{"class":38},"(student.age)\n",[14,149865,149866],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[351,149868,149870],{"id":149869},"_114-方法","11.4 方法",[14,149872,149873],{},"类中的函数叫方法。",[18,149875,149876],{"className":20,"code":149634,"language":22,"meta":23,"style":23},[25,149877,149878,149886,149894,149922,149926,149930,149938,149946,149954],{"__ignoreMap":23},[28,149879,149880,149882,149884],{"class":30,"line":31},[28,149881,14956],{"class":34},[28,149883,8160],{"class":2225},[28,149885,4001],{"class":38},[28,149887,149888,149890,149892],{"class":30,"line":48},[28,149889,31061],{"class":34},[28,149891,149585],{"class":2225},[28,149893,31067],{"class":38},[28,149895,149896,149898,149900,149902,149904,149906,149908,149910,149912,149914,149916,149918,149920],{"class":30,"line":84},[28,149897,32707],{"class":60},[28,149899,413],{"class":38},[28,149901,462],{"class":34},[28,149903,149599],{"class":127},[28,149905,149665],{"class":60},[28,149907,80557],{"class":38},[28,149909,1343],{"class":60},[28,149911,149608],{"class":127},[28,149913,149665],{"class":60},[28,149915,80569],{"class":38},[28,149917,1343],{"class":60},[28,149919,149617],{"class":127},[28,149921,81],{"class":38},[28,149923,149924],{"class":30,"line":91},[28,149925,2662],{"emptyLinePlaceholder":336},[28,149927,149928],{"class":30,"line":97},[28,149929,2662],{"emptyLinePlaceholder":336},[28,149931,149932,149934,149936],{"class":30,"line":103},[28,149933,149694],{"class":38},[28,149935,54],{"class":34},[28,149937,149699],{"class":38},[28,149939,149940,149942,149944],{"class":30,"line":109},[28,149941,149704],{"class":38},[28,149943,54],{"class":34},[28,149945,149566],{"class":127},[28,149947,149948,149950,149952],{"class":30,"line":118},[28,149949,149713],{"class":38},[28,149951,54],{"class":34},[28,149953,146764],{"class":60},[28,149955,149956],{"class":30,"line":124},[28,149957,149722],{"class":38},[14,149959,149960,149962,149963,149965],{},[25,149961,31083],{}," 表示当前对象。调用方法时不需要手动传入 ",[25,149964,31083],{},"，Python 会自动传。",[351,149967,149969],{"id":149968},"_115-构造方法__init__","11.5 构造方法__init__",[14,149971,149972,149974],{},[25,149973,31089],{}," 在对象创建时自动执行，用于初始化属性。",[18,149976,149978],{"className":20,"code":149977,"language":22,"meta":23,"style":23},"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",[25,149979,149980,149988,149997,150009,150021,150032,150036,150044,150082,150086,150090,150112],{"__ignoreMap":23},[28,149981,149982,149984,149986],{"class":30,"line":31},[28,149983,14956],{"class":34},[28,149985,8160],{"class":2225},[28,149987,4001],{"class":38},[28,149989,149990,149992,149994],{"class":30,"line":48},[28,149991,31061],{"class":34},[28,149993,31064],{"class":60},[28,149995,149996],{"class":38},"(self, name, age, score):\n",[28,149998,149999,150001,150004,150006],{"class":30,"line":84},[28,150000,31105],{"class":60},[28,150002,150003],{"class":38},".name ",[28,150005,54],{"class":34},[28,150007,150008],{"class":38}," name\n",[28,150010,150011,150013,150016,150018],{"class":30,"line":91},[28,150012,31105],{"class":60},[28,150014,150015],{"class":38},".age ",[28,150017,54],{"class":34},[28,150019,150020],{"class":38}," age\n",[28,150022,150023,150025,150028,150030],{"class":30,"line":97},[28,150024,31105],{"class":60},[28,150026,150027],{"class":38},".score ",[28,150029,54],{"class":34},[28,150031,1844],{"class":38},[28,150033,150034],{"class":30,"line":103},[28,150035,2662],{"emptyLinePlaceholder":336},[28,150037,150038,150040,150042],{"class":30,"line":109},[28,150039,31061],{"class":34},[28,150041,149585],{"class":2225},[28,150043,31067],{"class":38},[28,150045,150046,150048,150050,150052,150054,150056,150058,150060,150062,150064,150066,150068,150071,150073,150076,150078,150080],{"class":30,"line":118},[28,150047,32707],{"class":60},[28,150049,413],{"class":38},[28,150051,462],{"class":34},[28,150053,149599],{"class":127},[28,150055,149665],{"class":60},[28,150057,80557],{"class":38},[28,150059,1343],{"class":60},[28,150061,149608],{"class":127},[28,150063,149665],{"class":60},[28,150065,80569],{"class":38},[28,150067,1343],{"class":60},[28,150069,150070],{"class":127},"岁，成绩",[28,150072,149665],{"class":60},[28,150074,150075],{"class":38},".score",[28,150077,1343],{"class":60},[28,150079,654],{"class":127},[28,150081,81],{"class":38},[28,150083,150084],{"class":30,"line":124},[28,150085,2662],{"emptyLinePlaceholder":336},[28,150087,150088],{"class":30,"line":131},[28,150089,2662],{"emptyLinePlaceholder":336},[28,150091,150092,150094,150096,150099,150102,150104,150106,150108,150110],{"class":30,"line":137},[28,150093,149694],{"class":38},[28,150095,54],{"class":34},[28,150097,150098],{"class":38}," Student(",[28,150100,150101],{"class":127},"\"小明\"",[28,150103,12697],{"class":38},[28,150105,1048],{"class":60},[28,150107,12697],{"class":38},[28,150109,1386],{"class":60},[28,150111,81],{"class":38},[28,150113,150114],{"class":30,"line":143},[28,150115,149722],{"class":38},[14,150117,150118],{},"构造方法的好处：",[363,150120,150121,150124,150127],{},[366,150122,150123],{},"创建对象时必须提供必要数据。",[366,150125,150126],{},"属性初始化集中，不容易漏。",[366,150128,150129],{},"对象状态更完整。",[351,150131,150133,150134],{"id":150132},"_116-str","11.6 ",[555,150135,1567],{},[14,150137,150138,150139,28648],{},"直接打印对象时，默认输出不直观。可以定义 ",[25,150140,150141],{},"__str__",[18,150143,150145],{"className":20,"code":150144,"language":22,"meta":23,"style":23},"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",[25,150146,150147,150155,150164,150174,150184,150188,150197,150225,150229,150233,150249],{"__ignoreMap":23},[28,150148,150149,150151,150153],{"class":30,"line":31},[28,150150,14956],{"class":34},[28,150152,8160],{"class":2225},[28,150154,4001],{"class":38},[28,150156,150157,150159,150161],{"class":30,"line":48},[28,150158,31061],{"class":34},[28,150160,31064],{"class":60},[28,150162,150163],{"class":38},"(self, name, age):\n",[28,150165,150166,150168,150170,150172],{"class":30,"line":84},[28,150167,31105],{"class":60},[28,150169,150003],{"class":38},[28,150171,54],{"class":34},[28,150173,150008],{"class":38},[28,150175,150176,150178,150180,150182],{"class":30,"line":91},[28,150177,31105],{"class":60},[28,150179,150015],{"class":38},[28,150181,54],{"class":34},[28,150183,150020],{"class":38},[28,150185,150186],{"class":30,"line":97},[28,150187,2662],{"emptyLinePlaceholder":336},[28,150189,150190,150192,150195],{"class":30,"line":103},[28,150191,31061],{"class":34},[28,150193,150194],{"class":60}," __str__",[28,150196,31067],{"class":38},[28,150198,150199,150201,150204,150207,150209,150211,150213,150216,150218,150220,150222],{"class":30,"line":109},[28,150200,15014],{"class":34},[28,150202,150203],{"class":34}," f",[28,150205,150206],{"class":127},"\"Student(name=",[28,150208,149665],{"class":60},[28,150210,80557],{"class":38},[28,150212,1343],{"class":60},[28,150214,150215],{"class":127},", age=",[28,150217,149665],{"class":60},[28,150219,80569],{"class":38},[28,150221,1343],{"class":60},[28,150223,150224],{"class":127},")\"\n",[28,150226,150227],{"class":30,"line":118},[28,150228,2662],{"emptyLinePlaceholder":336},[28,150230,150231],{"class":30,"line":124},[28,150232,2662],{"emptyLinePlaceholder":336},[28,150234,150235,150237,150239,150241,150243,150245,150247],{"class":30,"line":131},[28,150236,149694],{"class":38},[28,150238,54],{"class":34},[28,150240,150098],{"class":38},[28,150242,150101],{"class":127},[28,150244,12697],{"class":38},[28,150246,1048],{"class":60},[28,150248,81],{"class":38},[28,150250,150251,150253],{"class":30,"line":137},[28,150252,30675],{"class":60},[28,150254,150255],{"class":38},"(student)\n",[351,150257,150259],{"id":150258},"_117-封装","11.7 封装",[14,150261,150262],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150264,150265],{},"Python 中以双下划线开头的属性通常视为私有属性。",[18,150267,150269],{"className":20,"code":150268,"language":22,"meta":23,"style":23},"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",[25,150270,150271,150280,150289,150301,150313,150317,150326,150335,150339,150349,150362,150373,150378,150389,150393,150402,150414,150425,150429,150442,150453,150457,150468,150472,150476,150494,150503,150512],{"__ignoreMap":23},[28,150272,150273,150275,150278],{"class":30,"line":31},[28,150274,14956],{"class":34},[28,150276,150277],{"class":2225}," Account",[28,150279,4001],{"class":38},[28,150281,150282,150284,150286],{"class":30,"line":48},[28,150283,31061],{"class":34},[28,150285,31064],{"class":60},[28,150287,150288],{"class":38},"(self, owner, balance):\n",[28,150290,150291,150293,150296,150298],{"class":30,"line":84},[28,150292,31105],{"class":60},[28,150294,150295],{"class":38},".owner ",[28,150297,54],{"class":34},[28,150299,150300],{"class":38}," owner\n",[28,150302,150303,150305,150308,150310],{"class":30,"line":91},[28,150304,31105],{"class":60},[28,150306,150307],{"class":38},".__balance ",[28,150309,54],{"class":34},[28,150311,150312],{"class":38}," balance\n",[28,150314,150315],{"class":30,"line":97},[28,150316,2662],{"emptyLinePlaceholder":336},[28,150318,150319,150321,150324],{"class":30,"line":103},[28,150320,31061],{"class":34},[28,150322,150323],{"class":2225}," get_balance",[28,150325,31067],{"class":38},[28,150327,150328,150330,150332],{"class":30,"line":109},[28,150329,15014],{"class":34},[28,150331,39129],{"class":60},[28,150333,150334],{"class":38},".__balance\n",[28,150336,150337],{"class":30,"line":118},[28,150338,2662],{"emptyLinePlaceholder":336},[28,150340,150341,150343,150346],{"class":30,"line":124},[28,150342,31061],{"class":34},[28,150344,150345],{"class":2225}," deposit",[28,150347,150348],{"class":38},"(self, money):\n",[28,150350,150351,150353,150356,150358,150360],{"class":30,"line":131},[28,150352,2759],{"class":34},[28,150354,150355],{"class":38}," money ",[28,150357,1853],{"class":34},[28,150359,4355],{"class":60},[28,150361,4001],{"class":38},[28,150363,150364,150366,150368,150371],{"class":30,"line":137},[28,150365,34906],{"class":60},[28,150367,413],{"class":38},[28,150369,150370],{"class":127},"\"存款金额必须大于0\"",[28,150372,81],{"class":38},[28,150374,150375],{"class":30,"line":143},[28,150376,150377],{"class":34},"            return\n",[28,150379,150380,150382,150384,150386],{"class":30,"line":149},[28,150381,31105],{"class":60},[28,150383,150307],{"class":38},[28,150385,9739],{"class":34},[28,150387,150388],{"class":38}," money\n",[28,150390,150391],{"class":30,"line":1890},[28,150392,2662],{"emptyLinePlaceholder":336},[28,150394,150395,150397,150400],{"class":30,"line":1904},[28,150396,31061],{"class":34},[28,150398,150399],{"class":2225}," withdraw",[28,150401,150348],{"class":38},[28,150403,150404,150406,150408,150410,150412],{"class":30,"line":1909},[28,150405,2759],{"class":34},[28,150407,150355],{"class":38},[28,150409,1853],{"class":34},[28,150411,4355],{"class":60},[28,150413,4001],{"class":38},[28,150415,150416,150418,150420,150423],{"class":30,"line":1915},[28,150417,34906],{"class":60},[28,150419,413],{"class":38},[28,150421,150422],{"class":127},"\"取款金额必须大于0\"",[28,150424,81],{"class":38},[28,150426,150427],{"class":30,"line":1936},[28,150428,150377],{"class":34},[28,150430,150431,150433,150435,150437,150439],{"class":30,"line":1941},[28,150432,2759],{"class":34},[28,150434,150355],{"class":38},[28,150436,1357],{"class":34},[28,150438,39129],{"class":60},[28,150440,150441],{"class":38},".__balance:\n",[28,150443,150444,150446,150448,150451],{"class":30,"line":1955},[28,150445,34906],{"class":60},[28,150447,413],{"class":38},[28,150449,150450],{"class":127},"\"余额不足\"",[28,150452,81],{"class":38},[28,150454,150455],{"class":30,"line":1960},[28,150456,150377],{"class":34},[28,150458,150459,150461,150463,150466],{"class":30,"line":1989},[28,150460,31105],{"class":60},[28,150462,150307],{"class":38},[28,150464,150465],{"class":34},"-=",[28,150467,150388],{"class":38},[28,150469,150470],{"class":30,"line":1994},[28,150471,2662],{"emptyLinePlaceholder":336},[28,150473,150474],{"class":30,"line":2011},[28,150475,2662],{"emptyLinePlaceholder":336},[28,150477,150478,150481,150483,150486,150488,150490,150492],{"class":30,"line":2016},[28,150479,150480],{"class":38},"account ",[28,150482,54],{"class":34},[28,150484,150485],{"class":38}," Account(",[28,150487,150101],{"class":127},[28,150489,12697],{"class":38},[28,150491,6672],{"class":60},[28,150493,81],{"class":38},[28,150495,150496,150499,150501],{"class":30,"line":2021},[28,150497,150498],{"class":38},"account.deposit(",[28,150500,1984],{"class":60},[28,150502,81],{"class":38},[28,150504,150505,150508,150510],{"class":30,"line":2026},[28,150506,150507],{"class":38},"account.withdraw(",[28,150509,713],{"class":60},[28,150511,81],{"class":38},[28,150513,150514,150516],{"class":30,"line":2040},[28,150515,30675],{"class":60},[28,150517,150518],{"class":38},"(account.get_balance())\n",[14,150520,150521],{},"封装的意义是避免外部随意修改内部状态。",[351,150523,150525],{"id":150524},"_118-继承","11.8 继承",[14,150527,150528],{},"继承可以让子类复用父类的属性和方法。",[18,150530,150532],{"className":20,"code":150531,"language":22,"meta":23,"style":23},"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",[25,150533,150534,150543,150552,150563,150567,150571,150585,150594,150605,150609,150613,150623,150628],{"__ignoreMap":23},[28,150535,150536,150538,150541],{"class":30,"line":31},[28,150537,14956],{"class":34},[28,150539,150540],{"class":2225}," Animal",[28,150542,4001],{"class":38},[28,150544,150545,150547,150550],{"class":30,"line":48},[28,150546,31061],{"class":34},[28,150548,150549],{"class":2225}," eat",[28,150551,31067],{"class":38},[28,150553,150554,150556,150558,150561],{"class":30,"line":84},[28,150555,32707],{"class":60},[28,150557,413],{"class":38},[28,150559,150560],{"class":127},"\"吃东西\"",[28,150562,81],{"class":38},[28,150564,150565],{"class":30,"line":91},[28,150566,2662],{"emptyLinePlaceholder":336},[28,150568,150569],{"class":30,"line":97},[28,150570,2662],{"emptyLinePlaceholder":336},[28,150572,150573,150575,150578,150580,150583],{"class":30,"line":103},[28,150574,14956],{"class":34},[28,150576,150577],{"class":2225}," Dog",[28,150579,413],{"class":38},[28,150581,150582],{"class":2225},"Animal",[28,150584,31046],{"class":38},[28,150586,150587,150589,150592],{"class":30,"line":109},[28,150588,31061],{"class":34},[28,150590,150591],{"class":2225}," bark",[28,150593,31067],{"class":38},[28,150595,150596,150598,150600,150603],{"class":30,"line":118},[28,150597,32707],{"class":60},[28,150599,413],{"class":38},[28,150601,150602],{"class":127},"\"汪汪\"",[28,150604,81],{"class":38},[28,150606,150607],{"class":30,"line":124},[28,150608,2662],{"emptyLinePlaceholder":336},[28,150610,150611],{"class":30,"line":131},[28,150612,2662],{"emptyLinePlaceholder":336},[28,150614,150615,150618,150620],{"class":30,"line":137},[28,150616,150617],{"class":38},"dog ",[28,150619,54],{"class":34},[28,150621,150622],{"class":38}," Dog()\n",[28,150624,150625],{"class":30,"line":143},[28,150626,150627],{"class":38},"dog.eat()\n",[28,150629,150630],{"class":30,"line":149},[28,150631,150632],{"class":38},"dog.bark()\n",[14,150634,150635],{},"子类可以扩展新方法，也可以重写父类方法。",[351,150637,150639],{"id":150638},"_119-方法重写","11.9 方法重写",[18,150641,150643],{"className":20,"code":150642,"language":22,"meta":23,"style":23},"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",[25,150644,150645,150653,150662,150673,150677,150681,150693,150701,150711,150715,150719,150732,150740,150751,150755,150759,150767,150777,150781,150786],{"__ignoreMap":23},[28,150646,150647,150649,150651],{"class":30,"line":31},[28,150648,14956],{"class":34},[28,150650,150540],{"class":2225},[28,150652,4001],{"class":38},[28,150654,150655,150657,150660],{"class":30,"line":48},[28,150656,31061],{"class":34},[28,150658,150659],{"class":2225}," speak",[28,150661,31067],{"class":38},[28,150663,150664,150666,150668,150671],{"class":30,"line":84},[28,150665,32707],{"class":60},[28,150667,413],{"class":38},[28,150669,150670],{"class":127},"\"动物叫\"",[28,150672,81],{"class":38},[28,150674,150675],{"class":30,"line":91},[28,150676,2662],{"emptyLinePlaceholder":336},[28,150678,150679],{"class":30,"line":97},[28,150680,2662],{"emptyLinePlaceholder":336},[28,150682,150683,150685,150687,150689,150691],{"class":30,"line":103},[28,150684,14956],{"class":34},[28,150686,150577],{"class":2225},[28,150688,413],{"class":38},[28,150690,150582],{"class":2225},[28,150692,31046],{"class":38},[28,150694,150695,150697,150699],{"class":30,"line":109},[28,150696,31061],{"class":34},[28,150698,150659],{"class":2225},[28,150700,31067],{"class":38},[28,150702,150703,150705,150707,150709],{"class":30,"line":118},[28,150704,32707],{"class":60},[28,150706,413],{"class":38},[28,150708,150602],{"class":127},[28,150710,81],{"class":38},[28,150712,150713],{"class":30,"line":124},[28,150714,2662],{"emptyLinePlaceholder":336},[28,150716,150717],{"class":30,"line":131},[28,150718,2662],{"emptyLinePlaceholder":336},[28,150720,150721,150723,150726,150728,150730],{"class":30,"line":137},[28,150722,14956],{"class":34},[28,150724,150725],{"class":2225}," Cat",[28,150727,413],{"class":38},[28,150729,150582],{"class":2225},[28,150731,31046],{"class":38},[28,150733,150734,150736,150738],{"class":30,"line":143},[28,150735,31061],{"class":34},[28,150737,150659],{"class":2225},[28,150739,31067],{"class":38},[28,150741,150742,150744,150746,150749],{"class":30,"line":149},[28,150743,32707],{"class":60},[28,150745,413],{"class":38},[28,150747,150748],{"class":127},"\"喵喵\"",[28,150750,81],{"class":38},[28,150752,150753],{"class":30,"line":1890},[28,150754,2662],{"emptyLinePlaceholder":336},[28,150756,150757],{"class":30,"line":1904},[28,150758,2662],{"emptyLinePlaceholder":336},[28,150760,150761,150763,150765],{"class":30,"line":1909},[28,150762,150617],{"class":38},[28,150764,54],{"class":34},[28,150766,150622],{"class":38},[28,150768,150769,150772,150774],{"class":30,"line":1915},[28,150770,150771],{"class":38},"cat ",[28,150773,54],{"class":34},[28,150775,150776],{"class":38}," Cat()\n",[28,150778,150779],{"class":30,"line":1936},[28,150780,2662],{"emptyLinePlaceholder":336},[28,150782,150783],{"class":30,"line":1941},[28,150784,150785],{"class":38},"dog.speak()\n",[28,150787,150788],{"class":30,"line":1955},[28,150789,150790],{"class":38},"cat.speak()\n",[351,150792,150794],{"id":150793},"_1110-super","11.10 super",[14,150796,150797,150798,150801],{},"子类可以通过 ",[25,150799,150800],{},"super()"," 调用父类方法。",[18,150803,150805],{"className":20,"code":150804,"language":22,"meta":23,"style":23},"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",[25,150806,150807,150815,150824,150834,150838,150842,150854,150863,150874,150884,150888,150892,150908],{"__ignoreMap":23},[28,150808,150809,150811,150813],{"class":30,"line":31},[28,150810,14956],{"class":34},[28,150812,15831],{"class":2225},[28,150814,4001],{"class":38},[28,150816,150817,150819,150821],{"class":30,"line":48},[28,150818,31061],{"class":34},[28,150820,31064],{"class":60},[28,150822,150823],{"class":38},"(self, name):\n",[28,150825,150826,150828,150830,150832],{"class":30,"line":84},[28,150827,31105],{"class":60},[28,150829,150003],{"class":38},[28,150831,54],{"class":34},[28,150833,150008],{"class":38},[28,150835,150836],{"class":30,"line":91},[28,150837,2662],{"emptyLinePlaceholder":336},[28,150839,150840],{"class":30,"line":97},[28,150841,2662],{"emptyLinePlaceholder":336},[28,150843,150844,150846,150848,150850,150852],{"class":30,"line":103},[28,150845,14956],{"class":34},[28,150847,8160],{"class":2225},[28,150849,413],{"class":38},[28,150851,19308],{"class":2225},[28,150853,31046],{"class":38},[28,150855,150856,150858,150860],{"class":30,"line":109},[28,150857,31061],{"class":34},[28,150859,31064],{"class":60},[28,150861,150862],{"class":38},"(self, name, score):\n",[28,150864,150865,150867,150869,150871],{"class":30,"line":118},[28,150866,31077],{"class":60},[28,150868,17523],{"class":38},[28,150870,31089],{"class":60},[28,150872,150873],{"class":38},"(name)\n",[28,150875,150876,150878,150880,150882],{"class":30,"line":124},[28,150877,31105],{"class":60},[28,150879,150027],{"class":38},[28,150881,54],{"class":34},[28,150883,1844],{"class":38},[28,150885,150886],{"class":30,"line":131},[28,150887,2662],{"emptyLinePlaceholder":336},[28,150889,150890],{"class":30,"line":137},[28,150891,2662],{"emptyLinePlaceholder":336},[28,150893,150894,150896,150898,150900,150902,150904,150906],{"class":30,"line":143},[28,150895,149694],{"class":38},[28,150897,54],{"class":34},[28,150899,150098],{"class":38},[28,150901,150101],{"class":127},[28,150903,12697],{"class":38},[28,150905,1386],{"class":60},[28,150907,81],{"class":38},[28,150909,150910,150912],{"class":30,"line":149},[28,150911,30675],{"class":60},[28,150913,150914],{"class":38},"(student.name, student.score)\n",[351,150916,150918],{"id":150917},"_1111-多态","11.11 多态",[14,150920,150921],{},"多态指不同对象响应同一个方法，表现出不同结果。",[18,150923,150925],{"className":20,"code":150924,"language":22,"meta":23,"style":23},"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",[25,150926,150927,150935,150943,150953,150957,150961,150969,150977,150987,150991,150995,151005,151010,151014,151018,151023],{"__ignoreMap":23},[28,150928,150929,150931,150933],{"class":30,"line":31},[28,150930,14956],{"class":34},[28,150932,150577],{"class":2225},[28,150934,4001],{"class":38},[28,150936,150937,150939,150941],{"class":30,"line":48},[28,150938,31061],{"class":34},[28,150940,150659],{"class":2225},[28,150942,31067],{"class":38},[28,150944,150945,150947,150949,150951],{"class":30,"line":84},[28,150946,32707],{"class":60},[28,150948,413],{"class":38},[28,150950,150602],{"class":127},[28,150952,81],{"class":38},[28,150954,150955],{"class":30,"line":91},[28,150956,2662],{"emptyLinePlaceholder":336},[28,150958,150959],{"class":30,"line":97},[28,150960,2662],{"emptyLinePlaceholder":336},[28,150962,150963,150965,150967],{"class":30,"line":103},[28,150964,14956],{"class":34},[28,150966,150725],{"class":2225},[28,150968,4001],{"class":38},[28,150970,150971,150973,150975],{"class":30,"line":109},[28,150972,31061],{"class":34},[28,150974,150659],{"class":2225},[28,150976,31067],{"class":38},[28,150978,150979,150981,150983,150985],{"class":30,"line":118},[28,150980,32707],{"class":60},[28,150982,413],{"class":38},[28,150984,150748],{"class":127},[28,150986,81],{"class":38},[28,150988,150989],{"class":30,"line":124},[28,150990,2662],{"emptyLinePlaceholder":336},[28,150992,150993],{"class":30,"line":131},[28,150994,2662],{"emptyLinePlaceholder":336},[28,150996,150997,150999,151002],{"class":30,"line":137},[28,150998,32203],{"class":34},[28,151000,151001],{"class":2225}," make_sound",[28,151003,151004],{"class":38},"(animal):\n",[28,151006,151007],{"class":30,"line":143},[28,151008,151009],{"class":38},"    animal.speak()\n",[28,151011,151012],{"class":30,"line":149},[28,151013,2662],{"emptyLinePlaceholder":336},[28,151015,151016],{"class":30,"line":1890},[28,151017,2662],{"emptyLinePlaceholder":336},[28,151019,151020],{"class":30,"line":1904},[28,151021,151022],{"class":38},"make_sound(Dog())\n",[28,151024,151025],{"class":30,"line":1909},[28,151026,151027],{"class":38},"make_sound(Cat())\n",[14,151029,151030],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[351,151032,151034],{"id":151033},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151036,151037],{},"实例属性属于对象：",[18,151039,151041],{"className":20,"code":151040,"language":22,"meta":23,"style":23},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[25,151042,151043,151051,151059],{"__ignoreMap":23},[28,151044,151045,151047,151049],{"class":30,"line":31},[28,151046,14956],{"class":34},[28,151048,8160],{"class":2225},[28,151050,4001],{"class":38},[28,151052,151053,151055,151057],{"class":30,"line":48},[28,151054,31061],{"class":34},[28,151056,31064],{"class":60},[28,151058,150823],{"class":38},[28,151060,151061,151063,151065,151067],{"class":30,"line":84},[28,151062,31105],{"class":60},[28,151064,150003],{"class":38},[28,151066,54],{"class":34},[28,151068,150008],{"class":38},[14,151070,151071],{},"类属性属于类，所有对象共享：",[18,151073,151075],{"className":20,"code":151074,"language":22,"meta":23,"style":23},"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",[25,151076,151077,151085,151095,151099,151107,151117,151121,151125,151138,151152,151156,151163,151170],{"__ignoreMap":23},[28,151078,151079,151081,151083],{"class":30,"line":31},[28,151080,14956],{"class":34},[28,151082,8160],{"class":2225},[28,151084,4001],{"class":38},[28,151086,151087,151090,151092],{"class":30,"line":48},[28,151088,151089],{"class":38},"    school ",[28,151091,54],{"class":34},[28,151093,151094],{"class":127}," \"黑马学校\"\n",[28,151096,151097],{"class":30,"line":84},[28,151098,2662],{"emptyLinePlaceholder":336},[28,151100,151101,151103,151105],{"class":30,"line":91},[28,151102,31061],{"class":34},[28,151104,31064],{"class":60},[28,151106,150823],{"class":38},[28,151108,151109,151111,151113,151115],{"class":30,"line":97},[28,151110,31105],{"class":60},[28,151112,150003],{"class":38},[28,151114,54],{"class":34},[28,151116,150008],{"class":38},[28,151118,151119],{"class":30,"line":103},[28,151120,2662],{"emptyLinePlaceholder":336},[28,151122,151123],{"class":30,"line":109},[28,151124,2662],{"emptyLinePlaceholder":336},[28,151126,151127,151130,151132,151134,151136],{"class":30,"line":118},[28,151128,151129],{"class":38},"s1 ",[28,151131,54],{"class":34},[28,151133,150098],{"class":38},[28,151135,150101],{"class":127},[28,151137,81],{"class":38},[28,151139,151140,151143,151145,151147,151150],{"class":30,"line":124},[28,151141,151142],{"class":38},"s2 ",[28,151144,54],{"class":34},[28,151146,150098],{"class":38},[28,151148,151149],{"class":127},"\"小红\"",[28,151151,81],{"class":38},[28,151153,151154],{"class":30,"line":131},[28,151155,2662],{"emptyLinePlaceholder":336},[28,151157,151158,151160],{"class":30,"line":137},[28,151159,30675],{"class":60},[28,151161,151162],{"class":38},"(s1.school)\n",[28,151164,151165,151167],{"class":30,"line":143},[28,151166,30675],{"class":60},[28,151168,151169],{"class":38},"(s2.school)\n",[28,151171,151172,151174],{"class":30,"line":149},[28,151173,30675],{"class":60},[28,151175,151176],{"class":38},"(Student.school)\n",[14,151178,151179],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[351,151181,151183],{"id":151182},"_1113-类方法和静态方法","11.13 类方法和静态方法",[380,151185,151187],{"id":151186},"_11131-类方法","11.13.1 类方法",[14,151189,151190,151191,151194,151195,28648],{},"类方法使用 ",[25,151192,151193],{},"@classmethod","，第一个参数通常是 ",[25,151196,151197],{},"cls",[18,151199,151201],{"className":20,"code":151200,"language":22,"meta":23,"style":23},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[25,151202,151203,151211,151219,151223,151231,151241,151251,151255,151259],{"__ignoreMap":23},[28,151204,151205,151207,151209],{"class":30,"line":31},[28,151206,14956],{"class":34},[28,151208,8160],{"class":2225},[28,151210,4001],{"class":38},[28,151212,151213,151215,151217],{"class":30,"line":48},[28,151214,151089],{"class":38},[28,151216,54],{"class":34},[28,151218,151094],{"class":127},[28,151220,151221],{"class":30,"line":84},[28,151222,2662],{"emptyLinePlaceholder":336},[28,151224,151225,151228],{"class":30,"line":91},[28,151226,151227],{"class":2225},"    @",[28,151229,151230],{"class":60},"classmethod\n",[28,151232,151233,151235,151238],{"class":30,"line":97},[28,151234,31061],{"class":34},[28,151236,151237],{"class":2225}," get_school",[28,151239,151240],{"class":38},"(cls):\n",[28,151242,151243,151245,151248],{"class":30,"line":103},[28,151244,15014],{"class":34},[28,151246,151247],{"class":60}," cls",[28,151249,151250],{"class":38},".school\n",[28,151252,151253],{"class":30,"line":109},[28,151254,2662],{"emptyLinePlaceholder":336},[28,151256,151257],{"class":30,"line":118},[28,151258,2662],{"emptyLinePlaceholder":336},[28,151260,151261,151263],{"class":30,"line":124},[28,151262,30675],{"class":60},[28,151264,151265],{"class":38},"(Student.get_school())\n",[380,151267,151269],{"id":151268},"_11132-静态方法","11.13.2 静态方法",[14,151271,151272,151273,151276],{},"静态方法使用 ",[25,151274,151275],{},"@staticmethod","，不需要访问实例和类。",[18,151278,151280],{"className":20,"code":151279,"language":22,"meta":23,"style":23},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[25,151281,151282,151291,151298,151307,151318,151322,151326],{"__ignoreMap":23},[28,151283,151284,151286,151289],{"class":30,"line":31},[28,151285,14956],{"class":34},[28,151287,151288],{"class":2225}," MathUtils",[28,151290,4001],{"class":38},[28,151292,151293,151295],{"class":30,"line":48},[28,151294,151227],{"class":2225},[28,151296,151297],{"class":60},"staticmethod\n",[28,151299,151300,151302,151304],{"class":30,"line":84},[28,151301,31061],{"class":34},[28,151303,5471],{"class":2225},[28,151305,151306],{"class":38},"(a, b):\n",[28,151308,151309,151311,151313,151315],{"class":30,"line":91},[28,151310,15014],{"class":34},[28,151312,11131],{"class":38},[28,151314,880],{"class":34},[28,151316,151317],{"class":38}," b\n",[28,151319,151320],{"class":30,"line":97},[28,151321,2662],{"emptyLinePlaceholder":336},[28,151323,151324],{"class":30,"line":103},[28,151325,2662],{"emptyLinePlaceholder":336},[28,151327,151328,151330,151333,151335,151337,151339],{"class":30,"line":109},[28,151329,30675],{"class":60},[28,151331,151332],{"class":38},"(MathUtils.add(",[28,151334,61],{"class":60},[28,151336,12697],{"class":38},[28,151338,211],{"class":60},[28,151340,30757],{"class":38},[14,151342,151343],{},"静态方法本质上是放在类命名空间里的普通函数。",[351,151345,151347],{"id":151346},"_1114-dataclass","11.14 dataclass",[14,151349,151350,151353],{},[25,151351,151352],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[18,151355,151357],{"className":20,"code":151356,"language":22,"meta":23,"style":23},"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",[25,151358,151359,151371,151375,151379,151384,151392,151400,151408,151416,151420,151424,151444],{"__ignoreMap":23},[28,151360,151361,151363,151366,151368],{"class":30,"line":31},[28,151362,30997],{"class":34},[28,151364,151365],{"class":38}," dataclasses ",[28,151367,35],{"class":34},[28,151369,151370],{"class":38}," dataclass\n",[28,151372,151373],{"class":30,"line":48},[28,151374,2662],{"emptyLinePlaceholder":336},[28,151376,151377],{"class":30,"line":84},[28,151378,2662],{"emptyLinePlaceholder":336},[28,151380,151381],{"class":30,"line":91},[28,151382,151383],{"class":2225},"@dataclass\n",[28,151385,151386,151388,151390],{"class":30,"line":97},[28,151387,14956],{"class":34},[28,151389,8160],{"class":2225},[28,151391,4001],{"class":38},[28,151393,151394,151397],{"class":30,"line":103},[28,151395,151396],{"class":38},"    name: ",[28,151398,151399],{"class":60},"str\n",[28,151401,151402,151405],{"class":30,"line":109},[28,151403,151404],{"class":38},"    age: ",[28,151406,151407],{"class":60},"int\n",[28,151409,151410,151413],{"class":30,"line":118},[28,151411,151412],{"class":38},"    score: ",[28,151414,151415],{"class":60},"float\n",[28,151417,151418],{"class":30,"line":124},[28,151419,2662],{"emptyLinePlaceholder":336},[28,151421,151422],{"class":30,"line":131},[28,151423,2662],{"emptyLinePlaceholder":336},[28,151425,151426,151428,151430,151432,151434,151436,151438,151440,151442],{"class":30,"line":137},[28,151427,149694],{"class":38},[28,151429,54],{"class":34},[28,151431,150098],{"class":38},[28,151433,150101],{"class":127},[28,151435,12697],{"class":38},[28,151437,1048],{"class":60},[28,151439,12697],{"class":38},[28,151441,1386],{"class":60},[28,151443,81],{"class":38},[28,151445,151446,151448],{"class":30,"line":143},[28,151447,30675],{"class":60},[28,151449,150255],{"class":38},[14,151451,151452,151453,617,151455,151458],{},"它会自动生成 ",[25,151454,31089],{},[25,151456,151457],{},"__repr__"," 等方法。适合数据模型类。",[351,151460,151462],{"id":151461},"_1115-小案例学生类","11.15 小案例：学生类",[18,151464,151466],{"className":20,"code":151465,"language":22,"meta":23,"style":23},"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",[25,151467,151468,151476,151485,151497,151507,151517,151527,151531,151540,151553,151557,151566,151572,151584,151596,151608,151620,151624,151628,151634,151644,151653,151663,151671,151679,151688,151692,151696,151704,151740,151744,151748,151773,151780],{"__ignoreMap":23},[28,151469,151470,151472,151474],{"class":30,"line":31},[28,151471,14956],{"class":34},[28,151473,8160],{"class":2225},[28,151475,4001],{"class":38},[28,151477,151478,151480,151482],{"class":30,"line":48},[28,151479,31061],{"class":34},[28,151481,31064],{"class":60},[28,151483,151484],{"class":38},"(self, student_id, name, age, score):\n",[28,151486,151487,151489,151492,151494],{"class":30,"line":84},[28,151488,31105],{"class":60},[28,151490,151491],{"class":38},".student_id ",[28,151493,54],{"class":34},[28,151495,151496],{"class":38}," student_id\n",[28,151498,151499,151501,151503,151505],{"class":30,"line":91},[28,151500,31105],{"class":60},[28,151502,150003],{"class":38},[28,151504,54],{"class":34},[28,151506,150008],{"class":38},[28,151508,151509,151511,151513,151515],{"class":30,"line":97},[28,151510,31105],{"class":60},[28,151512,150015],{"class":38},[28,151514,54],{"class":34},[28,151516,150020],{"class":38},[28,151518,151519,151521,151523,151525],{"class":30,"line":103},[28,151520,31105],{"class":60},[28,151522,150027],{"class":38},[28,151524,54],{"class":34},[28,151526,1844],{"class":38},[28,151528,151529],{"class":30,"line":109},[28,151530,2662],{"emptyLinePlaceholder":336},[28,151532,151533,151535,151538],{"class":30,"line":118},[28,151534,31061],{"class":34},[28,151536,151537],{"class":2225}," is_passed",[28,151539,31067],{"class":38},[28,151541,151542,151544,151546,151548,151550],{"class":30,"line":124},[28,151543,15014],{"class":34},[28,151545,39129],{"class":60},[28,151547,150027],{"class":38},[28,151549,1972],{"class":34},[28,151551,151552],{"class":60}," 60\n",[28,151554,151555],{"class":30,"line":131},[28,151556,2662],{"emptyLinePlaceholder":336},[28,151558,151559,151561,151564],{"class":30,"line":137},[28,151560,31061],{"class":34},[28,151562,151563],{"class":2225}," to_dict",[28,151565,31067],{"class":38},[28,151567,151568,151570],{"class":30,"line":143},[28,151569,15014],{"class":34},[28,151571,15834],{"class":38},[28,151573,151574,151577,151579,151581],{"class":30,"line":149},[28,151575,151576],{"class":127},"            \"student_id\"",[28,151578,51693],{"class":38},[28,151580,31083],{"class":60},[28,151582,151583],{"class":38},".student_id,\n",[28,151585,151586,151589,151591,151593],{"class":30,"line":1890},[28,151587,151588],{"class":127},"            \"name\"",[28,151590,51693],{"class":38},[28,151592,31083],{"class":60},[28,151594,151595],{"class":38},".name,\n",[28,151597,151598,151601,151603,151605],{"class":30,"line":1904},[28,151599,151600],{"class":127},"            \"age\"",[28,151602,51693],{"class":38},[28,151604,31083],{"class":60},[28,151606,151607],{"class":38},".age,\n",[28,151609,151610,151613,151615,151617],{"class":30,"line":1909},[28,151611,151612],{"class":127},"            \"score\"",[28,151614,51693],{"class":38},[28,151616,31083],{"class":60},[28,151618,151619],{"class":38},".score,\n",[28,151621,151622],{"class":30,"line":1915},[28,151623,2791],{"class":38},[28,151625,151626],{"class":30,"line":1936},[28,151627,2662],{"emptyLinePlaceholder":336},[28,151629,151630,151632],{"class":30,"line":1941},[28,151631,151227],{"class":2225},[28,151633,151230],{"class":60},[28,151635,151636,151638,151641],{"class":30,"line":1955},[28,151637,31061],{"class":34},[28,151639,151640],{"class":2225}," from_dict",[28,151642,151643],{"class":38},"(cls, data):\n",[28,151645,151646,151648,151650],{"class":30,"line":1960},[28,151647,15014],{"class":34},[28,151649,151247],{"class":60},[28,151651,151652],{"class":38},"(\n",[28,151654,151655,151658,151661],{"class":30,"line":1989},[28,151656,151657],{"class":38},"            data[",[28,151659,151660],{"class":127},"\"student_id\"",[28,151662,88092],{"class":38},[28,151664,151665,151667,151669],{"class":30,"line":1994},[28,151666,151657],{"class":38},[28,151668,62935],{"class":127},[28,151670,88092],{"class":38},[28,151672,151673,151675,151677],{"class":30,"line":2011},[28,151674,151657],{"class":38},[28,151676,69380],{"class":127},[28,151678,88092],{"class":38},[28,151680,151681,151683,151686],{"class":30,"line":2016},[28,151682,151657],{"class":38},[28,151684,151685],{"class":127},"\"score\"",[28,151687,88092],{"class":38},[28,151689,151690],{"class":30,"line":2021},[28,151691,38382],{"class":38},[28,151693,151694],{"class":30,"line":2026},[28,151695,2662],{"emptyLinePlaceholder":336},[28,151697,151698,151700,151702],{"class":30,"line":2040},[28,151699,31061],{"class":34},[28,151701,150194],{"class":60},[28,151703,31067],{"class":38},[28,151705,151706,151708,151710,151712,151714,151717,151719,151722,151724,151726,151728,151730,151732,151734,151736,151738],{"class":30,"line":2045},[28,151707,15014],{"class":34},[28,151709,150203],{"class":34},[28,151711,654],{"class":127},[28,151713,149665],{"class":60},[28,151715,151716],{"class":38},".student_id",[28,151718,1343],{"class":60},[28,151720,151721],{"class":60}," {self",[28,151723,80557],{"class":38},[28,151725,1343],{"class":60},[28,151727,151721],{"class":60},[28,151729,80569],{"class":38},[28,151731,1343],{"class":60},[28,151733,151721],{"class":60},[28,151735,150075],{"class":38},[28,151737,1343],{"class":60},[28,151739,25396],{"class":127},[28,151741,151742],{"class":30,"line":2839},[28,151743,2662],{"emptyLinePlaceholder":336},[28,151745,151746],{"class":30,"line":2853},[28,151747,2662],{"emptyLinePlaceholder":336},[28,151749,151750,151752,151754,151756,151759,151761,151763,151765,151767,151769,151771],{"class":30,"line":2861},[28,151751,149694],{"class":38},[28,151753,54],{"class":34},[28,151755,150098],{"class":38},[28,151757,151758],{"class":127},"\"001\"",[28,151760,12697],{"class":38},[28,151762,150101],{"class":127},[28,151764,12697],{"class":38},[28,151766,1048],{"class":60},[28,151768,12697],{"class":38},[28,151770,1386],{"class":60},[28,151772,81],{"class":38},[28,151774,151775,151777],{"class":30,"line":2866},[28,151776,30675],{"class":60},[28,151778,151779],{"class":38},"(student.is_passed())\n",[28,151781,151782,151784],{"class":30,"line":2872},[28,151783,30675],{"class":60},[28,151785,151786],{"class":38},"(student.to_dict())\n",[14,151788,151789,101231,151792,151795],{},[25,151790,151791],{},"to_dict()",[25,151793,151794],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[351,151797,151799],{"id":151798},"_1116-易错点","11.16 易错点",[363,151801,151802,151808,151814,151819,151822,151825],{},[366,151803,151804,151805,28648],{},"类名推荐使用大驼峰，如 ",[25,151806,151807],{},"StudentManager",[366,151809,151810,151811,151813],{},"方法第一个参数必须写 ",[25,151812,31083],{},"，调用时不用传。",[366,151815,151816,151818],{},[25,151817,31089],{}," 不是普通方法，它在创建对象时自动执行。",[366,151820,151821],{},"私有属性不是绝对安全，只是约定和名称改写。",[366,151823,151824],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[366,151826,151827],{},"类中方法太多时，说明职责可能过重。",[351,151829,151831],{"id":151830},"_1117-本章练习","11.17 本章练习",[363,151833,151834,151840,151846,151851,151864],{},[366,151835,151836,151837,151839],{},"定义 ",[25,151838,149781],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[366,151841,151836,151842,151845],{},[25,151843,151844],{},"Account"," 类，实现存款、取款、查询余额。",[366,151847,151836,151848,151850],{},[25,151849,17488],{}," 类，计算圆的周长和面积。",[366,151852,151836,151853,617,151856,151859,151860,151863],{},[25,151854,151855],{},"Dog",[25,151857,151858],{},"Cat"," 类，并用同一个函数调用它们的 ",[25,151861,151862],{},"speak()"," 方法。",[366,151865,104579,151866,151868,151869,28648],{},[25,151867,151352],{}," 定义一个商品类 ",[25,151870,151871],{},"Product",[328,151873,151874],{},"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":23,"searchDepth":48,"depth":48,"links":151876},[151877,151878,151879,151880,151881,151882,151884,151885,151886,151887,151888,151889,151890,151894,151895,151896,151897],{"id":149545,"depth":48,"text":149546},{"id":149728,"depth":48,"text":149729},{"id":149792,"depth":48,"text":149793},{"id":149869,"depth":48,"text":149870},{"id":149968,"depth":48,"text":149969},{"id":150132,"depth":48,"text":151883},"11.6 str",{"id":150258,"depth":48,"text":150259},{"id":150524,"depth":48,"text":150525},{"id":150638,"depth":48,"text":150639},{"id":150793,"depth":48,"text":150794},{"id":150917,"depth":48,"text":150918},{"id":151033,"depth":48,"text":151034},{"id":151182,"depth":48,"text":151183,"children":151891},[151892,151893],{"id":151186,"depth":84,"text":151187},{"id":151268,"depth":84,"text":151269},{"id":151346,"depth":48,"text":151347},{"id":151461,"depth":48,"text":151462},{"id":151798,"depth":48,"text":151799},{"id":151830,"depth":48,"text":151831},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149537,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151904,"title":151905,"body":151906,"description":333,"extension":334,"meta":155219,"navigation":336,"path":155220,"seo":155221,"stem":155222,"__hash__":155223},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151907,"toc":155195},[151908,151911,151915,151918,151921,151950,151953,151961,151965,151969,151972,151995,151998,152004,152008,153454,153457,153478,153482,153485,153497,153500,153684,153687,153813,153816,153820,153824,153960,153964,154050,154054,154136,154140,154177,154181,154370,154374,154377,154607,154611,154614,154795,154798,154802,154805,154811,154814,154840,154844,154847,154861,154864,154889,154892,154906,154909,154926,154929,154946,154949,154966,154970,154996,155000,155023,155027,155030,155032,155038,155040,155061,155064,155070,155076,155080,155083,155159,155162,155166,155192],[10,151909,151905],{"id":151910},"_12-综合案例与复习路线",[351,151912,151914],{"id":151913},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151916,151917],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151919,151920],{},"一个合格的入门综合项目最好覆盖：",[363,151922,151923,151926,151929,151932,151935,151938,151941,151944,151947],{},[366,151924,151925],{},"输入输出。",[366,151927,151928],{},"判断和循环。",[366,151930,151931],{},"函数拆分。",[366,151933,151934],{},"列表、字典等容器。",[366,151936,151937],{},"文件持久化。",[366,151939,151940],{},"异常处理。",[366,151942,151943],{},"模块拆分。",[366,151945,151946],{},"可选：面向对象。",[366,151948,151949],{},"可选：数据可视化。",[14,151951,151952],{},"本章整理两个方向：",[363,151954,151955,151958],{},[366,151956,151957],{},"学生管理系统。",[366,151959,151960],{},"销售数据统计和可视化。",[351,151962,151964],{"id":151963},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[380,151966,151968],{"id":151967},"_1221-需求","12.2.1 需求",[14,151970,151971],{},"实现一个命令行学生管理系统：",[363,151973,151974,151977,151980,151983,151986,151989,151992],{},[366,151975,151976],{},"添加学生。",[366,151978,151979],{},"删除学生。",[366,151981,151982],{},"修改学生。",[366,151984,151985],{},"查询学生。",[366,151987,151988],{},"显示所有学生。",[366,151990,151991],{},"保存到 JSON 文件。",[366,151993,151994],{},"程序启动时自动读取 JSON 文件。",[14,151996,151997],{},"学生字段：",[18,151999,152002],{"className":152000,"code":152001,"language":5449,"meta":23},[5447],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[25,152003,152001],{"__ignoreMap":23},[351,152005,152007],{"id":152006},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[18,152009,152011],{"className":20,"code":152010,"language":22,"meta":23,"style":23},"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",[25,152012,152013,152019,152029,152033,152047,152051,152055,152064,152076,152082,152086,152092,152123,152133,152140,152151,152157,152161,152165,152175,152206,152232,152236,152240,152249,152260,152271,152282,152293,152304,152315,152326,152330,152334,152344,152356,152372,152379,152386,152390,152394,152404,152412,152419,152432,152442,152453,152457,152461,152470,152478,152484,152496,152504,152515,152519,152523,152532,152548,152552,152559,152570,152575,152579,152595,152610,152625,152629,152634,152642,152650,152658,152666,152670,152675,152686,152690,152694,152703,152718,152728,152732,152744,152755,152759,152763,152768,152772,152783,152787,152791,152800,152815,152823,152827,152839,152849,152853,152857,152872,152885,152898,152902,152915,152927,152939,152943,152947,152958,152962,152966,152975,152990,152998,153002,153014,153024,153028,153032,153037,153041,153045,153055,153061,153083,153102,153121,153140,153145,153149,153153,153162,153170,153181,153185,153189,153215,153225,153230,153234,153238,153246,153256,153260,153268,153273,153289,153293,153307,153312,153326,153331,153344,153349,153362,153367,153380,153385,153398,153409,153413,153419,153430,153434,153438,153450],{"__ignoreMap":23},[28,152014,152015,152017],{"class":30,"line":31},[28,152016,35],{"class":34},[28,152018,147304],{"class":38},[28,152020,152021,152023,152025,152027],{"class":30,"line":48},[28,152022,30997],{"class":34},[28,152024,108524],{"class":38},[28,152026,35],{"class":34},[28,152028,108529],{"class":38},[28,152030,152031],{"class":30,"line":84},[28,152032,2662],{"emptyLinePlaceholder":336},[28,152034,152035,152038,152040,152042,152045],{"class":30,"line":91},[28,152036,152037],{"class":60},"DATA_FILE",[28,152039,13826],{"class":34},[28,152041,108758],{"class":38},[28,152043,152044],{"class":127},"\"students.json\"",[28,152046,81],{"class":38},[28,152048,152049],{"class":30,"line":97},[28,152050,2662],{"emptyLinePlaceholder":336},[28,152052,152053],{"class":30,"line":103},[28,152054,2662],{"emptyLinePlaceholder":336},[28,152056,152057,152059,152062],{"class":30,"line":109},[28,152058,32203],{"class":34},[28,152060,152061],{"class":2225}," load_students",[28,152063,32209],{"class":38},[28,152065,152066,152068,152070,152073],{"class":30,"line":118},[28,152067,3363],{"class":34},[28,152069,39186],{"class":34},[28,152071,152072],{"class":60}," DATA_FILE",[28,152074,152075],{"class":38},".exists():\n",[28,152077,152078,152080],{"class":30,"line":124},[28,152079,15014],{"class":34},[28,152081,52094],{"class":38},[28,152083,152084],{"class":30,"line":131},[28,152085,2662],{"emptyLinePlaceholder":336},[28,152087,152088,152090],{"class":30,"line":137},[28,152089,125997],{"class":34},[28,152091,4001],{"class":38},[28,152093,152094,152097,152099,152101,152103,152105,152107,152109,152111,152113,152115,152117,152119,152121],{"class":30,"line":143},[28,152095,152096],{"class":34},"        with",[28,152098,147004],{"class":60},[28,152100,413],{"class":38},[28,152102,152037],{"class":60},[28,152104,12697],{"class":38},[28,152106,147014],{"class":127},[28,152108,12697],{"class":38},[28,152110,147019],{"class":5478},[28,152112,54],{"class":34},[28,152114,147024],{"class":127},[28,152116,13976],{"class":38},[28,152118,42],{"class":34},[28,152120,148366],{"class":5478},[28,152122,4001],{"class":38},[28,152124,152125,152127,152129,152131],{"class":30,"line":149},[28,152126,15994],{"class":34},[28,152128,148377],{"class":38},[28,152130,45610],{"class":5478},[28,152132,81],{"class":38},[28,152134,152135,152137],{"class":30,"line":1890},[28,152136,126025],{"class":34},[28,152138,152139],{"class":38}," json.JSONDecodeError:\n",[28,152141,152142,152144,152146,152149],{"class":30,"line":1904},[28,152143,32707],{"class":60},[28,152145,413],{"class":38},[28,152147,152148],{"class":127},"\"数据文件格式错误，已使用空数据启动\"",[28,152150,81],{"class":38},[28,152152,152153,152155],{"class":30,"line":1909},[28,152154,15014],{"class":34},[28,152156,52094],{"class":38},[28,152158,152159],{"class":30,"line":1915},[28,152160,2662],{"emptyLinePlaceholder":336},[28,152162,152163],{"class":30,"line":1936},[28,152164,2662],{"emptyLinePlaceholder":336},[28,152166,152167,152169,152172],{"class":30,"line":1941},[28,152168,32203],{"class":34},[28,152170,152171],{"class":2225}," save_students",[28,152173,152174],{"class":38},"(students):\n",[28,152176,152177,152179,152181,152183,152185,152187,152190,152192,152194,152196,152198,152200,152202,152204],{"class":30,"line":1955},[28,152178,34434],{"class":34},[28,152180,147004],{"class":60},[28,152182,413],{"class":38},[28,152184,152037],{"class":60},[28,152186,12697],{"class":38},[28,152188,152189],{"class":127},"\"w\"",[28,152191,12697],{"class":38},[28,152193,147019],{"class":5478},[28,152195,54],{"class":34},[28,152197,147024],{"class":127},[28,152199,13976],{"class":38},[28,152201,42],{"class":34},[28,152203,148366],{"class":5478},[28,152205,4001],{"class":38},[28,152207,152208,152211,152213,152215,152217,152219,152221,152223,152226,152228,152230],{"class":30,"line":1960},[28,152209,152210],{"class":38},"        json.dump(students, ",[28,152212,45610],{"class":5478},[28,152214,12697],{"class":38},[28,152216,147350],{"class":5478},[28,152218,54],{"class":34},[28,152220,34243],{"class":60},[28,152222,12697],{"class":38},[28,152224,152225],{"class":5478},"indent",[28,152227,54],{"class":34},[28,152229,211],{"class":60},[28,152231,81],{"class":38},[28,152233,152234],{"class":30,"line":1989},[28,152235,2662],{"emptyLinePlaceholder":336},[28,152237,152238],{"class":30,"line":1994},[28,152239,2662],{"emptyLinePlaceholder":336},[28,152241,152242,152244,152247],{"class":30,"line":2011},[28,152243,32203],{"class":34},[28,152245,152246],{"class":2225}," show_menu",[28,152248,32209],{"class":38},[28,152250,152251,152253,152255,152258],{"class":30,"line":2016},[28,152252,31559],{"class":60},[28,152254,413],{"class":38},[28,152256,152257],{"class":127},"\"====== 学生管理系统 ======\"",[28,152259,81],{"class":38},[28,152261,152262,152264,152266,152269],{"class":30,"line":2021},[28,152263,31559],{"class":60},[28,152265,413],{"class":38},[28,152267,152268],{"class":127},"\"1. 添加学生\"",[28,152270,81],{"class":38},[28,152272,152273,152275,152277,152280],{"class":30,"line":2026},[28,152274,31559],{"class":60},[28,152276,413],{"class":38},[28,152278,152279],{"class":127},"\"2. 删除学生\"",[28,152281,81],{"class":38},[28,152283,152284,152286,152288,152291],{"class":30,"line":2040},[28,152285,31559],{"class":60},[28,152287,413],{"class":38},[28,152289,152290],{"class":127},"\"3. 修改学生\"",[28,152292,81],{"class":38},[28,152294,152295,152297,152299,152302],{"class":30,"line":2045},[28,152296,31559],{"class":60},[28,152298,413],{"class":38},[28,152300,152301],{"class":127},"\"4. 查询学生\"",[28,152303,81],{"class":38},[28,152305,152306,152308,152310,152313],{"class":30,"line":2839},[28,152307,31559],{"class":60},[28,152309,413],{"class":38},[28,152311,152312],{"class":127},"\"5. 显示所有学生\"",[28,152314,81],{"class":38},[28,152316,152317,152319,152321,152324],{"class":30,"line":2853},[28,152318,31559],{"class":60},[28,152320,413],{"class":38},[28,152322,152323],{"class":127},"\"0. 退出系统\"",[28,152325,81],{"class":38},[28,152327,152328],{"class":30,"line":2861},[28,152329,2662],{"emptyLinePlaceholder":336},[28,152331,152332],{"class":30,"line":2866},[28,152333,2662],{"emptyLinePlaceholder":336},[28,152335,152336,152338,152341],{"class":30,"line":2872},[28,152337,32203],{"class":34},[28,152339,152340],{"class":2225}," find_student",[28,152342,152343],{"class":38},"(students, student_id):\n",[28,152345,152346,152348,152351,152353],{"class":30,"line":2878},[28,152347,3463],{"class":34},[28,152349,152350],{"class":38}," student ",[28,152352,26306],{"class":34},[28,152354,152355],{"class":38}," students:\n",[28,152357,152358,152360,152363,152365,152367,152369],{"class":30,"line":2883},[28,152359,2759],{"class":34},[28,152361,152362],{"class":38}," student[",[28,152364,151660],{"class":127},[28,152366,4705],{"class":38},[28,152368,3211],{"class":34},[28,152370,152371],{"class":38}," student_id:\n",[28,152373,152374,152376],{"class":30,"line":8210},[28,152375,15994],{"class":34},[28,152377,152378],{"class":38}," student\n",[28,152380,152381,152383],{"class":30,"line":8234},[28,152382,4352],{"class":34},[28,152384,152385],{"class":60}," None\n",[28,152387,152388],{"class":30,"line":8239},[28,152389,2662],{"emptyLinePlaceholder":336},[28,152391,152392],{"class":30,"line":8245},[28,152393,2662],{"emptyLinePlaceholder":336},[28,152395,152396,152398,152401],{"class":30,"line":8272},[28,152397,32203],{"class":34},[28,152399,152400],{"class":2225}," input_int",[28,152402,152403],{"class":38},"(prompt):\n",[28,152405,152406,152408,152410],{"class":30,"line":8277},[28,152407,2513],{"class":34},[28,152409,95544],{"class":60},[28,152411,4001],{"class":38},[28,152413,152414,152417],{"class":30,"line":8283},[28,152415,152416],{"class":34},"        try",[28,152418,4001],{"class":38},[28,152420,152421,152423,152425,152427,152429],{"class":30,"line":8295},[28,152422,15994],{"class":34},[28,152424,2644],{"class":60},[28,152426,413],{"class":38},[28,152428,54077],{"class":60},[28,152430,152431],{"class":38},"(prompt))\n",[28,152433,152434,152437,152440],{"class":30,"line":8307},[28,152435,152436],{"class":34},"        except",[28,152438,152439],{"class":60}," ValueError",[28,152441,4001],{"class":38},[28,152443,152444,152446,152448,152451],{"class":30,"line":8319},[28,152445,34906],{"class":60},[28,152447,413],{"class":38},[28,152449,152450],{"class":127},"\"请输入整数\"",[28,152452,81],{"class":38},[28,152454,152455],{"class":30,"line":9978},[28,152456,2662],{"emptyLinePlaceholder":336},[28,152458,152459],{"class":30,"line":10003},[28,152460,2662],{"emptyLinePlaceholder":336},[28,152462,152463,152465,152468],{"class":30,"line":10026},[28,152464,32203],{"class":34},[28,152466,152467],{"class":2225}," input_float",[28,152469,152403],{"class":38},[28,152471,152472,152474,152476],{"class":30,"line":10050},[28,152473,2513],{"class":34},[28,152475,95544],{"class":60},[28,152477,4001],{"class":38},[28,152479,152480,152482],{"class":30,"line":10055},[28,152481,152416],{"class":34},[28,152483,4001],{"class":38},[28,152485,152486,152488,152490,152492,152494],{"class":30,"line":10060},[28,152487,15994],{"class":34},[28,152489,110010],{"class":60},[28,152491,413],{"class":38},[28,152493,54077],{"class":60},[28,152495,152431],{"class":38},[28,152497,152498,152500,152502],{"class":30,"line":10065},[28,152499,152436],{"class":34},[28,152501,152439],{"class":60},[28,152503,4001],{"class":38},[28,152505,152506,152508,152510,152513],{"class":30,"line":10074},[28,152507,34906],{"class":60},[28,152509,413],{"class":38},[28,152511,152512],{"class":127},"\"请输入数字\"",[28,152514,81],{"class":38},[28,152516,152517],{"class":30,"line":10079},[28,152518,2662],{"emptyLinePlaceholder":336},[28,152520,152521],{"class":30,"line":10085},[28,152522,2662],{"emptyLinePlaceholder":336},[28,152524,152525,152527,152530],{"class":30,"line":10106},[28,152526,32203],{"class":34},[28,152528,152529],{"class":2225}," add_student",[28,152531,152174],{"class":38},[28,152533,152534,152537,152539,152541,152543,152546],{"class":30,"line":10112},[28,152535,152536],{"class":38},"    student_id ",[28,152538,54],{"class":34},[28,152540,60861],{"class":60},[28,152542,413],{"class":38},[28,152544,152545],{"class":127},"\"请输入学号:\"",[28,152547,81],{"class":38},[28,152549,152550],{"class":30,"line":10126},[28,152551,2662],{"emptyLinePlaceholder":336},[28,152553,152554,152556],{"class":30,"line":10132},[28,152555,3363],{"class":34},[28,152557,152558],{"class":38}," find_student(students, student_id):\n",[28,152560,152561,152563,152565,152568],{"class":30,"line":10159},[28,152562,32707],{"class":60},[28,152564,413],{"class":38},[28,152566,152567],{"class":127},"\"学号已存在\"",[28,152569,81],{"class":38},[28,152571,152572],{"class":30,"line":10168},[28,152573,152574],{"class":34},"        return\n",[28,152576,152577],{"class":30,"line":10174},[28,152578,2662],{"emptyLinePlaceholder":336},[28,152580,152581,152584,152586,152588,152590,152593],{"class":30,"line":10182},[28,152582,152583],{"class":38},"    name ",[28,152585,54],{"class":34},[28,152587,60861],{"class":60},[28,152589,413],{"class":38},[28,152591,152592],{"class":127},"\"请输入姓名:\"",[28,152594,81],{"class":38},[28,152596,152597,152600,152602,152605,152608],{"class":30,"line":10187},[28,152598,152599],{"class":38},"    age ",[28,152601,54],{"class":34},[28,152603,152604],{"class":38}," input_int(",[28,152606,152607],{"class":127},"\"请输入年龄:\"",[28,152609,81],{"class":38},[28,152611,152612,152615,152617,152620,152623],{"class":30,"line":16866},[28,152613,152614],{"class":38},"    score ",[28,152616,54],{"class":34},[28,152618,152619],{"class":38}," input_float(",[28,152621,152622],{"class":127},"\"请输入成绩:\"",[28,152624,81],{"class":38},[28,152626,152627],{"class":30,"line":16872},[28,152628,2662],{"emptyLinePlaceholder":336},[28,152630,152631],{"class":30,"line":16895},[28,152632,152633],{"class":38},"    students.append({\n",[28,152635,152636,152639],{"class":30,"line":16901},[28,152637,152638],{"class":127},"        \"student_id\"",[28,152640,152641],{"class":38},": student_id,\n",[28,152643,152644,152647],{"class":30,"line":16924},[28,152645,152646],{"class":127},"        \"name\"",[28,152648,152649],{"class":38},": name,\n",[28,152651,152652,152655],{"class":30,"line":16938},[28,152653,152654],{"class":127},"        \"age\"",[28,152656,152657],{"class":38},": age,\n",[28,152659,152660,152663],{"class":30,"line":16958},[28,152661,152662],{"class":127},"        \"score\"",[28,152664,152665],{"class":38},": score,\n",[28,152667,152668],{"class":30,"line":16964},[28,152669,33717],{"class":38},[28,152671,152672],{"class":30,"line":16975},[28,152673,152674],{"class":38},"    save_students(students)\n",[28,152676,152677,152679,152681,152684],{"class":30,"line":16998},[28,152678,31559],{"class":60},[28,152680,413],{"class":38},[28,152682,152683],{"class":127},"\"添加成功\"",[28,152685,81],{"class":38},[28,152687,152688],{"class":30,"line":17020},[28,152689,2662],{"emptyLinePlaceholder":336},[28,152691,152692],{"class":30,"line":17025},[28,152693,2662],{"emptyLinePlaceholder":336},[28,152695,152696,152698,152701],{"class":30,"line":17031},[28,152697,32203],{"class":34},[28,152699,152700],{"class":2225}," delete_student",[28,152702,152174],{"class":38},[28,152704,152705,152707,152709,152711,152713,152716],{"class":30,"line":17045},[28,152706,152536],{"class":38},[28,152708,54],{"class":34},[28,152710,60861],{"class":60},[28,152712,413],{"class":38},[28,152714,152715],{"class":127},"\"请输入要删除的学号:\"",[28,152717,81],{"class":38},[28,152719,152720,152723,152725],{"class":30,"line":17058},[28,152721,152722],{"class":38},"    student ",[28,152724,54],{"class":34},[28,152726,152727],{"class":38}," find_student(students, student_id)\n",[28,152729,152730],{"class":30,"line":17063},[28,152731,2662],{"emptyLinePlaceholder":336},[28,152733,152734,152736,152738,152740,152742],{"class":30,"line":17077},[28,152735,3363],{"class":34},[28,152737,152350],{"class":38},[28,152739,39183],{"class":34},[28,152741,39189],{"class":60},[28,152743,4001],{"class":38},[28,152745,152746,152748,152750,152753],{"class":30,"line":17082},[28,152747,32707],{"class":60},[28,152749,413],{"class":38},[28,152751,152752],{"class":127},"\"学生不存在\"",[28,152754,81],{"class":38},[28,152756,152757],{"class":30,"line":17088},[28,152758,152574],{"class":34},[28,152760,152761],{"class":30,"line":17093},[28,152762,2662],{"emptyLinePlaceholder":336},[28,152764,152765],{"class":30,"line":17107},[28,152766,152767],{"class":38},"    students.remove(student)\n",[28,152769,152770],{"class":30,"line":17112},[28,152771,152674],{"class":38},[28,152773,152774,152776,152778,152781],{"class":30,"line":17117},[28,152775,31559],{"class":60},[28,152777,413],{"class":38},[28,152779,152780],{"class":127},"\"删除成功\"",[28,152782,81],{"class":38},[28,152784,152785],{"class":30,"line":17131},[28,152786,2662],{"emptyLinePlaceholder":336},[28,152788,152789],{"class":30,"line":17143},[28,152790,2662],{"emptyLinePlaceholder":336},[28,152792,152793,152795,152798],{"class":30,"line":17148},[28,152794,32203],{"class":34},[28,152796,152797],{"class":2225}," update_student",[28,152799,152174],{"class":38},[28,152801,152802,152804,152806,152808,152810,152813],{"class":30,"line":17161},[28,152803,152536],{"class":38},[28,152805,54],{"class":34},[28,152807,60861],{"class":60},[28,152809,413],{"class":38},[28,152811,152812],{"class":127},"\"请输入要修改的学号:\"",[28,152814,81],{"class":38},[28,152816,152817,152819,152821],{"class":30,"line":17166},[28,152818,152722],{"class":38},[28,152820,54],{"class":34},[28,152822,152727],{"class":38},[28,152824,152825],{"class":30,"line":17171},[28,152826,2662],{"emptyLinePlaceholder":336},[28,152828,152829,152831,152833,152835,152837],{"class":30,"line":17176},[28,152830,3363],{"class":34},[28,152832,152350],{"class":38},[28,152834,39183],{"class":34},[28,152836,39189],{"class":60},[28,152838,4001],{"class":38},[28,152840,152841,152843,152845,152847],{"class":30,"line":17189},[28,152842,32707],{"class":60},[28,152844,413],{"class":38},[28,152846,152752],{"class":127},[28,152848,81],{"class":38},[28,152850,152851],{"class":30,"line":17194},[28,152852,152574],{"class":34},[28,152854,152855],{"class":30,"line":32889},[28,152856,2662],{"emptyLinePlaceholder":336},[28,152858,152859,152861,152863,152865,152867,152870],{"class":30,"line":32895},[28,152860,152583],{"class":38},[28,152862,54],{"class":34},[28,152864,60861],{"class":60},[28,152866,413],{"class":38},[28,152868,152869],{"class":127},"\"请输入新姓名:\"",[28,152871,81],{"class":38},[28,152873,152874,152876,152878,152880,152883],{"class":30,"line":32901},[28,152875,152599],{"class":38},[28,152877,54],{"class":34},[28,152879,152604],{"class":38},[28,152881,152882],{"class":127},"\"请输入新年龄:\"",[28,152884,81],{"class":38},[28,152886,152887,152889,152891,152893,152896],{"class":30,"line":32907},[28,152888,152614],{"class":38},[28,152890,54],{"class":34},[28,152892,152619],{"class":38},[28,152894,152895],{"class":127},"\"请输入新成绩:\"",[28,152897,81],{"class":38},[28,152899,152900],{"class":30,"line":32913},[28,152901,2662],{"emptyLinePlaceholder":336},[28,152903,152904,152907,152909,152911,152913],{"class":30,"line":32924},[28,152905,152906],{"class":38},"    student[",[28,152908,62935],{"class":127},[28,152910,4705],{"class":38},[28,152912,54],{"class":34},[28,152914,150008],{"class":38},[28,152916,152917,152919,152921,152923,152925],{"class":30,"line":32930},[28,152918,152906],{"class":38},[28,152920,69380],{"class":127},[28,152922,4705],{"class":38},[28,152924,54],{"class":34},[28,152926,150020],{"class":38},[28,152928,152929,152931,152933,152935,152937],{"class":30,"line":32950},[28,152930,152906],{"class":38},[28,152932,151685],{"class":127},[28,152934,4705],{"class":38},[28,152936,54],{"class":34},[28,152938,1844],{"class":38},[28,152940,152941],{"class":30,"line":32956},[28,152942,2662],{"emptyLinePlaceholder":336},[28,152944,152945],{"class":30,"line":32967},[28,152946,152674],{"class":38},[28,152948,152949,152951,152953,152956],{"class":30,"line":32973},[28,152950,31559],{"class":60},[28,152952,413],{"class":38},[28,152954,152955],{"class":127},"\"修改成功\"",[28,152957,81],{"class":38},[28,152959,152960],{"class":30,"line":32979},[28,152961,2662],{"emptyLinePlaceholder":336},[28,152963,152964],{"class":30,"line":32985},[28,152965,2662],{"emptyLinePlaceholder":336},[28,152967,152968,152970,152973],{"class":30,"line":32991},[28,152969,32203],{"class":34},[28,152971,152972],{"class":2225}," query_student",[28,152974,152174],{"class":38},[28,152976,152977,152979,152981,152983,152985,152988],{"class":30,"line":32997},[28,152978,152536],{"class":38},[28,152980,54],{"class":34},[28,152982,60861],{"class":60},[28,152984,413],{"class":38},[28,152986,152987],{"class":127},"\"请输入要查询的学号:\"",[28,152989,81],{"class":38},[28,152991,152992,152994,152996],{"class":30,"line":33003},[28,152993,152722],{"class":38},[28,152995,54],{"class":34},[28,152997,152727],{"class":38},[28,152999,153000],{"class":30,"line":33009},[28,153001,2662],{"emptyLinePlaceholder":336},[28,153003,153004,153006,153008,153010,153012],{"class":30,"line":33029},[28,153005,3363],{"class":34},[28,153007,152350],{"class":38},[28,153009,39183],{"class":34},[28,153011,39189],{"class":60},[28,153013,4001],{"class":38},[28,153015,153016,153018,153020,153022],{"class":30,"line":33035},[28,153017,32707],{"class":60},[28,153019,413],{"class":38},[28,153021,152752],{"class":127},[28,153023,81],{"class":38},[28,153025,153026],{"class":30,"line":33051},[28,153027,152574],{"class":34},[28,153029,153030],{"class":30,"line":33057},[28,153031,2662],{"emptyLinePlaceholder":336},[28,153033,153034],{"class":30,"line":33071},[28,153035,153036],{"class":38},"    print_student(student)\n",[28,153038,153039],{"class":30,"line":33077},[28,153040,2662],{"emptyLinePlaceholder":336},[28,153042,153043],{"class":30,"line":33092},[28,153044,2662],{"emptyLinePlaceholder":336},[28,153046,153047,153049,153052],{"class":30,"line":33098},[28,153048,32203],{"class":34},[28,153050,153051],{"class":2225}," print_student",[28,153053,153054],{"class":38},"(student):\n",[28,153056,153057,153059],{"class":30,"line":33107},[28,153058,31559],{"class":60},[28,153060,151652],{"class":38},[28,153062,153063,153066,153068,153070,153073,153076,153078,153081],{"class":30,"line":33113},[28,153064,153065],{"class":34},"        f",[28,153067,654],{"class":127},[28,153069,1293],{"class":60},[28,153071,153072],{"class":38},"student[",[28,153074,153075],{"class":127},"'student_id'",[28,153077,1337],{"class":38},[28,153079,153080],{"class":60},"}\\t",[28,153082,25396],{"class":127},[28,153084,153085,153087,153089,153091,153093,153096,153098,153100],{"class":30,"line":33122},[28,153086,153065],{"class":34},[28,153088,654],{"class":127},[28,153090,1293],{"class":60},[28,153092,153072],{"class":38},[28,153094,153095],{"class":127},"'name'",[28,153097,1337],{"class":38},[28,153099,153080],{"class":60},[28,153101,25396],{"class":127},[28,153103,153104,153106,153108,153110,153112,153115,153117,153119],{"class":30,"line":33128},[28,153105,153065],{"class":34},[28,153107,654],{"class":127},[28,153109,1293],{"class":60},[28,153111,153072],{"class":38},[28,153113,153114],{"class":127},"'age'",[28,153116,1337],{"class":38},[28,153118,153080],{"class":60},[28,153120,25396],{"class":127},[28,153122,153123,153125,153127,153129,153131,153134,153136,153138],{"class":30,"line":33134},[28,153124,153065],{"class":34},[28,153126,654],{"class":127},[28,153128,1293],{"class":60},[28,153130,153072],{"class":38},[28,153132,153133],{"class":127},"'score'",[28,153135,1337],{"class":38},[28,153137,1343],{"class":60},[28,153139,25396],{"class":127},[28,153141,153142],{"class":30,"line":33143},[28,153143,153144],{"class":38},"    )\n",[28,153146,153147],{"class":30,"line":33149},[28,153148,2662],{"emptyLinePlaceholder":336},[28,153150,153151],{"class":30,"line":33160},[28,153152,2662],{"emptyLinePlaceholder":336},[28,153154,153155,153157,153160],{"class":30,"line":33166},[28,153156,32203],{"class":34},[28,153158,153159],{"class":2225}," show_all_students",[28,153161,152174],{"class":38},[28,153163,153164,153166,153168],{"class":30,"line":33185},[28,153165,3363],{"class":34},[28,153167,39186],{"class":34},[28,153169,152355],{"class":38},[28,153171,153172,153174,153176,153179],{"class":30,"line":33191},[28,153173,32707],{"class":60},[28,153175,413],{"class":38},[28,153177,153178],{"class":127},"\"暂无学生\"",[28,153180,81],{"class":38},[28,153182,153183],{"class":30,"line":33202},[28,153184,152574],{"class":34},[28,153186,153187],{"class":30,"line":33208},[28,153188,2662],{"emptyLinePlaceholder":336},[28,153190,153191,153193,153195,153198,153200,153203,153205,153208,153210,153213],{"class":30,"line":33228},[28,153192,31559],{"class":60},[28,153194,413],{"class":38},[28,153196,153197],{"class":127},"\"学号",[28,153199,1498],{"class":60},[28,153201,153202],{"class":127},"姓名",[28,153204,1498],{"class":60},[28,153206,153207],{"class":127},"年龄",[28,153209,1498],{"class":60},[28,153211,153212],{"class":127},"成绩\"",[28,153214,81],{"class":38},[28,153216,153217,153219,153221,153223],{"class":30,"line":33244},[28,153218,3463],{"class":34},[28,153220,152350],{"class":38},[28,153222,26306],{"class":34},[28,153224,152355],{"class":38},[28,153226,153227],{"class":30,"line":33250},[28,153228,153229],{"class":38},"        print_student(student)\n",[28,153231,153232],{"class":30,"line":33264},[28,153233,2662],{"emptyLinePlaceholder":336},[28,153235,153236],{"class":30,"line":33270},[28,153237,2662],{"emptyLinePlaceholder":336},[28,153239,153240,153242,153244],{"class":30,"line":33276},[28,153241,32203],{"class":34},[28,153243,2235],{"class":2225},[28,153245,32209],{"class":38},[28,153247,153248,153251,153253],{"class":30,"line":33287},[28,153249,153250],{"class":38},"    students ",[28,153252,54],{"class":34},[28,153254,153255],{"class":38}," load_students()\n",[28,153257,153258],{"class":30,"line":33293},[28,153259,2662],{"emptyLinePlaceholder":336},[28,153261,153262,153264,153266],{"class":30,"line":33299},[28,153263,2513],{"class":34},[28,153265,95544],{"class":60},[28,153267,4001],{"class":38},[28,153269,153270],{"class":30,"line":33309},[28,153271,153272],{"class":38},"        show_menu()\n",[28,153274,153275,153278,153280,153282,153284,153287],{"class":30,"line":33315},[28,153276,153277],{"class":38},"        choice ",[28,153279,54],{"class":34},[28,153281,60861],{"class":60},[28,153283,413],{"class":38},[28,153285,153286],{"class":127},"\"请输入操作:\"",[28,153288,81],{"class":38},[28,153290,153291],{"class":30,"line":33326},[28,153292,2662],{"emptyLinePlaceholder":336},[28,153294,153295,153297,153300,153302,153305],{"class":30,"line":33332},[28,153296,2759],{"class":34},[28,153298,153299],{"class":38}," choice ",[28,153301,3211],{"class":34},[28,153303,153304],{"class":127}," \"1\"",[28,153306,4001],{"class":38},[28,153308,153309],{"class":30,"line":33342},[28,153310,153311],{"class":38},"            add_student(students)\n",[28,153313,153314,153317,153319,153321,153324],{"class":30,"line":33347},[28,153315,153316],{"class":34},"        elif",[28,153318,153299],{"class":38},[28,153320,3211],{"class":34},[28,153322,153323],{"class":127}," \"2\"",[28,153325,4001],{"class":38},[28,153327,153328],{"class":30,"line":33353},[28,153329,153330],{"class":38},"            delete_student(students)\n",[28,153332,153333,153335,153337,153339,153342],{"class":30,"line":33402},[28,153334,153316],{"class":34},[28,153336,153299],{"class":38},[28,153338,3211],{"class":34},[28,153340,153341],{"class":127}," \"3\"",[28,153343,4001],{"class":38},[28,153345,153346],{"class":30,"line":33449},[28,153347,153348],{"class":38},"            update_student(students)\n",[28,153350,153351,153353,153355,153357,153360],{"class":30,"line":33454},[28,153352,153316],{"class":34},[28,153354,153299],{"class":38},[28,153356,3211],{"class":34},[28,153358,153359],{"class":127}," \"4\"",[28,153361,4001],{"class":38},[28,153363,153364],{"class":30,"line":33460},[28,153365,153366],{"class":38},"            query_student(students)\n",[28,153368,153369,153371,153373,153375,153378],{"class":30,"line":33479},[28,153370,153316],{"class":34},[28,153372,153299],{"class":38},[28,153374,3211],{"class":34},[28,153376,153377],{"class":127}," \"5\"",[28,153379,4001],{"class":38},[28,153381,153382],{"class":30,"line":33485},[28,153383,153384],{"class":38},"            show_all_students(students)\n",[28,153386,153387,153389,153391,153393,153396],{"class":30,"line":33505},[28,153388,153316],{"class":34},[28,153390,153299],{"class":38},[28,153392,3211],{"class":34},[28,153394,153395],{"class":127}," \"0\"",[28,153397,4001],{"class":38},[28,153399,153400,153402,153404,153407],{"class":30,"line":33511},[28,153401,34906],{"class":60},[28,153403,413],{"class":38},[28,153405,153406],{"class":127},"\"退出系统\"",[28,153408,81],{"class":38},[28,153410,153411],{"class":30,"line":33517},[28,153412,115311],{"class":34},[28,153414,153415,153417],{"class":30,"line":33527},[28,153416,2796],{"class":34},[28,153418,4001],{"class":38},[28,153420,153421,153423,153425,153428],{"class":30,"line":33532},[28,153422,34906],{"class":60},[28,153424,413],{"class":38},[28,153426,153427],{"class":127},"\"输入错误\"",[28,153429,81],{"class":38},[28,153431,153432],{"class":30,"line":33538},[28,153433,2662],{"emptyLinePlaceholder":336},[28,153435,153436],{"class":30,"line":33554},[28,153437,2662],{"emptyLinePlaceholder":336},[28,153439,153440,153442,153444,153446,153448],{"class":30,"line":33599},[28,153441,1796],{"class":34},[28,153443,31480],{"class":60},[28,153445,101772],{"class":34},[28,153447,101775],{"class":127},[28,153449,4001],{"class":38},[28,153451,153452],{"class":30,"line":33605},[28,153453,101782],{"class":38},[14,153455,153456],{},"这个项目串联了：",[363,153458,153459,153462,153465,153468,153471,153473],{},[366,153460,153461],{},"菜单循环。",[366,153463,153464],{},"函数封装。",[366,153466,153467],{},"列表字典。",[366,153469,153470],{},"JSON 读写。",[366,153472,151940],{},[366,153474,153475,28648],{},[25,153476,153477],{},"if __name__ == \"__main__\"",[351,153479,153481],{"id":153480},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153483,153484],{},"可以进一步拆成两个类：",[363,153486,153487,153492],{},[366,153488,153489,153491],{},[25,153490,149781],{},"：表示单个学生。",[366,153493,153494,153496],{},[25,153495,151807],{},"：负责学生增删改查和文件保存。",[14,153498,153499],{},"示意代码：",[18,153501,153503],{"className":20,"code":153502,"language":22,"meta":23,"style":23},"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",[25,153504,153505,153515,153519,153523,153527,153535,153542,153548,153554,153560,153564,153572,153578,153588,153598,153608,153618,153622,153626,153632,153640,153648,153656,153664,153672,153680],{"__ignoreMap":23},[28,153506,153507,153509,153511,153513],{"class":30,"line":31},[28,153508,30997],{"class":34},[28,153510,151365],{"class":38},[28,153512,35],{"class":34},[28,153514,151370],{"class":38},[28,153516,153517],{"class":30,"line":48},[28,153518,2662],{"emptyLinePlaceholder":336},[28,153520,153521],{"class":30,"line":84},[28,153522,2662],{"emptyLinePlaceholder":336},[28,153524,153525],{"class":30,"line":91},[28,153526,151383],{"class":2225},[28,153528,153529,153531,153533],{"class":30,"line":97},[28,153530,14956],{"class":34},[28,153532,8160],{"class":2225},[28,153534,4001],{"class":38},[28,153536,153537,153540],{"class":30,"line":103},[28,153538,153539],{"class":38},"    student_id: ",[28,153541,151399],{"class":60},[28,153543,153544,153546],{"class":30,"line":109},[28,153545,151396],{"class":38},[28,153547,151399],{"class":60},[28,153549,153550,153552],{"class":30,"line":118},[28,153551,151404],{"class":38},[28,153553,151407],{"class":60},[28,153555,153556,153558],{"class":30,"line":124},[28,153557,151412],{"class":38},[28,153559,151415],{"class":60},[28,153561,153562],{"class":30,"line":131},[28,153563,2662],{"emptyLinePlaceholder":336},[28,153565,153566,153568,153570],{"class":30,"line":137},[28,153567,31061],{"class":34},[28,153569,151563],{"class":2225},[28,153571,31067],{"class":38},[28,153573,153574,153576],{"class":30,"line":143},[28,153575,15014],{"class":34},[28,153577,15834],{"class":38},[28,153579,153580,153582,153584,153586],{"class":30,"line":149},[28,153581,151576],{"class":127},[28,153583,51693],{"class":38},[28,153585,31083],{"class":60},[28,153587,151583],{"class":38},[28,153589,153590,153592,153594,153596],{"class":30,"line":1890},[28,153591,151588],{"class":127},[28,153593,51693],{"class":38},[28,153595,31083],{"class":60},[28,153597,151595],{"class":38},[28,153599,153600,153602,153604,153606],{"class":30,"line":1904},[28,153601,151600],{"class":127},[28,153603,51693],{"class":38},[28,153605,31083],{"class":60},[28,153607,151607],{"class":38},[28,153609,153610,153612,153614,153616],{"class":30,"line":1909},[28,153611,151612],{"class":127},[28,153613,51693],{"class":38},[28,153615,31083],{"class":60},[28,153617,151619],{"class":38},[28,153619,153620],{"class":30,"line":1915},[28,153621,2791],{"class":38},[28,153623,153624],{"class":30,"line":1936},[28,153625,2662],{"emptyLinePlaceholder":336},[28,153627,153628,153630],{"class":30,"line":1941},[28,153629,151227],{"class":2225},[28,153631,151230],{"class":60},[28,153633,153634,153636,153638],{"class":30,"line":1955},[28,153635,31061],{"class":34},[28,153637,151640],{"class":2225},[28,153639,151643],{"class":38},[28,153641,153642,153644,153646],{"class":30,"line":1960},[28,153643,15014],{"class":34},[28,153645,151247],{"class":60},[28,153647,151652],{"class":38},[28,153649,153650,153652,153654],{"class":30,"line":1989},[28,153651,151657],{"class":38},[28,153653,151660],{"class":127},[28,153655,88092],{"class":38},[28,153657,153658,153660,153662],{"class":30,"line":1994},[28,153659,151657],{"class":38},[28,153661,62935],{"class":127},[28,153663,88092],{"class":38},[28,153665,153666,153668,153670],{"class":30,"line":2011},[28,153667,151657],{"class":38},[28,153669,69380],{"class":127},[28,153671,88092],{"class":38},[28,153673,153674,153676,153678],{"class":30,"line":2016},[28,153675,151657],{"class":38},[28,153677,151685],{"class":127},[28,153679,88092],{"class":38},[28,153681,153682],{"class":30,"line":2021},[28,153683,38382],{"class":38},[14,153685,153686],{},"管理器示意：",[18,153688,153690],{"className":20,"code":153689,"language":22,"meta":23,"style":23},"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",[25,153691,153692,153701,153709,153720,153724,153734,153747,153758,153765,153771,153775,153784,153793,153799,153806],{"__ignoreMap":23},[28,153693,153694,153696,153699],{"class":30,"line":31},[28,153695,14956],{"class":34},[28,153697,153698],{"class":2225}," StudentManager",[28,153700,4001],{"class":38},[28,153702,153703,153705,153707],{"class":30,"line":48},[28,153704,31061],{"class":34},[28,153706,31064],{"class":60},[28,153708,31067],{"class":38},[28,153710,153711,153713,153716,153718],{"class":30,"line":84},[28,153712,31105],{"class":60},[28,153714,153715],{"class":38},".students ",[28,153717,54],{"class":34},[28,153719,52094],{"class":38},[28,153721,153722],{"class":30,"line":91},[28,153723,2662],{"emptyLinePlaceholder":336},[28,153725,153726,153728,153731],{"class":30,"line":97},[28,153727,31061],{"class":34},[28,153729,153730],{"class":2225}," find_by_id",[28,153732,153733],{"class":38},"(self, student_id):\n",[28,153735,153736,153738,153740,153742,153744],{"class":30,"line":103},[28,153737,3665],{"class":34},[28,153739,152350],{"class":38},[28,153741,26306],{"class":34},[28,153743,39129],{"class":60},[28,153745,153746],{"class":38},".students:\n",[28,153748,153749,153751,153754,153756],{"class":30,"line":109},[28,153750,4904],{"class":34},[28,153752,153753],{"class":38}," student.student_id ",[28,153755,3211],{"class":34},[28,153757,152371],{"class":38},[28,153759,153760,153763],{"class":30,"line":118},[28,153761,153762],{"class":34},"                return",[28,153764,152378],{"class":38},[28,153766,153767,153769],{"class":30,"line":124},[28,153768,15014],{"class":34},[28,153770,152385],{"class":60},[28,153772,153773],{"class":30,"line":131},[28,153774,2662],{"emptyLinePlaceholder":336},[28,153776,153777,153779,153781],{"class":30,"line":137},[28,153778,31061],{"class":34},[28,153780,5471],{"class":2225},[28,153782,153783],{"class":38},"(self, student):\n",[28,153785,153786,153788,153790],{"class":30,"line":143},[28,153787,2759],{"class":34},[28,153789,39129],{"class":60},[28,153791,153792],{"class":38},".find_by_id(student.student_id):\n",[28,153794,153795,153797],{"class":30,"line":149},[28,153796,15994],{"class":34},[28,153798,126020],{"class":60},[28,153800,153801,153803],{"class":30,"line":1890},[28,153802,31105],{"class":60},[28,153804,153805],{"class":38},".students.append(student)\n",[28,153807,153808,153810],{"class":30,"line":1904},[28,153809,15014],{"class":34},[28,153811,153812],{"class":60}," True\n",[14,153814,153815],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[351,153817,153819],{"id":153818},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[380,153821,153823],{"id":153822},"_1251-数据结构","12.5.1 数据结构",[18,153825,153827],{"className":20,"code":153826,"language":22,"meta":23,"style":23},"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",[25,153828,153829,153837,153868,153898,153927,153956],{"__ignoreMap":23},[28,153830,153831,153833,153835],{"class":30,"line":31},[28,153832,148678],{"class":38},[28,153834,54],{"class":34},[28,153836,55703],{"class":38},[28,153838,153839,153841,153843,153845,153847,153849,153852,153854,153857,153859,153861,153863,153866],{"class":30,"line":48},[28,153840,148598],{"class":38},[28,153842,148210],{"class":127},[28,153844,51693],{"class":38},[28,153846,148821],{"class":127},[28,153848,12697],{"class":38},[28,153850,153851],{"class":127},"\"category\"",[28,153853,51693],{"class":38},[28,153855,153856],{"class":127},"\"手机\"",[28,153858,12697],{"class":38},[28,153860,84340],{"class":127},[28,153862,51693],{"class":38},[28,153864,153865],{"class":60},"12000",[28,153867,5192],{"class":38},[28,153869,153870,153872,153874,153876,153878,153880,153882,153884,153887,153889,153891,153893,153896],{"class":30,"line":84},[28,153871,148598],{"class":38},[28,153873,148210],{"class":127},[28,153875,51693],{"class":38},[28,153877,148821],{"class":127},[28,153879,12697],{"class":38},[28,153881,153851],{"class":127},[28,153883,51693],{"class":38},[28,153885,153886],{"class":127},"\"电脑\"",[28,153888,12697],{"class":38},[28,153890,84340],{"class":127},[28,153892,51693],{"class":38},[28,153894,153895],{"class":60},"18000",[28,153897,5192],{"class":38},[28,153899,153900,153902,153904,153906,153908,153910,153912,153914,153916,153918,153920,153922,153925],{"class":30,"line":91},[28,153901,148598],{"class":38},[28,153903,148210],{"class":127},[28,153905,51693],{"class":38},[28,153907,148842],{"class":127},[28,153909,12697],{"class":38},[28,153911,153851],{"class":127},[28,153913,51693],{"class":38},[28,153915,153856],{"class":127},[28,153917,12697],{"class":38},[28,153919,84340],{"class":127},[28,153921,51693],{"class":38},[28,153923,153924],{"class":60},"15000",[28,153926,5192],{"class":38},[28,153928,153929,153931,153933,153935,153937,153939,153941,153943,153945,153947,153949,153951,153954],{"class":30,"line":97},[28,153930,148598],{"class":38},[28,153932,148210],{"class":127},[28,153934,51693],{"class":38},[28,153936,148842],{"class":127},[28,153938,12697],{"class":38},[28,153940,153851],{"class":127},[28,153942,51693],{"class":38},[28,153944,153886],{"class":127},[28,153946,12697],{"class":38},[28,153948,84340],{"class":127},[28,153950,51693],{"class":38},[28,153952,153953],{"class":60},"16000",[28,153955,5192],{"class":38},[28,153957,153958],{"class":30,"line":103},[28,153959,33502],{"class":38},[380,153961,153963],{"id":153962},"_1252-按日期统计","12.5.2 按日期统计",[18,153965,153967],{"className":20,"code":153966,"language":22,"meta":23,"style":23},"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",[25,153968,153969,153978,153982,153993,154007,154020,154039,154043],{"__ignoreMap":23},[28,153970,153971,153974,153976],{"class":30,"line":31},[28,153972,153973],{"class":38},"daily_total ",[28,153975,54],{"class":34},[28,153977,88124],{"class":38},[28,153979,153980],{"class":30,"line":48},[28,153981,2662],{"emptyLinePlaceholder":336},[28,153983,153984,153986,153988,153990],{"class":30,"line":84},[28,153985,3287],{"class":34},[28,153987,148422],{"class":38},[28,153989,26306],{"class":34},[28,153991,153992],{"class":38}," sales:\n",[28,153994,153995,153998,154000,154003,154005],{"class":30,"line":91},[28,153996,153997],{"class":38},"    date ",[28,153999,54],{"class":34},[28,154001,154002],{"class":38}," item[",[28,154004,148210],{"class":127},[28,154006,33502],{"class":38},[28,154008,154009,154012,154014,154016,154018],{"class":30,"line":97},[28,154010,154011],{"class":38},"    amount ",[28,154013,54],{"class":34},[28,154015,154002],{"class":38},[28,154017,84340],{"class":127},[28,154019,33502],{"class":38},[28,154021,154022,154025,154027,154030,154032,154034,154036],{"class":30,"line":103},[28,154023,154024],{"class":38},"    daily_total[date] ",[28,154026,54],{"class":34},[28,154028,154029],{"class":38}," daily_total.get(date, ",[28,154031,244],{"class":60},[28,154033,13976],{"class":38},[28,154035,880],{"class":34},[28,154037,154038],{"class":38}," amount\n",[28,154040,154041],{"class":30,"line":109},[28,154042,2662],{"emptyLinePlaceholder":336},[28,154044,154045,154047],{"class":30,"line":118},[28,154046,30675],{"class":60},[28,154048,154049],{"class":38},"(daily_total)\n",[380,154051,154053],{"id":154052},"_1253-按类别统计","12.5.3 按类别统计",[18,154055,154057],{"className":20,"code":154056,"language":22,"meta":23,"style":23},"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",[25,154058,154059,154068,154072,154082,154095,154107,154125,154129],{"__ignoreMap":23},[28,154060,154061,154064,154066],{"class":30,"line":31},[28,154062,154063],{"class":38},"category_total ",[28,154065,54],{"class":34},[28,154067,88124],{"class":38},[28,154069,154070],{"class":30,"line":48},[28,154071,2662],{"emptyLinePlaceholder":336},[28,154073,154074,154076,154078,154080],{"class":30,"line":84},[28,154075,3287],{"class":34},[28,154077,148422],{"class":38},[28,154079,26306],{"class":34},[28,154081,153992],{"class":38},[28,154083,154084,154087,154089,154091,154093],{"class":30,"line":91},[28,154085,154086],{"class":38},"    category ",[28,154088,54],{"class":34},[28,154090,154002],{"class":38},[28,154092,153851],{"class":127},[28,154094,33502],{"class":38},[28,154096,154097,154099,154101,154103,154105],{"class":30,"line":97},[28,154098,154011],{"class":38},[28,154100,54],{"class":34},[28,154102,154002],{"class":38},[28,154104,84340],{"class":127},[28,154106,33502],{"class":38},[28,154108,154109,154112,154114,154117,154119,154121,154123],{"class":30,"line":103},[28,154110,154111],{"class":38},"    category_total[category] ",[28,154113,54],{"class":34},[28,154115,154116],{"class":38}," category_total.get(category, ",[28,154118,244],{"class":60},[28,154120,13976],{"class":38},[28,154122,880],{"class":34},[28,154124,154038],{"class":38},[28,154126,154127],{"class":30,"line":109},[28,154128,2662],{"emptyLinePlaceholder":336},[28,154130,154131,154133],{"class":30,"line":118},[28,154132,30675],{"class":60},[28,154134,154135],{"class":38},"(category_total)\n",[380,154137,154139],{"id":154138},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[18,154141,154143],{"className":20,"code":154142,"language":22,"meta":23,"style":23},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[25,154144,154145,154170],{"__ignoreMap":23},[28,154146,154147,154150,154152,154154,154157,154160,154163,154166,154168],{"class":30,"line":31},[28,154148,154149],{"class":38},"top_date, top_amount ",[28,154151,54],{"class":34},[28,154153,6213],{"class":60},[28,154155,154156],{"class":38},"(daily_total.items(), ",[28,154158,154159],{"class":5478},"key",[28,154161,154162],{"class":34},"=lambda",[28,154164,154165],{"class":38}," item: item[",[28,154167,61],{"class":60},[28,154169,4919],{"class":38},[28,154171,154172,154174],{"class":30,"line":48},[28,154173,30675],{"class":60},[28,154175,154176],{"class":38},"(top_date, top_amount)\n",[351,154178,154180],{"id":154179},"_126-绘制柱状图","12.6 绘制柱状图",[18,154182,154184],{"className":20,"code":154183,"language":22,"meta":23,"style":23},"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",[25,154185,154186,154200,154211,154215,154223,154235,154247,154258,154262,154266,154276,154287,154301,154306,154323,154340,154356,154360],{"__ignoreMap":23},[28,154187,154188,154190,154192,154194,154196,154198],{"class":30,"line":31},[28,154189,30997],{"class":34},[28,154191,147592],{"class":38},[28,154193,35],{"class":34},[28,154195,147597],{"class":38},[28,154197,42],{"class":34},[28,154199,147602],{"class":38},[28,154201,154202,154204,154206,154208],{"class":30,"line":48},[28,154203,30997],{"class":34},[28,154205,147451],{"class":38},[28,154207,35],{"class":34},[28,154209,154210],{"class":38}," Bar\n",[28,154212,154213],{"class":30,"line":84},[28,154214,2662],{"emptyLinePlaceholder":336},[28,154216,154217,154219,154221],{"class":30,"line":91},[28,154218,154063],{"class":38},[28,154220,54],{"class":34},[28,154222,15834],{"class":38},[28,154224,154225,154228,154230,154233],{"class":30,"line":97},[28,154226,154227],{"class":127},"    \"手机\"",[28,154229,51693],{"class":38},[28,154231,154232],{"class":60},"27000",[28,154234,31723],{"class":38},[28,154236,154237,154240,154242,154245],{"class":30,"line":103},[28,154238,154239],{"class":127},"    \"电脑\"",[28,154241,51693],{"class":38},[28,154243,154244],{"class":60},"34000",[28,154246,31723],{"class":38},[28,154248,154249,154252,154254,154256],{"class":30,"line":109},[28,154250,154251],{"class":127},"    \"耳机\"",[28,154253,51693],{"class":38},[28,154255,124612],{"class":60},[28,154257,31723],{"class":38},[28,154259,154260],{"class":30,"line":118},[28,154261,1830],{"class":38},[28,154263,154264],{"class":30,"line":124},[28,154265,2662],{"emptyLinePlaceholder":336},[28,154267,154268,154271,154273],{"class":30,"line":131},[28,154269,154270],{"class":38},"bar ",[28,154272,54],{"class":34},[28,154274,154275],{"class":38}," Bar()\n",[28,154277,154278,154281,154284],{"class":30,"line":137},[28,154279,154280],{"class":38},"bar.add_xaxis(",[28,154282,154283],{"class":60},"list",[28,154285,154286],{"class":38},"(category_total.keys()))\n",[28,154288,154289,154292,154294,154296,154298],{"class":30,"line":143},[28,154290,154291],{"class":38},"bar.add_yaxis(",[28,154293,147508],{"class":127},[28,154295,12697],{"class":38},[28,154297,154283],{"class":60},[28,154299,154300],{"class":38},"(category_total.values()))\n",[28,154302,154303],{"class":30,"line":149},[28,154304,154305],{"class":38},"bar.set_global_opts(\n",[28,154307,154308,154310,154312,154314,154316,154318,154321],{"class":30,"line":1890},[28,154309,147686],{"class":5478},[28,154311,54],{"class":34},[28,154313,147691],{"class":38},[28,154315,51663],{"class":5478},[28,154317,54],{"class":34},[28,154319,154320],{"class":127},"\"品类销售额\"",[28,154322,38303],{"class":38},[28,154324,154325,154327,154329,154331,154333,154335,154338],{"class":30,"line":1904},[28,154326,147705],{"class":5478},[28,154328,54],{"class":34},[28,154330,147710],{"class":38},[28,154332,80066],{"class":5478},[28,154334,54],{"class":34},[28,154336,154337],{"class":127},"\"品类\"",[28,154339,38303],{"class":38},[28,154341,154342,154344,154346,154348,154350,154352,154354],{"class":30,"line":1909},[28,154343,147724],{"class":5478},[28,154345,54],{"class":34},[28,154347,147710],{"class":38},[28,154349,80066],{"class":5478},[28,154351,54],{"class":34},[28,154353,147508],{"class":127},[28,154355,38303],{"class":38},[28,154357,154358],{"class":30,"line":1915},[28,154359,81],{"class":38},[28,154361,154362,154365,154368],{"class":30,"line":1936},[28,154363,154364],{"class":38},"bar.render(",[28,154366,154367],{"class":127},"\"category_sales.html\"",[28,154369,81],{"class":38},[351,154371,154373],{"id":154372},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154375,154376],{},"时间线适合展示不同日期、月份、年份的数据变化。",[18,154378,154380],{"className":20,"code":154379,"language":22,"meta":23,"style":23},"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",[25,154381,154382,154396,154407,154411,154419,154443,154466,154491,154495,154499,154509,154513,154524,154533,154543,154557,154588,154593,154597],{"__ignoreMap":23},[28,154383,154384,154386,154388,154390,154392,154394],{"class":30,"line":31},[28,154385,30997],{"class":34},[28,154387,147592],{"class":38},[28,154389,35],{"class":34},[28,154391,147597],{"class":38},[28,154393,42],{"class":34},[28,154395,147602],{"class":38},[28,154397,154398,154400,154402,154404],{"class":30,"line":48},[28,154399,30997],{"class":34},[28,154401,147451],{"class":38},[28,154403,35],{"class":34},[28,154405,154406],{"class":38}," Bar, Timeline\n",[28,154408,154409],{"class":30,"line":84},[28,154410,2662],{"emptyLinePlaceholder":336},[28,154412,154413,154415,154417],{"class":30,"line":91},[28,154414,101871],{"class":38},[28,154416,54],{"class":34},[28,154418,15834],{"class":38},[28,154420,154421,154424,154427,154429,154431,154433,154435,154437,154439,154441],{"class":30,"line":97},[28,154422,154423],{"class":127},"    \"2024-10-01\"",[28,154425,154426],{"class":38},": {",[28,154428,153856],{"class":127},[28,154430,51693],{"class":38},[28,154432,153865],{"class":60},[28,154434,12697],{"class":38},[28,154436,153886],{"class":127},[28,154438,51693],{"class":38},[28,154440,153895],{"class":60},[28,154442,5192],{"class":38},[28,154444,154445,154448,154450,154452,154454,154456,154458,154460,154462,154464],{"class":30,"line":103},[28,154446,154447],{"class":127},"    \"2024-10-02\"",[28,154449,154426],{"class":38},[28,154451,153856],{"class":127},[28,154453,51693],{"class":38},[28,154455,153924],{"class":60},[28,154457,12697],{"class":38},[28,154459,153886],{"class":127},[28,154461,51693],{"class":38},[28,154463,153953],{"class":60},[28,154465,5192],{"class":38},[28,154467,154468,154471,154473,154475,154477,154480,154482,154484,154486,154489],{"class":30,"line":109},[28,154469,154470],{"class":127},"    \"2024-10-03\"",[28,154472,154426],{"class":38},[28,154474,153856],{"class":127},[28,154476,51693],{"class":38},[28,154478,154479],{"class":60},"17000",[28,154481,12697],{"class":38},[28,154483,153886],{"class":127},[28,154485,51693],{"class":38},[28,154487,154488],{"class":60},"19000",[28,154490,5192],{"class":38},[28,154492,154493],{"class":30,"line":118},[28,154494,1830],{"class":38},[28,154496,154497],{"class":30,"line":124},[28,154498,2662],{"emptyLinePlaceholder":336},[28,154500,154501,154504,154506],{"class":30,"line":131},[28,154502,154503],{"class":38},"timeline ",[28,154505,54],{"class":34},[28,154507,154508],{"class":38}," Timeline()\n",[28,154510,154511],{"class":30,"line":137},[28,154512,2662],{"emptyLinePlaceholder":336},[28,154514,154515,154517,154520,154522],{"class":30,"line":143},[28,154516,3287],{"class":34},[28,154518,154519],{"class":38}," date, category_data ",[28,154521,26306],{"class":34},[28,154523,149361],{"class":38},[28,154525,154526,154529,154531],{"class":30,"line":149},[28,154527,154528],{"class":38},"    bar ",[28,154530,54],{"class":34},[28,154532,154275],{"class":38},[28,154534,154535,154538,154540],{"class":30,"line":1890},[28,154536,154537],{"class":38},"    bar.add_xaxis(",[28,154539,154283],{"class":60},[28,154541,154542],{"class":38},"(category_data.keys()))\n",[28,154544,154545,154548,154550,154552,154554],{"class":30,"line":1904},[28,154546,154547],{"class":38},"    bar.add_yaxis(",[28,154549,147508],{"class":127},[28,154551,12697],{"class":38},[28,154553,154283],{"class":60},[28,154555,154556],{"class":38},"(category_data.values()))\n",[28,154558,154559,154562,154565,154567,154569,154571,154573,154575,154577,154579,154581,154583,154586],{"class":30,"line":1909},[28,154560,154561],{"class":38},"    bar.set_global_opts(",[28,154563,154564],{"class":5478},"title_opts",[28,154566,54],{"class":34},[28,154568,147691],{"class":38},[28,154570,51663],{"class":5478},[28,154572,54],{"class":34},[28,154574,462],{"class":34},[28,154576,654],{"class":127},[28,154578,1293],{"class":60},[28,154580,74182],{"class":38},[28,154582,1343],{"class":60},[28,154584,154585],{"class":127},"销售额\"",[28,154587,30757],{"class":38},[28,154589,154590],{"class":30,"line":1915},[28,154591,154592],{"class":38},"    timeline.add(bar, date)\n",[28,154594,154595],{"class":30,"line":1936},[28,154596,2662],{"emptyLinePlaceholder":336},[28,154598,154599,154602,154605],{"class":30,"line":1941},[28,154600,154601],{"class":38},"timeline.render(",[28,154603,154604],{"class":127},"\"timeline_sales.html\"",[28,154606,81],{"class":38},[351,154608,154610],{"id":154609},"_128-绘制地图","12.8 绘制地图",[14,154612,154613],{},"地图适合展示地区数据。",[18,154615,154617],{"className":20,"code":154616,"language":22,"meta":23,"style":23},"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",[25,154618,154619,154633,154644,154648,154656,154669,154681,154694,154707,154711,154715,154725,154740,154745,154762,154781,154785],{"__ignoreMap":23},[28,154620,154621,154623,154625,154627,154629,154631],{"class":30,"line":31},[28,154622,30997],{"class":34},[28,154624,147592],{"class":38},[28,154626,35],{"class":34},[28,154628,147597],{"class":38},[28,154630,42],{"class":34},[28,154632,147602],{"class":38},[28,154634,154635,154637,154639,154641],{"class":30,"line":48},[28,154636,30997],{"class":34},[28,154638,147451],{"class":38},[28,154640,35],{"class":34},[28,154642,154643],{"class":38}," Map\n",[28,154645,154646],{"class":30,"line":84},[28,154647,2662],{"emptyLinePlaceholder":336},[28,154649,154650,154652,154654],{"class":30,"line":91},[28,154651,101871],{"class":38},[28,154653,54],{"class":34},[28,154655,55703],{"class":38},[28,154657,154658,154661,154663,154665,154667],{"class":30,"line":97},[28,154659,154660],{"class":38},"    (",[28,154662,69525],{"class":127},[28,154664,12697],{"class":38},[28,154666,1215],{"class":60},[28,154668,38303],{"class":38},[28,154670,154671,154673,154675,154677,154679],{"class":30,"line":103},[28,154672,154660],{"class":38},[28,154674,69545],{"class":127},[28,154676,12697],{"class":38},[28,154678,147525],{"class":60},[28,154680,38303],{"class":38},[28,154682,154683,154685,154688,154690,154692],{"class":30,"line":109},[28,154684,154660],{"class":38},[28,154686,154687],{"class":127},"\"广东\"",[28,154689,12697],{"class":38},[28,154691,1984],{"class":60},[28,154693,38303],{"class":38},[28,154695,154696,154698,154701,154703,154705],{"class":30,"line":118},[28,154697,154660],{"class":38},[28,154699,154700],{"class":127},"\"浙江\"",[28,154702,12697],{"class":38},[28,154704,147530],{"class":60},[28,154706,38303],{"class":38},[28,154708,154709],{"class":30,"line":124},[28,154710,33502],{"class":38},[28,154712,154713],{"class":30,"line":131},[28,154714,2662],{"emptyLinePlaceholder":336},[28,154716,154717,154720,154722],{"class":30,"line":137},[28,154718,154719],{"class":38},"map_chart ",[28,154721,54],{"class":34},[28,154723,154724],{"class":38}," Map()\n",[28,154726,154727,154730,154732,154735,154738],{"class":30,"line":143},[28,154728,154729],{"class":38},"map_chart.add(",[28,154731,147508],{"class":127},[28,154733,154734],{"class":38},", data, ",[28,154736,154737],{"class":127},"\"china\"",[28,154739,81],{"class":38},[28,154741,154742],{"class":30,"line":149},[28,154743,154744],{"class":38},"map_chart.set_global_opts(\n",[28,154746,154747,154749,154751,154753,154755,154757,154760],{"class":30,"line":1890},[28,154748,147686],{"class":5478},[28,154750,54],{"class":34},[28,154752,147691],{"class":38},[28,154754,51663],{"class":5478},[28,154756,54],{"class":34},[28,154758,154759],{"class":127},"\"地区销售额\"",[28,154761,38303],{"class":38},[28,154763,154764,154767,154769,154772,154775,154777,154779],{"class":30,"line":1904},[28,154765,154766],{"class":5478},"    visualmap_opts",[28,154768,54],{"class":34},[28,154770,154771],{"class":38},"opts.VisualMapOpts(",[28,154773,154774],{"class":5478},"max_",[28,154776,54],{"class":34},[28,154778,1984],{"class":60},[28,154780,38303],{"class":38},[28,154782,154783],{"class":30,"line":1909},[28,154784,81],{"class":38},[28,154786,154787,154790,154793],{"class":30,"line":1915},[28,154788,154789],{"class":38},"map_chart.render(",[28,154791,154792],{"class":127},"\"map_sales.html\"",[28,154794,81],{"class":38},[14,154796,154797],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[351,154799,154801],{"id":154800},"_129-项目拆分建议","12.9 项目拆分建议",[14,154803,154804],{},"当代码超过一个文件时，可以这样组织：",[18,154806,154809],{"className":154807,"code":154808,"language":5449,"meta":23},[5447],"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",[25,154810,154808],{"__ignoreMap":23},[14,154812,154813],{},"职责：",[363,154815,154816,154822,154828,154834],{},[366,154817,154818,154821],{},[25,154819,154820],{},"main.py","：程序入口。",[366,154823,154824,154827],{},[25,154825,154826],{},"file_utils.py","：读写 JSON。",[366,154829,154830,154833],{},[25,154831,154832],{},"sales_service.py","：统计销售数据。",[366,154835,154836,154839],{},[25,154837,154838],{},"chart_builder.py","：生成图表。",[351,154841,154843],{"id":154842},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154845,154846],{},"语法基础：",[363,154848,154849,154852,154855,154858],{},[366,154850,154851],{},"会写变量、注释、输入输出。",[366,154853,154854],{},"会使用 int、float、str、bool。",[366,154856,154857],{},"会做类型转换。",[366,154859,154860],{},"会使用 f-string 格式化输出。",[14,154862,154863],{},"流程控制：",[363,154865,154866,154872,154878,154886],{},[366,154867,154868,154869,28648],{},"会写 ",[25,154870,154871],{},"if elif else",[366,154873,154868,154874,101231,154876,28648],{},[25,154875,108876],{},[25,154877,3287],{},[366,154879,154880,154881,101231,154883,28648],{},"理解 ",[25,154882,2315],{},[25,154884,154885],{},"continue",[366,154887,154888],{},"能写嵌套循环。",[14,154890,154891],{},"函数：",[363,154893,154894,154897,154900,154903],{},[366,154895,154896],{},"会定义和调用函数。",[366,154898,154899],{},"理解参数和返回值。",[366,154901,154902],{},"知道局部变量和全局变量。",[366,154904,154905],{},"会使用默认参数、关键字参数、不定长参数。",[14,154907,154908],{},"容器：",[363,154910,154911,154914,154917,154920,154923],{},[366,154912,154913],{},"会使用列表增删改查。",[366,154915,154916],{},"会遍历列表、字典。",[366,154918,154919],{},"会使用切片。",[366,154921,154922],{},"会用集合去重。",[366,154924,154925],{},"会处理列表嵌套字典。",[14,154927,154928],{},"文件和模块：",[363,154930,154931,154934,154937,154940,154943],{},[366,154932,154933],{},"会读写文本文件。",[366,154935,154936],{},"会读写 JSON。",[366,154938,154939],{},"会捕获常见异常。",[366,154941,154942],{},"会导入模块和第三方包。",[366,154944,154945],{},"会创建简单包结构。",[14,154947,154948],{},"项目能力：",[363,154950,154951,154954,154957,154960,154963],{},[366,154952,154953],{},"能把代码拆成函数。",[366,154955,154956],{},"能把数据保存到文件。",[366,154958,154959],{},"能处理用户输入错误。",[366,154961,154962],{},"能写一个完整菜单程序。",[366,154964,154965],{},"能用 pyecharts 生成图表。",[351,154967,154969],{"id":154968},"_1211-推荐练习顺序","12.11 推荐练习顺序",[363,154971,154972,154975,154978,154981,154984,154987,154990,154993],{},[366,154973,154974],{},"猜数字游戏。",[366,154976,154977],{},"ATM 菜单程序。",[366,154979,154980],{},"学生成绩统计。",[366,154982,154983],{},"学生管理系统函数版。",[366,154985,154986],{},"学生管理系统文件持久化版。",[366,154988,154989],{},"学生管理系统面向对象版。",[366,154991,154992],{},"销售数据统计。",[366,154994,154995],{},"销售数据可视化。",[351,154997,154999],{"id":154998},"_1212-常见学习误区","12.12 常见学习误区",[363,155001,155002,155005,155008,155011,155014,155017,155020],{},[366,155003,155004],{},"只看视频不敲代码。",[366,155006,155007],{},"一报错就复制错误去搜，不先读报错位置。",[366,155009,155010],{},"变量名随便写，后续自己看不懂。",[366,155012,155013],{},"所有代码都写在一个文件一个函数里。",[366,155015,155016],{},"不保存练习代码，复习时没有材料。",[366,155018,155019],{},"还没掌握列表字典就急着学框架。",[366,155021,155022],{},"不会读官方文档，只依赖教程。",[351,155024,155026],{"id":155025},"_1213-如何读报错","12.13 如何读报错",[14,155028,155029],{},"报错通常从下往上看最后几行。",[14,155031,15397],{},[18,155033,155036],{"className":155034,"code":155035,"language":5449,"meta":23},[5447],"ValueError: invalid literal for int() with base 10: 'abc'\n",[25,155037,155035],{"__ignoreMap":23},[14,155039,24862],{},[363,155041,155042,155048,155058],{},[366,155043,155044,155045,28648],{},"异常类型是 ",[25,155046,155047],{},"ValueError",[366,155049,107558,155050,155053,155054,155057],{},[25,155051,155052],{},"int()"," 无法把 ",[25,155055,155056],{},"'abc'"," 转成整数。",[366,155059,155060],{},"应该检查输入内容或增加异常处理。",[14,155062,155063],{},"再看文件名和行号：",[18,155065,155068],{"className":155066,"code":155067,"language":5449,"meta":23},[5447],"File \"main.py\", line 10, in \u003Cmodule>\n",[25,155069,155067],{"__ignoreMap":23},[14,155071,155072,155073,155075],{},"表示错误发生在 ",[25,155074,154820],{}," 第 10 行。",[351,155077,155079],{"id":155078},"_1214-后续学习方向","12.14 后续学习方向",[14,155081,155082],{},"Python 基础完成后，可以按兴趣选择方向：",[363,155084,155085,155097,155106,155118,155129,155138,155148],{},[366,155086,155087,155088,617,155091,617,155094,28648],{},"自动化办公：",[25,155089,155090],{},"openpyxl",[25,155092,155093],{},"python-docx",[25,155095,155096],{},"pdfplumber",[366,155098,155099,155100,617,155102,617,155104,28648],{},"数据分析：",[25,155101,100839],{},[25,155103,146398],{},[25,155105,146406],{},[366,155107,155108,155109,617,155112,617,155115,28648],{},"Web 后端：",[25,155110,155111],{},"Flask",[25,155113,155114],{},"FastAPI",[25,155116,155117],{},"Django",[366,155119,155120,155121,617,155123,617,155126,28648],{},"爬虫：",[25,155122,146383],{},[25,155124,155125],{},"BeautifulSoup",[25,155127,155128],{},"Scrapy",[366,155130,155131,155132,617,155134,155137],{},"测试开发：",[25,155133,146430],{},[25,155135,155136],{},"selenium","、接口测试。",[366,155139,155140,155141,617,155143,617,155145,28648],{},"人工智能：",[25,155142,100839],{},[25,155144,146398],{},[25,155146,155147],{},"pytorch",[366,155149,155150,155151,617,155153,617,155156,28648],{},"运维脚本：",[25,155152,145999],{},[25,155154,155155],{},"subprocess",[25,155157,155158],{},"paramiko",[14,155160,155161],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[351,155163,155165],{"id":155164},"_1215-结课练习","12.15 结课练习",[363,155167,155168,155171,155174,155177,155180,155183,155186,155189],{},[366,155169,155170],{},"完成函数版学生管理系统。",[366,155172,155173],{},"给学生管理系统增加 JSON 持久化。",[366,155175,155176],{},"给学生管理系统增加异常处理。",[366,155178,155179],{},"把学生管理系统改成面向对象版。",[366,155181,155182],{},"使用 pyecharts 绘制学生成绩柱状图。",[366,155184,155185],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[366,155187,155188],{},"按品类统计销售额并绘制柱状图。",[366,155190,155191],{},"写一份自己的 Python 学习路线图。",[328,155193,155194],{},"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":23,"searchDepth":48,"depth":48,"links":155196},[155197,155198,155201,155202,155203,155209,155210,155211,155212,155213,155214,155215,155216,155217,155218],{"id":151913,"depth":48,"text":151914},{"id":151963,"depth":48,"text":151964,"children":155199},[155200],{"id":151967,"depth":84,"text":151968},{"id":152006,"depth":48,"text":152007},{"id":153480,"depth":48,"text":153481},{"id":153818,"depth":48,"text":153819,"children":155204},[155205,155206,155207,155208],{"id":153822,"depth":84,"text":153823},{"id":153962,"depth":84,"text":153963},{"id":154052,"depth":84,"text":154053},{"id":154138,"depth":84,"text":154139},{"id":154179,"depth":48,"text":154180},{"id":154372,"depth":48,"text":154373},{"id":154609,"depth":48,"text":154610},{"id":154800,"depth":48,"text":154801},{"id":154842,"depth":48,"text":154843},{"id":154968,"depth":48,"text":154969},{"id":154998,"depth":48,"text":154999},{"id":155025,"depth":48,"text":155026},{"id":155078,"depth":48,"text":155079},{"id":155164,"depth":48,"text":155165},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151905,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155225,"title":155226,"body":155227,"description":333,"extension":334,"meta":157696,"navigation":336,"path":157697,"seo":157698,"stem":157699,"__hash__":157700},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155228,"toc":157671},[155229,155232,155236,155239,155242,155262,155265,155288,155291,155294,155316,155319,155341,155345,155348,155388,155391,155512,155516,155519,155559,155562,155586,155589,155593,155596,155610,155643,155646,155681,155684,155707,155710,155743,155746,155748,155754,155829,155832,155838,155855,155895,155899,155902,155948,155950,155988,155991,156026,156029,156064,156067,156099,156102,156121,156125,156129,156242,156244,156319,156323,156369,156372,156398,156407,156411,156414,156477,156485,156513,156517,156557,156622,156626,156629,156668,156671,156716,156719,156780,156784,156811,156814,156842,156845,156849,156853,156918,156921,156959,156962,156994,156998,157097,157101,157104,157177,157180,157228,157232,157238,157278,157281,157328,157331,157380,157384,157386,157400,157402,157583,157587,157614,157634,157641,157645,157662,157668],[10,155230,155226],{"id":155231},"_2-基础语法变量与字符串",[351,155233,155235],{"id":155234},"_21-注释","2.1 注释",[14,155237,155238],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155240,155241],{},"单行注释：",[18,155243,155245],{"className":20,"code":155244,"language":22,"meta":23,"style":23},"# 这是单行注释\nprint(\"hello\")\n",[25,155246,155247,155252],{"__ignoreMap":23},[28,155248,155249],{"class":30,"line":31},[28,155250,155251],{"class":87},"# 这是单行注释\n",[28,155253,155254,155256,155258,155260],{"class":30,"line":48},[28,155255,30675],{"class":60},[28,155257,413],{"class":38},[28,155259,6106],{"class":127},[28,155261,81],{"class":38},[14,155263,155264],{},"多行说明常用三引号：",[18,155266,155268],{"className":20,"code":155267,"language":22,"meta":23,"style":23},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[25,155269,155270,155274,155279,155284],{"__ignoreMap":23},[28,155271,155272],{"class":30,"line":31},[28,155273,95950],{"class":127},[28,155275,155276],{"class":30,"line":48},[28,155277,155278],{"class":127},"这是多行说明。\n",[28,155280,155281],{"class":30,"line":84},[28,155282,155283],{"class":127},"常用于文件顶部说明、函数说明等。\n",[28,155285,155286],{"class":30,"line":91},[28,155287,95950],{"class":127},[14,155289,155290],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155292,155293],{},"不好：",[18,155295,155297],{"className":20,"code":155296,"language":22,"meta":23,"style":23},"# age 加 1\nage = age + 1\n",[25,155298,155299,155304],{"__ignoreMap":23},[28,155300,155301],{"class":30,"line":31},[28,155302,155303],{"class":87},"# age 加 1\n",[28,155305,155306,155308,155310,155312,155314],{"class":30,"line":48},[28,155307,146759],{"class":38},[28,155309,54],{"class":34},[28,155311,15969],{"class":38},[28,155313,880],{"class":34},[28,155315,55955],{"class":60},[14,155317,155318],{},"较好：",[18,155320,155322],{"className":20,"code":155321,"language":22,"meta":23,"style":23},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[25,155323,155324,155329],{"__ignoreMap":23},[28,155325,155326],{"class":30,"line":31},[28,155327,155328],{"class":87},"# 用户过完生日后，年龄增加一岁\n",[28,155330,155331,155333,155335,155337,155339],{"class":30,"line":48},[28,155332,146759],{"class":38},[28,155334,54],{"class":34},[28,155336,15969],{"class":38},[28,155338,880],{"class":34},[28,155340,55955],{"class":60},[351,155342,155344],{"id":155343},"_22-字面量","2.2 字面量",[14,155346,155347],{},"字面量就是代码中直接写出来的数据。",[18,155349,155351],{"className":20,"code":155350,"language":22,"meta":23,"style":23},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[25,155352,155353,155360,155367,155374,155381],{"__ignoreMap":23},[28,155354,155355,155357],{"class":30,"line":31},[28,155356,713],{"class":60},[28,155358,155359],{"class":87},"          # 整数\n",[28,155361,155362,155364],{"class":30,"line":48},[28,155363,459],{"class":60},[28,155365,155366],{"class":87},"         # 小数\n",[28,155368,155369,155371],{"class":30,"line":84},[28,155370,6106],{"class":127},[28,155372,155373],{"class":87},"      # 字符串\n",[28,155375,155376,155378],{"class":30,"line":91},[28,155377,31733],{"class":60},[28,155379,155380],{"class":87},"         # 布尔值\n",[28,155382,155383,155385],{"class":30,"line":97},[28,155384,95938],{"class":60},[28,155386,155387],{"class":87},"         # 空值\n",[14,155389,155390],{},"常见字面量类型：",[543,155392,155393,155403],{},[546,155394,155395],{},[549,155396,155397,155399,155401],{},[552,155398,23999],{},[552,155400,27755],{},[552,155402,26132],{},[590,155404,155405,155416,155427,155438,155450,155462,155474,155487,155499],{},[549,155406,155407,155409,155413],{},[595,155408,416],{},[595,155410,155411],{},[25,155412,713],{},[595,155414,155415],{},"整数",[549,155417,155418,155420,155424],{},[595,155419,451],{},[595,155421,155422],{},[25,155423,459],{},[595,155425,155426],{},"浮点数",[549,155428,155429,155431,155435],{},[595,155430,1567],{},[595,155432,155433],{},[25,155434,6106],{},[595,155436,155437],{},"字符串",[549,155439,155440,155442,155448],{},[595,155441,1619],{},[595,155443,155444,617,155446],{},[25,155445,31733],{},[25,155447,34243],{},[595,155449,66271],{},[549,155451,155452,155455,155459],{},[595,155453,155454],{},"NoneType",[595,155456,155457],{},[25,155458,95938],{},[595,155460,155461],{},"空值",[549,155463,155464,155466,155471],{},[595,155465,154283],{},[595,155467,155468],{},[25,155469,155470],{},"[1, 2, 3]",[595,155472,155473],{},"列表",[549,155475,155476,155479,155484],{},[595,155477,155478],{},"tuple",[595,155480,155481],{},[25,155482,155483],{},"(1, 2, 3)",[595,155485,155486],{},"元组",[549,155488,155489,155491,155496],{},[595,155490,114759],{},[595,155492,155493],{},[25,155494,155495],{},"{\"name\": \"张三\"}",[595,155497,155498],{},"字典",[549,155500,155501,155504,155509],{},[595,155502,155503],{},"set",[595,155505,155506],{},[25,155507,155508],{},"{1, 2, 3}",[595,155510,155511],{},"集合",[351,155513,155515],{"id":155514},"_23-变量","2.3 变量",[14,155517,155518],{},"变量是保存数据的名字。",[18,155520,155522],{"className":20,"code":155521,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[25,155523,155524,155532,155540,155550],{"__ignoreMap":23},[28,155525,155526,155528,155530],{"class":30,"line":31},[28,155527,146749],{"class":38},[28,155529,54],{"class":34},[28,155531,149566],{"class":127},[28,155533,155534,155536,155538],{"class":30,"line":48},[28,155535,146759],{"class":38},[28,155537,54],{"class":34},[28,155539,146764],{"class":60},[28,155541,155542,155545,155547],{"class":30,"line":84},[28,155543,155544],{"class":38},"height ",[28,155546,54],{"class":34},[28,155548,155549],{"class":60}," 1.75\n",[28,155551,155552,155555,155557],{"class":30,"line":91},[28,155553,155554],{"class":38},"is_student ",[28,155556,54],{"class":34},[28,155558,153812],{"class":60},[14,155560,155561],{},"Python 的变量不需要提前声明类型：",[18,155563,155565],{"className":20,"code":155564,"language":22,"meta":23,"style":23},"score = 100\nscore = \"满分\"\n",[25,155566,155567,155577],{"__ignoreMap":23},[28,155568,155569,155572,155574],{"class":30,"line":31},[28,155570,155571],{"class":38},"score ",[28,155573,54],{"class":34},[28,155575,155576],{"class":60}," 100\n",[28,155578,155579,155581,155583],{"class":30,"line":48},[28,155580,155571],{"class":38},[28,155582,54],{"class":34},[28,155584,155585],{"class":127}," \"满分\"\n",[14,155587,155588],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[351,155590,155592],{"id":155591},"_24-变量命名规则","2.4 变量命名规则",[14,155594,155595],{},"硬性规则：",[363,155597,155598,155601,155604,155607],{},[366,155599,155600],{},"只能由字母、数字、下划线组成。",[366,155602,155603],{},"不能以数字开头。",[366,155605,155606],{},"不能使用 Python 关键字。",[366,155608,155609],{},"区分大小写。",[18,155611,155613],{"className":20,"code":155612,"language":22,"meta":23,"style":23},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[25,155614,155615,155624,155633],{"__ignoreMap":23},[28,155616,155617,155620,155622],{"class":30,"line":31},[28,155618,155619],{"class":38},"user_name ",[28,155621,54],{"class":34},[28,155623,146754],{"class":127},[28,155625,155626,155629,155631],{"class":30,"line":48},[28,155627,155628],{"class":38},"age2 ",[28,155630,54],{"class":34},[28,155632,146764],{"class":60},[28,155634,155635,155638,155640],{"class":30,"line":84},[28,155636,155637],{"class":38},"_token ",[28,155639,54],{"class":34},[28,155641,155642],{"class":127}," \"abc\"\n",[14,155644,155645],{},"错误写法：",[18,155647,155649],{"className":20,"code":155648,"language":22,"meta":23,"style":23},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[25,155650,155651,155660,155672],{"__ignoreMap":23},[28,155652,155653,155656,155658],{"class":30,"line":31},[28,155654,155655],{"class":77659},"2age",[28,155657,13826],{"class":34},[28,155659,146764],{"class":60},[28,155661,155662,155664,155666,155668,155670],{"class":30,"line":48},[28,155663,131797],{"class":38},[28,155665,930],{"class":34},[28,155667,146749],{"class":38},[28,155669,54],{"class":34},[28,155671,146754],{"class":127},[28,155673,155674,155676,155678],{"class":30,"line":84},[28,155675,14956],{"class":34},[28,155677,13826],{"class":34},[28,155679,155680],{"class":127}," \"一班\"\n",[14,155682,155683],{},"查看关键字：",[18,155685,155687],{"className":20,"code":155686,"language":22,"meta":23,"style":23},"import keyword\n\nprint(keyword.kwlist)\n",[25,155688,155689,155696,155700],{"__ignoreMap":23},[28,155690,155691,155693],{"class":30,"line":31},[28,155692,35],{"class":34},[28,155694,155695],{"class":38}," keyword\n",[28,155697,155698],{"class":30,"line":48},[28,155699,2662],{"emptyLinePlaceholder":336},[28,155701,155702,155704],{"class":30,"line":84},[28,155703,30675],{"class":60},[28,155705,155706],{"class":38},"(keyword.kwlist)\n",[14,155708,155709],{},"推荐命名风格：",[18,155711,155713],{"className":20,"code":155712,"language":22,"meta":23,"style":23},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[25,155714,155715,155724,155734],{"__ignoreMap":23},[28,155716,155717,155720,155722],{"class":30,"line":31},[28,155718,155719],{"class":38},"student_name ",[28,155721,54],{"class":34},[28,155723,149566],{"class":127},[28,155725,155726,155729,155731],{"class":30,"line":48},[28,155727,155728],{"class":38},"total_price ",[28,155730,54],{"class":34},[28,155732,155733],{"class":60}," 99.8\n",[28,155735,155736,155739,155741],{"class":30,"line":84},[28,155737,155738],{"class":38},"is_finished ",[28,155740,54],{"class":34},[28,155742,126020],{"class":60},[14,155744,155745],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[351,155747,50988],{"id":50987},[14,155749,104579,155750,155753],{},[25,155751,155752],{},"type()"," 查看数据类型：",[18,155755,155757],{"className":20,"code":155756,"language":22,"meta":23,"style":23},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[25,155758,155759,155773,155787,155801,155815],{"__ignoreMap":23},[28,155760,155761,155763,155765,155767,155769,155771],{"class":30,"line":31},[28,155762,30675],{"class":60},[28,155764,413],{"class":38},[28,155766,103320],{"class":60},[28,155768,413],{"class":38},[28,155770,713],{"class":60},[28,155772,30757],{"class":38},[28,155774,155775,155777,155779,155781,155783,155785],{"class":30,"line":48},[28,155776,30675],{"class":60},[28,155778,413],{"class":38},[28,155780,103320],{"class":60},[28,155782,413],{"class":38},[28,155784,459],{"class":60},[28,155786,30757],{"class":38},[28,155788,155789,155791,155793,155795,155797,155799],{"class":30,"line":84},[28,155790,30675],{"class":60},[28,155792,413],{"class":38},[28,155794,103320],{"class":60},[28,155796,413],{"class":38},[28,155798,6106],{"class":127},[28,155800,30757],{"class":38},[28,155802,155803,155805,155807,155809,155811,155813],{"class":30,"line":91},[28,155804,30675],{"class":60},[28,155806,413],{"class":38},[28,155808,103320],{"class":60},[28,155810,413],{"class":38},[28,155812,31733],{"class":60},[28,155814,30757],{"class":38},[28,155816,155817,155819,155821,155823,155825,155827],{"class":30,"line":97},[28,155818,30675],{"class":60},[28,155820,413],{"class":38},[28,155822,103320],{"class":60},[28,155824,413],{"class":38},[28,155826,95938],{"class":60},[28,155828,30757],{"class":38},[14,155830,155831],{},"输出类似：",[18,155833,155836],{"className":155834,"code":155835,"language":5449,"meta":23},[5447],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[25,155837,155835],{"__ignoreMap":23},[14,155839,9287,155840,107496,155842,155844,155845,155847,155848,21762,155850,155847,155852,155854],{},[25,155841,1619],{},[25,155843,416],{}," 的子类，",[25,155846,31733],{}," 可以当作 ",[25,155849,61],{},[25,155851,34243],{},[25,155853,244],{},"，但业务代码中不要滥用。",[18,155856,155858],{"className":20,"code":155857,"language":22,"meta":23,"style":23},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[25,155859,155860,155878],{"__ignoreMap":23},[28,155861,155862,155864,155866,155868,155870,155872,155875],{"class":30,"line":31},[28,155863,30675],{"class":60},[28,155865,413],{"class":38},[28,155867,31733],{"class":60},[28,155869,45822],{"class":34},[28,155871,25381],{"class":60},[28,155873,155874],{"class":38},")   ",[28,155876,155877],{"class":87},"# 2\n",[28,155879,155880,155882,155884,155886,155888,155890,155892],{"class":30,"line":48},[28,155881,30675],{"class":60},[28,155883,413],{"class":38},[28,155885,34243],{"class":60},[28,155887,45822],{"class":34},[28,155889,25381],{"class":60},[28,155891,46064],{"class":38},[28,155893,155894],{"class":87},"# 1\n",[351,155896,155898],{"id":155897},"_26-类型转换","2.6 类型转换",[14,155900,155901],{},"常用转换函数：",[18,155903,155905],{"className":20,"code":155904,"language":22,"meta":23,"style":23},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[25,155906,155907,155917,155928,155938],{"__ignoreMap":23},[28,155908,155909,155911,155913,155915],{"class":30,"line":31},[28,155910,416],{"class":60},[28,155912,413],{"class":38},[28,155914,54572],{"class":127},[28,155916,81],{"class":38},[28,155918,155919,155921,155923,155926],{"class":30,"line":48},[28,155920,451],{"class":60},[28,155922,413],{"class":38},[28,155924,155925],{"class":127},"\"3.14\"",[28,155927,81],{"class":38},[28,155929,155930,155932,155934,155936],{"class":30,"line":84},[28,155931,1567],{"class":60},[28,155933,413],{"class":38},[28,155935,713],{"class":60},[28,155937,81],{"class":38},[28,155939,155940,155942,155944,155946],{"class":30,"line":91},[28,155941,1619],{"class":60},[28,155943,413],{"class":38},[28,155945,61],{"class":60},[28,155947,81],{"class":38},[14,155949,15397],{},[18,155951,155953],{"className":20,"code":155952,"language":22,"meta":23,"style":23},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[25,155954,155955,155964,155975],{"__ignoreMap":23},[28,155956,155957,155959,155961],{"class":30,"line":31},[28,155958,146759],{"class":38},[28,155960,54],{"class":34},[28,155962,155963],{"class":127}," \"18\"\n",[28,155965,155966,155968,155970,155972],{"class":30,"line":48},[28,155967,146759],{"class":38},[28,155969,54],{"class":34},[28,155971,2644],{"class":60},[28,155973,155974],{"class":38},"(age)\n",[28,155976,155977,155979,155982,155984,155986],{"class":30,"line":84},[28,155978,30675],{"class":60},[28,155980,155981],{"class":38},"(age ",[28,155983,880],{"class":34},[28,155985,25381],{"class":60},[28,155987,81],{"class":38},[14,155989,155990],{},"输入得到的内容永远是字符串：",[18,155992,155994],{"className":20,"code":155993,"language":22,"meta":23,"style":23},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[25,155995,155996,156012],{"__ignoreMap":23},[28,155997,155998,156001,156003,156005,156007,156010],{"class":30,"line":31},[28,155999,156000],{"class":38},"num ",[28,156002,54],{"class":34},[28,156004,60861],{"class":60},[28,156006,413],{"class":38},[28,156008,156009],{"class":127},"\"请输入数字:\"",[28,156011,81],{"class":38},[28,156013,156014,156016,156018,156020,156023],{"class":30,"line":48},[28,156015,30675],{"class":60},[28,156017,413],{"class":38},[28,156019,103320],{"class":60},[28,156021,156022],{"class":38},"(num))  ",[28,156024,156025],{"class":87},"# str\n",[14,156027,156028],{},"如果要做数学运算，必须转换：",[18,156030,156032],{"className":20,"code":156031,"language":22,"meta":23,"style":23},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[25,156033,156034,156052],{"__ignoreMap":23},[28,156035,156036,156038,156040,156042,156044,156046,156048,156050],{"class":30,"line":31},[28,156037,156000],{"class":38},[28,156039,54],{"class":34},[28,156041,2644],{"class":60},[28,156043,413],{"class":38},[28,156045,54077],{"class":60},[28,156047,413],{"class":38},[28,156049,156009],{"class":127},[28,156051,30757],{"class":38},[28,156053,156054,156056,156058,156060,156062],{"class":30,"line":48},[28,156055,30675],{"class":60},[28,156057,45875],{"class":38},[28,156059,880],{"class":34},[28,156061,2300],{"class":60},[28,156063,81],{"class":38},[14,156065,156066],{},"常见错误：",[18,156068,156070],{"className":20,"code":156069,"language":22,"meta":23,"style":23},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[25,156071,156072,156085],{"__ignoreMap":23},[28,156073,156074,156076,156078,156080,156082],{"class":30,"line":31},[28,156075,416],{"class":60},[28,156077,413],{"class":38},[28,156079,155925],{"class":127},[28,156081,155874],{"class":38},[28,156083,156084],{"class":87},"# 错误\n",[28,156086,156087,156089,156091,156094,156097],{"class":30,"line":48},[28,156088,416],{"class":60},[28,156090,413],{"class":38},[28,156092,156093],{"class":127},"\"abc\"",[28,156095,156096],{"class":38},")    ",[28,156098,156084],{"class":87},[14,156100,156101],{},"正确写法：",[18,156103,156105],{"className":20,"code":156104,"language":22,"meta":23,"style":23},"num = float(\"3.14\")\n",[25,156106,156107],{"__ignoreMap":23},[28,156108,156109,156111,156113,156115,156117,156119],{"class":30,"line":31},[28,156110,156000],{"class":38},[28,156112,54],{"class":34},[28,156114,110010],{"class":60},[28,156116,413],{"class":38},[28,156118,155925],{"class":127},[28,156120,81],{"class":38},[351,156122,156124],{"id":156123},"_27-运算符","2.7 运算符",[380,156126,156128],{"id":156127},"_271-算术运算符","2.7.1 算术运算符",[543,156130,156131,156142],{},[546,156132,156133],{},[549,156134,156135,156138,156140],{},[552,156136,156137],{},"运算符",[552,156139,26132],{},[552,156141,27755],{},[590,156143,156144,156158,156172,156186,156200,156214,156228],{},[549,156145,156146,156150,156153],{},[595,156147,156148],{},[25,156149,880],{},[595,156151,156152],{},"加法",[595,156154,156155],{},[25,156156,156157],{},"1 + 2",[549,156159,156160,156164,156167],{},[595,156161,156162],{},[25,156163,930],{},[595,156165,156166],{},"减法",[595,156168,156169],{},[25,156170,156171],{},"5 - 3",[549,156173,156174,156178,156181],{},[595,156175,156176],{},[25,156177,854],{},[595,156179,156180],{},"乘法",[595,156182,156183],{},[25,156184,156185],{},"2 * 3",[549,156187,156188,156192,156195],{},[595,156189,156190],{},[25,156191,982],{},[595,156193,156194],{},"除法，结果是浮点数",[595,156196,156197],{},[25,156198,156199],{},"5 \u002F 2",[549,156201,156202,156206,156209],{},[595,156203,156204],{},[25,156205,33585],{},[595,156207,156208],{},"整除",[595,156210,156211],{},[25,156212,156213],{},"5 \u002F\u002F 2",[549,156215,156216,156220,156223],{},[595,156217,156218],{},[25,156219,729],{},[595,156221,156222],{},"取余",[595,156224,156225],{},[25,156226,156227],{},"5 % 2",[549,156229,156230,156234,156237],{},[595,156231,156232],{},[25,156233,10923],{},[595,156235,156236],{},"幂运算",[595,156238,156239],{},[25,156240,156241],{},"2 ** 3",[14,156243,15397],{},[18,156245,156247],{"className":20,"code":156246,"language":22,"meta":23,"style":23},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[25,156248,156249,156267,156284,156301],{"__ignoreMap":23},[28,156250,156251,156253,156255,156257,156260,156262,156264],{"class":30,"line":31},[28,156252,30675],{"class":60},[28,156254,413],{"class":38},[28,156256,721],{"class":60},[28,156258,156259],{"class":34}," \u002F",[28,156261,15017],{"class":60},[28,156263,155874],{"class":38},[28,156265,156266],{"class":87},"# 2.5\n",[28,156268,156269,156271,156273,156275,156278,156280,156282],{"class":30,"line":48},[28,156270,30675],{"class":60},[28,156272,413],{"class":38},[28,156274,721],{"class":60},[28,156276,156277],{"class":34}," \u002F\u002F",[28,156279,15017],{"class":60},[28,156281,46064],{"class":38},[28,156283,155877],{"class":87},[28,156285,156286,156288,156290,156292,156295,156297,156299],{"class":30,"line":84},[28,156287,30675],{"class":60},[28,156289,413],{"class":38},[28,156291,721],{"class":60},[28,156293,156294],{"class":34}," %",[28,156296,15017],{"class":60},[28,156298,155874],{"class":38},[28,156300,155894],{"class":87},[28,156302,156303,156305,156307,156309,156312,156314,156316],{"class":30,"line":91},[28,156304,30675],{"class":60},[28,156306,413],{"class":38},[28,156308,211],{"class":60},[28,156310,156311],{"class":34}," **",[28,156313,78326],{"class":60},[28,156315,46064],{"class":38},[28,156317,156318],{"class":87},"# 8\n",[380,156320,156322],{"id":156321},"_272-赋值运算符","2.7.2 赋值运算符",[18,156324,156326],{"className":20,"code":156325,"language":22,"meta":23,"style":23},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[25,156327,156328,156336,156344,156352,156360],{"__ignoreMap":23},[28,156329,156330,156332,156334],{"class":30,"line":31},[28,156331,156000],{"class":38},[28,156333,54],{"class":34},[28,156335,58684],{"class":60},[28,156337,156338,156340,156342],{"class":30,"line":48},[28,156339,156000],{"class":38},[28,156341,9739],{"class":34},[28,156343,54683],{"class":60},[28,156345,156346,156348,156350],{"class":30,"line":84},[28,156347,156000],{"class":38},[28,156349,150465],{"class":34},[28,156351,47979],{"class":60},[28,156353,156354,156356,156358],{"class":30,"line":91},[28,156355,156000],{"class":38},[28,156357,137361],{"class":34},[28,156359,120249],{"class":60},[28,156361,156362,156364,156367],{"class":30,"line":97},[28,156363,156000],{"class":38},[28,156365,156366],{"class":34},"\u002F=",[28,156368,47979],{"class":60},[14,156370,156371],{},"等价关系：",[18,156373,156375],{"className":20,"code":156374,"language":22,"meta":23,"style":23},"num += 1\nnum = num + 1\n",[25,156376,156377,156385],{"__ignoreMap":23},[28,156378,156379,156381,156383],{"class":30,"line":31},[28,156380,156000],{"class":38},[28,156382,9739],{"class":34},[28,156384,55955],{"class":60},[28,156386,156387,156389,156391,156394,156396],{"class":30,"line":48},[28,156388,156000],{"class":38},[28,156390,54],{"class":34},[28,156392,156393],{"class":38}," num ",[28,156395,880],{"class":34},[28,156397,55955],{"class":60},[14,156399,156400,156401,101231,156404,28648],{},"Python 没有 ",[25,156402,156403],{},"num++",[25,156405,156406],{},"num--",[380,156408,156410],{"id":156409},"_273-比较运算符","2.7.3 比较运算符",[14,156412,156413],{},"比较运算结果是布尔值。",[18,156415,156417],{"className":20,"code":156416,"language":22,"meta":23,"style":23},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[25,156418,156419,156433,156448,156462],{"__ignoreMap":23},[28,156420,156421,156423,156425,156427,156429,156431],{"class":30,"line":31},[28,156422,30675],{"class":60},[28,156424,413],{"class":38},[28,156426,845],{"class":60},[28,156428,26485],{"class":34},[28,156430,2410],{"class":60},[28,156432,81],{"class":38},[28,156434,156435,156437,156439,156441,156444,156446],{"class":30,"line":48},[28,156436,30675],{"class":60},[28,156438,413],{"class":38},[28,156440,845],{"class":60},[28,156442,156443],{"class":34}," >=",[28,156445,2300],{"class":60},[28,156447,81],{"class":38},[28,156449,156450,156452,156454,156456,156458,156460],{"class":30,"line":84},[28,156451,30675],{"class":60},[28,156453,413],{"class":38},[28,156455,845],{"class":60},[28,156457,101772],{"class":34},[28,156459,2345],{"class":60},[28,156461,81],{"class":38},[28,156463,156464,156466,156468,156470,156473,156475],{"class":30,"line":91},[28,156465,30675],{"class":60},[28,156467,413],{"class":38},[28,156469,845],{"class":60},[28,156471,156472],{"class":34}," !=",[28,156474,2345],{"class":60},[28,156476,81],{"class":38},[14,156478,156479,156480,156482,156483,28648],{},"注意：判断相等用 ",[25,156481,3211],{},"，赋值用 ",[25,156484,54],{},[18,156486,156488],{"className":20,"code":156487,"language":22,"meta":23,"style":23},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[25,156489,156490,156502],{"__ignoreMap":23},[28,156491,156492,156494,156496,156499],{"class":30,"line":31},[28,156493,146759],{"class":38},[28,156495,54],{"class":34},[28,156497,156498],{"class":60}," 18",[28,156500,156501],{"class":87},"       # 赋值\n",[28,156503,156504,156506,156508,156510],{"class":30,"line":48},[28,156505,146759],{"class":38},[28,156507,3211],{"class":34},[28,156509,156498],{"class":60},[28,156511,156512],{"class":87},"      # 判断是否相等\n",[380,156514,156516],{"id":156515},"_274-逻辑运算符","2.7.4 逻辑运算符",[543,156518,156519,156527],{},[546,156520,156521],{},[549,156522,156523,156525],{},[552,156524,156137],{},[552,156526,26132],{},[590,156528,156529,156538,156547],{},[549,156530,156531,156535],{},[595,156532,156533],{},[25,156534,30722],{},[595,156536,156537],{},"并且",[549,156539,156540,156544],{},[595,156541,156542],{},[25,156543,115303],{},[595,156545,156546],{},"或者",[549,156548,156549,156554],{},[595,156550,156551],{},[25,156552,156553],{},"not",[595,156555,156556],{},"取反",[18,156558,156560],{"className":20,"code":156559,"language":22,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[25,156561,156562,156570,156579,156583,156598,156612],{"__ignoreMap":23},[28,156563,156564,156566,156568],{"class":30,"line":31},[28,156565,146759],{"class":38},[28,156567,54],{"class":34},[28,156569,88321],{"class":60},[28,156571,156572,156575,156577],{"class":30,"line":48},[28,156573,156574],{"class":38},"has_ticket ",[28,156576,54],{"class":34},[28,156578,153812],{"class":60},[28,156580,156581],{"class":30,"line":84},[28,156582,2662],{"emptyLinePlaceholder":336},[28,156584,156585,156587,156589,156591,156593,156595],{"class":30,"line":91},[28,156586,30675],{"class":60},[28,156588,155981],{"class":38},[28,156590,1972],{"class":34},[28,156592,156498],{"class":60},[28,156594,120642],{"class":34},[28,156596,156597],{"class":38}," has_ticket)\n",[28,156599,156600,156602,156604,156606,156608,156610],{"class":30,"line":97},[28,156601,30675],{"class":60},[28,156603,155981],{"class":38},[28,156605,1307],{"class":34},[28,156607,156498],{"class":60},[28,156609,114414],{"class":34},[28,156611,156597],{"class":38},[28,156613,156614,156616,156618,156620],{"class":30,"line":103},[28,156615,30675],{"class":60},[28,156617,413],{"class":38},[28,156619,156553],{"class":34},[28,156621,156597],{"class":38},[351,156623,156625],{"id":156624},"_28-字符串定义","2.8 字符串定义",[14,156627,156628],{},"三种常见写法：",[18,156630,156632],{"className":20,"code":156631,"language":22,"meta":23,"style":23},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[25,156633,156634,156644,156653,156663],{"__ignoreMap":23},[28,156635,156636,156639,156641],{"class":30,"line":31},[28,156637,156638],{"class":38},"name1 ",[28,156640,54],{"class":34},[28,156642,156643],{"class":127}," '小明'\n",[28,156645,156646,156649,156651],{"class":30,"line":48},[28,156647,156648],{"class":38},"name2 ",[28,156650,54],{"class":34},[28,156652,149566],{"class":127},[28,156654,156655,156658,156660],{"class":30,"line":84},[28,156656,156657],{"class":38},"text ",[28,156659,54],{"class":34},[28,156661,156662],{"class":127}," \"\"\"这是多行字符串\n",[28,156664,156665],{"class":30,"line":91},[28,156666,156667],{"class":127},"可以换行\"\"\"\n",[14,156669,156670],{},"字符串中包含引号：",[18,156672,156674],{"className":20,"code":156673,"language":22,"meta":23,"style":23},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[25,156675,156676,156686,156696],{"__ignoreMap":23},[28,156677,156678,156681,156683],{"class":30,"line":31},[28,156679,156680],{"class":38},"msg ",[28,156682,54],{"class":34},[28,156684,156685],{"class":127}," \"他说:'你好'\"\n",[28,156687,156688,156691,156693],{"class":30,"line":48},[28,156689,156690],{"class":38},"msg2 ",[28,156692,54],{"class":34},[28,156694,156695],{"class":127}," '他说:\"你好\"'\n",[28,156697,156698,156701,156703,156706,156709,156712,156714],{"class":30,"line":84},[28,156699,156700],{"class":38},"msg3 ",[28,156702,54],{"class":34},[28,156704,156705],{"class":127}," \"他说:",[28,156707,156708],{"class":60},"\\\"",[28,156710,156711],{"class":127},"你好",[28,156713,156708],{"class":60},[28,156715,25396],{"class":127},[14,156717,156718],{},"常见转义字符：",[543,156720,156721,156730],{},[546,156722,156723],{},[549,156724,156725,156728],{},[552,156726,156727],{},"写法",[552,156729,100913],{},[590,156731,156732,156742,156751,156761,156770],{},[549,156733,156734,156739],{},[595,156735,156736],{},[25,156737,156738],{},"\\n",[595,156740,156741],{},"换行",[549,156743,156744,156748],{},[595,156745,156746],{},[25,156747,1498],{},[595,156749,156750],{},"制表符",[549,156752,156753,156758],{},[595,156754,156755],{},[25,156756,156757],{},"\\\\",[595,156759,156760],{},"反斜杠",[549,156762,156763,156767],{},[595,156764,156765],{},[25,156766,156708],{},[595,156768,156769],{},"双引号",[549,156771,156772,156777],{},[595,156773,156774],{},[25,156775,156776],{},"\\'",[595,156778,156779],{},"单引号",[351,156781,156783],{"id":156782},"_29-字符串拼接","2.9 字符串拼接",[18,156785,156787],{"className":20,"code":156786,"language":22,"meta":23,"style":23},"name = \"小明\"\nprint(\"你好，\" + name)\n",[25,156788,156789,156797],{"__ignoreMap":23},[28,156790,156791,156793,156795],{"class":30,"line":31},[28,156792,146749],{"class":38},[28,156794,54],{"class":34},[28,156796,149566],{"class":127},[28,156798,156799,156801,156803,156806,156808],{"class":30,"line":48},[28,156800,30675],{"class":60},[28,156802,413],{"class":38},[28,156804,156805],{"class":127},"\"你好，\"",[28,156807,45822],{"class":34},[28,156809,156810],{"class":38}," name)\n",[14,156812,156813],{},"字符串只能和字符串拼接：",[18,156815,156817],{"className":20,"code":156816,"language":22,"meta":23,"style":23},"age = 18\nprint(\"年龄:\" + str(age))\n",[25,156818,156819,156827],{"__ignoreMap":23},[28,156820,156821,156823,156825],{"class":30,"line":31},[28,156822,146759],{"class":38},[28,156824,54],{"class":34},[28,156826,146764],{"class":60},[28,156828,156829,156831,156833,156835,156837,156839],{"class":30,"line":48},[28,156830,30675],{"class":60},[28,156832,413],{"class":38},[28,156834,146730],{"class":127},[28,156836,45822],{"class":34},[28,156838,74175],{"class":60},[28,156840,156841],{"class":38},"(age))\n",[14,156843,156844],{},"更推荐使用格式化字符串。",[351,156846,156848],{"id":156847},"_210-字符串格式化","2.10 字符串格式化",[380,156850,156852],{"id":156851},"_2101-百分号格式化","2.10.1 百分号格式化",[18,156854,156856],{"className":20,"code":156855,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[25,156857,156858,156866,156874,156883,156887],{"__ignoreMap":23},[28,156859,156860,156862,156864],{"class":30,"line":31},[28,156861,146749],{"class":38},[28,156863,54],{"class":34},[28,156865,149566],{"class":127},[28,156867,156868,156870,156872],{"class":30,"line":48},[28,156869,146759],{"class":38},[28,156871,54],{"class":34},[28,156873,146764],{"class":60},[28,156875,156876,156878,156880],{"class":30,"line":84},[28,156877,155571],{"class":38},[28,156879,54],{"class":34},[28,156881,156882],{"class":60}," 95.5\n",[28,156884,156885],{"class":30,"line":91},[28,156886,2662],{"emptyLinePlaceholder":336},[28,156888,156889,156891,156893,156896,156899,156902,156905,156908,156911,156913,156915],{"class":30,"line":97},[28,156890,30675],{"class":60},[28,156892,413],{"class":38},[28,156894,156895],{"class":127},"\"姓名:",[28,156897,156898],{"class":60},"%s",[28,156900,156901],{"class":127}," 年龄:",[28,156903,156904],{"class":60},"%d",[28,156906,156907],{"class":127}," 分数:",[28,156909,156910],{"class":60},"%.1f",[28,156912,654],{"class":127},[28,156914,156294],{"class":34},[28,156916,156917],{"class":38}," (name, age, score))\n",[14,156919,156920],{},"常用占位符：",[543,156922,156923,156932],{},[546,156924,156925],{},[549,156926,156927,156930],{},[552,156928,156929],{},"占位符",[552,156931,26132],{},[590,156933,156934,156942,156950],{},[549,156935,156936,156940],{},[595,156937,156938],{},[25,156939,156898],{},[595,156941,155437],{},[549,156943,156944,156948],{},[595,156945,156946],{},[25,156947,156904],{},[595,156949,155415],{},[549,156951,156952,156957],{},[595,156953,156954],{},[25,156955,156956],{},"%f",[595,156958,155426],{},[14,156960,156961],{},"精度控制：",[18,156963,156965],{"className":20,"code":156964,"language":22,"meta":23,"style":23},"price = 12.3456\nprint(\"%.2f\" % price)\n",[25,156966,156967,156976],{"__ignoreMap":23},[28,156968,156969,156971,156973],{"class":30,"line":31},[28,156970,146894],{"class":38},[28,156972,54],{"class":34},[28,156974,156975],{"class":60}," 12.3456\n",[28,156977,156978,156980,156982,156984,156987,156989,156991],{"class":30,"line":48},[28,156979,30675],{"class":60},[28,156981,413],{"class":38},[28,156983,654],{"class":127},[28,156985,156986],{"class":60},"%.2f",[28,156988,654],{"class":127},[28,156990,156294],{"class":34},[28,156992,156993],{"class":38}," price)\n",[380,156995,156997],{"id":156996},"_2102-format方法","2.10.2 format方法",[18,156999,157001],{"className":20,"code":157000,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[25,157002,157003,157011,157019,157023,157042,157062],{"__ignoreMap":23},[28,157004,157005,157007,157009],{"class":30,"line":31},[28,157006,146749],{"class":38},[28,157008,54],{"class":34},[28,157010,149566],{"class":127},[28,157012,157013,157015,157017],{"class":30,"line":48},[28,157014,146759],{"class":38},[28,157016,54],{"class":34},[28,157018,146764],{"class":60},[28,157020,157021],{"class":30,"line":84},[28,157022,2662],{"emptyLinePlaceholder":336},[28,157024,157025,157027,157029,157031,157033,157035,157037,157039],{"class":30,"line":91},[28,157026,30675],{"class":60},[28,157028,413],{"class":38},[28,157030,156895],{"class":127},[28,157032,32715],{"class":60},[28,157034,156901],{"class":127},[28,157036,32715],{"class":60},[28,157038,654],{"class":127},[28,157040,157041],{"class":38},".format(name, age))\n",[28,157043,157044,157046,157048,157050,157053,157055,157058,157060],{"class":30,"line":97},[28,157045,30675],{"class":60},[28,157047,413],{"class":38},[28,157049,156895],{"class":127},[28,157051,157052],{"class":60},"{0}",[28,157054,156901],{"class":127},[28,157056,157057],{"class":60},"{1}",[28,157059,654],{"class":127},[28,157061,157041],{"class":38},[28,157063,157064,157066,157068,157070,157073,157075,157078,157080,157083,157085,157087,157090,157092,157094],{"class":30,"line":103},[28,157065,30675],{"class":60},[28,157067,413],{"class":38},[28,157069,156895],{"class":127},[28,157071,157072],{"class":60},"{name}",[28,157074,156901],{"class":127},[28,157076,157077],{"class":60},"{age}",[28,157079,654],{"class":127},[28,157081,157082],{"class":38},".format(",[28,157084,80066],{"class":5478},[28,157086,54],{"class":34},[28,157088,157089],{"class":38},"name, ",[28,157091,70477],{"class":5478},[28,157093,54],{"class":34},[28,157095,157096],{"class":38},"age))\n",[380,157098,157100],{"id":157099},"_2103-f-string","2.10.3 f-string",[14,157102,157103],{},"推荐写法：",[18,157105,157107],{"className":20,"code":157106,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[25,157108,157109,157117,157125,157133,157137],{"__ignoreMap":23},[28,157110,157111,157113,157115],{"class":30,"line":31},[28,157112,146749],{"class":38},[28,157114,54],{"class":34},[28,157116,149566],{"class":127},[28,157118,157119,157121,157123],{"class":30,"line":48},[28,157120,146759],{"class":38},[28,157122,54],{"class":34},[28,157124,146764],{"class":60},[28,157126,157127,157129,157131],{"class":30,"line":84},[28,157128,155571],{"class":38},[28,157130,54],{"class":34},[28,157132,156882],{"class":60},[28,157134,157135],{"class":30,"line":91},[28,157136,2662],{"emptyLinePlaceholder":336},[28,157138,157139,157141,157143,157145,157147,157149,157151,157153,157155,157157,157159,157161,157163,157165,157168,157171,157173,157175],{"class":30,"line":97},[28,157140,30675],{"class":60},[28,157142,413],{"class":38},[28,157144,462],{"class":34},[28,157146,156895],{"class":127},[28,157148,1293],{"class":60},[28,157150,80066],{"class":38},[28,157152,1343],{"class":60},[28,157154,156901],{"class":127},[28,157156,1293],{"class":60},[28,157158,70477],{"class":38},[28,157160,1343],{"class":60},[28,157162,156907],{"class":127},[28,157164,1293],{"class":60},[28,157166,157167],{"class":38},"score",[28,157169,157170],{"class":34},":.1f",[28,157172,1343],{"class":60},[28,157174,654],{"class":127},[28,157176,81],{"class":38},[14,157178,157179],{},"表达式也可以放进去：",[18,157181,157183],{"className":20,"code":157182,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[25,157184,157185,157193,157201],{"__ignoreMap":23},[28,157186,157187,157189,157191],{"class":30,"line":31},[28,157188,146894],{"class":38},[28,157190,54],{"class":34},[28,157192,146899],{"class":60},[28,157194,157195,157197,157199],{"class":30,"line":48},[28,157196,146904],{"class":38},[28,157198,54],{"class":34},[28,157200,54683],{"class":60},[28,157202,157203,157205,157207,157209,157212,157214,157216,157218,157221,157223,157226],{"class":30,"line":84},[28,157204,30675],{"class":60},[28,157206,413],{"class":38},[28,157208,462],{"class":34},[28,157210,157211],{"class":127},"\"总价:",[28,157213,1293],{"class":60},[28,157215,146894],{"class":38},[28,157217,854],{"class":34},[28,157219,157220],{"class":38}," count",[28,157222,1343],{"class":60},[28,157224,157225],{"class":127},"元\"",[28,157227,81],{"class":38},[351,157229,157231],{"id":157230},"_211-input输入","2.11 input输入",[14,157233,157234,157237],{},[25,157235,157236],{},"input()"," 会暂停程序，等待用户输入。",[18,157239,157241],{"className":20,"code":157240,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[25,157242,157243,157257],{"__ignoreMap":23},[28,157244,157245,157247,157249,157251,157253,157255],{"class":30,"line":31},[28,157246,146749],{"class":38},[28,157248,54],{"class":34},[28,157250,60861],{"class":60},[28,157252,413],{"class":38},[28,157254,152592],{"class":127},[28,157256,81],{"class":38},[28,157258,157259,157261,157263,157265,157268,157270,157272,157274,157276],{"class":30,"line":48},[28,157260,30675],{"class":60},[28,157262,413],{"class":38},[28,157264,462],{"class":34},[28,157266,157267],{"class":127},"\"你好，",[28,157269,1293],{"class":60},[28,157271,80066],{"class":38},[28,157273,1343],{"class":60},[28,157275,654],{"class":127},[28,157277,81],{"class":38},[14,157279,157280],{},"输入整数：",[18,157282,157284],{"className":20,"code":157283,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[25,157285,157286,157304],{"__ignoreMap":23},[28,157287,157288,157290,157292,157294,157296,157298,157300,157302],{"class":30,"line":31},[28,157289,146759],{"class":38},[28,157291,54],{"class":34},[28,157293,2644],{"class":60},[28,157295,413],{"class":38},[28,157297,54077],{"class":60},[28,157299,413],{"class":38},[28,157301,152607],{"class":127},[28,157303,30757],{"class":38},[28,157305,157306,157308,157310,157312,157315,157317,157319,157321,157324,157326],{"class":30,"line":48},[28,157307,30675],{"class":60},[28,157309,413],{"class":38},[28,157311,462],{"class":34},[28,157313,157314],{"class":127},"\"明年你",[28,157316,1293],{"class":60},[28,157318,146759],{"class":38},[28,157320,880],{"class":34},[28,157322,157323],{"class":60}," 1}",[28,157325,149617],{"class":127},[28,157327,81],{"class":38},[14,157329,157330],{},"输入小数：",[18,157332,157334],{"className":20,"code":157333,"language":22,"meta":23,"style":23},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[25,157335,157336,157355],{"__ignoreMap":23},[28,157337,157338,157340,157342,157344,157346,157348,157350,157353],{"class":30,"line":31},[28,157339,155544],{"class":38},[28,157341,54],{"class":34},[28,157343,110010],{"class":60},[28,157345,413],{"class":38},[28,157347,54077],{"class":60},[28,157349,413],{"class":38},[28,157351,157352],{"class":127},"\"请输入身高:\"",[28,157354,30757],{"class":38},[28,157356,157357,157359,157361,157363,157366,157368,157370,157373,157375,157378],{"class":30,"line":48},[28,157358,30675],{"class":60},[28,157360,413],{"class":38},[28,157362,462],{"class":34},[28,157364,157365],{"class":127},"\"身高:",[28,157367,1293],{"class":60},[28,157369,25244],{"class":38},[28,157371,157372],{"class":34},":.2f",[28,157374,1343],{"class":60},[28,157376,157377],{"class":127},"米\"",[28,157379,81],{"class":38},[351,157381,157383],{"id":157382},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157385,123505],{},[363,157387,157388,157391,157394,157397],{},[366,157389,157390],{},"输入商品单价。",[366,157392,157393],{},"输入购买数量。",[366,157395,157396],{},"输入折扣，例如 0.8 表示八折。",[366,157398,157399],{},"输出最终金额，保留两位小数。",[14,157401,10297],{},[18,157403,157405],{"className":20,"code":157404,"language":22,"meta":23,"style":23},"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",[25,157406,157407,157426,157445,157465,157469,157489,157493,157516,157537,157559],{"__ignoreMap":23},[28,157408,157409,157411,157413,157415,157417,157419,157421,157424],{"class":30,"line":31},[28,157410,146894],{"class":38},[28,157412,54],{"class":34},[28,157414,110010],{"class":60},[28,157416,413],{"class":38},[28,157418,54077],{"class":60},[28,157420,413],{"class":38},[28,157422,157423],{"class":127},"\"请输入商品单价:\"",[28,157425,30757],{"class":38},[28,157427,157428,157430,157432,157434,157436,157438,157440,157443],{"class":30,"line":48},[28,157429,146904],{"class":38},[28,157431,54],{"class":34},[28,157433,2644],{"class":60},[28,157435,413],{"class":38},[28,157437,54077],{"class":60},[28,157439,413],{"class":38},[28,157441,157442],{"class":127},"\"请输入购买数量:\"",[28,157444,30757],{"class":38},[28,157446,157447,157450,157452,157454,157456,157458,157460,157463],{"class":30,"line":84},[28,157448,157449],{"class":38},"discount ",[28,157451,54],{"class":34},[28,157453,110010],{"class":60},[28,157455,413],{"class":38},[28,157457,54077],{"class":60},[28,157459,413],{"class":38},[28,157461,157462],{"class":127},"\"请输入折扣:\"",[28,157464,30757],{"class":38},[28,157466,157467],{"class":30,"line":91},[28,157468,2662],{"emptyLinePlaceholder":336},[28,157470,157471,157474,157476,157479,157481,157484,157486],{"class":30,"line":97},[28,157472,157473],{"class":38},"total ",[28,157475,54],{"class":34},[28,157477,157478],{"class":38}," price ",[28,157480,854],{"class":34},[28,157482,157483],{"class":38}," count ",[28,157485,854],{"class":34},[28,157487,157488],{"class":38}," discount\n",[28,157490,157491],{"class":30,"line":103},[28,157492,2662],{"emptyLinePlaceholder":336},[28,157494,157495,157497,157499,157501,157504,157506,157508,157510,157512,157514],{"class":30,"line":109},[28,157496,30675],{"class":60},[28,157498,413],{"class":38},[28,157500,462],{"class":34},[28,157502,157503],{"class":127},"\"商品单价:",[28,157505,1293],{"class":60},[28,157507,80071],{"class":38},[28,157509,157372],{"class":34},[28,157511,1343],{"class":60},[28,157513,654],{"class":127},[28,157515,81],{"class":38},[28,157517,157518,157520,157522,157524,157527,157529,157531,157533,157535],{"class":30,"line":118},[28,157519,30675],{"class":60},[28,157521,413],{"class":38},[28,157523,462],{"class":34},[28,157525,157526],{"class":127},"\"购买数量:",[28,157528,1293],{"class":60},[28,157530,84690],{"class":38},[28,157532,1343],{"class":60},[28,157534,654],{"class":127},[28,157536,81],{"class":38},[28,157538,157539,157541,157543,157545,157548,157550,157553,157555,157557],{"class":30,"line":124},[28,157540,30675],{"class":60},[28,157542,413],{"class":38},[28,157544,462],{"class":34},[28,157546,157547],{"class":127},"\"折扣:",[28,157549,1293],{"class":60},[28,157551,157552],{"class":38},"discount",[28,157554,1343],{"class":60},[28,157556,654],{"class":127},[28,157558,81],{"class":38},[28,157560,157561,157563,157565,157567,157570,157572,157575,157577,157579,157581],{"class":30,"line":131},[28,157562,30675],{"class":60},[28,157564,413],{"class":38},[28,157566,462],{"class":34},[28,157568,157569],{"class":127},"\"应付金额:",[28,157571,1293],{"class":60},[28,157573,157574],{"class":38},"total",[28,157576,157372],{"class":34},[28,157578,1343],{"class":60},[28,157580,157225],{"class":127},[28,157582,81],{"class":38},[351,157584,157586],{"id":157585},"_213-易错点","2.13 易错点",[363,157588,157589,157594,157600,157608,157611],{},[366,157590,157591,157593],{},[25,157592,157236],{}," 的结果是字符串，做运算前要转换。",[366,157595,157596,157597,28648],{},"字符串拼接时，数字要先 ",[25,157598,157599],{},"str()",[366,157601,157602,157604,157605,157607],{},[25,157603,54],{}," 是赋值，",[25,157606,3211],{}," 是比较。",[366,157609,157610],{},"Python 没有自增自减运算符。",[366,157612,157613],{},"浮点数计算可能有精度误差：",[18,157615,157617],{"className":20,"code":157616,"language":22,"meta":23,"style":23},"print(0.1 + 0.2)\n",[25,157618,157619],{"__ignoreMap":23},[28,157620,157621,157623,157625,157627,157629,157632],{"class":30,"line":31},[28,157622,30675],{"class":60},[28,157624,413],{"class":38},[28,157626,86466],{"class":60},[28,157628,45822],{"class":34},[28,157630,157631],{"class":60}," 0.2",[28,157633,81],{"class":38},[14,157635,157636,157637,157640],{},"金额计算如果要求严格，可以后续学习 ",[25,157638,157639],{},"decimal"," 模块。",[351,157642,157644],{"id":157643},"_214-本章练习","2.14 本章练习",[363,157646,157647,157650,157653,157656,157659],{},[366,157648,157649],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[366,157651,157652],{},"输入圆的半径，计算面积，保留两位小数。",[366,157654,157655],{},"输入工资和奖金，计算总收入。",[366,157657,157658],{},"输入摄氏温度，转换为华氏温度。",[366,157660,157661],{},"写一个 BMI 计算程序：",[18,157663,157666],{"className":157664,"code":157665,"language":5449,"meta":23},[5447],"BMI = 体重kg \u002F 身高m ** 2\n",[25,157667,157665],{"__ignoreMap":23},[328,157669,157670],{},"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":23,"searchDepth":48,"depth":48,"links":157672},[157673,157674,157675,157676,157677,157678,157679,157685,157686,157687,157692,157693,157694,157695],{"id":155234,"depth":48,"text":155235},{"id":155343,"depth":48,"text":155344},{"id":155514,"depth":48,"text":155515},{"id":155591,"depth":48,"text":155592},{"id":50987,"depth":48,"text":50988},{"id":155897,"depth":48,"text":155898},{"id":156123,"depth":48,"text":156124,"children":157680},[157681,157682,157683,157684],{"id":156127,"depth":84,"text":156128},{"id":156321,"depth":84,"text":156322},{"id":156409,"depth":84,"text":156410},{"id":156515,"depth":84,"text":156516},{"id":156624,"depth":48,"text":156625},{"id":156782,"depth":48,"text":156783},{"id":156847,"depth":48,"text":156848,"children":157688},[157689,157690,157691],{"id":156851,"depth":84,"text":156852},{"id":156996,"depth":84,"text":156997},{"id":157099,"depth":84,"text":157100},{"id":157230,"depth":48,"text":157231},{"id":157382,"depth":48,"text":157383},{"id":157585,"depth":48,"text":157586},{"id":157643,"depth":48,"text":157644},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155226,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157702,"title":157703,"body":157704,"description":333,"extension":334,"meta":159340,"navigation":336,"path":159341,"seo":159342,"stem":159343,"__hash__":159344},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157705,"toc":159321},[157706,157709,157713,157716,157731,157734,157762,157766,157816,157818,157834,157837,157863,157866,157870,157937,157940,157956,157960,157963,158081,158084,158091,158140,158146,158150,158153,158266,158269,158273,158277,158280,158330,158334,158337,158387,158391,158394,158432,158436,158439,158485,158488,158523,158527,158532,158535,158581,158583,158650,158654,158660,158771,158780,158784,158786,158797,158799,158965,158969,158971,158985,158987,159201,159205,159224,159241,159244,159290,159294,159318],[10,157707,157703],{"id":157708},"_3-判断语句",[351,157710,157712],{"id":157711},"_31-布尔值","3.1 布尔值",[14,157714,157715],{},"判断语句依赖布尔值：",[18,157717,157719],{"className":20,"code":157718,"language":22,"meta":23,"style":23},"True\nFalse\n",[25,157720,157721,157726],{"__ignoreMap":23},[28,157722,157723],{"class":30,"line":31},[28,157724,157725],{"class":60},"True\n",[28,157727,157728],{"class":30,"line":48},[28,157729,157730],{"class":60},"False\n",[14,157732,157733],{},"比较表达式会产生布尔值：",[18,157735,157737],{"className":20,"code":157736,"language":22,"meta":23,"style":23},"age = 18\nprint(age >= 18)  # True\n",[25,157738,157739,157747],{"__ignoreMap":23},[28,157740,157741,157743,157745],{"class":30,"line":31},[28,157742,146759],{"class":38},[28,157744,54],{"class":34},[28,157746,146764],{"class":60},[28,157748,157749,157751,157753,157755,157757,157759],{"class":30,"line":48},[28,157750,30675],{"class":60},[28,157752,155981],{"class":38},[28,157754,1972],{"class":34},[28,157756,156498],{"class":60},[28,157758,46064],{"class":38},[28,157760,157761],{"class":87},"# True\n",[351,157763,157765],{"id":157764},"_32-if基础语法","3.2 if基础语法",[18,157767,157769],{"className":20,"code":157768,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[25,157770,157771,157789,157793,157805],{"__ignoreMap":23},[28,157772,157773,157775,157777,157779,157781,157783,157785,157787],{"class":30,"line":31},[28,157774,146759],{"class":38},[28,157776,54],{"class":34},[28,157778,2644],{"class":60},[28,157780,413],{"class":38},[28,157782,54077],{"class":60},[28,157784,413],{"class":38},[28,157786,152607],{"class":127},[28,157788,30757],{"class":38},[28,157790,157791],{"class":30,"line":48},[28,157792,2662],{"emptyLinePlaceholder":336},[28,157794,157795,157797,157799,157801,157803],{"class":30,"line":84},[28,157796,1796],{"class":34},[28,157798,15969],{"class":38},[28,157800,1972],{"class":34},[28,157802,156498],{"class":60},[28,157804,4001],{"class":38},[28,157806,157807,157809,157811,157814],{"class":30,"line":91},[28,157808,31559],{"class":60},[28,157810,413],{"class":38},[28,157812,157813],{"class":127},"\"可以进入网吧\"",[28,157815,81],{"class":38},[14,157817,9287],{},[363,157819,157820,157825,157828,157831],{},[366,157821,157822,157824],{},[25,157823,1796],{}," 后面是条件表达式。",[366,157826,157827],{},"条件后面必须写冒号。",[366,157829,157830],{},"条件成立时执行缩进代码块。",[366,157832,157833],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157835,157836],{},"错误示例：",[18,157838,157840],{"className":20,"code":157839,"language":22,"meta":23,"style":23},"if age >= 18\n    print(\"可以进入\")\n",[25,157841,157842,157852],{"__ignoreMap":23},[28,157843,157844,157846,157848,157850],{"class":30,"line":31},[28,157845,1796],{"class":34},[28,157847,15969],{"class":38},[28,157849,1972],{"class":34},[28,157851,146764],{"class":60},[28,157853,157854,157856,157858,157861],{"class":30,"line":48},[28,157855,31559],{"class":60},[28,157857,413],{"class":38},[28,157859,157860],{"class":127},"\"可以进入\"",[28,157862,81],{"class":38},[14,157864,157865],{},"缺少冒号。",[351,157867,157869],{"id":157868},"_33-if-else","3.3 if else",[18,157871,157873],{"className":20,"code":157872,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[25,157874,157875,157893,157897,157909,157920,157926],{"__ignoreMap":23},[28,157876,157877,157879,157881,157883,157885,157887,157889,157891],{"class":30,"line":31},[28,157878,146759],{"class":38},[28,157880,54],{"class":34},[28,157882,2644],{"class":60},[28,157884,413],{"class":38},[28,157886,54077],{"class":60},[28,157888,413],{"class":38},[28,157890,152607],{"class":127},[28,157892,30757],{"class":38},[28,157894,157895],{"class":30,"line":48},[28,157896,2662],{"emptyLinePlaceholder":336},[28,157898,157899,157901,157903,157905,157907],{"class":30,"line":84},[28,157900,1796],{"class":34},[28,157902,15969],{"class":38},[28,157904,1972],{"class":34},[28,157906,156498],{"class":60},[28,157908,4001],{"class":38},[28,157910,157911,157913,157915,157918],{"class":30,"line":91},[28,157912,31559],{"class":60},[28,157914,413],{"class":38},[28,157916,157917],{"class":127},"\"成年人\"",[28,157919,81],{"class":38},[28,157921,157922,157924],{"class":30,"line":97},[28,157923,1963],{"class":34},[28,157925,4001],{"class":38},[28,157927,157928,157930,157932,157935],{"class":30,"line":103},[28,157929,31559],{"class":60},[28,157931,413],{"class":38},[28,157933,157934],{"class":127},"\"未成年人\"",[28,157936,81],{"class":38},[14,157938,157939],{},"执行逻辑：",[363,157941,157942,157948,157953],{},[366,157943,157944,157945,157947],{},"条件成立，执行 ",[25,157946,1796],{}," 代码块。",[366,157949,157950,157951,157947],{},"条件不成立，执行 ",[25,157952,1963],{},[366,157954,157955],{},"两个代码块只会执行其中一个。",[351,157957,157959],{"id":157958},"_34-if-elif-else","3.4 if elif else",[14,157961,157962],{},"多条件判断：",[18,157964,157966],{"className":20,"code":157965,"language":22,"meta":23,"style":23},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[25,157967,157968,157986,157990,158004,158015,158029,158040,158053,158064,158070],{"__ignoreMap":23},[28,157969,157970,157972,157974,157976,157978,157980,157982,157984],{"class":30,"line":31},[28,157971,155571],{"class":38},[28,157973,54],{"class":34},[28,157975,2644],{"class":60},[28,157977,413],{"class":38},[28,157979,54077],{"class":60},[28,157981,413],{"class":38},[28,157983,152622],{"class":127},[28,157985,30757],{"class":38},[28,157987,157988],{"class":30,"line":48},[28,157989,2662],{"emptyLinePlaceholder":336},[28,157991,157992,157994,157997,157999,158002],{"class":30,"line":84},[28,157993,1796],{"class":34},[28,157995,157996],{"class":38}," score ",[28,157998,1972],{"class":34},[28,158000,158001],{"class":60}," 90",[28,158003,4001],{"class":38},[28,158005,158006,158008,158010,158013],{"class":30,"line":91},[28,158007,31559],{"class":60},[28,158009,413],{"class":38},[28,158011,158012],{"class":127},"\"优秀\"",[28,158014,81],{"class":38},[28,158016,158017,158020,158022,158024,158027],{"class":30,"line":97},[28,158018,158019],{"class":34},"elif",[28,158021,157996],{"class":38},[28,158023,1972],{"class":34},[28,158025,158026],{"class":60}," 80",[28,158028,4001],{"class":38},[28,158030,158031,158033,158035,158038],{"class":30,"line":103},[28,158032,31559],{"class":60},[28,158034,413],{"class":38},[28,158036,158037],{"class":127},"\"良好\"",[28,158039,81],{"class":38},[28,158041,158042,158044,158046,158048,158051],{"class":30,"line":109},[28,158043,158019],{"class":34},[28,158045,157996],{"class":38},[28,158047,1972],{"class":34},[28,158049,158050],{"class":60}," 60",[28,158052,4001],{"class":38},[28,158054,158055,158057,158059,158062],{"class":30,"line":118},[28,158056,31559],{"class":60},[28,158058,413],{"class":38},[28,158060,158061],{"class":127},"\"及格\"",[28,158063,81],{"class":38},[28,158065,158066,158068],{"class":30,"line":124},[28,158067,1963],{"class":34},[28,158069,4001],{"class":38},[28,158071,158072,158074,158076,158079],{"class":30,"line":131},[28,158073,31559],{"class":60},[28,158075,413],{"class":38},[28,158077,158078],{"class":127},"\"不及格\"",[28,158080,81],{"class":38},[14,158082,158083],{},"注意判断顺序很重要。",[14,158085,158086,158087,158090],{},"如果把 ",[25,158088,158089],{},"score >= 60"," 放在最前面：",[18,158092,158094],{"className":20,"code":158093,"language":22,"meta":23,"style":23},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[25,158095,158096,158108,158118,158130],{"__ignoreMap":23},[28,158097,158098,158100,158102,158104,158106],{"class":30,"line":31},[28,158099,1796],{"class":34},[28,158101,157996],{"class":38},[28,158103,1972],{"class":34},[28,158105,158050],{"class":60},[28,158107,4001],{"class":38},[28,158109,158110,158112,158114,158116],{"class":30,"line":48},[28,158111,31559],{"class":60},[28,158113,413],{"class":38},[28,158115,158061],{"class":127},[28,158117,81],{"class":38},[28,158119,158120,158122,158124,158126,158128],{"class":30,"line":84},[28,158121,158019],{"class":34},[28,158123,157996],{"class":38},[28,158125,1972],{"class":34},[28,158127,158001],{"class":60},[28,158129,4001],{"class":38},[28,158131,158132,158134,158136,158138],{"class":30,"line":91},[28,158133,31559],{"class":60},[28,158135,413],{"class":38},[28,158137,158012],{"class":127},[28,158139,81],{"class":38},[14,158141,158142,158143,158145],{},"成绩 95 会先满足 ",[25,158144,158089],{},"，后面的优秀分支就不会执行。",[351,158147,158149],{"id":158148},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158151,158152],{},"嵌套判断就是在一个判断内部再写判断。",[18,158154,158156],{"className":20,"code":158155,"language":22,"meta":23,"style":23},"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",[25,158157,158158,158176,158191,158195,158207,158221,158231,158238,158249,158255],{"__ignoreMap":23},[28,158159,158160,158162,158164,158166,158168,158170,158172,158174],{"class":30,"line":31},[28,158161,146759],{"class":38},[28,158163,54],{"class":34},[28,158165,2644],{"class":60},[28,158167,413],{"class":38},[28,158169,54077],{"class":60},[28,158171,413],{"class":38},[28,158173,152607],{"class":127},[28,158175,30757],{"class":38},[28,158177,158178,158180,158182,158184,158186,158189],{"class":30,"line":48},[28,158179,156574],{"class":38},[28,158181,54],{"class":34},[28,158183,60861],{"class":60},[28,158185,413],{"class":38},[28,158187,158188],{"class":127},"\"是否有票(y\u002Fn):\"",[28,158190,81],{"class":38},[28,158192,158193],{"class":30,"line":84},[28,158194,2662],{"emptyLinePlaceholder":336},[28,158196,158197,158199,158201,158203,158205],{"class":30,"line":91},[28,158198,1796],{"class":34},[28,158200,15969],{"class":38},[28,158202,1972],{"class":34},[28,158204,156498],{"class":60},[28,158206,4001],{"class":38},[28,158208,158209,158211,158214,158216,158219],{"class":30,"line":97},[28,158210,3363],{"class":34},[28,158212,158213],{"class":38}," has_ticket ",[28,158215,3211],{"class":34},[28,158217,158218],{"class":127}," \"y\"",[28,158220,4001],{"class":38},[28,158222,158223,158225,158227,158229],{"class":30,"line":103},[28,158224,32707],{"class":60},[28,158226,413],{"class":38},[28,158228,157860],{"class":127},[28,158230,81],{"class":38},[28,158232,158233,158236],{"class":30,"line":109},[28,158234,158235],{"class":34},"    else",[28,158237,4001],{"class":38},[28,158239,158240,158242,158244,158247],{"class":30,"line":118},[28,158241,32707],{"class":60},[28,158243,413],{"class":38},[28,158245,158246],{"class":127},"\"请先买票\"",[28,158248,81],{"class":38},[28,158250,158251,158253],{"class":30,"line":124},[28,158252,1963],{"class":34},[28,158254,4001],{"class":38},[28,158256,158257,158259,158261,158264],{"class":30,"line":131},[28,158258,31559],{"class":60},[28,158260,413],{"class":38},[28,158262,158263],{"class":127},"\"未成年人禁止进入\"",[28,158265,81],{"class":38},[14,158267,158268],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[351,158270,158272],{"id":158271},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[380,158274,158276],{"id":158275},"_361-and","3.6.1 and",[14,158278,158279],{},"两个条件都成立才成立。",[18,158281,158283],{"className":20,"code":158282,"language":22,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[25,158284,158285,158293,158301,158305,158320],{"__ignoreMap":23},[28,158286,158287,158289,158291],{"class":30,"line":31},[28,158288,146759],{"class":38},[28,158290,54],{"class":34},[28,158292,88321],{"class":60},[28,158294,158295,158297,158299],{"class":30,"line":48},[28,158296,156574],{"class":38},[28,158298,54],{"class":34},[28,158300,153812],{"class":60},[28,158302,158303],{"class":30,"line":84},[28,158304,2662],{"emptyLinePlaceholder":336},[28,158306,158307,158309,158311,158313,158315,158317],{"class":30,"line":91},[28,158308,1796],{"class":34},[28,158310,15969],{"class":38},[28,158312,1972],{"class":34},[28,158314,156498],{"class":60},[28,158316,120642],{"class":34},[28,158318,158319],{"class":38}," has_ticket:\n",[28,158321,158322,158324,158326,158328],{"class":30,"line":97},[28,158323,31559],{"class":60},[28,158325,413],{"class":38},[28,158327,157860],{"class":127},[28,158329,81],{"class":38},[380,158331,158333],{"id":158332},"_362-or","3.6.2 or",[14,158335,158336],{},"只要一个条件成立就成立。",[18,158338,158340],{"className":20,"code":158339,"language":22,"meta":23,"style":23},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[25,158341,158342,158351,158360,158364,158376],{"__ignoreMap":23},[28,158343,158344,158347,158349],{"class":30,"line":31},[28,158345,158346],{"class":38},"is_vip ",[28,158348,54],{"class":34},[28,158350,126020],{"class":60},[28,158352,158353,158356,158358],{"class":30,"line":48},[28,158354,158355],{"class":38},"coupon ",[28,158357,54],{"class":34},[28,158359,153812],{"class":60},[28,158361,158362],{"class":30,"line":84},[28,158363,2662],{"emptyLinePlaceholder":336},[28,158365,158366,158368,158371,158373],{"class":30,"line":91},[28,158367,1796],{"class":34},[28,158369,158370],{"class":38}," is_vip ",[28,158372,115303],{"class":34},[28,158374,158375],{"class":38}," coupon:\n",[28,158377,158378,158380,158382,158385],{"class":30,"line":97},[28,158379,31559],{"class":60},[28,158381,413],{"class":38},[28,158383,158384],{"class":127},"\"可以享受优惠\"",[28,158386,81],{"class":38},[380,158388,158390],{"id":158389},"_363-not","3.6.3 not",[14,158392,158393],{},"取反。",[18,158395,158397],{"className":20,"code":158396,"language":22,"meta":23,"style":23},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[25,158398,158399,158408,158412,158421],{"__ignoreMap":23},[28,158400,158401,158404,158406],{"class":30,"line":31},[28,158402,158403],{"class":38},"is_closed ",[28,158405,54],{"class":34},[28,158407,126020],{"class":60},[28,158409,158410],{"class":30,"line":48},[28,158411,2662],{"emptyLinePlaceholder":336},[28,158413,158414,158416,158418],{"class":30,"line":84},[28,158415,1796],{"class":34},[28,158417,39186],{"class":34},[28,158419,158420],{"class":38}," is_closed:\n",[28,158422,158423,158425,158427,158430],{"class":30,"line":91},[28,158424,31559],{"class":60},[28,158426,413],{"class":38},[28,158428,158429],{"class":127},"\"店铺营业中\"",[28,158431,81],{"class":38},[351,158433,158435],{"id":158434},"_37-链式比较","3.7 链式比较",[14,158437,158438],{},"Python 支持链式比较：",[18,158440,158442],{"className":20,"code":158441,"language":22,"meta":23,"style":23},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158443,158444,158453,158457,158474],{"__ignoreMap":23},[28,158445,158446,158448,158450],{"class":30,"line":31},[28,158447,155571],{"class":38},[28,158449,54],{"class":34},[28,158451,158452],{"class":60}," 85\n",[28,158454,158455],{"class":30,"line":48},[28,158456,2662],{"emptyLinePlaceholder":336},[28,158458,158459,158461,158463,158466,158468,158470,158472],{"class":30,"line":84},[28,158460,1796],{"class":34},[28,158462,4355],{"class":60},[28,158464,158465],{"class":34}," \u003C=",[28,158467,157996],{"class":38},[28,158469,1853],{"class":34},[28,158471,6016],{"class":60},[28,158473,4001],{"class":38},[28,158475,158476,158478,158480,158483],{"class":30,"line":91},[28,158477,31559],{"class":60},[28,158479,413],{"class":38},[28,158481,158482],{"class":127},"\"成绩合法\"",[28,158484,81],{"class":38},[14,158486,158487],{},"等价于：",[18,158489,158491],{"className":20,"code":158490,"language":22,"meta":23,"style":23},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158492,158493,158513],{"__ignoreMap":23},[28,158494,158495,158497,158499,158501,158503,158505,158507,158509,158511],{"class":30,"line":31},[28,158496,1796],{"class":34},[28,158498,157996],{"class":38},[28,158500,1972],{"class":34},[28,158502,4355],{"class":60},[28,158504,120642],{"class":34},[28,158506,157996],{"class":38},[28,158508,1853],{"class":34},[28,158510,6016],{"class":60},[28,158512,4001],{"class":38},[28,158514,158515,158517,158519,158521],{"class":30,"line":48},[28,158516,31559],{"class":60},[28,158518,413],{"class":38},[28,158520,158482],{"class":127},[28,158522,81],{"class":38},[351,158524,158526],{"id":158525},"_38-真值和假值","3.8 真值和假值",[14,158528,116680,158529,158531],{},[25,158530,1796],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158533,158534],{},"假值：",[18,158536,158538],{"className":20,"code":158537,"language":22,"meta":23,"style":23},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[25,158539,158540,158544,158549,158553,158557,158562,158566,158570,158575],{"__ignoreMap":23},[28,158541,158542],{"class":30,"line":31},[28,158543,157730],{"class":60},[28,158545,158546],{"class":30,"line":48},[28,158547,158548],{"class":60},"None\n",[28,158550,158551],{"class":30,"line":84},[28,158552,3347],{"class":60},[28,158554,158555],{"class":30,"line":91},[28,158556,32598],{"class":60},[28,158558,158559],{"class":30,"line":97},[28,158560,158561],{"class":127},"\"\"\n",[28,158563,158564],{"class":30,"line":103},[28,158565,32613],{"class":38},[28,158567,158568],{"class":30,"line":109},[28,158569,2238],{"class":38},[28,158571,158572],{"class":30,"line":118},[28,158573,158574],{"class":38},"{}\n",[28,158576,158577,158579],{"class":30,"line":124},[28,158578,155503],{"class":60},[28,158580,2238],{"class":38},[14,158582,15397],{},[18,158584,158586],{"className":20,"code":158585,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[25,158587,158588,158602,158606,158613,158633,158639],{"__ignoreMap":23},[28,158589,158590,158592,158594,158596,158598,158600],{"class":30,"line":31},[28,158591,146749],{"class":38},[28,158593,54],{"class":34},[28,158595,60861],{"class":60},[28,158597,413],{"class":38},[28,158599,152592],{"class":127},[28,158601,81],{"class":38},[28,158603,158604],{"class":30,"line":48},[28,158605,2662],{"emptyLinePlaceholder":336},[28,158607,158608,158610],{"class":30,"line":84},[28,158609,1796],{"class":34},[28,158611,158612],{"class":38}," name:\n",[28,158614,158615,158617,158619,158621,158623,158625,158627,158629,158631],{"class":30,"line":91},[28,158616,31559],{"class":60},[28,158618,413],{"class":38},[28,158620,462],{"class":34},[28,158622,157267],{"class":127},[28,158624,1293],{"class":60},[28,158626,80066],{"class":38},[28,158628,1343],{"class":60},[28,158630,654],{"class":127},[28,158632,81],{"class":38},[28,158634,158635,158637],{"class":30,"line":97},[28,158636,1963],{"class":34},[28,158638,4001],{"class":38},[28,158640,158641,158643,158645,158648],{"class":30,"line":103},[28,158642,31559],{"class":60},[28,158644,413],{"class":38},[28,158646,158647],{"class":127},"\"姓名不能为空\"",[28,158649,81],{"class":38},[351,158651,158653],{"id":158652},"_39-match语句","3.9 match语句",[14,158655,158656,158657,158659],{},"Python 3.10 开始支持 ",[25,158658,71521],{},"。它适合处理固定选项。",[18,158661,158663],{"className":20,"code":158662,"language":22,"meta":23,"style":23},"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",[25,158664,158665,158681,158685,158692,158702,158713,158722,158733,158742,158753,158760],{"__ignoreMap":23},[28,158666,158667,158670,158672,158674,158676,158679],{"class":30,"line":31},[28,158668,158669],{"class":38},"command ",[28,158671,54],{"class":34},[28,158673,60861],{"class":60},[28,158675,413],{"class":38},[28,158677,158678],{"class":127},"\"请输入命令:\"",[28,158680,81],{"class":38},[28,158682,158683],{"class":30,"line":48},[28,158684,2662],{"emptyLinePlaceholder":336},[28,158686,158687,158689],{"class":30,"line":84},[28,158688,71521],{"class":34},[28,158690,158691],{"class":38}," command:\n",[28,158693,158694,158697,158700],{"class":30,"line":91},[28,158695,158696],{"class":34},"    case",[28,158698,158699],{"class":127}," \"start\"",[28,158701,4001],{"class":38},[28,158703,158704,158706,158708,158711],{"class":30,"line":97},[28,158705,32707],{"class":60},[28,158707,413],{"class":38},[28,158709,158710],{"class":127},"\"启动\"",[28,158712,81],{"class":38},[28,158714,158715,158717,158720],{"class":30,"line":103},[28,158716,158696],{"class":34},[28,158718,158719],{"class":127}," \"stop\"",[28,158721,4001],{"class":38},[28,158723,158724,158726,158728,158731],{"class":30,"line":109},[28,158725,32707],{"class":60},[28,158727,413],{"class":38},[28,158729,158730],{"class":127},"\"停止\"",[28,158732,81],{"class":38},[28,158734,158735,158737,158740],{"class":30,"line":118},[28,158736,158696],{"class":34},[28,158738,158739],{"class":127}," \"restart\"",[28,158741,4001],{"class":38},[28,158743,158744,158746,158748,158751],{"class":30,"line":124},[28,158745,32707],{"class":60},[28,158747,413],{"class":38},[28,158749,158750],{"class":127},"\"重启\"",[28,158752,81],{"class":38},[28,158754,158755,158757],{"class":30,"line":131},[28,158756,158696],{"class":34},[28,158758,158759],{"class":38}," _:\n",[28,158761,158762,158764,158766,158769],{"class":30,"line":137},[28,158763,32707],{"class":60},[28,158765,413],{"class":38},[28,158767,158768],{"class":127},"\"未知命令\"",[28,158770,81],{"class":38},[14,158772,158773,158774,158776,158777,158779],{},"入门阶段掌握 ",[25,158775,154871],{}," 更重要，",[25,158778,71521],{}," 可以作为补充。",[351,158781,158783],{"id":158782},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158785,123505],{},[363,158787,158788,158791,158794],{},[366,158789,158790],{},"输入成绩。",[366,158792,158793],{},"判断成绩是否合法。",[366,158795,158796],{},"输出等级。",[14,158798,10297],{},[18,158800,158802],{"className":20,"code":158801,"language":22,"meta":23,"style":23},"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",[25,158803,158804,158822,158826,158844,158855,158867,158878,158890,158901,158914,158925,158937,158948,158954],{"__ignoreMap":23},[28,158805,158806,158808,158810,158812,158814,158816,158818,158820],{"class":30,"line":31},[28,158807,155571],{"class":38},[28,158809,54],{"class":34},[28,158811,110010],{"class":60},[28,158813,413],{"class":38},[28,158815,54077],{"class":60},[28,158817,413],{"class":38},[28,158819,152622],{"class":127},[28,158821,30757],{"class":38},[28,158823,158824],{"class":30,"line":48},[28,158825,2662],{"emptyLinePlaceholder":336},[28,158827,158828,158830,158832,158834,158836,158838,158840,158842],{"class":30,"line":84},[28,158829,1796],{"class":34},[28,158831,39186],{"class":34},[28,158833,4355],{"class":60},[28,158835,158465],{"class":34},[28,158837,157996],{"class":38},[28,158839,1853],{"class":34},[28,158841,6016],{"class":60},[28,158843,4001],{"class":38},[28,158845,158846,158848,158850,158853],{"class":30,"line":91},[28,158847,31559],{"class":60},[28,158849,413],{"class":38},[28,158851,158852],{"class":127},"\"成绩不合法\"",[28,158854,81],{"class":38},[28,158856,158857,158859,158861,158863,158865],{"class":30,"line":97},[28,158858,158019],{"class":34},[28,158860,157996],{"class":38},[28,158862,1972],{"class":34},[28,158864,158001],{"class":60},[28,158866,4001],{"class":38},[28,158868,158869,158871,158873,158876],{"class":30,"line":103},[28,158870,31559],{"class":60},[28,158872,413],{"class":38},[28,158874,158875],{"class":127},"\"等级:A\"",[28,158877,81],{"class":38},[28,158879,158880,158882,158884,158886,158888],{"class":30,"line":109},[28,158881,158019],{"class":34},[28,158883,157996],{"class":38},[28,158885,1972],{"class":34},[28,158887,158026],{"class":60},[28,158889,4001],{"class":38},[28,158891,158892,158894,158896,158899],{"class":30,"line":118},[28,158893,31559],{"class":60},[28,158895,413],{"class":38},[28,158897,158898],{"class":127},"\"等级:B\"",[28,158900,81],{"class":38},[28,158902,158903,158905,158907,158909,158912],{"class":30,"line":124},[28,158904,158019],{"class":34},[28,158906,157996],{"class":38},[28,158908,1972],{"class":34},[28,158910,158911],{"class":60}," 70",[28,158913,4001],{"class":38},[28,158915,158916,158918,158920,158923],{"class":30,"line":131},[28,158917,31559],{"class":60},[28,158919,413],{"class":38},[28,158921,158922],{"class":127},"\"等级:C\"",[28,158924,81],{"class":38},[28,158926,158927,158929,158931,158933,158935],{"class":30,"line":137},[28,158928,158019],{"class":34},[28,158930,157996],{"class":38},[28,158932,1972],{"class":34},[28,158934,158050],{"class":60},[28,158936,4001],{"class":38},[28,158938,158939,158941,158943,158946],{"class":30,"line":143},[28,158940,31559],{"class":60},[28,158942,413],{"class":38},[28,158944,158945],{"class":127},"\"等级:D\"",[28,158947,81],{"class":38},[28,158949,158950,158952],{"class":30,"line":149},[28,158951,1963],{"class":34},[28,158953,4001],{"class":38},[28,158955,158956,158958,158960,158963],{"class":30,"line":1890},[28,158957,31559],{"class":60},[28,158959,413],{"class":38},[28,158961,158962],{"class":127},"\"等级:E\"",[28,158964,81],{"class":38},[351,158966,158968],{"id":158967},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158970,123505],{},[363,158972,158973,158976,158979,158982],{},[366,158974,158975],{},"输入消费金额。",[366,158977,158978],{},"输入会员等级，普通、银卡、金卡。",[366,158980,158981],{},"普通不打折，银卡 9 折，金卡 8 折。",[366,158983,158984],{},"满 500 再减 50。",[14,158986,10297],{},[18,158988,158990],{"className":20,"code":158989,"language":22,"meta":23,"style":23},"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",[25,158991,158992,159012,159028,159032,159040,159044,159058,159068,159081,159090,159103,159111,159117,159128,159132,159146,159150,159164,159174,159178],{"__ignoreMap":23},[28,158993,158994,158997,158999,159001,159003,159005,159007,159010],{"class":30,"line":31},[28,158995,158996],{"class":38},"amount ",[28,158998,54],{"class":34},[28,159000,110010],{"class":60},[28,159002,413],{"class":38},[28,159004,54077],{"class":60},[28,159006,413],{"class":38},[28,159008,159009],{"class":127},"\"请输入消费金额:\"",[28,159011,30757],{"class":38},[28,159013,159014,159017,159019,159021,159023,159026],{"class":30,"line":48},[28,159015,159016],{"class":38},"level ",[28,159018,54],{"class":34},[28,159020,60861],{"class":60},[28,159022,413],{"class":38},[28,159024,159025],{"class":127},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[28,159027,81],{"class":38},[28,159029,159030],{"class":30,"line":84},[28,159031,2662],{"emptyLinePlaceholder":336},[28,159033,159034,159036,159038],{"class":30,"line":91},[28,159035,157449],{"class":38},[28,159037,54],{"class":34},[28,159039,55955],{"class":60},[28,159041,159042],{"class":30,"line":97},[28,159043,2662],{"emptyLinePlaceholder":336},[28,159045,159046,159048,159051,159053,159056],{"class":30,"line":103},[28,159047,1796],{"class":34},[28,159049,159050],{"class":38}," level ",[28,159052,3211],{"class":34},[28,159054,159055],{"class":127}," \"银卡\"",[28,159057,4001],{"class":38},[28,159059,159060,159063,159065],{"class":30,"line":109},[28,159061,159062],{"class":38},"    discount ",[28,159064,54],{"class":34},[28,159066,159067],{"class":60}," 0.9\n",[28,159069,159070,159072,159074,159076,159079],{"class":30,"line":118},[28,159071,158019],{"class":34},[28,159073,159050],{"class":38},[28,159075,3211],{"class":34},[28,159077,159078],{"class":127}," \"金卡\"",[28,159080,4001],{"class":38},[28,159082,159083,159085,159087],{"class":30,"line":124},[28,159084,159062],{"class":38},[28,159086,54],{"class":34},[28,159088,159089],{"class":60}," 0.8\n",[28,159091,159092,159094,159096,159098,159101],{"class":30,"line":131},[28,159093,158019],{"class":34},[28,159095,159050],{"class":38},[28,159097,3211],{"class":34},[28,159099,159100],{"class":127}," \"普通\"",[28,159102,4001],{"class":38},[28,159104,159105,159107,159109],{"class":30,"line":137},[28,159106,159062],{"class":38},[28,159108,54],{"class":34},[28,159110,55955],{"class":60},[28,159112,159113,159115],{"class":30,"line":143},[28,159114,1963],{"class":34},[28,159116,4001],{"class":38},[28,159118,159119,159121,159123,159126],{"class":30,"line":149},[28,159120,31559],{"class":60},[28,159122,413],{"class":38},[28,159124,159125],{"class":127},"\"会员等级输入错误，按普通会员计算\"",[28,159127,81],{"class":38},[28,159129,159130],{"class":30,"line":1890},[28,159131,2662],{"emptyLinePlaceholder":336},[28,159133,159134,159137,159139,159142,159144],{"class":30,"line":1904},[28,159135,159136],{"class":38},"pay ",[28,159138,54],{"class":34},[28,159140,159141],{"class":38}," amount ",[28,159143,854],{"class":34},[28,159145,157488],{"class":38},[28,159147,159148],{"class":30,"line":1909},[28,159149,2662],{"emptyLinePlaceholder":336},[28,159151,159152,159154,159157,159159,159162],{"class":30,"line":1915},[28,159153,1796],{"class":34},[28,159155,159156],{"class":38}," pay ",[28,159158,1972],{"class":34},[28,159160,159161],{"class":60}," 500",[28,159163,4001],{"class":38},[28,159165,159166,159169,159171],{"class":30,"line":1936},[28,159167,159168],{"class":38},"    pay ",[28,159170,150465],{"class":34},[28,159172,159173],{"class":60}," 50\n",[28,159175,159176],{"class":30,"line":1941},[28,159177,2662],{"emptyLinePlaceholder":336},[28,159179,159180,159182,159184,159186,159188,159190,159193,159195,159197,159199],{"class":30,"line":1955},[28,159181,30675],{"class":60},[28,159183,413],{"class":38},[28,159185,462],{"class":34},[28,159187,157569],{"class":127},[28,159189,1293],{"class":60},[28,159191,159192],{"class":38},"pay",[28,159194,157372],{"class":34},[28,159196,1343],{"class":60},[28,159198,157225],{"class":127},[28,159200,81],{"class":38},[351,159202,159204],{"id":159203},"_312-易错点","3.12 易错点",[363,159206,159207,159210,159213,159216,159221],{},[366,159208,159209],{},"冒号不能漏。",[366,159211,159212],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[366,159214,159215],{},"多分支判断要注意顺序。",[366,159217,159218,159219,28648],{},"判断相等用 ",[25,159220,3211],{},[366,159222,159223],{},"字符串比较区分大小写：",[18,159225,159227],{"className":20,"code":159226,"language":22,"meta":23,"style":23},"\"Y\" == \"y\"  # False\n",[25,159228,159229],{"__ignoreMap":23},[28,159230,159231,159234,159236,159238],{"class":30,"line":31},[28,159232,159233],{"class":127},"\"Y\"",[28,159235,101772],{"class":34},[28,159237,158218],{"class":127},[28,159239,159240],{"class":87},"  # False\n",[14,159242,159243],{},"可转换后再判断：",[18,159245,159247],{"className":20,"code":159246,"language":22,"meta":23,"style":23},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[25,159248,159249,159266,159279],{"__ignoreMap":23},[28,159250,159251,159254,159256,159258,159260,159263],{"class":30,"line":31},[28,159252,159253],{"class":38},"answer ",[28,159255,54],{"class":34},[28,159257,60861],{"class":60},[28,159259,413],{"class":38},[28,159261,159262],{"class":127},"\"是否继续(y\u002Fn):\"",[28,159264,159265],{"class":38},").lower()\n",[28,159267,159268,159270,159273,159275,159277],{"class":30,"line":48},[28,159269,1796],{"class":34},[28,159271,159272],{"class":38}," answer ",[28,159274,3211],{"class":34},[28,159276,158218],{"class":127},[28,159278,4001],{"class":38},[28,159280,159281,159283,159285,159288],{"class":30,"line":84},[28,159282,31559],{"class":60},[28,159284,413],{"class":38},[28,159286,159287],{"class":127},"\"继续\"",[28,159289,81],{"class":38},[351,159291,159293],{"id":159292},"_313-本章练习","3.13 本章练习",[363,159295,159296,159299,159302,159305,159315],{},[366,159297,159298],{},"输入年龄，判断是否成年。",[366,159300,159301],{},"输入年份，判断是否为闰年。",[366,159303,159304],{},"输入三个数字，输出最大值。",[366,159306,159307,159308,159311,159312,159314],{},"写登录判断：用户名是 ",[25,159309,159310],{},"admin"," 且密码是 ",[25,159313,15346],{}," 才登录成功。",[366,159316,159317],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[328,159319,159320],{},"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":23,"searchDepth":48,"depth":48,"links":159322},[159323,159324,159325,159326,159327,159328,159333,159334,159335,159336,159337,159338,159339],{"id":157711,"depth":48,"text":157712},{"id":157764,"depth":48,"text":157765},{"id":157868,"depth":48,"text":157869},{"id":157958,"depth":48,"text":157959},{"id":158148,"depth":48,"text":158149},{"id":158271,"depth":48,"text":158272,"children":159329},[159330,159331,159332],{"id":158275,"depth":84,"text":158276},{"id":158332,"depth":84,"text":158333},{"id":158389,"depth":84,"text":158390},{"id":158434,"depth":48,"text":158435},{"id":158525,"depth":48,"text":158526},{"id":158652,"depth":48,"text":158653},{"id":158782,"depth":48,"text":158783},{"id":158967,"depth":48,"text":158968},{"id":159203,"depth":48,"text":159204},{"id":159292,"depth":48,"text":159293},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157703,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159346,"title":159347,"body":159348,"description":333,"extension":334,"meta":161117,"navigation":336,"path":161118,"seo":161119,"stem":161120,"__hash__":161121},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159349,"toc":161097},[159350,159353,159357,159363,159366,159383,159387,159389,159406,159408,159453,159455,159472,159476,159479,159545,159548,159566,159570,159731,159740,159744,159748,159753,159800,159802,159808,159812,159817,159864,159866,159872,159876,159881,159917,159920,159967,159971,159977,160035,160040,160071,160076,160080,160135,160138,160210,160213,160272,160276,160279,160354,160357,160361,160467,160470,160496,160500,160512,160581,160584,160676,160680,160682,160693,160695,160825,160829,161031,161039,161043,161073,161077,161094],[10,159351,159347],{"id":159352},"_4-循环语句",[351,159354,159356],{"id":159355},"_41-为什么需要循环","4.1 为什么需要循环",[14,159358,159359,159360,159362],{},"如果要输出 1 到 100，不应该写 100 行 ",[25,159361,146685],{},"，而应该用循环。",[14,159364,159365],{},"循环适合处理重复任务：",[363,159367,159368,159371,159374,159377,159380],{},[366,159369,159370],{},"重复输出。",[366,159372,159373],{},"重复输入。",[366,159375,159376],{},"遍历数据。",[366,159378,159379],{},"持续执行菜单。",[366,159381,159382],{},"批量处理文件或数据。",[351,159384,159386],{"id":159385},"_42-while循环","4.2 while循环",[14,159388,5443],{},[18,159390,159392],{"className":20,"code":159391,"language":22,"meta":23,"style":23},"while 条件:\n    循环体\n",[25,159393,159394,159401],{"__ignoreMap":23},[28,159395,159396,159398],{"class":30,"line":31},[28,159397,108876],{"class":34},[28,159399,159400],{"class":38}," 条件:\n",[28,159402,159403],{"class":30,"line":48},[28,159404,159405],{"class":38},"    循环体\n",[14,159407,15397],{},[18,159409,159411],{"className":20,"code":159410,"language":22,"meta":23,"style":23},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[25,159412,159413,159421,159425,159437,159444],{"__ignoreMap":23},[28,159414,159415,159417,159419],{"class":30,"line":31},[28,159416,100361],{"class":38},[28,159418,54],{"class":34},[28,159420,55955],{"class":60},[28,159422,159423],{"class":30,"line":48},[28,159424,2662],{"emptyLinePlaceholder":336},[28,159426,159427,159429,159431,159433,159435],{"class":30,"line":84},[28,159428,108876],{"class":34},[28,159430,9700],{"class":38},[28,159432,1853],{"class":34},[28,159434,2410],{"class":60},[28,159436,4001],{"class":38},[28,159438,159439,159441],{"class":30,"line":91},[28,159440,31559],{"class":60},[28,159442,159443],{"class":38},"(i)\n",[28,159445,159446,159449,159451],{"class":30,"line":97},[28,159447,159448],{"class":38},"    i ",[28,159450,9739],{"class":34},[28,159452,55955],{"class":60},[14,159454,81185],{},[363,159456,159457,159463,159466,159469],{},[366,159458,159459,159460,28648],{},"判断条件 ",[25,159461,159462],{},"i \u003C= 5",[366,159464,159465],{},"条件成立，执行循环体。",[366,159467,159468],{},"执行完后回到条件判断。",[366,159470,159471],{},"条件不成立，退出循环。",[351,159473,159475],{"id":159474},"_43-while累加","4.3 while累加",[14,159477,159478],{},"计算 1 到 100 的和：",[18,159480,159482],{"className":20,"code":159481,"language":22,"meta":23,"style":23},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[25,159483,159484,159492,159500,159504,159516,159526,159534,159538],{"__ignoreMap":23},[28,159485,159486,159488,159490],{"class":30,"line":31},[28,159487,100361],{"class":38},[28,159489,54],{"class":34},[28,159491,55955],{"class":60},[28,159493,159494,159496,159498],{"class":30,"line":48},[28,159495,157473],{"class":38},[28,159497,54],{"class":34},[28,159499,47589],{"class":60},[28,159501,159502],{"class":30,"line":84},[28,159503,2662],{"emptyLinePlaceholder":336},[28,159505,159506,159508,159510,159512,159514],{"class":30,"line":91},[28,159507,108876],{"class":34},[28,159509,9700],{"class":38},[28,159511,1853],{"class":34},[28,159513,6016],{"class":60},[28,159515,4001],{"class":38},[28,159517,159518,159521,159523],{"class":30,"line":97},[28,159519,159520],{"class":38},"    total ",[28,159522,9739],{"class":34},[28,159524,159525],{"class":38}," i\n",[28,159527,159528,159530,159532],{"class":30,"line":103},[28,159529,159448],{"class":38},[28,159531,9739],{"class":34},[28,159533,55955],{"class":60},[28,159535,159536],{"class":30,"line":109},[28,159537,2662],{"emptyLinePlaceholder":336},[28,159539,159540,159542],{"class":30,"line":118},[28,159541,30675],{"class":60},[28,159543,159544],{"class":38},"(total)\n",[14,159546,159547],{},"核心思想：",[363,159549,159550,159555,159560],{},[366,159551,159552,159554],{},[25,159553,840],{}," 控制循环次数。",[366,159556,159557,159559],{},[25,159558,157574],{}," 保存累加结果。",[366,159561,159562,159563,159565],{},"每轮循环都要更新 ",[25,159564,840],{},"，否则可能死循环。",[351,159567,159569],{"id":159568},"_44-while猜数字","4.4 while猜数字",[18,159571,159573],{"className":20,"code":159572,"language":22,"meta":23,"style":23},"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",[25,159574,159575,159581,159585,159602,159610,159614,159622,159642,159651,159655,159667,159678,159688,159699,159705,159727],{"__ignoreMap":23},[28,159576,159577,159579],{"class":30,"line":31},[28,159578,35],{"class":34},[28,159580,45584],{"class":38},[28,159582,159583],{"class":30,"line":48},[28,159584,2662],{"emptyLinePlaceholder":336},[28,159586,159587,159589,159591,159594,159596,159598,159600],{"class":30,"line":84},[28,159588,159253],{"class":38},[28,159590,54],{"class":34},[28,159592,159593],{"class":38}," random.randint(",[28,159595,61],{"class":60},[28,159597,12697],{"class":38},[28,159599,713],{"class":60},[28,159601,81],{"class":38},[28,159603,159604,159606,159608],{"class":30,"line":91},[28,159605,146904],{"class":38},[28,159607,54],{"class":34},[28,159609,47589],{"class":60},[28,159611,159612],{"class":30,"line":97},[28,159613,2662],{"emptyLinePlaceholder":336},[28,159615,159616,159618,159620],{"class":30,"line":103},[28,159617,108876],{"class":34},[28,159619,95544],{"class":60},[28,159621,4001],{"class":38},[28,159623,159624,159627,159629,159631,159633,159635,159637,159640],{"class":30,"line":109},[28,159625,159626],{"class":38},"    guess ",[28,159628,54],{"class":34},[28,159630,2644],{"class":60},[28,159632,413],{"class":38},[28,159634,54077],{"class":60},[28,159636,413],{"class":38},[28,159638,159639],{"class":127},"\"请输入1到100之间的数字:\"",[28,159641,30757],{"class":38},[28,159643,159644,159647,159649],{"class":30,"line":118},[28,159645,159646],{"class":38},"    count ",[28,159648,9739],{"class":34},[28,159650,55955],{"class":60},[28,159652,159653],{"class":30,"line":124},[28,159654,2662],{"emptyLinePlaceholder":336},[28,159656,159657,159659,159662,159664],{"class":30,"line":131},[28,159658,3363],{"class":34},[28,159660,159661],{"class":38}," guess ",[28,159663,1357],{"class":34},[28,159665,159666],{"class":38}," answer:\n",[28,159668,159669,159671,159673,159676],{"class":30,"line":137},[28,159670,32707],{"class":60},[28,159672,413],{"class":38},[28,159674,159675],{"class":127},"\"猜大了\"",[28,159677,81],{"class":38},[28,159679,159680,159682,159684,159686],{"class":30,"line":143},[28,159681,39549],{"class":34},[28,159683,159661],{"class":38},[28,159685,1307],{"class":34},[28,159687,159666],{"class":38},[28,159689,159690,159692,159694,159697],{"class":30,"line":149},[28,159691,32707],{"class":60},[28,159693,413],{"class":38},[28,159695,159696],{"class":127},"\"猜小了\"",[28,159698,81],{"class":38},[28,159700,159701,159703],{"class":30,"line":1890},[28,159702,158235],{"class":34},[28,159704,4001],{"class":38},[28,159706,159707,159709,159711,159713,159716,159718,159720,159722,159725],{"class":30,"line":1904},[28,159708,32707],{"class":60},[28,159710,413],{"class":38},[28,159712,462],{"class":34},[28,159714,159715],{"class":127},"\"猜对了，一共猜了",[28,159717,1293],{"class":60},[28,159719,84690],{"class":38},[28,159721,1343],{"class":60},[28,159723,159724],{"class":127},"次\"",[28,159726,81],{"class":38},[28,159728,159729],{"class":30,"line":1909},[28,159730,31884],{"class":34},[14,159732,159733,159736,159737,159739],{},[25,159734,159735],{},"while True"," 表示无限循环，通常配合 ",[25,159738,2315],{}," 使用。",[351,159741,159743],{"id":159742},"_45-break和continue","4.5 break和continue",[380,159745,159747],{"id":159746},"_451-break","4.5.1 break",[14,159749,159750,159752],{},[25,159751,2315],{}," 直接结束整个循环。",[18,159754,159756],{"className":20,"code":159755,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[25,159757,159758,159778,159790,159794],{"__ignoreMap":23},[28,159759,159760,159762,159764,159766,159768,159770,159772,159774,159776],{"class":30,"line":31},[28,159761,3287],{"class":34},[28,159763,9700],{"class":38},[28,159765,26306],{"class":34},[28,159767,32699],{"class":60},[28,159769,413],{"class":38},[28,159771,61],{"class":60},[28,159773,12697],{"class":38},[28,159775,206],{"class":60},[28,159777,31046],{"class":38},[28,159779,159780,159782,159784,159786,159788],{"class":30,"line":48},[28,159781,3363],{"class":34},[28,159783,9700],{"class":38},[28,159785,3211],{"class":34},[28,159787,78326],{"class":60},[28,159789,4001],{"class":38},[28,159791,159792],{"class":30,"line":84},[28,159793,31884],{"class":34},[28,159795,159796,159798],{"class":30,"line":91},[28,159797,31559],{"class":60},[28,159799,159443],{"class":38},[14,159801,146670],{},[18,159803,159806],{"className":159804,"code":159805,"language":5449,"meta":23},[5447],"1\n2\n",[25,159807,159805],{"__ignoreMap":23},[380,159809,159811],{"id":159810},"_452-continue","4.5.2 continue",[14,159813,159814,159816],{},[25,159815,154885],{}," 跳过本轮剩余代码，进入下一轮循环。",[18,159818,159820],{"className":20,"code":159819,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[25,159821,159822,159842,159854,159858],{"__ignoreMap":23},[28,159823,159824,159826,159828,159830,159832,159834,159836,159838,159840],{"class":30,"line":31},[28,159825,3287],{"class":34},[28,159827,9700],{"class":38},[28,159829,26306],{"class":34},[28,159831,32699],{"class":60},[28,159833,413],{"class":38},[28,159835,61],{"class":60},[28,159837,12697],{"class":38},[28,159839,206],{"class":60},[28,159841,31046],{"class":38},[28,159843,159844,159846,159848,159850,159852],{"class":30,"line":48},[28,159845,3363],{"class":34},[28,159847,9700],{"class":38},[28,159849,3211],{"class":34},[28,159851,78326],{"class":60},[28,159853,4001],{"class":38},[28,159855,159856],{"class":30,"line":84},[28,159857,148725],{"class":34},[28,159859,159860,159862],{"class":30,"line":91},[28,159861,31559],{"class":60},[28,159863,159443],{"class":38},[14,159865,146670],{},[18,159867,159870],{"className":159868,"code":159869,"language":5449,"meta":23},[5447],"1\n2\n4\n5\n",[25,159871,159869],{"__ignoreMap":23},[351,159873,159875],{"id":159874},"_46-for循环","4.6 for循环",[14,159877,159878,159880],{},[25,159879,3287],{}," 常用于遍历序列。",[18,159882,159884],{"className":20,"code":159883,"language":22,"meta":23,"style":23},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[25,159885,159886,159895,159899,159910],{"__ignoreMap":23},[28,159887,159888,159890,159892],{"class":30,"line":31},[28,159889,146749],{"class":38},[28,159891,54],{"class":34},[28,159893,159894],{"class":127}," \"python\"\n",[28,159896,159897],{"class":30,"line":48},[28,159898,2662],{"emptyLinePlaceholder":336},[28,159900,159901,159903,159906,159908],{"class":30,"line":84},[28,159902,3287],{"class":34},[28,159904,159905],{"class":38}," ch ",[28,159907,26306],{"class":34},[28,159909,158612],{"class":38},[28,159911,159912,159914],{"class":30,"line":91},[28,159913,31559],{"class":60},[28,159915,159916],{"class":38},"(ch)\n",[14,159918,159919],{},"遍历列表：",[18,159921,159923],{"className":20,"code":159922,"language":22,"meta":23,"style":23},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[25,159924,159925,159947,159951,159961],{"__ignoreMap":23},[28,159926,159927,159930,159932,159934,159936,159938,159940,159942,159945],{"class":30,"line":31},[28,159928,159929],{"class":38},"students ",[28,159931,54],{"class":34},[28,159933,52482],{"class":38},[28,159935,150101],{"class":127},[28,159937,12697],{"class":38},[28,159939,151149],{"class":127},[28,159941,12697],{"class":38},[28,159943,159944],{"class":127},"\"小刚\"",[28,159946,33502],{"class":38},[28,159948,159949],{"class":30,"line":48},[28,159950,2662],{"emptyLinePlaceholder":336},[28,159952,159953,159955,159957,159959],{"class":30,"line":84},[28,159954,3287],{"class":34},[28,159956,152350],{"class":38},[28,159958,26306],{"class":34},[28,159960,152355],{"class":38},[28,159962,159963,159965],{"class":30,"line":91},[28,159964,31559],{"class":60},[28,159966,150255],{"class":38},[351,159968,159970],{"id":159969},"_47-range函数","4.7 range函数",[14,159972,159973,159976],{},[25,159974,159975],{},"range()"," 用于生成整数序列。",[18,159978,159980],{"className":20,"code":159979,"language":22,"meta":23,"style":23},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[25,159981,159982,159996,160014],{"__ignoreMap":23},[28,159983,159984,159986,159988,159990,159993],{"class":30,"line":31},[28,159985,33672],{"class":60},[28,159987,413],{"class":38},[28,159989,721],{"class":60},[28,159991,159992],{"class":38},")          ",[28,159994,159995],{"class":87},"# 0,1,2,3,4\n",[28,159997,159998,160000,160002,160004,160006,160008,160011],{"class":30,"line":48},[28,159999,33672],{"class":60},[28,160001,413],{"class":38},[28,160003,61],{"class":60},[28,160005,12697],{"class":38},[28,160007,721],{"class":60},[28,160009,160010],{"class":38},")       ",[28,160012,160013],{"class":87},"# 1,2,3,4\n",[28,160015,160016,160018,160020,160022,160024,160026,160028,160030,160032],{"class":30,"line":84},[28,160017,33672],{"class":60},[28,160019,413],{"class":38},[28,160021,61],{"class":60},[28,160023,12697],{"class":38},[28,160025,845],{"class":60},[28,160027,12697],{"class":38},[28,160029,211],{"class":60},[28,160031,155874],{"class":38},[28,160033,160034],{"class":87},"# 1,3,5,7,9\n",[14,160036,160037,160038,24881],{},"配合 ",[25,160039,3287],{},[18,160041,160043],{"className":20,"code":160042,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    print(i)\n",[25,160044,160045,160065],{"__ignoreMap":23},[28,160046,160047,160049,160051,160053,160055,160057,160059,160061,160063],{"class":30,"line":31},[28,160048,3287],{"class":34},[28,160050,9700],{"class":38},[28,160052,26306],{"class":34},[28,160054,32699],{"class":60},[28,160056,413],{"class":38},[28,160058,61],{"class":60},[28,160060,12697],{"class":38},[28,160062,206],{"class":60},[28,160064,31046],{"class":38},[28,160066,160067,160069],{"class":30,"line":48},[28,160068,31559],{"class":60},[28,160070,159443],{"class":38},[14,160072,9287,160073,160075],{},[25,160074,33672],{}," 的结束值不包含在内。",[351,160077,160079],{"id":160078},"_48-for循环求和","4.8 for循环求和",[18,160081,160083],{"className":20,"code":160082,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[25,160084,160085,160093,160097,160117,160125,160129],{"__ignoreMap":23},[28,160086,160087,160089,160091],{"class":30,"line":31},[28,160088,157473],{"class":38},[28,160090,54],{"class":34},[28,160092,47589],{"class":60},[28,160094,160095],{"class":30,"line":48},[28,160096,2662],{"emptyLinePlaceholder":336},[28,160098,160099,160101,160103,160105,160107,160109,160111,160113,160115],{"class":30,"line":84},[28,160100,3287],{"class":34},[28,160102,9700],{"class":38},[28,160104,26306],{"class":34},[28,160106,32699],{"class":60},[28,160108,413],{"class":38},[28,160110,61],{"class":60},[28,160112,12697],{"class":38},[28,160114,738],{"class":60},[28,160116,31046],{"class":38},[28,160118,160119,160121,160123],{"class":30,"line":91},[28,160120,159520],{"class":38},[28,160122,9739],{"class":34},[28,160124,159525],{"class":38},[28,160126,160127],{"class":30,"line":97},[28,160128,2662],{"emptyLinePlaceholder":336},[28,160130,160131,160133],{"class":30,"line":103},[28,160132,30675],{"class":60},[28,160134,159544],{"class":38},[14,160136,160137],{},"求偶数和：",[18,160139,160141],{"className":20,"code":160140,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[25,160142,160143,160151,160155,160175,160191,160200,160204],{"__ignoreMap":23},[28,160144,160145,160147,160149],{"class":30,"line":31},[28,160146,157473],{"class":38},[28,160148,54],{"class":34},[28,160150,47589],{"class":60},[28,160152,160153],{"class":30,"line":48},[28,160154,2662],{"emptyLinePlaceholder":336},[28,160156,160157,160159,160161,160163,160165,160167,160169,160171,160173],{"class":30,"line":84},[28,160158,3287],{"class":34},[28,160160,9700],{"class":38},[28,160162,26306],{"class":34},[28,160164,32699],{"class":60},[28,160166,413],{"class":38},[28,160168,61],{"class":60},[28,160170,12697],{"class":38},[28,160172,738],{"class":60},[28,160174,31046],{"class":38},[28,160176,160177,160179,160181,160183,160185,160187,160189],{"class":30,"line":91},[28,160178,3363],{"class":34},[28,160180,9700],{"class":38},[28,160182,729],{"class":34},[28,160184,15017],{"class":60},[28,160186,101772],{"class":34},[28,160188,4355],{"class":60},[28,160190,4001],{"class":38},[28,160192,160193,160196,160198],{"class":30,"line":97},[28,160194,160195],{"class":38},"        total ",[28,160197,9739],{"class":34},[28,160199,159525],{"class":38},[28,160201,160202],{"class":30,"line":103},[28,160203,2662],{"emptyLinePlaceholder":336},[28,160205,160206,160208],{"class":30,"line":109},[28,160207,30675],{"class":60},[28,160209,159544],{"class":38},[14,160211,160212],{},"也可以：",[18,160214,160216],{"className":20,"code":160215,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[25,160217,160218,160226,160230,160254,160262,160266],{"__ignoreMap":23},[28,160219,160220,160222,160224],{"class":30,"line":31},[28,160221,157473],{"class":38},[28,160223,54],{"class":34},[28,160225,47589],{"class":60},[28,160227,160228],{"class":30,"line":48},[28,160229,2662],{"emptyLinePlaceholder":336},[28,160231,160232,160234,160236,160238,160240,160242,160244,160246,160248,160250,160252],{"class":30,"line":84},[28,160233,3287],{"class":34},[28,160235,9700],{"class":38},[28,160237,26306],{"class":34},[28,160239,32699],{"class":60},[28,160241,413],{"class":38},[28,160243,211],{"class":60},[28,160245,12697],{"class":38},[28,160247,738],{"class":60},[28,160249,12697],{"class":38},[28,160251,211],{"class":60},[28,160253,31046],{"class":38},[28,160255,160256,160258,160260],{"class":30,"line":91},[28,160257,159520],{"class":38},[28,160259,9739],{"class":34},[28,160261,159525],{"class":38},[28,160263,160264],{"class":30,"line":97},[28,160265,2662],{"emptyLinePlaceholder":336},[28,160267,160268,160270],{"class":30,"line":103},[28,160269,30675],{"class":60},[28,160271,159544],{"class":38},[351,160273,160275],{"id":160274},"_49-循环嵌套","4.9 循环嵌套",[14,160277,160278],{},"嵌套循环就是循环里面再写循环。",[18,160280,160282],{"className":20,"code":160281,"language":22,"meta":23,"style":23},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[25,160283,160284,160304,160324],{"__ignoreMap":23},[28,160285,160286,160288,160290,160292,160294,160296,160298,160300,160302],{"class":30,"line":31},[28,160287,3287],{"class":34},[28,160289,9700],{"class":38},[28,160291,26306],{"class":34},[28,160293,32699],{"class":60},[28,160295,413],{"class":38},[28,160297,61],{"class":60},[28,160299,12697],{"class":38},[28,160301,73],{"class":60},[28,160303,31046],{"class":38},[28,160305,160306,160308,160310,160312,160314,160316,160318,160320,160322],{"class":30,"line":48},[28,160307,3463],{"class":34},[28,160309,9762],{"class":38},[28,160311,26306],{"class":34},[28,160313,32699],{"class":60},[28,160315,413],{"class":38},[28,160317,61],{"class":60},[28,160319,12697],{"class":38},[28,160321,73],{"class":60},[28,160323,31046],{"class":38},[28,160325,160326,160328,160330,160332,160335,160337,160339,160341,160344,160346,160348,160350,160352],{"class":30,"line":84},[28,160327,32707],{"class":60},[28,160329,413],{"class":38},[28,160331,462],{"class":34},[28,160333,160334],{"class":127},"\"i=",[28,160336,1293],{"class":60},[28,160338,840],{"class":38},[28,160340,1343],{"class":60},[28,160342,160343],{"class":127},", j=",[28,160345,1293],{"class":60},[28,160347,866],{"class":38},[28,160349,1343],{"class":60},[28,160351,654],{"class":127},[28,160353,81],{"class":38},[14,160355,160356],{},"外层循环执行一次，内层循环执行完整一轮。",[351,160358,160360],{"id":160359},"_410-九九乘法表","4.10 九九乘法表",[18,160362,160364],{"className":20,"code":160363,"language":22,"meta":23,"style":23},"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",[25,160365,160366,160386,160409,160461],{"__ignoreMap":23},[28,160367,160368,160370,160372,160374,160376,160378,160380,160382,160384],{"class":30,"line":31},[28,160369,3287],{"class":34},[28,160371,9700],{"class":38},[28,160373,26306],{"class":34},[28,160375,32699],{"class":60},[28,160377,413],{"class":38},[28,160379,61],{"class":60},[28,160381,12697],{"class":38},[28,160383,845],{"class":60},[28,160385,31046],{"class":38},[28,160387,160388,160390,160392,160394,160396,160398,160400,160403,160405,160407],{"class":30,"line":48},[28,160389,3463],{"class":34},[28,160391,9762],{"class":38},[28,160393,26306],{"class":34},[28,160395,32699],{"class":60},[28,160397,413],{"class":38},[28,160399,61],{"class":60},[28,160401,160402],{"class":38},", i ",[28,160404,880],{"class":34},[28,160406,25381],{"class":60},[28,160408,31046],{"class":38},[28,160410,160411,160413,160415,160417,160419,160421,160423,160425,160427,160429,160431,160433,160435,160437,160439,160441,160443,160445,160447,160449,160451,160453,160455,160457,160459],{"class":30,"line":84},[28,160412,32707],{"class":60},[28,160414,413],{"class":38},[28,160416,462],{"class":34},[28,160418,654],{"class":127},[28,160420,1293],{"class":60},[28,160422,866],{"class":38},[28,160424,1343],{"class":60},[28,160426,854],{"class":127},[28,160428,1293],{"class":60},[28,160430,840],{"class":38},[28,160432,1343],{"class":60},[28,160434,54],{"class":127},[28,160436,1293],{"class":60},[28,160438,100361],{"class":38},[28,160440,854],{"class":34},[28,160442,3672],{"class":38},[28,160444,1343],{"class":60},[28,160446,654],{"class":127},[28,160448,12697],{"class":38},[28,160450,46057],{"class":5478},[28,160452,54],{"class":34},[28,160454,654],{"class":127},[28,160456,1498],{"class":60},[28,160458,654],{"class":127},[28,160460,81],{"class":38},[28,160462,160463,160465],{"class":30,"line":91},[28,160464,31559],{"class":60},[28,160466,2238],{"class":38},[14,160468,160469],{},"关键点：",[363,160471,160472,160478,160484,160490],{},[366,160473,160474,160475,160477],{},"外层 ",[25,160476,840],{}," 控制行。",[366,160479,160480,160481,160483],{},"内层 ",[25,160482,866],{}," 控制列。",[366,160485,160486,160487,160489],{},"每行结束后用 ",[25,160488,146685],{}," 换行。",[366,160491,160492,160495],{},[25,160493,160494],{},"end=\"\\t\""," 让同一行的内容横向排列。",[351,160497,160499],{"id":160498},"_411-循环else","4.11 循环else",[14,160501,160502,160503,160505,160506,160508,160509,160511],{},"Python 的循环可以带 ",[25,160504,1963],{},"。当循环正常结束时执行 ",[25,160507,1963],{},"，如果被 ",[25,160510,2315],{}," 打断，则不执行。",[18,160513,160515],{"className":20,"code":160514,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160516,160517,160537,160549,160560,160564,160570],{"__ignoreMap":23},[28,160518,160519,160521,160523,160525,160527,160529,160531,160533,160535],{"class":30,"line":31},[28,160520,3287],{"class":34},[28,160522,9700],{"class":38},[28,160524,26306],{"class":34},[28,160526,32699],{"class":60},[28,160528,413],{"class":38},[28,160530,61],{"class":60},[28,160532,12697],{"class":38},[28,160534,206],{"class":60},[28,160536,31046],{"class":38},[28,160538,160539,160541,160543,160545,160547],{"class":30,"line":48},[28,160540,3363],{"class":34},[28,160542,9700],{"class":38},[28,160544,3211],{"class":34},[28,160546,2300],{"class":60},[28,160548,4001],{"class":38},[28,160550,160551,160553,160555,160558],{"class":30,"line":84},[28,160552,32707],{"class":60},[28,160554,413],{"class":38},[28,160556,160557],{"class":127},"\"找到了\"",[28,160559,81],{"class":38},[28,160561,160562],{"class":30,"line":91},[28,160563,31884],{"class":34},[28,160565,160566,160568],{"class":30,"line":97},[28,160567,1963],{"class":34},[28,160569,4001],{"class":38},[28,160571,160572,160574,160576,160579],{"class":30,"line":103},[28,160573,31559],{"class":60},[28,160575,413],{"class":38},[28,160577,160578],{"class":127},"\"没找到\"",[28,160580,81],{"class":38},[14,160582,160583],{},"常用于搜索。",[18,160585,160587],{"className":20,"code":160586,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160588,160589,160610,160619,160623,160635,160646,160656,160660,160666],{"__ignoreMap":23},[28,160590,160591,160594,160596,160598,160600,160602,160604,160606,160608],{"class":30,"line":31},[28,160592,160593],{"class":38},"names ",[28,160595,54],{"class":34},[28,160597,52482],{"class":38},[28,160599,150101],{"class":127},[28,160601,12697],{"class":38},[28,160603,151149],{"class":127},[28,160605,12697],{"class":38},[28,160607,159944],{"class":127},[28,160609,33502],{"class":38},[28,160611,160612,160614,160616],{"class":30,"line":48},[28,160613,111791],{"class":38},[28,160615,54],{"class":34},[28,160617,160618],{"class":127}," \"小李\"\n",[28,160620,160621],{"class":30,"line":84},[28,160622,2662],{"emptyLinePlaceholder":336},[28,160624,160625,160627,160630,160632],{"class":30,"line":91},[28,160626,3287],{"class":34},[28,160628,160629],{"class":38}," name ",[28,160631,26306],{"class":34},[28,160633,160634],{"class":38}," names:\n",[28,160636,160637,160639,160641,160643],{"class":30,"line":97},[28,160638,3363],{"class":34},[28,160640,160629],{"class":38},[28,160642,3211],{"class":34},[28,160644,160645],{"class":38}," target:\n",[28,160647,160648,160650,160652,160654],{"class":30,"line":103},[28,160649,32707],{"class":60},[28,160651,413],{"class":38},[28,160653,160557],{"class":127},[28,160655,81],{"class":38},[28,160657,160658],{"class":30,"line":109},[28,160659,31884],{"class":34},[28,160661,160662,160664],{"class":30,"line":118},[28,160663,1963],{"class":34},[28,160665,4001],{"class":38},[28,160667,160668,160670,160672,160674],{"class":30,"line":124},[28,160669,31559],{"class":60},[28,160671,413],{"class":38},[28,160673,160578],{"class":127},[28,160675,81],{"class":38},[351,160677,160679],{"id":160678},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160681,123505],{},[363,160683,160684,160687,160690],{},[366,160685,160686],{},"用户最多输入 3 次密码。",[366,160688,160689],{},"密码正确则登录成功。",[366,160691,160692],{},"3 次都错误则锁定账号。",[14,160694,10297],{},[18,160696,160698],{"className":20,"code":160697,"language":22,"meta":23,"style":23},"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",[25,160699,160700,160710,160714,160730,160746,160750,160762,160773,160777,160783,160808,160814],{"__ignoreMap":23},[28,160701,160702,160705,160707],{"class":30,"line":31},[28,160703,160704],{"class":38},"password ",[28,160706,54],{"class":34},[28,160708,160709],{"class":127}," \"123456\"\n",[28,160711,160712],{"class":30,"line":48},[28,160713,2662],{"emptyLinePlaceholder":336},[28,160715,160716,160718,160720,160722,160724,160726,160728],{"class":30,"line":84},[28,160717,3287],{"class":34},[28,160719,9700],{"class":38},[28,160721,26306],{"class":34},[28,160723,32699],{"class":60},[28,160725,413],{"class":38},[28,160727,78],{"class":60},[28,160729,31046],{"class":38},[28,160731,160732,160735,160737,160739,160741,160744],{"class":30,"line":91},[28,160733,160734],{"class":38},"    user_password ",[28,160736,54],{"class":34},[28,160738,60861],{"class":60},[28,160740,413],{"class":38},[28,160742,160743],{"class":127},"\"请输入密码:\"",[28,160745,81],{"class":38},[28,160747,160748],{"class":30,"line":97},[28,160749,2662],{"emptyLinePlaceholder":336},[28,160751,160752,160754,160757,160759],{"class":30,"line":103},[28,160753,3363],{"class":34},[28,160755,160756],{"class":38}," user_password ",[28,160758,3211],{"class":34},[28,160760,160761],{"class":38}," password:\n",[28,160763,160764,160766,160768,160771],{"class":30,"line":109},[28,160765,32707],{"class":60},[28,160767,413],{"class":38},[28,160769,160770],{"class":127},"\"登录成功\"",[28,160772,81],{"class":38},[28,160774,160775],{"class":30,"line":118},[28,160776,31884],{"class":34},[28,160778,160779,160781],{"class":30,"line":124},[28,160780,158235],{"class":34},[28,160782,4001],{"class":38},[28,160784,160785,160787,160789,160791,160794,160797,160799,160801,160803,160806],{"class":30,"line":131},[28,160786,32707],{"class":60},[28,160788,413],{"class":38},[28,160790,462],{"class":34},[28,160792,160793],{"class":127},"\"密码错误，还剩",[28,160795,160796],{"class":60},"{2",[28,160798,52527],{"class":34},[28,160800,3294],{"class":38},[28,160802,1343],{"class":60},[28,160804,160805],{"class":127},"次机会\"",[28,160807,81],{"class":38},[28,160809,160810,160812],{"class":30,"line":137},[28,160811,1963],{"class":34},[28,160813,4001],{"class":38},[28,160815,160816,160818,160820,160823],{"class":30,"line":143},[28,160817,31559],{"class":60},[28,160819,413],{"class":38},[28,160821,160822],{"class":127},"\"账号已锁定\"",[28,160824,81],{"class":38},[351,160826,160828],{"id":160827},"_413-小案例菜单程序","4.13 小案例：菜单程序",[18,160830,160832],{"className":20,"code":160831,"language":22,"meta":23,"style":23},"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",[25,160833,160834,160842,160853,160864,160875,160886,160897,160901,160916,160920,160932,160943,160955,160966,160978,160989,161001,161011,161015,161021],{"__ignoreMap":23},[28,160835,160836,160838,160840],{"class":30,"line":31},[28,160837,108876],{"class":34},[28,160839,95544],{"class":60},[28,160841,4001],{"class":38},[28,160843,160844,160846,160848,160851],{"class":30,"line":48},[28,160845,31559],{"class":60},[28,160847,413],{"class":38},[28,160849,160850],{"class":127},"\"====== 菜单 ======\"",[28,160852,81],{"class":38},[28,160854,160855,160857,160859,160862],{"class":30,"line":84},[28,160856,31559],{"class":60},[28,160858,413],{"class":38},[28,160860,160861],{"class":127},"\"1. 查询余额\"",[28,160863,81],{"class":38},[28,160865,160866,160868,160870,160873],{"class":30,"line":91},[28,160867,31559],{"class":60},[28,160869,413],{"class":38},[28,160871,160872],{"class":127},"\"2. 存款\"",[28,160874,81],{"class":38},[28,160876,160877,160879,160881,160884],{"class":30,"line":97},[28,160878,31559],{"class":60},[28,160880,413],{"class":38},[28,160882,160883],{"class":127},"\"3. 取款\"",[28,160885,81],{"class":38},[28,160887,160888,160890,160892,160895],{"class":30,"line":103},[28,160889,31559],{"class":60},[28,160891,413],{"class":38},[28,160893,160894],{"class":127},"\"0. 退出\"",[28,160896,81],{"class":38},[28,160898,160899],{"class":30,"line":109},[28,160900,2662],{"emptyLinePlaceholder":336},[28,160902,160903,160906,160908,160910,160912,160914],{"class":30,"line":118},[28,160904,160905],{"class":38},"    choice ",[28,160907,54],{"class":34},[28,160909,60861],{"class":60},[28,160911,413],{"class":38},[28,160913,153286],{"class":127},[28,160915,81],{"class":38},[28,160917,160918],{"class":30,"line":124},[28,160919,2662],{"emptyLinePlaceholder":336},[28,160921,160922,160924,160926,160928,160930],{"class":30,"line":131},[28,160923,3363],{"class":34},[28,160925,153299],{"class":38},[28,160927,3211],{"class":34},[28,160929,153304],{"class":127},[28,160931,4001],{"class":38},[28,160933,160934,160936,160938,160941],{"class":30,"line":137},[28,160935,32707],{"class":60},[28,160937,413],{"class":38},[28,160939,160940],{"class":127},"\"余额为1000元\"",[28,160942,81],{"class":38},[28,160944,160945,160947,160949,160951,160953],{"class":30,"line":143},[28,160946,39549],{"class":34},[28,160948,153299],{"class":38},[28,160950,3211],{"class":34},[28,160952,153323],{"class":127},[28,160954,4001],{"class":38},[28,160956,160957,160959,160961,160964],{"class":30,"line":149},[28,160958,32707],{"class":60},[28,160960,413],{"class":38},[28,160962,160963],{"class":127},"\"存款功能\"",[28,160965,81],{"class":38},[28,160967,160968,160970,160972,160974,160976],{"class":30,"line":1890},[28,160969,39549],{"class":34},[28,160971,153299],{"class":38},[28,160973,3211],{"class":34},[28,160975,153341],{"class":127},[28,160977,4001],{"class":38},[28,160979,160980,160982,160984,160987],{"class":30,"line":1904},[28,160981,32707],{"class":60},[28,160983,413],{"class":38},[28,160985,160986],{"class":127},"\"取款功能\"",[28,160988,81],{"class":38},[28,160990,160991,160993,160995,160997,160999],{"class":30,"line":1909},[28,160992,39549],{"class":34},[28,160994,153299],{"class":38},[28,160996,3211],{"class":34},[28,160998,153395],{"class":127},[28,161000,4001],{"class":38},[28,161002,161003,161005,161007,161009],{"class":30,"line":1915},[28,161004,32707],{"class":60},[28,161006,413],{"class":38},[28,161008,153406],{"class":127},[28,161010,81],{"class":38},[28,161012,161013],{"class":30,"line":1936},[28,161014,31884],{"class":34},[28,161016,161017,161019],{"class":30,"line":1941},[28,161018,158235],{"class":34},[28,161020,4001],{"class":38},[28,161022,161023,161025,161027,161029],{"class":30,"line":1955},[28,161024,32707],{"class":60},[28,161026,413],{"class":38},[28,161028,153427],{"class":127},[28,161030,81],{"class":38},[14,161032,161033,161034,161036,161037,28648],{},"菜单类程序通常使用 ",[25,161035,159735],{},"，用户选择退出时 ",[25,161038,2315],{},[351,161040,161042],{"id":161041},"_414-易错点","4.14 易错点",[363,161044,161045,161050,161056,161064,161070],{},[366,161046,161047,161049],{},[25,161048,108876],{}," 循环必须更新控制变量。",[366,161051,161052,161055],{},[25,161053,161054],{},"range(1, 10)"," 不包含 10。",[366,161057,161058,161060,161061,161063],{},[25,161059,2315],{}," 结束整个循环，",[25,161062,154885],{}," 只跳过本轮。",[366,161065,161066,161067,161069],{},"嵌套循环中，",[25,161068,2315],{}," 只跳出当前所在的一层循环。",[366,161071,161072],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[351,161074,161076],{"id":161075},"_415-本章练习","4.15 本章练习",[363,161078,161079,161082,161085,161088,161091],{},[366,161080,161081],{},"输出 1 到 100。",[366,161083,161084],{},"计算 1 到 100 的偶数和。",[366,161086,161087],{},"输出 100 以内能被 3 和 5 同时整除的数。",[366,161089,161090],{},"编写猜数字游戏，限制最多猜 7 次。",[366,161092,161093],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[328,161095,161096],{},"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":23,"searchDepth":48,"depth":48,"links":161098},[161099,161100,161101,161102,161103,161107,161108,161109,161110,161111,161112,161113,161114,161115,161116],{"id":159355,"depth":48,"text":159356},{"id":159385,"depth":48,"text":159386},{"id":159474,"depth":48,"text":159475},{"id":159568,"depth":48,"text":159569},{"id":159742,"depth":48,"text":159743,"children":161104},[161105,161106],{"id":159746,"depth":84,"text":159747},{"id":159810,"depth":84,"text":159811},{"id":159874,"depth":48,"text":159875},{"id":159969,"depth":48,"text":159970},{"id":160078,"depth":48,"text":160079},{"id":160274,"depth":48,"text":160275},{"id":160359,"depth":48,"text":160360},{"id":160498,"depth":48,"text":160499},{"id":160678,"depth":48,"text":160679},{"id":160827,"depth":48,"text":160828},{"id":161041,"depth":48,"text":161042},{"id":161075,"depth":48,"text":161076},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159347,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161123,"title":161124,"body":161125,"description":333,"extension":334,"meta":163130,"navigation":336,"path":163131,"seo":163132,"stem":163133,"__hash__":163134},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161126,"toc":163110},[161127,161130,161134,161137,161140,161154,161157,161171,161175,161177,161196,161198,161245,161247,161261,161265,161339,161342,161346,161349,161408,161416,161419,161472,161475,161479,161484,161539,161547,161597,161601,161606,161614,161713,161719,161723,161728,161731,161742,161783,161796,161800,161803,161839,161842,161855,161858,161918,161922,161926,161929,161980,161984,161987,162034,162040,162106,162109,162113,162116,162232,162235,162239,162242,162348,162352,162355,162393,162396,162438,162441,162501,162504,162508,162972,162975,162979,163006,163012,163073,163077,163107],[10,161128,161124],{"id":161129},"_5-函数基础",[351,161131,161133],{"id":161132},"_51-为什么需要函数","5.1 为什么需要函数",[14,161135,161136],{},"函数用于封装一段可以重复使用的代码。",[14,161138,161139],{},"不使用函数的问题：",[363,161141,161142,161145,161148,161151],{},[366,161143,161144],{},"重复代码多。",[366,161146,161147],{},"修改逻辑时容易漏改。",[366,161149,161150],{},"主流程不清晰。",[366,161152,161153],{},"程序越写越长，难以维护。",[14,161155,161156],{},"使用函数后的好处：",[363,161158,161159,161162,161165,161168],{},[366,161160,161161],{},"提高复用性。",[366,161163,161164],{},"提高可读性。",[366,161166,161167],{},"便于调试。",[366,161169,161170],{},"便于分工。",[351,161172,161174],{"id":161173},"_52-函数定义","5.2 函数定义",[14,161176,5443],{},[18,161178,161180],{"className":20,"code":161179,"language":22,"meta":23,"style":23},"def 函数名():\n    函数体\n",[25,161181,161182,161191],{"__ignoreMap":23},[28,161183,161184,161186,161189],{"class":30,"line":31},[28,161185,32203],{"class":34},[28,161187,161188],{"class":2225}," 函数名",[28,161190,32209],{"class":38},[28,161192,161193],{"class":30,"line":48},[28,161194,161195],{"class":38},"    函数体\n",[14,161197,15397],{},[18,161199,161201],{"className":20,"code":161200,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[25,161202,161203,161212,161222,161232,161236,161240],{"__ignoreMap":23},[28,161204,161205,161207,161210],{"class":30,"line":31},[28,161206,32203],{"class":34},[28,161208,161209],{"class":2225}," say_hello",[28,161211,32209],{"class":38},[28,161213,161214,161216,161218,161220],{"class":30,"line":48},[28,161215,31559],{"class":60},[28,161217,413],{"class":38},[28,161219,6106],{"class":127},[28,161221,81],{"class":38},[28,161223,161224,161226,161228,161230],{"class":30,"line":84},[28,161225,31559],{"class":60},[28,161227,413],{"class":38},[28,161229,146852],{"class":127},[28,161231,81],{"class":38},[28,161233,161234],{"class":30,"line":91},[28,161235,2662],{"emptyLinePlaceholder":336},[28,161237,161238],{"class":30,"line":97},[28,161239,2662],{"emptyLinePlaceholder":336},[28,161241,161242],{"class":30,"line":103},[28,161243,161244],{"class":38},"say_hello()\n",[14,161246,9287],{},[363,161248,161249,161252,161255,161258],{},[366,161250,161251],{},"函数必须先定义，再调用。",[366,161253,161254],{},"函数名遵循变量命名规则。",[366,161256,161257],{},"函数体需要缩进。",[366,161259,161260],{},"函数不调用就不会执行。",[351,161262,161264],{"id":161263},"_53-函数调用","5.3 函数调用",[18,161266,161268],{"className":20,"code":161267,"language":22,"meta":23,"style":23},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[25,161269,161270,161279,161290,161301,161312,161322,161326,161330,161335],{"__ignoreMap":23},[28,161271,161272,161274,161277],{"class":30,"line":31},[28,161273,32203],{"class":34},[28,161275,161276],{"class":2225}," print_menu",[28,161278,32209],{"class":38},[28,161280,161281,161283,161285,161288],{"class":30,"line":48},[28,161282,31559],{"class":60},[28,161284,413],{"class":38},[28,161286,161287],{"class":127},"\"1. 查询\"",[28,161289,81],{"class":38},[28,161291,161292,161294,161296,161299],{"class":30,"line":84},[28,161293,31559],{"class":60},[28,161295,413],{"class":38},[28,161297,161298],{"class":127},"\"2. 添加\"",[28,161300,81],{"class":38},[28,161302,161303,161305,161307,161310],{"class":30,"line":91},[28,161304,31559],{"class":60},[28,161306,413],{"class":38},[28,161308,161309],{"class":127},"\"3. 删除\"",[28,161311,81],{"class":38},[28,161313,161314,161316,161318,161320],{"class":30,"line":97},[28,161315,31559],{"class":60},[28,161317,413],{"class":38},[28,161319,160894],{"class":127},[28,161321,81],{"class":38},[28,161323,161324],{"class":30,"line":103},[28,161325,2662],{"emptyLinePlaceholder":336},[28,161327,161328],{"class":30,"line":109},[28,161329,2662],{"emptyLinePlaceholder":336},[28,161331,161332],{"class":30,"line":118},[28,161333,161334],{"class":38},"print_menu()\n",[28,161336,161337],{"class":30,"line":124},[28,161338,161334],{"class":38},[14,161340,161341],{},"函数可以多次调用，每次调用都会执行函数体。",[351,161343,161345],{"id":161344},"_54-参数","5.4 参数",[14,161347,161348],{},"参数用于向函数传递数据。",[18,161350,161352],{"className":20,"code":161351,"language":22,"meta":23,"style":23},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[25,161353,161354,161363,161383,161387,161391,161400],{"__ignoreMap":23},[28,161355,161356,161358,161360],{"class":30,"line":31},[28,161357,32203],{"class":34},[28,161359,161209],{"class":2225},[28,161361,161362],{"class":38},"(name):\n",[28,161364,161365,161367,161369,161371,161373,161375,161377,161379,161381],{"class":30,"line":48},[28,161366,31559],{"class":60},[28,161368,413],{"class":38},[28,161370,462],{"class":34},[28,161372,157267],{"class":127},[28,161374,1293],{"class":60},[28,161376,80066],{"class":38},[28,161378,1343],{"class":60},[28,161380,654],{"class":127},[28,161382,81],{"class":38},[28,161384,161385],{"class":30,"line":84},[28,161386,2662],{"emptyLinePlaceholder":336},[28,161388,161389],{"class":30,"line":91},[28,161390,2662],{"emptyLinePlaceholder":336},[28,161392,161393,161396,161398],{"class":30,"line":97},[28,161394,161395],{"class":38},"say_hello(",[28,161397,150101],{"class":127},[28,161399,81],{"class":38},[28,161401,161402,161404,161406],{"class":30,"line":103},[28,161403,161395],{"class":38},[28,161405,151149],{"class":127},[28,161407,81],{"class":38},[14,161409,161410,161412,161413,161415],{},[25,161411,80066],{}," 是形参，",[25,161414,150101],{}," 是实参。",[14,161417,161418],{},"多个参数：",[18,161420,161422],{"className":20,"code":161421,"language":22,"meta":23,"style":23},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[25,161423,161424,161432,161445,161451,161455,161459],{"__ignoreMap":23},[28,161425,161426,161428,161430],{"class":30,"line":31},[28,161427,32203],{"class":34},[28,161429,5471],{"class":2225},[28,161431,151306],{"class":38},[28,161433,161434,161437,161439,161441,161443],{"class":30,"line":48},[28,161435,161436],{"class":38},"    result ",[28,161438,54],{"class":34},[28,161440,11131],{"class":38},[28,161442,880],{"class":34},[28,161444,151317],{"class":38},[28,161446,161447,161449],{"class":30,"line":84},[28,161448,31559],{"class":60},[28,161450,76841],{"class":38},[28,161452,161453],{"class":30,"line":91},[28,161454,2662],{"emptyLinePlaceholder":336},[28,161456,161457],{"class":30,"line":97},[28,161458,2662],{"emptyLinePlaceholder":336},[28,161460,161461,161464,161466,161468,161470],{"class":30,"line":103},[28,161462,161463],{"class":38},"add(",[28,161465,845],{"class":60},[28,161467,12697],{"class":38},[28,161469,1098],{"class":60},[28,161471,81],{"class":38},[14,161473,161474],{},"调用时参数数量必须匹配。",[351,161476,161478],{"id":161477},"_55-返回值","5.5 返回值",[14,161480,161481,161483],{},[25,161482,17308],{}," 用于把函数内部的结果返回给调用者。",[18,161485,161487],{"className":20,"code":161486,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[25,161488,161489,161497,161507,161511,161515,161533],{"__ignoreMap":23},[28,161490,161491,161493,161495],{"class":30,"line":31},[28,161492,32203],{"class":34},[28,161494,5471],{"class":2225},[28,161496,151306],{"class":38},[28,161498,161499,161501,161503,161505],{"class":30,"line":48},[28,161500,4352],{"class":34},[28,161502,11131],{"class":38},[28,161504,880],{"class":34},[28,161506,151317],{"class":38},[28,161508,161509],{"class":30,"line":84},[28,161510,2662],{"emptyLinePlaceholder":336},[28,161512,161513],{"class":30,"line":91},[28,161514,2662],{"emptyLinePlaceholder":336},[28,161516,161517,161520,161522,161525,161527,161529,161531],{"class":30,"line":97},[28,161518,161519],{"class":38},"result ",[28,161521,54],{"class":34},[28,161523,161524],{"class":38}," add(",[28,161526,845],{"class":60},[28,161528,12697],{"class":38},[28,161530,1098],{"class":60},[28,161532,81],{"class":38},[28,161534,161535,161537],{"class":30,"line":103},[28,161536,30675],{"class":60},[28,161538,76841],{"class":38},[14,161540,161541,161542,161544,161545,28648],{},"如果函数没有写 ",[25,161543,17308],{},"，默认返回 ",[25,161546,95938],{},[18,161548,161550],{"className":20,"code":161549,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[25,161551,161552,161560,161570,161574,161578,161587],{"__ignoreMap":23},[28,161553,161554,161556,161558],{"class":30,"line":31},[28,161555,32203],{"class":34},[28,161557,161209],{"class":2225},[28,161559,32209],{"class":38},[28,161561,161562,161564,161566,161568],{"class":30,"line":48},[28,161563,31559],{"class":60},[28,161565,413],{"class":38},[28,161567,6106],{"class":127},[28,161569,81],{"class":38},[28,161571,161572],{"class":30,"line":84},[28,161573,2662],{"emptyLinePlaceholder":336},[28,161575,161576],{"class":30,"line":91},[28,161577,2662],{"emptyLinePlaceholder":336},[28,161579,161580,161582,161584],{"class":30,"line":97},[28,161581,161519],{"class":38},[28,161583,54],{"class":34},[28,161585,161586],{"class":38}," say_hello()\n",[28,161588,161589,161591,161594],{"class":30,"line":103},[28,161590,30675],{"class":60},[28,161592,161593],{"class":38},"(result)  ",[28,161595,161596],{"class":87},"# None\n",[351,161598,161600],{"id":161599},"_56-return的作用","5.6 return的作用",[14,161602,161603,161605],{},[25,161604,17308],{}," 有两个作用：",[363,161607,161608,161611],{},[366,161609,161610],{},"返回结果。",[366,161612,161613],{},"结束函数。",[18,161615,161617],{"className":20,"code":161616,"language":22,"meta":23,"style":23},"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",[25,161618,161619,161629,161641,161648,161652,161664,161671,161675,161682,161686,161690,161701],{"__ignoreMap":23},[28,161620,161621,161623,161626],{"class":30,"line":31},[28,161622,32203],{"class":34},[28,161624,161625],{"class":2225}," check_age",[28,161627,161628],{"class":38},"(age):\n",[28,161630,161631,161633,161635,161637,161639],{"class":30,"line":48},[28,161632,3363],{"class":34},[28,161634,15969],{"class":38},[28,161636,1307],{"class":34},[28,161638,4355],{"class":60},[28,161640,4001],{"class":38},[28,161642,161643,161645],{"class":30,"line":84},[28,161644,15014],{"class":34},[28,161646,161647],{"class":127}," \"年龄不合法\"\n",[28,161649,161650],{"class":30,"line":91},[28,161651,2662],{"emptyLinePlaceholder":336},[28,161653,161654,161656,161658,161660,161662],{"class":30,"line":97},[28,161655,3363],{"class":34},[28,161657,15969],{"class":38},[28,161659,1972],{"class":34},[28,161661,156498],{"class":60},[28,161663,4001],{"class":38},[28,161665,161666,161668],{"class":30,"line":103},[28,161667,15014],{"class":34},[28,161669,161670],{"class":127}," \"成年人\"\n",[28,161672,161673],{"class":30,"line":109},[28,161674,2662],{"emptyLinePlaceholder":336},[28,161676,161677,161679],{"class":30,"line":118},[28,161678,4352],{"class":34},[28,161680,161681],{"class":127}," \"未成年人\"\n",[28,161683,161684],{"class":30,"line":124},[28,161685,2662],{"emptyLinePlaceholder":336},[28,161687,161688],{"class":30,"line":131},[28,161689,2662],{"emptyLinePlaceholder":336},[28,161691,161692,161694,161697,161699],{"class":30,"line":137},[28,161693,30675],{"class":60},[28,161695,161696],{"class":38},"(check_age(",[28,161698,1098],{"class":60},[28,161700,30757],{"class":38},[28,161702,161703,161705,161707,161709,161711],{"class":30,"line":143},[28,161704,30675],{"class":60},[28,161706,161696],{"class":38},[28,161708,930],{"class":34},[28,161710,61],{"class":60},[28,161712,30757],{"class":38},[14,161714,161715,161716,161718],{},"函数执行到 ",[25,161717,17308],{}," 后，后面的代码不会继续执行。",[351,161720,161722],{"id":161721},"_57-none","5.7 None",[14,161724,161725,161727],{},[25,161726,95938],{}," 表示空值或没有结果。",[14,161729,161730],{},"常见使用场景：",[363,161732,161733,161736,161739],{},[366,161734,161735],{},"函数没有返回值。",[366,161737,161738],{},"变量暂时没有具体值。",[366,161740,161741],{},"表示查询不到结果。",[18,161743,161745],{"className":20,"code":161744,"language":22,"meta":23,"style":23},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[25,161746,161747,161755,161759,161772],{"__ignoreMap":23},[28,161748,161749,161751,161753],{"class":30,"line":31},[28,161750,161519],{"class":38},[28,161752,54],{"class":34},[28,161754,152385],{"class":60},[28,161756,161757],{"class":30,"line":48},[28,161758,2662],{"emptyLinePlaceholder":336},[28,161760,161761,161763,161766,161768,161770],{"class":30,"line":84},[28,161762,1796],{"class":34},[28,161764,161765],{"class":38}," result ",[28,161767,39183],{"class":34},[28,161769,39189],{"class":60},[28,161771,4001],{"class":38},[28,161773,161774,161776,161778,161781],{"class":30,"line":91},[28,161775,31559],{"class":60},[28,161777,413],{"class":38},[28,161779,161780],{"class":127},"\"没有数据\"",[28,161782,81],{"class":38},[14,161784,161785,161786,161788,161789,161792,161793,28648],{},"判断 ",[25,161787,95938],{}," 推荐使用 ",[25,161790,161791],{},"is None","，不要写成 ",[25,161794,161795],{},"== None",[351,161797,161799],{"id":161798},"_58-函数文档字符串","5.8 函数文档字符串",[14,161801,161802],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[18,161804,161806],{"className":20,"code":161805,"language":22,"meta":23,"style":23},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[25,161807,161808,161818,161823],{"__ignoreMap":23},[28,161809,161810,161812,161815],{"class":30,"line":31},[28,161811,32203],{"class":34},[28,161813,161814],{"class":2225}," calculate_bmi",[28,161816,161817],{"class":38},"(weight, height):\n",[28,161819,161820],{"class":30,"line":48},[28,161821,161822],{"class":127},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[28,161824,161825,161827,161830,161832,161835,161837],{"class":30,"line":84},[28,161826,4352],{"class":34},[28,161828,161829],{"class":38}," weight ",[28,161831,982],{"class":34},[28,161833,161834],{"class":38}," height ",[28,161836,10923],{"class":34},[28,161838,47979],{"class":60},[14,161840,161841],{},"查看说明：",[18,161843,161845],{"className":20,"code":161844,"language":22,"meta":23,"style":23},"help(calculate_bmi)\n",[25,161846,161847],{"__ignoreMap":23},[28,161848,161849,161852],{"class":30,"line":31},[28,161850,161851],{"class":60},"help",[28,161853,161854],{"class":38},"(calculate_bmi)\n",[14,161856,161857],{},"较完整的写法：",[18,161859,161861],{"className":20,"code":161860,"language":22,"meta":23,"style":23},"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",[25,161862,161863,161871,161876,161881,161885,161890,161895,161900,161904],{"__ignoreMap":23},[28,161864,161865,161867,161869],{"class":30,"line":31},[28,161866,32203],{"class":34},[28,161868,161814],{"class":2225},[28,161870,161817],{"class":38},[28,161872,161873],{"class":30,"line":48},[28,161874,161875],{"class":127},"    \"\"\"\n",[28,161877,161878],{"class":30,"line":84},[28,161879,161880],{"class":127},"    计算BMI。\n",[28,161882,161883],{"class":30,"line":91},[28,161884,2662],{"emptyLinePlaceholder":336},[28,161886,161887],{"class":30,"line":97},[28,161888,161889],{"class":127},"    :param weight: 体重，单位kg\n",[28,161891,161892],{"class":30,"line":103},[28,161893,161894],{"class":127},"    :param height: 身高，单位m\n",[28,161896,161897],{"class":30,"line":109},[28,161898,161899],{"class":127},"    :return: BMI数值\n",[28,161901,161902],{"class":30,"line":118},[28,161903,161875],{"class":127},[28,161905,161906,161908,161910,161912,161914,161916],{"class":30,"line":124},[28,161907,4352],{"class":34},[28,161909,161829],{"class":38},[28,161911,982],{"class":34},[28,161913,161834],{"class":38},[28,161915,10923],{"class":34},[28,161917,47979],{"class":60},[351,161919,161921],{"id":161920},"_59-变量作用域","5.9 变量作用域",[380,161923,161925],{"id":161924},"_591-局部变量","5.9.1 局部变量",[14,161927,161928],{},"在函数内部定义的变量，只能在函数内部使用。",[18,161930,161932],{"className":20,"code":161931,"language":22,"meta":23,"style":23},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[25,161933,161934,161943,161951,161957,161961,161965,161970],{"__ignoreMap":23},[28,161935,161936,161938,161941],{"class":30,"line":31},[28,161937,32203],{"class":34},[28,161939,161940],{"class":2225}," test",[28,161942,32209],{"class":38},[28,161944,161945,161947,161949],{"class":30,"line":48},[28,161946,45849],{"class":38},[28,161948,54],{"class":34},[28,161950,58684],{"class":60},[28,161952,161953,161955],{"class":30,"line":84},[28,161954,31559],{"class":60},[28,161956,425],{"class":38},[28,161958,161959],{"class":30,"line":91},[28,161960,2662],{"emptyLinePlaceholder":336},[28,161962,161963],{"class":30,"line":97},[28,161964,2662],{"emptyLinePlaceholder":336},[28,161966,161967],{"class":30,"line":103},[28,161968,161969],{"class":38},"test()\n",[28,161971,161972,161974,161977],{"class":30,"line":109},[28,161973,30675],{"class":60},[28,161975,161976],{"class":38},"(num)  ",[28,161978,161979],{"class":87},"# 报错\n",[380,161981,161983],{"id":161982},"_592-全局变量","5.9.2 全局变量",[14,161985,161986],{},"在函数外部定义的变量，可以在函数内部读取。",[18,161988,161990],{"className":20,"code":161989,"language":22,"meta":23,"style":23},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[25,161991,161992,162000,162004,162008,162016,162022,162026,162030],{"__ignoreMap":23},[28,161993,161994,161996,161998],{"class":30,"line":31},[28,161995,146749],{"class":38},[28,161997,54],{"class":34},[28,161999,149566],{"class":127},[28,162001,162002],{"class":30,"line":48},[28,162003,2662],{"emptyLinePlaceholder":336},[28,162005,162006],{"class":30,"line":84},[28,162007,2662],{"emptyLinePlaceholder":336},[28,162009,162010,162012,162014],{"class":30,"line":91},[28,162011,32203],{"class":34},[28,162013,161209],{"class":2225},[28,162015,32209],{"class":38},[28,162017,162018,162020],{"class":30,"line":97},[28,162019,31559],{"class":60},[28,162021,150873],{"class":38},[28,162023,162024],{"class":30,"line":103},[28,162025,2662],{"emptyLinePlaceholder":336},[28,162027,162028],{"class":30,"line":109},[28,162029,2662],{"emptyLinePlaceholder":336},[28,162031,162032],{"class":30,"line":118},[28,162033,161244],{"class":38},[14,162035,162036,162037,28648],{},"如果要在函数内部修改全局变量，需要 ",[25,162038,162039],{},"global",[18,162041,162043],{"className":20,"code":162042,"language":22,"meta":23,"style":23},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[25,162044,162045,162053,162057,162061,162070,162078,162086,162090,162094,162099],{"__ignoreMap":23},[28,162046,162047,162049,162051],{"class":30,"line":31},[28,162048,146904],{"class":38},[28,162050,54],{"class":34},[28,162052,47589],{"class":60},[28,162054,162055],{"class":30,"line":48},[28,162056,2662],{"emptyLinePlaceholder":336},[28,162058,162059],{"class":30,"line":84},[28,162060,2662],{"emptyLinePlaceholder":336},[28,162062,162063,162065,162068],{"class":30,"line":91},[28,162064,32203],{"class":34},[28,162066,162067],{"class":2225}," add_count",[28,162069,32209],{"class":38},[28,162071,162072,162075],{"class":30,"line":97},[28,162073,162074],{"class":34},"    global",[28,162076,162077],{"class":38}," count\n",[28,162079,162080,162082,162084],{"class":30,"line":103},[28,162081,159646],{"class":38},[28,162083,9739],{"class":34},[28,162085,55955],{"class":60},[28,162087,162088],{"class":30,"line":109},[28,162089,2662],{"emptyLinePlaceholder":336},[28,162091,162092],{"class":30,"line":118},[28,162093,2662],{"emptyLinePlaceholder":336},[28,162095,162096],{"class":30,"line":124},[28,162097,162098],{"class":38},"add_count()\n",[28,162100,162101,162103],{"class":30,"line":131},[28,162102,30675],{"class":60},[28,162104,162105],{"class":38},"(count)\n",[14,162107,162108],{},"不建议大量使用全局变量，项目变大后很难维护。",[351,162110,162112],{"id":162111},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162114,162115],{},"一个函数中可以调用另一个函数。",[18,162117,162119],{"className":20,"code":162118,"language":22,"meta":23,"style":23},"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",[25,162120,162121,162130,162144,162148,162152,162161,162166,162186,162207,162211,162215,162219],{"__ignoreMap":23},[28,162122,162123,162125,162128],{"class":30,"line":31},[28,162124,32203],{"class":34},[28,162126,162127],{"class":2225}," print_line",[28,162129,32209],{"class":38},[28,162131,162132,162134,162136,162138,162140,162142],{"class":30,"line":48},[28,162133,31559],{"class":60},[28,162135,413],{"class":38},[28,162137,32739],{"class":127},[28,162139,6780],{"class":34},[28,162141,78921],{"class":60},[28,162143,81],{"class":38},[28,162145,162146],{"class":30,"line":84},[28,162147,2662],{"emptyLinePlaceholder":336},[28,162149,162150],{"class":30,"line":91},[28,162151,2662],{"emptyLinePlaceholder":336},[28,162153,162154,162156,162159],{"class":30,"line":97},[28,162155,32203],{"class":34},[28,162157,162158],{"class":2225}," print_info",[28,162160,149588],{"class":38},[28,162162,162163],{"class":30,"line":103},[28,162164,162165],{"class":38},"    print_line()\n",[28,162167,162168,162170,162172,162174,162176,162178,162180,162182,162184],{"class":30,"line":109},[28,162169,31559],{"class":60},[28,162171,413],{"class":38},[28,162173,462],{"class":34},[28,162175,156895],{"class":127},[28,162177,1293],{"class":60},[28,162179,80066],{"class":38},[28,162181,1343],{"class":60},[28,162183,654],{"class":127},[28,162185,81],{"class":38},[28,162187,162188,162190,162192,162194,162197,162199,162201,162203,162205],{"class":30,"line":118},[28,162189,31559],{"class":60},[28,162191,413],{"class":38},[28,162193,462],{"class":34},[28,162195,162196],{"class":127},"\"年龄:",[28,162198,1293],{"class":60},[28,162200,70477],{"class":38},[28,162202,1343],{"class":60},[28,162204,654],{"class":127},[28,162206,81],{"class":38},[28,162208,162209],{"class":30,"line":124},[28,162210,162165],{"class":38},[28,162212,162213],{"class":30,"line":131},[28,162214,2662],{"emptyLinePlaceholder":336},[28,162216,162217],{"class":30,"line":137},[28,162218,2662],{"emptyLinePlaceholder":336},[28,162220,162221,162224,162226,162228,162230],{"class":30,"line":143},[28,162222,162223],{"class":38},"print_info(",[28,162225,150101],{"class":127},[28,162227,12697],{"class":38},[28,162229,1048],{"class":60},[28,162231,81],{"class":38},[14,162233,162234],{},"这种方式可以把小功能组合成大功能。",[351,162236,162238],{"id":162237},"_511-参数检查","5.11 参数检查",[14,162240,162241],{},"函数内部可以检查参数是否合法。",[18,162243,162245],{"className":20,"code":162244,"language":22,"meta":23,"style":23},"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",[25,162246,162247,162256,162268,162274,162284,162288,162292,162309,162313,162325,162336,162342],{"__ignoreMap":23},[28,162248,162249,162251,162254],{"class":30,"line":31},[28,162250,32203],{"class":34},[28,162252,162253],{"class":2225}," divide",[28,162255,151306],{"class":38},[28,162257,162258,162260,162262,162264,162266],{"class":30,"line":48},[28,162259,3363],{"class":34},[28,162261,11144],{"class":38},[28,162263,3211],{"class":34},[28,162265,4355],{"class":60},[28,162267,4001],{"class":38},[28,162269,162270,162272],{"class":30,"line":84},[28,162271,15014],{"class":34},[28,162273,152385],{"class":60},[28,162275,162276,162278,162280,162282],{"class":30,"line":91},[28,162277,4352],{"class":34},[28,162279,11131],{"class":38},[28,162281,982],{"class":34},[28,162283,151317],{"class":38},[28,162285,162286],{"class":30,"line":97},[28,162287,2662],{"emptyLinePlaceholder":336},[28,162289,162290],{"class":30,"line":103},[28,162291,2662],{"emptyLinePlaceholder":336},[28,162293,162294,162296,162298,162301,162303,162305,162307],{"class":30,"line":109},[28,162295,161519],{"class":38},[28,162297,54],{"class":34},[28,162299,162300],{"class":38}," divide(",[28,162302,845],{"class":60},[28,162304,12697],{"class":38},[28,162306,244],{"class":60},[28,162308,81],{"class":38},[28,162310,162311],{"class":30,"line":118},[28,162312,2662],{"emptyLinePlaceholder":336},[28,162314,162315,162317,162319,162321,162323],{"class":30,"line":124},[28,162316,1796],{"class":34},[28,162318,161765],{"class":38},[28,162320,39183],{"class":34},[28,162322,39189],{"class":60},[28,162324,4001],{"class":38},[28,162326,162327,162329,162331,162334],{"class":30,"line":131},[28,162328,31559],{"class":60},[28,162330,413],{"class":38},[28,162332,162333],{"class":127},"\"除数不能为0\"",[28,162335,81],{"class":38},[28,162337,162338,162340],{"class":30,"line":137},[28,162339,1963],{"class":34},[28,162341,4001],{"class":38},[28,162343,162344,162346],{"class":30,"line":143},[28,162345,31559],{"class":60},[28,162347,76841],{"class":38},[351,162349,162351],{"id":162350},"_512-类型提示","5.12 类型提示",[14,162353,162354],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[18,162356,162358],{"className":20,"code":162357,"language":22,"meta":23,"style":23},"def add(a: int, b: int) -> int:\n    return a + b\n",[25,162359,162360,162383],{"__ignoreMap":23},[28,162361,162362,162364,162366,162369,162371,162374,162376,162379,162381],{"class":30,"line":31},[28,162363,32203],{"class":34},[28,162365,5471],{"class":2225},[28,162367,162368],{"class":38},"(a: ",[28,162370,416],{"class":60},[28,162372,162373],{"class":38},", b: ",[28,162375,416],{"class":60},[28,162377,162378],{"class":38},") -> ",[28,162380,416],{"class":60},[28,162382,4001],{"class":38},[28,162384,162385,162387,162389,162391],{"class":30,"line":48},[28,162386,4352],{"class":34},[28,162388,11131],{"class":38},[28,162390,880],{"class":34},[28,162392,151317],{"class":38},[14,162394,162395],{},"字符串参数：",[18,162397,162399],{"className":20,"code":162398,"language":22,"meta":23,"style":23},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[25,162400,162401,162418],{"__ignoreMap":23},[28,162402,162403,162405,162407,162410,162412,162414,162416],{"class":30,"line":31},[28,162404,32203],{"class":34},[28,162406,161209],{"class":2225},[28,162408,162409],{"class":38},"(name: ",[28,162411,1567],{"class":60},[28,162413,162378],{"class":38},[28,162415,95938],{"class":60},[28,162417,4001],{"class":38},[28,162419,162420,162422,162424,162426,162428,162430,162432,162434,162436],{"class":30,"line":48},[28,162421,31559],{"class":60},[28,162423,413],{"class":38},[28,162425,462],{"class":34},[28,162427,157267],{"class":127},[28,162429,1293],{"class":60},[28,162431,80066],{"class":38},[28,162433,1343],{"class":60},[28,162435,654],{"class":127},[28,162437,81],{"class":38},[14,162439,162440],{},"列表参数：",[18,162442,162444],{"className":20,"code":162443,"language":22,"meta":23,"style":23},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[25,162445,162446,162465,162473,162485,162494],{"__ignoreMap":23},[28,162447,162448,162450,162453,162456,162458,162461,162463],{"class":30,"line":31},[28,162449,32203],{"class":34},[28,162451,162452],{"class":2225}," get_total",[28,162454,162455],{"class":38},"(numbers: list[",[28,162457,416],{"class":60},[28,162459,162460],{"class":38},"]) -> ",[28,162462,416],{"class":60},[28,162464,4001],{"class":38},[28,162466,162467,162469,162471],{"class":30,"line":48},[28,162468,159520],{"class":38},[28,162470,54],{"class":34},[28,162472,47589],{"class":60},[28,162474,162475,162477,162480,162482],{"class":30,"line":84},[28,162476,3463],{"class":34},[28,162478,162479],{"class":38}," number ",[28,162481,26306],{"class":34},[28,162483,162484],{"class":38}," numbers:\n",[28,162486,162487,162489,162491],{"class":30,"line":91},[28,162488,160195],{"class":38},[28,162490,9739],{"class":34},[28,162492,162493],{"class":38}," number\n",[28,162495,162496,162498],{"class":30,"line":97},[28,162497,4352],{"class":34},[28,162499,162500],{"class":38}," total\n",[14,162502,162503],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[351,162505,162507],{"id":162506},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[18,162509,162511],{"className":20,"code":162510,"language":22,"meta":23,"style":23},"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",[25,162512,162513,162523,162527,162531,162539,162550,162560,162570,162580,162590,162594,162598,162607,162629,162633,162637,162646,162652,162672,162684,162695,162699,162708,162719,162724,162728,162732,162741,162747,162766,162778,162788,162792,162803,162813,162817,162825,162836,162840,162844,162848,162856,162861,162875,162879,162891,162896,162908,162913,162925,162930,162942,162952,162956,162962],{"__ignoreMap":23},[28,162514,162515,162518,162520],{"class":30,"line":31},[28,162516,162517],{"class":38},"balance ",[28,162519,54],{"class":34},[28,162521,162522],{"class":60}," 1000\n",[28,162524,162525],{"class":30,"line":48},[28,162526,2662],{"emptyLinePlaceholder":336},[28,162528,162529],{"class":30,"line":84},[28,162530,2662],{"emptyLinePlaceholder":336},[28,162532,162533,162535,162537],{"class":30,"line":91},[28,162534,32203],{"class":34},[28,162536,152246],{"class":2225},[28,162538,32209],{"class":38},[28,162540,162541,162543,162545,162548],{"class":30,"line":97},[28,162542,31559],{"class":60},[28,162544,413],{"class":38},[28,162546,162547],{"class":127},"\"====== ATM ======\"",[28,162549,81],{"class":38},[28,162551,162552,162554,162556,162558],{"class":30,"line":103},[28,162553,31559],{"class":60},[28,162555,413],{"class":38},[28,162557,160861],{"class":127},[28,162559,81],{"class":38},[28,162561,162562,162564,162566,162568],{"class":30,"line":109},[28,162563,31559],{"class":60},[28,162565,413],{"class":38},[28,162567,160872],{"class":127},[28,162569,81],{"class":38},[28,162571,162572,162574,162576,162578],{"class":30,"line":118},[28,162573,31559],{"class":60},[28,162575,413],{"class":38},[28,162577,160883],{"class":127},[28,162579,81],{"class":38},[28,162581,162582,162584,162586,162588],{"class":30,"line":124},[28,162583,31559],{"class":60},[28,162585,413],{"class":38},[28,162587,160894],{"class":127},[28,162589,81],{"class":38},[28,162591,162592],{"class":30,"line":131},[28,162593,2662],{"emptyLinePlaceholder":336},[28,162595,162596],{"class":30,"line":137},[28,162597,2662],{"emptyLinePlaceholder":336},[28,162599,162600,162602,162605],{"class":30,"line":143},[28,162601,32203],{"class":34},[28,162603,162604],{"class":2225}," show_balance",[28,162606,32209],{"class":38},[28,162608,162609,162611,162613,162615,162618,162620,162623,162625,162627],{"class":30,"line":149},[28,162610,31559],{"class":60},[28,162612,413],{"class":38},[28,162614,462],{"class":34},[28,162616,162617],{"class":127},"\"当前余额:",[28,162619,1293],{"class":60},[28,162621,162622],{"class":38},"balance",[28,162624,1343],{"class":60},[28,162626,157225],{"class":127},[28,162628,81],{"class":38},[28,162630,162631],{"class":30,"line":1890},[28,162632,2662],{"emptyLinePlaceholder":336},[28,162634,162635],{"class":30,"line":1904},[28,162636,2662],{"emptyLinePlaceholder":336},[28,162638,162639,162641,162644],{"class":30,"line":1909},[28,162640,32203],{"class":34},[28,162642,162643],{"class":2225}," save_money",[28,162645,32209],{"class":38},[28,162647,162648,162650],{"class":30,"line":1915},[28,162649,162074],{"class":34},[28,162651,150312],{"class":38},[28,162653,162654,162657,162659,162661,162663,162665,162667,162670],{"class":30,"line":1936},[28,162655,162656],{"class":38},"    money ",[28,162658,54],{"class":34},[28,162660,110010],{"class":60},[28,162662,413],{"class":38},[28,162664,54077],{"class":60},[28,162666,413],{"class":38},[28,162668,162669],{"class":127},"\"请输入存款金额:\"",[28,162671,30757],{"class":38},[28,162673,162674,162676,162678,162680,162682],{"class":30,"line":1941},[28,162675,3363],{"class":34},[28,162677,150355],{"class":38},[28,162679,1853],{"class":34},[28,162681,4355],{"class":60},[28,162683,4001],{"class":38},[28,162685,162686,162688,162690,162693],{"class":30,"line":1955},[28,162687,32707],{"class":60},[28,162689,413],{"class":38},[28,162691,162692],{"class":127},"\"金额必须大于0\"",[28,162694,81],{"class":38},[28,162696,162697],{"class":30,"line":1960},[28,162698,152574],{"class":34},[28,162700,162701,162704,162706],{"class":30,"line":1989},[28,162702,162703],{"class":38},"    balance ",[28,162705,9739],{"class":34},[28,162707,150388],{"class":38},[28,162709,162710,162712,162714,162717],{"class":30,"line":1994},[28,162711,31559],{"class":60},[28,162713,413],{"class":38},[28,162715,162716],{"class":127},"\"存款成功\"",[28,162718,81],{"class":38},[28,162720,162721],{"class":30,"line":2011},[28,162722,162723],{"class":38},"    show_balance()\n",[28,162725,162726],{"class":30,"line":2016},[28,162727,2662],{"emptyLinePlaceholder":336},[28,162729,162730],{"class":30,"line":2021},[28,162731,2662],{"emptyLinePlaceholder":336},[28,162733,162734,162736,162739],{"class":30,"line":2026},[28,162735,32203],{"class":34},[28,162737,162738],{"class":2225}," withdraw_money",[28,162740,32209],{"class":38},[28,162742,162743,162745],{"class":30,"line":2040},[28,162744,162074],{"class":34},[28,162746,150312],{"class":38},[28,162748,162749,162751,162753,162755,162757,162759,162761,162764],{"class":30,"line":2045},[28,162750,162656],{"class":38},[28,162752,54],{"class":34},[28,162754,110010],{"class":60},[28,162756,413],{"class":38},[28,162758,54077],{"class":60},[28,162760,413],{"class":38},[28,162762,162763],{"class":127},"\"请输入取款金额:\"",[28,162765,30757],{"class":38},[28,162767,162768,162770,162772,162774,162776],{"class":30,"line":2839},[28,162769,3363],{"class":34},[28,162771,150355],{"class":38},[28,162773,1853],{"class":34},[28,162775,4355],{"class":60},[28,162777,4001],{"class":38},[28,162779,162780,162782,162784,162786],{"class":30,"line":2853},[28,162781,32707],{"class":60},[28,162783,413],{"class":38},[28,162785,162692],{"class":127},[28,162787,81],{"class":38},[28,162789,162790],{"class":30,"line":2861},[28,162791,152574],{"class":34},[28,162793,162794,162796,162798,162800],{"class":30,"line":2866},[28,162795,3363],{"class":34},[28,162797,150355],{"class":38},[28,162799,1357],{"class":34},[28,162801,162802],{"class":38}," balance:\n",[28,162804,162805,162807,162809,162811],{"class":30,"line":2872},[28,162806,32707],{"class":60},[28,162808,413],{"class":38},[28,162810,150450],{"class":127},[28,162812,81],{"class":38},[28,162814,162815],{"class":30,"line":2878},[28,162816,152574],{"class":34},[28,162818,162819,162821,162823],{"class":30,"line":2883},[28,162820,162703],{"class":38},[28,162822,150465],{"class":34},[28,162824,150388],{"class":38},[28,162826,162827,162829,162831,162834],{"class":30,"line":8210},[28,162828,31559],{"class":60},[28,162830,413],{"class":38},[28,162832,162833],{"class":127},"\"取款成功\"",[28,162835,81],{"class":38},[28,162837,162838],{"class":30,"line":8234},[28,162839,162723],{"class":38},[28,162841,162842],{"class":30,"line":8239},[28,162843,2662],{"emptyLinePlaceholder":336},[28,162845,162846],{"class":30,"line":8245},[28,162847,2662],{"emptyLinePlaceholder":336},[28,162849,162850,162852,162854],{"class":30,"line":8272},[28,162851,108876],{"class":34},[28,162853,95544],{"class":60},[28,162855,4001],{"class":38},[28,162857,162858],{"class":30,"line":8277},[28,162859,162860],{"class":38},"    show_menu()\n",[28,162862,162863,162865,162867,162869,162871,162873],{"class":30,"line":8283},[28,162864,160905],{"class":38},[28,162866,54],{"class":34},[28,162868,60861],{"class":60},[28,162870,413],{"class":38},[28,162872,153286],{"class":127},[28,162874,81],{"class":38},[28,162876,162877],{"class":30,"line":8295},[28,162878,2662],{"emptyLinePlaceholder":336},[28,162880,162881,162883,162885,162887,162889],{"class":30,"line":8307},[28,162882,3363],{"class":34},[28,162884,153299],{"class":38},[28,162886,3211],{"class":34},[28,162888,153304],{"class":127},[28,162890,4001],{"class":38},[28,162892,162893],{"class":30,"line":8319},[28,162894,162895],{"class":38},"        show_balance()\n",[28,162897,162898,162900,162902,162904,162906],{"class":30,"line":9978},[28,162899,39549],{"class":34},[28,162901,153299],{"class":38},[28,162903,3211],{"class":34},[28,162905,153323],{"class":127},[28,162907,4001],{"class":38},[28,162909,162910],{"class":30,"line":10003},[28,162911,162912],{"class":38},"        save_money()\n",[28,162914,162915,162917,162919,162921,162923],{"class":30,"line":10026},[28,162916,39549],{"class":34},[28,162918,153299],{"class":38},[28,162920,3211],{"class":34},[28,162922,153341],{"class":127},[28,162924,4001],{"class":38},[28,162926,162927],{"class":30,"line":10050},[28,162928,162929],{"class":38},"        withdraw_money()\n",[28,162931,162932,162934,162936,162938,162940],{"class":30,"line":10055},[28,162933,39549],{"class":34},[28,162935,153299],{"class":38},[28,162937,3211],{"class":34},[28,162939,153395],{"class":127},[28,162941,4001],{"class":38},[28,162943,162944,162946,162948,162950],{"class":30,"line":10060},[28,162945,32707],{"class":60},[28,162947,413],{"class":38},[28,162949,153406],{"class":127},[28,162951,81],{"class":38},[28,162953,162954],{"class":30,"line":10065},[28,162955,31884],{"class":34},[28,162957,162958,162960],{"class":30,"line":10074},[28,162959,158235],{"class":34},[28,162961,4001],{"class":38},[28,162963,162964,162966,162968,162970],{"class":30,"line":10079},[28,162965,32707],{"class":60},[28,162967,413],{"class":38},[28,162969,153427],{"class":127},[28,162971,81],{"class":38},[14,162973,162974],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[351,162976,162978],{"id":162977},"_514-易错点","5.14 易错点",[363,162980,162981,162984,162987,162992,162997,163000],{},[366,162982,162983],{},"函数定义后必须调用才会执行。",[366,162985,162986],{},"函数名后面有括号才是调用。",[366,162988,162989,162991],{},[25,162990,17308],{}," 后面的代码不会执行。",[366,162993,162994,162995,28648],{},"没有返回值的函数默认返回 ",[25,162996,95938],{},[366,162998,162999],{},"局部变量不能在函数外部访问。",[366,163001,163002,163003,163005],{},"不要滥用 ",[25,163004,162039],{},"，更好的方式是让函数返回新值。",[14,163007,163008,163009,163011],{},"例如不用 ",[25,163010,162039],{}," 改写存款：",[18,163013,163015],{"className":20,"code":163014,"language":22,"meta":23,"style":23},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[25,163016,163017,163026,163037,163041,163045,163053,163066],{"__ignoreMap":23},[28,163018,163019,163021,163023],{"class":30,"line":31},[28,163020,32203],{"class":34},[28,163022,162643],{"class":2225},[28,163024,163025],{"class":38},"(balance, money):\n",[28,163027,163028,163030,163033,163035],{"class":30,"line":48},[28,163029,4352],{"class":34},[28,163031,163032],{"class":38}," balance ",[28,163034,880],{"class":34},[28,163036,150388],{"class":38},[28,163038,163039],{"class":30,"line":84},[28,163040,2662],{"emptyLinePlaceholder":336},[28,163042,163043],{"class":30,"line":91},[28,163044,2662],{"emptyLinePlaceholder":336},[28,163046,163047,163049,163051],{"class":30,"line":97},[28,163048,162517],{"class":38},[28,163050,54],{"class":34},[28,163052,162522],{"class":60},[28,163054,163055,163057,163059,163062,163064],{"class":30,"line":103},[28,163056,162517],{"class":38},[28,163058,54],{"class":34},[28,163060,163061],{"class":38}," save_money(balance, ",[28,163063,1984],{"class":60},[28,163065,81],{"class":38},[28,163067,163068,163070],{"class":30,"line":109},[28,163069,30675],{"class":60},[28,163071,163072],{"class":38},"(balance)\n",[351,163074,163076],{"id":163075},"_515-本章练习","5.15 本章练习",[363,163078,163079,163086,163092,163098,163104],{},[366,163080,163081,163082,163085],{},"定义函数 ",[25,163083,163084],{},"print_student(name, age)","，输出学生信息。",[366,163087,163081,163088,163091],{},[25,163089,163090],{},"get_max(a, b, c)","，返回三个数中的最大值。",[366,163093,163081,163094,163097],{},[25,163095,163096],{},"is_even(num)","，判断一个数是否为偶数。",[366,163099,163081,163100,163103],{},[25,163101,163102],{},"calculate_bmi(weight, height)","，返回 BMI。",[366,163105,163106],{},"把第 4 章的菜单程序拆分成多个函数。",[328,163108,163109],{},"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":23,"searchDepth":48,"depth":48,"links":163111},[163112,163113,163114,163115,163116,163117,163118,163119,163120,163124,163125,163126,163127,163128,163129],{"id":161132,"depth":48,"text":161133},{"id":161173,"depth":48,"text":161174},{"id":161263,"depth":48,"text":161264},{"id":161344,"depth":48,"text":161345},{"id":161477,"depth":48,"text":161478},{"id":161599,"depth":48,"text":161600},{"id":161721,"depth":48,"text":161722},{"id":161798,"depth":48,"text":161799},{"id":161920,"depth":48,"text":161921,"children":163121},[163122,163123],{"id":161924,"depth":84,"text":161925},{"id":161982,"depth":84,"text":161983},{"id":162111,"depth":48,"text":162112},{"id":162237,"depth":48,"text":162238},{"id":162350,"depth":48,"text":162351},{"id":162506,"depth":48,"text":162507},{"id":162977,"depth":48,"text":162978},{"id":163075,"depth":48,"text":163076},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161124,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163136,"title":163137,"body":163138,"description":333,"extension":334,"meta":166182,"navigation":336,"path":166183,"seo":166184,"stem":166185,"__hash__":166186},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163139,"toc":166163},[163140,163143,163147,163150,163153,163257,163260,163264,163267,163347,163350,163354,163357,163417,163420,163456,163459,163474,163478,163551,163554,163609,163612,163682,163685,163769,163779,163837,163841,163886,163889,163915,163918,164024,164028,164031,164073,164076,164140,164143,164147,164150,164211,164214,164244,164247,164285,164289,164292,164301,164304,164428,164431,164472,164476,164479,164490,164530,164533,164548,164553,164556,164623,164626,164716,164720,164723,164771,164774,164801,164803,164833,164836,164856,164859,164890,164893,164926,164930,164933,164957,164960,164984,164987,165011,165015,165018,165148,165151,165231,165234,165309,165313,165316,165366,165369,165411,165414,165438,165440,165464,165467,165522,165525,165591,165595,165598,165601,165639,165642,165695,165698,165744,165747,165780,165783,165787,166106,166110,166139,166143,166160],[10,163141,163137],{"id":163142},"_6-数据容器",[351,163144,163146],{"id":163145},"_61-什么是数据容器","6.1 什么是数据容器",[14,163148,163149],{},"数据容器用于一次保存多个数据。",[14,163151,163152],{},"常见容器：",[543,163154,163155,163172],{},[546,163156,163157],{},[549,163158,163159,163161,163164,163167,163170],{},[552,163160,26034],{},[552,163162,163163],{},"是否有序",[552,163165,163166],{},"是否可变",[552,163168,163169],{},"是否允许重复",[552,163171,27755],{},[590,163173,163174,163192,163208,163223,163240],{},[549,163175,163176,163179,163182,163185,163188],{},[595,163177,163178],{},"list列表",[595,163180,163181],{},"有序",[595,163183,163184],{},"可变",[595,163186,163187],{},"允许",[595,163189,163190],{},[25,163191,155470],{},[549,163193,163194,163197,163199,163202,163204],{},[595,163195,163196],{},"tuple元组",[595,163198,163181],{},[595,163200,163201],{},"不可变",[595,163203,163187],{},[595,163205,163206],{},[25,163207,155483],{},[549,163209,163210,163213,163215,163217,163219],{},[595,163211,163212],{},"str字符串",[595,163214,163181],{},[595,163216,163201],{},[595,163218,163187],{},[595,163220,163221],{},[25,163222,156093],{},[549,163224,163225,163228,163231,163233,163236],{},[595,163226,163227],{},"set集合",[595,163229,163230],{},"无序",[595,163232,163184],{},[595,163234,163235],{},"不允许",[595,163237,163238],{},[25,163239,155508],{},[549,163241,163242,163245,163247,163249,163252],{},[595,163243,163244],{},"dict字典",[595,163246,163181],{},[595,163248,163184],{},[595,163250,163251],{},"key不允许重复",[595,163253,163254],{},[25,163255,163256],{},"{\"name\": \"小明\"}",[14,163258,163259],{},"Python 3.7 之后，字典保持插入顺序。",[351,163261,163263],{"id":163262},"_62-列表list","6.2 列表list",[14,163265,163266],{},"列表用于保存一组有顺序的数据。",[18,163268,163270],{"className":20,"code":163269,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[25,163271,163272,163292,163317,163338],{"__ignoreMap":23},[28,163273,163274,163276,163278,163280,163282,163284,163286,163288,163290],{"class":30,"line":31},[28,163275,160593],{"class":38},[28,163277,54],{"class":34},[28,163279,52482],{"class":38},[28,163281,150101],{"class":127},[28,163283,12697],{"class":38},[28,163285,151149],{"class":127},[28,163287,12697],{"class":38},[28,163289,159944],{"class":127},[28,163291,33502],{"class":38},[28,163293,163294,163297,163299,163301,163303,163305,163307,163309,163311,163313,163315],{"class":30,"line":48},[28,163295,163296],{"class":38},"numbers ",[28,163298,54],{"class":34},[28,163300,52482],{"class":38},[28,163302,61],{"class":60},[28,163304,12697],{"class":38},[28,163306,211],{"class":60},[28,163308,12697],{"class":38},[28,163310,78],{"class":60},[28,163312,12697],{"class":38},[28,163314,73],{"class":60},[28,163316,33502],{"class":38},[28,163318,163319,163322,163324,163326,163328,163330,163332,163334,163336],{"class":30,"line":84},[28,163320,163321],{"class":38},"mixed ",[28,163323,54],{"class":34},[28,163325,52482],{"class":38},[28,163327,150101],{"class":127},[28,163329,12697],{"class":38},[28,163331,1048],{"class":60},[28,163333,12697],{"class":38},[28,163335,31733],{"class":60},[28,163337,33502],{"class":38},[28,163339,163340,163343,163345],{"class":30,"line":91},[28,163341,163342],{"class":38},"empty ",[28,163344,54],{"class":34},[28,163346,52094],{"class":38},[14,163348,163349],{},"推荐一个列表中保存同类数据，代码更清晰。",[351,163351,163353],{"id":163352},"_63-列表索引","6.3 列表索引",[14,163355,163356],{},"正向索引从 0 开始：",[18,163358,163360],{"className":20,"code":163359,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[25,163361,163362,163382,163386,163397,163407],{"__ignoreMap":23},[28,163363,163364,163366,163368,163370,163372,163374,163376,163378,163380],{"class":30,"line":31},[28,163365,160593],{"class":38},[28,163367,54],{"class":34},[28,163369,52482],{"class":38},[28,163371,150101],{"class":127},[28,163373,12697],{"class":38},[28,163375,151149],{"class":127},[28,163377,12697],{"class":38},[28,163379,159944],{"class":127},[28,163381,33502],{"class":38},[28,163383,163384],{"class":30,"line":48},[28,163385,2662],{"emptyLinePlaceholder":336},[28,163387,163388,163390,163393,163395],{"class":30,"line":84},[28,163389,30675],{"class":60},[28,163391,163392],{"class":38},"(names[",[28,163394,244],{"class":60},[28,163396,4919],{"class":38},[28,163398,163399,163401,163403,163405],{"class":30,"line":91},[28,163400,30675],{"class":60},[28,163402,163392],{"class":38},[28,163404,61],{"class":60},[28,163406,4919],{"class":38},[28,163408,163409,163411,163413,163415],{"class":30,"line":97},[28,163410,30675],{"class":60},[28,163412,163392],{"class":38},[28,163414,211],{"class":60},[28,163416,4919],{"class":38},[14,163418,163419],{},"反向索引从 -1 开始：",[18,163421,163423],{"className":20,"code":163422,"language":22,"meta":23,"style":23},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[25,163424,163425,163441],{"__ignoreMap":23},[28,163426,163427,163429,163431,163433,163435,163438],{"class":30,"line":31},[28,163428,30675],{"class":60},[28,163430,163392],{"class":38},[28,163432,930],{"class":34},[28,163434,61],{"class":60},[28,163436,163437],{"class":38},"])  ",[28,163439,163440],{"class":87},"# 小刚\n",[28,163442,163443,163445,163447,163449,163451,163453],{"class":30,"line":48},[28,163444,30675],{"class":60},[28,163446,163392],{"class":38},[28,163448,930],{"class":34},[28,163450,211],{"class":60},[28,163452,163437],{"class":38},[28,163454,163455],{"class":87},"# 小红\n",[14,163457,163458],{},"索引越界会报错：",[18,163460,163462],{"className":20,"code":163461,"language":22,"meta":23,"style":23},"print(names[3])\n",[25,163463,163464],{"__ignoreMap":23},[28,163465,163466,163468,163470,163472],{"class":30,"line":31},[28,163467,30675],{"class":60},[28,163469,163392],{"class":38},[28,163471,78],{"class":60},[28,163473,4919],{"class":38},[351,163475,163477],{"id":163476},"_64-列表常用方法","6.4 列表常用方法",[18,163479,163481],{"className":20,"code":163480,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[25,163482,163483,163499,163503,163512,163526,163540,163544],{"__ignoreMap":23},[28,163484,163485,163487,163489,163491,163493,163495,163497],{"class":30,"line":31},[28,163486,160593],{"class":38},[28,163488,54],{"class":34},[28,163490,52482],{"class":38},[28,163492,150101],{"class":127},[28,163494,12697],{"class":38},[28,163496,151149],{"class":127},[28,163498,33502],{"class":38},[28,163500,163501],{"class":30,"line":48},[28,163502,2662],{"emptyLinePlaceholder":336},[28,163504,163505,163508,163510],{"class":30,"line":84},[28,163506,163507],{"class":38},"names.append(",[28,163509,159944],{"class":127},[28,163511,81],{"class":38},[28,163513,163514,163517,163519,163521,163524],{"class":30,"line":91},[28,163515,163516],{"class":38},"names.insert(",[28,163518,61],{"class":60},[28,163520,12697],{"class":38},[28,163522,163523],{"class":127},"\"小李\"",[28,163525,81],{"class":38},[28,163527,163528,163531,163533,163535,163538],{"class":30,"line":97},[28,163529,163530],{"class":38},"names.extend([",[28,163532,8945],{"class":127},[28,163534,12697],{"class":38},[28,163536,163537],{"class":127},"\"小赵\"",[28,163539,4919],{"class":38},[28,163541,163542],{"class":30,"line":103},[28,163543,2662],{"emptyLinePlaceholder":336},[28,163545,163546,163548],{"class":30,"line":109},[28,163547,30675],{"class":60},[28,163549,163550],{"class":38},"(names)\n",[14,163552,163553],{},"删除元素：",[18,163555,163557],{"className":20,"code":163556,"language":22,"meta":23,"style":23},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[25,163558,163559,163568,163578,163592,163604],{"__ignoreMap":23},[28,163560,163561,163564,163566],{"class":30,"line":31},[28,163562,163563],{"class":38},"names.remove(",[28,163565,151149],{"class":127},[28,163567,81],{"class":38},[28,163569,163570,163573,163575],{"class":30,"line":48},[28,163571,163572],{"class":38},"last ",[28,163574,54],{"class":34},[28,163576,163577],{"class":38}," names.pop()\n",[28,163579,163580,163583,163585,163588,163590],{"class":30,"line":84},[28,163581,163582],{"class":38},"first ",[28,163584,54],{"class":34},[28,163586,163587],{"class":38}," names.pop(",[28,163589,244],{"class":60},[28,163591,81],{"class":38},[28,163593,163594,163597,163600,163602],{"class":30,"line":91},[28,163595,163596],{"class":34},"del",[28,163598,163599],{"class":38}," names[",[28,163601,244],{"class":60},[28,163603,33502],{"class":38},[28,163605,163606],{"class":30,"line":97},[28,163607,163608],{"class":38},"names.clear()\n",[14,163610,163611],{},"查询和统计：",[18,163613,163615],{"className":20,"code":163614,"language":22,"meta":23,"style":23},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[25,163616,163617,163645,163649,163660,163671],{"__ignoreMap":23},[28,163618,163619,163621,163623,163625,163627,163629,163631,163633,163635,163637,163639,163641,163643],{"class":30,"line":31},[28,163620,163296],{"class":38},[28,163622,54],{"class":34},[28,163624,52482],{"class":38},[28,163626,61],{"class":60},[28,163628,12697],{"class":38},[28,163630,211],{"class":60},[28,163632,12697],{"class":38},[28,163634,78],{"class":60},[28,163636,12697],{"class":38},[28,163638,211],{"class":60},[28,163640,12697],{"class":38},[28,163642,73],{"class":60},[28,163644,33502],{"class":38},[28,163646,163647],{"class":30,"line":48},[28,163648,2662],{"emptyLinePlaceholder":336},[28,163650,163651,163653,163656,163658],{"class":30,"line":84},[28,163652,30675],{"class":60},[28,163654,163655],{"class":38},"(numbers.index(",[28,163657,78],{"class":60},[28,163659,30757],{"class":38},[28,163661,163662,163664,163667,163669],{"class":30,"line":91},[28,163663,30675],{"class":60},[28,163665,163666],{"class":38},"(numbers.count(",[28,163668,211],{"class":60},[28,163670,30757],{"class":38},[28,163672,163673,163675,163677,163679],{"class":30,"line":97},[28,163674,30675],{"class":60},[28,163676,413],{"class":38},[28,163678,7620],{"class":60},[28,163680,163681],{"class":38},"(numbers))\n",[14,163683,163684],{},"排序：",[18,163686,163688],{"className":20,"code":163687,"language":22,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[25,163689,163690,163714,163718,163723,163730,163734,163748,163754,163758,163763],{"__ignoreMap":23},[28,163691,163692,163694,163696,163698,163700,163702,163704,163706,163708,163710,163712],{"class":30,"line":31},[28,163693,163296],{"class":38},[28,163695,54],{"class":34},[28,163697,52482],{"class":38},[28,163699,78],{"class":60},[28,163701,12697],{"class":38},[28,163703,61],{"class":60},[28,163705,12697],{"class":38},[28,163707,721],{"class":60},[28,163709,12697],{"class":38},[28,163711,211],{"class":60},[28,163713,33502],{"class":38},[28,163715,163716],{"class":30,"line":48},[28,163717,2662],{"emptyLinePlaceholder":336},[28,163719,163720],{"class":30,"line":84},[28,163721,163722],{"class":38},"numbers.sort()\n",[28,163724,163725,163727],{"class":30,"line":91},[28,163726,30675],{"class":60},[28,163728,163729],{"class":38},"(numbers)\n",[28,163731,163732],{"class":30,"line":97},[28,163733,2662],{"emptyLinePlaceholder":336},[28,163735,163736,163739,163742,163744,163746],{"class":30,"line":103},[28,163737,163738],{"class":38},"numbers.sort(",[28,163740,163741],{"class":5478},"reverse",[28,163743,54],{"class":34},[28,163745,31733],{"class":60},[28,163747,81],{"class":38},[28,163749,163750,163752],{"class":30,"line":109},[28,163751,30675],{"class":60},[28,163753,163729],{"class":38},[28,163755,163756],{"class":30,"line":118},[28,163757,2662],{"emptyLinePlaceholder":336},[28,163759,163760],{"class":30,"line":124},[28,163761,163762],{"class":38},"numbers.reverse()\n",[28,163764,163765,163767],{"class":30,"line":131},[28,163766,30675],{"class":60},[28,163768,163729],{"class":38},[14,163770,163771,163774,163775,163778],{},[25,163772,163773],{},"sort()"," 会修改原列表，",[25,163776,163777],{},"sorted()"," 返回新列表。",[18,163780,163782],{"className":20,"code":163781,"language":22,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[25,163783,163784,163808,163820,163824,163830],{"__ignoreMap":23},[28,163785,163786,163788,163790,163792,163794,163796,163798,163800,163802,163804,163806],{"class":30,"line":31},[28,163787,163296],{"class":38},[28,163789,54],{"class":34},[28,163791,52482],{"class":38},[28,163793,78],{"class":60},[28,163795,12697],{"class":38},[28,163797,61],{"class":60},[28,163799,12697],{"class":38},[28,163801,721],{"class":60},[28,163803,12697],{"class":38},[28,163805,211],{"class":60},[28,163807,33502],{"class":38},[28,163809,163810,163813,163815,163818],{"class":30,"line":48},[28,163811,163812],{"class":38},"new_numbers ",[28,163814,54],{"class":34},[28,163816,163817],{"class":60}," sorted",[28,163819,163729],{"class":38},[28,163821,163822],{"class":30,"line":84},[28,163823,2662],{"emptyLinePlaceholder":336},[28,163825,163826,163828],{"class":30,"line":91},[28,163827,30675],{"class":60},[28,163829,163729],{"class":38},[28,163831,163832,163834],{"class":30,"line":97},[28,163833,30675],{"class":60},[28,163835,163836],{"class":38},"(new_numbers)\n",[351,163838,163840],{"id":163839},"_65-列表遍历","6.5 列表遍历",[18,163842,163844],{"className":20,"code":163843,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[25,163845,163846,163866,163870,163880],{"__ignoreMap":23},[28,163847,163848,163850,163852,163854,163856,163858,163860,163862,163864],{"class":30,"line":31},[28,163849,160593],{"class":38},[28,163851,54],{"class":34},[28,163853,52482],{"class":38},[28,163855,150101],{"class":127},[28,163857,12697],{"class":38},[28,163859,151149],{"class":127},[28,163861,12697],{"class":38},[28,163863,159944],{"class":127},[28,163865,33502],{"class":38},[28,163867,163868],{"class":30,"line":48},[28,163869,2662],{"emptyLinePlaceholder":336},[28,163871,163872,163874,163876,163878],{"class":30,"line":84},[28,163873,3287],{"class":34},[28,163875,160629],{"class":38},[28,163877,26306],{"class":34},[28,163879,160634],{"class":38},[28,163881,163882,163884],{"class":30,"line":91},[28,163883,31559],{"class":60},[28,163885,150873],{"class":38},[14,163887,163888],{},"需要索引时：",[18,163890,163892],{"className":20,"code":163891,"language":22,"meta":23,"style":23},"for index, name in enumerate(names):\n    print(index, name)\n",[25,163893,163894,163908],{"__ignoreMap":23},[28,163895,163896,163898,163901,163903,163905],{"class":30,"line":31},[28,163897,3287],{"class":34},[28,163899,163900],{"class":38}," index, name ",[28,163902,26306],{"class":34},[28,163904,31863],{"class":60},[28,163906,163907],{"class":38},"(names):\n",[28,163909,163910,163912],{"class":30,"line":48},[28,163911,31559],{"class":60},[28,163913,163914],{"class":38},"(index, name)\n",[14,163916,163917],{},"统计总分：",[18,163919,163921],{"className":20,"code":163920,"language":22,"meta":23,"style":23},"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",[25,163922,163923,163948,163956,163960,163971,163979,163983,164000],{"__ignoreMap":23},[28,163924,163925,163928,163930,163932,163934,163936,163938,163940,163942,163944,163946],{"class":30,"line":31},[28,163926,163927],{"class":38},"scores ",[28,163929,54],{"class":34},[28,163931,52482],{"class":38},[28,163933,1259],{"class":60},[28,163935,12697],{"class":38},[28,163937,1134],{"class":60},[28,163939,12697],{"class":38},[28,163941,657],{"class":60},[28,163943,12697],{"class":38},[28,163945,959],{"class":60},[28,163947,33502],{"class":38},[28,163949,163950,163952,163954],{"class":30,"line":48},[28,163951,157473],{"class":38},[28,163953,54],{"class":34},[28,163955,47589],{"class":60},[28,163957,163958],{"class":30,"line":84},[28,163959,2662],{"emptyLinePlaceholder":336},[28,163961,163962,163964,163966,163968],{"class":30,"line":91},[28,163963,3287],{"class":34},[28,163965,157996],{"class":38},[28,163967,26306],{"class":34},[28,163969,163970],{"class":38}," scores:\n",[28,163972,163973,163975,163977],{"class":30,"line":97},[28,163974,159520],{"class":38},[28,163976,9739],{"class":34},[28,163978,1844],{"class":38},[28,163980,163981],{"class":30,"line":103},[28,163982,2662],{"emptyLinePlaceholder":336},[28,163984,163985,163988,163990,163993,163995,163997],{"class":30,"line":109},[28,163986,163987],{"class":38},"avg ",[28,163989,54],{"class":34},[28,163991,163992],{"class":38}," total ",[28,163994,982],{"class":34},[28,163996,7593],{"class":60},[28,163998,163999],{"class":38},"(scores)\n",[28,164001,164002,164004,164006,164008,164011,164013,164016,164018,164020,164022],{"class":30,"line":118},[28,164003,30675],{"class":60},[28,164005,413],{"class":38},[28,164007,462],{"class":34},[28,164009,164010],{"class":127},"\"平均分:",[28,164012,1293],{"class":60},[28,164014,164015],{"class":38},"avg",[28,164017,157372],{"class":34},[28,164019,1343],{"class":60},[28,164021,654],{"class":127},[28,164023,81],{"class":38},[351,164025,164027],{"id":164026},"_66-元组tuple","6.6 元组tuple",[14,164029,164030],{},"元组和列表类似，但不可修改。",[18,164032,164034],{"className":20,"code":164033,"language":22,"meta":23,"style":23},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[25,164035,164036,164053],{"__ignoreMap":23},[28,164037,164038,164041,164043,164045,164047,164049,164051],{"class":30,"line":31},[28,164039,164040],{"class":38},"point ",[28,164042,54],{"class":34},[28,164044,1920],{"class":38},[28,164046,845],{"class":60},[28,164048,12697],{"class":38},[28,164050,1098],{"class":60},[28,164052,81],{"class":38},[28,164054,164055,164057,164059,164061,164063,164065,164067,164069,164071],{"class":30,"line":48},[28,164056,116527],{"class":38},[28,164058,54],{"class":34},[28,164060,1920],{"class":38},[28,164062,150101],{"class":127},[28,164064,12697],{"class":38},[28,164066,1048],{"class":60},[28,164068,12697],{"class":38},[28,164070,69525],{"class":127},[28,164072,81],{"class":38},[14,164074,164075],{},"单元素元组必须加逗号：",[18,164077,164079],{"className":20,"code":164078,"language":22,"meta":23,"style":23},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[25,164080,164081,164095,164108,164112,164126],{"__ignoreMap":23},[28,164082,164083,164086,164088,164090,164092],{"class":30,"line":31},[28,164084,164085],{"class":38},"t1 ",[28,164087,54],{"class":34},[28,164089,1920],{"class":38},[28,164091,845],{"class":60},[28,164093,164094],{"class":38},",)\n",[28,164096,164097,164100,164102,164104,164106],{"class":30,"line":48},[28,164098,164099],{"class":38},"t2 ",[28,164101,54],{"class":34},[28,164103,1920],{"class":38},[28,164105,845],{"class":60},[28,164107,81],{"class":38},[28,164109,164110],{"class":30,"line":84},[28,164111,2662],{"emptyLinePlaceholder":336},[28,164113,164114,164116,164118,164120,164123],{"class":30,"line":91},[28,164115,30675],{"class":60},[28,164117,413],{"class":38},[28,164119,103320],{"class":60},[28,164121,164122],{"class":38},"(t1))  ",[28,164124,164125],{"class":87},"# tuple\n",[28,164127,164128,164130,164132,164134,164137],{"class":30,"line":97},[28,164129,30675],{"class":60},[28,164131,413],{"class":38},[28,164133,103320],{"class":60},[28,164135,164136],{"class":38},"(t2))  ",[28,164138,164139],{"class":87},"# int\n",[14,164141,164142],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[351,164144,164146],{"id":164145},"_67-字符串str","6.7 字符串str",[14,164148,164149],{},"字符串也是序列，可以索引、切片和遍历。",[18,164151,164153],{"className":20,"code":164152,"language":22,"meta":23,"style":23},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[25,164154,164155,164163,164167,164178,164190,164194,164205],{"__ignoreMap":23},[28,164156,164157,164159,164161],{"class":30,"line":31},[28,164158,156657],{"class":38},[28,164160,54],{"class":34},[28,164162,159894],{"class":127},[28,164164,164165],{"class":30,"line":48},[28,164166,2662],{"emptyLinePlaceholder":336},[28,164168,164169,164171,164174,164176],{"class":30,"line":84},[28,164170,30675],{"class":60},[28,164172,164173],{"class":38},"(text[",[28,164175,244],{"class":60},[28,164177,4919],{"class":38},[28,164179,164180,164182,164184,164186,164188],{"class":30,"line":91},[28,164181,30675],{"class":60},[28,164183,164173],{"class":38},[28,164185,930],{"class":34},[28,164187,61],{"class":60},[28,164189,4919],{"class":38},[28,164191,164192],{"class":30,"line":97},[28,164193,2662],{"emptyLinePlaceholder":336},[28,164195,164196,164198,164200,164202],{"class":30,"line":103},[28,164197,3287],{"class":34},[28,164199,159905],{"class":38},[28,164201,26306],{"class":34},[28,164203,164204],{"class":38}," text:\n",[28,164206,164207,164209],{"class":30,"line":109},[28,164208,31559],{"class":60},[28,164210,159916],{"class":38},[14,164212,164213],{},"字符串不可变：",[18,164215,164217],{"className":20,"code":164216,"language":22,"meta":23,"style":23},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[25,164218,164219,164227],{"__ignoreMap":23},[28,164220,164221,164223,164225],{"class":30,"line":31},[28,164222,156657],{"class":38},[28,164224,54],{"class":34},[28,164226,159894],{"class":127},[28,164228,164229,164232,164234,164236,164238,164241],{"class":30,"line":48},[28,164230,164231],{"class":38},"text[",[28,164233,244],{"class":60},[28,164235,4705],{"class":38},[28,164237,54],{"class":34},[28,164239,164240],{"class":127}," \"P\"",[28,164242,164243],{"class":87},"  # 报错\n",[14,164245,164246],{},"如果要得到新字符串：",[18,164248,164250],{"className":20,"code":164249,"language":22,"meta":23,"style":23},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[25,164251,164252,164260,164278],{"__ignoreMap":23},[28,164253,164254,164256,164258],{"class":30,"line":31},[28,164255,156657],{"class":38},[28,164257,54],{"class":34},[28,164259,159894],{"class":127},[28,164261,164262,164264,164266,164268,164270,164273,164275],{"class":30,"line":48},[28,164263,156657],{"class":38},[28,164265,54],{"class":34},[28,164267,164240],{"class":127},[28,164269,45822],{"class":34},[28,164271,164272],{"class":38}," text[",[28,164274,61],{"class":60},[28,164276,164277],{"class":38},":]\n",[28,164279,164280,164282],{"class":30,"line":84},[28,164281,30675],{"class":60},[28,164283,164284],{"class":38},"(text)\n",[351,164286,164288],{"id":164287},"_68-切片","6.8 切片",[14,164290,164291],{},"切片用于从序列中取一部分。",[18,164293,164295],{"className":20,"code":164294,"language":22,"meta":23,"style":23},"序列[开始:结束:步长]\n",[25,164296,164297],{"__ignoreMap":23},[28,164298,164299],{"class":30,"line":31},[28,164300,164294],{"class":38},[14,164302,164303],{},"结束位置不包含。",[18,164305,164307],{"className":20,"code":164306,"language":22,"meta":23,"style":23},"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",[25,164308,164309,164346,164350,164369,164384,164398,164412],{"__ignoreMap":23},[28,164310,164311,164314,164316,164318,164320,164322,164324,164326,164328,164330,164332,164334,164336,164338,164340,164342,164344],{"class":30,"line":31},[28,164312,164313],{"class":38},"nums ",[28,164315,54],{"class":34},[28,164317,52482],{"class":38},[28,164319,244],{"class":60},[28,164321,12697],{"class":38},[28,164323,61],{"class":60},[28,164325,12697],{"class":38},[28,164327,211],{"class":60},[28,164329,12697],{"class":38},[28,164331,78],{"class":60},[28,164333,12697],{"class":38},[28,164335,73],{"class":60},[28,164337,12697],{"class":38},[28,164339,721],{"class":60},[28,164341,12697],{"class":38},[28,164343,206],{"class":60},[28,164345,33502],{"class":38},[28,164347,164348],{"class":30,"line":48},[28,164349,2662],{"emptyLinePlaceholder":336},[28,164351,164352,164354,164357,164359,164361,164363,164366],{"class":30,"line":84},[28,164353,30675],{"class":60},[28,164355,164356],{"class":38},"(nums[",[28,164358,61],{"class":60},[28,164360,1256],{"class":38},[28,164362,73],{"class":60},[28,164364,164365],{"class":38},"])    ",[28,164367,164368],{"class":87},"# [1, 2, 3]\n",[28,164370,164371,164373,164376,164378,164381],{"class":30,"line":91},[28,164372,30675],{"class":60},[28,164374,164375],{"class":38},"(nums[:",[28,164377,78],{"class":60},[28,164379,164380],{"class":38},"])     ",[28,164382,164383],{"class":87},"# [0, 1, 2]\n",[28,164385,164386,164388,164390,164392,164395],{"class":30,"line":97},[28,164387,30675],{"class":60},[28,164389,164356],{"class":38},[28,164391,78],{"class":60},[28,164393,164394],{"class":38},":])     ",[28,164396,164397],{"class":87},"# [3, 4, 5, 6]\n",[28,164399,164400,164402,164405,164407,164409],{"class":30,"line":103},[28,164401,30675],{"class":60},[28,164403,164404],{"class":38},"(nums[::",[28,164406,211],{"class":60},[28,164408,164365],{"class":38},[28,164410,164411],{"class":87},"# [0, 2, 4, 6]\n",[28,164413,164414,164416,164418,164420,164422,164425],{"class":30,"line":109},[28,164415,30675],{"class":60},[28,164417,164404],{"class":38},[28,164419,930],{"class":34},[28,164421,61],{"class":60},[28,164423,164424],{"class":38},"])   ",[28,164426,164427],{"class":87},"# 反转\n",[14,164429,164430],{},"字符串切片：",[18,164432,164434],{"className":20,"code":164433,"language":22,"meta":23,"style":23},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[25,164435,164436,164445,164459],{"__ignoreMap":23},[28,164437,164438,164440,164442],{"class":30,"line":31},[28,164439,156657],{"class":38},[28,164441,54],{"class":34},[28,164443,164444],{"class":127}," \"abcdef\"\n",[28,164446,164447,164449,164451,164453,164455,164457],{"class":30,"line":48},[28,164448,30675],{"class":60},[28,164450,164173],{"class":38},[28,164452,61],{"class":60},[28,164454,1256],{"class":38},[28,164456,73],{"class":60},[28,164458,4919],{"class":38},[28,164460,164461,164463,164466,164468,164470],{"class":30,"line":84},[28,164462,30675],{"class":60},[28,164464,164465],{"class":38},"(text[::",[28,164467,930],{"class":34},[28,164469,61],{"class":60},[28,164471,4919],{"class":38},[351,164473,164475],{"id":164474},"_69-集合set","6.9 集合set",[14,164477,164478],{},"集合特点：",[363,164480,164481,164484,164487],{},[366,164482,164483],{},"无序。",[366,164485,164486],{},"元素不重复。",[366,164488,164489],{},"可以做交集、并集、差集。",[18,164491,164493],{"className":20,"code":164492,"language":22,"meta":23,"style":23},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[25,164494,164495,164523],{"__ignoreMap":23},[28,164496,164497,164499,164501,164503,164505,164507,164509,164511,164513,164515,164517,164519,164521],{"class":30,"line":31},[28,164498,164313],{"class":38},[28,164500,54],{"class":34},[28,164502,4710],{"class":38},[28,164504,61],{"class":60},[28,164506,12697],{"class":38},[28,164508,211],{"class":60},[28,164510,12697],{"class":38},[28,164512,78],{"class":60},[28,164514,12697],{"class":38},[28,164516,78],{"class":60},[28,164518,12697],{"class":38},[28,164520,73],{"class":60},[28,164522,1830],{"class":38},[28,164524,164525,164527],{"class":30,"line":48},[28,164526,30675],{"class":60},[28,164528,164529],{"class":38},"(nums)\n",[14,164531,164532],{},"创建空集合：",[18,164534,164536],{"className":20,"code":164535,"language":22,"meta":23,"style":23},"s = set()\n",[25,164537,164538],{"__ignoreMap":23},[28,164539,164540,164542,164544,164546],{"class":30,"line":31},[28,164541,10841],{"class":38},[28,164543,54],{"class":34},[28,164545,119935],{"class":60},[28,164547,2238],{"class":38},[14,164549,9287,164550,164552],{},[25,164551,32715],{}," 是空字典，不是空集合。",[14,164554,164555],{},"集合常用操作：",[18,164557,164559],{"className":20,"code":164558,"language":22,"meta":23,"style":23},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[25,164560,164561,164581,164585,164594,164603,164612],{"__ignoreMap":23},[28,164562,164563,164565,164567,164569,164571,164573,164575,164577,164579],{"class":30,"line":31},[28,164564,10841],{"class":38},[28,164566,54],{"class":34},[28,164568,4710],{"class":38},[28,164570,61],{"class":60},[28,164572,12697],{"class":38},[28,164574,211],{"class":60},[28,164576,12697],{"class":38},[28,164578,78],{"class":60},[28,164580,1830],{"class":38},[28,164582,164583],{"class":30,"line":48},[28,164584,2662],{"emptyLinePlaceholder":336},[28,164586,164587,164590,164592],{"class":30,"line":84},[28,164588,164589],{"class":38},"s.add(",[28,164591,73],{"class":60},[28,164593,81],{"class":38},[28,164595,164596,164599,164601],{"class":30,"line":91},[28,164597,164598],{"class":38},"s.remove(",[28,164600,211],{"class":60},[28,164602,81],{"class":38},[28,164604,164605,164608,164610],{"class":30,"line":97},[28,164606,164607],{"class":38},"s.discard(",[28,164609,845],{"class":60},[28,164611,81],{"class":38},[28,164613,164614,164616,164618,164620],{"class":30,"line":103},[28,164615,30675],{"class":60},[28,164617,413],{"class":38},[28,164619,7620],{"class":60},[28,164621,164622],{"class":38},"(s))\n",[14,164624,164625],{},"交并差：",[18,164627,164629],{"className":20,"code":164628,"language":22,"meta":23,"style":23},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[25,164630,164631,164651,164671,164675,164690,164703],{"__ignoreMap":23},[28,164632,164633,164635,164637,164639,164641,164643,164645,164647,164649],{"class":30,"line":31},[28,164634,11181],{"class":38},[28,164636,54],{"class":34},[28,164638,4710],{"class":38},[28,164640,61],{"class":60},[28,164642,12697],{"class":38},[28,164644,211],{"class":60},[28,164646,12697],{"class":38},[28,164648,78],{"class":60},[28,164650,1830],{"class":38},[28,164652,164653,164655,164657,164659,164661,164663,164665,164667,164669],{"class":30,"line":48},[28,164654,11207],{"class":38},[28,164656,54],{"class":34},[28,164658,4710],{"class":38},[28,164660,78],{"class":60},[28,164662,12697],{"class":38},[28,164664,73],{"class":60},[28,164666,12697],{"class":38},[28,164668,721],{"class":60},[28,164670,1830],{"class":38},[28,164672,164673],{"class":30,"line":84},[28,164674,2662],{"emptyLinePlaceholder":336},[28,164676,164677,164679,164682,164684,164687],{"class":30,"line":91},[28,164678,30675],{"class":60},[28,164680,164681],{"class":38},"(a ",[28,164683,753],{"class":34},[28,164685,164686],{"class":38}," b)  ",[28,164688,164689],{"class":87},"# 交集\n",[28,164691,164692,164694,164696,164698,164700],{"class":30,"line":97},[28,164693,30675],{"class":60},[28,164695,164681],{"class":38},[28,164697,1318],{"class":34},[28,164699,164686],{"class":38},[28,164701,164702],{"class":87},"# 并集\n",[28,164704,164705,164707,164709,164711,164713],{"class":30,"line":103},[28,164706,30675],{"class":60},[28,164708,164681],{"class":38},[28,164710,930],{"class":34},[28,164712,164686],{"class":38},[28,164714,164715],{"class":87},"# 差集\n",[351,164717,164719],{"id":164718},"_610-字典dict","6.10 字典dict",[14,164721,164722],{},"字典通过 key-value 保存数据。",[18,164724,164726],{"className":20,"code":164725,"language":22,"meta":23,"style":23},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[25,164727,164728,164736,164746,164757,164767],{"__ignoreMap":23},[28,164729,164730,164732,164734],{"class":30,"line":31},[28,164731,149694],{"class":38},[28,164733,54],{"class":34},[28,164735,15834],{"class":38},[28,164737,164738,164740,164742,164744],{"class":30,"line":48},[28,164739,147233],{"class":127},[28,164741,51693],{"class":38},[28,164743,150101],{"class":127},[28,164745,31723],{"class":38},[28,164747,164748,164751,164753,164755],{"class":30,"line":84},[28,164749,164750],{"class":127},"    \"age\"",[28,164752,51693],{"class":38},[28,164754,1048],{"class":60},[28,164756,31723],{"class":38},[28,164758,164759,164762,164764],{"class":30,"line":91},[28,164760,164761],{"class":127},"    \"score\"",[28,164763,51693],{"class":38},[28,164765,164766],{"class":60},"95\n",[28,164768,164769],{"class":30,"line":97},[28,164770,1830],{"class":38},[14,164772,164773],{},"获取值：",[18,164775,164777],{"className":20,"code":164776,"language":22,"meta":23,"style":23},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[25,164778,164779,164790],{"__ignoreMap":23},[28,164780,164781,164783,164786,164788],{"class":30,"line":31},[28,164782,30675],{"class":60},[28,164784,164785],{"class":38},"(student[",[28,164787,62935],{"class":127},[28,164789,4919],{"class":38},[28,164791,164792,164794,164797,164799],{"class":30,"line":48},[28,164793,30675],{"class":60},[28,164795,164796],{"class":38},"(student.get(",[28,164798,62935],{"class":127},[28,164800,30757],{"class":38},[14,164802,15650],{},[18,164804,164806],{"className":20,"code":164805,"language":22,"meta":23,"style":23},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[25,164807,164808,164821],{"__ignoreMap":23},[28,164809,164810,164812,164815,164818],{"class":30,"line":31},[28,164811,153072],{"class":38},[28,164813,164814],{"class":127},"\"address\"",[28,164816,164817],{"class":38},"]     ",[28,164819,164820],{"class":87},"# key不存在会报错\n",[28,164822,164823,164826,164828,164830],{"class":30,"line":48},[28,164824,164825],{"class":38},"student.get(",[28,164827,164814],{"class":127},[28,164829,13976],{"class":38},[28,164831,164832],{"class":87},"# key不存在返回None\n",[14,164834,164835],{},"设置默认值：",[18,164837,164839],{"className":20,"code":164838,"language":22,"meta":23,"style":23},"print(student.get(\"address\", \"未知\"))\n",[25,164840,164841],{"__ignoreMap":23},[28,164842,164843,164845,164847,164849,164851,164854],{"class":30,"line":31},[28,164844,30675],{"class":60},[28,164846,164796],{"class":38},[28,164848,164814],{"class":127},[28,164850,12697],{"class":38},[28,164852,164853],{"class":127},"\"未知\"",[28,164855,30757],{"class":38},[14,164857,164858],{},"新增和修改：",[18,164860,164862],{"className":20,"code":164861,"language":22,"meta":23,"style":23},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[25,164863,164864,164877],{"__ignoreMap":23},[28,164865,164866,164868,164870,164872,164874],{"class":30,"line":31},[28,164867,153072],{"class":38},[28,164869,69380],{"class":127},[28,164871,4705],{"class":38},[28,164873,54],{"class":34},[28,164875,164876],{"class":60}," 19\n",[28,164878,164879,164881,164883,164885,164887],{"class":30,"line":48},[28,164880,153072],{"class":38},[28,164882,164814],{"class":127},[28,164884,4705],{"class":38},[28,164886,54],{"class":34},[28,164888,164889],{"class":127}," \"北京\"\n",[14,164891,164892],{},"删除：",[18,164894,164896],{"className":20,"code":164895,"language":22,"meta":23,"style":23},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[25,164897,164898,164911,164921],{"__ignoreMap":23},[28,164899,164900,164902,164904,164907,164909],{"class":30,"line":31},[28,164901,155571],{"class":38},[28,164903,54],{"class":34},[28,164905,164906],{"class":38}," student.pop(",[28,164908,151685],{"class":127},[28,164910,81],{"class":38},[28,164912,164913,164915,164917,164919],{"class":30,"line":48},[28,164914,163596],{"class":34},[28,164916,152362],{"class":38},[28,164918,69380],{"class":127},[28,164920,33502],{"class":38},[28,164922,164923],{"class":30,"line":84},[28,164924,164925],{"class":38},"student.clear()\n",[351,164927,164929],{"id":164928},"_611-字典遍历","6.11 字典遍历",[14,164931,164932],{},"遍历 key：",[18,164934,164936],{"className":20,"code":164935,"language":22,"meta":23,"style":23},"for key in student:\n    print(key, student[key])\n",[25,164937,164938,164950],{"__ignoreMap":23},[28,164939,164940,164942,164945,164947],{"class":30,"line":31},[28,164941,3287],{"class":34},[28,164943,164944],{"class":38}," key ",[28,164946,26306],{"class":34},[28,164948,164949],{"class":38}," student:\n",[28,164951,164952,164954],{"class":30,"line":48},[28,164953,31559],{"class":60},[28,164955,164956],{"class":38},"(key, student[key])\n",[14,164958,164959],{},"遍历 value：",[18,164961,164963],{"className":20,"code":164962,"language":22,"meta":23,"style":23},"for value in student.values():\n    print(value)\n",[25,164964,164965,164977],{"__ignoreMap":23},[28,164966,164967,164969,164972,164974],{"class":30,"line":31},[28,164968,3287],{"class":34},[28,164970,164971],{"class":38}," value ",[28,164973,26306],{"class":34},[28,164975,164976],{"class":38}," student.values():\n",[28,164978,164979,164981],{"class":30,"line":48},[28,164980,31559],{"class":60},[28,164982,164983],{"class":38},"(value)\n",[14,164985,164986],{},"遍历 key 和 value：",[18,164988,164990],{"className":20,"code":164989,"language":22,"meta":23,"style":23},"for key, value in student.items():\n    print(key, value)\n",[25,164991,164992,165004],{"__ignoreMap":23},[28,164993,164994,164996,164999,165001],{"class":30,"line":31},[28,164995,3287],{"class":34},[28,164997,164998],{"class":38}," key, value ",[28,165000,26306],{"class":34},[28,165002,165003],{"class":38}," student.items():\n",[28,165005,165006,165008],{"class":30,"line":48},[28,165007,31559],{"class":60},[28,165009,165010],{"class":38},"(key, value)\n",[351,165012,165014],{"id":165013},"_612-嵌套容器","6.12 嵌套容器",[14,165016,165017],{},"列表中保存字典，是项目中最常见的结构之一。",[18,165019,165021],{"className":20,"code":165020,"language":22,"meta":23,"style":23},"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",[25,165022,165023,165031,165059,165087,165115,165119,165123,165133],{"__ignoreMap":23},[28,165024,165025,165027,165029],{"class":30,"line":31},[28,165026,159929],{"class":38},[28,165028,54],{"class":34},[28,165030,55703],{"class":38},[28,165032,165033,165035,165037,165039,165041,165043,165045,165047,165049,165051,165053,165055,165057],{"class":30,"line":48},[28,165034,148598],{"class":38},[28,165036,62935],{"class":127},[28,165038,51693],{"class":38},[28,165040,150101],{"class":127},[28,165042,12697],{"class":38},[28,165044,69380],{"class":127},[28,165046,51693],{"class":38},[28,165048,1048],{"class":60},[28,165050,12697],{"class":38},[28,165052,151685],{"class":127},[28,165054,51693],{"class":38},[28,165056,1386],{"class":60},[28,165058,5192],{"class":38},[28,165060,165061,165063,165065,165067,165069,165071,165073,165075,165077,165079,165081,165083,165085],{"class":30,"line":84},[28,165062,148598],{"class":38},[28,165064,62935],{"class":127},[28,165066,51693],{"class":38},[28,165068,151149],{"class":127},[28,165070,12697],{"class":38},[28,165072,69380],{"class":127},[28,165074,51693],{"class":38},[28,165076,1023],{"class":60},[28,165078,12697],{"class":38},[28,165080,151685],{"class":127},[28,165082,51693],{"class":38},[28,165084,1209],{"class":60},[28,165086,5192],{"class":38},[28,165088,165089,165091,165093,165095,165097,165099,165101,165103,165105,165107,165109,165111,165113],{"class":30,"line":91},[28,165090,148598],{"class":38},[28,165092,62935],{"class":127},[28,165094,51693],{"class":38},[28,165096,159944],{"class":127},[28,165098,12697],{"class":38},[28,165100,69380],{"class":127},[28,165102,51693],{"class":38},[28,165104,1073],{"class":60},[28,165106,12697],{"class":38},[28,165108,151685],{"class":127},[28,165110,51693],{"class":38},[28,165112,805],{"class":60},[28,165114,5192],{"class":38},[28,165116,165117],{"class":30,"line":97},[28,165118,33502],{"class":38},[28,165120,165121],{"class":30,"line":103},[28,165122,2662],{"emptyLinePlaceholder":336},[28,165124,165125,165127,165129,165131],{"class":30,"line":109},[28,165126,3287],{"class":34},[28,165128,152350],{"class":38},[28,165130,26306],{"class":34},[28,165132,152355],{"class":38},[28,165134,165135,165137,165139,165141,165144,165146],{"class":30,"line":118},[28,165136,31559],{"class":60},[28,165138,164785],{"class":38},[28,165140,62935],{"class":127},[28,165142,165143],{"class":38},"], student[",[28,165145,151685],{"class":127},[28,165147,4919],{"class":38},[14,165149,165150],{},"统计平均分：",[18,165152,165154],{"className":20,"code":165153,"language":22,"meta":23,"style":23},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[25,165155,165156,165164,165168,165178,165190,165194,165209],{"__ignoreMap":23},[28,165157,165158,165160,165162],{"class":30,"line":31},[28,165159,157473],{"class":38},[28,165161,54],{"class":34},[28,165163,47589],{"class":60},[28,165165,165166],{"class":30,"line":48},[28,165167,2662],{"emptyLinePlaceholder":336},[28,165169,165170,165172,165174,165176],{"class":30,"line":84},[28,165171,3287],{"class":34},[28,165173,152350],{"class":38},[28,165175,26306],{"class":34},[28,165177,152355],{"class":38},[28,165179,165180,165182,165184,165186,165188],{"class":30,"line":91},[28,165181,159520],{"class":38},[28,165183,9739],{"class":34},[28,165185,152362],{"class":38},[28,165187,151685],{"class":127},[28,165189,33502],{"class":38},[28,165191,165192],{"class":30,"line":97},[28,165193,2662],{"emptyLinePlaceholder":336},[28,165195,165196,165198,165200,165202,165204,165206],{"class":30,"line":103},[28,165197,163987],{"class":38},[28,165199,54],{"class":34},[28,165201,163992],{"class":38},[28,165203,982],{"class":34},[28,165205,7593],{"class":60},[28,165207,165208],{"class":38},"(students)\n",[28,165210,165211,165213,165215,165217,165219,165221,165223,165225,165227,165229],{"class":30,"line":109},[28,165212,30675],{"class":60},[28,165214,413],{"class":38},[28,165216,462],{"class":34},[28,165218,164010],{"class":127},[28,165220,1293],{"class":60},[28,165222,164015],{"class":38},[28,165224,157372],{"class":34},[28,165226,1343],{"class":60},[28,165228,654],{"class":127},[28,165230,81],{"class":38},[14,165232,165233],{},"查找学生：",[18,165235,165237],{"className":20,"code":165236,"language":22,"meta":23,"style":23},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[25,165238,165239,165254,165258,165268,165282,165288,165292,165298],{"__ignoreMap":23},[28,165240,165241,165243,165245,165247,165249,165252],{"class":30,"line":31},[28,165242,111791],{"class":38},[28,165244,54],{"class":34},[28,165246,60861],{"class":60},[28,165248,413],{"class":38},[28,165250,165251],{"class":127},"\"请输入学生姓名:\"",[28,165253,81],{"class":38},[28,165255,165256],{"class":30,"line":48},[28,165257,2662],{"emptyLinePlaceholder":336},[28,165259,165260,165262,165264,165266],{"class":30,"line":84},[28,165261,3287],{"class":34},[28,165263,152350],{"class":38},[28,165265,26306],{"class":34},[28,165267,152355],{"class":38},[28,165269,165270,165272,165274,165276,165278,165280],{"class":30,"line":91},[28,165271,3363],{"class":34},[28,165273,152362],{"class":38},[28,165275,62935],{"class":127},[28,165277,4705],{"class":38},[28,165279,3211],{"class":34},[28,165281,160645],{"class":38},[28,165283,165284,165286],{"class":30,"line":97},[28,165285,32707],{"class":60},[28,165287,150255],{"class":38},[28,165289,165290],{"class":30,"line":103},[28,165291,31884],{"class":34},[28,165293,165294,165296],{"class":30,"line":109},[28,165295,1963],{"class":34},[28,165297,4001],{"class":38},[28,165299,165300,165302,165304,165307],{"class":30,"line":118},[28,165301,31559],{"class":60},[28,165303,413],{"class":38},[28,165305,165306],{"class":127},"\"没有找到\"",[28,165308,81],{"class":38},[351,165310,165312],{"id":165311},"_613-容器通用操作","6.13 容器通用操作",[14,165314,165315],{},"长度：",[18,165317,165319],{"className":20,"code":165318,"language":22,"meta":23,"style":23},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[25,165320,165321,165340,165350],{"__ignoreMap":23},[28,165322,165323,165325,165328,165330,165332,165334,165336,165338],{"class":30,"line":31},[28,165324,7620],{"class":60},[28,165326,165327],{"class":38},"([",[28,165329,61],{"class":60},[28,165331,12697],{"class":38},[28,165333,211],{"class":60},[28,165335,12697],{"class":38},[28,165337,78],{"class":60},[28,165339,4919],{"class":38},[28,165341,165342,165344,165346,165348],{"class":30,"line":48},[28,165343,7620],{"class":60},[28,165345,413],{"class":38},[28,165347,156093],{"class":127},[28,165349,81],{"class":38},[28,165351,165352,165354,165357,165359,165361,165363],{"class":30,"line":84},[28,165353,7620],{"class":60},[28,165355,165356],{"class":38},"({",[28,165358,62935],{"class":127},[28,165360,51693],{"class":38},[28,165362,150101],{"class":127},[28,165364,165365],{"class":38},"})\n",[14,165367,165368],{},"最大最小：",[18,165370,165372],{"className":20,"code":165371,"language":22,"meta":23,"style":23},"max([1, 2, 3])\nmin([1, 2, 3])\n",[25,165373,165374,165392],{"__ignoreMap":23},[28,165375,165376,165378,165380,165382,165384,165386,165388,165390],{"class":30,"line":31},[28,165377,6277],{"class":60},[28,165379,165327],{"class":38},[28,165381,61],{"class":60},[28,165383,12697],{"class":38},[28,165385,211],{"class":60},[28,165387,12697],{"class":38},[28,165389,78],{"class":60},[28,165391,4919],{"class":38},[28,165393,165394,165397,165399,165401,165403,165405,165407,165409],{"class":30,"line":48},[28,165395,165396],{"class":60},"min",[28,165398,165327],{"class":38},[28,165400,61],{"class":60},[28,165402,12697],{"class":38},[28,165404,211],{"class":60},[28,165406,12697],{"class":38},[28,165408,78],{"class":60},[28,165410,4919],{"class":38},[14,165412,165413],{},"求和：",[18,165415,165417],{"className":20,"code":165416,"language":22,"meta":23,"style":23},"sum([1, 2, 3])\n",[25,165418,165419],{"__ignoreMap":23},[28,165420,165421,165424,165426,165428,165430,165432,165434,165436],{"class":30,"line":31},[28,165422,165423],{"class":60},"sum",[28,165425,165327],{"class":38},[28,165427,61],{"class":60},[28,165429,12697],{"class":38},[28,165431,211],{"class":60},[28,165433,12697],{"class":38},[28,165435,78],{"class":60},[28,165437,4919],{"class":38},[14,165439,163684],{},[18,165441,165443],{"className":20,"code":165442,"language":22,"meta":23,"style":23},"sorted([3, 1, 2])\n",[25,165444,165445],{"__ignoreMap":23},[28,165446,165447,165450,165452,165454,165456,165458,165460,165462],{"class":30,"line":31},[28,165448,165449],{"class":60},"sorted",[28,165451,165327],{"class":38},[28,165453,78],{"class":60},[28,165455,12697],{"class":38},[28,165457,61],{"class":60},[28,165459,12697],{"class":38},[28,165461,211],{"class":60},[28,165463,4919],{"class":38},[14,165465,165466],{},"类型转换：",[18,165468,165470],{"className":20,"code":165469,"language":22,"meta":23,"style":23},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[25,165471,165472,165482,165500],{"__ignoreMap":23},[28,165473,165474,165476,165478,165480],{"class":30,"line":31},[28,165475,154283],{"class":60},[28,165477,413],{"class":38},[28,165479,156093],{"class":127},[28,165481,81],{"class":38},[28,165483,165484,165486,165488,165490,165492,165494,165496,165498],{"class":30,"line":48},[28,165485,155478],{"class":60},[28,165487,165327],{"class":38},[28,165489,61],{"class":60},[28,165491,12697],{"class":38},[28,165493,211],{"class":60},[28,165495,12697],{"class":38},[28,165497,78],{"class":60},[28,165499,4919],{"class":38},[28,165501,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520],{"class":30,"line":84},[28,165503,155503],{"class":60},[28,165505,165327],{"class":38},[28,165507,61],{"class":60},[28,165509,12697],{"class":38},[28,165511,61],{"class":60},[28,165513,12697],{"class":38},[28,165515,211],{"class":60},[28,165517,12697],{"class":38},[28,165519,78],{"class":60},[28,165521,4919],{"class":38},[14,165523,165524],{},"成员判断：",[18,165526,165528],{"className":20,"code":165527,"language":22,"meta":23,"style":23},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[25,165529,165530,165547,165571],{"__ignoreMap":23},[28,165531,165532,165534,165536,165539,165542,165545],{"class":30,"line":31},[28,165533,30675],{"class":60},[28,165535,413],{"class":38},[28,165537,165538],{"class":127},"\"a\"",[28,165540,165541],{"class":34}," in",[28,165543,165544],{"class":127}," \"abc\"",[28,165546,81],{"class":38},[28,165548,165549,165551,165553,165555,165557,165559,165561,165563,165565,165567,165569],{"class":30,"line":48},[28,165550,30675],{"class":60},[28,165552,413],{"class":38},[28,165554,61],{"class":60},[28,165556,165541],{"class":34},[28,165558,52482],{"class":38},[28,165560,61],{"class":60},[28,165562,12697],{"class":38},[28,165564,211],{"class":60},[28,165566,12697],{"class":38},[28,165568,78],{"class":60},[28,165570,4919],{"class":38},[28,165572,165573,165575,165577,165579,165581,165583,165585,165587,165589],{"class":30,"line":84},[28,165574,30675],{"class":60},[28,165576,413],{"class":38},[28,165578,62935],{"class":127},[28,165580,165541],{"class":34},[28,165582,4710],{"class":38},[28,165584,62935],{"class":127},[28,165586,51693],{"class":38},[28,165588,150101],{"class":127},[28,165590,165365],{"class":38},[351,165592,165594],{"id":165593},"_614-推导式","6.14 推导式",[14,165596,165597],{},"推导式用于快速生成容器。",[14,165599,165600],{},"列表推导式：",[18,165602,165604],{"className":20,"code":165603,"language":22,"meta":23,"style":23},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[25,165605,165606,165633],{"__ignoreMap":23},[28,165607,165608,165610,165612,165615,165617,165619,165621,165623,165625,165627,165629,165631],{"class":30,"line":31},[28,165609,164313],{"class":38},[28,165611,54],{"class":34},[28,165613,165614],{"class":38}," [i ",[28,165616,3287],{"class":34},[28,165618,9700],{"class":38},[28,165620,26306],{"class":34},[28,165622,32699],{"class":60},[28,165624,413],{"class":38},[28,165626,61],{"class":60},[28,165628,12697],{"class":38},[28,165630,206],{"class":60},[28,165632,97552],{"class":38},[28,165634,165635,165637],{"class":30,"line":48},[28,165636,30675],{"class":60},[28,165638,164529],{"class":38},[14,165640,165641],{},"带条件：",[18,165643,165645],{"className":20,"code":165644,"language":22,"meta":23,"style":23},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[25,165646,165647,165688],{"__ignoreMap":23},[28,165648,165649,165652,165654,165656,165658,165660,165662,165664,165666,165668,165670,165672,165674,165676,165678,165680,165682,165684,165686],{"class":30,"line":31},[28,165650,165651],{"class":38},"even_nums ",[28,165653,54],{"class":34},[28,165655,165614],{"class":38},[28,165657,3287],{"class":34},[28,165659,9700],{"class":38},[28,165661,26306],{"class":34},[28,165663,32699],{"class":60},[28,165665,413],{"class":38},[28,165667,61],{"class":60},[28,165669,12697],{"class":38},[28,165671,738],{"class":60},[28,165673,13976],{"class":38},[28,165675,1796],{"class":34},[28,165677,9700],{"class":38},[28,165679,729],{"class":34},[28,165681,15017],{"class":60},[28,165683,101772],{"class":34},[28,165685,4355],{"class":60},[28,165687,33502],{"class":38},[28,165689,165690,165692],{"class":30,"line":48},[28,165691,30675],{"class":60},[28,165693,165694],{"class":38},"(even_nums)\n",[14,165696,165697],{},"字典推导式：",[18,165699,165701],{"className":20,"code":165700,"language":22,"meta":23,"style":23},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[25,165702,165703,165737],{"__ignoreMap":23},[28,165704,165705,165708,165710,165713,165715,165717,165720,165722,165724,165726,165728,165730,165732,165734],{"class":30,"line":31},[28,165706,165707],{"class":38},"squares ",[28,165709,54],{"class":34},[28,165711,165712],{"class":38}," {i: i ",[28,165714,10923],{"class":34},[28,165716,15017],{"class":60},[28,165718,165719],{"class":34}," for",[28,165721,9700],{"class":38},[28,165723,26306],{"class":34},[28,165725,32699],{"class":60},[28,165727,413],{"class":38},[28,165729,61],{"class":60},[28,165731,12697],{"class":38},[28,165733,206],{"class":60},[28,165735,165736],{"class":38},")}\n",[28,165738,165739,165741],{"class":30,"line":48},[28,165740,30675],{"class":60},[28,165742,165743],{"class":38},"(squares)\n",[14,165745,165746],{},"集合推导式：",[18,165748,165750],{"className":20,"code":165749,"language":22,"meta":23,"style":23},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[25,165751,165752,165773],{"__ignoreMap":23},[28,165753,165754,165757,165759,165762,165764,165766,165768,165771],{"class":30,"line":31},[28,165755,165756],{"class":38},"chars ",[28,165758,54],{"class":34},[28,165760,165761],{"class":38}," {ch ",[28,165763,3287],{"class":34},[28,165765,159905],{"class":38},[28,165767,26306],{"class":34},[28,165769,165770],{"class":127}," \"hello\"",[28,165772,1830],{"class":38},[28,165774,165775,165777],{"class":30,"line":48},[28,165776,30675],{"class":60},[28,165778,165779],{"class":38},"(chars)\n",[14,165781,165782],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[351,165784,165786],{"id":165785},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[18,165788,165790],{"className":20,"code":165789,"language":22,"meta":23,"style":23},"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",[25,165791,165792,165800,165820,165840,165860,165880,165884,165888,165896,165910,165919,165923,165933,165945,165949,165969,165978,165982,165998,166003,166007,166021,166025,166047,166083],{"__ignoreMap":23},[28,165793,165794,165796,165798],{"class":30,"line":31},[28,165795,159929],{"class":38},[28,165797,54],{"class":34},[28,165799,55703],{"class":38},[28,165801,165802,165804,165806,165808,165810,165812,165814,165816,165818],{"class":30,"line":48},[28,165803,148598],{"class":38},[28,165805,62935],{"class":127},[28,165807,51693],{"class":38},[28,165809,150101],{"class":127},[28,165811,12697],{"class":38},[28,165813,151685],{"class":127},[28,165815,51693],{"class":38},[28,165817,1386],{"class":60},[28,165819,5192],{"class":38},[28,165821,165822,165824,165826,165828,165830,165832,165834,165836,165838],{"class":30,"line":84},[28,165823,148598],{"class":38},[28,165825,62935],{"class":127},[28,165827,51693],{"class":38},[28,165829,151149],{"class":127},[28,165831,12697],{"class":38},[28,165833,151685],{"class":127},[28,165835,51693],{"class":38},[28,165837,1209],{"class":60},[28,165839,5192],{"class":38},[28,165841,165842,165844,165846,165848,165850,165852,165854,165856,165858],{"class":30,"line":91},[28,165843,148598],{"class":38},[28,165845,62935],{"class":127},[28,165847,51693],{"class":38},[28,165849,159944],{"class":127},[28,165851,12697],{"class":38},[28,165853,151685],{"class":127},[28,165855,51693],{"class":38},[28,165857,805],{"class":60},[28,165859,5192],{"class":38},[28,165861,165862,165864,165866,165868,165870,165872,165874,165876,165878],{"class":30,"line":97},[28,165863,148598],{"class":38},[28,165865,62935],{"class":127},[28,165867,51693],{"class":38},[28,165869,163523],{"class":127},[28,165871,12697],{"class":38},[28,165873,151685],{"class":127},[28,165875,51693],{"class":38},[28,165877,1279],{"class":60},[28,165879,5192],{"class":38},[28,165881,165882],{"class":30,"line":103},[28,165883,33502],{"class":38},[28,165885,165886],{"class":30,"line":109},[28,165887,2662],{"emptyLinePlaceholder":336},[28,165889,165890,165892,165894],{"class":30,"line":118},[28,165891,157473],{"class":38},[28,165893,54],{"class":34},[28,165895,47589],{"class":60},[28,165897,165898,165901,165903,165906,165908],{"class":30,"line":124},[28,165899,165900],{"class":38},"max_student ",[28,165902,54],{"class":34},[28,165904,165905],{"class":38}," students[",[28,165907,244],{"class":60},[28,165909,33502],{"class":38},[28,165911,165912,165915,165917],{"class":30,"line":131},[28,165913,165914],{"class":38},"passed ",[28,165916,54],{"class":34},[28,165918,52094],{"class":38},[28,165920,165921],{"class":30,"line":137},[28,165922,2662],{"emptyLinePlaceholder":336},[28,165924,165925,165927,165929,165931],{"class":30,"line":143},[28,165926,3287],{"class":34},[28,165928,152350],{"class":38},[28,165930,26306],{"class":34},[28,165932,152355],{"class":38},[28,165934,165935,165937,165939,165941,165943],{"class":30,"line":149},[28,165936,159520],{"class":38},[28,165938,9739],{"class":34},[28,165940,152362],{"class":38},[28,165942,151685],{"class":127},[28,165944,33502],{"class":38},[28,165946,165947],{"class":30,"line":1890},[28,165948,2662],{"emptyLinePlaceholder":336},[28,165950,165951,165953,165955,165957,165959,165961,165964,165966],{"class":30,"line":1904},[28,165952,3363],{"class":34},[28,165954,152362],{"class":38},[28,165956,151685],{"class":127},[28,165958,4705],{"class":38},[28,165960,1357],{"class":34},[28,165962,165963],{"class":38}," max_student[",[28,165965,151685],{"class":127},[28,165967,165968],{"class":38},"]:\n",[28,165970,165971,165974,165976],{"class":30,"line":1909},[28,165972,165973],{"class":38},"        max_student ",[28,165975,54],{"class":34},[28,165977,152378],{"class":38},[28,165979,165980],{"class":30,"line":1915},[28,165981,2662],{"emptyLinePlaceholder":336},[28,165983,165984,165986,165988,165990,165992,165994,165996],{"class":30,"line":1936},[28,165985,3363],{"class":34},[28,165987,152362],{"class":38},[28,165989,151685],{"class":127},[28,165991,4705],{"class":38},[28,165993,1972],{"class":34},[28,165995,158050],{"class":60},[28,165997,4001],{"class":38},[28,165999,166000],{"class":30,"line":1941},[28,166001,166002],{"class":38},"        passed.append(student)\n",[28,166004,166005],{"class":30,"line":1955},[28,166006,2662],{"emptyLinePlaceholder":336},[28,166008,166009,166011,166013,166015,166017,166019],{"class":30,"line":1960},[28,166010,163987],{"class":38},[28,166012,54],{"class":34},[28,166014,163992],{"class":38},[28,166016,982],{"class":34},[28,166018,7593],{"class":60},[28,166020,165208],{"class":38},[28,166022,166023],{"class":30,"line":1989},[28,166024,2662],{"emptyLinePlaceholder":336},[28,166026,166027,166029,166031,166033,166035,166037,166039,166041,166043,166045],{"class":30,"line":1994},[28,166028,30675],{"class":60},[28,166030,413],{"class":38},[28,166032,462],{"class":34},[28,166034,164010],{"class":127},[28,166036,1293],{"class":60},[28,166038,164015],{"class":38},[28,166040,157372],{"class":34},[28,166042,1343],{"class":60},[28,166044,654],{"class":127},[28,166046,81],{"class":38},[28,166048,166049,166051,166053,166055,166058,166060,166063,166065,166067,166069,166071,166073,166075,166077,166079,166081],{"class":30,"line":2011},[28,166050,30675],{"class":60},[28,166052,413],{"class":38},[28,166054,462],{"class":34},[28,166056,166057],{"class":127},"\"最高分学生:",[28,166059,1293],{"class":60},[28,166061,166062],{"class":38},"max_student[",[28,166064,153095],{"class":127},[28,166066,1337],{"class":38},[28,166068,1343],{"class":60},[28,166070,4710],{"class":60},[28,166072,166062],{"class":38},[28,166074,153133],{"class":127},[28,166076,1337],{"class":38},[28,166078,1343],{"class":60},[28,166080,654],{"class":127},[28,166082,81],{"class":38},[28,166084,166085,166087,166089,166091,166094,166097,166100,166102,166104],{"class":30,"line":2016},[28,166086,30675],{"class":60},[28,166088,413],{"class":38},[28,166090,462],{"class":34},[28,166092,166093],{"class":127},"\"及格人数:",[28,166095,166096],{"class":60},"{len",[28,166098,166099],{"class":38},"(passed)",[28,166101,1343],{"class":60},[28,166103,654],{"class":127},[28,166105,81],{"class":38},[351,166107,166109],{"id":166108},"_616-易错点","6.16 易错点",[363,166111,166112,166115,166118,166121,166127,166136],{},[366,166113,166114],{},"列表可变，元组和字符串不可变。",[366,166116,166117],{},"切片结束位置不包含。",[366,166119,166120],{},"字典通过 key 取值，不是通过索引。",[366,166122,166123,166124,28648],{},"空集合要用 ",[25,166125,166126],{},"set()",[366,166128,104579,166129,166132,166133,28648],{},[25,166130,166131],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[25,166134,166135],{},"get()",[366,166137,166138],{},"嵌套容器要先看清楚每一层是什么类型。",[351,166140,166142],{"id":166141},"_617-本章练习","6.17 本章练习",[363,166144,166145,166148,166151,166154,166157],{},[366,166146,166147],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[366,166149,166150],{},"输入一句话，统计每个字符出现次数。",[366,166152,166153],{},"使用集合去除列表中的重复元素。",[366,166155,166156],{},"使用字典保存一个学生的信息，并实现修改成绩。",[366,166158,166159],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[328,166161,166162],{},"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":23,"searchDepth":48,"depth":48,"links":166164},[166165,166166,166167,166168,166169,166170,166171,166172,166173,166174,166175,166176,166177,166178,166179,166180,166181],{"id":163145,"depth":48,"text":163146},{"id":163262,"depth":48,"text":163263},{"id":163352,"depth":48,"text":163353},{"id":163476,"depth":48,"text":163477},{"id":163839,"depth":48,"text":163840},{"id":164026,"depth":48,"text":164027},{"id":164145,"depth":48,"text":164146},{"id":164287,"depth":48,"text":164288},{"id":164474,"depth":48,"text":164475},{"id":164718,"depth":48,"text":164719},{"id":164928,"depth":48,"text":164929},{"id":165013,"depth":48,"text":165014},{"id":165311,"depth":48,"text":165312},{"id":165593,"depth":48,"text":165594},{"id":165785,"depth":48,"text":165786},{"id":166108,"depth":48,"text":166109},{"id":166141,"depth":48,"text":166142},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163137,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166188,"title":166189,"body":166190,"description":333,"extension":334,"meta":168362,"navigation":336,"path":168363,"seo":168364,"stem":168365,"__hash__":168366},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166191,"toc":168337},[166192,166195,166199,166202,166282,166285,166306,166309,166313,166316,166378,166381,166398,166402,166405,166450,166452,166460,166464,166467,166549,166552,166555,166580,166583,166606,166610,166613,166615,166677,166680,166682,166733,166737,166741,166747,166852,166856,166862,166933,166937,166940,167008,167011,167091,167095,167101,167137,167140,167143,167253,167259,167263,167266,167338,167341,167345,167349,167354,167416,167420,167425,167493,167497,167502,167618,167622,167625,167705,167708,167712,167715,167819,167821,167836,167839,167843,167981,167989,167993,167995,168006,168008,168266,168270,168302,168306,168334],[10,166193,166189],{"id":166194},"_7-函数进阶",[351,166196,166198],{"id":166197},"_71-多返回值","7.1 多返回值",[14,166200,166201],{},"Python 函数可以返回多个值，本质上返回的是元组。",[18,166203,166205],{"className":20,"code":166204,"language":22,"meta":23,"style":23},"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",[25,166206,166207,166216,166224,166232,166241,166248,166252,166256,166265,166271],{"__ignoreMap":23},[28,166208,166209,166211,166214],{"class":30,"line":31},[28,166210,32203],{"class":34},[28,166212,166213],{"class":2225}," get_info",[28,166215,32209],{"class":38},[28,166217,166218,166220,166222],{"class":30,"line":48},[28,166219,152583],{"class":38},[28,166221,54],{"class":34},[28,166223,149566],{"class":127},[28,166225,166226,166228,166230],{"class":30,"line":84},[28,166227,152599],{"class":38},[28,166229,54],{"class":34},[28,166231,146764],{"class":60},[28,166233,166234,166236,166238],{"class":30,"line":91},[28,166235,152614],{"class":38},[28,166237,54],{"class":34},[28,166239,166240],{"class":60}," 95\n",[28,166242,166243,166245],{"class":30,"line":97},[28,166244,4352],{"class":34},[28,166246,166247],{"class":38}," name, age, score\n",[28,166249,166250],{"class":30,"line":103},[28,166251,2662],{"emptyLinePlaceholder":336},[28,166253,166254],{"class":30,"line":109},[28,166255,2662],{"emptyLinePlaceholder":336},[28,166257,166258,166260,166262],{"class":30,"line":118},[28,166259,161519],{"class":38},[28,166261,54],{"class":34},[28,166263,166264],{"class":38}," get_info()\n",[28,166266,166267,166269],{"class":30,"line":124},[28,166268,30675],{"class":60},[28,166270,76841],{"class":38},[28,166272,166273,166275,166277,166279],{"class":30,"line":131},[28,166274,30675],{"class":60},[28,166276,413],{"class":38},[28,166278,103320],{"class":60},[28,166280,166281],{"class":38},"(result))\n",[14,166283,166284],{},"可以直接解包：",[18,166286,166288],{"className":20,"code":166287,"language":22,"meta":23,"style":23},"name, age, score = get_info()\nprint(name, age, score)\n",[25,166289,166290,166299],{"__ignoreMap":23},[28,166291,166292,166295,166297],{"class":30,"line":31},[28,166293,166294],{"class":38},"name, age, score ",[28,166296,54],{"class":34},[28,166298,166264],{"class":38},[28,166300,166301,166303],{"class":30,"line":48},[28,166302,30675],{"class":60},[28,166304,166305],{"class":38},"(name, age, score)\n",[14,166307,166308],{},"返回多个值适合函数需要同时给出多个结果时使用。",[351,166310,166312],{"id":166311},"_72-位置参数","7.2 位置参数",[14,166314,166315],{},"位置参数按顺序传递。",[18,166317,166319],{"className":20,"code":166318,"language":22,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[25,166320,166321,166329,166357,166361,166365],{"__ignoreMap":23},[28,166322,166323,166325,166327],{"class":30,"line":31},[28,166324,32203],{"class":34},[28,166326,149585],{"class":2225},[28,166328,149588],{"class":38},[28,166330,166331,166333,166335,166337,166339,166341,166343,166345,166347,166349,166351,166353,166355],{"class":30,"line":48},[28,166332,31559],{"class":60},[28,166334,413],{"class":38},[28,166336,462],{"class":34},[28,166338,149599],{"class":127},[28,166340,1293],{"class":60},[28,166342,80066],{"class":38},[28,166344,1343],{"class":60},[28,166346,149608],{"class":127},[28,166348,1293],{"class":60},[28,166350,70477],{"class":38},[28,166352,1343],{"class":60},[28,166354,149617],{"class":127},[28,166356,81],{"class":38},[28,166358,166359],{"class":30,"line":84},[28,166360,2662],{"emptyLinePlaceholder":336},[28,166362,166363],{"class":30,"line":91},[28,166364,2662],{"emptyLinePlaceholder":336},[28,166366,166367,166370,166372,166374,166376],{"class":30,"line":97},[28,166368,166369],{"class":38},"introduce(",[28,166371,150101],{"class":127},[28,166373,12697],{"class":38},[28,166375,1048],{"class":60},[28,166377,81],{"class":38},[14,166379,166380],{},"顺序错了就会得到错误含义：",[18,166382,166384],{"className":20,"code":166383,"language":22,"meta":23,"style":23},"introduce(18, \"小明\")\n",[25,166385,166386],{"__ignoreMap":23},[28,166387,166388,166390,166392,166394,166396],{"class":30,"line":31},[28,166389,166369],{"class":38},[28,166391,1048],{"class":60},[28,166393,12697],{"class":38},[28,166395,150101],{"class":127},[28,166397,81],{"class":38},[351,166399,166401],{"id":166400},"_73-关键字参数","7.3 关键字参数",[14,166403,166404],{},"关键字参数按参数名传递。",[18,166406,166408],{"className":20,"code":166407,"language":22,"meta":23,"style":23},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[25,166409,166410,166430],{"__ignoreMap":23},[28,166411,166412,166414,166416,166418,166420,166422,166424,166426,166428],{"class":30,"line":31},[28,166413,166369],{"class":38},[28,166415,80066],{"class":5478},[28,166417,54],{"class":34},[28,166419,150101],{"class":127},[28,166421,12697],{"class":38},[28,166423,70477],{"class":5478},[28,166425,54],{"class":34},[28,166427,1048],{"class":60},[28,166429,81],{"class":38},[28,166431,166432,166434,166436,166438,166440,166442,166444,166446,166448],{"class":30,"line":48},[28,166433,166369],{"class":38},[28,166435,70477],{"class":5478},[28,166437,54],{"class":34},[28,166439,1048],{"class":60},[28,166441,12697],{"class":38},[28,166443,80066],{"class":5478},[28,166445,54],{"class":34},[28,166447,150101],{"class":127},[28,166449,81],{"class":38},[14,166451,118147],{},[363,166453,166454,166457],{},[366,166455,166456],{},"顺序不容易错。",[366,166458,166459],{},"调用时可读性更强。",[351,166461,166463],{"id":166462},"_74-默认参数","7.4 默认参数",[14,166465,166466],{},"默认参数给参数设置默认值。",[18,166468,166470],{"className":20,"code":166469,"language":22,"meta":23,"style":23},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[25,166471,166472,166488,166518,166522,166526,166536],{"__ignoreMap":23},[28,166473,166474,166476,166478,166481,166483,166486],{"class":30,"line":31},[28,166475,32203],{"class":34},[28,166477,122306],{"class":2225},[28,166479,166480],{"class":38},"(host, port",[28,166482,54],{"class":34},[28,166484,166485],{"class":60},"3306",[28,166487,31046],{"class":38},[28,166489,166490,166492,166494,166496,166499,166501,166503,166505,166507,166509,166512,166514,166516],{"class":30,"line":48},[28,166491,31559],{"class":60},[28,166493,413],{"class":38},[28,166495,462],{"class":34},[28,166497,166498],{"class":127},"\"连接",[28,166500,1293],{"class":60},[28,166502,27658],{"class":38},[28,166504,1343],{"class":60},[28,166506,1256],{"class":127},[28,166508,1293],{"class":60},[28,166510,166511],{"class":38},"port",[28,166513,1343],{"class":60},[28,166515,654],{"class":127},[28,166517,81],{"class":38},[28,166519,166520],{"class":30,"line":84},[28,166521,2662],{"emptyLinePlaceholder":336},[28,166523,166524],{"class":30,"line":91},[28,166525,2662],{"emptyLinePlaceholder":336},[28,166527,166528,166531,166534],{"class":30,"line":97},[28,166529,166530],{"class":38},"connect(",[28,166532,166533],{"class":127},"\"localhost\"",[28,166535,81],{"class":38},[28,166537,166538,166540,166542,166544,166547],{"class":30,"line":103},[28,166539,166530],{"class":38},[28,166541,166533],{"class":127},[28,166543,12697],{"class":38},[28,166545,166546],{"class":60},"6379",[28,166548,81],{"class":38},[14,166550,166551],{},"注意：默认参数必须放在非默认参数后面。",[14,166553,166554],{},"错误：",[18,166556,166558],{"className":20,"code":166557,"language":22,"meta":23,"style":23},"def connect(port=3306, host):\n    pass\n",[25,166559,166560,166576],{"__ignoreMap":23},[28,166561,166562,166564,166566,166569,166571,166573],{"class":30,"line":31},[28,166563,32203],{"class":34},[28,166565,122306],{"class":2225},[28,166567,166568],{"class":38},"(port",[28,166570,54],{"class":34},[28,166572,166485],{"class":60},[28,166574,166575],{"class":38},", host):\n",[28,166577,166578],{"class":30,"line":48},[28,166579,149750],{"class":34},[14,166581,166582],{},"正确：",[18,166584,166586],{"className":20,"code":166585,"language":22,"meta":23,"style":23},"def connect(host, port=3306):\n    pass\n",[25,166587,166588,166602],{"__ignoreMap":23},[28,166589,166590,166592,166594,166596,166598,166600],{"class":30,"line":31},[28,166591,32203],{"class":34},[28,166593,122306],{"class":2225},[28,166595,166480],{"class":38},[28,166597,54],{"class":34},[28,166599,166485],{"class":60},[28,166601,31046],{"class":38},[28,166603,166604],{"class":30,"line":48},[28,166605,149750],{"class":34},[351,166607,166609],{"id":166608},"_75-默认参数的坑","7.5 默认参数的坑",[14,166611,166612],{},"不要使用可变对象作为默认参数。",[14,166614,157836],{},[18,166616,166618],{"className":20,"code":166617,"language":22,"meta":23,"style":23},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[25,166619,166620,166635,166640,166647,166651,166655,166666],{"__ignoreMap":23},[28,166621,166622,166624,166627,166630,166632],{"class":30,"line":31},[28,166623,32203],{"class":34},[28,166625,166626],{"class":2225}," add_item",[28,166628,166629],{"class":38},"(item, items",[28,166631,54],{"class":34},[28,166633,166634],{"class":38},"[]):\n",[28,166636,166637],{"class":30,"line":48},[28,166638,166639],{"class":38},"    items.append(item)\n",[28,166641,166642,166644],{"class":30,"line":84},[28,166643,4352],{"class":34},[28,166645,166646],{"class":38}," items\n",[28,166648,166649],{"class":30,"line":91},[28,166650,2662],{"emptyLinePlaceholder":336},[28,166652,166653],{"class":30,"line":97},[28,166654,2662],{"emptyLinePlaceholder":336},[28,166656,166657,166659,166662,166664],{"class":30,"line":103},[28,166658,30675],{"class":60},[28,166660,166661],{"class":38},"(add_item(",[28,166663,165538],{"class":127},[28,166665,30757],{"class":38},[28,166667,166668,166670,166672,166675],{"class":30,"line":109},[28,166669,30675],{"class":60},[28,166671,166661],{"class":38},[28,166673,166674],{"class":127},"\"b\"",[28,166676,30757],{"class":38},[14,166678,166679],{},"第二次调用会复用第一次的列表。",[14,166681,156101],{},[18,166683,166685],{"className":20,"code":166684,"language":22,"meta":23,"style":23},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[25,166686,166687,166701,166714,166723,166727],{"__ignoreMap":23},[28,166688,166689,166691,166693,166695,166697,166699],{"class":30,"line":31},[28,166690,32203],{"class":34},[28,166692,166626],{"class":2225},[28,166694,166629],{"class":38},[28,166696,54],{"class":34},[28,166698,95938],{"class":60},[28,166700,31046],{"class":38},[28,166702,166703,166705,166708,166710,166712],{"class":30,"line":48},[28,166704,3363],{"class":34},[28,166706,166707],{"class":38}," items ",[28,166709,39183],{"class":34},[28,166711,39189],{"class":60},[28,166713,4001],{"class":38},[28,166715,166716,166719,166721],{"class":30,"line":84},[28,166717,166718],{"class":38},"        items ",[28,166720,54],{"class":34},[28,166722,52094],{"class":38},[28,166724,166725],{"class":30,"line":91},[28,166726,166639],{"class":38},[28,166728,166729,166731],{"class":30,"line":97},[28,166730,4352],{"class":34},[28,166732,166646],{"class":38},[351,166734,166736],{"id":166735},"_76-不定长参数","7.6 不定长参数",[380,166738,166740],{"id":166739},"_761-args","7.6.1 *args",[14,166742,166743,166746],{},[25,166744,166745],{},"*args"," 接收任意数量的位置参数，得到元组。",[18,166748,166750],{"className":20,"code":166749,"language":22,"meta":23,"style":23},"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",[25,166751,166752,166765,166773,166784,166793,166799,166803,166807,166826],{"__ignoreMap":23},[28,166753,166754,166756,166758,166760,166762],{"class":30,"line":31},[28,166755,32203],{"class":34},[28,166757,5471],{"class":2225},[28,166759,413],{"class":38},[28,166761,854],{"class":34},[28,166763,166764],{"class":38},"args):\n",[28,166766,166767,166769,166771],{"class":30,"line":48},[28,166768,159520],{"class":38},[28,166770,54],{"class":34},[28,166772,47589],{"class":60},[28,166774,166775,166777,166779,166781],{"class":30,"line":84},[28,166776,3463],{"class":34},[28,166778,156393],{"class":38},[28,166780,26306],{"class":34},[28,166782,166783],{"class":38}," args:\n",[28,166785,166786,166788,166790],{"class":30,"line":91},[28,166787,160195],{"class":38},[28,166789,9739],{"class":34},[28,166791,166792],{"class":38}," num\n",[28,166794,166795,166797],{"class":30,"line":97},[28,166796,4352],{"class":34},[28,166798,162500],{"class":38},[28,166800,166801],{"class":30,"line":103},[28,166802,2662],{"emptyLinePlaceholder":336},[28,166804,166805],{"class":30,"line":109},[28,166806,2662],{"emptyLinePlaceholder":336},[28,166808,166809,166811,166814,166816,166818,166820,166822,166824],{"class":30,"line":118},[28,166810,30675],{"class":60},[28,166812,166813],{"class":38},"(add(",[28,166815,61],{"class":60},[28,166817,12697],{"class":38},[28,166819,211],{"class":60},[28,166821,12697],{"class":38},[28,166823,78],{"class":60},[28,166825,30757],{"class":38},[28,166827,166828,166830,166832,166834,166836,166838,166840,166842,166844,166846,166848,166850],{"class":30,"line":124},[28,166829,30675],{"class":60},[28,166831,166813],{"class":38},[28,166833,61],{"class":60},[28,166835,12697],{"class":38},[28,166837,211],{"class":60},[28,166839,12697],{"class":38},[28,166841,78],{"class":60},[28,166843,12697],{"class":38},[28,166845,73],{"class":60},[28,166847,12697],{"class":38},[28,166849,721],{"class":60},[28,166851,30757],{"class":38},[380,166853,166855],{"id":166854},"_762-kwargs","7.6.2 **kwargs",[14,166857,166858,166861],{},[25,166859,166860],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[18,166863,166865],{"className":20,"code":166864,"language":22,"meta":23,"style":23},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[25,166866,166867,166880,166891,166897,166901,166905],{"__ignoreMap":23},[28,166868,166869,166871,166873,166875,166877],{"class":30,"line":31},[28,166870,32203],{"class":34},[28,166872,162158],{"class":2225},[28,166874,413],{"class":38},[28,166876,10923],{"class":34},[28,166878,166879],{"class":38},"kwargs):\n",[28,166881,166882,166884,166886,166888],{"class":30,"line":48},[28,166883,3463],{"class":34},[28,166885,164998],{"class":38},[28,166887,26306],{"class":34},[28,166889,166890],{"class":38}," kwargs.items():\n",[28,166892,166893,166895],{"class":30,"line":84},[28,166894,32707],{"class":60},[28,166896,165010],{"class":38},[28,166898,166899],{"class":30,"line":91},[28,166900,2662],{"emptyLinePlaceholder":336},[28,166902,166903],{"class":30,"line":97},[28,166904,2662],{"emptyLinePlaceholder":336},[28,166906,166907,166909,166911,166913,166915,166917,166919,166921,166923,166925,166927,166929,166931],{"class":30,"line":103},[28,166908,162223],{"class":38},[28,166910,80066],{"class":5478},[28,166912,54],{"class":34},[28,166914,150101],{"class":127},[28,166916,12697],{"class":38},[28,166918,70477],{"class":5478},[28,166920,54],{"class":34},[28,166922,1048],{"class":60},[28,166924,12697],{"class":38},[28,166926,70528],{"class":5478},[28,166928,54],{"class":34},[28,166930,69525],{"class":127},[28,166932,81],{"class":38},[351,166934,166936],{"id":166935},"_77-参数解包","7.7 参数解包",[14,166938,166939],{},"列表或元组解包为位置参数：",[18,166941,166943],{"className":20,"code":166942,"language":22,"meta":23,"style":23},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[25,166944,166945,166954,166969,166973,166977,166997],{"__ignoreMap":23},[28,166946,166947,166949,166951],{"class":30,"line":31},[28,166948,32203],{"class":34},[28,166950,5471],{"class":2225},[28,166952,166953],{"class":38},"(a, b, c):\n",[28,166955,166956,166958,166960,166962,166964,166966],{"class":30,"line":48},[28,166957,4352],{"class":34},[28,166959,11131],{"class":38},[28,166961,880],{"class":34},[28,166963,11144],{"class":38},[28,166965,880],{"class":34},[28,166967,166968],{"class":38}," c\n",[28,166970,166971],{"class":30,"line":84},[28,166972,2662],{"emptyLinePlaceholder":336},[28,166974,166975],{"class":30,"line":91},[28,166976,2662],{"emptyLinePlaceholder":336},[28,166978,166979,166981,166983,166985,166987,166989,166991,166993,166995],{"class":30,"line":97},[28,166980,164313],{"class":38},[28,166982,54],{"class":34},[28,166984,52482],{"class":38},[28,166986,61],{"class":60},[28,166988,12697],{"class":38},[28,166990,211],{"class":60},[28,166992,12697],{"class":38},[28,166994,78],{"class":60},[28,166996,33502],{"class":38},[28,166998,166999,167001,167003,167005],{"class":30,"line":103},[28,167000,30675],{"class":60},[28,167002,166813],{"class":38},[28,167004,854],{"class":34},[28,167006,167007],{"class":38},"nums))\n",[14,167009,167010],{},"字典解包为关键字参数：",[18,167012,167014],{"className":20,"code":167013,"language":22,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[25,167015,167016,167024,167050,167054,167058,167082],{"__ignoreMap":23},[28,167017,167018,167020,167022],{"class":30,"line":31},[28,167019,32203],{"class":34},[28,167021,149585],{"class":2225},[28,167023,149588],{"class":38},[28,167025,167026,167028,167030,167032,167034,167036,167038,167040,167042,167044,167046,167048],{"class":30,"line":48},[28,167027,31559],{"class":60},[28,167029,413],{"class":38},[28,167031,462],{"class":34},[28,167033,654],{"class":127},[28,167035,1293],{"class":60},[28,167037,80066],{"class":38},[28,167039,1343],{"class":60},[28,167041,4710],{"class":60},[28,167043,70477],{"class":38},[28,167045,1343],{"class":60},[28,167047,654],{"class":127},[28,167049,81],{"class":38},[28,167051,167052],{"class":30,"line":84},[28,167053,2662],{"emptyLinePlaceholder":336},[28,167055,167056],{"class":30,"line":91},[28,167057,2662],{"emptyLinePlaceholder":336},[28,167059,167060,167062,167064,167066,167068,167070,167072,167074,167076,167078,167080],{"class":30,"line":97},[28,167061,116527],{"class":38},[28,167063,54],{"class":34},[28,167065,4710],{"class":38},[28,167067,62935],{"class":127},[28,167069,51693],{"class":38},[28,167071,150101],{"class":127},[28,167073,12697],{"class":38},[28,167075,69380],{"class":127},[28,167077,51693],{"class":38},[28,167079,1048],{"class":60},[28,167081,1830],{"class":38},[28,167083,167084,167086,167088],{"class":30,"line":103},[28,167085,166369],{"class":38},[28,167087,10923],{"class":34},[28,167089,167090],{"class":38},"info)\n",[351,167092,167094],{"id":167093},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167096,167097,167100],{},[25,167098,167099],{},"lambda"," 用于定义简单匿名函数。",[18,167102,167104],{"className":20,"code":167103,"language":22,"meta":23,"style":23},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[25,167105,167106,167123],{"__ignoreMap":23},[28,167107,167108,167111,167113,167116,167119,167121],{"class":30,"line":31},[28,167109,167110],{"class":38},"add ",[28,167112,54],{"class":34},[28,167114,167115],{"class":34}," lambda",[28,167117,167118],{"class":38}," a, b: a ",[28,167120,880],{"class":34},[28,167122,151317],{"class":38},[28,167124,167125,167127,167129,167131,167133,167135],{"class":30,"line":48},[28,167126,30675],{"class":60},[28,167128,166813],{"class":38},[28,167130,61],{"class":60},[28,167132,12697],{"class":38},[28,167134,211],{"class":60},[28,167136,30757],{"class":38},[14,167138,167139],{},"常和排序、过滤等函数一起使用。",[14,167141,167142],{},"按分数排序：",[18,167144,167146],{"className":20,"code":167145,"language":22,"meta":23,"style":23},"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",[25,167147,167148,167156,167176,167196,167216,167220,167224,167247],{"__ignoreMap":23},[28,167149,167150,167152,167154],{"class":30,"line":31},[28,167151,159929],{"class":38},[28,167153,54],{"class":34},[28,167155,55703],{"class":38},[28,167157,167158,167160,167162,167164,167166,167168,167170,167172,167174],{"class":30,"line":48},[28,167159,148598],{"class":38},[28,167161,62935],{"class":127},[28,167163,51693],{"class":38},[28,167165,150101],{"class":127},[28,167167,12697],{"class":38},[28,167169,151685],{"class":127},[28,167171,51693],{"class":38},[28,167173,1386],{"class":60},[28,167175,5192],{"class":38},[28,167177,167178,167180,167182,167184,167186,167188,167190,167192,167194],{"class":30,"line":84},[28,167179,148598],{"class":38},[28,167181,62935],{"class":127},[28,167183,51693],{"class":38},[28,167185,151149],{"class":127},[28,167187,12697],{"class":38},[28,167189,151685],{"class":127},[28,167191,51693],{"class":38},[28,167193,1209],{"class":60},[28,167195,5192],{"class":38},[28,167197,167198,167200,167202,167204,167206,167208,167210,167212,167214],{"class":30,"line":91},[28,167199,148598],{"class":38},[28,167201,62935],{"class":127},[28,167203,51693],{"class":38},[28,167205,159944],{"class":127},[28,167207,12697],{"class":38},[28,167209,151685],{"class":127},[28,167211,51693],{"class":38},[28,167213,805],{"class":60},[28,167215,5192],{"class":38},[28,167217,167218],{"class":30,"line":97},[28,167219,33502],{"class":38},[28,167221,167222],{"class":30,"line":103},[28,167223,2662],{"emptyLinePlaceholder":336},[28,167225,167226,167229,167231,167233,167235,167237,167239,167241,167243,167245],{"class":30,"line":109},[28,167227,167228],{"class":38},"students.sort(",[28,167230,154159],{"class":5478},[28,167232,154162],{"class":34},[28,167234,154165],{"class":38},[28,167236,151685],{"class":127},[28,167238,112415],{"class":38},[28,167240,163741],{"class":5478},[28,167242,54],{"class":34},[28,167244,31733],{"class":60},[28,167246,81],{"class":38},[28,167248,167249,167251],{"class":30,"line":118},[28,167250,30675],{"class":60},[28,167252,165208],{"class":38},[14,167254,167255,167256,167258],{},"如果逻辑复杂，不要硬写 ",[25,167257,167099],{},"，定义普通函数更清晰。",[351,167260,167262],{"id":167261},"_79-函数作为参数","7.9 函数作为参数",[14,167264,167265],{},"函数可以作为参数传给另一个函数。",[18,167267,167269],{"className":20,"code":167268,"language":22,"meta":23,"style":23},"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",[25,167270,167271,167279,167289,167293,167297,167307,167314,167318,167322],{"__ignoreMap":23},[28,167272,167273,167275,167277],{"class":30,"line":31},[28,167274,32203],{"class":34},[28,167276,5471],{"class":2225},[28,167278,151306],{"class":38},[28,167280,167281,167283,167285,167287],{"class":30,"line":48},[28,167282,4352],{"class":34},[28,167284,11131],{"class":38},[28,167286,880],{"class":34},[28,167288,151317],{"class":38},[28,167290,167291],{"class":30,"line":84},[28,167292,2662],{"emptyLinePlaceholder":336},[28,167294,167295],{"class":30,"line":91},[28,167296,2662],{"emptyLinePlaceholder":336},[28,167298,167299,167301,167304],{"class":30,"line":97},[28,167300,32203],{"class":34},[28,167302,167303],{"class":2225}," calculate",[28,167305,167306],{"class":38},"(a, b, func):\n",[28,167308,167309,167311],{"class":30,"line":103},[28,167310,4352],{"class":34},[28,167312,167313],{"class":38}," func(a, b)\n",[28,167315,167316],{"class":30,"line":109},[28,167317,2662],{"emptyLinePlaceholder":336},[28,167319,167320],{"class":30,"line":118},[28,167321,2662],{"emptyLinePlaceholder":336},[28,167323,167324,167326,167329,167331,167333,167335],{"class":30,"line":124},[28,167325,30675],{"class":60},[28,167327,167328],{"class":38},"(calculate(",[28,167330,845],{"class":60},[28,167332,12697],{"class":38},[28,167334,1098],{"class":60},[28,167336,167337],{"class":38},", add))\n",[14,167339,167340],{},"这种思想在排序、回调、框架中经常出现。",[351,167342,167344],{"id":167343},"_710-mapfiltersorted","7.10 map、filter、sorted",[380,167346,167348],{"id":167347},"_7101-map","7.10.1 map",[14,167350,167351,167353],{},[25,167352,74300],{}," 对每个元素执行函数。",[18,167355,167357],{"className":20,"code":167356,"language":22,"meta":23,"style":23},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[25,167358,167359,167383,167406],{"__ignoreMap":23},[28,167360,167361,167363,167365,167367,167369,167371,167373,167375,167377,167379,167381],{"class":30,"line":31},[28,167362,164313],{"class":38},[28,167364,54],{"class":34},[28,167366,52482],{"class":38},[28,167368,61],{"class":60},[28,167370,12697],{"class":38},[28,167372,211],{"class":60},[28,167374,12697],{"class":38},[28,167376,78],{"class":60},[28,167378,12697],{"class":38},[28,167380,73],{"class":60},[28,167382,33502],{"class":38},[28,167384,167385,167387,167389,167392,167394,167396,167399,167401,167403],{"class":30,"line":48},[28,167386,161519],{"class":38},[28,167388,54],{"class":34},[28,167390,167391],{"class":60}," map",[28,167393,413],{"class":38},[28,167395,167099],{"class":34},[28,167397,167398],{"class":38}," x: x ",[28,167400,854],{"class":34},[28,167402,15017],{"class":60},[28,167404,167405],{"class":38},", nums)\n",[28,167407,167408,167410,167412,167414],{"class":30,"line":84},[28,167409,30675],{"class":60},[28,167411,413],{"class":38},[28,167413,154283],{"class":60},[28,167415,166281],{"class":38},[380,167417,167419],{"id":167418},"_7102-filter","7.10.2 filter",[14,167421,167422,167424],{},[25,167423,80307],{}," 保留满足条件的元素。",[18,167426,167428],{"className":20,"code":167427,"language":22,"meta":23,"style":23},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[25,167429,167430,167458,167483],{"__ignoreMap":23},[28,167431,167432,167434,167436,167438,167440,167442,167444,167446,167448,167450,167452,167454,167456],{"class":30,"line":31},[28,167433,164313],{"class":38},[28,167435,54],{"class":34},[28,167437,52482],{"class":38},[28,167439,61],{"class":60},[28,167441,12697],{"class":38},[28,167443,211],{"class":60},[28,167445,12697],{"class":38},[28,167447,78],{"class":60},[28,167449,12697],{"class":38},[28,167451,73],{"class":60},[28,167453,12697],{"class":38},[28,167455,721],{"class":60},[28,167457,33502],{"class":38},[28,167459,167460,167462,167464,167467,167469,167471,167473,167475,167477,167479,167481],{"class":30,"line":48},[28,167461,161519],{"class":38},[28,167463,54],{"class":34},[28,167465,167466],{"class":60}," filter",[28,167468,413],{"class":38},[28,167470,167099],{"class":34},[28,167472,167398],{"class":38},[28,167474,729],{"class":34},[28,167476,15017],{"class":60},[28,167478,101772],{"class":34},[28,167480,4355],{"class":60},[28,167482,167405],{"class":38},[28,167484,167485,167487,167489,167491],{"class":30,"line":84},[28,167486,30675],{"class":60},[28,167488,413],{"class":38},[28,167490,154283],{"class":60},[28,167492,166281],{"class":38},[380,167494,167496],{"id":167495},"_7103-sorted","7.10.3 sorted",[14,167498,167499,167501],{},[25,167500,165449],{}," 返回排序后的新列表。",[18,167503,167505],{"className":20,"code":167504,"language":22,"meta":23,"style":23},"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",[25,167506,167507,167515,167535,167555,167575,167579,167583,167612],{"__ignoreMap":23},[28,167508,167509,167511,167513],{"class":30,"line":31},[28,167510,159929],{"class":38},[28,167512,54],{"class":34},[28,167514,55703],{"class":38},[28,167516,167517,167519,167521,167523,167525,167527,167529,167531,167533],{"class":30,"line":48},[28,167518,148598],{"class":38},[28,167520,62935],{"class":127},[28,167522,51693],{"class":38},[28,167524,150101],{"class":127},[28,167526,12697],{"class":38},[28,167528,151685],{"class":127},[28,167530,51693],{"class":38},[28,167532,1386],{"class":60},[28,167534,5192],{"class":38},[28,167536,167537,167539,167541,167543,167545,167547,167549,167551,167553],{"class":30,"line":84},[28,167538,148598],{"class":38},[28,167540,62935],{"class":127},[28,167542,51693],{"class":38},[28,167544,151149],{"class":127},[28,167546,12697],{"class":38},[28,167548,151685],{"class":127},[28,167550,51693],{"class":38},[28,167552,1209],{"class":60},[28,167554,5192],{"class":38},[28,167556,167557,167559,167561,167563,167565,167567,167569,167571,167573],{"class":30,"line":91},[28,167558,148598],{"class":38},[28,167560,62935],{"class":127},[28,167562,51693],{"class":38},[28,167564,159944],{"class":127},[28,167566,12697],{"class":38},[28,167568,151685],{"class":127},[28,167570,51693],{"class":38},[28,167572,805],{"class":60},[28,167574,5192],{"class":38},[28,167576,167577],{"class":30,"line":97},[28,167578,33502],{"class":38},[28,167580,167581],{"class":30,"line":103},[28,167582,2662],{"emptyLinePlaceholder":336},[28,167584,167585,167587,167589,167591,167594,167596,167598,167600,167602,167604,167606,167608,167610],{"class":30,"line":109},[28,167586,161519],{"class":38},[28,167588,54],{"class":34},[28,167590,163817],{"class":60},[28,167592,167593],{"class":38},"(students, ",[28,167595,154159],{"class":5478},[28,167597,154162],{"class":34},[28,167599,154165],{"class":38},[28,167601,151685],{"class":127},[28,167603,112415],{"class":38},[28,167605,163741],{"class":5478},[28,167607,54],{"class":34},[28,167609,31733],{"class":60},[28,167611,81],{"class":38},[28,167613,167614,167616],{"class":30,"line":118},[28,167615,30675],{"class":60},[28,167617,76841],{"class":38},[351,167619,167621],{"id":167620},"_711-闭包入门","7.11 闭包入门",[14,167623,167624],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[18,167626,167628],{"className":20,"code":167627,"language":22,"meta":23,"style":23},"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",[25,167629,167630,167640,167650,167661,167665,167672,167676,167680,167694],{"__ignoreMap":23},[28,167631,167632,167634,167637],{"class":30,"line":31},[28,167633,32203],{"class":34},[28,167635,167636],{"class":2225}," outer",[28,167638,167639],{"class":38},"(base):\n",[28,167641,167642,167644,167647],{"class":30,"line":48},[28,167643,31061],{"class":34},[28,167645,167646],{"class":2225}," inner",[28,167648,167649],{"class":38},"(num):\n",[28,167651,167652,167654,167657,167659],{"class":30,"line":84},[28,167653,15014],{"class":34},[28,167655,167656],{"class":38}," base ",[28,167658,880],{"class":34},[28,167660,166792],{"class":38},[28,167662,167663],{"class":30,"line":91},[28,167664,2662],{"emptyLinePlaceholder":336},[28,167666,167667,167669],{"class":30,"line":97},[28,167668,4352],{"class":34},[28,167670,167671],{"class":38}," inner\n",[28,167673,167674],{"class":30,"line":103},[28,167675,2662],{"emptyLinePlaceholder":336},[28,167677,167678],{"class":30,"line":109},[28,167679,2662],{"emptyLinePlaceholder":336},[28,167681,167682,167685,167687,167690,167692],{"class":30,"line":118},[28,167683,167684],{"class":38},"add_10 ",[28,167686,54],{"class":34},[28,167688,167689],{"class":38}," outer(",[28,167691,845],{"class":60},[28,167693,81],{"class":38},[28,167695,167696,167698,167701,167703],{"class":30,"line":124},[28,167697,30675],{"class":60},[28,167699,167700],{"class":38},"(add_10(",[28,167702,721],{"class":60},[28,167704,30757],{"class":38},[14,167706,167707],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[351,167709,167711],{"id":167710},"_712-装饰器入门","7.12 装饰器入门",[14,167713,167714],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[18,167716,167718],{"className":20,"code":167717,"language":22,"meta":23,"style":23},"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",[25,167719,167720,167729,167738,167749,167754,167765,167769,167776,167780,167784,167789,167797,167807,167811,167815],{"__ignoreMap":23},[28,167721,167722,167724,167726],{"class":30,"line":31},[28,167723,32203],{"class":34},[28,167725,87447],{"class":2225},[28,167727,167728],{"class":38},"(func):\n",[28,167730,167731,167733,167736],{"class":30,"line":48},[28,167732,31061],{"class":34},[28,167734,167735],{"class":2225}," wrapper",[28,167737,32209],{"class":38},[28,167739,167740,167742,167744,167747],{"class":30,"line":84},[28,167741,32707],{"class":60},[28,167743,413],{"class":38},[28,167745,167746],{"class":127},"\"函数开始执行\"",[28,167748,81],{"class":38},[28,167750,167751],{"class":30,"line":91},[28,167752,167753],{"class":38},"        func()\n",[28,167755,167756,167758,167760,167763],{"class":30,"line":97},[28,167757,32707],{"class":60},[28,167759,413],{"class":38},[28,167761,167762],{"class":127},"\"函数执行结束\"",[28,167764,81],{"class":38},[28,167766,167767],{"class":30,"line":103},[28,167768,2662],{"emptyLinePlaceholder":336},[28,167770,167771,167773],{"class":30,"line":109},[28,167772,4352],{"class":34},[28,167774,167775],{"class":38}," wrapper\n",[28,167777,167778],{"class":30,"line":118},[28,167779,2662],{"emptyLinePlaceholder":336},[28,167781,167782],{"class":30,"line":124},[28,167783,2662],{"emptyLinePlaceholder":336},[28,167785,167786],{"class":30,"line":131},[28,167787,167788],{"class":2225},"@log\n",[28,167790,167791,167793,167795],{"class":30,"line":137},[28,167792,32203],{"class":34},[28,167794,161209],{"class":2225},[28,167796,32209],{"class":38},[28,167798,167799,167801,167803,167805],{"class":30,"line":143},[28,167800,31559],{"class":60},[28,167802,413],{"class":38},[28,167804,6106],{"class":127},[28,167806,81],{"class":38},[28,167808,167809],{"class":30,"line":149},[28,167810,2662],{"emptyLinePlaceholder":336},[28,167812,167813],{"class":30,"line":1890},[28,167814,2662],{"emptyLinePlaceholder":336},[28,167816,167817],{"class":30,"line":1904},[28,167818,161244],{"class":38},[14,167820,158487],{},[18,167822,167824],{"className":20,"code":167823,"language":22,"meta":23,"style":23},"say_hello = log(say_hello)\n",[25,167825,167826],{"__ignoreMap":23},[28,167827,167828,167831,167833],{"class":30,"line":31},[28,167829,167830],{"class":38},"say_hello ",[28,167832,54],{"class":34},[28,167834,167835],{"class":38}," log(say_hello)\n",[14,167837,167838],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[351,167840,167842],{"id":167841},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[18,167844,167846],{"className":20,"code":167845,"language":22,"meta":23,"style":23},"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",[25,167847,167848,167856,167873,167883,167902,167912,167919,167923,167929,167933,167937,167941,167949,167959,167963,167967],{"__ignoreMap":23},[28,167849,167850,167852,167854],{"class":30,"line":31},[28,167851,32203],{"class":34},[28,167853,87447],{"class":2225},[28,167855,167728],{"class":38},[28,167857,167858,167860,167862,167864,167866,167869,167871],{"class":30,"line":48},[28,167859,31061],{"class":34},[28,167861,167735],{"class":2225},[28,167863,413],{"class":38},[28,167865,854],{"class":34},[28,167867,167868],{"class":38},"args, ",[28,167870,10923],{"class":34},[28,167872,166879],{"class":38},[28,167874,167875,167877,167879,167881],{"class":30,"line":84},[28,167876,32707],{"class":60},[28,167878,413],{"class":38},[28,167880,167746],{"class":127},[28,167882,81],{"class":38},[28,167884,167885,167888,167890,167893,167895,167897,167899],{"class":30,"line":91},[28,167886,167887],{"class":38},"        result ",[28,167889,54],{"class":34},[28,167891,167892],{"class":38}," func(",[28,167894,854],{"class":34},[28,167896,167868],{"class":38},[28,167898,10923],{"class":34},[28,167900,167901],{"class":38},"kwargs)\n",[28,167903,167904,167906,167908,167910],{"class":30,"line":97},[28,167905,32707],{"class":60},[28,167907,413],{"class":38},[28,167909,167762],{"class":127},[28,167911,81],{"class":38},[28,167913,167914,167916],{"class":30,"line":103},[28,167915,15014],{"class":34},[28,167917,167918],{"class":38}," result\n",[28,167920,167921],{"class":30,"line":109},[28,167922,2662],{"emptyLinePlaceholder":336},[28,167924,167925,167927],{"class":30,"line":118},[28,167926,4352],{"class":34},[28,167928,167775],{"class":38},[28,167930,167931],{"class":30,"line":124},[28,167932,2662],{"emptyLinePlaceholder":336},[28,167934,167935],{"class":30,"line":131},[28,167936,2662],{"emptyLinePlaceholder":336},[28,167938,167939],{"class":30,"line":137},[28,167940,167788],{"class":2225},[28,167942,167943,167945,167947],{"class":30,"line":143},[28,167944,32203],{"class":34},[28,167946,5471],{"class":2225},[28,167948,151306],{"class":38},[28,167950,167951,167953,167955,167957],{"class":30,"line":149},[28,167952,4352],{"class":34},[28,167954,11131],{"class":38},[28,167956,880],{"class":34},[28,167958,151317],{"class":38},[28,167960,167961],{"class":30,"line":1890},[28,167962,2662],{"emptyLinePlaceholder":336},[28,167964,167965],{"class":30,"line":1904},[28,167966,2662],{"emptyLinePlaceholder":336},[28,167968,167969,167971,167973,167975,167977,167979],{"class":30,"line":1909},[28,167970,30675],{"class":60},[28,167972,166813],{"class":38},[28,167974,845],{"class":60},[28,167976,12697],{"class":38},[28,167978,1098],{"class":60},[28,167980,30757],{"class":38},[14,167982,167983,167984,101231,167986,167988],{},"这个写法使用 ",[25,167985,166745],{},[25,167987,166860],{}," 接收原函数的所有参数。",[351,167990,167992],{"id":167991},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167994,123505],{},[363,167996,167997,168000,168003],{},[366,167998,167999],{},"给定一组学生数据。",[366,168001,168002],{},"封装函数，根据传入规则筛选学生。",[366,168004,168005],{},"筛选及格、优秀、未成年学生。",[14,168007,10297],{},[18,168009,168011],{"className":20,"code":168010,"language":22,"meta":23,"style":23},"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",[25,168012,168013,168021,168049,168077,168105,168109,168113,168117,168127,168135,168145,168152,168157,168163,168167,168171,168195,168218,168241,168245,168252,168259],{"__ignoreMap":23},[28,168014,168015,168017,168019],{"class":30,"line":31},[28,168016,159929],{"class":38},[28,168018,54],{"class":34},[28,168020,55703],{"class":38},[28,168022,168023,168025,168027,168029,168031,168033,168035,168037,168039,168041,168043,168045,168047],{"class":30,"line":48},[28,168024,148598],{"class":38},[28,168026,62935],{"class":127},[28,168028,51693],{"class":38},[28,168030,150101],{"class":127},[28,168032,12697],{"class":38},[28,168034,69380],{"class":127},[28,168036,51693],{"class":38},[28,168038,1048],{"class":60},[28,168040,12697],{"class":38},[28,168042,151685],{"class":127},[28,168044,51693],{"class":38},[28,168046,1386],{"class":60},[28,168048,5192],{"class":38},[28,168050,168051,168053,168055,168057,168059,168061,168063,168065,168067,168069,168071,168073,168075],{"class":30,"line":84},[28,168052,148598],{"class":38},[28,168054,62935],{"class":127},[28,168056,51693],{"class":38},[28,168058,151149],{"class":127},[28,168060,12697],{"class":38},[28,168062,69380],{"class":127},[28,168064,51693],{"class":38},[28,168066,1023],{"class":60},[28,168068,12697],{"class":38},[28,168070,151685],{"class":127},[28,168072,51693],{"class":38},[28,168074,1209],{"class":60},[28,168076,5192],{"class":38},[28,168078,168079,168081,168083,168085,168087,168089,168091,168093,168095,168097,168099,168101,168103],{"class":30,"line":91},[28,168080,148598],{"class":38},[28,168082,62935],{"class":127},[28,168084,51693],{"class":38},[28,168086,159944],{"class":127},[28,168088,12697],{"class":38},[28,168090,69380],{"class":127},[28,168092,51693],{"class":38},[28,168094,1073],{"class":60},[28,168096,12697],{"class":38},[28,168098,151685],{"class":127},[28,168100,51693],{"class":38},[28,168102,1279],{"class":60},[28,168104,5192],{"class":38},[28,168106,168107],{"class":30,"line":97},[28,168108,33502],{"class":38},[28,168110,168111],{"class":30,"line":103},[28,168112,2662],{"emptyLinePlaceholder":336},[28,168114,168115],{"class":30,"line":109},[28,168116,2662],{"emptyLinePlaceholder":336},[28,168118,168119,168121,168124],{"class":30,"line":118},[28,168120,32203],{"class":34},[28,168122,168123],{"class":2225}," filter_students",[28,168125,168126],{"class":38},"(students, condition):\n",[28,168128,168129,168131,168133],{"class":30,"line":124},[28,168130,161436],{"class":38},[28,168132,54],{"class":34},[28,168134,52094],{"class":38},[28,168136,168137,168139,168141,168143],{"class":30,"line":131},[28,168138,3463],{"class":34},[28,168140,152350],{"class":38},[28,168142,26306],{"class":34},[28,168144,152355],{"class":38},[28,168146,168147,168149],{"class":30,"line":137},[28,168148,2759],{"class":34},[28,168150,168151],{"class":38}," condition(student):\n",[28,168153,168154],{"class":30,"line":143},[28,168155,168156],{"class":38},"            result.append(student)\n",[28,168158,168159,168161],{"class":30,"line":149},[28,168160,4352],{"class":34},[28,168162,167918],{"class":38},[28,168164,168165],{"class":30,"line":1890},[28,168166,2662],{"emptyLinePlaceholder":336},[28,168168,168169],{"class":30,"line":1904},[28,168170,2662],{"emptyLinePlaceholder":336},[28,168172,168173,168175,168177,168180,168182,168185,168187,168189,168191,168193],{"class":30,"line":1909},[28,168174,165914],{"class":38},[28,168176,54],{"class":34},[28,168178,168179],{"class":38}," filter_students(students, ",[28,168181,167099],{"class":34},[28,168183,168184],{"class":38}," s: s[",[28,168186,151685],{"class":127},[28,168188,4705],{"class":38},[28,168190,1972],{"class":34},[28,168192,158050],{"class":60},[28,168194,81],{"class":38},[28,168196,168197,168200,168202,168204,168206,168208,168210,168212,168214,168216],{"class":30,"line":1915},[28,168198,168199],{"class":38},"excellent ",[28,168201,54],{"class":34},[28,168203,168179],{"class":38},[28,168205,167099],{"class":34},[28,168207,168184],{"class":38},[28,168209,151685],{"class":127},[28,168211,4705],{"class":38},[28,168213,1972],{"class":34},[28,168215,158001],{"class":60},[28,168217,81],{"class":38},[28,168219,168220,168223,168225,168227,168229,168231,168233,168235,168237,168239],{"class":30,"line":1936},[28,168221,168222],{"class":38},"under_age ",[28,168224,54],{"class":34},[28,168226,168179],{"class":38},[28,168228,167099],{"class":34},[28,168230,168184],{"class":38},[28,168232,69380],{"class":127},[28,168234,4705],{"class":38},[28,168236,1307],{"class":34},[28,168238,156498],{"class":60},[28,168240,81],{"class":38},[28,168242,168243],{"class":30,"line":1941},[28,168244,2662],{"emptyLinePlaceholder":336},[28,168246,168247,168249],{"class":30,"line":1955},[28,168248,30675],{"class":60},[28,168250,168251],{"class":38},"(passed)\n",[28,168253,168254,168256],{"class":30,"line":1960},[28,168255,30675],{"class":60},[28,168257,168258],{"class":38},"(excellent)\n",[28,168260,168261,168263],{"class":30,"line":1989},[28,168262,30675],{"class":60},[28,168264,168265],{"class":38},"(under_age)\n",[351,168267,168269],{"id":168268},"_715-易错点","7.15 易错点",[363,168271,168272,168275,168283,168288,168299],{},[366,168273,168274],{},"默认参数不要写可变对象。",[366,168276,168277,168279,168280,168282],{},[25,168278,166745],{}," 是元组，",[25,168281,166860],{}," 是字典。",[366,168284,168285,168287],{},[25,168286,167099],{}," 只适合简单表达式。",[366,168289,168290,101231,168292,168294,168295,168298],{},[25,168291,74300],{},[25,168293,80307],{}," 的结果是迭代器，常用 ",[25,168296,168297],{},"list()"," 转换查看。",[366,168300,168301],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[351,168303,168305],{"id":168304},"_716-本章练习","7.16 本章练习",[363,168307,168308,168315,168321,168326,168331],{},[366,168309,168310,168311,168314],{},"写函数 ",[25,168312,168313],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[366,168316,168310,168317,168320],{},[25,168318,168319],{},"print_user(**kwargs)","，输出用户所有字段。",[366,168322,104579,168323,168325],{},[25,168324,167099],{}," 对学生列表按年龄排序。",[366,168327,104579,168328,168330],{},[25,168329,80307],{}," 找出成绩不及格的学生。",[366,168332,168333],{},"写一个装饰器，统计函数执行前后的提示信息。",[328,168335,168336],{},"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":23,"searchDepth":48,"depth":48,"links":168338},[168339,168340,168341,168342,168343,168344,168348,168349,168350,168351,168356,168357,168358,168359,168360,168361],{"id":166197,"depth":48,"text":166198},{"id":166311,"depth":48,"text":166312},{"id":166400,"depth":48,"text":166401},{"id":166462,"depth":48,"text":166463},{"id":166608,"depth":48,"text":166609},{"id":166735,"depth":48,"text":166736,"children":168345},[168346,168347],{"id":166739,"depth":84,"text":166740},{"id":166854,"depth":84,"text":166855},{"id":166935,"depth":48,"text":166936},{"id":167093,"depth":48,"text":167094},{"id":167261,"depth":48,"text":167262},{"id":167343,"depth":48,"text":167344,"children":168352},[168353,168354,168355],{"id":167347,"depth":84,"text":167348},{"id":167418,"depth":84,"text":167419},{"id":167495,"depth":84,"text":167496},{"id":167620,"depth":48,"text":167621},{"id":167710,"depth":48,"text":167711},{"id":167841,"depth":48,"text":167842},{"id":167991,"depth":48,"text":167992},{"id":168268,"depth":48,"text":168269},{"id":168304,"depth":48,"text":168305},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166189,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168368,"title":168369,"body":168370,"description":333,"extension":334,"meta":170889,"navigation":336,"path":170890,"seo":170891,"stem":170892,"__hash__":170893},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168371,"toc":170864},[168372,168375,168379,168382,168385,168416,168420,168424,168427,168454,168458,168461,168512,168515,168530,168533,168568,168572,168574,168598,168601,168661,168665,168669,168672,168729,168732,168752,168756,168759,168822,168826,168829,168885,168892,168916,168920,168923,168986,168990,168995,169046,169049,169053,169058,169125,169128,169210,169214,169219,169270,169273,169277,169280,169283,169291,169294,169340,169343,169389,169393,169399,169443,169446,169492,169495,169535,169538,169599,169603,169606,169696,169699,169841,169844,169911,169915,169918,169921,170062,170065,170143,170146,170322,170326,170328,170339,170341,170540,170544,170788,170792,170826,170830,170861],[10,168373,168369],{"id":168374},"_8-文件操作",[351,168376,168378],{"id":168377},"_81-文件操作的意义","8.1 文件操作的意义",[14,168380,168381],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168383,168384],{},"常见文件类型：",[363,168386,168387,168393,168399,168405,168411],{},[366,168388,168389,168392],{},[25,168390,168391],{},".txt","：普通文本。",[366,168394,168395,168398],{},[25,168396,168397],{},".csv","：表格文本。",[366,168400,168401,168404],{},[25,168402,168403],{},".json","：结构化数据。",[366,168406,168407,168410],{},[25,168408,168409],{},".log","：日志文件。",[366,168412,168413,168415],{},[25,168414,146565],{},"：Python 源代码。",[351,168417,168419],{"id":168418},"_82-路径","8.2 路径",[380,168421,168423],{"id":168422},"_821-相对路径","8.2.1 相对路径",[14,168425,168426],{},"相对当前运行目录：",[18,168428,168430],{"className":20,"code":168429,"language":22,"meta":23,"style":23},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[25,168431,168432],{"__ignoreMap":23},[28,168433,168434,168436,168438,168440,168442,168444,168446,168448,168450,168452],{"class":30,"line":31},[28,168435,87171],{"class":60},[28,168437,413],{"class":38},[28,168439,147009],{"class":127},[28,168441,12697],{"class":38},[28,168443,147014],{"class":127},[28,168445,12697],{"class":38},[28,168447,147019],{"class":5478},[28,168449,54],{"class":34},[28,168451,147024],{"class":127},[28,168453,81],{"class":38},[380,168455,168457],{"id":168456},"_822-绝对路径","8.2.2 绝对路径",[14,168459,168460],{},"从根目录或盘符开始：",[18,168462,168464],{"className":20,"code":168463,"language":22,"meta":23,"style":23},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[25,168465,168466,168489],{"__ignoreMap":23},[28,168467,168468,168470,168472,168475,168477,168479,168481,168483,168485,168487],{"class":30,"line":31},[28,168469,87171],{"class":60},[28,168471,413],{"class":38},[28,168473,168474],{"class":127},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[28,168476,12697],{"class":38},[28,168478,147014],{"class":127},[28,168480,12697],{"class":38},[28,168482,147019],{"class":5478},[28,168484,54],{"class":34},[28,168486,147024],{"class":127},[28,168488,81],{"class":38},[28,168490,168491,168493,168495,168498,168500,168502,168504,168506,168508,168510],{"class":30,"line":48},[28,168492,87171],{"class":60},[28,168494,413],{"class":38},[28,168496,168497],{"class":127},"\"D:\u002Fdata\u002Fdata.txt\"",[28,168499,12697],{"class":38},[28,168501,147014],{"class":127},[28,168503,12697],{"class":38},[28,168505,147019],{"class":5478},[28,168507,54],{"class":34},[28,168509,147024],{"class":127},[28,168511,81],{"class":38},[14,168513,168514],{},"Windows 路径建议写成：",[18,168516,168518],{"className":20,"code":168517,"language":22,"meta":23,"style":23},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[25,168519,168520],{"__ignoreMap":23},[28,168521,168522,168525,168527],{"class":30,"line":31},[28,168523,168524],{"class":38},"path ",[28,168526,54],{"class":34},[28,168528,168529],{"class":127}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168531,168532],{},"或原始字符串：",[18,168534,168536],{"className":20,"code":168535,"language":22,"meta":23,"style":23},"path = r\"D:\\data\\data.txt\"\n",[25,168537,168538],{"__ignoreMap":23},[28,168539,168540,168542,168544,168546,168548,168551,168554,168557,168559,168561,168563,168566],{"class":30,"line":31},[28,168541,168524],{"class":38},[28,168543,54],{"class":34},[28,168545,17383],{"class":34},[28,168547,654],{"class":127},[28,168549,168550],{"class":48233},"D:",[28,168552,168553],{"class":60},"\\d",[28,168555,168556],{"class":48233},"ata",[28,168558,168553],{"class":60},[28,168560,168556],{"class":48233},[28,168562,956],{"class":60},[28,168564,168565],{"class":48233},"txt",[28,168567,25396],{"class":127},[351,168569,168571],{"id":168570},"_83-open函数","8.3 open函数",[14,168573,5443],{},[18,168575,168577],{"className":20,"code":168576,"language":22,"meta":23,"style":23},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[25,168578,168579],{"__ignoreMap":23},[28,168580,168581,168583,168585,168587,168590,168592,168594,168596],{"class":30,"line":31},[28,168582,45610],{"class":5478},[28,168584,13826],{"class":34},[28,168586,147004],{"class":60},[28,168588,168589],{"class":38},"(文件路径, 打开模式, ",[28,168591,147019],{"class":5478},[28,168593,54],{"class":34},[28,168595,147024],{"class":127},[28,168597,81],{"class":38},[14,168599,168600],{},"常见模式：",[543,168602,168603,168612],{},[546,168604,168605],{},[549,168606,168607,168610],{},[552,168608,168609],{},"模式",[552,168611,26132],{},[590,168613,168614,168623,168632,168641,168651],{},[549,168615,168616,168620],{},[595,168617,168618],{},[25,168619,1068],{},[595,168621,168622],{},"只读，文件不存在会报错",[549,168624,168625,168629],{},[595,168626,168627],{},[25,168628,1193],{},[595,168630,168631],{},"只写，文件不存在会创建，存在会清空",[549,168633,168634,168638],{},[595,168635,168636],{},[25,168637,51],{},[595,168639,168640],{},"追加，文件不存在会创建",[549,168642,168643,168648],{},[595,168644,168645],{},[25,168646,168647],{},"rb",[595,168649,168650],{},"二进制只读",[549,168652,168653,168658],{},[595,168654,168655],{},[25,168656,168657],{},"wb",[595,168659,168660],{},"二进制只写",[351,168662,168664],{"id":168663},"_84-读取文件","8.4 读取文件",[380,168666,168668],{"id":168667},"_841-read","8.4.1 read",[14,168670,168671],{},"一次读取全部内容：",[18,168673,168675],{"className":20,"code":168674,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[25,168676,168677,168703,168715,168722],{"__ignoreMap":23},[28,168678,168679,168681,168683,168685,168687,168689,168691,168693,168695,168697,168699,168701],{"class":30,"line":31},[28,168680,45610],{"class":5478},[28,168682,13826],{"class":34},[28,168684,147004],{"class":60},[28,168686,413],{"class":38},[28,168688,147009],{"class":127},[28,168690,12697],{"class":38},[28,168692,147014],{"class":127},[28,168694,12697],{"class":38},[28,168696,147019],{"class":5478},[28,168698,54],{"class":34},[28,168700,147024],{"class":127},[28,168702,81],{"class":38},[28,168704,168705,168708,168710,168712],{"class":30,"line":48},[28,168706,168707],{"class":38},"content ",[28,168709,54],{"class":34},[28,168711,148366],{"class":5478},[28,168713,168714],{"class":38},".read()\n",[28,168716,168717,168719],{"class":30,"line":84},[28,168718,30675],{"class":60},[28,168720,168721],{"class":38},"(content)\n",[28,168723,168724,168726],{"class":30,"line":91},[28,168725,45610],{"class":5478},[28,168727,168728],{"class":38},".close()\n",[14,168730,168731],{},"可以指定读取字符数：",[18,168733,168735],{"className":20,"code":168734,"language":22,"meta":23,"style":23},"content = file.read(10)\n",[25,168736,168737],{"__ignoreMap":23},[28,168738,168739,168741,168743,168745,168748,168750],{"class":30,"line":31},[28,168740,168707],{"class":38},[28,168742,54],{"class":34},[28,168744,148366],{"class":5478},[28,168746,168747],{"class":38},".read(",[28,168749,845],{"class":60},[28,168751,81],{"class":38},[380,168753,168755],{"id":168754},"_842-readline","8.4.2 readline",[14,168757,168758],{},"一次读取一行：",[18,168760,168762],{"className":20,"code":168761,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[25,168763,168764,168790,168794,168805,168812,168816],{"__ignoreMap":23},[28,168765,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788],{"class":30,"line":31},[28,168767,45610],{"class":5478},[28,168769,13826],{"class":34},[28,168771,147004],{"class":60},[28,168773,413],{"class":38},[28,168775,147009],{"class":127},[28,168777,12697],{"class":38},[28,168779,147014],{"class":127},[28,168781,12697],{"class":38},[28,168783,147019],{"class":5478},[28,168785,54],{"class":34},[28,168787,147024],{"class":127},[28,168789,81],{"class":38},[28,168791,168792],{"class":30,"line":48},[28,168793,2662],{"emptyLinePlaceholder":336},[28,168795,168796,168798,168800,168802],{"class":30,"line":84},[28,168797,147465],{"class":38},[28,168799,54],{"class":34},[28,168801,148366],{"class":5478},[28,168803,168804],{"class":38},".readline()\n",[28,168806,168807,168809],{"class":30,"line":91},[28,168808,30675],{"class":60},[28,168810,168811],{"class":38},"(line)\n",[28,168813,168814],{"class":30,"line":97},[28,168815,2662],{"emptyLinePlaceholder":336},[28,168817,168818,168820],{"class":30,"line":103},[28,168819,45610],{"class":5478},[28,168821,168728],{"class":38},[380,168823,168825],{"id":168824},"_843-readlines","8.4.3 readlines",[14,168827,168828],{},"读取所有行，返回列表：",[18,168830,168832],{"className":20,"code":168831,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[25,168833,168834,168860,168872,168879],{"__ignoreMap":23},[28,168835,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858],{"class":30,"line":31},[28,168837,45610],{"class":5478},[28,168839,13826],{"class":34},[28,168841,147004],{"class":60},[28,168843,413],{"class":38},[28,168845,147009],{"class":127},[28,168847,12697],{"class":38},[28,168849,147014],{"class":127},[28,168851,12697],{"class":38},[28,168853,147019],{"class":5478},[28,168855,54],{"class":34},[28,168857,147024],{"class":127},[28,168859,81],{"class":38},[28,168861,168862,168865,168867,168869],{"class":30,"line":48},[28,168863,168864],{"class":38},"lines ",[28,168866,54],{"class":34},[28,168868,148366],{"class":5478},[28,168870,168871],{"class":38},".readlines()\n",[28,168873,168874,168876],{"class":30,"line":84},[28,168875,30675],{"class":60},[28,168877,168878],{"class":38},"(lines)\n",[28,168880,168881,168883],{"class":30,"line":91},[28,168882,45610],{"class":5478},[28,168884,168728],{"class":38},[14,168886,168887,168888,168891],{},"每一行通常带有换行符，可以用 ",[25,168889,168890],{},"strip()"," 去掉：",[18,168893,168895],{"className":20,"code":168894,"language":22,"meta":23,"style":23},"for line in lines:\n    print(line.strip())\n",[25,168896,168897,168909],{"__ignoreMap":23},[28,168898,168899,168901,168904,168906],{"class":30,"line":31},[28,168900,3287],{"class":34},[28,168902,168903],{"class":38}," line ",[28,168905,26306],{"class":34},[28,168907,168908],{"class":38}," lines:\n",[28,168910,168911,168913],{"class":30,"line":48},[28,168912,31559],{"class":60},[28,168914,168915],{"class":38},"(line.strip())\n",[380,168917,168919],{"id":168918},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168921,168922],{},"推荐读取大文件时使用：",[18,168924,168926],{"className":20,"code":168925,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[25,168927,168928,168954,168958,168970,168976,168980],{"__ignoreMap":23},[28,168929,168930,168932,168934,168936,168938,168940,168942,168944,168946,168948,168950,168952],{"class":30,"line":31},[28,168931,45610],{"class":5478},[28,168933,13826],{"class":34},[28,168935,147004],{"class":60},[28,168937,413],{"class":38},[28,168939,147009],{"class":127},[28,168941,12697],{"class":38},[28,168943,147014],{"class":127},[28,168945,12697],{"class":38},[28,168947,147019],{"class":5478},[28,168949,54],{"class":34},[28,168951,147024],{"class":127},[28,168953,81],{"class":38},[28,168955,168956],{"class":30,"line":48},[28,168957,2662],{"emptyLinePlaceholder":336},[28,168959,168960,168962,168964,168966,168968],{"class":30,"line":84},[28,168961,3287],{"class":34},[28,168963,168903],{"class":38},[28,168965,26306],{"class":34},[28,168967,148366],{"class":5478},[28,168969,4001],{"class":38},[28,168971,168972,168974],{"class":30,"line":91},[28,168973,31559],{"class":60},[28,168975,168915],{"class":38},[28,168977,168978],{"class":30,"line":97},[28,168979,2662],{"emptyLinePlaceholder":336},[28,168981,168982,168984],{"class":30,"line":103},[28,168983,45610],{"class":5478},[28,168985,168728],{"class":38},[351,168987,168989],{"id":168988},"_85-with语句","8.5 with语句",[14,168991,168992,168994],{},[25,168993,108046],{}," 会自动关闭文件，推荐使用。",[18,168996,168998],{"className":20,"code":168997,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[25,168999,169000,169030,169040],{"__ignoreMap":23},[28,169001,169002,169004,169006,169008,169010,169012,169014,169016,169018,169020,169022,169024,169026,169028],{"class":30,"line":31},[28,169003,108046],{"class":34},[28,169005,147004],{"class":60},[28,169007,413],{"class":38},[28,169009,147009],{"class":127},[28,169011,12697],{"class":38},[28,169013,147014],{"class":127},[28,169015,12697],{"class":38},[28,169017,147019],{"class":5478},[28,169019,54],{"class":34},[28,169021,147024],{"class":127},[28,169023,13976],{"class":38},[28,169025,42],{"class":34},[28,169027,148366],{"class":5478},[28,169029,4001],{"class":38},[28,169031,169032,169034,169036,169038],{"class":30,"line":48},[28,169033,147036],{"class":38},[28,169035,54],{"class":34},[28,169037,148366],{"class":5478},[28,169039,168714],{"class":38},[28,169041,169042,169044],{"class":30,"line":84},[28,169043,31559],{"class":60},[28,169045,168721],{"class":38},[14,169047,169048],{},"等价于打开文件、读取、最后关闭，但更安全。",[351,169050,169052],{"id":169051},"_86-写入文件","8.6 写入文件",[14,169054,169055,169057],{},[25,169056,1193],{}," 模式会清空原文件。",[18,169059,169061],{"className":20,"code":169060,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[25,169062,169063,169093,169110],{"__ignoreMap":23},[28,169064,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091],{"class":30,"line":31},[28,169066,108046],{"class":34},[28,169068,147004],{"class":60},[28,169070,413],{"class":38},[28,169072,147009],{"class":127},[28,169074,12697],{"class":38},[28,169076,152189],{"class":127},[28,169078,12697],{"class":38},[28,169080,147019],{"class":5478},[28,169082,54],{"class":34},[28,169084,147024],{"class":127},[28,169086,13976],{"class":38},[28,169088,42],{"class":34},[28,169090,148366],{"class":5478},[28,169092,4001],{"class":38},[28,169094,169095,169098,169101,169104,169106,169108],{"class":30,"line":48},[28,169096,169097],{"class":5478},"    file",[28,169099,169100],{"class":38},".write(",[28,169102,169103],{"class":127},"\"hello",[28,169105,156738],{"class":60},[28,169107,654],{"class":127},[28,169109,81],{"class":38},[28,169111,169112,169114,169116,169119,169121,169123],{"class":30,"line":84},[28,169113,169097],{"class":5478},[28,169115,169100],{"class":38},[28,169117,169118],{"class":127},"\"python",[28,169120,156738],{"class":60},[28,169122,654],{"class":127},[28,169124,81],{"class":38},[14,169126,169127],{},"写入多行：",[18,169129,169131],{"className":20,"code":169130,"language":22,"meta":23,"style":23},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[25,169132,169133,169168,169172,169203],{"__ignoreMap":23},[28,169134,169135,169137,169139,169141,169144,169146,169148,169150,169153,169155,169157,169159,169162,169164,169166],{"class":30,"line":31},[28,169136,168864],{"class":38},[28,169138,54],{"class":34},[28,169140,52482],{"class":38},[28,169142,169143],{"class":127},"\"小明,18",[28,169145,156738],{"class":60},[28,169147,654],{"class":127},[28,169149,12697],{"class":38},[28,169151,169152],{"class":127},"\"小红,17",[28,169154,156738],{"class":60},[28,169156,654],{"class":127},[28,169158,12697],{"class":38},[28,169160,169161],{"class":127},"\"小刚,19",[28,169163,156738],{"class":60},[28,169165,654],{"class":127},[28,169167,33502],{"class":38},[28,169169,169170],{"class":30,"line":48},[28,169171,2662],{"emptyLinePlaceholder":336},[28,169173,169174,169176,169178,169180,169183,169185,169187,169189,169191,169193,169195,169197,169199,169201],{"class":30,"line":84},[28,169175,108046],{"class":34},[28,169177,147004],{"class":60},[28,169179,413],{"class":38},[28,169181,169182],{"class":127},"\"students.txt\"",[28,169184,12697],{"class":38},[28,169186,152189],{"class":127},[28,169188,12697],{"class":38},[28,169190,147019],{"class":5478},[28,169192,54],{"class":34},[28,169194,147024],{"class":127},[28,169196,13976],{"class":38},[28,169198,42],{"class":34},[28,169200,148366],{"class":5478},[28,169202,4001],{"class":38},[28,169204,169205,169207],{"class":30,"line":91},[28,169206,169097],{"class":5478},[28,169208,169209],{"class":38},".writelines(lines)\n",[351,169211,169213],{"id":169212},"_87-追加文件","8.7 追加文件",[14,169215,169216,169218],{},[25,169217,51],{}," 模式不会清空原内容，而是在末尾追加。",[18,169220,169222],{"className":20,"code":169221,"language":22,"meta":23,"style":23},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[25,169223,169224,169255],{"__ignoreMap":23},[28,169225,169226,169228,169230,169232,169235,169237,169239,169241,169243,169245,169247,169249,169251,169253],{"class":30,"line":31},[28,169227,108046],{"class":34},[28,169229,147004],{"class":60},[28,169231,413],{"class":38},[28,169233,169234],{"class":127},"\"log.txt\"",[28,169236,12697],{"class":38},[28,169238,165538],{"class":127},[28,169240,12697],{"class":38},[28,169242,147019],{"class":5478},[28,169244,54],{"class":34},[28,169246,147024],{"class":127},[28,169248,13976],{"class":38},[28,169250,42],{"class":34},[28,169252,148366],{"class":5478},[28,169254,4001],{"class":38},[28,169256,169257,169259,169261,169264,169266,169268],{"class":30,"line":48},[28,169258,169097],{"class":5478},[28,169260,169100],{"class":38},[28,169262,169263],{"class":127},"\"程序启动",[28,169265,156738],{"class":60},[28,169267,654],{"class":127},[28,169269,81],{"class":38},[14,169271,169272],{},"日志类文件常用追加模式。",[351,169274,169276],{"id":169275},"_88-文件编码","8.8 文件编码",[14,169278,169279],{},"编码决定文字如何保存为字节。",[14,169281,169282],{},"常见编码：",[363,169284,169285,169288],{},[366,169286,169287],{},"UTF-8：推荐。",[366,169289,169290],{},"GBK：部分 Windows 中文文件常见。",[14,169292,169293],{},"读取文件乱码时，可以尝试：",[18,169295,169297],{"className":20,"code":169296,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[25,169298,169299,169330],{"__ignoreMap":23},[28,169300,169301,169303,169305,169307,169309,169311,169313,169315,169317,169319,169322,169324,169326,169328],{"class":30,"line":31},[28,169302,108046],{"class":34},[28,169304,147004],{"class":60},[28,169306,413],{"class":38},[28,169308,147009],{"class":127},[28,169310,12697],{"class":38},[28,169312,147014],{"class":127},[28,169314,12697],{"class":38},[28,169316,147019],{"class":5478},[28,169318,54],{"class":34},[28,169320,169321],{"class":127},"\"gbk\"",[28,169323,13976],{"class":38},[28,169325,42],{"class":34},[28,169327,148366],{"class":5478},[28,169329,4001],{"class":38},[28,169331,169332,169334,169336,169338],{"class":30,"line":48},[28,169333,147036],{"class":38},[28,169335,54],{"class":34},[28,169337,148366],{"class":5478},[28,169339,168714],{"class":38},[14,169341,169342],{},"写文件时建议统一 UTF-8：",[18,169344,169346],{"className":20,"code":169345,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[25,169347,169348,169378],{"__ignoreMap":23},[28,169349,169350,169352,169354,169356,169358,169360,169362,169364,169366,169368,169370,169372,169374,169376],{"class":30,"line":31},[28,169351,108046],{"class":34},[28,169353,147004],{"class":60},[28,169355,413],{"class":38},[28,169357,147009],{"class":127},[28,169359,12697],{"class":38},[28,169361,152189],{"class":127},[28,169363,12697],{"class":38},[28,169365,147019],{"class":5478},[28,169367,54],{"class":34},[28,169369,147024],{"class":127},[28,169371,13976],{"class":38},[28,169373,42],{"class":34},[28,169375,148366],{"class":5478},[28,169377,4001],{"class":38},[28,169379,169380,169382,169384,169387],{"class":30,"line":48},[28,169381,169097],{"class":5478},[28,169383,169100],{"class":38},[28,169385,169386],{"class":127},"\"中文内容\"",[28,169388,81],{"class":38},[351,169390,169392],{"id":169391},"_89-pathlib","8.9 pathlib",[14,169394,169395,169398],{},[25,169396,169397],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[18,169400,169402],{"className":20,"code":169401,"language":22,"meta":23,"style":23},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[25,169403,169404,169414,169418,169436],{"__ignoreMap":23},[28,169405,169406,169408,169410,169412],{"class":30,"line":31},[28,169407,30997],{"class":34},[28,169409,108524],{"class":38},[28,169411,35],{"class":34},[28,169413,108529],{"class":38},[28,169415,169416],{"class":30,"line":48},[28,169417,2662],{"emptyLinePlaceholder":336},[28,169419,169420,169422,169424,169426,169429,169431,169433],{"class":30,"line":84},[28,169421,168524],{"class":38},[28,169423,54],{"class":34},[28,169425,108758],{"class":38},[28,169427,169428],{"class":127},"\"data\"",[28,169430,13976],{"class":38},[28,169432,982],{"class":34},[28,169434,169435],{"class":127}," \"students.txt\"\n",[28,169437,169438,169440],{"class":30,"line":91},[28,169439,30675],{"class":60},[28,169441,169442],{"class":38},"(path)\n",[14,169444,169445],{},"创建目录：",[18,169447,169449],{"className":20,"code":169448,"language":22,"meta":23,"style":23},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[25,169450,169451,169461,169465,169478],{"__ignoreMap":23},[28,169452,169453,169455,169457,169459],{"class":30,"line":31},[28,169454,30997],{"class":34},[28,169456,108524],{"class":38},[28,169458,35],{"class":34},[28,169460,108529],{"class":38},[28,169462,169463],{"class":30,"line":48},[28,169464,2662],{"emptyLinePlaceholder":336},[28,169466,169467,169470,169472,169474,169476],{"class":30,"line":84},[28,169468,169469],{"class":38},"data_dir ",[28,169471,54],{"class":34},[28,169473,108758],{"class":38},[28,169475,169428],{"class":127},[28,169477,81],{"class":38},[28,169479,169480,169483,169486,169488,169490],{"class":30,"line":91},[28,169481,169482],{"class":38},"data_dir.mkdir(",[28,169484,169485],{"class":5478},"exist_ok",[28,169487,54],{"class":34},[28,169489,31733],{"class":60},[28,169491,81],{"class":38},[14,169493,169494],{},"判断文件是否存在：",[18,169496,169498],{"className":20,"code":169497,"language":22,"meta":23,"style":23},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[25,169499,169500,169513,169517,169524],{"__ignoreMap":23},[28,169501,169502,169504,169506,169508,169511],{"class":30,"line":31},[28,169503,168524],{"class":38},[28,169505,54],{"class":34},[28,169507,108758],{"class":38},[28,169509,169510],{"class":127},"\"data\u002Fstudents.txt\"",[28,169512,81],{"class":38},[28,169514,169515],{"class":30,"line":48},[28,169516,2662],{"emptyLinePlaceholder":336},[28,169518,169519,169521],{"class":30,"line":84},[28,169520,1796],{"class":34},[28,169522,169523],{"class":38}," path.exists():\n",[28,169525,169526,169528,169530,169533],{"class":30,"line":91},[28,169527,31559],{"class":60},[28,169529,413],{"class":38},[28,169531,169532],{"class":127},"\"文件存在\"",[28,169534,81],{"class":38},[14,169536,169537],{},"读写文本：",[18,169539,169541],{"className":20,"code":169540,"language":22,"meta":23,"style":23},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[25,169542,169543,169555,169559,169576,169593],{"__ignoreMap":23},[28,169544,169545,169547,169549,169551,169553],{"class":30,"line":31},[28,169546,168524],{"class":38},[28,169548,54],{"class":34},[28,169550,108758],{"class":38},[28,169552,147009],{"class":127},[28,169554,81],{"class":38},[28,169556,169557],{"class":30,"line":48},[28,169558,2662],{"emptyLinePlaceholder":336},[28,169560,169561,169564,169566,169568,169570,169572,169574],{"class":30,"line":84},[28,169562,169563],{"class":38},"path.write_text(",[28,169565,146089],{"class":127},[28,169567,12697],{"class":38},[28,169569,147019],{"class":5478},[28,169571,54],{"class":34},[28,169573,147024],{"class":127},[28,169575,81],{"class":38},[28,169577,169578,169580,169582,169585,169587,169589,169591],{"class":30,"line":91},[28,169579,168707],{"class":38},[28,169581,54],{"class":34},[28,169583,169584],{"class":38}," path.read_text(",[28,169586,147019],{"class":5478},[28,169588,54],{"class":34},[28,169590,147024],{"class":127},[28,169592,81],{"class":38},[28,169594,169595,169597],{"class":30,"line":97},[28,169596,30675],{"class":60},[28,169598,168721],{"class":38},[351,169600,169602],{"id":169601},"_810-json文件","8.10 JSON文件",[14,169604,169605],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[18,169607,169609],{"className":20,"code":169608,"language":22,"meta":23,"style":23},"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",[25,169610,169611,169617,169621,169629,169639,169649,169657,169661,169665,169690],{"__ignoreMap":23},[28,169612,169613,169615],{"class":30,"line":31},[28,169614,35],{"class":34},[28,169616,147304],{"class":38},[28,169618,169619],{"class":30,"line":48},[28,169620,2662],{"emptyLinePlaceholder":336},[28,169622,169623,169625,169627],{"class":30,"line":84},[28,169624,149694],{"class":38},[28,169626,54],{"class":34},[28,169628,15834],{"class":38},[28,169630,169631,169633,169635,169637],{"class":30,"line":91},[28,169632,147233],{"class":127},[28,169634,51693],{"class":38},[28,169636,150101],{"class":127},[28,169638,31723],{"class":38},[28,169640,169641,169643,169645,169647],{"class":30,"line":97},[28,169642,164750],{"class":127},[28,169644,51693],{"class":38},[28,169646,1048],{"class":60},[28,169648,31723],{"class":38},[28,169650,169651,169653,169655],{"class":30,"line":103},[28,169652,164761],{"class":127},[28,169654,51693],{"class":38},[28,169656,164766],{"class":60},[28,169658,169659],{"class":30,"line":109},[28,169660,1830],{"class":38},[28,169662,169663],{"class":30,"line":118},[28,169664,2662],{"emptyLinePlaceholder":336},[28,169666,169667,169669,169671,169674,169676,169678,169680,169682,169684,169686,169688],{"class":30,"line":124},[28,169668,156657],{"class":38},[28,169670,54],{"class":34},[28,169672,169673],{"class":38}," json.dumps(student, ",[28,169675,147350],{"class":5478},[28,169677,54],{"class":34},[28,169679,34243],{"class":60},[28,169681,12697],{"class":38},[28,169683,152225],{"class":5478},[28,169685,54],{"class":34},[28,169687,211],{"class":60},[28,169689,81],{"class":38},[28,169691,169692,169694],{"class":30,"line":131},[28,169693,30675],{"class":60},[28,169695,164284],{"class":38},[14,169697,169698],{},"写入 JSON 文件：",[18,169700,169702],{"className":20,"code":169701,"language":22,"meta":23,"style":23},"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",[25,169703,169704,169710,169714,169722,169750,169778,169782,169786,169816],{"__ignoreMap":23},[28,169705,169706,169708],{"class":30,"line":31},[28,169707,35],{"class":34},[28,169709,147304],{"class":38},[28,169711,169712],{"class":30,"line":48},[28,169713,2662],{"emptyLinePlaceholder":336},[28,169715,169716,169718,169720],{"class":30,"line":84},[28,169717,159929],{"class":38},[28,169719,54],{"class":34},[28,169721,55703],{"class":38},[28,169723,169724,169726,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746,169748],{"class":30,"line":91},[28,169725,148598],{"class":38},[28,169727,62935],{"class":127},[28,169729,51693],{"class":38},[28,169731,150101],{"class":127},[28,169733,12697],{"class":38},[28,169735,69380],{"class":127},[28,169737,51693],{"class":38},[28,169739,1048],{"class":60},[28,169741,12697],{"class":38},[28,169743,151685],{"class":127},[28,169745,51693],{"class":38},[28,169747,1386],{"class":60},[28,169749,5192],{"class":38},[28,169751,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770,169772,169774,169776],{"class":30,"line":97},[28,169753,148598],{"class":38},[28,169755,62935],{"class":127},[28,169757,51693],{"class":38},[28,169759,151149],{"class":127},[28,169761,12697],{"class":38},[28,169763,69380],{"class":127},[28,169765,51693],{"class":38},[28,169767,1023],{"class":60},[28,169769,12697],{"class":38},[28,169771,151685],{"class":127},[28,169773,51693],{"class":38},[28,169775,1209],{"class":60},[28,169777,5192],{"class":38},[28,169779,169780],{"class":30,"line":103},[28,169781,33502],{"class":38},[28,169783,169784],{"class":30,"line":109},[28,169785,2662],{"emptyLinePlaceholder":336},[28,169787,169788,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812,169814],{"class":30,"line":118},[28,169789,108046],{"class":34},[28,169791,147004],{"class":60},[28,169793,413],{"class":38},[28,169795,152044],{"class":127},[28,169797,12697],{"class":38},[28,169799,152189],{"class":127},[28,169801,12697],{"class":38},[28,169803,147019],{"class":5478},[28,169805,54],{"class":34},[28,169807,147024],{"class":127},[28,169809,13976],{"class":38},[28,169811,42],{"class":34},[28,169813,148366],{"class":5478},[28,169815,4001],{"class":38},[28,169817,169818,169821,169823,169825,169827,169829,169831,169833,169835,169837,169839],{"class":30,"line":124},[28,169819,169820],{"class":38},"    json.dump(students, ",[28,169822,45610],{"class":5478},[28,169824,12697],{"class":38},[28,169826,147350],{"class":5478},[28,169828,54],{"class":34},[28,169830,34243],{"class":60},[28,169832,12697],{"class":38},[28,169834,152225],{"class":5478},[28,169836,54],{"class":34},[28,169838,211],{"class":60},[28,169840,81],{"class":38},[14,169842,169843],{},"读取 JSON 文件：",[18,169845,169847],{"className":20,"code":169846,"language":22,"meta":23,"style":23},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[25,169848,169849,169855,169859,169889,169901,169905],{"__ignoreMap":23},[28,169850,169851,169853],{"class":30,"line":31},[28,169852,35],{"class":34},[28,169854,147304],{"class":38},[28,169856,169857],{"class":30,"line":48},[28,169858,2662],{"emptyLinePlaceholder":336},[28,169860,169861,169863,169865,169867,169869,169871,169873,169875,169877,169879,169881,169883,169885,169887],{"class":30,"line":84},[28,169862,108046],{"class":34},[28,169864,147004],{"class":60},[28,169866,413],{"class":38},[28,169868,152044],{"class":127},[28,169870,12697],{"class":38},[28,169872,147014],{"class":127},[28,169874,12697],{"class":38},[28,169876,147019],{"class":5478},[28,169878,54],{"class":34},[28,169880,147024],{"class":127},[28,169882,13976],{"class":38},[28,169884,42],{"class":34},[28,169886,148366],{"class":5478},[28,169888,4001],{"class":38},[28,169890,169891,169893,169895,169897,169899],{"class":30,"line":91},[28,169892,153250],{"class":38},[28,169894,54],{"class":34},[28,169896,148377],{"class":38},[28,169898,45610],{"class":5478},[28,169900,81],{"class":38},[28,169902,169903],{"class":30,"line":97},[28,169904,2662],{"emptyLinePlaceholder":336},[28,169906,169907,169909],{"class":30,"line":103},[28,169908,30675],{"class":60},[28,169910,165208],{"class":38},[351,169912,169914],{"id":169913},"_811-csv文件","8.11 CSV文件",[14,169916,169917],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169919,169920],{},"写入 CSV：",[18,169922,169924],{"className":20,"code":169923,"language":22,"meta":23,"style":23},"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",[25,169925,169926,169933,169937,169945,169963,169979,169995,169999,170003,170043,170057],{"__ignoreMap":23},[28,169927,169928,169930],{"class":30,"line":31},[28,169929,35],{"class":34},[28,169931,169932],{"class":38}," csv\n",[28,169934,169935],{"class":30,"line":48},[28,169936,2662],{"emptyLinePlaceholder":336},[28,169938,169939,169941,169943],{"class":30,"line":84},[28,169940,159929],{"class":38},[28,169942,54],{"class":34},[28,169944,55703],{"class":38},[28,169946,169947,169950,169952,169954,169956,169958,169961],{"class":30,"line":91},[28,169948,169949],{"class":38},"    [",[28,169951,73355],{"class":127},[28,169953,12697],{"class":38},[28,169955,73388],{"class":127},[28,169957,12697],{"class":38},[28,169959,169960],{"class":127},"\"成绩\"",[28,169962,88092],{"class":38},[28,169964,169965,169967,169969,169971,169973,169975,169977],{"class":30,"line":97},[28,169966,169949],{"class":38},[28,169968,150101],{"class":127},[28,169970,12697],{"class":38},[28,169972,1048],{"class":60},[28,169974,12697],{"class":38},[28,169976,1386],{"class":60},[28,169978,88092],{"class":38},[28,169980,169981,169983,169985,169987,169989,169991,169993],{"class":30,"line":103},[28,169982,169949],{"class":38},[28,169984,151149],{"class":127},[28,169986,12697],{"class":38},[28,169988,1023],{"class":60},[28,169990,12697],{"class":38},[28,169992,1209],{"class":60},[28,169994,88092],{"class":38},[28,169996,169997],{"class":30,"line":109},[28,169998,33502],{"class":38},[28,170000,170001],{"class":30,"line":118},[28,170002,2662],{"emptyLinePlaceholder":336},[28,170004,170005,170007,170009,170011,170014,170016,170018,170020,170022,170024,170026,170028,170031,170033,170035,170037,170039,170041],{"class":30,"line":124},[28,170006,108046],{"class":34},[28,170008,147004],{"class":60},[28,170010,413],{"class":38},[28,170012,170013],{"class":127},"\"students.csv\"",[28,170015,12697],{"class":38},[28,170017,152189],{"class":127},[28,170019,12697],{"class":38},[28,170021,147019],{"class":5478},[28,170023,54],{"class":34},[28,170025,147024],{"class":127},[28,170027,12697],{"class":38},[28,170029,170030],{"class":5478},"newline",[28,170032,54],{"class":34},[28,170034,7914],{"class":127},[28,170036,13976],{"class":38},[28,170038,42],{"class":34},[28,170040,148366],{"class":5478},[28,170042,4001],{"class":38},[28,170044,170045,170048,170050,170053,170055],{"class":30,"line":131},[28,170046,170047],{"class":38},"    writer ",[28,170049,54],{"class":34},[28,170051,170052],{"class":38}," csv.writer(",[28,170054,45610],{"class":5478},[28,170056,81],{"class":38},[28,170058,170059],{"class":30,"line":137},[28,170060,170061],{"class":38},"    writer.writerows(students)\n",[14,170063,170064],{},"读取 CSV：",[18,170066,170068],{"className":20,"code":170067,"language":22,"meta":23,"style":23},"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",[25,170069,170070,170076,170080,170110,170124,170136],{"__ignoreMap":23},[28,170071,170072,170074],{"class":30,"line":31},[28,170073,35],{"class":34},[28,170075,169932],{"class":38},[28,170077,170078],{"class":30,"line":48},[28,170079,2662],{"emptyLinePlaceholder":336},[28,170081,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108],{"class":30,"line":84},[28,170083,108046],{"class":34},[28,170085,147004],{"class":60},[28,170087,413],{"class":38},[28,170089,170013],{"class":127},[28,170091,12697],{"class":38},[28,170093,147014],{"class":127},[28,170095,12697],{"class":38},[28,170097,147019],{"class":5478},[28,170099,54],{"class":34},[28,170101,147024],{"class":127},[28,170103,13976],{"class":38},[28,170105,42],{"class":34},[28,170107,148366],{"class":5478},[28,170109,4001],{"class":38},[28,170111,170112,170115,170117,170120,170122],{"class":30,"line":91},[28,170113,170114],{"class":38},"    reader ",[28,170116,54],{"class":34},[28,170118,170119],{"class":38}," csv.reader(",[28,170121,45610],{"class":5478},[28,170123,81],{"class":38},[28,170125,170126,170128,170131,170133],{"class":30,"line":97},[28,170127,3463],{"class":34},[28,170129,170130],{"class":38}," row ",[28,170132,26306],{"class":34},[28,170134,170135],{"class":38}," reader:\n",[28,170137,170138,170140],{"class":30,"line":103},[28,170139,32707],{"class":60},[28,170141,170142],{"class":38},"(row)\n",[14,170144,170145],{},"使用字典写入：",[18,170147,170149],{"className":20,"code":170148,"language":22,"meta":23,"style":23},"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",[25,170150,170151,170157,170161,170169,170197,170225,170229,170233,170271,170292,170313,170318],{"__ignoreMap":23},[28,170152,170153,170155],{"class":30,"line":31},[28,170154,35],{"class":34},[28,170156,169932],{"class":38},[28,170158,170159],{"class":30,"line":48},[28,170160,2662],{"emptyLinePlaceholder":336},[28,170162,170163,170165,170167],{"class":30,"line":84},[28,170164,159929],{"class":38},[28,170166,54],{"class":34},[28,170168,55703],{"class":38},[28,170170,170171,170173,170175,170177,170179,170181,170183,170185,170187,170189,170191,170193,170195],{"class":30,"line":91},[28,170172,148598],{"class":38},[28,170174,62935],{"class":127},[28,170176,51693],{"class":38},[28,170178,150101],{"class":127},[28,170180,12697],{"class":38},[28,170182,69380],{"class":127},[28,170184,51693],{"class":38},[28,170186,1048],{"class":60},[28,170188,12697],{"class":38},[28,170190,151685],{"class":127},[28,170192,51693],{"class":38},[28,170194,1386],{"class":60},[28,170196,5192],{"class":38},[28,170198,170199,170201,170203,170205,170207,170209,170211,170213,170215,170217,170219,170221,170223],{"class":30,"line":97},[28,170200,148598],{"class":38},[28,170202,62935],{"class":127},[28,170204,51693],{"class":38},[28,170206,151149],{"class":127},[28,170208,12697],{"class":38},[28,170210,69380],{"class":127},[28,170212,51693],{"class":38},[28,170214,1023],{"class":60},[28,170216,12697],{"class":38},[28,170218,151685],{"class":127},[28,170220,51693],{"class":38},[28,170222,1209],{"class":60},[28,170224,5192],{"class":38},[28,170226,170227],{"class":30,"line":103},[28,170228,33502],{"class":38},[28,170230,170231],{"class":30,"line":109},[28,170232,2662],{"emptyLinePlaceholder":336},[28,170234,170235,170237,170239,170241,170243,170245,170247,170249,170251,170253,170255,170257,170259,170261,170263,170265,170267,170269],{"class":30,"line":118},[28,170236,108046],{"class":34},[28,170238,147004],{"class":60},[28,170240,413],{"class":38},[28,170242,170013],{"class":127},[28,170244,12697],{"class":38},[28,170246,152189],{"class":127},[28,170248,12697],{"class":38},[28,170250,147019],{"class":5478},[28,170252,54],{"class":34},[28,170254,147024],{"class":127},[28,170256,12697],{"class":38},[28,170258,170030],{"class":5478},[28,170260,54],{"class":34},[28,170262,7914],{"class":127},[28,170264,13976],{"class":38},[28,170266,42],{"class":34},[28,170268,148366],{"class":5478},[28,170270,4001],{"class":38},[28,170272,170273,170276,170278,170280,170282,170284,170286,170288,170290],{"class":30,"line":124},[28,170274,170275],{"class":38},"    fieldnames ",[28,170277,54],{"class":34},[28,170279,52482],{"class":38},[28,170281,62935],{"class":127},[28,170283,12697],{"class":38},[28,170285,69380],{"class":127},[28,170287,12697],{"class":38},[28,170289,151685],{"class":127},[28,170291,33502],{"class":38},[28,170293,170294,170296,170298,170301,170303,170305,170308,170310],{"class":30,"line":131},[28,170295,170047],{"class":38},[28,170297,54],{"class":34},[28,170299,170300],{"class":38}," csv.DictWriter(",[28,170302,45610],{"class":5478},[28,170304,12697],{"class":38},[28,170306,170307],{"class":5478},"fieldnames",[28,170309,54],{"class":34},[28,170311,170312],{"class":38},"fieldnames)\n",[28,170314,170315],{"class":30,"line":137},[28,170316,170317],{"class":38},"    writer.writeheader()\n",[28,170319,170320],{"class":30,"line":143},[28,170321,170061],{"class":38},[351,170323,170325],{"id":170324},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170327,123505],{},[363,170329,170330,170333,170336],{},[366,170331,170332],{},"读取文本文件。",[366,170334,170335],{},"统计每个单词出现次数。",[366,170337,170338],{},"输出出现次数最多的前 10 个单词。",[14,170340,10297],{},[18,170342,170344],{"className":20,"code":170343,"language":22,"meta":23,"style":23},"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",[25,170345,170346,170356,170360,170373,170389,170393,170403,170412,170416,170428,170448,170457,170461,170479,170483,170513,170517,170533],{"__ignoreMap":23},[28,170347,170348,170350,170352,170354],{"class":30,"line":31},[28,170349,30997],{"class":34},[28,170351,108524],{"class":38},[28,170353,35],{"class":34},[28,170355,108529],{"class":38},[28,170357,170358],{"class":30,"line":48},[28,170359,2662],{"emptyLinePlaceholder":336},[28,170361,170362,170364,170366,170368,170371],{"class":30,"line":84},[28,170363,168524],{"class":38},[28,170365,54],{"class":34},[28,170367,108758],{"class":38},[28,170369,170370],{"class":127},"\"article.txt\"",[28,170372,81],{"class":38},[28,170374,170375,170377,170379,170381,170383,170385,170387],{"class":30,"line":91},[28,170376,168707],{"class":38},[28,170378,54],{"class":34},[28,170380,169584],{"class":38},[28,170382,147019],{"class":5478},[28,170384,54],{"class":34},[28,170386,147024],{"class":127},[28,170388,81],{"class":38},[28,170390,170391],{"class":30,"line":97},[28,170392,2662],{"emptyLinePlaceholder":336},[28,170394,170395,170398,170400],{"class":30,"line":103},[28,170396,170397],{"class":38},"words ",[28,170399,54],{"class":34},[28,170401,170402],{"class":38}," content.lower().split()\n",[28,170404,170405,170408,170410],{"class":30,"line":109},[28,170406,170407],{"class":38},"counter ",[28,170409,54],{"class":34},[28,170411,88124],{"class":38},[28,170413,170414],{"class":30,"line":118},[28,170415,2662],{"emptyLinePlaceholder":336},[28,170417,170418,170420,170423,170425],{"class":30,"line":124},[28,170419,3287],{"class":34},[28,170421,170422],{"class":38}," word ",[28,170424,26306],{"class":34},[28,170426,170427],{"class":38}," words:\n",[28,170429,170430,170433,170435,170438,170441,170443,170446],{"class":30,"line":131},[28,170431,170432],{"class":38},"    word ",[28,170434,54],{"class":34},[28,170436,170437],{"class":38}," word.strip(",[28,170439,170440],{"class":127},"\".,!?;:",[28,170442,156708],{"class":60},[28,170444,170445],{"class":127},"'()[]\"",[28,170447,81],{"class":38},[28,170449,170450,170452,170454],{"class":30,"line":137},[28,170451,3363],{"class":34},[28,170453,39186],{"class":34},[28,170455,170456],{"class":38}," word:\n",[28,170458,170459],{"class":30,"line":143},[28,170460,148725],{"class":34},[28,170462,170463,170466,170468,170471,170473,170475,170477],{"class":30,"line":149},[28,170464,170465],{"class":38},"    counter[word] ",[28,170467,54],{"class":34},[28,170469,170470],{"class":38}," counter.get(word, ",[28,170472,244],{"class":60},[28,170474,13976],{"class":38},[28,170476,880],{"class":34},[28,170478,55955],{"class":60},[28,170480,170481],{"class":30,"line":1890},[28,170482,2662],{"emptyLinePlaceholder":336},[28,170484,170485,170488,170490,170492,170495,170497,170499,170501,170503,170505,170507,170509,170511],{"class":30,"line":1904},[28,170486,170487],{"class":38},"items ",[28,170489,54],{"class":34},[28,170491,163817],{"class":60},[28,170493,170494],{"class":38},"(counter.items(), ",[28,170496,154159],{"class":5478},[28,170498,154162],{"class":34},[28,170500,154165],{"class":38},[28,170502,61],{"class":60},[28,170504,112415],{"class":38},[28,170506,163741],{"class":5478},[28,170508,54],{"class":34},[28,170510,31733],{"class":60},[28,170512,81],{"class":38},[28,170514,170515],{"class":30,"line":1909},[28,170516,2662],{"emptyLinePlaceholder":336},[28,170518,170519,170521,170524,170526,170529,170531],{"class":30,"line":1915},[28,170520,3287],{"class":34},[28,170522,170523],{"class":38}," word, count ",[28,170525,26306],{"class":34},[28,170527,170528],{"class":38}," items[:",[28,170530,845],{"class":60},[28,170532,165968],{"class":38},[28,170534,170535,170537],{"class":30,"line":1936},[28,170536,31559],{"class":60},[28,170538,170539],{"class":38},"(word, count)\n",[351,170541,170543],{"id":170542},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[18,170545,170547],{"className":20,"code":170546,"language":22,"meta":23,"style":23},"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",[25,170548,170549,170555,170565,170569,170581,170585,170589,170597,170607,170613,170617,170647,170657,170661,170665,170673,170703,170727,170731,170735,170743,170772,170777],{"__ignoreMap":23},[28,170550,170551,170553],{"class":30,"line":31},[28,170552,35],{"class":34},[28,170554,147304],{"class":38},[28,170556,170557,170559,170561,170563],{"class":30,"line":48},[28,170558,30997],{"class":34},[28,170560,108524],{"class":38},[28,170562,35],{"class":34},[28,170564,108529],{"class":38},[28,170566,170567],{"class":30,"line":84},[28,170568,2662],{"emptyLinePlaceholder":336},[28,170570,170571,170573,170575,170577,170579],{"class":30,"line":91},[28,170572,152037],{"class":60},[28,170574,13826],{"class":34},[28,170576,108758],{"class":38},[28,170578,152044],{"class":127},[28,170580,81],{"class":38},[28,170582,170583],{"class":30,"line":97},[28,170584,2662],{"emptyLinePlaceholder":336},[28,170586,170587],{"class":30,"line":103},[28,170588,2662],{"emptyLinePlaceholder":336},[28,170590,170591,170593,170595],{"class":30,"line":109},[28,170592,32203],{"class":34},[28,170594,152061],{"class":2225},[28,170596,32209],{"class":38},[28,170598,170599,170601,170603,170605],{"class":30,"line":118},[28,170600,3363],{"class":34},[28,170602,39186],{"class":34},[28,170604,152072],{"class":60},[28,170606,152075],{"class":38},[28,170608,170609,170611],{"class":30,"line":124},[28,170610,15014],{"class":34},[28,170612,52094],{"class":38},[28,170614,170615],{"class":30,"line":131},[28,170616,2662],{"emptyLinePlaceholder":336},[28,170618,170619,170621,170623,170625,170627,170629,170631,170633,170635,170637,170639,170641,170643,170645],{"class":30,"line":137},[28,170620,34434],{"class":34},[28,170622,147004],{"class":60},[28,170624,413],{"class":38},[28,170626,152037],{"class":60},[28,170628,12697],{"class":38},[28,170630,147014],{"class":127},[28,170632,12697],{"class":38},[28,170634,147019],{"class":5478},[28,170636,54],{"class":34},[28,170638,147024],{"class":127},[28,170640,13976],{"class":38},[28,170642,42],{"class":34},[28,170644,148366],{"class":5478},[28,170646,4001],{"class":38},[28,170648,170649,170651,170653,170655],{"class":30,"line":143},[28,170650,15014],{"class":34},[28,170652,148377],{"class":38},[28,170654,45610],{"class":5478},[28,170656,81],{"class":38},[28,170658,170659],{"class":30,"line":149},[28,170660,2662],{"emptyLinePlaceholder":336},[28,170662,170663],{"class":30,"line":1890},[28,170664,2662],{"emptyLinePlaceholder":336},[28,170666,170667,170669,170671],{"class":30,"line":1904},[28,170668,32203],{"class":34},[28,170670,152171],{"class":2225},[28,170672,152174],{"class":38},[28,170674,170675,170677,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697,170699,170701],{"class":30,"line":1909},[28,170676,34434],{"class":34},[28,170678,147004],{"class":60},[28,170680,413],{"class":38},[28,170682,152037],{"class":60},[28,170684,12697],{"class":38},[28,170686,152189],{"class":127},[28,170688,12697],{"class":38},[28,170690,147019],{"class":5478},[28,170692,54],{"class":34},[28,170694,147024],{"class":127},[28,170696,13976],{"class":38},[28,170698,42],{"class":34},[28,170700,148366],{"class":5478},[28,170702,4001],{"class":38},[28,170704,170705,170707,170709,170711,170713,170715,170717,170719,170721,170723,170725],{"class":30,"line":1915},[28,170706,152210],{"class":38},[28,170708,45610],{"class":5478},[28,170710,12697],{"class":38},[28,170712,147350],{"class":5478},[28,170714,54],{"class":34},[28,170716,34243],{"class":60},[28,170718,12697],{"class":38},[28,170720,152225],{"class":5478},[28,170722,54],{"class":34},[28,170724,211],{"class":60},[28,170726,81],{"class":38},[28,170728,170729],{"class":30,"line":1936},[28,170730,2662],{"emptyLinePlaceholder":336},[28,170732,170733],{"class":30,"line":1941},[28,170734,2662],{"emptyLinePlaceholder":336},[28,170736,170737,170739,170741],{"class":30,"line":1955},[28,170738,159929],{"class":38},[28,170740,54],{"class":34},[28,170742,153255],{"class":38},[28,170744,170745,170748,170750,170752,170754,170756,170758,170760,170762,170764,170766,170768,170770],{"class":30,"line":1960},[28,170746,170747],{"class":38},"students.append({",[28,170749,62935],{"class":127},[28,170751,51693],{"class":38},[28,170753,150101],{"class":127},[28,170755,12697],{"class":38},[28,170757,69380],{"class":127},[28,170759,51693],{"class":38},[28,170761,1048],{"class":60},[28,170763,12697],{"class":38},[28,170765,151685],{"class":127},[28,170767,51693],{"class":38},[28,170769,1386],{"class":60},[28,170771,165365],{"class":38},[28,170773,170774],{"class":30,"line":1989},[28,170775,170776],{"class":38},"save_students(students)\n",[28,170778,170779,170781,170783,170786],{"class":30,"line":1994},[28,170780,30675],{"class":60},[28,170782,413],{"class":38},[28,170784,170785],{"class":127},"\"保存成功\"",[28,170787,81],{"class":38},[351,170789,170791],{"id":170790},"_814-易错点","8.14 易错点",[363,170793,170794,170798,170804,170809,170816,170823],{},[366,170795,170796,169057],{},[25,170797,1193],{},[366,170799,170800,170801,28648],{},"读写中文要指定 ",[25,170802,170803],{},"encoding=\"utf-8\"",[366,170805,170806,170807,28648],{},"打开文件后要关闭，推荐使用 ",[25,170808,108046],{},[366,170810,170811,170812,170815],{},"读取大文件不要直接 ",[25,170813,170814],{},"read()"," 全部内容。",[366,170817,170818,170819,170822],{},"Windows 写 CSV 时建议加 ",[25,170820,170821],{},"newline=\"\"","，避免空行。",[366,170824,170825],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[351,170827,170829],{"id":170828},"_815-本章练习","8.15 本章练习",[363,170831,170832,170839,170844,170847,170850],{},[366,170833,170834,170835,170838],{},"写入一个 ",[25,170836,170837],{},"students.txt","，每行保存一个学生姓名。",[366,170840,104568,170841,170843],{},[25,170842,170837],{}," 并输出所有学生。",[366,170845,170846],{},"把学生列表保存为 JSON 文件。",[366,170848,170849],{},"从 JSON 文件读取学生数据，计算平均分。",[366,170851,170852,170853,170856,170857,170860],{},"写一个日志函数 ",[25,170854,170855],{},"write_log(message)","，每次调用向 ",[25,170858,170859],{},"app.log"," 追加一行。",[328,170862,170863],{},"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":23,"searchDepth":48,"depth":48,"links":170865},[170866,170867,170871,170872,170878,170879,170880,170881,170882,170883,170884,170885,170886,170887,170888],{"id":168377,"depth":48,"text":168378},{"id":168418,"depth":48,"text":168419,"children":170868},[170869,170870],{"id":168422,"depth":84,"text":168423},{"id":168456,"depth":84,"text":168457},{"id":168570,"depth":48,"text":168571},{"id":168663,"depth":48,"text":168664,"children":170873},[170874,170875,170876,170877],{"id":168667,"depth":84,"text":168668},{"id":168754,"depth":84,"text":168755},{"id":168824,"depth":84,"text":168825},{"id":168918,"depth":84,"text":168919},{"id":168988,"depth":48,"text":168989},{"id":169051,"depth":48,"text":169052},{"id":169212,"depth":48,"text":169213},{"id":169275,"depth":48,"text":169276},{"id":169391,"depth":48,"text":169392},{"id":169601,"depth":48,"text":169602},{"id":169913,"depth":48,"text":169914},{"id":170324,"depth":48,"text":170325},{"id":170542,"depth":48,"text":170543},{"id":170790,"depth":48,"text":170791},{"id":170828,"depth":48,"text":170829},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168369,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170895,"title":170896,"body":170897,"description":333,"extension":334,"meta":173083,"navigation":336,"path":173084,"seo":173085,"stem":173086,"__hash__":173087},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170898,"toc":173050},[170899,170902,170906,170909,170912,171004,171006,171025,171030,171034,171037,171040,171069,171076,171079,171083,171086,171115,171117,171169,171175,171228,171232,171330,171333,171400,171404,171461,171463,171469,171473,171478,171484,171575,171580,171584,171587,171665,171668,171706,171710,171828,171831,171835,171838,171883,171886,171890,171895,171901,171951,171954,171985,171989,171993,172023,172027,172062,172066,172101,172141,172145,172161,172164,172168,172172,172251,172255,172296,172300,172355,172359,172393,172397,172427,172436,172443,172449,172506,172509,172517,172520,172524,172531,172534,172540,172543,172560,172565,172569,172575,172588,172591,172628,172631,172642,172645,172659,172662,172676,172680,172687,172720,172723,172725,172731,172734,172738,172740,172746,172751,172924,172928,172991,172995,173019,173023,173047],[10,170900,170896],{"id":170901},"_9-异常模块与包",[351,170903,170905],{"id":170904},"_91-什么是异常","9.1 什么是异常",[14,170907,170908],{},"异常是程序运行过程中出现的错误。",[14,170910,170911],{},"常见异常：",[543,170913,170914,170923],{},[546,170915,170916],{},[549,170917,170918,170921],{},[552,170919,170920],{},"异常",[552,170922,26132],{},[590,170924,170925,170935,170945,170954,170964,170974,170984,170994],{},[549,170926,170927,170932],{},[595,170928,170929],{},[25,170930,170931],{},"NameError",[595,170933,170934],{},"使用了未定义变量",[549,170936,170937,170942],{},[595,170938,170939],{},[25,170940,170941],{},"TypeError",[595,170943,170944],{},"类型不匹配",[549,170946,170947,170951],{},[595,170948,170949],{},[25,170950,155047],{},[595,170952,170953],{},"值不合法",[549,170955,170956,170961],{},[595,170957,170958],{},[25,170959,170960],{},"IndexError",[595,170962,170963],{},"列表索引越界",[549,170965,170966,170971],{},[595,170967,170968],{},[25,170969,170970],{},"KeyError",[595,170972,170973],{},"字典 key 不存在",[549,170975,170976,170981],{},[595,170977,170978],{},[25,170979,170980],{},"FileNotFoundError",[595,170982,170983],{},"文件不存在",[549,170985,170986,170991],{},[595,170987,170988],{},[25,170989,170990],{},"ZeroDivisionError",[595,170992,170993],{},"除数为 0",[549,170995,170996,171001],{},[595,170997,170998],{},[25,170999,171000],{},"ImportError",[595,171002,171003],{},"导入失败",[14,171005,15397],{},[18,171007,171009],{"className":20,"code":171008,"language":22,"meta":23,"style":23},"num = int(\"abc\")\n",[25,171010,171011],{"__ignoreMap":23},[28,171012,171013,171015,171017,171019,171021,171023],{"class":30,"line":31},[28,171014,156000],{"class":38},[28,171016,54],{"class":34},[28,171018,2644],{"class":60},[28,171020,413],{"class":38},[28,171022,156093],{"class":127},[28,171024,81],{"class":38},[14,171026,171027,171028,28648],{},"会触发 ",[25,171029,155047],{},[351,171031,171033],{"id":171032},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171035,171036],{},"如果不处理异常，程序会直接终止。",[14,171038,171039],{},"例如用户输入年龄：",[18,171041,171043],{"className":20,"code":171042,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[25,171044,171045,171063],{"__ignoreMap":23},[28,171046,171047,171049,171051,171053,171055,171057,171059,171061],{"class":30,"line":31},[28,171048,146759],{"class":38},[28,171050,54],{"class":34},[28,171052,2644],{"class":60},[28,171054,413],{"class":38},[28,171056,54077],{"class":60},[28,171058,413],{"class":38},[28,171060,152607],{"class":127},[28,171062,30757],{"class":38},[28,171064,171065,171067],{"class":30,"line":48},[28,171066,30675],{"class":60},[28,171068,155974],{"class":38},[14,171070,171071,171072,171075],{},"用户输入 ",[25,171073,171074],{},"abc","，程序就会报错退出。",[14,171077,171078],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[351,171080,171082],{"id":171081},"_93-try-except","9.3 try except",[14,171084,171085],{},"基础语法：",[18,171087,171089],{"className":20,"code":171088,"language":22,"meta":23,"style":23},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[25,171090,171091,171098,171103,171110],{"__ignoreMap":23},[28,171092,171093,171096],{"class":30,"line":31},[28,171094,171095],{"class":34},"try",[28,171097,4001],{"class":38},[28,171099,171100],{"class":30,"line":48},[28,171101,171102],{"class":38},"    可能出错的代码\n",[28,171104,171105,171108],{"class":30,"line":84},[28,171106,171107],{"class":34},"except",[28,171109,4001],{"class":38},[28,171111,171112],{"class":30,"line":91},[28,171113,171114],{"class":38},"    出错后的处理代码\n",[14,171116,15397],{},[18,171118,171120],{"className":20,"code":171119,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[25,171121,171122,171128,171146,171152,171158],{"__ignoreMap":23},[28,171123,171124,171126],{"class":30,"line":31},[28,171125,171095],{"class":34},[28,171127,4001],{"class":38},[28,171129,171130,171132,171134,171136,171138,171140,171142,171144],{"class":30,"line":48},[28,171131,152599],{"class":38},[28,171133,54],{"class":34},[28,171135,2644],{"class":60},[28,171137,413],{"class":38},[28,171139,54077],{"class":60},[28,171141,413],{"class":38},[28,171143,152607],{"class":127},[28,171145,30757],{"class":38},[28,171147,171148,171150],{"class":30,"line":84},[28,171149,31559],{"class":60},[28,171151,155974],{"class":38},[28,171153,171154,171156],{"class":30,"line":91},[28,171155,171107],{"class":34},[28,171157,4001],{"class":38},[28,171159,171160,171162,171164,171167],{"class":30,"line":97},[28,171161,31559],{"class":60},[28,171163,413],{"class":38},[28,171165,171166],{"class":127},"\"年龄必须是数字\"",[28,171168,81],{"class":38},[14,171170,171171,171172,171174],{},"不建议裸写 ",[25,171173,171107],{},"，最好指定异常类型。",[18,171176,171178],{"className":20,"code":171177,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[25,171179,171180,171186,171204,171210,171218],{"__ignoreMap":23},[28,171181,171182,171184],{"class":30,"line":31},[28,171183,171095],{"class":34},[28,171185,4001],{"class":38},[28,171187,171188,171190,171192,171194,171196,171198,171200,171202],{"class":30,"line":48},[28,171189,152599],{"class":38},[28,171191,54],{"class":34},[28,171193,2644],{"class":60},[28,171195,413],{"class":38},[28,171197,54077],{"class":60},[28,171199,413],{"class":38},[28,171201,152607],{"class":127},[28,171203,30757],{"class":38},[28,171205,171206,171208],{"class":30,"line":84},[28,171207,31559],{"class":60},[28,171209,155974],{"class":38},[28,171211,171212,171214,171216],{"class":30,"line":91},[28,171213,171107],{"class":34},[28,171215,152439],{"class":60},[28,171217,4001],{"class":38},[28,171219,171220,171222,171224,171226],{"class":30,"line":97},[28,171221,31559],{"class":60},[28,171223,413],{"class":38},[28,171225,171166],{"class":127},[28,171227,81],{"class":38},[351,171229,171231],{"id":171230},"_94-捕获多个异常","9.4 捕获多个异常",[18,171233,171235],{"className":20,"code":171234,"language":22,"meta":23,"style":23},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[25,171236,171237,171243,171264,171284,171291,171299,171310,171319],{"__ignoreMap":23},[28,171238,171239,171241],{"class":30,"line":31},[28,171240,171095],{"class":34},[28,171242,4001],{"class":38},[28,171244,171245,171248,171250,171252,171254,171256,171258,171260,171262],{"class":30,"line":48},[28,171246,171247],{"class":38},"    nums ",[28,171249,54],{"class":34},[28,171251,52482],{"class":38},[28,171253,61],{"class":60},[28,171255,12697],{"class":38},[28,171257,211],{"class":60},[28,171259,12697],{"class":38},[28,171261,78],{"class":60},[28,171263,33502],{"class":38},[28,171265,171266,171269,171271,171273,171275,171277,171279,171282],{"class":30,"line":84},[28,171267,171268],{"class":38},"    index ",[28,171270,54],{"class":34},[28,171272,2644],{"class":60},[28,171274,413],{"class":38},[28,171276,54077],{"class":60},[28,171278,413],{"class":38},[28,171280,171281],{"class":127},"\"请输入索引:\"",[28,171283,30757],{"class":38},[28,171285,171286,171288],{"class":30,"line":91},[28,171287,31559],{"class":60},[28,171289,171290],{"class":38},"(nums[index])\n",[28,171292,171293,171295,171297],{"class":30,"line":97},[28,171294,171107],{"class":34},[28,171296,152439],{"class":60},[28,171298,4001],{"class":38},[28,171300,171301,171303,171305,171308],{"class":30,"line":103},[28,171302,31559],{"class":60},[28,171304,413],{"class":38},[28,171306,171307],{"class":127},"\"索引必须是整数\"",[28,171309,81],{"class":38},[28,171311,171312,171314,171317],{"class":30,"line":109},[28,171313,171107],{"class":34},[28,171315,171316],{"class":60}," IndexError",[28,171318,4001],{"class":38},[28,171320,171321,171323,171325,171328],{"class":30,"line":118},[28,171322,31559],{"class":60},[28,171324,413],{"class":38},[28,171326,171327],{"class":127},"\"索引越界\"",[28,171329,81],{"class":38},[14,171331,171332],{},"多个异常使用相同处理逻辑：",[18,171334,171336],{"className":20,"code":171335,"language":22,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[25,171337,171338,171344,171362,171375,171389],{"__ignoreMap":23},[28,171339,171340,171342],{"class":30,"line":31},[28,171341,171095],{"class":34},[28,171343,4001],{"class":38},[28,171345,171346,171348,171350,171352,171354,171356,171358,171360],{"class":30,"line":48},[28,171347,45849],{"class":38},[28,171349,54],{"class":34},[28,171351,2644],{"class":60},[28,171353,413],{"class":38},[28,171355,54077],{"class":60},[28,171357,413],{"class":38},[28,171359,156009],{"class":127},[28,171361,30757],{"class":38},[28,171363,171364,171366,171368,171370,171372],{"class":30,"line":84},[28,171365,31559],{"class":60},[28,171367,413],{"class":38},[28,171369,845],{"class":60},[28,171371,156259],{"class":34},[28,171373,171374],{"class":38}," num)\n",[28,171376,171377,171379,171381,171383,171385,171387],{"class":30,"line":91},[28,171378,171107],{"class":34},[28,171380,1920],{"class":38},[28,171382,155047],{"class":60},[28,171384,12697],{"class":38},[28,171386,170990],{"class":60},[28,171388,31046],{"class":38},[28,171390,171391,171393,171395,171398],{"class":30,"line":97},[28,171392,31559],{"class":60},[28,171394,413],{"class":38},[28,171396,171397],{"class":127},"\"输入不合法\"",[28,171399,81],{"class":38},[351,171401,171403],{"id":171402},"_95-获取异常信息","9.5 获取异常信息",[18,171405,171407],{"className":20,"code":171406,"language":22,"meta":23,"style":23},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[25,171408,171409,171415,171429,171440],{"__ignoreMap":23},[28,171410,171411,171413],{"class":30,"line":31},[28,171412,171095],{"class":34},[28,171414,4001],{"class":38},[28,171416,171417,171419,171421,171423,171425,171427],{"class":30,"line":48},[28,171418,45849],{"class":38},[28,171420,54],{"class":34},[28,171422,2644],{"class":60},[28,171424,413],{"class":38},[28,171426,156093],{"class":127},[28,171428,81],{"class":38},[28,171430,171431,171433,171435,171437],{"class":30,"line":84},[28,171432,171107],{"class":34},[28,171434,152439],{"class":60},[28,171436,64860],{"class":34},[28,171438,171439],{"class":38}," e:\n",[28,171441,171442,171444,171446,171448,171451,171453,171455,171457,171459],{"class":30,"line":91},[28,171443,31559],{"class":60},[28,171445,413],{"class":38},[28,171447,462],{"class":34},[28,171449,171450],{"class":127},"\"出错了:",[28,171452,1293],{"class":60},[28,171454,482],{"class":38},[28,171456,1343],{"class":60},[28,171458,654],{"class":127},[28,171460,81],{"class":38},[14,171462,146670],{},[18,171464,171467],{"className":171465,"code":171466,"language":5449,"meta":23},[5447],"出错了:invalid literal for int() with base 10: 'abc'\n",[25,171468,171466],{"__ignoreMap":23},[351,171470,171472],{"id":171471},"_96-else和finally","9.6 else和finally",[14,171474,171475,171477],{},[25,171476,1963],{},"：没有异常时执行。",[14,171479,171480,171483],{},[25,171481,171482],{},"finally","：无论是否异常都会执行。",[18,171485,171487],{"className":20,"code":171486,"language":22,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[25,171488,171489,171495,171513,171521,171531,171537,171558,171564],{"__ignoreMap":23},[28,171490,171491,171493],{"class":30,"line":31},[28,171492,171095],{"class":34},[28,171494,4001],{"class":38},[28,171496,171497,171499,171501,171503,171505,171507,171509,171511],{"class":30,"line":48},[28,171498,45849],{"class":38},[28,171500,54],{"class":34},[28,171502,2644],{"class":60},[28,171504,413],{"class":38},[28,171506,54077],{"class":60},[28,171508,413],{"class":38},[28,171510,156009],{"class":127},[28,171512,30757],{"class":38},[28,171514,171515,171517,171519],{"class":30,"line":84},[28,171516,171107],{"class":34},[28,171518,152439],{"class":60},[28,171520,4001],{"class":38},[28,171522,171523,171525,171527,171529],{"class":30,"line":91},[28,171524,31559],{"class":60},[28,171526,413],{"class":38},[28,171528,153427],{"class":127},[28,171530,81],{"class":38},[28,171532,171533,171535],{"class":30,"line":97},[28,171534,1963],{"class":34},[28,171536,4001],{"class":38},[28,171538,171539,171541,171543,171545,171548,171550,171552,171554,171556],{"class":30,"line":103},[28,171540,31559],{"class":60},[28,171542,413],{"class":38},[28,171544,462],{"class":34},[28,171546,171547],{"class":127},"\"输入正确:",[28,171549,1293],{"class":60},[28,171551,1927],{"class":38},[28,171553,1343],{"class":60},[28,171555,654],{"class":127},[28,171557,81],{"class":38},[28,171559,171560,171562],{"class":30,"line":109},[28,171561,171482],{"class":34},[28,171563,4001],{"class":38},[28,171565,171566,171568,171570,171573],{"class":30,"line":118},[28,171567,31559],{"class":60},[28,171569,413],{"class":38},[28,171571,171572],{"class":127},"\"程序结束\"",[28,171574,81],{"class":38},[14,171576,171577,171579],{},[25,171578,171482],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[351,171581,171583],{"id":171582},"_97-抛出异常","9.7 抛出异常",[14,171585,171586],{},"程序可以主动抛出异常。",[18,171588,171590],{"className":20,"code":171589,"language":22,"meta":23,"style":23},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[25,171591,171592,171601,171613,171626,171646,171650,171654],{"__ignoreMap":23},[28,171593,171594,171596,171599],{"class":30,"line":31},[28,171595,32203],{"class":34},[28,171597,171598],{"class":2225}," set_age",[28,171600,161628],{"class":38},[28,171602,171603,171605,171607,171609,171611],{"class":30,"line":48},[28,171604,3363],{"class":34},[28,171606,15969],{"class":38},[28,171608,1307],{"class":34},[28,171610,4355],{"class":60},[28,171612,4001],{"class":38},[28,171614,171615,171617,171619,171621,171624],{"class":30,"line":84},[28,171616,103645],{"class":34},[28,171618,152439],{"class":60},[28,171620,413],{"class":38},[28,171622,171623],{"class":127},"\"年龄不能为负数\"",[28,171625,81],{"class":38},[28,171627,171628,171630,171632,171634,171636,171638,171640,171642,171644],{"class":30,"line":91},[28,171629,31559],{"class":60},[28,171631,413],{"class":38},[28,171633,462],{"class":34},[28,171635,162196],{"class":127},[28,171637,1293],{"class":60},[28,171639,70477],{"class":38},[28,171641,1343],{"class":60},[28,171643,654],{"class":127},[28,171645,81],{"class":38},[28,171647,171648],{"class":30,"line":97},[28,171649,2662],{"emptyLinePlaceholder":336},[28,171651,171652],{"class":30,"line":103},[28,171653,2662],{"emptyLinePlaceholder":336},[28,171655,171656,171659,171661,171663],{"class":30,"line":109},[28,171657,171658],{"class":38},"set_age(",[28,171660,930],{"class":34},[28,171662,61],{"class":60},[28,171664,81],{"class":38},[14,171666,171667],{},"调用者可以捕获：",[18,171669,171671],{"className":20,"code":171670,"language":22,"meta":23,"style":23},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[25,171672,171673,171679,171690,171700],{"__ignoreMap":23},[28,171674,171675,171677],{"class":30,"line":31},[28,171676,171095],{"class":34},[28,171678,4001],{"class":38},[28,171680,171681,171684,171686,171688],{"class":30,"line":48},[28,171682,171683],{"class":38},"    set_age(",[28,171685,930],{"class":34},[28,171687,61],{"class":60},[28,171689,81],{"class":38},[28,171691,171692,171694,171696,171698],{"class":30,"line":84},[28,171693,171107],{"class":34},[28,171695,152439],{"class":60},[28,171697,64860],{"class":34},[28,171699,171439],{"class":38},[28,171701,171702,171704],{"class":30,"line":91},[28,171703,31559],{"class":60},[28,171705,67255],{"class":38},[351,171707,171709],{"id":171708},"_98-自定义异常","9.8 自定义异常",[18,171711,171713],{"className":20,"code":171712,"language":22,"meta":23,"style":23},"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",[25,171714,171715,171729,171733,171737,171741,171749,171759,171770,171780,171784,171788,171794,171811,171822],{"__ignoreMap":23},[28,171716,171717,171719,171722,171724,171727],{"class":30,"line":31},[28,171718,14956],{"class":34},[28,171720,171721],{"class":2225}," BalanceNotEnoughError",[28,171723,413],{"class":38},[28,171725,171726],{"class":60},"Exception",[28,171728,31046],{"class":38},[28,171730,171731],{"class":30,"line":48},[28,171732,149750],{"class":34},[28,171734,171735],{"class":30,"line":84},[28,171736,2662],{"emptyLinePlaceholder":336},[28,171738,171739],{"class":30,"line":91},[28,171740,2662],{"emptyLinePlaceholder":336},[28,171742,171743,171745,171747],{"class":30,"line":97},[28,171744,32203],{"class":34},[28,171746,150399],{"class":2225},[28,171748,163025],{"class":38},[28,171750,171751,171753,171755,171757],{"class":30,"line":103},[28,171752,3363],{"class":34},[28,171754,150355],{"class":38},[28,171756,1357],{"class":34},[28,171758,162802],{"class":38},[28,171760,171761,171763,171766,171768],{"class":30,"line":109},[28,171762,103645],{"class":34},[28,171764,171765],{"class":38}," BalanceNotEnoughError(",[28,171767,150450],{"class":127},[28,171769,81],{"class":38},[28,171771,171772,171774,171776,171778],{"class":30,"line":118},[28,171773,4352],{"class":34},[28,171775,163032],{"class":38},[28,171777,930],{"class":34},[28,171779,150388],{"class":38},[28,171781,171782],{"class":30,"line":124},[28,171783,2662],{"emptyLinePlaceholder":336},[28,171785,171786],{"class":30,"line":131},[28,171787,2662],{"emptyLinePlaceholder":336},[28,171789,171790,171792],{"class":30,"line":137},[28,171791,171095],{"class":34},[28,171793,4001],{"class":38},[28,171795,171796,171798,171800,171803,171805,171807,171809],{"class":30,"line":143},[28,171797,162703],{"class":38},[28,171799,54],{"class":34},[28,171801,171802],{"class":38}," withdraw(",[28,171804,713],{"class":60},[28,171806,12697],{"class":38},[28,171808,1984],{"class":60},[28,171810,81],{"class":38},[28,171812,171813,171815,171818,171820],{"class":30,"line":149},[28,171814,171107],{"class":34},[28,171816,171817],{"class":38}," BalanceNotEnoughError ",[28,171819,42],{"class":34},[28,171821,171439],{"class":38},[28,171823,171824,171826],{"class":30,"line":1890},[28,171825,31559],{"class":60},[28,171827,67255],{"class":38},[14,171829,171830],{},"入门阶段大多数情况使用内置异常即可。",[351,171832,171834],{"id":171833},"_99-traceback","9.9 traceback",[14,171836,171837],{},"调试时可以输出完整异常堆栈。",[18,171839,171841],{"className":20,"code":171840,"language":22,"meta":23,"style":23},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[25,171842,171843,171850,171854,171860,171870,171878],{"__ignoreMap":23},[28,171844,171845,171847],{"class":30,"line":31},[28,171846,35],{"class":34},[28,171848,171849],{"class":38}," traceback\n",[28,171851,171852],{"class":30,"line":48},[28,171853,2662],{"emptyLinePlaceholder":336},[28,171855,171856,171858],{"class":30,"line":84},[28,171857,171095],{"class":34},[28,171859,4001],{"class":38},[28,171861,171862,171864,171866,171868],{"class":30,"line":91},[28,171863,2247],{"class":60},[28,171865,413],{"class":38},[28,171867,156093],{"class":127},[28,171869,81],{"class":38},[28,171871,171872,171874,171876],{"class":30,"line":97},[28,171873,171107],{"class":34},[28,171875,152439],{"class":60},[28,171877,4001],{"class":38},[28,171879,171880],{"class":30,"line":103},[28,171881,171882],{"class":38},"    traceback.print_exc()\n",[14,171884,171885],{},"日志系统中常把异常堆栈记录到文件。",[351,171887,171889],{"id":171888},"_910-什么是模块","9.10 什么是模块",[14,171891,171892,171893,126196],{},"模块就是一个 ",[25,171894,146565],{},[14,171896,171897,171898,24881],{},"例如创建 ",[25,171899,171900],{},"my_math.py",[18,171902,171904],{"className":20,"code":171903,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[25,171905,171906,171914,171924,171928,171932,171941],{"__ignoreMap":23},[28,171907,171908,171910,171912],{"class":30,"line":31},[28,171909,32203],{"class":34},[28,171911,5471],{"class":2225},[28,171913,151306],{"class":38},[28,171915,171916,171918,171920,171922],{"class":30,"line":48},[28,171917,4352],{"class":34},[28,171919,11131],{"class":38},[28,171921,880],{"class":34},[28,171923,151317],{"class":38},[28,171925,171926],{"class":30,"line":84},[28,171927,2662],{"emptyLinePlaceholder":336},[28,171929,171930],{"class":30,"line":91},[28,171931,2662],{"emptyLinePlaceholder":336},[28,171933,171934,171936,171939],{"class":30,"line":97},[28,171935,32203],{"class":34},[28,171937,171938],{"class":2225}," sub",[28,171940,151306],{"class":38},[28,171942,171943,171945,171947,171949],{"class":30,"line":103},[28,171944,4352],{"class":34},[28,171946,11131],{"class":38},[28,171948,930],{"class":34},[28,171950,151317],{"class":38},[14,171952,171953],{},"在另一个文件中导入：",[18,171955,171957],{"className":20,"code":171956,"language":22,"meta":23,"style":23},"import my_math\n\nprint(my_math.add(1, 2))\n",[25,171958,171959,171966,171970],{"__ignoreMap":23},[28,171960,171961,171963],{"class":30,"line":31},[28,171962,35],{"class":34},[28,171964,171965],{"class":38}," my_math\n",[28,171967,171968],{"class":30,"line":48},[28,171969,2662],{"emptyLinePlaceholder":336},[28,171971,171972,171974,171977,171979,171981,171983],{"class":30,"line":84},[28,171973,30675],{"class":60},[28,171975,171976],{"class":38},"(my_math.add(",[28,171978,61],{"class":60},[28,171980,12697],{"class":38},[28,171982,211],{"class":60},[28,171984,30757],{"class":38},[351,171986,171988],{"id":171987},"_911-import导入","9.11 import导入",[380,171990,171992],{"id":171991},"_9111-导入模块","9.11.1 导入模块",[18,171994,171996],{"className":20,"code":171995,"language":22,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\n",[25,171997,171998,172004,172008],{"__ignoreMap":23},[28,171999,172000,172002],{"class":30,"line":31},[28,172001,35],{"class":34},[28,172003,45584],{"class":38},[28,172005,172006],{"class":30,"line":48},[28,172007,2662],{"emptyLinePlaceholder":336},[28,172009,172010,172012,172015,172017,172019,172021],{"class":30,"line":84},[28,172011,30675],{"class":60},[28,172013,172014],{"class":38},"(random.randint(",[28,172016,61],{"class":60},[28,172018,12697],{"class":38},[28,172020,845],{"class":60},[28,172022,30757],{"class":38},[380,172024,172026],{"id":172025},"_9112-导入指定内容","9.11.2 导入指定内容",[18,172028,172030],{"className":20,"code":172029,"language":22,"meta":23,"style":23},"from random import randint\n\nprint(randint(1, 10))\n",[25,172031,172032,172043,172047],{"__ignoreMap":23},[28,172033,172034,172036,172038,172040],{"class":30,"line":31},[28,172035,30997],{"class":34},[28,172037,58052],{"class":38},[28,172039,35],{"class":34},[28,172041,172042],{"class":38}," randint\n",[28,172044,172045],{"class":30,"line":48},[28,172046,2662],{"emptyLinePlaceholder":336},[28,172048,172049,172051,172054,172056,172058,172060],{"class":30,"line":84},[28,172050,30675],{"class":60},[28,172052,172053],{"class":38},"(randint(",[28,172055,61],{"class":60},[28,172057,12697],{"class":38},[28,172059,845],{"class":60},[28,172061,30757],{"class":38},[380,172063,172065],{"id":172064},"_9113-起别名","9.11.3 起别名",[18,172067,172069],{"className":20,"code":172068,"language":22,"meta":23,"style":23},"import random as rd\n\nprint(rd.randint(1, 10))\n",[25,172070,172071,172082,172086],{"__ignoreMap":23},[28,172072,172073,172075,172077,172079],{"class":30,"line":31},[28,172074,35],{"class":34},[28,172076,58052],{"class":38},[28,172078,42],{"class":34},[28,172080,172081],{"class":38}," rd\n",[28,172083,172084],{"class":30,"line":48},[28,172085,2662],{"emptyLinePlaceholder":336},[28,172087,172088,172090,172093,172095,172097,172099],{"class":30,"line":84},[28,172089,30675],{"class":60},[28,172091,172092],{"class":38},"(rd.randint(",[28,172094,61],{"class":60},[28,172096,12697],{"class":38},[28,172098,845],{"class":60},[28,172100,30757],{"class":38},[18,172102,172104],{"className":20,"code":172103,"language":22,"meta":23,"style":23},"from random import randint as rint\n\nprint(rint(1, 10))\n",[25,172105,172106,172122,172126],{"__ignoreMap":23},[28,172107,172108,172110,172112,172114,172117,172119],{"class":30,"line":31},[28,172109,30997],{"class":34},[28,172111,58052],{"class":38},[28,172113,35],{"class":34},[28,172115,172116],{"class":38}," randint ",[28,172118,42],{"class":34},[28,172120,172121],{"class":38}," rint\n",[28,172123,172124],{"class":30,"line":48},[28,172125,2662],{"emptyLinePlaceholder":336},[28,172127,172128,172130,172133,172135,172137,172139],{"class":30,"line":84},[28,172129,30675],{"class":60},[28,172131,172132],{"class":38},"(rint(",[28,172134,61],{"class":60},[28,172136,12697],{"class":38},[28,172138,845],{"class":60},[28,172140,30757],{"class":38},[380,172142,172144],{"id":172143},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[18,172146,172148],{"className":20,"code":172147,"language":22,"meta":23,"style":23},"from random import *\n",[25,172149,172150],{"__ignoreMap":23},[28,172151,172152,172154,172156,172158],{"class":30,"line":31},[28,172153,30997],{"class":34},[28,172155,58052],{"class":38},[28,172157,35],{"class":34},[28,172159,172160],{"class":34}," *\n",[14,172162,172163],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[351,172165,172167],{"id":172166},"_912-常用内置模块","9.12 常用内置模块",[380,172169,172171],{"id":172170},"_9121-random","9.12.1 random",[18,172173,172175],{"className":20,"code":172174,"language":22,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[25,172176,172177,172183,172187,172201,172220],{"__ignoreMap":23},[28,172178,172179,172181],{"class":30,"line":31},[28,172180,35],{"class":34},[28,172182,45584],{"class":38},[28,172184,172185],{"class":30,"line":48},[28,172186,2662],{"emptyLinePlaceholder":336},[28,172188,172189,172191,172193,172195,172197,172199],{"class":30,"line":84},[28,172190,30675],{"class":60},[28,172192,172014],{"class":38},[28,172194,61],{"class":60},[28,172196,12697],{"class":38},[28,172198,845],{"class":60},[28,172200,30757],{"class":38},[28,172202,172203,172205,172208,172210,172212,172214,172216,172218],{"class":30,"line":91},[28,172204,30675],{"class":60},[28,172206,172207],{"class":38},"(random.choice([",[28,172209,150101],{"class":127},[28,172211,12697],{"class":38},[28,172213,151149],{"class":127},[28,172215,12697],{"class":38},[28,172217,159944],{"class":127},[28,172219,33399],{"class":38},[28,172221,172222,172224,172227,172229,172231,172233,172235,172237,172239,172241,172243,172245,172247,172249],{"class":30,"line":97},[28,172223,30675],{"class":60},[28,172225,172226],{"class":38},"(random.sample([",[28,172228,61],{"class":60},[28,172230,12697],{"class":38},[28,172232,211],{"class":60},[28,172234,12697],{"class":38},[28,172236,78],{"class":60},[28,172238,12697],{"class":38},[28,172240,73],{"class":60},[28,172242,12697],{"class":38},[28,172244,721],{"class":60},[28,172246,112415],{"class":38},[28,172248,211],{"class":60},[28,172250,30757],{"class":38},[380,172252,172254],{"id":172253},"_9122-time","9.12.2 time",[18,172256,172258],{"className":20,"code":172257,"language":22,"meta":23,"style":23},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[25,172259,172260,172266,172270,172277,172285],{"__ignoreMap":23},[28,172261,172262,172264],{"class":30,"line":31},[28,172263,35],{"class":34},[28,172265,32085],{"class":38},[28,172267,172268],{"class":30,"line":48},[28,172269,2662],{"emptyLinePlaceholder":336},[28,172271,172272,172274],{"class":30,"line":84},[28,172273,30675],{"class":60},[28,172275,172276],{"class":38},"(time.time())\n",[28,172278,172279,172281,172283],{"class":30,"line":91},[28,172280,95323],{"class":38},[28,172282,61],{"class":60},[28,172284,81],{"class":38},[28,172286,172287,172289,172291,172294],{"class":30,"line":97},[28,172288,30675],{"class":60},[28,172290,413],{"class":38},[28,172292,172293],{"class":127},"\"1秒后执行\"",[28,172295,81],{"class":38},[380,172297,172299],{"id":172298},"_9123-datetime","9.12.3 datetime",[18,172301,172303],{"className":20,"code":172302,"language":22,"meta":23,"style":23},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[25,172304,172305,172317,172321,172331,172338],{"__ignoreMap":23},[28,172306,172307,172309,172312,172314],{"class":30,"line":31},[28,172308,30997],{"class":34},[28,172310,172311],{"class":38}," datetime ",[28,172313,35],{"class":34},[28,172315,172316],{"class":38}," datetime\n",[28,172318,172319],{"class":30,"line":48},[28,172320,2662],{"emptyLinePlaceholder":336},[28,172322,172323,172326,172328],{"class":30,"line":84},[28,172324,172325],{"class":38},"now ",[28,172327,54],{"class":34},[28,172329,172330],{"class":38}," datetime.now()\n",[28,172332,172333,172335],{"class":30,"line":91},[28,172334,30675],{"class":60},[28,172336,172337],{"class":38},"(now)\n",[28,172339,172340,172342,172345,172348,172350,172353],{"class":30,"line":97},[28,172341,30675],{"class":60},[28,172343,172344],{"class":38},"(now.strftime(",[28,172346,172347],{"class":127},"\"%Y-%m-",[28,172349,156904],{"class":60},[28,172351,172352],{"class":127}," %H:%M:%S\"",[28,172354,30757],{"class":38},[380,172356,172358],{"id":172357},"_9124-os","9.12.4 os",[18,172360,172362],{"className":20,"code":172361,"language":22,"meta":23,"style":23},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[25,172363,172364,172370,172374,172381],{"__ignoreMap":23},[28,172365,172366,172368],{"class":30,"line":31},[28,172367,35],{"class":34},[28,172369,45561],{"class":38},[28,172371,172372],{"class":30,"line":48},[28,172373,2662],{"emptyLinePlaceholder":336},[28,172375,172376,172378],{"class":30,"line":84},[28,172377,30675],{"class":60},[28,172379,172380],{"class":38},"(os.getcwd())\n",[28,172382,172383,172385,172388,172391],{"class":30,"line":91},[28,172384,30675],{"class":60},[28,172386,172387],{"class":38},"(os.listdir(",[28,172389,172390],{"class":127},"\".\"",[28,172392,30757],{"class":38},[380,172394,172396],{"id":172395},"_9125-sys","9.12.5 sys",[18,172398,172400],{"className":20,"code":172399,"language":22,"meta":23,"style":23},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[25,172401,172402,172409,172413,172420],{"__ignoreMap":23},[28,172403,172404,172406],{"class":30,"line":31},[28,172405,35],{"class":34},[28,172407,172408],{"class":38}," sys\n",[28,172410,172411],{"class":30,"line":48},[28,172412,2662],{"emptyLinePlaceholder":336},[28,172414,172415,172417],{"class":30,"line":84},[28,172416,30675],{"class":60},[28,172418,172419],{"class":38},"(sys.version)\n",[28,172421,172422,172424],{"class":30,"line":91},[28,172423,30675],{"class":60},[28,172425,172426],{"class":38},"(sys.path)\n",[351,172428,172430,172431,172433,172434,654],{"id":172429},"_913-if-name-main","9.13 if ",[555,172432,80066],{}," == \"",[555,172435,102271],{},[14,172437,172438,172439,172442],{},"模块被直接运行和被导入时，",[25,172440,172441],{},"__name__"," 的值不同。",[14,172444,172445,172446,24881],{},"创建 ",[25,172447,172448],{},"my_module.py",[18,172450,172452],{"className":20,"code":172451,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[25,172453,172454,172462,172472,172476,172480,172492],{"__ignoreMap":23},[28,172455,172456,172458,172460],{"class":30,"line":31},[28,172457,32203],{"class":34},[28,172459,5471],{"class":2225},[28,172461,151306],{"class":38},[28,172463,172464,172466,172468,172470],{"class":30,"line":48},[28,172465,4352],{"class":34},[28,172467,11131],{"class":38},[28,172469,880],{"class":34},[28,172471,151317],{"class":38},[28,172473,172474],{"class":30,"line":84},[28,172475,2662],{"emptyLinePlaceholder":336},[28,172477,172478],{"class":30,"line":91},[28,172479,2662],{"emptyLinePlaceholder":336},[28,172481,172482,172484,172486,172488,172490],{"class":30,"line":97},[28,172483,1796],{"class":34},[28,172485,31480],{"class":60},[28,172487,101772],{"class":34},[28,172489,101775],{"class":127},[28,172491,4001],{"class":38},[28,172493,172494,172496,172498,172500,172502,172504],{"class":30,"line":103},[28,172495,31559],{"class":60},[28,172497,166813],{"class":38},[28,172499,61],{"class":60},[28,172501,12697],{"class":38},[28,172503,211],{"class":60},[28,172505,30757],{"class":38},[14,172507,172508],{},"作用：",[363,172510,172511,172514],{},[366,172512,172513],{},"直接运行该文件时，执行测试代码。",[366,172515,172516],{},"被其他文件导入时，不执行测试代码。",[14,172518,172519],{},"这是写模块时很常用的习惯。",[351,172521,172523],{"id":172522},"_914-包","9.14 包",[14,172525,172526,172527,172530],{},"包是包含 ",[25,172528,172529],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172532,172533],{},"目录结构：",[18,172535,172538],{"className":172536,"code":172537,"language":5449,"meta":23},[5447],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[25,172539,172537],{"__ignoreMap":23},[14,172541,172542],{},"导入：",[18,172544,172546],{"className":20,"code":172545,"language":22,"meta":23,"style":23},"from utils.file_utils import read_file\n",[25,172547,172548],{"__ignoreMap":23},[28,172549,172550,172552,172555,172557],{"class":30,"line":31},[28,172551,30997],{"class":34},[28,172553,172554],{"class":38}," utils.file_utils ",[28,172556,35],{"class":34},[28,172558,172559],{"class":38}," read_file\n",[14,172561,172562,172564],{},[25,172563,172529],{}," 可以为空，也可以写包初始化逻辑。",[351,172566,172568],{"id":172567},"_915-第三方包","9.15 第三方包",[14,172570,172571,172572,172574],{},"第三方包通过 ",[25,172573,24093],{}," 安装。",[18,172576,172578],{"className":24084,"code":172577,"language":24086,"meta":23,"style":23},"pip install requests\n",[25,172579,172580],{"__ignoreMap":23},[28,172581,172582,172584,172586],{"class":30,"line":31},[28,172583,24093],{"class":2225},[28,172585,24096],{"class":127},[28,172587,146311],{"class":127},[14,172589,172590],{},"使用：",[18,172592,172594],{"className":20,"code":172593,"language":22,"meta":23,"style":23},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[25,172595,172596,172602,172606,172621],{"__ignoreMap":23},[28,172597,172598,172600],{"class":30,"line":31},[28,172599,35],{"class":34},[28,172601,146311],{"class":38},[28,172603,172604],{"class":30,"line":48},[28,172605,2662],{"emptyLinePlaceholder":336},[28,172607,172608,172611,172613,172616,172619],{"class":30,"line":84},[28,172609,172610],{"class":38},"response ",[28,172612,54],{"class":34},[28,172614,172615],{"class":38}," requests.get(",[28,172617,172618],{"class":127},"\"https:\u002F\u002Fwww.example.com\"",[28,172620,81],{"class":38},[28,172622,172623,172625],{"class":30,"line":91},[28,172624,30675],{"class":60},[28,172626,172627],{"class":38},"(response.status_code)\n",[14,172629,172630],{},"查看已安装包：",[18,172632,172634],{"className":24084,"code":172633,"language":24086,"meta":23,"style":23},"pip list\n",[25,172635,172636],{"__ignoreMap":23},[28,172637,172638,172640],{"class":30,"line":31},[28,172639,24093],{"class":2225},[28,172641,119168],{"class":127},[14,172643,172644],{},"导出项目依赖：",[18,172646,172647],{"className":24084,"code":146506,"language":24086,"meta":23,"style":23},[25,172648,172649],{"__ignoreMap":23},[28,172650,172651,172653,172655,172657],{"class":30,"line":31},[28,172652,24093],{"class":2225},[28,172654,146515],{"class":127},[28,172656,26485],{"class":34},[28,172658,146520],{"class":127},[14,172660,172661],{},"安装项目依赖：",[18,172663,172664],{"className":24084,"code":146526,"language":24086,"meta":23,"style":23},[25,172665,172666],{"__ignoreMap":23},[28,172667,172668,172670,172672,172674],{"class":30,"line":31},[28,172669,24093],{"class":2225},[28,172671,24096],{"class":127},[28,172673,119852],{"class":60},[28,172675,146520],{"class":127},[351,172677,172679],{"id":172678},"_916-模块搜索路径","9.16 模块搜索路径",[14,172681,172682,172683,172686],{},"Python 导入模块时会在 ",[25,172684,172685],{},"sys.path"," 中查找。",[18,172688,172690],{"className":20,"code":172689,"language":22,"meta":23,"style":23},"import sys\n\nfor path in sys.path:\n    print(path)\n",[25,172691,172692,172698,172702,172714],{"__ignoreMap":23},[28,172693,172694,172696],{"class":30,"line":31},[28,172695,35],{"class":34},[28,172697,172408],{"class":38},[28,172699,172700],{"class":30,"line":48},[28,172701,2662],{"emptyLinePlaceholder":336},[28,172703,172704,172706,172709,172711],{"class":30,"line":84},[28,172705,3287],{"class":34},[28,172707,172708],{"class":38}," path ",[28,172710,26306],{"class":34},[28,172712,172713],{"class":38}," sys.path:\n",[28,172715,172716,172718],{"class":30,"line":91},[28,172717,31559],{"class":60},[28,172719,169442],{"class":38},[14,172721,172722],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172724,157836],{},[18,172726,172729],{"className":172727,"code":172728,"language":5449,"meta":23},[5447],"random.py\njson.py\ntime.py\n",[25,172730,172728],{"__ignoreMap":23},[14,172732,172733],{},"这些文件名可能导致导入异常。",[351,172735,172737],{"id":172736},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172739,172533],{},[18,172741,172744],{"className":172742,"code":172743,"language":5449,"meta":23},[5447],"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",[25,172745,172743],{"__ignoreMap":23},[14,172747,172748,24881],{},[25,172749,172750],{},"utils\u002Ffile_utils.py",[18,172752,172754],{"className":20,"code":172753,"language":22,"meta":23,"style":23},"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",[25,172755,172756,172762,172772,172776,172780,172790,172800,172808,172814,172818,172845,172855,172859,172863,172873,172899],{"__ignoreMap":23},[28,172757,172758,172760],{"class":30,"line":31},[28,172759,35],{"class":34},[28,172761,147304],{"class":38},[28,172763,172764,172766,172768,172770],{"class":30,"line":48},[28,172765,30997],{"class":34},[28,172767,108524],{"class":38},[28,172769,35],{"class":34},[28,172771,108529],{"class":38},[28,172773,172774],{"class":30,"line":84},[28,172775,2662],{"emptyLinePlaceholder":336},[28,172777,172778],{"class":30,"line":91},[28,172779,2662],{"emptyLinePlaceholder":336},[28,172781,172782,172784,172787],{"class":30,"line":97},[28,172783,32203],{"class":34},[28,172785,172786],{"class":2225}," read_json",[28,172788,172789],{"class":38},"(path):\n",[28,172791,172792,172795,172797],{"class":30,"line":103},[28,172793,172794],{"class":38},"    path ",[28,172796,54],{"class":34},[28,172798,172799],{"class":38}," Path(path)\n",[28,172801,172802,172804,172806],{"class":30,"line":109},[28,172803,3363],{"class":34},[28,172805,39186],{"class":34},[28,172807,169523],{"class":38},[28,172809,172810,172812],{"class":30,"line":118},[28,172811,15014],{"class":34},[28,172813,52094],{"class":38},[28,172815,172816],{"class":30,"line":124},[28,172817,2662],{"emptyLinePlaceholder":336},[28,172819,172820,172822,172824,172827,172829,172831,172833,172835,172837,172839,172841,172843],{"class":30,"line":131},[28,172821,34434],{"class":34},[28,172823,147004],{"class":60},[28,172825,172826],{"class":38},"(path, ",[28,172828,147014],{"class":127},[28,172830,12697],{"class":38},[28,172832,147019],{"class":5478},[28,172834,54],{"class":34},[28,172836,147024],{"class":127},[28,172838,13976],{"class":38},[28,172840,42],{"class":34},[28,172842,148366],{"class":5478},[28,172844,4001],{"class":38},[28,172846,172847,172849,172851,172853],{"class":30,"line":137},[28,172848,15014],{"class":34},[28,172850,148377],{"class":38},[28,172852,45610],{"class":5478},[28,172854,81],{"class":38},[28,172856,172857],{"class":30,"line":143},[28,172858,2662],{"emptyLinePlaceholder":336},[28,172860,172861],{"class":30,"line":149},[28,172862,2662],{"emptyLinePlaceholder":336},[28,172864,172865,172867,172870],{"class":30,"line":1890},[28,172866,32203],{"class":34},[28,172868,172869],{"class":2225}," write_json",[28,172871,172872],{"class":38},"(path, data):\n",[28,172874,172875,172877,172879,172881,172883,172885,172887,172889,172891,172893,172895,172897],{"class":30,"line":1904},[28,172876,34434],{"class":34},[28,172878,147004],{"class":60},[28,172880,172826],{"class":38},[28,172882,152189],{"class":127},[28,172884,12697],{"class":38},[28,172886,147019],{"class":5478},[28,172888,54],{"class":34},[28,172890,147024],{"class":127},[28,172892,13976],{"class":38},[28,172894,42],{"class":34},[28,172896,148366],{"class":5478},[28,172898,4001],{"class":38},[28,172900,172901,172904,172906,172908,172910,172912,172914,172916,172918,172920,172922],{"class":30,"line":1909},[28,172902,172903],{"class":38},"        json.dump(data, ",[28,172905,45610],{"class":5478},[28,172907,12697],{"class":38},[28,172909,147350],{"class":5478},[28,172911,54],{"class":34},[28,172913,34243],{"class":60},[28,172915,12697],{"class":38},[28,172917,152225],{"class":5478},[28,172919,54],{"class":34},[28,172921,211],{"class":60},[28,172923,81],{"class":38},[14,172925,172926,24881],{},[25,172927,154820],{},[18,172929,172931],{"className":20,"code":172930,"language":22,"meta":23,"style":23},"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",[25,172932,172933,172944,172948,172961,172981],{"__ignoreMap":23},[28,172934,172935,172937,172939,172941],{"class":30,"line":31},[28,172936,30997],{"class":34},[28,172938,172554],{"class":38},[28,172940,35],{"class":34},[28,172942,172943],{"class":38}," read_json, write_json\n",[28,172945,172946],{"class":30,"line":48},[28,172947,2662],{"emptyLinePlaceholder":336},[28,172949,172950,172952,172954,172957,172959],{"class":30,"line":84},[28,172951,159929],{"class":38},[28,172953,54],{"class":34},[28,172955,172956],{"class":38}," read_json(",[28,172958,152044],{"class":127},[28,172960,81],{"class":38},[28,172962,172963,172965,172967,172969,172971,172973,172975,172977,172979],{"class":30,"line":91},[28,172964,170747],{"class":38},[28,172966,62935],{"class":127},[28,172968,51693],{"class":38},[28,172970,150101],{"class":127},[28,172972,12697],{"class":38},[28,172974,151685],{"class":127},[28,172976,51693],{"class":38},[28,172978,1386],{"class":60},[28,172980,165365],{"class":38},[28,172982,172983,172986,172988],{"class":30,"line":97},[28,172984,172985],{"class":38},"write_json(",[28,172987,152044],{"class":127},[28,172989,172990],{"class":38},", students)\n",[351,172992,172994],{"id":172993},"_918-易错点","9.18 易错点",[363,172996,172997,173000,173005,173010,173013,173016],{},[366,172998,172999],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[366,173001,173002,173003,28648],{},"能指定异常类型就不要裸写 ",[25,173004,171107],{},[366,173006,173007,173009],{},[25,173008,171482],{}," 无论是否出错都会执行。",[366,173011,173012],{},"模块文件名不要和标准库重名。",[366,173014,173015],{},"导入自己写的模块时，要注意运行目录。",[366,173017,173018],{},"第三方包要安装到当前解释器或虚拟环境中。",[351,173020,173022],{"id":173021},"_919-本章练习","9.19 本章练习",[363,173024,173025,173028,173031,173037,173044],{},[366,173026,173027],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[366,173029,173030],{},"写函数读取文件，如果文件不存在则返回空字符串。",[366,173032,172445,173033,173036],{},[25,173034,173035],{},"math_utils.py","，实现加减乘除函数并导入使用。",[366,173038,173039,173040,173043],{},"创建一个 ",[25,173041,173042],{},"utils"," 包，把 JSON 读写函数放进去。",[366,173045,173046],{},"写一个程序，捕获除零异常和输入格式异常。",[328,173048,173049],{},"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":23,"searchDepth":48,"depth":48,"links":173051},[173052,173053,173054,173055,173056,173057,173058,173059,173060,173061,173062,173068,173075,173077,173078,173079,173080,173081,173082],{"id":170904,"depth":48,"text":170905},{"id":171032,"depth":48,"text":171033},{"id":171081,"depth":48,"text":171082},{"id":171230,"depth":48,"text":171231},{"id":171402,"depth":48,"text":171403},{"id":171471,"depth":48,"text":171472},{"id":171582,"depth":48,"text":171583},{"id":171708,"depth":48,"text":171709},{"id":171833,"depth":48,"text":171834},{"id":171888,"depth":48,"text":171889},{"id":171987,"depth":48,"text":171988,"children":173063},[173064,173065,173066,173067],{"id":171991,"depth":84,"text":171992},{"id":172025,"depth":84,"text":172026},{"id":172064,"depth":84,"text":172065},{"id":172143,"depth":84,"text":172144},{"id":172166,"depth":48,"text":172167,"children":173069},[173070,173071,173072,173073,173074],{"id":172170,"depth":84,"text":172171},{"id":172253,"depth":84,"text":172254},{"id":172298,"depth":84,"text":172299},{"id":172357,"depth":84,"text":172358},{"id":172395,"depth":84,"text":172396},{"id":172429,"depth":48,"text":173076},"9.13 if name == \"main\"",{"id":172522,"depth":48,"text":172523},{"id":172567,"depth":48,"text":172568},{"id":172678,"depth":48,"text":172679},{"id":172736,"depth":48,"text":172737},{"id":172993,"depth":48,"text":172994},{"id":173021,"depth":48,"text":173022},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170896,"description":333},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173089,"title":173090,"body":173091,"description":173254,"extension":334,"meta":173255,"navigation":336,"path":173256,"seo":173257,"stem":173258,"__hash__":173259},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173092,"toc":173249},[173093,173096,173099,173102,173113,173115,173189,173192,173195,173198,173201,173204,173207,173210,173213,173216,173219],[10,173094,173090],{"id":173095},"python教程",[14,173097,173098],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173100,173101],{},"建议学习环境：",[363,173103,173104,173107,173110],{},[366,173105,173106],{},"Python 版本：Python 3.10 及以上。",[366,173108,173109],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[366,173111,173112],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[351,173114,117291],{"id":117291},[363,173116,173117,173123,173129,173135,173141,173147,173153,173159,173165,173171,173177,173183],{},[366,173118,173119],{},[51,173120,173122],{"href":173121},".\u002Fch1-Python","Python环境与第一个程序",[366,173124,173125],{},[51,173126,173128],{"href":173127},".\u002Fch2","基础语法、变量与字符串",[366,173130,173131],{},[51,173132,173134],{"href":173133},".\u002Fch3","判断语句",[366,173136,173137],{},[51,173138,173140],{"href":173139},".\u002Fch4","循环语句",[366,173142,173143],{},[51,173144,173146],{"href":173145},".\u002Fch5","函数基础",[366,173148,173149],{},[51,173150,173152],{"href":173151},".\u002Fch6","数据容器",[366,173154,173155],{},[51,173156,173158],{"href":173157},".\u002Fch7","函数进阶",[366,173160,173161],{},[51,173162,173164],{"href":173163},".\u002Fch8","文件操作",[366,173166,173167],{},[51,173168,173170],{"href":173169},".\u002Fch9","异常、模块与包",[366,173172,173173],{},[51,173174,173176],{"href":173175},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[366,173178,173179],{},[51,173180,173182],{"href":173181},".\u002Fch11","面向对象基础",[366,173184,173185],{},[51,173186,173188],{"href":173187},".\u002Fch12","综合案例与复习路线",[351,173190,173191],{"id":173191},"学习路线",[14,173193,173194],{},"第一阶段：能运行程序。",[14,173196,173197],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173199,173200],{},"第二阶段：能组织数据。",[14,173202,173203],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173205,173206],{},"第三阶段：能封装逻辑。",[14,173208,173209],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173211,173212],{},"第四阶段：能做小项目。",[14,173214,173215],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[351,173217,173218],{"id":173218},"参考资料",[363,173220,173221,173228,173235,173242],{},[366,173222,173223,173224],{},"黑马程序员 Python 入门教程推荐：",[51,173225,173226],{"href":173226,"rel":173227},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24127],[366,173229,173230,173231],{},"Python 官方中文教程：",[51,173232,173233],{"href":173233,"rel":173234},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24127],[366,173236,173237,173238],{},"Python 标准库文档：",[51,173239,173240],{"href":173240,"rel":173241},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24127],[366,173243,173244,173245],{},"pyecharts 文档：",[51,173246,173247],{"href":173247,"rel":173248},"https:\u002F\u002Fpyecharts.org\u002F",[24127],{"title":23,"searchDepth":48,"depth":48,"links":173250},[173251,173252,173253],{"id":117291,"depth":48,"text":117291},{"id":173191,"depth":48,"text":173191},{"id":173218,"depth":48,"text":173218},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23640},"\u002Fwiki\u002F2024-10-10-python",{"title":173090,"description":173254},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331445711]