[{"data":1,"prerenderedAt":173441},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-shu-xue-han-shu":3,"wiki-doc-nav":567},{"id":4,"title":5,"body":6,"description":559,"extension":560,"meta":561,"navigation":562,"path":563,"seo":564,"stem":565,"__hash__":566},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":8,"toc":550},"minimark",[9,13,17,59,64,136,188,192,195,234,289,292,334,413,417,423,427,430,464,467,471,474,477,480,483,488,492,495,498,501,504,509,513,518,521,546],[10,11,5],"h1",{"id":12},"_9数学函数",[14,15,16],"p",{},"补充回顾：python的列表推导式",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-python shiki shiki-themes github-light github-dark","[1\u002Fi for i in a]\n","python","",[25,26,27],"code",{"__ignoreMap":23},[28,29,32,36,40,44,47,50,53,56],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sVt8B","[",[28,37,39],{"class":38},"sj4cs","1",[28,41,43],{"class":42},"szBVR","\u002F",[28,45,46],{"class":34},"i ",[28,48,49],{"class":42},"for",[28,51,52],{"class":34}," i ",[28,54,55],{"class":42},"in",[28,57,58],{"class":34}," a]\n",[60,61,63],"h2",{"id":62},"_91-求倒数","9.1 求倒数",[18,65,67],{"className":20,"code":66,"language":22,"meta":23,"style":23},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[25,68,69,75,112,126],{"__ignoreMap":23},[28,70,71],{"class":30,"line":31},[28,72,74],{"class":73},"sJ8bj","#数组求倒数\n",[28,76,78,81,84,86,88,91,94,96,99,101,104,106,109],{"class":30,"line":77},2,[28,79,80],{"class":34},"a",[28,82,83],{"class":42},"=",[28,85,35],{"class":34},[28,87,39],{"class":38},[28,89,90],{"class":34},",",[28,92,93],{"class":38},"2",[28,95,90],{"class":34},[28,97,98],{"class":38},"3",[28,100,90],{"class":34},[28,102,103],{"class":38},"4",[28,105,90],{"class":34},[28,107,108],{"class":38},"5",[28,110,111],{"class":34},"]\n",[28,113,115,118,120,123],{"class":30,"line":114},3,[28,116,117],{"class":34},"b",[28,119,83],{"class":42},[28,121,122],{"class":34},"np.array(a)",[28,124,125],{"class":73},"#将列表转换为数组\n",[28,127,129,131,133],{"class":30,"line":128},4,[28,130,39],{"class":38},[28,132,43],{"class":42},[28,134,135],{"class":34},"b\n",[18,137,139],{"className":20,"code":138,"language":22,"meta":23,"style":23},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[25,140,141,169,178,183],{"__ignoreMap":23},[28,142,143,145,147,149,151,153,155,157,159,161,163,165,167],{"class":30,"line":31},[28,144,80],{"class":34},[28,146,83],{"class":42},[28,148,35],{"class":34},[28,150,39],{"class":38},[28,152,90],{"class":34},[28,154,93],{"class":38},[28,156,90],{"class":34},[28,158,98],{"class":38},[28,160,90],{"class":34},[28,162,103],{"class":38},[28,164,90],{"class":34},[28,166,108],{"class":38},[28,168,111],{"class":34},[28,170,171,173,175],{"class":30,"line":77},[28,172,117],{"class":34},[28,174,83],{"class":42},[28,176,177],{"class":34},"np.array(a)\n",[28,179,180],{"class":30,"line":114},[28,181,182],{"class":73},"#调用numpy中的函数reciprocal()\n",[28,184,185],{"class":30,"line":128},[28,186,187],{"class":34},"np.reciprocal(b)\n",[60,189,191],{"id":190},"_92-求平方","9.2 求平方",[14,193,194],{},"①一维数组",[18,196,198],{"className":20,"code":197,"language":22,"meta":23,"style":23},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[25,199,200,205,210,229],{"__ignoreMap":23},[28,201,202],{"class":30,"line":31},[28,203,204],{"class":73},"#square()，求平方\n",[28,206,207],{"class":30,"line":77},[28,208,209],{"class":73},"#一维数组\n",[28,211,212,214,216,219,221,223,226],{"class":30,"line":114},[28,213,80],{"class":34},[28,215,83],{"class":42},[28,217,218],{"class":34},"np.arange(",[28,220,39],{"class":38},[28,222,90],{"class":34},[28,224,225],{"class":38},"10",[28,227,228],{"class":34},")\n",[28,230,231],{"class":30,"line":128},[28,232,233],{"class":34},"np.square(a)\n",[18,235,237],{"className":20,"code":236,"language":22,"meta":23,"style":23},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[25,238,239,244,249,271],{"__ignoreMap":23},[28,240,241],{"class":30,"line":31},[28,242,243],{"class":73},"#或者通过循环遍历的形式来计算\n",[28,245,246],{"class":30,"line":77},[28,247,248],{"class":73},"#这是一个列表\n",[28,250,251,254,257,259,261,263,265,268],{"class":30,"line":114},[28,252,253],{"class":34},"[i",[28,255,256],{"class":42},"*",[28,258,46],{"class":34},[28,260,49],{"class":42},[28,262,52],{"class":34},[28,264,55],{"class":42},[28,266,267],{"class":34}," a]",[28,269,270],{"class":73},"#这个求完之后在数列当中\n",[28,272,273,276,278,280,282,284,286],{"class":30,"line":128},[28,274,275],{"class":34},"np.array([i",[28,277,256],{"class":42},[28,279,46],{"class":34},[28,281,49],{"class":42},[28,283,52],{"class":34},[28,285,55],{"class":42},[28,287,288],{"class":34}," a])\n",[14,290,291],{},"②二维数组",[18,293,295],{"className":20,"code":294,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[25,296,297,302,329],{"__ignoreMap":23},[28,298,299],{"class":30,"line":31},[28,300,301],{"class":73},"#二维数组\n",[28,303,304,307,309,311,313,315,318,321,323,325,327],{"class":30,"line":77},[28,305,306],{"class":34},"aa",[28,308,83],{"class":42},[28,310,218],{"class":34},[28,312,39],{"class":38},[28,314,90],{"class":34},[28,316,317],{"class":38},"13",[28,319,320],{"class":34},").reshape(",[28,322,103],{"class":38},[28,324,90],{"class":34},[28,326,98],{"class":38},[28,328,228],{"class":34},[28,330,331],{"class":30,"line":114},[28,332,333],{"class":34},"np.square(aa)\n",[18,335,337],{"className":20,"code":336,"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,338,339,344,354,373,391,407],{"__ignoreMap":23},[28,340,341],{"class":30,"line":31},[28,342,343],{"class":73},"#传统的方式\n",[28,345,346,349,351],{"class":30,"line":77},[28,347,348],{"class":34},"bb",[28,350,83],{"class":42},[28,352,353],{"class":34},"np.empty_like(aa)\n",[28,355,356,358,360,362,365,368,370],{"class":30,"line":114},[28,357,49],{"class":42},[28,359,52],{"class":34},[28,361,55],{"class":42},[28,363,364],{"class":38}," range",[28,366,367],{"class":34},"(",[28,369,103],{"class":38},[28,371,372],{"class":34},"):\n",[28,374,375,378,381,383,385,387,389],{"class":30,"line":128},[28,376,377],{"class":42},"    for",[28,379,380],{"class":34}," j ",[28,382,55],{"class":42},[28,384,364],{"class":38},[28,386,367],{"class":34},[28,388,98],{"class":38},[28,390,372],{"class":34},[28,392,394,397,399,402,404],{"class":30,"line":393},5,[28,395,396],{"class":34},"        bb[i,j]",[28,398,83],{"class":42},[28,400,401],{"class":34},"aa[i,j]",[28,403,256],{"class":42},[28,405,406],{"class":34},"aa[i,j]\n",[28,408,410],{"class":30,"line":409},6,[28,411,412],{"class":34},"bb\n",[60,414,416],{"id":415},"_93-求各元素的符号","9.3 求各元素的符号",[14,418,419],{},[420,421],"img",{"alt":23,"src":422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[60,424,426],{"id":425},"_94-modf函数","9.4 modf函数",[14,428,429],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[18,431,433],{"className":20,"code":432,"language":22,"meta":23,"style":23},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[25,434,435,459],{"__ignoreMap":23},[28,436,437,439,441,443,446,448,450,452,454,457],{"class":30,"line":31},[28,438,80],{"class":34},[28,440,83],{"class":42},[28,442,218],{"class":34},[28,444,445],{"class":42},"-",[28,447,225],{"class":38},[28,449,90],{"class":34},[28,451,225],{"class":38},[28,453,90],{"class":34},[28,455,456],{"class":38},"0.3",[28,458,228],{"class":34},[28,460,461],{"class":30,"line":77},[28,462,463],{"class":34},"np.modf(a)\n",[14,465,466],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[60,468,470],{"id":469},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,472,473],{},"np.cell()",[14,475,476],{},"np.floor()",[14,478,479],{},"np.rint()",[14,481,482],{},"对各元素分别向上取整、向下取整、四舍五入",[14,484,485],{},[420,486],{"alt":23,"src":487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[60,489,491],{"id":490},"_96-around函数","9.6 around()函数",[14,493,494],{},"around()函数也可以实现对数的小数位数进行操作",[14,496,497],{},"其中的参数：",[14,499,500],{},"1.要传的数组",[14,502,503],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,505,506],{},[420,507],{"alt":23,"src":508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[60,510,512],{"id":511},"_97-三角函数","9.7 三角函数",[14,514,515],{},[420,516],{"alt":23,"src":517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,519,520],{},"引入图像模块非常重要",[18,522,524],{"className":20,"code":523,"language":22,"meta":23,"style":23},"from matplotlib import pyplot as plt\n",[25,525,526],{"__ignoreMap":23},[28,527,528,531,534,537,540,543],{"class":30,"line":31},[28,529,530],{"class":42},"from",[28,532,533],{"class":34}," matplotlib ",[28,535,536],{"class":42},"import",[28,538,539],{"class":34}," pyplot ",[28,541,542],{"class":42},"as",[28,544,545],{"class":34}," plt\n",[547,548,549],"style",{},"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":77,"depth":77,"links":551},[552,553,554,555,556,557,558],{"id":62,"depth":77,"text":63},{"id":190,"depth":77,"text":191},{"id":415,"depth":77,"text":416},{"id":425,"depth":77,"text":426},{"id":469,"depth":77,"text":470},{"id":490,"depth":77,"text":491},{"id":511,"depth":77,"text":512},null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":5,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",[568,5650,6758,8178,11165,12516,14005,15094,23857,23869,24468,24494,24618,24859,24924,24942,24955,25002,25126,25295,25494,25674,25879,26015,26110,26147,26160,26470,27210,27918,27939,28959,30590,30741,30754,30766,31064,50870,50885,50902,50935,53807,77155,93300,93321,93434,93553,94320,94983,95343,95381,95487,95587,95630,95656,95717,97371,97472,97497,97988,98488,99567,99850,100592,101018,101030,103046,104710,106213,107911,109828,111747,113769,117239,117671,118134,118883,121827,122175,122197,122553,125860,125872,126275,126298,126445,126612,126817,127118,127675,128332,130263,131861,132510,134004,135435,136670,138364,140116,142526,142642,143577,143788,144673,145908,146136,146149,147304,149716,152084,155405,157882,159526,161303,163316,166368,168548,171075,173269],{"id":569,"title":570,"body":571,"description":23,"extension":560,"meta":5645,"navigation":562,"path":5646,"seo":5647,"stem":5648,"__hash__":5649},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":572,"toc":5617},[573,576,580,583,587,600,604,609,612,615,618,621,624,650,654,657,660,663,666,714,718,737,739,753,756,764,767,1618,1625,1642,1646,1733,1737,1743,1832,1836,1874,1878,1942,1946,1950,1956,1967,1971,1976,1980,1985,1989,1994,1998,2002,2007,2277,2282,2420,2425,2682,2685,2693,2697,2702,2805,2808,3114,3123,3224,3227,3230,3233,3236,3496,3501,3640,3643,3821,3824,3952,3955,4107,4111,4116,4119,4130,4138,4141,4248,4252,4256,4261,4311,4316,4321,4345,4350,4403,4406,4411,4588,4593,4878,4883,5280,5284,5289,5346,5351,5359,5362,5502,5505,5614],[10,574,570],{"id":575},"_1基础入门",[60,577,579],{"id":578},"_11注释","1.1注释",[14,581,582],{},"\u002F\u002F或者\u002F* *\u002F",[60,584,586],{"id":585},"_12命名","1.2命名",[588,589,590,594,597],"ol",{},[591,592,593],"li",{},"字母数字下划线",[591,595,596],{},"开头必须是字母或_",[591,598,599],{},"不能使用关键词",[60,601,603],{"id":602},"_13数据类型","1.3数据类型",[605,606,608],"h3",{"id":607},"_131整形","1.3.1整形",[14,610,611],{},"short 短整形 2",[14,613,614],{},"int 整形 4",[14,616,617],{},"long 长整形 win4 linux32位4 linux64位8",[14,619,620],{},"long long 长长整形 8",[14,622,623],{},"利用sizeof可以求数据类型占用的内存空间大小",[18,625,629],{"className":626,"code":627,"language":628,"meta":23,"style":23},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[25,630,631,643],{"__ignoreMap":23},[28,632,633,636,638,641],{"class":30,"line":31},[28,634,635],{"class":42},"sizeof",[28,637,367],{"class":34},[28,639,640],{"class":42},"int",[28,642,228],{"class":34},[28,644,645,647],{"class":30,"line":77},[28,646,635],{"class":42},[28,648,649],{"class":34},"(num)\n",[605,651,653],{"id":652},"_132浮点型","1.3.2浮点型",[14,655,656],{},"float 单精度 4节 7位有效数字",[14,658,659],{},"double 双精度 8节 15-16有效数字",[14,661,662],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,664,665],{},"注意点：",[18,667,669],{"className":626,"code":668,"language":628,"meta":23,"style":23},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[25,670,671,693],{"__ignoreMap":23},[28,672,673,676,679,681,684,687,690],{"class":30,"line":31},[28,674,675],{"class":42},"float",[28,677,678],{"class":34}," f1",[28,680,83],{"class":42},[28,682,683],{"class":38},"3.14",[28,685,686],{"class":42},"f",[28,688,689],{"class":34},";",[28,691,692],{"class":73}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[28,694,695,697,700,702,704,707,709,711],{"class":30,"line":77},[28,696,675],{"class":42},[28,698,699],{"class":34}," f2",[28,701,83],{"class":42},[28,703,98],{"class":38},[28,705,706],{"class":42},"e",[28,708,93],{"class":38},[28,710,689],{"class":34},[28,712,713],{"class":73}," \u002F\u002F科学记数法\n",[605,715,717],{"id":716},"_133字符型","1.3.3字符型",[18,719,721],{"className":626,"code":720,"language":628,"meta":23,"style":23},"char ch='a'\n",[25,722,723],{"__ignoreMap":23},[28,724,725,728,731,733],{"class":30,"line":31},[28,726,727],{"class":42},"char",[28,729,730],{"class":34}," ch",[28,732,83],{"class":42},[28,734,736],{"class":735},"sZZnC","'a'\n",[14,738,665],{},[588,740,741,744,747,750],{},[591,742,743],{},"在显示字符型变量时，只能单引号，双引号x",[591,745,746],{},"单引号内只能一个字符，不能字符串",[591,748,749],{},"c和c++字符型变量只占用一个字符",[591,751,752],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,754,755],{},"ASCII码大致由以下两部分组成：",[588,757,758,761],{},[591,759,760],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[591,762,763],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,765,766],{},"ASCII码表格：",[768,769,770,814],"table",{},[771,772,773],"thead",{},[774,775,776,784,789,793,798,802,806,810],"tr",{},[777,778,779,783],"th",{},[780,781,782],"strong",{},"ASCII","值",[777,785,786],{},[780,787,788],{},"控制字符",[777,790,791,783],{},[780,792,782],{},[777,794,795],{},[780,796,797],{},"字符",[777,799,800,783],{},[780,801,782],{},[777,803,804],{},[780,805,797],{},[777,807,808,783],{},[780,809,782],{},[777,811,812],{},[780,813,797],{},[815,816,817,844,868,892,917,942,966,991,1016,1041,1067,1091,1117,1142,1166,1192,1217,1241,1266,1291,1316,1341,1366,1391,1416,1441,1466,1492,1516,1541,1566,1592],"tbody",{},[774,818,819,823,826,829,832,835,838,841],{},[820,821,822],"td",{},"0",[820,824,825],{},"NUT",[820,827,828],{},"32",[820,830,831],{},"(space)",[820,833,834],{},"64",[820,836,837],{},"@",[820,839,840],{},"96",[820,842,843],{},"、",[774,845,846,848,851,854,857,860,863,866],{},[820,847,39],{},[820,849,850],{},"SOH",[820,852,853],{},"33",[820,855,856],{},"!",[820,858,859],{},"65",[820,861,862],{},"A",[820,864,865],{},"97",[820,867,80],{},[774,869,870,872,875,878,881,884,887,890],{},[820,871,93],{},[820,873,874],{},"STX",[820,876,877],{},"34",[820,879,880],{},"\"",[820,882,883],{},"66",[820,885,886],{},"B",[820,888,889],{},"98",[820,891,117],{},[774,893,894,896,899,902,905,908,911,914],{},[820,895,98],{},[820,897,898],{},"ETX",[820,900,901],{},"35",[820,903,904],{},"#",[820,906,907],{},"67",[820,909,910],{},"C",[820,912,913],{},"99",[820,915,916],{},"c",[774,918,919,921,924,927,930,933,936,939],{},[820,920,103],{},[820,922,923],{},"EOT",[820,925,926],{},"36",[820,928,929],{},"$",[820,931,932],{},"68",[820,934,935],{},"D",[820,937,938],{},"100",[820,940,941],{},"d",[774,943,944,946,949,952,955,958,961,964],{},[820,945,108],{},[820,947,948],{},"ENQ",[820,950,951],{},"37",[820,953,954],{},"%",[820,956,957],{},"69",[820,959,960],{},"E",[820,962,963],{},"101",[820,965,706],{},[774,967,968,971,974,977,980,983,986,989],{},[820,969,970],{},"6",[820,972,973],{},"ACK",[820,975,976],{},"38",[820,978,979],{},"&",[820,981,982],{},"70",[820,984,985],{},"F",[820,987,988],{},"102",[820,990,686],{},[774,992,993,996,999,1002,1004,1007,1010,1013],{},[820,994,995],{},"7",[820,997,998],{},"BEL",[820,1000,1001],{},"39",[820,1003,90],{},[820,1005,1006],{},"71",[820,1008,1009],{},"G",[820,1011,1012],{},"103",[820,1014,1015],{},"g",[774,1017,1018,1021,1024,1027,1029,1032,1035,1038],{},[820,1019,1020],{},"8",[820,1022,1023],{},"BS",[820,1025,1026],{},"40",[820,1028,367],{},[820,1030,1031],{},"72",[820,1033,1034],{},"H",[820,1036,1037],{},"104",[820,1039,1040],{},"h",[774,1042,1043,1046,1049,1052,1055,1058,1061,1064],{},[820,1044,1045],{},"9",[820,1047,1048],{},"HT",[820,1050,1051],{},"41",[820,1053,1054],{},")",[820,1056,1057],{},"73",[820,1059,1060],{},"I",[820,1062,1063],{},"105",[820,1065,1066],{},"i",[774,1068,1069,1071,1074,1077,1079,1082,1085,1088],{},[820,1070,225],{},[820,1072,1073],{},"LF",[820,1075,1076],{},"42",[820,1078,256],{},[820,1080,1081],{},"74",[820,1083,1084],{},"J",[820,1086,1087],{},"106",[820,1089,1090],{},"j",[774,1092,1093,1096,1099,1102,1105,1108,1111,1114],{},[820,1094,1095],{},"11",[820,1097,1098],{},"VT",[820,1100,1101],{},"43",[820,1103,1104],{},"+",[820,1106,1107],{},"75",[820,1109,1110],{},"K",[820,1112,1113],{},"107",[820,1115,1116],{},"k",[774,1118,1119,1122,1125,1128,1130,1133,1136,1139],{},[820,1120,1121],{},"12",[820,1123,1124],{},"FF",[820,1126,1127],{},"44",[820,1129,90],{},[820,1131,1132],{},"76",[820,1134,1135],{},"L",[820,1137,1138],{},"108",[820,1140,1141],{},"l",[774,1143,1144,1146,1149,1152,1154,1157,1160,1163],{},[820,1145,317],{},[820,1147,1148],{},"CR",[820,1150,1151],{},"45",[820,1153,445],{},[820,1155,1156],{},"77",[820,1158,1159],{},"M",[820,1161,1162],{},"109",[820,1164,1165],{},"m",[774,1167,1168,1171,1174,1177,1180,1183,1186,1189],{},[820,1169,1170],{},"14",[820,1172,1173],{},"SO",[820,1175,1176],{},"46",[820,1178,1179],{},".",[820,1181,1182],{},"78",[820,1184,1185],{},"N",[820,1187,1188],{},"110",[820,1190,1191],{},"n",[774,1193,1194,1197,1200,1203,1205,1208,1211,1214],{},[820,1195,1196],{},"15",[820,1198,1199],{},"SI",[820,1201,1202],{},"47",[820,1204,43],{},[820,1206,1207],{},"79",[820,1209,1210],{},"O",[820,1212,1213],{},"111",[820,1215,1216],{},"o",[774,1218,1219,1222,1225,1228,1230,1233,1236,1239],{},[820,1220,1221],{},"16",[820,1223,1224],{},"DLE",[820,1226,1227],{},"48",[820,1229,822],{},[820,1231,1232],{},"80",[820,1234,1235],{},"P",[820,1237,1238],{},"112",[820,1240,14],{},[774,1242,1243,1246,1249,1252,1254,1257,1260,1263],{},[820,1244,1245],{},"17",[820,1247,1248],{},"DCI",[820,1250,1251],{},"49",[820,1253,39],{},[820,1255,1256],{},"81",[820,1258,1259],{},"Q",[820,1261,1262],{},"113",[820,1264,1265],{},"q",[774,1267,1268,1271,1274,1277,1279,1282,1285,1288],{},[820,1269,1270],{},"18",[820,1272,1273],{},"DC2",[820,1275,1276],{},"50",[820,1278,93],{},[820,1280,1281],{},"82",[820,1283,1284],{},"R",[820,1286,1287],{},"114",[820,1289,1290],{},"r",[774,1292,1293,1296,1299,1302,1304,1307,1310,1313],{},[820,1294,1295],{},"19",[820,1297,1298],{},"DC3",[820,1300,1301],{},"51",[820,1303,98],{},[820,1305,1306],{},"83",[820,1308,1309],{},"S",[820,1311,1312],{},"115",[820,1314,1315],{},"s",[774,1317,1318,1321,1324,1327,1329,1332,1335,1338],{},[820,1319,1320],{},"20",[820,1322,1323],{},"DC4",[820,1325,1326],{},"52",[820,1328,103],{},[820,1330,1331],{},"84",[820,1333,1334],{},"T",[820,1336,1337],{},"116",[820,1339,1340],{},"t",[774,1342,1343,1346,1349,1352,1354,1357,1360,1363],{},[820,1344,1345],{},"21",[820,1347,1348],{},"NAK",[820,1350,1351],{},"53",[820,1353,108],{},[820,1355,1356],{},"85",[820,1358,1359],{},"U",[820,1361,1362],{},"117",[820,1364,1365],{},"u",[774,1367,1368,1371,1374,1377,1379,1382,1385,1388],{},[820,1369,1370],{},"22",[820,1372,1373],{},"SYN",[820,1375,1376],{},"54",[820,1378,970],{},[820,1380,1381],{},"86",[820,1383,1384],{},"V",[820,1386,1387],{},"118",[820,1389,1390],{},"v",[774,1392,1393,1396,1399,1402,1404,1407,1410,1413],{},[820,1394,1395],{},"23",[820,1397,1398],{},"TB",[820,1400,1401],{},"55",[820,1403,995],{},[820,1405,1406],{},"87",[820,1408,1409],{},"W",[820,1411,1412],{},"119",[820,1414,1415],{},"w",[774,1417,1418,1421,1424,1427,1429,1432,1435,1438],{},[820,1419,1420],{},"24",[820,1422,1423],{},"CAN",[820,1425,1426],{},"56",[820,1428,1020],{},[820,1430,1431],{},"88",[820,1433,1434],{},"X",[820,1436,1437],{},"120",[820,1439,1440],{},"x",[774,1442,1443,1446,1449,1452,1454,1457,1460,1463],{},[820,1444,1445],{},"25",[820,1447,1448],{},"EM",[820,1450,1451],{},"57",[820,1453,1045],{},[820,1455,1456],{},"89",[820,1458,1459],{},"Y",[820,1461,1462],{},"121",[820,1464,1465],{},"y",[774,1467,1468,1471,1474,1477,1480,1483,1486,1489],{},[820,1469,1470],{},"26",[820,1472,1473],{},"SUB",[820,1475,1476],{},"58",[820,1478,1479],{},":",[820,1481,1482],{},"90",[820,1484,1485],{},"Z",[820,1487,1488],{},"122",[820,1490,1491],{},"z",[774,1493,1494,1497,1500,1503,1505,1508,1510,1513],{},[820,1495,1496],{},"27",[820,1498,1499],{},"ESC",[820,1501,1502],{},"59",[820,1504,689],{},[820,1506,1507],{},"91",[820,1509,35],{},[820,1511,1512],{},"123",[820,1514,1515],{},"{",[774,1517,1518,1521,1524,1527,1530,1533,1535,1538],{},[820,1519,1520],{},"28",[820,1522,1523],{},"FS",[820,1525,1526],{},"60",[820,1528,1529],{},"\u003C",[820,1531,1532],{},"92",[820,1534,43],{},[820,1536,1537],{},"124",[820,1539,1540],{},"|",[774,1542,1543,1546,1549,1552,1554,1557,1560,1563],{},[820,1544,1545],{},"29",[820,1547,1548],{},"GS",[820,1550,1551],{},"61",[820,1553,83],{},[820,1555,1556],{},"93",[820,1558,1559],{},"]",[820,1561,1562],{},"125",[820,1564,1565],{},"}",[774,1567,1568,1571,1574,1577,1580,1583,1586,1589],{},[820,1569,1570],{},"30",[820,1572,1573],{},"RS",[820,1575,1576],{},"62",[820,1578,1579],{},">",[820,1581,1582],{},"94",[820,1584,1585],{},"^",[820,1587,1588],{},"126",[820,1590,1591],{},"`",[774,1593,1594,1597,1600,1603,1606,1609,1612,1615],{},[820,1595,1596],{},"31",[820,1598,1599],{},"US",[820,1601,1602],{},"63",[820,1604,1605],{},"?",[820,1607,1608],{},"95",[820,1610,1611],{},"_",[820,1613,1614],{},"127",[820,1616,1617],{},"DEL",[14,1619,1620,1621,1624],{},"ASCII 码大致由以下",[780,1622,1623],{},"两部分组","成：",[1626,1627,1628,1635],"ul",{},[591,1629,1630,1631,1634],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[780,1632,1633],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[591,1636,1637,1638,1641],{},"ASCII 打印字符：数字 ",[780,1639,1640],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[605,1643,1645],{"id":1644},"_134转义字符","1.3.4转义字符",[18,1647,1649],{"className":626,"code":1648,"language":628,"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,1650,1651,1656,1672,1686,1691,1704,1709],{"__ignoreMap":23},[28,1652,1653],{"class":30,"line":31},[28,1654,1655],{"class":73},"\u002F\u002F换行符\n",[28,1657,1658,1661,1664,1667,1669],{"class":30,"line":77},[28,1659,1660],{"class":34},"cout ",[28,1662,1663],{"class":42},"\u003C\u003C",[28,1665,1666],{"class":735},"\"hello world\u002Fn\"",[28,1668,689],{"class":34},[28,1670,1671],{"class":73}," \u002F\u002F就等同于如下：\n",[28,1673,1674,1676,1678,1681,1683],{"class":30,"line":114},[28,1675,1660],{"class":34},[28,1677,1663],{"class":42},[28,1679,1680],{"class":735},"\"hello world\"",[28,1682,1663],{"class":42},[28,1684,1685],{"class":34},"endl;\n",[28,1687,1688],{"class":30,"line":128},[28,1689,1690],{"class":73},"\u002F\u002F反斜杠\n",[28,1692,1693,1695,1697,1700,1702],{"class":30,"line":393},[28,1694,1660],{"class":34},[28,1696,1663],{"class":42},[28,1698,1699],{"class":735},"\"\u002F\u002F\"",[28,1701,1663],{"class":42},[28,1703,1685],{"class":34},[28,1705,1706],{"class":30,"line":409},[28,1707,1708],{"class":73},"\u002F\u002F水平制表符\n",[28,1710,1712,1714,1716,1719,1722,1725,1727,1730],{"class":30,"line":1711},7,[28,1713,1660],{"class":34},[28,1715,1663],{"class":42},[28,1717,1718],{"class":735},"\"aaaa",[28,1720,1721],{"class":38},"\\t",[28,1723,1724],{"class":735},"helloworld\"",[28,1726,1663],{"class":42},[28,1728,1729],{"class":34},"endl;",[28,1731,1732],{"class":73}," \u002F\u002F输出窗口时有对齐效果\n",[605,1734,1736],{"id":1735},"_135字符串型","1.3.5字符串型",[14,1738,1739,1740,1742],{},"char 变量名",[28,1741],{},"=\"字符串值\"",[18,1744,1746],{"className":626,"code":1745,"language":628,"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,1747,1748,1753,1758,1763,1768,1782,1795,1800,1806,1818],{"__ignoreMap":23},[28,1749,1750],{"class":30,"line":31},[28,1751,1752],{"class":73},"\u002F\u002Fc风格字符串\n",[28,1754,1755],{"class":30,"line":77},[28,1756,1757],{"class":73},"\u002F\u002F注意事项：\n",[28,1759,1760],{"class":30,"line":114},[28,1761,1762],{"class":73},"\u002F\u002F1.char字符串名[]\n",[28,1764,1765],{"class":30,"line":128},[28,1766,1767],{"class":73},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[28,1769,1770,1772,1775,1777,1779],{"class":30,"line":393},[28,1771,727],{"class":42},[28,1773,1774],{"class":34}," str[]",[28,1776,83],{"class":42},[28,1778,1680],{"class":735},[28,1780,1781],{"class":34},";\n",[28,1783,1784,1786,1788,1791,1793],{"class":30,"line":409},[28,1785,1660],{"class":34},[28,1787,1663],{"class":42},[28,1789,1790],{"class":34},"str",[28,1792,1663],{"class":42},[28,1794,1685],{"class":34},[28,1796,1797],{"class":30,"line":1711},[28,1798,1799],{"class":73},"\u002F\u002Fc++风格字符串\n",[28,1801,1803],{"class":30,"line":1802},8,[28,1804,1805],{"class":73},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[28,1807,1809,1812,1814,1816],{"class":30,"line":1808},9,[28,1810,1811],{"class":34},"string str2",[28,1813,83],{"class":42},[28,1815,1680],{"class":735},[28,1817,1781],{"class":34},[28,1819,1821,1823,1825,1828,1830],{"class":30,"line":1820},10,[28,1822,1660],{"class":34},[28,1824,1663],{"class":42},[28,1826,1827],{"class":34},"str2",[28,1829,1663],{"class":42},[28,1831,1685],{"class":34},[605,1833,1835],{"id":1834},"_136布尔类型bool","1.3.6布尔类型bool",[18,1837,1839],{"className":626,"code":1838,"language":628,"meta":23,"style":23},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[25,1840,1841,1856],{"__ignoreMap":23},[28,1842,1843,1846,1849,1851,1854],{"class":30,"line":31},[28,1844,1845],{"class":42},"bool",[28,1847,1848],{"class":34}," flag",[28,1850,83],{"class":42},[28,1852,1853],{"class":38},"true",[28,1855,1781],{"class":34},[28,1857,1858,1861,1864,1867,1869,1871],{"class":30,"line":77},[28,1859,1860],{"class":34},"cout",[28,1862,1863],{"class":42},"\u003C\u003Csizeof",[28,1865,1866],{"class":34},"(flag)",[28,1868,1663],{"class":42},[28,1870,1729],{"class":34},[28,1872,1873],{"class":73}," \u002F\u002F查看布尔占内存空间\n",[60,1875,1877],{"id":1876},"_14键盘输入cin","1.4键盘输入cin",[18,1879,1881],{"className":626,"code":1880,"language":628,"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,1882,1883,1896,1913,1924],{"__ignoreMap":23},[28,1884,1885,1887,1890,1892,1894],{"class":30,"line":31},[28,1886,640],{"class":42},[28,1888,1889],{"class":34}," a",[28,1891,83],{"class":42},[28,1893,822],{"class":38},[28,1895,1781],{"class":34},[28,1897,1898,1900,1902,1905,1907,1909,1911],{"class":30,"line":77},[28,1899,1860],{"class":34},[28,1901,1663],{"class":42},[28,1903,1904],{"class":735},"\"请给整型变量a赋值\"",[28,1906,1663],{"class":42},[28,1908,80],{"class":34},[28,1910,1663],{"class":42},[28,1912,1685],{"class":34},[28,1914,1915,1918,1921],{"class":30,"line":114},[28,1916,1917],{"class":34},"cin ",[28,1919,1920],{"class":42},">>",[28,1922,1923],{"class":34}," a;\n",[28,1925,1926,1928,1930,1933,1936,1938,1940],{"class":30,"line":128},[28,1927,1660],{"class":34},[28,1929,1663],{"class":42},[28,1931,1932],{"class":735}," \"整型变量a=\"",[28,1934,1935],{"class":42}," \u003C\u003C",[28,1937,80],{"class":34},[28,1939,1663],{"class":42},[28,1941,1685],{"class":34},[60,1943,1945],{"id":1944},"_15运算符","1.5运算符",[605,1947,1949],{"id":1948},"_151算术运算符","1.5.1算术运算符",[14,1951,1952,1955],{},[420,1953],{"alt":23,"src":1954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[588,1957,1958,1961,1964],{},[591,1959,1960],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[591,1962,1963],{},"两个小数不可以做取模运算",[591,1965,1966],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[605,1968,1970],{"id":1969},"_152赋值运算符","1.5.2赋值运算符",[14,1972,1973],{},[420,1974],{"alt":23,"src":1975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[605,1977,1979],{"id":1978},"_153比较运算符","1.5.3比较运算符",[14,1981,1982],{},[420,1983],{"alt":23,"src":1984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[605,1986,1988],{"id":1987},"_154逻辑运算符","1.5.4逻辑运算符",[14,1990,1991],{},[420,1992],{"alt":23,"src":1993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[60,1995,1997],{"id":1996},"_16程序流程结构","1.6程序流程结构",[605,1999,2001],{"id":2000},"_161选择结构","1.6.1选择结构",[588,2003,2004],{},[591,2005,2006],{},"if语句\n单行、多行、多条件if语句",[18,2008,2010],{"className":626,"code":2009,"language":628,"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,2011,2012,2017,2032,2037,2051,2056,2061,2070,2083,2087,2100,2105,2111,2116,2130,2135,2141,2162,2167,2181,2186,2215,2220,2237,2242,2247,2252,2266,2271],{"__ignoreMap":23},[28,2013,2014],{"class":30,"line":31},[28,2015,2016],{"class":73},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[28,2018,2019,2022,2025,2027,2030],{"class":30,"line":77},[28,2020,2021],{"class":42},"if",[28,2023,2024],{"class":34},"(score",[28,2026,1579],{"class":42},[28,2028,2029],{"class":38},"600",[28,2031,228],{"class":34},[28,2033,2034],{"class":30,"line":114},[28,2035,2036],{"class":34},"{\n",[28,2038,2039,2042,2044,2047,2049],{"class":30,"line":128},[28,2040,2041],{"class":34},"    cout",[28,2043,1663],{"class":42},[28,2045,2046],{"class":735},"'这是单行if语句'",[28,2048,1663],{"class":42},[28,2050,1685],{"class":34},[28,2052,2053],{"class":30,"line":393},[28,2054,2055],{"class":34},"}\n",[28,2057,2058],{"class":30,"line":409},[28,2059,2060],{"class":73},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[28,2062,2063,2065,2067],{"class":30,"line":1711},[28,2064,1917],{"class":34},[28,2066,1920],{"class":42},[28,2068,2069],{"class":34}," score\n",[28,2071,2072,2074,2076,2079,2081],{"class":30,"line":1802},[28,2073,2021],{"class":42},[28,2075,2024],{"class":34},[28,2077,2078],{"class":42},"\u003C=",[28,2080,2029],{"class":38},[28,2082,228],{"class":34},[28,2084,2085],{"class":30,"line":1808},[28,2086,2036],{"class":34},[28,2088,2089,2091,2093,2096,2098],{"class":30,"line":1820},[28,2090,2041],{"class":34},[28,2092,1920],{"class":42},[28,2094,2095],{"class":735},"\"小于等于600\"",[28,2097,1663],{"class":42},[28,2099,1685],{"class":34},[28,2101,2103],{"class":30,"line":2102},11,[28,2104,2055],{"class":34},[28,2106,2108],{"class":30,"line":2107},12,[28,2109,2110],{"class":42},"else\n",[28,2112,2114],{"class":30,"line":2113},13,[28,2115,2036],{"class":34},[28,2117,2119,2121,2123,2126,2128],{"class":30,"line":2118},14,[28,2120,2041],{"class":34},[28,2122,1920],{"class":42},[28,2124,2125],{"class":735},"\"大于600\"",[28,2127,1920],{"class":42},[28,2129,1685],{"class":34},[28,2131,2133],{"class":30,"line":2132},15,[28,2134,2055],{"class":34},[28,2136,2138],{"class":30,"line":2137},16,[28,2139,2140],{"class":73},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[28,2142,2144,2146,2149,2151,2153,2156,2158,2160],{"class":30,"line":2143},17,[28,2145,2021],{"class":42},[28,2147,2148],{"class":34}," (",[28,2150,822],{"class":38},[28,2152,1529],{"class":42},[28,2154,2155],{"class":34},"num",[28,2157,1529],{"class":42},[28,2159,938],{"class":38},[28,2161,228],{"class":34},[28,2163,2165],{"class":30,"line":2164},18,[28,2166,2036],{"class":34},[28,2168,2170,2172,2174,2177,2179],{"class":30,"line":2169},19,[28,2171,2041],{"class":34},[28,2173,1663],{"class":42},[28,2175,2176],{"class":735},"\"小于100\"",[28,2178,1663],{"class":42},[28,2180,1685],{"class":34},[28,2182,2184],{"class":30,"line":2183},20,[28,2185,2055],{"class":34},[28,2187,2189,2192,2195,2198,2201,2203,2206,2208,2210,2213],{"class":30,"line":2188},21,[28,2190,2191],{"class":42},"else",[28,2193,2194],{"class":42}," if",[28,2196,2197],{"class":34}," (nmu",[28,2199,2200],{"class":42},">=",[28,2202,938],{"class":38},[28,2204,2205],{"class":42},"&&",[28,2207,2155],{"class":34},[28,2209,1529],{"class":42},[28,2211,2212],{"class":38},"200",[28,2214,228],{"class":34},[28,2216,2218],{"class":30,"line":2217},22,[28,2219,2036],{"class":34},[28,2221,2223,2225,2227,2230,2232,2234],{"class":30,"line":2222},23,[28,2224,2041],{"class":34},[28,2226,1663],{"class":42},[28,2228,2229],{"class":735},"\"不小于100且小于200\"",[28,2231,1663],{"class":42},[28,2233,1729],{"class":34},[28,2235,2236],{"class":73}," \u002F\u002F可以无限else if,python中是elif：\n",[28,2238,2240],{"class":30,"line":2239},24,[28,2241,2055],{"class":34},[28,2243,2245],{"class":30,"line":2244},25,[28,2246,2110],{"class":42},[28,2248,2250],{"class":30,"line":2249},26,[28,2251,2036],{"class":34},[28,2253,2255,2257,2259,2262,2264],{"class":30,"line":2254},27,[28,2256,2041],{"class":34},[28,2258,1663],{"class":42},[28,2260,2261],{"class":735},"\"不小于200\"",[28,2263,1663],{"class":42},[28,2265,1685],{"class":34},[28,2267,2269],{"class":30,"line":2268},28,[28,2270,2055],{"class":34},[28,2272,2274],{"class":30,"line":2273},29,[28,2275,2276],{"class":73},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[588,2278,2279],{"start":77},[591,2280,2281],{},"三目运算符",[18,2283,2285],{"className":626,"code":2284,"language":628,"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,2286,2287,2292,2297,2323,2345,2362,2367,2390,2405],{"__ignoreMap":23},[28,2288,2289],{"class":30,"line":31},[28,2290,2291],{"class":73},"\u002F\u002F创建三个变量a,b,c\n",[28,2293,2294],{"class":30,"line":77},[28,2295,2296],{"class":73},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[28,2298,2299,2301,2303,2305,2307,2310,2312,2314,2317,2319,2321],{"class":30,"line":114},[28,2300,640],{"class":42},[28,2302,1889],{"class":34},[28,2304,83],{"class":42},[28,2306,1320],{"class":38},[28,2308,2309],{"class":34},",b",[28,2311,83],{"class":42},[28,2313,225],{"class":38},[28,2315,2316],{"class":34},",c",[28,2318,83],{"class":42},[28,2320,822],{"class":38},[28,2322,1781],{"class":34},[28,2324,2325,2327,2329,2332,2334,2336,2338,2340,2342],{"class":30,"line":128},[28,2326,916],{"class":34},[28,2328,83],{"class":42},[28,2330,2331],{"class":34},"(a",[28,2333,1579],{"class":42},[28,2335,117],{"class":34},[28,2337,1605],{"class":42},[28,2339,80],{"class":34},[28,2341,1479],{"class":42},[28,2343,2344],{"class":34},"b)\n",[28,2346,2347,2349,2351,2354,2356,2358,2360],{"class":30,"line":393},[28,2348,1860],{"class":34},[28,2350,1663],{"class":42},[28,2352,2353],{"class":735},"\"c=\"",[28,2355,1663],{"class":42},[28,2357,916],{"class":34},[28,2359,1663],{"class":42},[28,2361,1685],{"class":34},[28,2363,2364],{"class":30,"line":409},[28,2365,2366],{"class":73},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[28,2368,2369,2371,2373,2375,2377,2379,2381,2384,2386,2388],{"class":30,"line":1711},[28,2370,2331],{"class":34},[28,2372,1579],{"class":42},[28,2374,117],{"class":34},[28,2376,1605],{"class":42},[28,2378,80],{"class":34},[28,2380,1479],{"class":42},[28,2382,2383],{"class":34},"b)",[28,2385,83],{"class":42},[28,2387,938],{"class":38},[28,2389,1781],{"class":34},[28,2391,2392,2394,2396,2398,2400,2402],{"class":30,"line":1802},[28,2393,1860],{"class":34},[28,2395,1663],{"class":42},[28,2397,80],{"class":34},[28,2399,1663],{"class":42},[28,2401,1729],{"class":34},[28,2403,2404],{"class":73}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[28,2406,2407,2409,2411,2413,2415,2417],{"class":30,"line":1808},[28,2408,1860],{"class":34},[28,2410,1663],{"class":42},[28,2412,117],{"class":34},[28,2414,1663],{"class":42},[28,2416,1729],{"class":34},[28,2418,2419],{"class":73}," \u002F\u002F10   a>b,b还是原值\n",[588,2421,2422],{"start":114},[591,2423,2424],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[18,2426,2428],{"className":626,"code":2427,"language":628,"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,2429,2430,2435,2443,2457,2467,2471,2485,2498,2508,2516,2521,2546,2567,2589,2610,2632,2653,2673,2678],{"__ignoreMap":23},[28,2431,2432],{"class":30,"line":31},[28,2433,2434],{"class":73},"\u002F\u002F案例-电影打分\n",[28,2436,2437,2440],{"class":30,"line":77},[28,2438,2439],{"class":42},"#include",[28,2441,2442],{"class":735},"\u003Ciostream>\n",[28,2444,2445,2448,2451,2455],{"class":30,"line":114},[28,2446,2447],{"class":42},"using",[28,2449,2450],{"class":42}," namespace",[28,2452,2454],{"class":2453},"sScJk"," std",[28,2456,1781],{"class":34},[28,2458,2459,2461,2464],{"class":30,"line":128},[28,2460,640],{"class":42},[28,2462,2463],{"class":2453}," main",[28,2465,2466],{"class":34},"()\n",[28,2468,2469],{"class":30,"line":393},[28,2470,2036],{"class":34},[28,2472,2473,2476,2479,2481,2483],{"class":30,"line":409},[28,2474,2475],{"class":42},"    int",[28,2477,2478],{"class":34}," score",[28,2480,83],{"class":42},[28,2482,822],{"class":38},[28,2484,1781],{"class":34},[28,2486,2487,2489,2491,2494,2496],{"class":30,"line":1711},[28,2488,2041],{"class":34},[28,2490,1663],{"class":42},[28,2492,2493],{"class":735},"\"电影打分：\"",[28,2495,1663],{"class":42},[28,2497,1685],{"class":34},[28,2499,2500,2503,2505],{"class":30,"line":1802},[28,2501,2502],{"class":34},"    cin",[28,2504,1920],{"class":42},[28,2506,2507],{"class":34},"score;\n",[28,2509,2510,2513],{"class":30,"line":1808},[28,2511,2512],{"class":42},"    switch",[28,2514,2515],{"class":34},"(score)\n",[28,2517,2518],{"class":30,"line":1820},[28,2519,2520],{"class":34},"    {\n",[28,2522,2523,2526,2529,2532,2534,2537,2539,2541,2544],{"class":30,"line":2102},[28,2524,2525],{"class":42},"        case",[28,2527,2528],{"class":38}," 10",[28,2530,2531],{"class":34},":cout",[28,2533,1663],{"class":42},[28,2535,2536],{"class":735},"\"经典\"",[28,2538,1663],{"class":42},[28,2540,1729],{"class":34},[28,2542,2543],{"class":42},"break",[28,2545,1781],{"class":34},[28,2547,2548,2550,2553,2555,2557,2559,2561,2563,2565],{"class":30,"line":2107},[28,2549,2525],{"class":42},[28,2551,2552],{"class":38}," 9",[28,2554,2531],{"class":34},[28,2556,1663],{"class":42},[28,2558,2536],{"class":735},[28,2560,1663],{"class":42},[28,2562,1729],{"class":34},[28,2564,2543],{"class":42},[28,2566,1781],{"class":34},[28,2568,2569,2571,2574,2576,2578,2581,2583,2585,2587],{"class":30,"line":2113},[28,2570,2525],{"class":42},[28,2572,2573],{"class":38}," 8",[28,2575,2531],{"class":34},[28,2577,1663],{"class":42},[28,2579,2580],{"class":735},"\"非常好\"",[28,2582,1663],{"class":42},[28,2584,1729],{"class":34},[28,2586,2543],{"class":42},[28,2588,1781],{"class":34},[28,2590,2591,2593,2596,2598,2600,2602,2604,2606,2608],{"class":30,"line":2118},[28,2592,2525],{"class":42},[28,2594,2595],{"class":38}," 7",[28,2597,2531],{"class":34},[28,2599,1663],{"class":42},[28,2601,2580],{"class":735},[28,2603,1663],{"class":42},[28,2605,1729],{"class":34},[28,2607,2543],{"class":42},[28,2609,1781],{"class":34},[28,2611,2612,2614,2617,2619,2621,2624,2626,2628,2630],{"class":30,"line":2132},[28,2613,2525],{"class":42},[28,2615,2616],{"class":38}," 6",[28,2618,2531],{"class":34},[28,2620,1663],{"class":42},[28,2622,2623],{"class":735},"\"一般\"",[28,2625,1663],{"class":42},[28,2627,1729],{"class":34},[28,2629,2543],{"class":42},[28,2631,1781],{"class":34},[28,2633,2634,2636,2639,2641,2643,2645,2647,2649,2651],{"class":30,"line":2137},[28,2635,2525],{"class":42},[28,2637,2638],{"class":38}," 5",[28,2640,2531],{"class":34},[28,2642,1663],{"class":42},[28,2644,2623],{"class":735},[28,2646,1663],{"class":42},[28,2648,1729],{"class":34},[28,2650,2543],{"class":42},[28,2652,1781],{"class":34},[28,2654,2655,2658,2660,2662,2665,2667,2669,2671],{"class":30,"line":2143},[28,2656,2657],{"class":42},"        default",[28,2659,2531],{"class":34},[28,2661,1663],{"class":42},[28,2663,2664],{"class":735},"\"烂片\"",[28,2666,1663],{"class":42},[28,2668,1729],{"class":34},[28,2670,2543],{"class":42},[28,2672,1781],{"class":34},[28,2674,2675],{"class":30,"line":2164},[28,2676,2677],{"class":34},"    }\n",[28,2679,2680],{"class":30,"line":2169},[28,2681,2055],{"class":34},[14,2683,2684],{},"if和switch区别：",[1626,2686,2687,2690],{},[591,2688,2689],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[591,2691,2692],{},"switch优点：结构清晰，执行效率高",[605,2694,2696],{"id":2695},"_162循环结构","1.6.2循环结构",[588,2698,2699],{},[591,2700,2701],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[18,2703,2705],{"className":626,"code":2704,"language":628,"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,2706,2707,2712,2720,2724,2737,2751,2755,2775,2785,2789,2801],{"__ignoreMap":23},[28,2708,2709],{"class":30,"line":31},[28,2710,2711],{"class":73},"\u002F\u002F打印0-9数字\n",[28,2713,2714,2716,2718],{"class":30,"line":77},[28,2715,640],{"class":42},[28,2717,2463],{"class":2453},[28,2719,2466],{"class":34},[28,2721,2722],{"class":30,"line":114},[28,2723,2036],{"class":34},[28,2725,2726,2728,2731,2733,2735],{"class":30,"line":128},[28,2727,2475],{"class":42},[28,2729,2730],{"class":34}," num",[28,2732,83],{"class":42},[28,2734,822],{"class":38},[28,2736,1781],{"class":34},[28,2738,2739,2742,2745,2747,2749],{"class":30,"line":393},[28,2740,2741],{"class":42},"    while",[28,2743,2744],{"class":34},"(num",[28,2746,1529],{"class":42},[28,2748,225],{"class":38},[28,2750,228],{"class":34},[28,2752,2753],{"class":30,"line":409},[28,2754,2520],{"class":34},[28,2756,2757,2760,2763,2765,2767,2769,2772],{"class":30,"line":1711},[28,2758,2759],{"class":2453},"       std",[28,2761,2762],{"class":34},"::cout",[28,2764,1663],{"class":42},[28,2766,2155],{"class":34},[28,2768,1663],{"class":42},[28,2770,2771],{"class":2453},"std",[28,2773,2774],{"class":34},"::endl;\n",[28,2776,2777,2780,2783],{"class":30,"line":1802},[28,2778,2779],{"class":34},"        num",[28,2781,2782],{"class":42},"++",[28,2784,1781],{"class":34},[28,2786,2787],{"class":30,"line":1808},[28,2788,2677],{"class":34},[28,2790,2791,2794,2796,2799],{"class":30,"line":1820},[28,2792,2793],{"class":2453},"    system",[28,2795,367],{"class":34},[28,2797,2798],{"class":735},"\"pause\"",[28,2800,228],{"class":34},[28,2802,2803],{"class":30,"line":2102},[28,2804,2055],{"class":34},[14,2806,2807],{},"注意：写好循环条件，避免死循环情况",[18,2809,2811],{"className":626,"code":2810,"language":628,"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,2812,2813,2818,2825,2832,2842,2850,2854,2859,2886,2891,2896,2904,2931,2936,2941,2954,2964,2968,2978,2983,2996,3001,3015,3020,3035,3039,3052,3056,3061,3065,3079,3087,3092,3098,3104,3109],{"__ignoreMap":23},[28,2814,2815],{"class":30,"line":31},[28,2816,2817],{"class":73},"\u002F\u002F循环结构-猜数字\n",[28,2819,2820,2822],{"class":30,"line":77},[28,2821,2439],{"class":42},[28,2823,2824],{"class":735}," \u003Ciostream>\n",[28,2826,2827,2829],{"class":30,"line":114},[28,2828,2439],{"class":42},[28,2830,2831],{"class":735}," \u003Cctime>\n",[28,2833,2834,2836,2838,2840],{"class":30,"line":128},[28,2835,2447],{"class":42},[28,2837,2450],{"class":42},[28,2839,2454],{"class":2453},[28,2841,1781],{"class":34},[28,2843,2844,2846,2848],{"class":30,"line":393},[28,2845,640],{"class":42},[28,2847,2463],{"class":2453},[28,2849,2466],{"class":34},[28,2851,2852],{"class":30,"line":409},[28,2853,2036],{"class":34},[28,2855,2856],{"class":30,"line":1711},[28,2857,2858],{"class":73},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[28,2860,2861,2864,2867,2870,2873,2875,2878,2880,2883],{"class":30,"line":1802},[28,2862,2863],{"class":2453},"    srand",[28,2865,2866],{"class":34},"((",[28,2868,2869],{"class":42},"unsigned",[28,2871,2872],{"class":42}," int",[28,2874,1054],{"class":34},[28,2876,2877],{"class":2453},"time",[28,2879,367],{"class":34},[28,2881,2882],{"class":38},"NULL",[28,2884,2885],{"class":34},"));\n",[28,2887,2888],{"class":30,"line":1808},[28,2889,2890],{"emptyLinePlaceholder":562},"\n",[28,2892,2893],{"class":30,"line":1820},[28,2894,2895],{"class":73},"    \u002F\u002F1.系统生成随机数\n",[28,2897,2898,2901],{"class":30,"line":2102},[28,2899,2900],{"class":73},"    \u002F\u002Frand()%100",[28,2902,2903],{"class":73}," \u002F\u002F生成0-99的随机数\n",[28,2905,2906,2908,2910,2912,2915,2918,2920,2922,2924,2926,2928],{"class":30,"line":2107},[28,2907,2475],{"class":42},[28,2909,2730],{"class":34},[28,2911,83],{"class":42},[28,2913,2914],{"class":2453},"rand",[28,2916,2917],{"class":34},"()",[28,2919,954],{"class":42},[28,2921,938],{"class":38},[28,2923,1104],{"class":42},[28,2925,39],{"class":38},[28,2927,689],{"class":34},[28,2929,2930],{"class":73}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[28,2932,2933],{"class":30,"line":2113},[28,2934,2935],{"class":73},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[28,2937,2938],{"class":30,"line":2118},[28,2939,2940],{"class":73},"    \u002F\u002F2.玩家猜测\n",[28,2942,2943,2945,2948,2950,2952],{"class":30,"line":2132},[28,2944,2475],{"class":42},[28,2946,2947],{"class":34}," val",[28,2949,83],{"class":42},[28,2951,822],{"class":38},[28,2953,1781],{"class":34},[28,2955,2956,2958,2960,2962],{"class":30,"line":2137},[28,2957,2741],{"class":42},[28,2959,2148],{"class":34},[28,2961,39],{"class":38},[28,2963,228],{"class":34},[28,2965,2966],{"class":30,"line":2143},[28,2967,2520],{"class":34},[28,2969,2970,2973,2975],{"class":30,"line":2164},[28,2971,2972],{"class":34},"        cin",[28,2974,1920],{"class":42},[28,2976,2977],{"class":34},"val;\n",[28,2979,2980],{"class":30,"line":2169},[28,2981,2982],{"class":73},"        \u002F\u002F3.判断玩家猜测\n",[28,2984,2985,2988,2991,2993],{"class":30,"line":2183},[28,2986,2987],{"class":42},"        if",[28,2989,2990],{"class":34},"(val",[28,2992,1529],{"class":42},[28,2994,2995],{"class":34},"num) \n",[28,2997,2998],{"class":30,"line":2188},[28,2999,3000],{"class":34},"        {\n",[28,3002,3003,3006,3008,3011,3013],{"class":30,"line":2217},[28,3004,3005],{"class":34},"            cout",[28,3007,1663],{"class":42},[28,3009,3010],{"class":735},"\"猜小了！\"",[28,3012,1663],{"class":42},[28,3014,1685],{"class":34},[28,3016,3017],{"class":30,"line":2222},[28,3018,3019],{"class":34},"        }\n",[28,3021,3022,3025,3027,3030,3032],{"class":30,"line":2239},[28,3023,3024],{"class":42},"        else",[28,3026,2194],{"class":42},[28,3028,3029],{"class":34}," (val",[28,3031,1579],{"class":42},[28,3033,3034],{"class":34},"num)\n",[28,3036,3037],{"class":30,"line":2244},[28,3038,3000],{"class":34},[28,3040,3041,3043,3045,3048,3050],{"class":30,"line":2249},[28,3042,3005],{"class":34},[28,3044,1663],{"class":42},[28,3046,3047],{"class":735},"\"猜大了！\"",[28,3049,1663],{"class":42},[28,3051,1685],{"class":34},[28,3053,3054],{"class":30,"line":2254},[28,3055,3019],{"class":34},[28,3057,3058],{"class":30,"line":2268},[28,3059,3060],{"class":42},"        else\n",[28,3062,3063],{"class":30,"line":2273},[28,3064,3000],{"class":34},[28,3066,3068,3070,3072,3075,3077],{"class":30,"line":3067},30,[28,3069,3005],{"class":34},[28,3071,1663],{"class":42},[28,3073,3074],{"class":735},"\"猜对了！\"",[28,3076,1663],{"class":42},[28,3078,1685],{"class":34},[28,3080,3082,3085],{"class":30,"line":3081},31,[28,3083,3084],{"class":42},"            break",[28,3086,1781],{"class":34},[28,3088,3090],{"class":30,"line":3089},32,[28,3091,3019],{"class":34},[28,3093,3095],{"class":30,"line":3094},33,[28,3096,3097],{"class":73},"        \u002F\u002F猜对 退出游戏\n",[28,3099,3101],{"class":30,"line":3100},34,[28,3102,3103],{"class":73},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[28,3105,3107],{"class":30,"line":3106},35,[28,3108,2677],{"class":34},[28,3110,3112],{"class":30,"line":3111},36,[28,3113,2055],{"class":34},[588,3115,3116],{"start":77},[591,3117,3118,3119,3122],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[780,3120,3121],{},"do...while会先执行一次循环语句","，在判断循环语句",[18,3124,3126],{"className":626,"code":3125,"language":628,"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,3127,3128,3133,3141,3145,3157,3165,3169,3186,3193,3197,3210,3220],{"__ignoreMap":23},[28,3129,3130],{"class":30,"line":31},[28,3131,3132],{"class":73},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[28,3134,3135,3137,3139],{"class":30,"line":77},[28,3136,640],{"class":42},[28,3138,2463],{"class":2453},[28,3140,2466],{"class":34},[28,3142,3143],{"class":30,"line":114},[28,3144,2036],{"class":34},[28,3146,3147,3149,3151,3153,3155],{"class":30,"line":128},[28,3148,2475],{"class":42},[28,3150,2730],{"class":34},[28,3152,83],{"class":42},[28,3154,822],{"class":38},[28,3156,1781],{"class":34},[28,3158,3159,3162],{"class":30,"line":393},[28,3160,3161],{"class":42},"    do",[28,3163,3164],{"class":34}," \n",[28,3166,3167],{"class":30,"line":409},[28,3168,2520],{"class":34},[28,3170,3171,3174,3176,3178,3180,3182,3184],{"class":30,"line":1711},[28,3172,3173],{"class":2453},"        std",[28,3175,2762],{"class":34},[28,3177,1663],{"class":42},[28,3179,2155],{"class":34},[28,3181,1663],{"class":42},[28,3183,2771],{"class":2453},[28,3185,2774],{"class":34},[28,3187,3188,3190],{"class":30,"line":1802},[28,3189,2779],{"class":34},[28,3191,3192],{"class":42},"++\n",[28,3194,3195],{"class":30,"line":1808},[28,3196,2677],{"class":34},[28,3198,3199,3201,3203,3205,3207],{"class":30,"line":1820},[28,3200,2741],{"class":42},[28,3202,2744],{"class":34},[28,3204,1529],{"class":42},[28,3206,225],{"class":38},[28,3208,3209],{"class":34},");\n",[28,3211,3212,3214,3216,3218],{"class":30,"line":2102},[28,3213,2793],{"class":2453},[28,3215,367],{"class":34},[28,3217,2798],{"class":735},[28,3219,3209],{"class":34},[28,3221,3222],{"class":30,"line":2107},[28,3223,2055],{"class":34},[14,3225,3226],{},"案例-水仙花数",[14,3228,3229],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3231,3232],{},"例如：1^3+5^3+3^3=153",[14,3234,3235],{},"请用do...while语句，求出所有3位数的水仙花数",[18,3237,3239],{"className":626,"code":3238,"language":628,"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,3240,3241,3247,3257,3265,3269,3274,3286,3292,3296,3301,3317,3333,3349,3364,3383,3398,3446,3450,3462,3466,3474,3478,3492],{"__ignoreMap":23},[28,3242,3243,3245],{"class":30,"line":31},[28,3244,2439],{"class":42},[28,3246,2824],{"class":735},[28,3248,3249,3251,3253,3255],{"class":30,"line":77},[28,3250,2447],{"class":42},[28,3252,2450],{"class":42},[28,3254,2454],{"class":2453},[28,3256,1781],{"class":34},[28,3258,3259,3261,3263],{"class":30,"line":114},[28,3260,640],{"class":42},[28,3262,2463],{"class":2453},[28,3264,2466],{"class":34},[28,3266,3267],{"class":30,"line":128},[28,3268,2036],{"class":34},[28,3270,3271],{"class":30,"line":393},[28,3272,3273],{"class":73},"    \u002F\u002F1.先打印所有三位数字\n",[28,3275,3276,3278,3280,3282,3284],{"class":30,"line":409},[28,3277,2475],{"class":42},[28,3279,2730],{"class":34},[28,3281,83],{"class":42},[28,3283,938],{"class":38},[28,3285,1781],{"class":34},[28,3287,3288,3290],{"class":30,"line":1711},[28,3289,3161],{"class":42},[28,3291,3164],{"class":34},[28,3293,3294],{"class":30,"line":1802},[28,3295,2520],{"class":34},[28,3297,3298],{"class":30,"line":1808},[28,3299,3300],{"class":73},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[28,3302,3303,3306,3308,3310,3312,3314],{"class":30,"line":1820},[28,3304,3305],{"class":42},"        int",[28,3307,1889],{"class":34},[28,3309,83],{"class":42},[28,3311,822],{"class":38},[28,3313,689],{"class":34},[28,3315,3316],{"class":73}," \u002F\u002F个位\n",[28,3318,3319,3321,3324,3326,3328,3330],{"class":30,"line":2102},[28,3320,3305],{"class":42},[28,3322,3323],{"class":34}," b",[28,3325,83],{"class":42},[28,3327,822],{"class":38},[28,3329,689],{"class":34},[28,3331,3332],{"class":73}," \u002F\u002F十位\n",[28,3334,3335,3337,3340,3342,3344,3346],{"class":30,"line":2107},[28,3336,3305],{"class":42},[28,3338,3339],{"class":34}," c",[28,3341,83],{"class":42},[28,3343,822],{"class":38},[28,3345,689],{"class":34},[28,3347,3348],{"class":73}," \u002F\u002F百位\n",[28,3350,3351,3354,3356,3358,3360,3362],{"class":30,"line":2113},[28,3352,3353],{"class":34},"        a",[28,3355,83],{"class":42},[28,3357,2155],{"class":34},[28,3359,954],{"class":42},[28,3361,225],{"class":38},[28,3363,1781],{"class":34},[28,3365,3366,3369,3371,3373,3375,3377,3379,3381],{"class":30,"line":2118},[28,3367,3368],{"class":34},"        b",[28,3370,83],{"class":42},[28,3372,2155],{"class":34},[28,3374,43],{"class":42},[28,3376,225],{"class":38},[28,3378,954],{"class":42},[28,3380,225],{"class":38},[28,3382,1781],{"class":34},[28,3384,3385,3388,3390,3392,3394,3396],{"class":30,"line":2132},[28,3386,3387],{"class":34},"        c",[28,3389,83],{"class":42},[28,3391,2155],{"class":34},[28,3393,43],{"class":42},[28,3395,938],{"class":38},[28,3397,1781],{"class":34},[28,3399,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3437,3440,3443],{"class":30,"line":2137},[28,3401,2987],{"class":42},[28,3403,2331],{"class":34},[28,3405,256],{"class":42},[28,3407,80],{"class":34},[28,3409,256],{"class":42},[28,3411,80],{"class":34},[28,3413,1104],{"class":42},[28,3415,117],{"class":34},[28,3417,256],{"class":42},[28,3419,117],{"class":34},[28,3421,256],{"class":42},[28,3423,117],{"class":34},[28,3425,1104],{"class":42},[28,3427,916],{"class":34},[28,3429,256],{"class":42},[28,3431,916],{"class":34},[28,3433,256],{"class":42},[28,3435,3436],{"class":34},"c ",[28,3438,3439],{"class":42},"==",[28,3441,3442],{"class":34}," num)",[28,3444,3445],{"class":73}," \u002F\u002F如果是水仙花数，才打印\n",[28,3447,3448],{"class":30,"line":2143},[28,3449,3000],{"class":34},[28,3451,3452,3454,3456,3458,3460],{"class":30,"line":2164},[28,3453,3005],{"class":34},[28,3455,1663],{"class":42},[28,3457,2155],{"class":34},[28,3459,1663],{"class":42},[28,3461,1685],{"class":34},[28,3463,3464],{"class":30,"line":2169},[28,3465,3019],{"class":34},[28,3467,3468,3470,3472],{"class":30,"line":2183},[28,3469,2779],{"class":34},[28,3471,2782],{"class":42},[28,3473,1781],{"class":34},[28,3475,3476],{"class":30,"line":2188},[28,3477,2677],{"class":34},[28,3479,3480,3482,3485,3487,3490],{"class":30,"line":2217},[28,3481,2741],{"class":42},[28,3483,3484],{"class":34}," (num ",[28,3486,1529],{"class":42},[28,3488,3489],{"class":38}," 1000",[28,3491,3209],{"class":34},[28,3493,3494],{"class":30,"line":2222},[28,3495,2055],{"class":34},[588,3497,3498],{"start":114},[591,3499,3500],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[18,3502,3504],{"className":626,"code":3503,"language":628,"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,3505,3506,3511,3539,3543,3555,3559,3564,3575,3582,3586,3600,3604,3611,3615,3627,3636],{"__ignoreMap":23},[28,3507,3508],{"class":30,"line":31},[28,3509,3510],{"class":73},"\u002F\u002F从数字0-9打印\n",[28,3512,3513,3515,3517,3519,3522,3524,3526,3529,3531,3533,3535,3537],{"class":30,"line":77},[28,3514,49],{"class":42},[28,3516,367],{"class":34},[28,3518,640],{"class":42},[28,3520,3521],{"class":34}," i",[28,3523,83],{"class":42},[28,3525,822],{"class":38},[28,3527,3528],{"class":34},";i",[28,3530,1529],{"class":42},[28,3532,225],{"class":38},[28,3534,3528],{"class":34},[28,3536,2782],{"class":42},[28,3538,228],{"class":34},[28,3540,3541],{"class":30,"line":114},[28,3542,2036],{"class":34},[28,3544,3545,3547,3549,3551,3553],{"class":30,"line":128},[28,3546,2041],{"class":34},[28,3548,1663],{"class":42},[28,3550,1066],{"class":34},[28,3552,1663],{"class":42},[28,3554,1685],{"class":34},[28,3556,3557],{"class":30,"line":393},[28,3558,2055],{"class":34},[28,3560,3561],{"class":30,"line":409},[28,3562,3563],{"class":73},"\u002F\u002F上式可以进行拆分\n",[28,3565,3566,3568,3570,3572],{"class":30,"line":1711},[28,3567,640],{"class":42},[28,3569,3521],{"class":34},[28,3571,83],{"class":42},[28,3573,3574],{"class":38},"0\n",[28,3576,3577,3579],{"class":30,"line":1802},[28,3578,49],{"class":42},[28,3580,3581],{"class":34},"(;;;)\n",[28,3583,3584],{"class":30,"line":1808},[28,3585,2036],{"class":34},[28,3587,3588,3591,3594,3596,3598],{"class":30,"line":1820},[28,3589,3590],{"class":42},"    if",[28,3592,3593],{"class":34},"(i",[28,3595,2200],{"class":42},[28,3597,225],{"class":38},[28,3599,228],{"class":34},[28,3601,3602],{"class":30,"line":2102},[28,3603,2520],{"class":34},[28,3605,3606,3609],{"class":30,"line":2107},[28,3607,3608],{"class":42},"        break",[28,3610,1781],{"class":34},[28,3612,3613],{"class":30,"line":2113},[28,3614,2677],{"class":34},[28,3616,3617,3619,3621,3623,3625],{"class":30,"line":2118},[28,3618,2041],{"class":34},[28,3620,1663],{"class":42},[28,3622,1066],{"class":34},[28,3624,1663],{"class":42},[28,3626,1685],{"class":34},[28,3628,3629,3632,3634],{"class":30,"line":2132},[28,3630,3631],{"class":34},"    i",[28,3633,2782],{"class":42},[28,3635,1781],{"class":34},[28,3637,3638],{"class":30,"line":2137},[28,3639,2055],{"class":34},[14,3641,3642],{},"小练习",[18,3644,3646],{"className":626,"code":3645,"language":628,"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,3647,3648,3654,3664,3672,3676,3681,3686,3713,3717,3722,3727,3768,3772,3785,3789,3793,3797,3809,3813,3817],{"__ignoreMap":23},[28,3649,3650,3652],{"class":30,"line":31},[28,3651,2439],{"class":42},[28,3653,2442],{"class":735},[28,3655,3656,3658,3660,3662],{"class":30,"line":77},[28,3657,2447],{"class":42},[28,3659,2450],{"class":42},[28,3661,2454],{"class":2453},[28,3663,1781],{"class":34},[28,3665,3666,3668,3670],{"class":30,"line":114},[28,3667,640],{"class":42},[28,3669,2463],{"class":2453},[28,3671,2466],{"class":34},[28,3673,3674],{"class":30,"line":128},[28,3675,2036],{"class":34},[28,3677,3678],{"class":30,"line":393},[28,3679,3680],{"class":73},"    \u002F\u002F敲桌子案例\n",[28,3682,3683],{"class":30,"line":409},[28,3684,3685],{"class":73},"    \u002F\u002F1.先输出1-100的数字\n",[28,3687,3688,3690,3692,3694,3696,3698,3700,3703,3705,3707,3709,3711],{"class":30,"line":1711},[28,3689,377],{"class":42},[28,3691,367],{"class":34},[28,3693,640],{"class":42},[28,3695,3521],{"class":34},[28,3697,83],{"class":42},[28,3699,39],{"class":38},[28,3701,3702],{"class":34},"; i",[28,3704,2078],{"class":42},[28,3706,938],{"class":38},[28,3708,3702],{"class":34},[28,3710,2782],{"class":42},[28,3712,228],{"class":34},[28,3714,3715],{"class":30,"line":1802},[28,3716,2520],{"class":34},[28,3718,3719],{"class":30,"line":1808},[28,3720,3721],{"class":73},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[28,3723,3724],{"class":30,"line":1820},[28,3725,3726],{"class":73},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[28,3728,3729,3731,3733,3735,3737,3739,3741,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766],{"class":30,"line":2102},[28,3730,2987],{"class":42},[28,3732,3593],{"class":34},[28,3734,954],{"class":42},[28,3736,995],{"class":38},[28,3738,3439],{"class":42},[28,3740,822],{"class":38},[28,3742,3743],{"class":42}," ||",[28,3745,3521],{"class":34},[28,3747,954],{"class":42},[28,3749,225],{"class":38},[28,3751,3439],{"class":42},[28,3753,995],{"class":38},[28,3755,3743],{"class":42},[28,3757,3521],{"class":34},[28,3759,43],{"class":42},[28,3761,225],{"class":38},[28,3763,3439],{"class":42},[28,3765,995],{"class":38},[28,3767,228],{"class":34},[28,3769,3770],{"class":30,"line":2107},[28,3771,3000],{"class":34},[28,3773,3774,3776,3778,3781,3783],{"class":30,"line":2113},[28,3775,3005],{"class":34},[28,3777,1663],{"class":42},[28,3779,3780],{"class":735},"\"敲桌子\"",[28,3782,1663],{"class":42},[28,3784,1685],{"class":34},[28,3786,3787],{"class":30,"line":2118},[28,3788,3019],{"class":34},[28,3790,3791],{"class":30,"line":2132},[28,3792,3060],{"class":42},[28,3794,3795],{"class":30,"line":2137},[28,3796,3000],{"class":34},[28,3798,3799,3801,3803,3805,3807],{"class":30,"line":2143},[28,3800,3005],{"class":34},[28,3802,1663],{"class":42},[28,3804,1066],{"class":34},[28,3806,1663],{"class":42},[28,3808,1685],{"class":34},[28,3810,3811],{"class":30,"line":2164},[28,3812,3019],{"class":34},[28,3814,3815],{"class":30,"line":2169},[28,3816,2677],{"class":34},[28,3818,3819],{"class":30,"line":2183},[28,3820,2055],{"class":34},[14,3822,3823],{},"嵌套实现星图",[18,3825,3827],{"className":626,"code":3826,"language":628,"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,3828,3829,3835,3845,3853,3857,3883,3887,3916,3920,3931,3935,3944,3948],{"__ignoreMap":23},[28,3830,3831,3833],{"class":30,"line":31},[28,3832,2439],{"class":42},[28,3834,2442],{"class":735},[28,3836,3837,3839,3841,3843],{"class":30,"line":77},[28,3838,2447],{"class":42},[28,3840,2450],{"class":42},[28,3842,2454],{"class":2453},[28,3844,1781],{"class":34},[28,3846,3847,3849,3851],{"class":30,"line":114},[28,3848,640],{"class":42},[28,3850,2463],{"class":2453},[28,3852,2466],{"class":34},[28,3854,3855],{"class":30,"line":128},[28,3856,2036],{"class":34},[28,3858,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881],{"class":30,"line":393},[28,3860,377],{"class":42},[28,3862,2148],{"class":34},[28,3864,640],{"class":42},[28,3866,3521],{"class":34},[28,3868,83],{"class":42},[28,3870,822],{"class":38},[28,3872,3528],{"class":34},[28,3874,1529],{"class":42},[28,3876,225],{"class":38},[28,3878,3528],{"class":34},[28,3880,2782],{"class":42},[28,3882,228],{"class":34},[28,3884,3885],{"class":30,"line":409},[28,3886,2520],{"class":34},[28,3888,3889,3892,3894,3896,3899,3901,3903,3906,3908,3910,3912,3914],{"class":30,"line":1711},[28,3890,3891],{"class":42},"        for",[28,3893,2148],{"class":34},[28,3895,640],{"class":42},[28,3897,3898],{"class":34}," j",[28,3900,83],{"class":42},[28,3902,822],{"class":38},[28,3904,3905],{"class":34},";j",[28,3907,1529],{"class":42},[28,3909,225],{"class":38},[28,3911,3905],{"class":34},[28,3913,2782],{"class":42},[28,3915,228],{"class":34},[28,3917,3918],{"class":30,"line":1802},[28,3919,3000],{"class":34},[28,3921,3922,3924,3926,3929],{"class":30,"line":1808},[28,3923,3005],{"class":34},[28,3925,1663],{"class":42},[28,3927,3928],{"class":735},"\"*\"",[28,3930,1781],{"class":34},[28,3932,3933],{"class":30,"line":1820},[28,3934,3019],{"class":34},[28,3936,3937,3940,3942],{"class":30,"line":2102},[28,3938,3939],{"class":34},"        cout",[28,3941,1663],{"class":42},[28,3943,1685],{"class":34},[28,3945,3946],{"class":30,"line":2107},[28,3947,2677],{"class":34},[28,3949,3950],{"class":30,"line":2113},[28,3951,2055],{"class":34},[14,3953,3954],{},"乘法口诀表",[18,3956,3958],{"className":626,"code":3957,"language":628,"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,3959,3960,3966,3976,3984,3988,4014,4018,4043,4047,4087,4091,4099,4103],{"__ignoreMap":23},[28,3961,3962,3964],{"class":30,"line":31},[28,3963,2439],{"class":42},[28,3965,2824],{"class":735},[28,3967,3968,3970,3972,3974],{"class":30,"line":77},[28,3969,2447],{"class":42},[28,3971,2450],{"class":42},[28,3973,2454],{"class":2453},[28,3975,1781],{"class":34},[28,3977,3978,3980,3982],{"class":30,"line":114},[28,3979,640],{"class":42},[28,3981,2463],{"class":2453},[28,3983,2466],{"class":34},[28,3985,3986],{"class":30,"line":128},[28,3987,2036],{"class":34},[28,3989,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012],{"class":30,"line":393},[28,3991,377],{"class":42},[28,3993,367],{"class":34},[28,3995,640],{"class":42},[28,3997,3521],{"class":34},[28,3999,83],{"class":42},[28,4001,39],{"class":38},[28,4003,3528],{"class":34},[28,4005,1529],{"class":42},[28,4007,225],{"class":38},[28,4009,3528],{"class":34},[28,4011,2782],{"class":42},[28,4013,228],{"class":34},[28,4015,4016],{"class":30,"line":409},[28,4017,2520],{"class":34},[28,4019,4020,4022,4024,4026,4028,4030,4032,4034,4036,4039,4041],{"class":30,"line":1711},[28,4021,3891],{"class":42},[28,4023,367],{"class":34},[28,4025,640],{"class":42},[28,4027,3898],{"class":34},[28,4029,83],{"class":42},[28,4031,39],{"class":38},[28,4033,3905],{"class":34},[28,4035,2078],{"class":42},[28,4037,4038],{"class":34},"i;j",[28,4040,2782],{"class":42},[28,4042,228],{"class":34},[28,4044,4045],{"class":30,"line":1802},[28,4046,3000],{"class":34},[28,4048,4049,4051,4053,4055,4057,4059,4061,4063,4065,4068,4070,4072,4074,4076,4078,4081,4083,4085],{"class":30,"line":1808},[28,4050,3005],{"class":34},[28,4052,1663],{"class":42},[28,4054,1090],{"class":34},[28,4056,1663],{"class":42},[28,4058,3928],{"class":735},[28,4060,1663],{"class":42},[28,4062,1066],{"class":34},[28,4064,1663],{"class":42},[28,4066,4067],{"class":735},"\"=\"",[28,4069,1663],{"class":42},[28,4071,1066],{"class":34},[28,4073,256],{"class":42},[28,4075,1090],{"class":34},[28,4077,1663],{"class":42},[28,4079,4080],{"class":735},"'",[28,4082,1721],{"class":38},[28,4084,4080],{"class":735},[28,4086,1781],{"class":34},[28,4088,4089],{"class":30,"line":1820},[28,4090,3019],{"class":34},[28,4092,4093,4095,4097],{"class":30,"line":2102},[28,4094,3939],{"class":34},[28,4096,1663],{"class":42},[28,4098,1685],{"class":34},[28,4100,4101],{"class":30,"line":2107},[28,4102,2677],{"class":34},[28,4104,4105],{"class":30,"line":2113},[28,4106,2055],{"class":34},[605,4108,4110],{"id":4109},"_163跳出语句","1.6.3跳出语句",[588,4112,4113],{},[591,4114,4115],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4117,4118],{},"break使用时机：",[1626,4120,4121,4124,4127],{},[591,4122,4123],{},"出现在switch条件语句中，作用是终止case并跳出switch",[591,4125,4126],{},"出现在循环结构中，作用是跳出当前的循环结构",[591,4128,4129],{},"出现在嵌套循环中，跳出最近的内层循环语句",[588,4131,4132,4135],{"start":77},[591,4133,4134],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[591,4136,4137],{},"goto语句\n语法：goto 标记;",[14,4139,4140],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[18,4142,4144],{"className":626,"code":4143,"language":628,"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,4145,4146,4154,4158,4171,4181,4194,4207,4220,4228,4244],{"__ignoreMap":23},[28,4147,4148,4150,4152],{"class":30,"line":31},[28,4149,640],{"class":42},[28,4151,2463],{"class":2453},[28,4153,2466],{"class":34},[28,4155,4156],{"class":30,"line":77},[28,4157,2036],{"class":34},[28,4159,4160,4162,4164,4167,4169],{"class":30,"line":114},[28,4161,2041],{"class":34},[28,4163,1663],{"class":42},[28,4165,4166],{"class":735},"\"1\"",[28,4168,1663],{"class":42},[28,4170,1685],{"class":34},[28,4172,4173,4176,4179],{"class":30,"line":128},[28,4174,4175],{"class":42},"    goto",[28,4177,4178],{"class":2453}," FLAG",[28,4180,1781],{"class":34},[28,4182,4183,4185,4187,4190,4192],{"class":30,"line":393},[28,4184,2041],{"class":34},[28,4186,1663],{"class":42},[28,4188,4189],{"class":735},"\"2\"",[28,4191,1663],{"class":42},[28,4193,1685],{"class":34},[28,4195,4196,4198,4200,4203,4205],{"class":30,"line":409},[28,4197,2041],{"class":34},[28,4199,1663],{"class":42},[28,4201,4202],{"class":735},"\"3\"",[28,4204,1663],{"class":42},[28,4206,1685],{"class":34},[28,4208,4209,4211,4213,4216,4218],{"class":30,"line":1711},[28,4210,2041],{"class":34},[28,4212,1663],{"class":42},[28,4214,4215],{"class":735},"\"4\"",[28,4217,1663],{"class":42},[28,4219,1685],{"class":34},[28,4221,4222,4225],{"class":30,"line":1802},[28,4223,4224],{"class":2453},"    FLAG",[28,4226,4227],{"class":34},":\n",[28,4229,4230,4232,4234,4237,4239,4241],{"class":30,"line":1808},[28,4231,2041],{"class":34},[28,4233,1663],{"class":42},[28,4235,4236],{"class":735},"\"5\"",[28,4238,1663],{"class":42},[28,4240,1729],{"class":34},[28,4242,4243],{"class":73},"\u002F\u002F跳过了2,3,4,直接到5\n",[28,4245,4246],{"class":30,"line":1820},[28,4247,2055],{"class":34},[60,4249,4251],{"id":4250},"_17数组","1.7数组",[605,4253,4255],{"id":4254},"_171一维数组","1.7.1一维数组",[588,4257,4258],{},[591,4259,4260],{},"一维数组定义方式",[768,4262,4263,4273],{},[771,4264,4265],{},[774,4266,4267,4270],{},[777,4268,4269],{},"方式",[777,4271,4272],{},"注意事项",[815,4274,4275,4289,4299],{},[774,4276,4277,4283],{},[820,4278,4279,4280,689],{},"数据类型 数组名",[28,4281,4282],{},"数组长度",[820,4284,4285,4286,4288],{},"这种方式是先定义再arr",[28,4287,1066],{},"赋值",[774,4290,4291,4296],{},[820,4292,4279,4293,4295],{},[28,4294,4282],{},"={值1,值2....};",[820,4297,4298],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[774,4300,4301,4305],{},[820,4302,4279,4303,4295],{},[28,4304],{},[820,4306,4307,4308,4310],{},"int arr",[28,4309],{},";这是不正确的，按照这样的方式定义必须有初始长度",[588,4312,4313],{"start":77},[591,4314,4315],{},"一维数组数组名\n用途：",[1626,4317,4318],{},[591,4319,4320],{},"1.可以统计整个数组在内存中的长度：",[18,4322,4324],{"className":626,"code":4323,"language":628,"meta":23,"style":23},"sizeof(arr);\nsizeof(arr[0]);\n",[25,4325,4326,4333],{"__ignoreMap":23},[28,4327,4328,4330],{"class":30,"line":31},[28,4329,635],{"class":42},[28,4331,4332],{"class":34},"(arr);\n",[28,4334,4335,4337,4340,4342],{"class":30,"line":77},[28,4336,635],{"class":42},[28,4338,4339],{"class":34},"(arr[",[28,4341,822],{"class":38},[28,4343,4344],{"class":34},"]);\n",[1626,4346,4347],{},[591,4348,4349],{},"2.可以获取数组在内存中的首地址:",[18,4351,4353],{"className":626,"code":4352,"language":628,"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,4354,4355,4360,4373,4378],{"__ignoreMap":23},[28,4356,4357],{"class":30,"line":31},[28,4358,4359],{"class":73},"\u002F\u002F查看16进制的首地址\n",[28,4361,4362,4364,4366,4369,4371],{"class":30,"line":77},[28,4363,1860],{"class":34},[28,4365,1663],{"class":42},[28,4367,4368],{"class":34},"arr",[28,4370,1663],{"class":42},[28,4372,1685],{"class":34},[28,4374,4375],{"class":30,"line":114},[28,4376,4377],{"class":73},"\u002F\u002F看10进制数\n",[28,4379,4380,4382,4384,4386,4388,4390,4392,4395,4397,4399,4401],{"class":30,"line":128},[28,4381,1860],{"class":34},[28,4383,1663],{"class":42},[28,4385,367],{"class":34},[28,4387,640],{"class":42},[28,4389,1054],{"class":34},[28,4391,979],{"class":42},[28,4393,4394],{"class":34},"arr[",[28,4396,822],{"class":38},[28,4398,1559],{"class":34},[28,4400,1663],{"class":42},[28,4402,1685],{"class":34},[14,4404,4405],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1626,4407,4408],{},[591,4409,4410],{},"1️⃣五只小猪称体重",[18,4412,4414],{"className":626,"code":4413,"language":628,"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,4415,4416,4422,4432,4440,4444,4484,4497,4523,4527,4539,4543,4553,4557,4561,4574,4584],{"__ignoreMap":23},[28,4417,4418,4420],{"class":30,"line":31},[28,4419,2439],{"class":42},[28,4421,2442],{"class":735},[28,4423,4424,4426,4428,4430],{"class":30,"line":77},[28,4425,2447],{"class":42},[28,4427,2450],{"class":42},[28,4429,2454],{"class":2453},[28,4431,1781],{"class":34},[28,4433,4434,4436,4438],{"class":30,"line":114},[28,4435,640],{"class":42},[28,4437,2463],{"class":2453},[28,4439,2466],{"class":34},[28,4441,4442],{"class":30,"line":128},[28,4443,2036],{"class":34},[28,4445,4446,4448,4451,4453,4455,4457,4459,4462,4464,4467,4469,4471,4473,4476,4478,4481],{"class":30,"line":393},[28,4447,2475],{"class":42},[28,4449,4450],{"class":34}," arr[",[28,4452,108],{"class":38},[28,4454,1559],{"class":34},[28,4456,83],{"class":42},[28,4458,1515],{"class":34},[28,4460,4461],{"class":38},"300",[28,4463,90],{"class":34},[28,4465,4466],{"class":38},"350",[28,4468,90],{"class":34},[28,4470,2212],{"class":38},[28,4472,90],{"class":34},[28,4474,4475],{"class":38},"400",[28,4477,90],{"class":34},[28,4479,4480],{"class":38},"250",[28,4482,4483],{"class":34},"};\n",[28,4485,4486,4488,4491,4493,4495],{"class":30,"line":409},[28,4487,2475],{"class":42},[28,4489,4490],{"class":34}," tmp",[28,4492,83],{"class":42},[28,4494,822],{"class":38},[28,4496,1781],{"class":34},[28,4498,4499,4501,4503,4505,4507,4509,4511,4513,4515,4517,4519,4521],{"class":30,"line":1711},[28,4500,377],{"class":42},[28,4502,2148],{"class":34},[28,4504,640],{"class":42},[28,4506,3521],{"class":34},[28,4508,83],{"class":42},[28,4510,822],{"class":38},[28,4512,3528],{"class":34},[28,4514,1529],{"class":42},[28,4516,108],{"class":38},[28,4518,3528],{"class":34},[28,4520,2782],{"class":42},[28,4522,228],{"class":34},[28,4524,4525],{"class":30,"line":1802},[28,4526,2520],{"class":34},[28,4528,4529,4531,4534,4536],{"class":30,"line":1808},[28,4530,2987],{"class":42},[28,4532,4533],{"class":34},"(tmp",[28,4535,1529],{"class":42},[28,4537,4538],{"class":34},"arr[i])\n",[28,4540,4541],{"class":30,"line":1820},[28,4542,3000],{"class":34},[28,4544,4545,4548,4550],{"class":30,"line":2102},[28,4546,4547],{"class":34},"            tmp",[28,4549,83],{"class":42},[28,4551,4552],{"class":34},"arr[i];\n",[28,4554,4555],{"class":30,"line":2107},[28,4556,3019],{"class":34},[28,4558,4559],{"class":30,"line":2113},[28,4560,2677],{"class":34},[28,4562,4563,4565,4567,4570,4572],{"class":30,"line":2118},[28,4564,2041],{"class":34},[28,4566,1663],{"class":42},[28,4568,4569],{"class":34},"tmp",[28,4571,1663],{"class":42},[28,4573,1685],{"class":34},[28,4575,4576,4579,4582],{"class":30,"line":2132},[28,4577,4578],{"class":42},"    return",[28,4580,4581],{"class":38}," 0",[28,4583,1781],{"class":34},[28,4585,4586],{"class":30,"line":2137},[28,4587,2055],{"class":34},[1626,4589,4590],{},[591,4591,4592],{},"2️⃣数组元素逆置",[18,4594,4596],{"className":626,"code":4595,"language":628,"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,4597,4598,4603,4609,4619,4627,4631,4666,4682,4714,4727,4732,4737,4749,4759,4769,4774,4783,4793,4798,4803,4830,4834,4850,4854,4865,4874],{"__ignoreMap":23},[28,4599,4600],{"class":30,"line":31},[28,4601,4602],{"class":73},"\u002F\u002F元素逆置\n",[28,4604,4605,4607],{"class":30,"line":77},[28,4606,2439],{"class":42},[28,4608,2442],{"class":735},[28,4610,4611,4613,4615,4617],{"class":30,"line":114},[28,4612,2447],{"class":42},[28,4614,2450],{"class":42},[28,4616,2454],{"class":2453},[28,4618,1781],{"class":34},[28,4620,4621,4623,4625],{"class":30,"line":128},[28,4622,640],{"class":42},[28,4624,2463],{"class":2453},[28,4626,2466],{"class":34},[28,4628,4629],{"class":30,"line":393},[28,4630,2036],{"class":34},[28,4632,4633,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664],{"class":30,"line":409},[28,4634,4635],{"class":42},"   int",[28,4637,4450],{"class":34},[28,4639,108],{"class":38},[28,4641,1559],{"class":34},[28,4643,83],{"class":42},[28,4645,1515],{"class":34},[28,4647,39],{"class":38},[28,4649,90],{"class":34},[28,4651,93],{"class":38},[28,4653,90],{"class":34},[28,4655,98],{"class":38},[28,4657,90],{"class":34},[28,4659,103],{"class":38},[28,4661,90],{"class":34},[28,4663,108],{"class":38},[28,4665,4483],{"class":34},[28,4667,4668,4670,4673,4675,4677,4679],{"class":30,"line":1711},[28,4669,4635],{"class":42},[28,4671,4672],{"class":34}," start",[28,4674,83],{"class":42},[28,4676,822],{"class":38},[28,4678,689],{"class":34},[28,4680,4681],{"class":73},"\u002F\u002F起始下标\n",[28,4683,4684,4686,4689,4692,4695,4698,4700,4702,4705,4707,4709,4711],{"class":30,"line":1802},[28,4685,4635],{"class":42},[28,4687,4688],{"class":34}," end",[28,4690,4691],{"class":42},"=sizeof",[28,4693,4694],{"class":34},"(arr)",[28,4696,4697],{"class":42},"\u002Fsizeof",[28,4699,4339],{"class":34},[28,4701,822],{"class":38},[28,4703,4704],{"class":34},"])",[28,4706,445],{"class":42},[28,4708,39],{"class":38},[28,4710,689],{"class":34},[28,4712,4713],{"class":73},"\u002F\u002F结束下标\n",[28,4715,4716,4719,4722,4724],{"class":30,"line":1808},[28,4717,4718],{"class":42},"   while",[28,4720,4721],{"class":34}," (start",[28,4723,1529],{"class":42},[28,4725,4726],{"class":34},"end)\n",[28,4728,4729],{"class":30,"line":1820},[28,4730,4731],{"class":34},"   {\n",[28,4733,4734],{"class":30,"line":2102},[28,4735,4736],{"class":73},"    \u002F\u002F实现元素互换代码\n",[28,4738,4739,4741,4744,4746],{"class":30,"line":2107},[28,4740,2475],{"class":42},[28,4742,4743],{"class":34}," temp",[28,4745,83],{"class":42},[28,4747,4748],{"class":34},"arr[start];\n",[28,4750,4751,4754,4756],{"class":30,"line":2113},[28,4752,4753],{"class":34},"    arr[start]",[28,4755,83],{"class":42},[28,4757,4758],{"class":34},"arr[end];\n",[28,4760,4761,4764,4766],{"class":30,"line":2118},[28,4762,4763],{"class":34},"    arr[end]",[28,4765,83],{"class":42},[28,4767,4768],{"class":34},"temp;\n",[28,4770,4771],{"class":30,"line":2132},[28,4772,4773],{"class":73},"    \u002F\u002F下标更新\n",[28,4775,4776,4779,4781],{"class":30,"line":2137},[28,4777,4778],{"class":34},"    start",[28,4780,2782],{"class":42},[28,4782,1781],{"class":34},[28,4784,4785,4788,4791],{"class":30,"line":2143},[28,4786,4787],{"class":34},"    end",[28,4789,4790],{"class":42},"--",[28,4792,1781],{"class":34},[28,4794,4795],{"class":30,"line":2164},[28,4796,4797],{"class":34},"   }\n",[28,4799,4800],{"class":30,"line":2169},[28,4801,4802],{"class":73},"   \u002F\u002F输出逆置后的数组\n",[28,4804,4805,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828],{"class":30,"line":2183},[28,4806,4807],{"class":42},"   for",[28,4809,2148],{"class":34},[28,4811,640],{"class":42},[28,4813,3521],{"class":34},[28,4815,83],{"class":42},[28,4817,822],{"class":38},[28,4819,3528],{"class":34},[28,4821,1529],{"class":42},[28,4823,108],{"class":38},[28,4825,3528],{"class":34},[28,4827,2782],{"class":42},[28,4829,228],{"class":34},[28,4831,4832],{"class":30,"line":2188},[28,4833,4731],{"class":34},[28,4835,4836,4838,4840,4843,4845,4848],{"class":30,"line":2217},[28,4837,2041],{"class":34},[28,4839,1663],{"class":42},[28,4841,4842],{"class":34},"arr[i]",[28,4844,1663],{"class":42},[28,4846,4847],{"class":735},"\" \"",[28,4849,1781],{"class":34},[28,4851,4852],{"class":30,"line":2222},[28,4853,4797],{"class":34},[28,4855,4856,4859,4861,4863],{"class":30,"line":2239},[28,4857,4858],{"class":2453},"   system",[28,4860,367],{"class":34},[28,4862,2798],{"class":735},[28,4864,3209],{"class":34},[28,4866,4867,4870,4872],{"class":30,"line":2244},[28,4868,4869],{"class":42},"   return",[28,4871,4581],{"class":38},[28,4873,1781],{"class":34},[28,4875,4876],{"class":30,"line":2249},[28,4877,2055],{"class":34},[1626,4879,4880],{},[591,4881,4882],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[18,4884,4886],{"className":626,"code":4885,"language":628,"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,4887,4888,4893,4899,4909,4917,4921,4973,4986,5012,5016,5030,5034,5039,5044,5074,5078,5083,5117,5121,5126,5146,5151,5163,5179,5194,5199,5203,5207,5220,5246,5250,5264,5268,5276],{"__ignoreMap":23},[28,4889,4890],{"class":30,"line":31},[28,4891,4892],{"class":73},"\u002F\u002F冒泡排序,升序\n",[28,4894,4895,4897],{"class":30,"line":77},[28,4896,2439],{"class":42},[28,4898,2442],{"class":735},[28,4900,4901,4903,4905,4907],{"class":30,"line":114},[28,4902,2447],{"class":42},[28,4904,2450],{"class":42},[28,4906,2454],{"class":2453},[28,4908,1781],{"class":34},[28,4910,4911,4913,4915],{"class":30,"line":128},[28,4912,640],{"class":42},[28,4914,2463],{"class":2453},[28,4916,2466],{"class":34},[28,4918,4919],{"class":30,"line":393},[28,4920,2036],{"class":34},[28,4922,4923,4925,4927,4929,4932,4934,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971],{"class":30,"line":409},[28,4924,2475],{"class":42},[28,4926,4450],{"class":34},[28,4928,1045],{"class":38},[28,4930,4931],{"class":34},"] ",[28,4933,83],{"class":42},[28,4935,4936],{"class":34}," {",[28,4938,103],{"class":38},[28,4940,90],{"class":34},[28,4942,93],{"class":38},[28,4944,90],{"class":34},[28,4946,1020],{"class":38},[28,4948,90],{"class":34},[28,4950,822],{"class":38},[28,4952,90],{"class":34},[28,4954,108],{"class":38},[28,4956,90],{"class":34},[28,4958,995],{"class":38},[28,4960,90],{"class":34},[28,4962,39],{"class":38},[28,4964,90],{"class":34},[28,4966,98],{"class":38},[28,4968,90],{"class":34},[28,4970,1045],{"class":38},[28,4972,4483],{"class":34},[28,4974,4975,4977,4979,4982,4984],{"class":30,"line":1711},[28,4976,2041],{"class":34},[28,4978,1663],{"class":42},[28,4980,4981],{"class":735},"\"排序前：\"",[28,4983,1663],{"class":42},[28,4985,1685],{"class":34},[28,4987,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010],{"class":30,"line":1802},[28,4989,377],{"class":42},[28,4991,2148],{"class":34},[28,4993,640],{"class":42},[28,4995,3521],{"class":34},[28,4997,83],{"class":42},[28,4999,822],{"class":38},[28,5001,3528],{"class":34},[28,5003,1529],{"class":42},[28,5005,1045],{"class":38},[28,5007,3528],{"class":34},[28,5009,2782],{"class":42},[28,5011,228],{"class":34},[28,5013,5014],{"class":30,"line":1808},[28,5015,2520],{"class":34},[28,5017,5018,5020,5022,5024,5026,5028],{"class":30,"line":1820},[28,5019,3939],{"class":34},[28,5021,1663],{"class":42},[28,5023,4842],{"class":34},[28,5025,1663],{"class":42},[28,5027,4847],{"class":735},[28,5029,1781],{"class":34},[28,5031,5032],{"class":30,"line":2102},[28,5033,2677],{"class":34},[28,5035,5036],{"class":30,"line":2107},[28,5037,5038],{"class":73},"    \u002F\u002F开始冒泡排序\n",[28,5040,5041],{"class":30,"line":2113},[28,5042,5043],{"class":73},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[28,5045,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066,5068,5070,5072],{"class":30,"line":2118},[28,5047,377],{"class":42},[28,5049,2148],{"class":34},[28,5051,640],{"class":42},[28,5053,3521],{"class":34},[28,5055,83],{"class":42},[28,5057,822],{"class":38},[28,5059,3528],{"class":34},[28,5061,1529],{"class":42},[28,5063,1045],{"class":38},[28,5065,445],{"class":42},[28,5067,39],{"class":38},[28,5069,3528],{"class":34},[28,5071,2782],{"class":42},[28,5073,228],{"class":34},[28,5075,5076],{"class":30,"line":2132},[28,5077,2520],{"class":34},[28,5079,5080],{"class":30,"line":2137},[28,5081,5082],{"class":73},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[28,5084,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115],{"class":30,"line":2143},[28,5086,3891],{"class":42},[28,5088,2148],{"class":34},[28,5090,640],{"class":42},[28,5092,3898],{"class":34},[28,5094,83],{"class":42},[28,5096,822],{"class":38},[28,5098,3905],{"class":34},[28,5100,1529],{"class":42},[28,5102,1045],{"class":38},[28,5104,445],{"class":42},[28,5106,1066],{"class":34},[28,5108,445],{"class":42},[28,5110,39],{"class":38},[28,5112,3905],{"class":34},[28,5114,2782],{"class":42},[28,5116,228],{"class":34},[28,5118,5119],{"class":30,"line":2164},[28,5120,3000],{"class":34},[28,5122,5123],{"class":30,"line":2169},[28,5124,5125],{"class":73},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[28,5127,5128,5131,5134,5136,5139,5141,5143],{"class":30,"line":2183},[28,5129,5130],{"class":42},"            if",[28,5132,5133],{"class":34},"(arr[j]",[28,5135,1579],{"class":42},[28,5137,5138],{"class":34},"arr[j",[28,5140,1104],{"class":42},[28,5142,39],{"class":38},[28,5144,5145],{"class":34},"])\n",[28,5147,5148],{"class":30,"line":2188},[28,5149,5150],{"class":34},"            {\n",[28,5152,5153,5156,5158,5160],{"class":30,"line":2217},[28,5154,5155],{"class":42},"                int",[28,5157,4743],{"class":34},[28,5159,83],{"class":42},[28,5161,5162],{"class":34},"arr[j];\n",[28,5164,5165,5168,5170,5172,5174,5176],{"class":30,"line":2222},[28,5166,5167],{"class":34},"                arr[j]",[28,5169,83],{"class":42},[28,5171,5138],{"class":34},[28,5173,1104],{"class":42},[28,5175,39],{"class":38},[28,5177,5178],{"class":34},"];\n",[28,5180,5181,5184,5186,5188,5190,5192],{"class":30,"line":2239},[28,5182,5183],{"class":34},"                arr[j",[28,5185,1104],{"class":42},[28,5187,39],{"class":38},[28,5189,1559],{"class":34},[28,5191,83],{"class":42},[28,5193,4768],{"class":34},[28,5195,5196],{"class":30,"line":2244},[28,5197,5198],{"class":34},"            }\n",[28,5200,5201],{"class":30,"line":2249},[28,5202,3019],{"class":34},[28,5204,5205],{"class":30,"line":2254},[28,5206,2677],{"class":34},[28,5208,5209,5211,5213,5216,5218],{"class":30,"line":2268},[28,5210,2041],{"class":34},[28,5212,1663],{"class":42},[28,5214,5215],{"class":735},"\"排序后：\"",[28,5217,1663],{"class":42},[28,5219,1685],{"class":34},[28,5221,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244],{"class":30,"line":2273},[28,5223,377],{"class":42},[28,5225,2148],{"class":34},[28,5227,640],{"class":42},[28,5229,3521],{"class":34},[28,5231,83],{"class":42},[28,5233,822],{"class":38},[28,5235,3528],{"class":34},[28,5237,1529],{"class":42},[28,5239,1045],{"class":38},[28,5241,3528],{"class":34},[28,5243,2782],{"class":42},[28,5245,228],{"class":34},[28,5247,5248],{"class":30,"line":3067},[28,5249,2520],{"class":34},[28,5251,5252,5254,5256,5258,5260,5262],{"class":30,"line":3081},[28,5253,3939],{"class":34},[28,5255,1663],{"class":42},[28,5257,4842],{"class":34},[28,5259,1663],{"class":42},[28,5261,4847],{"class":735},[28,5263,1781],{"class":34},[28,5265,5266],{"class":30,"line":3089},[28,5267,2677],{"class":34},[28,5269,5270,5272,5274],{"class":30,"line":3094},[28,5271,4578],{"class":42},[28,5273,4581],{"class":38},[28,5275,1781],{"class":34},[28,5277,5278],{"class":30,"line":3100},[28,5279,2055],{"class":34},[605,5281,5283],{"id":5282},"_172二维数组","1.7.2二维数组",[588,5285,5286],{},[591,5287,5288],{},"二维数组的四种定义方式",[768,5290,5291,5300],{},[771,5292,5293],{},[774,5294,5295,5298],{},[777,5296,5297],{},"序号",[777,5299,4269],{},[815,5301,5302,5312,5321,5330,5339],{},[774,5303,5304,5306],{},[820,5305,39],{},[820,5307,5308,5309,689],{},"数据类型 数组名[行数]",[28,5310,5311],{},"列数",[774,5313,5314,5316],{},[820,5315,93],{},[820,5317,5308,5318,5320],{},[28,5319,5311],{},"={ {数据1,数据2}，{数据3，数据4}... }",[774,5322,5323,5325],{},[820,5324,98],{},[820,5326,5308,5327,5329],{},[28,5328,5311],{},"={数据1,数据2,数据3...}",[774,5331,5332,5334],{},[820,5333,103],{},[820,5335,5336,5337,5329],{},"数据类型 数组名[]",[28,5338,5311],{},[774,5340,5341,5344],{},[820,5342,5343],{},"注意：不能只省略列数",[820,5345],{},[588,5347,5348],{"start":77},[591,5349,5350],{},"二维数组数组名",[1626,5352,5353,5356],{},[591,5354,5355],{},"1.查看二维数组所占内存空间",[591,5357,5358],{},"2.获取二维数组首地址",[14,5360,5361],{},"已知二维数组，求二维数组的行数与列数",[18,5363,5365],{"className":626,"code":5364,"language":628,"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,5366,5367,5375,5379,5397,5401,5419,5435,5440,5465,5498],{"__ignoreMap":23},[28,5368,5369,5371,5373],{"class":30,"line":31},[28,5370,640],{"class":42},[28,5372,2463],{"class":2453},[28,5374,2466],{"class":34},[28,5376,5377],{"class":30,"line":77},[28,5378,2036],{"class":34},[28,5380,5381,5383,5385,5387,5390,5392,5394],{"class":30,"line":114},[28,5382,2475],{"class":42},[28,5384,4450],{"class":34},[28,5386,93],{"class":38},[28,5388,5389],{"class":34},"][",[28,5391,98],{"class":38},[28,5393,1559],{"class":34},[28,5395,5396],{"class":42},"=\n",[28,5398,5399],{"class":30,"line":128},[28,5400,2520],{"class":34},[28,5402,5403,5406,5408,5410,5412,5414,5416],{"class":30,"line":393},[28,5404,5405],{"class":34},"        {",[28,5407,39],{"class":38},[28,5409,90],{"class":34},[28,5411,93],{"class":38},[28,5413,90],{"class":34},[28,5415,98],{"class":38},[28,5417,5418],{"class":34},"},\n",[28,5420,5421,5423,5425,5427,5429,5431,5433],{"class":30,"line":409},[28,5422,5405],{"class":34},[28,5424,103],{"class":38},[28,5426,90],{"class":34},[28,5428,108],{"class":38},[28,5430,90],{"class":34},[28,5432,970],{"class":38},[28,5434,2055],{"class":34},[28,5436,5437],{"class":30,"line":1711},[28,5438,5439],{"class":34},"    };\n",[28,5441,5442,5444,5446,5449,5451,5453,5455,5457,5459,5461,5463],{"class":30,"line":1802},[28,5443,2041],{"class":34},[28,5445,1663],{"class":42},[28,5447,5448],{"class":735},"\"二维数组的行数\"",[28,5450,1863],{"class":42},[28,5452,4694],{"class":34},[28,5454,4697],{"class":42},[28,5456,4339],{"class":34},[28,5458,822],{"class":38},[28,5460,4704],{"class":34},[28,5462,1663],{"class":42},[28,5464,1685],{"class":34},[28,5466,5467,5469,5471,5474,5476,5478,5480,5482,5484,5486,5488,5490,5492,5494,5496],{"class":30,"line":1808},[28,5468,2041],{"class":34},[28,5470,1663],{"class":42},[28,5472,5473],{"class":735},"\"二维数组的列数\"",[28,5475,1863],{"class":42},[28,5477,4339],{"class":34},[28,5479,822],{"class":38},[28,5481,4704],{"class":34},[28,5483,4697],{"class":42},[28,5485,4339],{"class":34},[28,5487,822],{"class":38},[28,5489,5389],{"class":34},[28,5491,822],{"class":38},[28,5493,4704],{"class":34},[28,5495,1663],{"class":42},[28,5497,1685],{"class":34},[28,5499,5500],{"class":30,"line":1820},[28,5501,2055],{"class":34},[14,5503,5504],{},"查看二维数组首地址",[18,5506,5508],{"className":626,"code":5507,"language":628,"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,5509,5510,5527,5553,5578],{"__ignoreMap":23},[28,5511,5512,5514,5516,5519,5521,5523,5525],{"class":30,"line":31},[28,5513,1860],{"class":34},[28,5515,1663],{"class":42},[28,5517,5518],{"class":735},"\"二维数组首地址：\"",[28,5520,1663],{"class":42},[28,5522,4368],{"class":34},[28,5524,1663],{"class":42},[28,5526,1685],{"class":34},[28,5528,5529,5531,5533,5536,5538,5540,5542,5545,5547,5549,5551],{"class":30,"line":77},[28,5530,1860],{"class":34},[28,5532,1663],{"class":42},[28,5534,5535],{"class":735},"\"二维数组第一行的首地址：\"",[28,5537,1663],{"class":42},[28,5539,367],{"class":34},[28,5541,640],{"class":42},[28,5543,5544],{"class":34},")arr[",[28,5546,822],{"class":38},[28,5548,1559],{"class":34},[28,5550,1663],{"class":42},[28,5552,1685],{"class":34},[28,5554,5555,5557,5559,5562,5564,5566,5568,5570,5572,5574,5576],{"class":30,"line":114},[28,5556,1860],{"class":34},[28,5558,1663],{"class":42},[28,5560,5561],{"class":735},"\"二维数组第二行的首地址：\"",[28,5563,1663],{"class":42},[28,5565,367],{"class":34},[28,5567,640],{"class":42},[28,5569,5544],{"class":34},[28,5571,39],{"class":38},[28,5573,1559],{"class":34},[28,5575,1663],{"class":42},[28,5577,1685],{"class":34},[28,5579,5580,5582,5584,5587,5589,5591,5593,5595,5597,5599,5601,5603,5605,5607,5609,5611],{"class":30,"line":128},[28,5581,1860],{"class":34},[28,5583,1663],{"class":42},[28,5585,5586],{"class":735},"\"二维数组第一个元素的首地址:\"",[28,5588,1663],{"class":42},[28,5590,367],{"class":34},[28,5592,640],{"class":42},[28,5594,1054],{"class":34},[28,5596,979],{"class":42},[28,5598,4394],{"class":34},[28,5600,822],{"class":38},[28,5602,5389],{"class":34},[28,5604,822],{"class":38},[28,5606,1559],{"class":34},[28,5608,1663],{"class":42},[28,5610,1729],{"class":34},[28,5612,5613],{"class":73},"\u002F\u002F对于数，要加取址符\n",[547,5615,5616],{},"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":77,"depth":77,"links":5618},[5619,5620,5621,5629,5630,5636,5641],{"id":578,"depth":77,"text":579},{"id":585,"depth":77,"text":586},{"id":602,"depth":77,"text":603,"children":5622},[5623,5624,5625,5626,5627,5628],{"id":607,"depth":114,"text":608},{"id":652,"depth":114,"text":653},{"id":716,"depth":114,"text":717},{"id":1644,"depth":114,"text":1645},{"id":1735,"depth":114,"text":1736},{"id":1834,"depth":114,"text":1835},{"id":1876,"depth":77,"text":1877},{"id":1944,"depth":77,"text":1945,"children":5631},[5632,5633,5634,5635],{"id":1948,"depth":114,"text":1949},{"id":1969,"depth":114,"text":1970},{"id":1978,"depth":114,"text":1979},{"id":1987,"depth":114,"text":1988},{"id":1996,"depth":77,"text":1997,"children":5637},[5638,5639,5640],{"id":2000,"depth":114,"text":2001},{"id":2695,"depth":114,"text":2696},{"id":4109,"depth":114,"text":4110},{"id":4250,"depth":77,"text":4251,"children":5642},[5643,5644],{"id":4254,"depth":114,"text":4255},{"id":5282,"depth":114,"text":5283},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":570,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5651,"title":5652,"body":5653,"description":23,"extension":560,"meta":6753,"navigation":562,"path":6754,"seo":6755,"stem":6756,"__hash__":6757},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5654,"toc":6745},[5655,5658,5662,5670,5678,5681,5747,5751,5754,5830,5834,5837,5840,5843,6056,6060,6065,6129,6134,6201,6206,6297,6300,6405,6409,6412,6418,6562,6566,6569,6583,6586,6631,6634,6742],[10,5656,5652],{"id":5657},"_2函数",[60,5659,5661],{"id":5660},"_21函数概述","2.1函数概述",[588,5663,5664,5667],{},[591,5665,5666],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[591,5668,5669],{},"语法：",[18,5671,5676],{"className":5672,"code":5674,"language":5675,"meta":23},[5673],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[25,5677,5674],{"__ignoreMap":23},[14,5679,5680],{},"小案例",[18,5682,5684],{"className":626,"code":5683,"language":628,"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,5685,5686,5691,5715,5719,5736,5743],{"__ignoreMap":23},[28,5687,5688],{"class":30,"line":31},[28,5689,5690],{"class":73},"\u002F\u002Fnum1,num2形参\n",[28,5692,5693,5695,5698,5700,5702,5706,5708,5710,5713],{"class":30,"line":77},[28,5694,640],{"class":42},[28,5696,5697],{"class":2453}," add",[28,5699,367],{"class":34},[28,5701,640],{"class":42},[28,5703,5705],{"class":5704},"s4XuR"," num1",[28,5707,90],{"class":34},[28,5709,640],{"class":42},[28,5711,5712],{"class":5704}," num2",[28,5714,228],{"class":34},[28,5716,5717],{"class":30,"line":114},[28,5718,2036],{"class":34},[28,5720,5721,5723,5726,5728,5731,5733],{"class":30,"line":128},[28,5722,2475],{"class":42},[28,5724,5725],{"class":34}," sum",[28,5727,83],{"class":42},[28,5729,5730],{"class":34},"num1",[28,5732,1104],{"class":42},[28,5734,5735],{"class":34},"num2;\n",[28,5737,5738,5740],{"class":30,"line":393},[28,5739,4578],{"class":42},[28,5741,5742],{"class":34}," sum;\n",[28,5744,5745],{"class":30,"line":409},[28,5746,2055],{"class":34},[60,5748,5750],{"id":5749},"_22函数调用","2.2函数调用",[14,5752,5753],{},"调用刚刚写的求和函数",[18,5755,5757],{"className":626,"code":5756,"language":628,"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,5758,5759,5767,5771,5776,5788,5800,5809,5814,5826],{"__ignoreMap":23},[28,5760,5761,5763,5765],{"class":30,"line":31},[28,5762,640],{"class":42},[28,5764,2463],{"class":2453},[28,5766,2466],{"class":34},[28,5768,5769],{"class":30,"line":77},[28,5770,2036],{"class":34},[28,5772,5773],{"class":30,"line":114},[28,5774,5775],{"class":73},"    \u002F\u002Fa,b实参\n",[28,5777,5778,5780,5782,5784,5786],{"class":30,"line":128},[28,5779,2475],{"class":42},[28,5781,1889],{"class":34},[28,5783,83],{"class":42},[28,5785,822],{"class":38},[28,5787,1781],{"class":34},[28,5789,5790,5792,5794,5796,5798],{"class":30,"line":393},[28,5791,2475],{"class":42},[28,5793,3323],{"class":34},[28,5795,83],{"class":42},[28,5797,822],{"class":38},[28,5799,1781],{"class":34},[28,5801,5802,5804,5806],{"class":30,"line":409},[28,5803,2502],{"class":34},[28,5805,1920],{"class":42},[28,5807,5808],{"class":34},"a,b;\n",[28,5810,5811],{"class":30,"line":1711},[28,5812,5813],{"class":73},"    \u002F\u002F调用函数时，实参值传给了形参\n",[28,5815,5816,5818,5820,5823],{"class":30,"line":1802},[28,5817,2041],{"class":34},[28,5819,1663],{"class":42},[28,5821,5822],{"class":2453},"add",[28,5824,5825],{"class":34},"(a,b);\n",[28,5827,5828],{"class":30,"line":1808},[28,5829,2055],{"class":34},[60,5831,5833],{"id":5832},"_23值传递","2.3值传递",[14,5835,5836],{},"值传递就是函数调用时实参将数值传给形参",[14,5838,5839],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5841,5842],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[18,5844,5846],{"className":626,"code":5845,"language":628,"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,5847,5848,5870,5874,5887,5904,5922,5933,5942,5951,5964,5980,5996,6005,6009,6017,6021,6033,6045,6052],{"__ignoreMap":23},[28,5849,5850,5853,5856,5858,5860,5862,5864,5866,5868],{"class":30,"line":31},[28,5851,5852],{"class":42},"void",[28,5854,5855],{"class":2453}," swap",[28,5857,367],{"class":34},[28,5859,640],{"class":42},[28,5861,5705],{"class":5704},[28,5863,90],{"class":34},[28,5865,640],{"class":42},[28,5867,5712],{"class":5704},[28,5869,228],{"class":34},[28,5871,5872],{"class":30,"line":77},[28,5873,2036],{"class":34},[28,5875,5876,5878,5880,5883,5885],{"class":30,"line":114},[28,5877,2041],{"class":34},[28,5879,1663],{"class":42},[28,5881,5882],{"class":735},"\"交换前：\"",[28,5884,1663],{"class":42},[28,5886,1685],{"class":34},[28,5888,5889,5891,5893,5896,5898,5900,5902],{"class":30,"line":128},[28,5890,2041],{"class":34},[28,5892,1663],{"class":42},[28,5894,5895],{"class":735},"\"num1=\"",[28,5897,1663],{"class":42},[28,5899,5730],{"class":34},[28,5901,1663],{"class":42},[28,5903,1685],{"class":34},[28,5905,5906,5908,5910,5913,5915,5918,5920],{"class":30,"line":393},[28,5907,2041],{"class":34},[28,5909,1663],{"class":42},[28,5911,5912],{"class":735},"\"num2=\"",[28,5914,1663],{"class":42},[28,5916,5917],{"class":34},"num2",[28,5919,1663],{"class":42},[28,5921,1685],{"class":34},[28,5923,5924,5926,5928,5930],{"class":30,"line":409},[28,5925,2475],{"class":42},[28,5927,4743],{"class":34},[28,5929,83],{"class":42},[28,5931,5932],{"class":34},"num1;\n",[28,5934,5935,5938,5940],{"class":30,"line":1711},[28,5936,5937],{"class":34},"    num1",[28,5939,83],{"class":42},[28,5941,5735],{"class":34},[28,5943,5944,5947,5949],{"class":30,"line":1802},[28,5945,5946],{"class":34},"    num2",[28,5948,83],{"class":42},[28,5950,4768],{"class":34},[28,5952,5953,5955,5957,5960,5962],{"class":30,"line":1808},[28,5954,2041],{"class":34},[28,5956,1663],{"class":42},[28,5958,5959],{"class":735},"\"交换后：\"",[28,5961,1663],{"class":42},[28,5963,1685],{"class":34},[28,5965,5966,5968,5970,5972,5974,5976,5978],{"class":30,"line":1820},[28,5967,2041],{"class":34},[28,5969,1663],{"class":42},[28,5971,5895],{"class":735},[28,5973,1663],{"class":42},[28,5975,5730],{"class":34},[28,5977,1663],{"class":42},[28,5979,1685],{"class":34},[28,5981,5982,5984,5986,5988,5990,5992,5994],{"class":30,"line":2102},[28,5983,2041],{"class":34},[28,5985,1663],{"class":42},[28,5987,5912],{"class":735},[28,5989,1663],{"class":42},[28,5991,5917],{"class":34},[28,5993,1663],{"class":42},[28,5995,1685],{"class":34},[28,5997,5998,6000,6002],{"class":30,"line":2107},[28,5999,4578],{"class":42},[28,6001,689],{"class":34},[28,6003,6004],{"class":73},"\u002F\u002F或者不写\n",[28,6006,6007],{"class":30,"line":2113},[28,6008,2055],{"class":34},[28,6010,6011,6013,6015],{"class":30,"line":2118},[28,6012,640],{"class":42},[28,6014,2463],{"class":2453},[28,6016,2466],{"class":34},[28,6018,6019],{"class":30,"line":2132},[28,6020,2036],{"class":34},[28,6022,6023,6025,6027,6029,6031],{"class":30,"line":2137},[28,6024,2475],{"class":42},[28,6026,1889],{"class":34},[28,6028,83],{"class":42},[28,6030,225],{"class":38},[28,6032,1781],{"class":34},[28,6034,6035,6037,6039,6041,6043],{"class":30,"line":2143},[28,6036,2475],{"class":42},[28,6038,3323],{"class":34},[28,6040,83],{"class":42},[28,6042,1320],{"class":38},[28,6044,1781],{"class":34},[28,6046,6047,6050],{"class":30,"line":2164},[28,6048,6049],{"class":2453},"    swap",[28,6051,5825],{"class":34},[28,6053,6054],{"class":30,"line":2169},[28,6055,2055],{"class":34},[60,6057,6059],{"id":6058},"_24函数的常见形式","2.4函数的常见形式",[588,6061,6062],{},[591,6063,6064],{},"无参无返",[18,6066,6068],{"className":626,"code":6067,"language":628,"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,6069,6070,6079,6083,6096,6100,6108,6112,6117,6125],{"__ignoreMap":23},[28,6071,6072,6074,6077],{"class":30,"line":31},[28,6073,5852],{"class":42},[28,6075,6076],{"class":2453}," test01",[28,6078,2466],{"class":34},[28,6080,6081],{"class":30,"line":77},[28,6082,2036],{"class":34},[28,6084,6085,6087,6089,6092,6094],{"class":30,"line":114},[28,6086,2041],{"class":34},[28,6088,1663],{"class":42},[28,6090,6091],{"class":735},"\"你好\"",[28,6093,1663],{"class":42},[28,6095,1685],{"class":34},[28,6097,6098],{"class":30,"line":128},[28,6099,2055],{"class":34},[28,6101,6102,6104,6106],{"class":30,"line":393},[28,6103,640],{"class":42},[28,6105,2463],{"class":2453},[28,6107,2466],{"class":34},[28,6109,6110],{"class":30,"line":409},[28,6111,2036],{"class":34},[28,6113,6114],{"class":30,"line":1711},[28,6115,6116],{"class":73},"    \u002F\u002F函数调用\n",[28,6118,6119,6122],{"class":30,"line":1802},[28,6120,6121],{"class":2453},"    test01",[28,6123,6124],{"class":34},"();\n",[28,6126,6127],{"class":30,"line":1808},[28,6128,2055],{"class":34},[588,6130,6131],{"start":77},[591,6132,6133],{},"有参无返",[18,6135,6137],{"className":626,"code":6136,"language":628,"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,6138,6139,6154,6158,6170,6174,6182,6186,6197],{"__ignoreMap":23},[28,6140,6141,6143,6146,6148,6150,6152],{"class":30,"line":31},[28,6142,5852],{"class":42},[28,6144,6145],{"class":2453}," test02",[28,6147,367],{"class":34},[28,6149,640],{"class":42},[28,6151,1889],{"class":5704},[28,6153,228],{"class":34},[28,6155,6156],{"class":30,"line":77},[28,6157,2036],{"class":34},[28,6159,6160,6162,6164,6166,6168],{"class":30,"line":114},[28,6161,2041],{"class":34},[28,6163,1663],{"class":42},[28,6165,6091],{"class":735},[28,6167,1663],{"class":42},[28,6169,1685],{"class":34},[28,6171,6172],{"class":30,"line":128},[28,6173,2055],{"class":34},[28,6175,6176,6178,6180],{"class":30,"line":393},[28,6177,640],{"class":42},[28,6179,2463],{"class":2453},[28,6181,2466],{"class":34},[28,6183,6184],{"class":30,"line":409},[28,6185,2036],{"class":34},[28,6187,6188,6191,6193,6195],{"class":30,"line":1711},[28,6189,6190],{"class":2453},"    test02",[28,6192,367],{"class":34},[28,6194,938],{"class":38},[28,6196,3209],{"class":34},[28,6198,6199],{"class":30,"line":1802},[28,6200,2055],{"class":34},[588,6202,6203],{"start":114},[591,6204,6205],{},"无参有返",[18,6207,6209],{"className":626,"code":6208,"language":628,"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,6210,6211,6220,6224,6236,6245,6249,6257,6261,6274,6293],{"__ignoreMap":23},[28,6212,6213,6215,6218],{"class":30,"line":31},[28,6214,640],{"class":42},[28,6216,6217],{"class":2453}," test03",[28,6219,2466],{"class":34},[28,6221,6222],{"class":30,"line":77},[28,6223,2036],{"class":34},[28,6225,6226,6228,6230,6232,6234],{"class":30,"line":114},[28,6227,2041],{"class":34},[28,6229,1663],{"class":42},[28,6231,6091],{"class":735},[28,6233,1663],{"class":42},[28,6235,1685],{"class":34},[28,6237,6238,6240,6243],{"class":30,"line":128},[28,6239,4578],{"class":42},[28,6241,6242],{"class":38}," 100",[28,6244,1781],{"class":34},[28,6246,6247],{"class":30,"line":393},[28,6248,2055],{"class":34},[28,6250,6251,6253,6255],{"class":30,"line":409},[28,6252,640],{"class":42},[28,6254,2463],{"class":2453},[28,6256,2466],{"class":34},[28,6258,6259],{"class":30,"line":1711},[28,6260,2036],{"class":34},[28,6262,6263,6265,6267,6269,6272],{"class":30,"line":1802},[28,6264,2475],{"class":42},[28,6266,5705],{"class":34},[28,6268,83],{"class":42},[28,6270,6271],{"class":2453},"test03",[28,6273,6124],{"class":34},[28,6275,6276,6278,6280,6282,6284,6286,6288,6290],{"class":30,"line":1808},[28,6277,2041],{"class":34},[28,6279,1663],{"class":42},[28,6281,5895],{"class":735},[28,6283,1663],{"class":42},[28,6285,5730],{"class":34},[28,6287,1663],{"class":42},[28,6289,1729],{"class":34},[28,6291,6292],{"class":73}," \u002F\u002F100\n",[28,6294,6295],{"class":30,"line":1820},[28,6296,2055],{"class":34},[14,6298,6299],{},"4.有参有返",[18,6301,6303],{"className":626,"code":6302,"language":628,"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,6304,6305,6320,6324,6337,6343,6347,6356,6360,6372,6386,6401],{"__ignoreMap":23},[28,6306,6307,6309,6312,6314,6316,6318],{"class":30,"line":31},[28,6308,640],{"class":42},[28,6310,6311],{"class":2453}," test04",[28,6313,367],{"class":34},[28,6315,640],{"class":42},[28,6317,1889],{"class":5704},[28,6319,228],{"class":34},[28,6321,6322],{"class":30,"line":77},[28,6323,2036],{"class":34},[28,6325,6326,6328,6330,6333,6335],{"class":30,"line":114},[28,6327,2041],{"class":34},[28,6329,1663],{"class":42},[28,6331,6332],{"class":735},"\"hello\"",[28,6334,1663],{"class":42},[28,6336,1685],{"class":34},[28,6338,6339,6341],{"class":30,"line":128},[28,6340,4578],{"class":42},[28,6342,1923],{"class":34},[28,6344,6345],{"class":30,"line":393},[28,6346,2055],{"class":34},[28,6348,6349,6351,6354],{"class":30,"line":409},[28,6350,640],{"class":42},[28,6352,6353],{"class":2453}," mian",[28,6355,2466],{"class":34},[28,6357,6358],{"class":30,"line":1711},[28,6359,2036],{"class":34},[28,6361,6362,6364,6366,6368,6370],{"class":30,"line":1802},[28,6363,2475],{"class":42},[28,6365,3323],{"class":34},[28,6367,83],{"class":42},[28,6369,39],{"class":38},[28,6371,1781],{"class":34},[28,6373,6374,6376,6378,6380,6383],{"class":30,"line":1808},[28,6375,2475],{"class":42},[28,6377,3339],{"class":34},[28,6379,83],{"class":42},[28,6381,6382],{"class":2453},"test04",[28,6384,6385],{"class":34},"(b);\n",[28,6387,6388,6390,6392,6394,6396,6398],{"class":30,"line":1820},[28,6389,2041],{"class":34},[28,6391,1663],{"class":42},[28,6393,916],{"class":34},[28,6395,1663],{"class":42},[28,6397,1729],{"class":34},[28,6399,6400],{"class":73}," \u002F\u002F1\n",[28,6402,6403],{"class":30,"line":2102},[28,6404,2055],{"class":34},[60,6406,6408],{"id":6407},"_25函数的声明","2.5函数的声明",[14,6410,6411],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6413,6414,6415],{},"函数的",[780,6416,6417],{},"声明可以多次，但是函数的定义只能有一次",[18,6419,6421],{"className":626,"code":6420,"language":628,"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,6422,6423,6428,6433,6458,6467,6471,6483,6495,6511,6515,6535,6539,6558],{"__ignoreMap":23},[28,6424,6425],{"class":30,"line":31},[28,6426,6427],{"class":73},"\u002F\u002F函数声明\n",[28,6429,6430],{"class":30,"line":77},[28,6431,6432],{"class":73},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[28,6434,6435,6437,6440,6442,6444,6446,6448,6450,6452,6455],{"class":30,"line":114},[28,6436,640],{"class":42},[28,6438,6439],{"class":2453}," max",[28,6441,367],{"class":34},[28,6443,640],{"class":42},[28,6445,1889],{"class":5704},[28,6447,90],{"class":34},[28,6449,640],{"class":42},[28,6451,3323],{"class":5704},[28,6453,6454],{"class":34},");",[28,6456,6457],{"class":73},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[28,6459,6460,6462,6464],{"class":30,"line":128},[28,6461,640],{"class":42},[28,6463,2463],{"class":2453},[28,6465,6466],{"class":34},"() \n",[28,6468,6469],{"class":30,"line":393},[28,6470,2036],{"class":34},[28,6472,6473,6475,6477,6479,6481],{"class":30,"line":409},[28,6474,2475],{"class":42},[28,6476,1889],{"class":34},[28,6478,83],{"class":42},[28,6480,225],{"class":38},[28,6482,1781],{"class":34},[28,6484,6485,6487,6489,6491,6493],{"class":30,"line":1711},[28,6486,2475],{"class":42},[28,6488,3323],{"class":34},[28,6490,83],{"class":42},[28,6492,1320],{"class":38},[28,6494,1781],{"class":34},[28,6496,6497,6499,6501,6504,6507,6509],{"class":30,"line":1802},[28,6498,2041],{"class":34},[28,6500,1663],{"class":42},[28,6502,6503],{"class":2453},"max",[28,6505,6506],{"class":34},"(a,b)",[28,6508,1663],{"class":42},[28,6510,1685],{"class":34},[28,6512,6513],{"class":30,"line":1808},[28,6514,2055],{"class":34},[28,6516,6517,6519,6521,6523,6525,6527,6529,6531,6533],{"class":30,"line":1820},[28,6518,640],{"class":42},[28,6520,6439],{"class":2453},[28,6522,367],{"class":34},[28,6524,640],{"class":42},[28,6526,1889],{"class":5704},[28,6528,90],{"class":34},[28,6530,640],{"class":42},[28,6532,3323],{"class":5704},[28,6534,228],{"class":34},[28,6536,6537],{"class":30,"line":2102},[28,6538,2036],{"class":34},[28,6540,6541,6543,6545,6547,6549,6551,6553,6555],{"class":30,"line":2107},[28,6542,4578],{"class":42},[28,6544,1889],{"class":34},[28,6546,1579],{"class":42},[28,6548,117],{"class":34},[28,6550,1605],{"class":42},[28,6552,80],{"class":34},[28,6554,1479],{"class":42},[28,6556,6557],{"class":34},"b;\n",[28,6559,6560],{"class":30,"line":2113},[28,6561,2055],{"class":34},[60,6563,6565],{"id":6564},"_26函数的分文件编写","2.6函数的分文件编写",[14,6567,6568],{},"4个步骤：",[1626,6570,6571,6574,6577,6580],{},[591,6572,6573],{},"1.创建后缀名为.h的头文件",[591,6575,6576],{},"2.创建后缀名为.cpp的源文件",[591,6578,6579],{},"3.在头文件中写函数的定义",[591,6581,6582],{},"4.在源文件中写函数的定义\n示例：",[14,6584,6585],{},"头文件：swap.h",[18,6587,6589],{"className":626,"code":6588,"language":628,"meta":23,"style":23},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[25,6590,6591,6597,6607,6611],{"__ignoreMap":23},[28,6592,6593,6595],{"class":30,"line":31},[28,6594,2439],{"class":42},[28,6596,2442],{"class":735},[28,6598,6599,6601,6603,6605],{"class":30,"line":77},[28,6600,2447],{"class":42},[28,6602,2450],{"class":42},[28,6604,2454],{"class":2453},[28,6606,1781],{"class":34},[28,6608,6609],{"class":30,"line":114},[28,6610,6427],{"class":73},[28,6612,6613,6615,6617,6619,6621,6623,6625,6627,6629],{"class":30,"line":128},[28,6614,5852],{"class":42},[28,6616,5855],{"class":2453},[28,6618,367],{"class":34},[28,6620,640],{"class":42},[28,6622,1889],{"class":5704},[28,6624,90],{"class":34},[28,6626,640],{"class":42},[28,6628,3323],{"class":5704},[28,6630,3209],{"class":34},[14,6632,6633],{},"源文件：swap.cpp",[18,6635,6637],{"className":626,"code":6636,"language":628,"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,6638,6639,6646,6651,6671,6675,6686,6695,6704,6721,6738],{"__ignoreMap":23},[28,6640,6641,6643],{"class":30,"line":31},[28,6642,2439],{"class":42},[28,6644,6645],{"class":735}," \"swap.h\"\n",[28,6647,6648],{"class":30,"line":77},[28,6649,6650],{"class":73},"\u002F\u002F函数的定义\n",[28,6652,6653,6655,6657,6659,6661,6663,6665,6667,6669],{"class":30,"line":114},[28,6654,5852],{"class":42},[28,6656,5855],{"class":2453},[28,6658,367],{"class":34},[28,6660,640],{"class":42},[28,6662,1889],{"class":5704},[28,6664,90],{"class":34},[28,6666,640],{"class":42},[28,6668,3323],{"class":5704},[28,6670,228],{"class":34},[28,6672,6673],{"class":30,"line":128},[28,6674,2036],{"class":34},[28,6676,6677,6679,6681,6683],{"class":30,"line":393},[28,6678,2475],{"class":42},[28,6680,4743],{"class":34},[28,6682,83],{"class":42},[28,6684,6685],{"class":34},"a;\n",[28,6687,6688,6691,6693],{"class":30,"line":409},[28,6689,6690],{"class":34},"    a",[28,6692,83],{"class":42},[28,6694,6557],{"class":34},[28,6696,6697,6700,6702],{"class":30,"line":1711},[28,6698,6699],{"class":34},"    b",[28,6701,83],{"class":42},[28,6703,4768],{"class":34},[28,6705,6706,6708,6710,6713,6715,6717,6719],{"class":30,"line":1802},[28,6707,2041],{"class":34},[28,6709,1663],{"class":42},[28,6711,6712],{"class":735},"\"a=\"",[28,6714,1663],{"class":42},[28,6716,80],{"class":34},[28,6718,1663],{"class":42},[28,6720,1685],{"class":34},[28,6722,6723,6725,6727,6730,6732,6734,6736],{"class":30,"line":1808},[28,6724,2041],{"class":34},[28,6726,1663],{"class":42},[28,6728,6729],{"class":735},"\"b=\"",[28,6731,1663],{"class":42},[28,6733,117],{"class":34},[28,6735,1663],{"class":42},[28,6737,1685],{"class":34},[28,6739,6740],{"class":30,"line":1820},[28,6741,2055],{"class":34},[547,6743,6744],{},"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":77,"depth":77,"links":6746},[6747,6748,6749,6750,6751,6752],{"id":5660,"depth":77,"text":5661},{"id":5749,"depth":77,"text":5750},{"id":5832,"depth":77,"text":5833},{"id":6058,"depth":77,"text":6059},{"id":6407,"depth":77,"text":6408},{"id":6564,"depth":77,"text":6565},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5652,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6759,"title":6760,"body":6761,"description":6768,"extension":560,"meta":8173,"navigation":562,"path":8174,"seo":8175,"stem":8176,"__hash__":8177},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6762,"toc":8163},[6763,6766,6769,6773,6935,6939,6942,6945,6948,6951,7091,7095,7098,7101,7104,7169,7173,7178,7245,7248,7252,7255,7266,7271,7291,7294,7299,7318,7321,7325,7344,7347,7351,7586,7590,7593,7596,7599,7761,7764,7768,7771,7777,8160],[10,6764,6760],{"id":6765},"_3指针",[14,6767,6768],{},"通过指针保存一个地址，指针就是个地址",[60,6770,6772],{"id":6771},"_31定义指针","3.1定义指针",[18,6774,6776],{"className":626,"code":6775,"language":628,"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,6777,6778,6786,6790,6795,6807,6812,6820,6830,6848,6868,6872,6877,6882,6887,6901,6917,6931],{"__ignoreMap":23},[28,6779,6780,6782,6784],{"class":30,"line":31},[28,6781,640],{"class":42},[28,6783,2463],{"class":2453},[28,6785,2466],{"class":34},[28,6787,6788],{"class":30,"line":77},[28,6789,2036],{"class":34},[28,6791,6792],{"class":30,"line":114},[28,6793,6794],{"class":73},"    \u002F\u002F1.定义指针\n",[28,6796,6797,6799,6801,6803,6805],{"class":30,"line":128},[28,6798,2475],{"class":42},[28,6800,1889],{"class":34},[28,6802,83],{"class":42},[28,6804,225],{"class":38},[28,6806,1781],{"class":34},[28,6808,6809],{"class":30,"line":393},[28,6810,6811],{"class":73},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[28,6813,6814,6817],{"class":30,"line":409},[28,6815,6816],{"class":42},"    int*",[28,6818,6819],{"class":34},"p;\n",[28,6821,6822,6825,6828],{"class":30,"line":1711},[28,6823,6824],{"class":34},"    p",[28,6826,6827],{"class":42},"=&",[28,6829,6685],{"class":34},[28,6831,6832,6834,6836,6839,6842,6844,6846],{"class":30,"line":1802},[28,6833,2041],{"class":34},[28,6835,1663],{"class":42},[28,6837,6838],{"class":735},"\"a的地址为：\"",[28,6840,6841],{"class":42},"\u003C\u003C&",[28,6843,80],{"class":34},[28,6845,1663],{"class":42},[28,6847,1685],{"class":34},[28,6849,6850,6852,6854,6857,6859,6861,6863,6865],{"class":30,"line":1808},[28,6851,2041],{"class":34},[28,6853,1663],{"class":42},[28,6855,6856],{"class":735},"\"指针p为：\"",[28,6858,1663],{"class":42},[28,6860,14],{"class":34},[28,6862,1663],{"class":42},[28,6864,1729],{"class":34},[28,6866,6867],{"class":73},"\u002F\u002F指针p表示的就是a的地址\n",[28,6869,6870],{"class":30,"line":1820},[28,6871,2890],{"emptyLinePlaceholder":562},[28,6873,6874],{"class":30,"line":2102},[28,6875,6876],{"class":73},"    \u002F\u002F2.使用指针\n",[28,6878,6879],{"class":30,"line":2107},[28,6880,6881],{"class":73},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[28,6883,6884],{"class":30,"line":2113},[28,6885,6886],{"class":73},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[28,6888,6889,6892,6894,6896,6899],{"class":30,"line":2118},[28,6890,6891],{"class":42},"    *",[28,6893,14],{"class":34},[28,6895,83],{"class":42},[28,6897,6898],{"class":38},"1000",[28,6900,1781],{"class":34},[28,6902,6903,6905,6908,6910,6912,6914],{"class":30,"line":2132},[28,6904,2041],{"class":34},[28,6906,6907],{"class":42},"\u003C\u003C*",[28,6909,14],{"class":34},[28,6911,1663],{"class":42},[28,6913,1729],{"class":34},[28,6915,6916],{"class":73},"\u002F\u002F1000\n",[28,6918,6919,6921,6923,6925,6927,6929],{"class":30,"line":2137},[28,6920,2041],{"class":34},[28,6922,1663],{"class":42},[28,6924,80],{"class":34},[28,6926,1663],{"class":42},[28,6928,1729],{"class":34},[28,6930,6916],{"class":73},[28,6932,6933],{"class":30,"line":2143},[28,6934,2055],{"class":34},[60,6936,6938],{"id":6937},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6940,6941],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6943,6944],{},"在32位操作系统下：占用4个字节空间",[14,6946,6947],{},"在64位操作系统下：占用8个字节空间",[14,6949,6950],{},"上方是不管啥数据类型的",[18,6952,6954],{"className":626,"code":6953,"language":628,"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,6955,6956,6964,6968,6973,6985,6990,6995,7000,7013,7035,7061,7087],{"__ignoreMap":23},[28,6957,6958,6960,6962],{"class":30,"line":31},[28,6959,640],{"class":42},[28,6961,2463],{"class":2453},[28,6963,2466],{"class":34},[28,6965,6966],{"class":30,"line":77},[28,6967,2036],{"class":34},[28,6969,6970],{"class":30,"line":114},[28,6971,6972],{"class":73},"    \u002F\u002F指针所占内存空间\n",[28,6974,6975,6977,6979,6981,6983],{"class":30,"line":128},[28,6976,2475],{"class":42},[28,6978,1889],{"class":34},[28,6980,83],{"class":42},[28,6982,225],{"class":38},[28,6984,1781],{"class":34},[28,6986,6987],{"class":30,"line":393},[28,6988,6989],{"class":73},"    \u002F\u002Fint *p;\n",[28,6991,6992],{"class":30,"line":409},[28,6993,6994],{"class":73},"    \u002F\u002Fp=&a;\n",[28,6996,6997],{"class":30,"line":1711},[28,6998,6999],{"class":73},"    \u002F\u002F上述可以写为以下：\n",[28,7001,7002,7004,7007,7009,7011],{"class":30,"line":1802},[28,7003,2475],{"class":42},[28,7005,7006],{"class":42}," *",[28,7008,14],{"class":34},[28,7010,6827],{"class":42},[28,7012,6685],{"class":34},[28,7014,7015,7018,7020,7023,7025,7028,7030,7032],{"class":30,"line":1808},[28,7016,7017],{"class":34},"    cout ",[28,7019,1663],{"class":42},[28,7021,7022],{"class":735},"\"sizeof(int *)\"",[28,7024,1863],{"class":42},[28,7026,7027],{"class":34},"(p)",[28,7029,1663],{"class":42},[28,7031,1729],{"class":34},[28,7033,7034],{"class":73},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[28,7036,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055,7058],{"class":30,"line":1820},[28,7038,7017],{"class":34},[28,7040,1663],{"class":42},[28,7042,7022],{"class":735},[28,7044,1863],{"class":42},[28,7046,367],{"class":34},[28,7048,640],{"class":42},[28,7050,7006],{"class":42},[28,7052,1054],{"class":34},[28,7054,1663],{"class":42},[28,7056,7057],{"class":34},"endl",[28,7059,7060],{"class":73},"  \u002F\u002F4字节(32位的话)\n",[28,7062,7063,7065,7067,7070,7072,7074,7076,7078,7080,7082,7084],{"class":30,"line":2102},[28,7064,7017],{"class":34},[28,7066,1663],{"class":42},[28,7068,7069],{"class":735},"\"sizeof(char *)\"",[28,7071,1863],{"class":42},[28,7073,367],{"class":34},[28,7075,727],{"class":42},[28,7077,7006],{"class":42},[28,7079,1054],{"class":34},[28,7081,1663],{"class":42},[28,7083,1729],{"class":34},[28,7085,7086],{"class":73}," \u002F\u002F4字节(32位的话)\n",[28,7088,7089],{"class":30,"line":2107},[28,7090,2055],{"class":34},[60,7092,7094],{"id":7093},"_33空指针","3.3空指针",[14,7096,7097],{},"空指针：指针变量指向内存中编号为0的空间",[14,7099,7100],{},"用途：初始化指针变量",[14,7102,7103],{},"注意：空指针指向的内存是不可以访问的",[18,7105,7107],{"className":626,"code":7106,"language":628,"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,7108,7109,7117,7121,7126,7140,7145,7160,7165],{"__ignoreMap":23},[28,7110,7111,7113,7115],{"class":30,"line":31},[28,7112,640],{"class":42},[28,7114,2463],{"class":2453},[28,7116,2466],{"class":34},[28,7118,7119],{"class":30,"line":77},[28,7120,2036],{"class":34},[28,7122,7123],{"class":30,"line":114},[28,7124,7125],{"class":73},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[28,7127,7128,7130,7132,7134,7136,7138],{"class":30,"line":128},[28,7129,2475],{"class":42},[28,7131,7006],{"class":42},[28,7133,14],{"class":34},[28,7135,83],{"class":42},[28,7137,2882],{"class":38},[28,7139,1781],{"class":34},[28,7141,7142],{"class":30,"line":393},[28,7143,7144],{"class":73},"    \u002F\u002F2.空指针不能进行访问\n",[28,7146,7147,7149,7151,7153,7155,7157],{"class":30,"line":409},[28,7148,6891],{"class":42},[28,7150,14],{"class":34},[28,7152,83],{"class":42},[28,7154,938],{"class":38},[28,7156,689],{"class":34},[28,7158,7159],{"class":73},"\u002F\u002F直接报错，压根不能访问\n",[28,7161,7162],{"class":30,"line":1711},[28,7163,7164],{"class":73},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[28,7166,7167],{"class":30,"line":1802},[28,7168,2055],{"class":34},[60,7170,7172],{"id":7171},"_34野指针","3.4野指针",[14,7174,7175],{},[780,7176,7177],{},"指针变量指向非法的内存空间",[18,7179,7181],{"className":626,"code":7180,"language":628,"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,7182,7183,7191,7195,7224,7229,7241],{"__ignoreMap":23},[28,7184,7185,7187,7189],{"class":30,"line":31},[28,7186,640],{"class":42},[28,7188,2463],{"class":2453},[28,7190,2466],{"class":34},[28,7192,7193],{"class":30,"line":77},[28,7194,2036],{"class":34},[28,7196,7197,7199,7201,7203,7205,7207,7209,7211,7213,7216,7219,7221],{"class":30,"line":114},[28,7198,2475],{"class":42},[28,7200,7006],{"class":42},[28,7202,14],{"class":34},[28,7204,83],{"class":42},[28,7206,367],{"class":34},[28,7208,640],{"class":42},[28,7210,7006],{"class":42},[28,7212,1054],{"class":34},[28,7214,7215],{"class":42},"0x",[28,7217,7218],{"class":38},"1100",[28,7220,689],{"class":34},[28,7222,7223],{"class":73}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[28,7225,7226],{"class":30,"line":128},[28,7227,7228],{"class":73},"    \u002F\u002F访问野指针报错\n",[28,7230,7231,7233,7235,7237,7239],{"class":30,"line":393},[28,7232,2041],{"class":34},[28,7234,6907],{"class":42},[28,7236,14],{"class":34},[28,7238,1663],{"class":42},[28,7240,1685],{"class":34},[28,7242,7243],{"class":30,"line":409},[28,7244,2055],{"class":34},[14,7246,7247],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[60,7249,7251],{"id":7250},"_35const修饰指针","3.5const修饰指针",[14,7253,7254],{},"三种情况：",[1626,7256,7257,7260,7263],{},[591,7258,7259],{},"const修饰指针 常量指针",[591,7261,7262],{},"const修饰常量 指针常量",[591,7264,7265],{},"const即修饰指针，又修饰常量",[588,7267,7268],{},[591,7269,7270],{},"常量指针",[18,7272,7274],{"className":626,"code":7273,"language":628,"meta":23,"style":23},"const int *p=&a;\n",[25,7275,7276],{"__ignoreMap":23},[28,7277,7278,7281,7283,7285,7287,7289],{"class":30,"line":31},[28,7279,7280],{"class":42},"const",[28,7282,2872],{"class":42},[28,7284,7006],{"class":42},[28,7286,14],{"class":34},[28,7288,6827],{"class":42},[28,7290,6685],{"class":34},[14,7292,7293],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[588,7295,7296],{"start":77},[591,7297,7298],{},"指针常量",[18,7300,7302],{"className":626,"code":7301,"language":628,"meta":23,"style":23},"int *const p=&a;\n",[25,7303,7304],{"__ignoreMap":23},[28,7305,7306,7308,7311,7314,7316],{"class":30,"line":31},[28,7307,640],{"class":42},[28,7309,7310],{"class":42}," *const",[28,7312,7313],{"class":34}," p",[28,7315,6827],{"class":42},[28,7317,6685],{"class":34},[14,7319,7320],{},"指针的指向不可以改，指针指向的值可以改",[588,7322,7323],{"start":114},[591,7324,7265],{},[18,7326,7328],{"className":626,"code":7327,"language":628,"meta":23,"style":23},"const int *const p=&a;\n",[25,7329,7330],{"__ignoreMap":23},[28,7331,7332,7334,7336,7338,7340,7342],{"class":30,"line":31},[28,7333,7280],{"class":42},[28,7335,2872],{"class":42},[28,7337,7310],{"class":42},[28,7339,7313],{"class":34},[28,7341,6827],{"class":42},[28,7343,6685],{"class":34},[14,7345,7346],{},"指针的指向和指针指向的值都不可以改变",[60,7348,7350],{"id":7349},"_36指针和数组","3.6指针和数组",[18,7352,7354],{"className":626,"code":7353,"language":628,"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,7355,7356,7364,7368,7373,7427,7448,7464,7480,7491,7508,7513,7527,7553,7557,7569,7578,7582],{"__ignoreMap":23},[28,7357,7358,7360,7362],{"class":30,"line":31},[28,7359,640],{"class":42},[28,7361,2463],{"class":2453},[28,7363,2466],{"class":34},[28,7365,7366],{"class":30,"line":77},[28,7367,2036],{"class":34},[28,7369,7370],{"class":30,"line":114},[28,7371,7372],{"class":73},"    \u002F\u002F利用指针访问数组中的元素\n",[28,7374,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7411,7413,7415,7417,7419,7421,7423,7425],{"class":30,"line":128},[28,7376,2475],{"class":42},[28,7378,4450],{"class":34},[28,7380,225],{"class":38},[28,7382,1559],{"class":34},[28,7384,83],{"class":42},[28,7386,1515],{"class":34},[28,7388,39],{"class":38},[28,7390,90],{"class":34},[28,7392,93],{"class":38},[28,7394,90],{"class":34},[28,7396,98],{"class":38},[28,7398,90],{"class":34},[28,7400,103],{"class":38},[28,7402,90],{"class":34},[28,7404,108],{"class":38},[28,7406,90],{"class":34},[28,7408,970],{"class":38},[28,7410,90],{"class":34},[28,7412,995],{"class":38},[28,7414,90],{"class":34},[28,7416,1020],{"class":38},[28,7418,90],{"class":34},[28,7420,1045],{"class":38},[28,7422,90],{"class":34},[28,7424,225],{"class":38},[28,7426,4483],{"class":34},[28,7428,7429,7431,7433,7436,7438,7440,7442,7444,7446],{"class":30,"line":393},[28,7430,2041],{"class":34},[28,7432,1663],{"class":42},[28,7434,7435],{"class":735},"\"数组的第一个元素为：\"",[28,7437,1663],{"class":42},[28,7439,4394],{"class":34},[28,7441,822],{"class":38},[28,7443,1559],{"class":34},[28,7445,1663],{"class":42},[28,7447,1685],{"class":34},[28,7449,7450,7452,7454,7456,7458,7461],{"class":30,"line":409},[28,7451,2475],{"class":42},[28,7453,7006],{"class":42},[28,7455,14],{"class":34},[28,7457,83],{"class":42},[28,7459,7460],{"class":34},"arr;",[28,7462,7463],{"class":73},"\u002F\u002F注意数才要加取地址符号&\n",[28,7465,7466,7468,7470,7472,7474,7476,7478],{"class":30,"line":1711},[28,7467,2041],{"class":34},[28,7469,1663],{"class":42},[28,7471,7435],{"class":735},[28,7473,6907],{"class":42},[28,7475,14],{"class":34},[28,7477,1663],{"class":42},[28,7479,1685],{"class":34},[28,7481,7482,7484,7486,7488],{"class":30,"line":1802},[28,7483,6824],{"class":34},[28,7485,2782],{"class":42},[28,7487,689],{"class":34},[28,7489,7490],{"class":73}," \u002F\u002F让指针向后偏移4个字节\n",[28,7492,7493,7495,7497,7500,7502,7504,7506],{"class":30,"line":1808},[28,7494,2041],{"class":34},[28,7496,1663],{"class":42},[28,7498,7499],{"class":735},"\"数组的第二个元素为：\"",[28,7501,6907],{"class":42},[28,7503,14],{"class":34},[28,7505,1663],{"class":42},[28,7507,1685],{"class":34},[28,7509,7510],{"class":30,"line":1820},[28,7511,7512],{"class":73},"    \u002F\u002F利用指针遍历数组\n",[28,7514,7515,7517,7519,7522,7524],{"class":30,"line":2102},[28,7516,2475],{"class":42},[28,7518,7006],{"class":42},[28,7520,7521],{"class":34},"p2",[28,7523,83],{"class":42},[28,7525,7526],{"class":34},"arr;\n",[28,7528,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551],{"class":30,"line":2107},[28,7530,377],{"class":42},[28,7532,2148],{"class":34},[28,7534,640],{"class":42},[28,7536,3521],{"class":34},[28,7538,83],{"class":42},[28,7540,822],{"class":38},[28,7542,3528],{"class":34},[28,7544,1529],{"class":42},[28,7546,225],{"class":38},[28,7548,3528],{"class":34},[28,7550,2782],{"class":42},[28,7552,228],{"class":34},[28,7554,7555],{"class":30,"line":2113},[28,7556,2520],{"class":34},[28,7558,7559,7561,7563,7565,7567],{"class":30,"line":2118},[28,7560,3939],{"class":34},[28,7562,6907],{"class":42},[28,7564,7521],{"class":34},[28,7566,1663],{"class":42},[28,7568,1685],{"class":34},[28,7570,7571,7574,7576],{"class":30,"line":2132},[28,7572,7573],{"class":34},"        p2",[28,7575,2782],{"class":42},[28,7577,1781],{"class":34},[28,7579,7580],{"class":30,"line":2137},[28,7581,2677],{"class":34},[28,7583,7584],{"class":30,"line":2143},[28,7585,2055],{"class":34},[60,7587,7589],{"id":7588},"_37指针和函数","3.7指针和函数",[14,7591,7592],{},"利用指针做函数参数，可以修改实参的值",[14,7594,7595],{},"值传递：只改变形参，不改变实参",[14,7597,7598],{},"地址传递：",[18,7600,7602],{"className":626,"code":7601,"language":628,"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,7603,7604,7629,7633,7645,7656,7666,7670,7678,7682,7694,7706,7711,7727,7742,7757],{"__ignoreMap":23},[28,7605,7606,7608,7610,7612,7614,7616,7619,7621,7623,7625,7627],{"class":30,"line":31},[28,7607,5852],{"class":42},[28,7609,5855],{"class":2453},[28,7611,367],{"class":34},[28,7613,640],{"class":42},[28,7615,7006],{"class":42},[28,7617,7618],{"class":5704},"p1",[28,7620,90],{"class":34},[28,7622,640],{"class":42},[28,7624,7006],{"class":42},[28,7626,7521],{"class":5704},[28,7628,228],{"class":34},[28,7630,7631],{"class":30,"line":77},[28,7632,2036],{"class":34},[28,7634,7635,7637,7639,7642],{"class":30,"line":114},[28,7636,2475],{"class":42},[28,7638,4743],{"class":34},[28,7640,7641],{"class":42},"=*",[28,7643,7644],{"class":34},"p1;\n",[28,7646,7647,7649,7651,7653],{"class":30,"line":128},[28,7648,6891],{"class":42},[28,7650,7618],{"class":34},[28,7652,7641],{"class":42},[28,7654,7655],{"class":34},"p2;\n",[28,7657,7658,7660,7662,7664],{"class":30,"line":393},[28,7659,6891],{"class":42},[28,7661,7521],{"class":34},[28,7663,83],{"class":42},[28,7665,4768],{"class":34},[28,7667,7668],{"class":30,"line":409},[28,7669,2055],{"class":34},[28,7671,7672,7674,7676],{"class":30,"line":1711},[28,7673,640],{"class":42},[28,7675,2463],{"class":2453},[28,7677,2466],{"class":34},[28,7679,7680],{"class":30,"line":1802},[28,7681,2036],{"class":34},[28,7683,7684,7686,7688,7690,7692],{"class":30,"line":1808},[28,7685,2475],{"class":42},[28,7687,1889],{"class":34},[28,7689,83],{"class":42},[28,7691,225],{"class":38},[28,7693,1781],{"class":34},[28,7695,7696,7698,7700,7702,7704],{"class":30,"line":1820},[28,7697,2475],{"class":42},[28,7699,3323],{"class":34},[28,7701,83],{"class":42},[28,7703,1320],{"class":38},[28,7705,1781],{"class":34},[28,7707,7708],{"class":30,"line":2102},[28,7709,7710],{"class":73},"    \u002F\u002F地址传递\n",[28,7712,7713,7715,7717,7719,7722,7724],{"class":30,"line":2107},[28,7714,6049],{"class":2453},[28,7716,367],{"class":34},[28,7718,979],{"class":42},[28,7720,7721],{"class":34},"a,",[28,7723,979],{"class":42},[28,7725,7726],{"class":34},"b);\n",[28,7728,7729,7731,7733,7735,7737,7739],{"class":30,"line":2113},[28,7730,2041],{"class":34},[28,7732,1663],{"class":42},[28,7734,80],{"class":34},[28,7736,1663],{"class":42},[28,7738,1729],{"class":34},[28,7740,7741],{"class":73},"\u002F\u002F20\n",[28,7743,7744,7746,7748,7750,7752,7754],{"class":30,"line":2118},[28,7745,2041],{"class":34},[28,7747,1663],{"class":42},[28,7749,117],{"class":34},[28,7751,1663],{"class":42},[28,7753,1729],{"class":34},[28,7755,7756],{"class":73},"\u002F\u002F10\n",[28,7758,7759],{"class":30,"line":2132},[28,7760,2055],{"class":34},[14,7762,7763],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[60,7765,7767],{"id":7766},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7769,7770],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7772,7773,7774,7776],{},"例如数组：int arr",[28,7775,225],{},"={4,3,6,9,1,2,10,8,7,5}",[18,7778,7780],{"className":626,"code":7779,"language":628,"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,7781,7782,7788,7798,7822,7826,7857,7861,7895,7899,7917,7921,7932,7947,7962,7966,7970,7974,7978,7982,7990,7994,7999,8053,8065,8077,8082,8090,8094,8099,8124,8128,8143,8152,8156],{"__ignoreMap":23},[28,7783,7784,7786],{"class":30,"line":31},[28,7785,2439],{"class":42},[28,7787,2442],{"class":735},[28,7789,7790,7792,7794,7796],{"class":30,"line":77},[28,7791,2447],{"class":42},[28,7793,2450],{"class":42},[28,7795,2454],{"class":2453},[28,7797,1781],{"class":34},[28,7799,7800,7802,7805,7807,7809,7811,7813,7815,7817,7820],{"class":30,"line":114},[28,7801,5852],{"class":42},[28,7803,7804],{"class":2453}," bubbleSort",[28,7806,367],{"class":34},[28,7808,640],{"class":42},[28,7810,7006],{"class":42},[28,7812,14],{"class":5704},[28,7814,90],{"class":34},[28,7816,640],{"class":42},[28,7818,7819],{"class":5704}," len",[28,7821,228],{"class":34},[28,7823,7824],{"class":30,"line":128},[28,7825,2036],{"class":34},[28,7827,7828,7830,7832,7834,7836,7838,7840,7842,7844,7847,7849,7851,7853,7855],{"class":30,"line":393},[28,7829,377],{"class":42},[28,7831,367],{"class":34},[28,7833,640],{"class":42},[28,7835,3521],{"class":34},[28,7837,83],{"class":42},[28,7839,822],{"class":38},[28,7841,3528],{"class":34},[28,7843,1529],{"class":42},[28,7845,7846],{"class":34},"len",[28,7848,445],{"class":42},[28,7850,39],{"class":38},[28,7852,3528],{"class":34},[28,7854,2782],{"class":42},[28,7856,228],{"class":34},[28,7858,7859],{"class":30,"line":409},[28,7860,2520],{"class":34},[28,7862,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893],{"class":30,"line":1711},[28,7864,3891],{"class":42},[28,7866,367],{"class":34},[28,7868,640],{"class":42},[28,7870,3898],{"class":34},[28,7872,83],{"class":42},[28,7874,822],{"class":38},[28,7876,3905],{"class":34},[28,7878,1529],{"class":42},[28,7880,7846],{"class":34},[28,7882,445],{"class":42},[28,7884,1066],{"class":34},[28,7886,445],{"class":42},[28,7888,39],{"class":38},[28,7890,3905],{"class":34},[28,7892,2782],{"class":42},[28,7894,228],{"class":34},[28,7896,7897],{"class":30,"line":1802},[28,7898,3000],{"class":34},[28,7900,7901,7903,7906,7908,7911,7913,7915],{"class":30,"line":1808},[28,7902,5130],{"class":42},[28,7904,7905],{"class":34},"(p[j]",[28,7907,1579],{"class":42},[28,7909,7910],{"class":34},"p[j",[28,7912,1104],{"class":42},[28,7914,39],{"class":38},[28,7916,5145],{"class":34},[28,7918,7919],{"class":30,"line":1820},[28,7920,5150],{"class":34},[28,7922,7923,7925,7927,7929],{"class":30,"line":2102},[28,7924,5155],{"class":42},[28,7926,4743],{"class":34},[28,7928,83],{"class":42},[28,7930,7931],{"class":34},"p[j];\n",[28,7933,7934,7937,7939,7941,7943,7945],{"class":30,"line":2107},[28,7935,7936],{"class":34},"                p[j]",[28,7938,83],{"class":42},[28,7940,7910],{"class":34},[28,7942,1104],{"class":42},[28,7944,39],{"class":38},[28,7946,5178],{"class":34},[28,7948,7949,7952,7954,7956,7958,7960],{"class":30,"line":2113},[28,7950,7951],{"class":34},"                p[j",[28,7953,1104],{"class":42},[28,7955,39],{"class":38},[28,7957,1559],{"class":34},[28,7959,83],{"class":42},[28,7961,4768],{"class":34},[28,7963,7964],{"class":30,"line":2118},[28,7965,5198],{"class":34},[28,7967,7968],{"class":30,"line":2132},[28,7969,3019],{"class":34},[28,7971,7972],{"class":30,"line":2137},[28,7973,2677],{"class":34},[28,7975,7976],{"class":30,"line":2143},[28,7977,2055],{"class":34},[28,7979,7980],{"class":30,"line":2164},[28,7981,2890],{"emptyLinePlaceholder":562},[28,7983,7984,7986,7988],{"class":30,"line":2169},[28,7985,640],{"class":42},[28,7987,2463],{"class":2453},[28,7989,2466],{"class":34},[28,7991,7992],{"class":30,"line":2183},[28,7993,2036],{"class":34},[28,7995,7996],{"class":30,"line":2188},[28,7997,7998],{"class":73},"    \u002F\u002F 1.创建数组\n",[28,8000,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051],{"class":30,"line":2217},[28,8002,2475],{"class":42},[28,8004,4450],{"class":34},[28,8006,225],{"class":38},[28,8008,1559],{"class":34},[28,8010,83],{"class":42},[28,8012,1515],{"class":34},[28,8014,103],{"class":38},[28,8016,90],{"class":34},[28,8018,98],{"class":38},[28,8020,90],{"class":34},[28,8022,970],{"class":38},[28,8024,90],{"class":34},[28,8026,1045],{"class":38},[28,8028,90],{"class":34},[28,8030,39],{"class":38},[28,8032,90],{"class":34},[28,8034,93],{"class":38},[28,8036,90],{"class":34},[28,8038,225],{"class":38},[28,8040,90],{"class":34},[28,8042,1020],{"class":38},[28,8044,90],{"class":34},[28,8046,995],{"class":38},[28,8048,90],{"class":34},[28,8050,108],{"class":38},[28,8052,4483],{"class":34},[28,8054,8055,8057,8059,8061,8063],{"class":30,"line":2222},[28,8056,2475],{"class":42},[28,8058,7819],{"class":34},[28,8060,83],{"class":42},[28,8062,225],{"class":38},[28,8064,1781],{"class":34},[28,8066,8067,8069,8071,8073,8075],{"class":30,"line":2239},[28,8068,2475],{"class":42},[28,8070,7006],{"class":42},[28,8072,14],{"class":34},[28,8074,83],{"class":42},[28,8076,7526],{"class":34},[28,8078,8079],{"class":30,"line":2244},[28,8080,8081],{"class":73},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[28,8083,8084,8087],{"class":30,"line":2249},[28,8085,8086],{"class":2453},"    bubbleSort",[28,8088,8089],{"class":34},"(p,len);\n",[28,8091,8092],{"class":30,"line":2254},[28,8093,2890],{"emptyLinePlaceholder":562},[28,8095,8096],{"class":30,"line":2268},[28,8097,8098],{"class":73},"    \u002F\u002F 3.打印排序后的数组\n",[28,8100,8101,8103,8105,8107,8109,8111,8113,8115,8117,8120,8122],{"class":30,"line":2273},[28,8102,377],{"class":42},[28,8104,2148],{"class":34},[28,8106,640],{"class":42},[28,8108,3521],{"class":34},[28,8110,83],{"class":42},[28,8112,822],{"class":38},[28,8114,3702],{"class":34},[28,8116,1529],{"class":42},[28,8118,8119],{"class":34},"len; i",[28,8121,2782],{"class":42},[28,8123,228],{"class":34},[28,8125,8126],{"class":30,"line":3067},[28,8127,2520],{"class":34},[28,8129,8130,8132,8134,8136,8138,8141],{"class":30,"line":3081},[28,8131,3939],{"class":34},[28,8133,6907],{"class":42},[28,8135,14],{"class":34},[28,8137,1663],{"class":42},[28,8139,8140],{"class":735},"\"\"",[28,8142,1781],{"class":34},[28,8144,8145,8148,8150],{"class":30,"line":3089},[28,8146,8147],{"class":34},"        p",[28,8149,2782],{"class":42},[28,8151,1781],{"class":34},[28,8153,8154],{"class":30,"line":3094},[28,8155,2677],{"class":34},[28,8157,8158],{"class":30,"line":3100},[28,8159,2055],{"class":34},[547,8161,8162],{},"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":77,"depth":77,"links":8164},[8165,8166,8167,8168,8169,8170,8171,8172],{"id":6771,"depth":77,"text":6772},{"id":6937,"depth":77,"text":6938},{"id":7093,"depth":77,"text":7094},{"id":7171,"depth":77,"text":7172},{"id":7250,"depth":77,"text":7251},{"id":7349,"depth":77,"text":7350},{"id":7588,"depth":77,"text":7589},{"id":7766,"depth":77,"text":7767},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6760,"description":6768},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8179,"title":8180,"body":8181,"description":8188,"extension":560,"meta":11160,"navigation":562,"path":11161,"seo":11162,"stem":11163,"__hash__":11164},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8182,"toc":11151},[8183,8186,8189,8193,8196,8199,8210,8548,8551,8555,8558,8565,8820,8824,8827,8830,8985,8989,8992,8995,9201,9205,9208,9511,9514,9522,9526,9529,9680,9682,9693,9750,9754,9759,10414,10422,10425,10519,10522,11142,11148],[10,8184,8180],{"id":8185},"_4结构体",[14,8187,8188],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[60,8190,8192],{"id":8191},"_41结构体定义与使用","4.1结构体定义与使用",[14,8194,8195],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8197,8198],{},"通过结构体创建变量的方式：",[1626,8200,8201,8204,8207],{},[591,8202,8203],{},"struct 结构体名 变量名",[591,8205,8206],{},"struct 结构体名 变量名={成员1值，成员2值...}",[591,8208,8209],{},"定义结构体时顺便创建变量",[18,8211,8213],{"className":626,"code":8212,"language":628,"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,8214,8215,8221,8231,8238,8243,8251,8255,8260,8264,8269,8274,8279,8286,8291,8298,8302,8309,8313,8317,8321,8325,8329,8333,8339,8343,8349,8357,8365,8369,8374,8379,8390,8395,8407,8418,8429,8434,8458,8463,8469,8496,8501,8507,8519,8531,8543],{"__ignoreMap":23},[28,8216,8217,8219],{"class":30,"line":31},[28,8218,2439],{"class":42},[28,8220,2442],{"class":735},[28,8222,8223,8225,8227,8229],{"class":30,"line":77},[28,8224,2447],{"class":42},[28,8226,2450],{"class":42},[28,8228,2454],{"class":2453},[28,8230,1781],{"class":34},[28,8232,8233,8235],{"class":30,"line":114},[28,8234,2439],{"class":42},[28,8236,8237],{"class":735},"\u003Cstring>\n",[28,8239,8240],{"class":30,"line":128},[28,8241,8242],{"class":73},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[28,8244,8245,8248],{"class":30,"line":393},[28,8246,8247],{"class":42},"struct",[28,8249,8250],{"class":2453}," Student\n",[28,8252,8253],{"class":30,"line":409},[28,8254,2036],{"class":34},[28,8256,8257],{"class":30,"line":1711},[28,8258,8259],{"class":73},"    \u002F\u002F成员列表\n",[28,8261,8262],{"class":30,"line":1802},[28,8263,2890],{"emptyLinePlaceholder":562},[28,8265,8266],{"class":30,"line":1808},[28,8267,8268],{"class":73},"    \u002F\u002F姓名\n",[28,8270,8271],{"class":30,"line":1820},[28,8272,8273],{"class":34},"    string name;\n",[28,8275,8276],{"class":30,"line":2102},[28,8277,8278],{"class":73},"    \u002F\u002F年龄\n",[28,8280,8281,8283],{"class":30,"line":2107},[28,8282,2475],{"class":42},[28,8284,8285],{"class":34}," age;\n",[28,8287,8288],{"class":30,"line":2113},[28,8289,8290],{"class":73},"    \u002F\u002F分数\n",[28,8292,8293,8295],{"class":30,"line":2118},[28,8294,2475],{"class":42},[28,8296,8297],{"class":34}," score;\n",[28,8299,8300],{"class":30,"line":2132},[28,8301,4483],{"class":34},[28,8303,8304,8306],{"class":30,"line":2137},[28,8305,8247],{"class":42},[28,8307,8308],{"class":2453}," School\n",[28,8310,8311],{"class":30,"line":2143},[28,8312,2036],{"class":34},[28,8314,8315],{"class":30,"line":2164},[28,8316,8259],{"class":73},[28,8318,8319],{"class":30,"line":2169},[28,8320,2890],{"emptyLinePlaceholder":562},[28,8322,8323],{"class":30,"line":2183},[28,8324,8268],{"class":73},[28,8326,8327],{"class":30,"line":2188},[28,8328,8273],{"class":34},[28,8330,8331],{"class":30,"line":2217},[28,8332,8278],{"class":73},[28,8334,8335,8337],{"class":30,"line":2222},[28,8336,2475],{"class":42},[28,8338,8285],{"class":34},[28,8340,8341],{"class":30,"line":2239},[28,8342,8290],{"class":73},[28,8344,8345,8347],{"class":30,"line":2244},[28,8346,2475],{"class":42},[28,8348,8297],{"class":34},[28,8350,8351,8354],{"class":30,"line":2249},[28,8352,8353],{"class":34},"} s3;",[28,8355,8356],{"class":73}," \u002F\u002F创建结构体时就创建了变量\n",[28,8358,8359,8361,8363],{"class":30,"line":2254},[28,8360,640],{"class":42},[28,8362,2463],{"class":2453},[28,8364,2466],{"class":34},[28,8366,8367],{"class":30,"line":2268},[28,8368,2036],{"class":34},[28,8370,8371],{"class":30,"line":2273},[28,8372,8373],{"class":73},"    \u002F\u002F2.通过学生类型创建具体学生\n",[28,8375,8376],{"class":30,"line":3067},[28,8377,8378],{"class":73},"    \u002F\u002F2.1 struct Student s1;\n",[28,8380,8381,8384,8387],{"class":30,"line":3081},[28,8382,8383],{"class":42},"    struct",[28,8385,8386],{"class":2453}," Student",[28,8388,8389],{"class":34}," s1;\n",[28,8391,8392],{"class":30,"line":3089},[28,8393,8394],{"class":73},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[28,8396,8397,8400,8402,8405],{"class":30,"line":3094},[28,8398,8399],{"class":34},"    s1.name",[28,8401,83],{"class":42},[28,8403,8404],{"class":735},"\"张三\"",[28,8406,1781],{"class":34},[28,8408,8409,8412,8414,8416],{"class":30,"line":3100},[28,8410,8411],{"class":34},"    s1.age",[28,8413,83],{"class":42},[28,8415,1270],{"class":38},[28,8417,1781],{"class":34},[28,8419,8420,8423,8425,8427],{"class":30,"line":3106},[28,8421,8422],{"class":34},"    s1.score",[28,8424,83],{"class":42},[28,8426,883],{"class":38},[28,8428,1781],{"class":34},[28,8430,8431],{"class":30,"line":3111},[28,8432,8433],{"class":73},"    \u002F\u002F输出结果\n",[28,8435,8437,8439,8441,8444,8446,8449,8451,8454,8456],{"class":30,"line":8436},37,[28,8438,2041],{"class":34},[28,8440,1663],{"class":42},[28,8442,8443],{"class":34},"s1.name",[28,8445,1663],{"class":42},[28,8447,8448],{"class":34},"s1.age",[28,8450,1663],{"class":42},[28,8452,8453],{"class":34},"s1.score",[28,8455,1663],{"class":42},[28,8457,1685],{"class":34},[28,8459,8461],{"class":30,"line":8460},38,[28,8462,2890],{"emptyLinePlaceholder":562},[28,8464,8466],{"class":30,"line":8465},39,[28,8467,8468],{"class":73},"    \u002F\u002F2.2 struct Student s2={...}\n",[28,8470,8472,8474,8476,8479,8481,8483,8486,8488,8490,8492,8494],{"class":30,"line":8471},40,[28,8473,8383],{"class":42},[28,8475,8386],{"class":2453},[28,8477,8478],{"class":34}," s2",[28,8480,83],{"class":42},[28,8482,1515],{"class":34},[28,8484,8485],{"class":735},"\"王五\"",[28,8487,90],{"class":34},[28,8489,1270],{"class":38},[28,8491,90],{"class":34},[28,8493,883],{"class":38},[28,8495,4483],{"class":34},[28,8497,8499],{"class":30,"line":8498},41,[28,8500,2890],{"emptyLinePlaceholder":562},[28,8502,8504],{"class":30,"line":8503},42,[28,8505,8506],{"class":73},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[28,8508,8510,8513,8515,8517],{"class":30,"line":8509},43,[28,8511,8512],{"class":34},"    s3.name",[28,8514,83],{"class":42},[28,8516,4166],{"class":735},[28,8518,1781],{"class":34},[28,8520,8522,8525,8527,8529],{"class":30,"line":8521},44,[28,8523,8524],{"class":34},"    s3.age",[28,8526,83],{"class":42},[28,8528,1270],{"class":38},[28,8530,1781],{"class":34},[28,8532,8534,8537,8539,8541],{"class":30,"line":8533},45,[28,8535,8536],{"class":34},"    s3.score",[28,8538,83],{"class":42},[28,8540,1320],{"class":38},[28,8542,1781],{"class":34},[28,8544,8546],{"class":30,"line":8545},46,[28,8547,2055],{"class":34},[14,8549,8550],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[60,8552,8554],{"id":8553},"_42结构体数组","4.2结构体数组",[14,8556,8557],{},"将自定义的结构体放入到数组中方便维护",[14,8559,8560,8561,8564],{},"语法：struct 结构体名 数组名",[28,8562,8563],{},"元素个数","={ {}，{},...{} };",[18,8566,8568],{"className":626,"code":8567,"language":628,"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,8569,8570,8576,8586,8592,8597,8603,8607,8611,8617,8623,8627,8631,8639,8643,8648,8663,8667,8683,8699,8703,8708,8724,8739,8754,8759,8785,8789,8812,8816],{"__ignoreMap":23},[28,8571,8572,8574],{"class":30,"line":31},[28,8573,2439],{"class":42},[28,8575,2442],{"class":735},[28,8577,8578,8580,8582,8584],{"class":30,"line":77},[28,8579,2447],{"class":42},[28,8581,2450],{"class":42},[28,8583,2454],{"class":2453},[28,8585,1781],{"class":34},[28,8587,8588,8590],{"class":30,"line":114},[28,8589,2439],{"class":42},[28,8591,8237],{"class":735},[28,8593,8594],{"class":30,"line":128},[28,8595,8596],{"class":73},"\u002F\u002F1.定义结构体\n",[28,8598,8599,8601],{"class":30,"line":393},[28,8600,8247],{"class":42},[28,8602,8250],{"class":2453},[28,8604,8605],{"class":30,"line":409},[28,8606,2036],{"class":34},[28,8608,8609],{"class":30,"line":1711},[28,8610,8273],{"class":34},[28,8612,8613,8615],{"class":30,"line":1802},[28,8614,2475],{"class":42},[28,8616,8285],{"class":34},[28,8618,8619,8621],{"class":30,"line":1808},[28,8620,2475],{"class":42},[28,8622,8297],{"class":34},[28,8624,8625],{"class":30,"line":1820},[28,8626,2890],{"emptyLinePlaceholder":562},[28,8628,8629],{"class":30,"line":2102},[28,8630,4483],{"class":34},[28,8632,8633,8635,8637],{"class":30,"line":2107},[28,8634,640],{"class":42},[28,8636,2463],{"class":2453},[28,8638,2466],{"class":34},[28,8640,8641],{"class":30,"line":2113},[28,8642,2036],{"class":34},[28,8644,8645],{"class":30,"line":2118},[28,8646,8647],{"class":73},"    \u002F\u002F2.创建结构体数组\n",[28,8649,8650,8652,8654,8657,8659,8661],{"class":30,"line":2132},[28,8651,8383],{"class":42},[28,8653,8386],{"class":2453},[28,8655,8656],{"class":34}," stuArray[",[28,8658,93],{"class":38},[28,8660,1559],{"class":34},[28,8662,5396],{"class":42},[28,8664,8665],{"class":30,"line":2137},[28,8666,2520],{"class":34},[28,8668,8669,8671,8673,8675,8677,8679,8681],{"class":30,"line":2143},[28,8670,5405],{"class":34},[28,8672,8404],{"class":735},[28,8674,90],{"class":34},[28,8676,1270],{"class":38},[28,8678,90],{"class":34},[28,8680,938],{"class":38},[28,8682,5418],{"class":34},[28,8684,8685,8687,8689,8691,8693,8695,8697],{"class":30,"line":2164},[28,8686,5405],{"class":34},[28,8688,4166],{"class":735},[28,8690,90],{"class":34},[28,8692,1196],{"class":38},[28,8694,90],{"class":34},[28,8696,1196],{"class":38},[28,8698,2055],{"class":34},[28,8700,8701],{"class":30,"line":2169},[28,8702,2677],{"class":34},[28,8704,8705],{"class":30,"line":2183},[28,8706,8707],{"class":73},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[28,8709,8710,8713,8715,8718,8720,8722],{"class":30,"line":2188},[28,8711,8712],{"class":34},"    stuArray[",[28,8714,39],{"class":38},[28,8716,8717],{"class":34},"].name",[28,8719,83],{"class":42},[28,8721,4189],{"class":735},[28,8723,1781],{"class":34},[28,8725,8726,8728,8730,8733,8735,8737],{"class":30,"line":2217},[28,8727,8712],{"class":34},[28,8729,39],{"class":38},[28,8731,8732],{"class":34},"].age",[28,8734,83],{"class":42},[28,8736,93],{"class":38},[28,8738,1781],{"class":34},[28,8740,8741,8743,8745,8748,8750,8752],{"class":30,"line":2222},[28,8742,8712],{"class":34},[28,8744,39],{"class":38},[28,8746,8747],{"class":34},"].score",[28,8749,83],{"class":42},[28,8751,93],{"class":38},[28,8753,1781],{"class":34},[28,8755,8756],{"class":30,"line":2239},[28,8757,8758],{"class":73},"    \u002F\u002F4.遍历结构体数组\n",[28,8760,8761,8763,8765,8767,8769,8771,8773,8775,8777,8779,8781,8783],{"class":30,"line":2244},[28,8762,377],{"class":42},[28,8764,2148],{"class":34},[28,8766,640],{"class":42},[28,8768,3521],{"class":34},[28,8770,83],{"class":42},[28,8772,822],{"class":38},[28,8774,3528],{"class":34},[28,8776,1529],{"class":42},[28,8778,93],{"class":38},[28,8780,3528],{"class":34},[28,8782,2782],{"class":42},[28,8784,228],{"class":34},[28,8786,8787],{"class":30,"line":2249},[28,8788,2520],{"class":34},[28,8790,8791,8793,8795,8798,8800,8803,8805,8808,8810],{"class":30,"line":2254},[28,8792,3939],{"class":34},[28,8794,1663],{"class":42},[28,8796,8797],{"class":34},"stuArray[i].name",[28,8799,1663],{"class":42},[28,8801,8802],{"class":34},"stuArray[i].age",[28,8804,1663],{"class":42},[28,8806,8807],{"class":34},"stuArray[i].score",[28,8809,1663],{"class":42},[28,8811,1685],{"class":34},[28,8813,8814],{"class":30,"line":2268},[28,8815,2677],{"class":34},[28,8817,8818],{"class":30,"line":2273},[28,8819,2055],{"class":34},[60,8821,8823],{"id":8822},"_43结构体指针","4.3结构体指针",[14,8825,8826],{},"作用：通过指针访问结构体中的成员",[14,8828,8829],{},"利用操作符->可以通过结构体指针访问结构体属性",[18,8831,8833],{"className":626,"code":8832,"language":628,"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,8834,8835,8841,8851,8857,8861,8867,8871,8875,8881,8887,8891,8899,8903,8908,8933,8938,8953,8958,8981],{"__ignoreMap":23},[28,8836,8837,8839],{"class":30,"line":31},[28,8838,2439],{"class":42},[28,8840,2442],{"class":735},[28,8842,8843,8845,8847,8849],{"class":30,"line":77},[28,8844,2447],{"class":42},[28,8846,2450],{"class":42},[28,8848,2454],{"class":2453},[28,8850,1781],{"class":34},[28,8852,8853,8855],{"class":30,"line":114},[28,8854,2439],{"class":42},[28,8856,8237],{"class":735},[28,8858,8859],{"class":30,"line":128},[28,8860,8596],{"class":73},[28,8862,8863,8865],{"class":30,"line":393},[28,8864,8247],{"class":42},[28,8866,8250],{"class":2453},[28,8868,8869],{"class":30,"line":409},[28,8870,2036],{"class":34},[28,8872,8873],{"class":30,"line":1711},[28,8874,8273],{"class":34},[28,8876,8877,8879],{"class":30,"line":1802},[28,8878,2475],{"class":42},[28,8880,8285],{"class":34},[28,8882,8883,8885],{"class":30,"line":1808},[28,8884,2475],{"class":42},[28,8886,8297],{"class":34},[28,8888,8889],{"class":30,"line":1820},[28,8890,4483],{"class":34},[28,8892,8893,8895,8897],{"class":30,"line":2102},[28,8894,640],{"class":42},[28,8896,2463],{"class":2453},[28,8898,2466],{"class":34},[28,8900,8901],{"class":30,"line":2107},[28,8902,2036],{"class":34},[28,8904,8905],{"class":30,"line":2113},[28,8906,8907],{"class":73},"    \u002F\u002F创建学生结构体变量\n",[28,8909,8910,8912,8914,8917,8919,8921,8923,8925,8927,8929,8931],{"class":30,"line":2118},[28,8911,8383],{"class":42},[28,8913,8386],{"class":2453},[28,8915,8916],{"class":34}," s",[28,8918,83],{"class":42},[28,8920,1515],{"class":34},[28,8922,8404],{"class":735},[28,8924,90],{"class":34},[28,8926,1270],{"class":38},[28,8928,90],{"class":34},[28,8930,2212],{"class":38},[28,8932,4483],{"class":34},[28,8934,8935],{"class":30,"line":2132},[28,8936,8937],{"class":73},"    \u002F\u002F通过指针指向结构体变量\n",[28,8939,8940,8942,8944,8946,8948,8950],{"class":30,"line":2137},[28,8941,8383],{"class":42},[28,8943,8386],{"class":2453},[28,8945,7006],{"class":42},[28,8947,14],{"class":34},[28,8949,6827],{"class":42},[28,8951,8952],{"class":34},"s\n",[28,8954,8955],{"class":30,"line":2143},[28,8956,8957],{"class":73},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[28,8959,8960,8962,8964,8967,8969,8972,8974,8977,8979],{"class":30,"line":2164},[28,8961,2041],{"class":34},[28,8963,1663],{"class":42},[28,8965,8966],{"class":34},"p->name",[28,8968,1663],{"class":42},[28,8970,8971],{"class":34},"p->age",[28,8973,1663],{"class":42},[28,8975,8976],{"class":34},"p->score",[28,8978,1663],{"class":42},[28,8980,1685],{"class":34},[28,8982,8983],{"class":30,"line":2169},[28,8984,2055],{"class":34},[60,8986,8988],{"id":8987},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8990,8991],{},"作用：结构体中的成员可以是另一个结构体",[14,8993,8994],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[18,8996,8998],{"className":626,"code":8997,"language":628,"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,8999,9000,9006,9016,9022,9027,9035,9039,9043,9049,9055,9059,9064,9071,9075,9082,9086,9092,9097,9101,9109,9113,9118,9123,9128,9139,9151,9162,9175,9186,9197],{"__ignoreMap":23},[28,9001,9002,9004],{"class":30,"line":31},[28,9003,2439],{"class":42},[28,9005,2442],{"class":735},[28,9007,9008,9010,9012,9014],{"class":30,"line":77},[28,9009,2447],{"class":42},[28,9011,2450],{"class":42},[28,9013,2454],{"class":2453},[28,9015,1781],{"class":34},[28,9017,9018,9020],{"class":30,"line":114},[28,9019,2439],{"class":42},[28,9021,8237],{"class":735},[28,9023,9024],{"class":30,"line":128},[28,9025,9026],{"class":73},"\u002F\u002F定义学生结构体\n",[28,9028,9029,9031,9033],{"class":30,"line":393},[28,9030,8247],{"class":42},[28,9032,8386],{"class":2453},[28,9034,3164],{"class":34},[28,9036,9037],{"class":30,"line":409},[28,9038,2036],{"class":34},[28,9040,9041],{"class":30,"line":1711},[28,9042,8273],{"class":34},[28,9044,9045,9047],{"class":30,"line":1802},[28,9046,2475],{"class":42},[28,9048,8285],{"class":34},[28,9050,9051,9053],{"class":30,"line":1808},[28,9052,2475],{"class":42},[28,9054,8297],{"class":34},[28,9056,9057],{"class":30,"line":1820},[28,9058,2055],{"class":34},[28,9060,9061],{"class":30,"line":2102},[28,9062,9063],{"class":73},"\u002F\u002F定义老师结构体\n",[28,9065,9066,9068],{"class":30,"line":2107},[28,9067,8247],{"class":42},[28,9069,9070],{"class":2453}," Teacher\n",[28,9072,9073],{"class":30,"line":2113},[28,9074,2036],{"class":34},[28,9076,9077,9079],{"class":30,"line":2118},[28,9078,2475],{"class":42},[28,9080,9081],{"class":34}," id;\n",[28,9083,9084],{"class":30,"line":2132},[28,9085,8273],{"class":34},[28,9087,9088,9090],{"class":30,"line":2137},[28,9089,2475],{"class":42},[28,9091,8285],{"class":34},[28,9093,9094],{"class":30,"line":2143},[28,9095,9096],{"class":34},"    Student stu;\n",[28,9098,9099],{"class":30,"line":2164},[28,9100,2055],{"class":34},[28,9102,9103,9105,9107],{"class":30,"line":2169},[28,9104,640],{"class":42},[28,9106,2463],{"class":2453},[28,9108,6466],{"class":34},[28,9110,9111],{"class":30,"line":2183},[28,9112,2036],{"class":34},[28,9114,9115],{"class":30,"line":2188},[28,9116,9117],{"class":73},"    \u002F\u002F结构体嵌套结构体\n",[28,9119,9120],{"class":30,"line":2217},[28,9121,9122],{"class":73},"    \u002F\u002F创建老师\n",[28,9124,9125],{"class":30,"line":2222},[28,9126,9127],{"class":34},"    Teacher t;\n",[28,9129,9130,9133,9135,9137],{"class":30,"line":2239},[28,9131,9132],{"class":34},"    t.id",[28,9134,83],{"class":42},[28,9136,938],{"class":38},[28,9138,1781],{"class":34},[28,9140,9141,9144,9146,9149],{"class":30,"line":2244},[28,9142,9143],{"class":34},"    t.name",[28,9145,83],{"class":42},[28,9147,9148],{"class":735},"\"老王\"",[28,9150,1781],{"class":34},[28,9152,9153,9156,9158,9160],{"class":30,"line":2249},[28,9154,9155],{"class":34},"    t.age",[28,9157,83],{"class":42},[28,9159,1270],{"class":38},[28,9161,1781],{"class":34},[28,9163,9164,9167,9169,9172],{"class":30,"line":2254},[28,9165,9166],{"class":34},"    t.stu.name",[28,9168,83],{"class":42},[28,9170,9171],{"class":735},"\"小王\"",[28,9173,9174],{"class":34},"；\n",[28,9176,9177,9180,9182,9184],{"class":30,"line":2268},[28,9178,9179],{"class":34},"    t.stu.age",[28,9181,83],{"class":42},[28,9183,1320],{"class":38},[28,9185,1781],{"class":34},[28,9187,9188,9191,9193,9195],{"class":30,"line":2273},[28,9189,9190],{"class":34},"    t.stu.score",[28,9192,83],{"class":42},[28,9194,970],{"class":38},[28,9196,1781],{"class":34},[28,9198,9199],{"class":30,"line":3067},[28,9200,2055],{"class":34},[60,9202,9204],{"id":9203},"_45结构体做函数参数","4.5结构体做函数参数",[14,9206,9207],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[18,9209,9211],{"className":626,"code":9210,"language":628,"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,9212,9213,9219,9229,9235,9241,9245,9249,9255,9261,9265,9270,9275,9292,9296,9329,9333,9338,9357,9361,9392,9396,9404,9408,9417,9429,9441,9453,9466,9474,9487,9499,9507],{"__ignoreMap":23},[28,9214,9215,9217],{"class":30,"line":31},[28,9216,2439],{"class":42},[28,9218,2442],{"class":735},[28,9220,9221,9223,9225,9227],{"class":30,"line":77},[28,9222,2447],{"class":42},[28,9224,2450],{"class":42},[28,9226,2454],{"class":2453},[28,9228,1781],{"class":34},[28,9230,9231,9233],{"class":30,"line":114},[28,9232,2439],{"class":42},[28,9234,8237],{"class":735},[28,9236,9237,9239],{"class":30,"line":128},[28,9238,8247],{"class":42},[28,9240,8250],{"class":2453},[28,9242,9243],{"class":30,"line":393},[28,9244,2036],{"class":34},[28,9246,9247],{"class":30,"line":409},[28,9248,8273],{"class":34},[28,9250,9251,9253],{"class":30,"line":1711},[28,9252,2475],{"class":42},[28,9254,8285],{"class":34},[28,9256,9257,9259],{"class":30,"line":1802},[28,9258,2475],{"class":42},[28,9260,8297],{"class":34},[28,9262,9263],{"class":30,"line":1808},[28,9264,4483],{"class":34},[28,9266,9267],{"class":30,"line":1820},[28,9268,9269],{"class":73},"\u002F\u002F打印学生信息的函数\n",[28,9271,9272],{"class":30,"line":2102},[28,9273,9274],{"class":73},"\u002F\u002F值传递\n",[28,9276,9277,9279,9282,9284,9286,9288,9290],{"class":30,"line":2107},[28,9278,5852],{"class":42},[28,9280,9281],{"class":2453}," printStudent1",[28,9283,367],{"class":34},[28,9285,8247],{"class":42},[28,9287,8386],{"class":2453},[28,9289,8916],{"class":5704},[28,9291,228],{"class":34},[28,9293,9294],{"class":30,"line":2113},[28,9295,2036],{"class":34},[28,9297,9298,9300,9302,9305,9307,9310,9312,9315,9317,9319,9321,9324,9326],{"class":30,"line":2118},[28,9299,7017],{"class":34},[28,9301,1663],{"class":42},[28,9303,9304],{"class":34}," s.name ",[28,9306,1663],{"class":42},[28,9308,9309],{"class":735}," \" \"",[28,9311,1935],{"class":42},[28,9313,9314],{"class":34}," s.age ",[28,9316,1663],{"class":42},[28,9318,9309],{"class":735},[28,9320,1935],{"class":42},[28,9322,9323],{"class":34}," s.score ",[28,9325,1663],{"class":42},[28,9327,9328],{"class":34}," endl;\n",[28,9330,9331],{"class":30,"line":2132},[28,9332,2055],{"class":34},[28,9334,9335],{"class":30,"line":2137},[28,9336,9337],{"class":73},"\u002F\u002F地址传递\n",[28,9339,9340,9342,9345,9347,9349,9351,9353,9355],{"class":30,"line":2143},[28,9341,5852],{"class":42},[28,9343,9344],{"class":2453}," printStudent2",[28,9346,367],{"class":34},[28,9348,8247],{"class":42},[28,9350,8386],{"class":2453},[28,9352,7006],{"class":42},[28,9354,1315],{"class":5704},[28,9356,228],{"class":34},[28,9358,9359],{"class":30,"line":2164},[28,9360,2036],{"class":34},[28,9362,9363,9365,9367,9370,9372,9374,9376,9379,9381,9383,9385,9388,9390],{"class":30,"line":2169},[28,9364,7017],{"class":34},[28,9366,1663],{"class":42},[28,9368,9369],{"class":34}," s->name ",[28,9371,1663],{"class":42},[28,9373,9309],{"class":735},[28,9375,1935],{"class":42},[28,9377,9378],{"class":34}," s->age ",[28,9380,1663],{"class":42},[28,9382,9309],{"class":735},[28,9384,1935],{"class":42},[28,9386,9387],{"class":34}," s->score ",[28,9389,1663],{"class":42},[28,9391,9328],{"class":34},[28,9393,9394],{"class":30,"line":2183},[28,9395,2055],{"class":34},[28,9397,9398,9400,9402],{"class":30,"line":2188},[28,9399,640],{"class":42},[28,9401,2463],{"class":2453},[28,9403,2466],{"class":34},[28,9405,9406],{"class":30,"line":2217},[28,9407,2036],{"class":34},[28,9409,9410,9412,9414],{"class":30,"line":2222},[28,9411,8383],{"class":42},[28,9413,8386],{"class":2453},[28,9415,9416],{"class":34}," s;\n",[28,9418,9419,9422,9424,9427],{"class":30,"line":2239},[28,9420,9421],{"class":34},"    s.name ",[28,9423,83],{"class":42},[28,9425,9426],{"class":735}," \"张三\"",[28,9428,1781],{"class":34},[28,9430,9431,9434,9436,9439],{"class":30,"line":2244},[28,9432,9433],{"class":34},"    s.age ",[28,9435,83],{"class":42},[28,9437,9438],{"class":38}," 20",[28,9440,1781],{"class":34},[28,9442,9443,9446,9448,9451],{"class":30,"line":2249},[28,9444,9445],{"class":34},"    s.score ",[28,9447,83],{"class":42},[28,9449,9450],{"class":38}," 85",[28,9452,1781],{"class":34},[28,9454,9455,9457,9459,9462,9464],{"class":30,"line":2254},[28,9456,2041],{"class":34},[28,9458,1663],{"class":42},[28,9460,9461],{"class":735},"\"值传递:\"",[28,9463,1663],{"class":42},[28,9465,1685],{"class":34},[28,9467,9468,9471],{"class":30,"line":2268},[28,9469,9470],{"class":2453},"    printStudent1",[28,9472,9473],{"class":34},"(s);\n",[28,9475,9476,9478,9480,9483,9485],{"class":30,"line":2273},[28,9477,2041],{"class":34},[28,9479,1663],{"class":42},[28,9481,9482],{"class":735},"\"地址传递:\"",[28,9484,1663],{"class":42},[28,9486,1685],{"class":34},[28,9488,9489,9492,9494,9496],{"class":30,"line":3067},[28,9490,9491],{"class":2453},"    printStudent2",[28,9493,367],{"class":34},[28,9495,979],{"class":42},[28,9497,9498],{"class":34},"s); \n",[28,9500,9501,9503,9505],{"class":30,"line":3081},[28,9502,4578],{"class":42},[28,9504,4581],{"class":38},[28,9506,1781],{"class":34},[28,9508,9509],{"class":30,"line":3089},[28,9510,2055],{"class":34},[14,9512,9513],{},"注意：",[1626,9515,9516,9519],{},[591,9517,9518],{},"1.先定义结构体，不要在函数中写结构体的定义",[591,9520,9521],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[60,9523,9525],{"id":9524},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9527,9528],{},"用const防止误操作",[18,9530,9532],{"className":626,"code":9531,"language":628,"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,9533,9534,9540,9550,9556,9561,9565,9569,9575,9581,9585,9601,9605,9628,9632,9640,9644,9665,9672,9676],{"__ignoreMap":23},[28,9535,9536,9538],{"class":30,"line":31},[28,9537,2439],{"class":42},[28,9539,2442],{"class":735},[28,9541,9542,9544,9546,9548],{"class":30,"line":77},[28,9543,2447],{"class":42},[28,9545,2450],{"class":42},[28,9547,2454],{"class":2453},[28,9549,1781],{"class":34},[28,9551,9552,9554],{"class":30,"line":114},[28,9553,2439],{"class":42},[28,9555,8237],{"class":735},[28,9557,9558],{"class":30,"line":128},[28,9559,9560],{"class":34},"sctuct Student\n",[28,9562,9563],{"class":30,"line":393},[28,9564,2036],{"class":34},[28,9566,9567],{"class":30,"line":409},[28,9568,8273],{"class":34},[28,9570,9571,9573],{"class":30,"line":1711},[28,9572,2475],{"class":42},[28,9574,8285],{"class":34},[28,9576,9577,9579],{"class":30,"line":1802},[28,9578,2475],{"class":42},[28,9580,8297],{"class":34},[28,9582,9583],{"class":30,"line":1808},[28,9584,4483],{"class":34},[28,9586,9587,9589,9592,9594,9597,9599],{"class":30,"line":1820},[28,9588,5852],{"class":42},[28,9590,9591],{"class":2453}," printStudents",[28,9593,367],{"class":34},[28,9595,9596],{"class":2453},"student",[28,9598,8916],{"class":5704},[28,9600,228],{"class":34},[28,9602,9603],{"class":30,"line":2102},[28,9604,2036],{"class":34},[28,9606,9607,9609,9611,9614,9616,9619,9621,9624,9626],{"class":30,"line":2107},[28,9608,2041],{"class":34},[28,9610,1663],{"class":42},[28,9612,9613],{"class":34},"s.name",[28,9615,1663],{"class":42},[28,9617,9618],{"class":34},"s.age",[28,9620,1663],{"class":42},[28,9622,9623],{"class":34},"s.score",[28,9625,1663],{"class":42},[28,9627,1685],{"class":34},[28,9629,9630],{"class":30,"line":2113},[28,9631,2055],{"class":34},[28,9633,9634,9636,9638],{"class":30,"line":2118},[28,9635,640],{"class":42},[28,9637,2463],{"class":2453},[28,9639,6466],{"class":34},[28,9641,9642],{"class":30,"line":2132},[28,9643,2036],{"class":34},[28,9645,9646,9649,9651,9653,9655,9657,9659,9661,9663],{"class":30,"line":2137},[28,9647,9648],{"class":34},"    Student s",[28,9650,83],{"class":42},[28,9652,1515],{"class":34},[28,9654,8404],{"class":735},[28,9656,90],{"class":34},[28,9658,1270],{"class":38},[28,9660,90],{"class":34},[28,9662,1270],{"class":38},[28,9664,4483],{"class":34},[28,9666,9667,9670],{"class":30,"line":2143},[28,9668,9669],{"class":2453},"    printStudent",[28,9671,9473],{"class":34},[28,9673,9674],{"class":30,"line":2164},[28,9675,2890],{"emptyLinePlaceholder":562},[28,9677,9678],{"class":30,"line":2169},[28,9679,2055],{"class":34},[14,9681,9513],{},[1626,9683,9684,9687,9690],{},[591,9685,9686],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[591,9688,9689],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[591,9691,9692],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[18,9694,9696],{"className":626,"code":9695,"language":628,"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,9697,9698,9717,9721,9726,9746],{"__ignoreMap":23},[28,9699,9700,9702,9704,9706,9708,9711,9713,9715],{"class":30,"line":31},[28,9701,5852],{"class":42},[28,9703,9591],{"class":2453},[28,9705,367],{"class":34},[28,9707,7280],{"class":42},[28,9709,9710],{"class":2453}," student",[28,9712,7006],{"class":42},[28,9714,1315],{"class":5704},[28,9716,228],{"class":34},[28,9718,9719],{"class":30,"line":77},[28,9720,2036],{"class":34},[28,9722,9723],{"class":30,"line":114},[28,9724,9725],{"class":73},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[28,9727,9728,9730,9732,9734,9736,9738,9740,9742,9744],{"class":30,"line":128},[28,9729,2041],{"class":34},[28,9731,1663],{"class":42},[28,9733,9613],{"class":34},[28,9735,1663],{"class":42},[28,9737,9618],{"class":34},[28,9739,1663],{"class":42},[28,9741,9623],{"class":34},[28,9743,1663],{"class":42},[28,9745,1685],{"class":34},[28,9747,9748],{"class":30,"line":393},[28,9749,2055],{"class":34},[60,9751,9753],{"id":9752},"_47案例","4.7案例",[588,9755,9756],{},[591,9757,9758],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[18,9760,9762],{"className":626,"code":9761,"language":628,"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,9763,9764,9770,9780,9786,9793,9797,9803,9807,9812,9818,9824,9828,9832,9838,9842,9847,9852,9865,9869,9874,9900,9904,9916,9942,9946,9958,9968,9972,9977,10005,10009,10021,10030,10057,10068,10078,10082,10086,10090,10095,10119,10123,10147,10151,10170,10196,10200,10225,10248,10272,10277,10282,10287,10296,10301,10307,10328,10334,10348,10354,10381,10390,10396,10404,10409],{"__ignoreMap":23},[28,9765,9766,9768],{"class":30,"line":31},[28,9767,2439],{"class":42},[28,9769,2442],{"class":735},[28,9771,9772,9774,9776,9778],{"class":30,"line":77},[28,9773,2447],{"class":42},[28,9775,2450],{"class":42},[28,9777,2454],{"class":2453},[28,9779,1781],{"class":34},[28,9781,9782,9784],{"class":30,"line":114},[28,9783,2439],{"class":42},[28,9785,8237],{"class":735},[28,9787,9788,9790],{"class":30,"line":128},[28,9789,2439],{"class":42},[28,9791,9792],{"class":735},"\u003Cctime>\n",[28,9794,9795],{"class":30,"line":393},[28,9796,9026],{"class":73},[28,9798,9799,9801],{"class":30,"line":409},[28,9800,8247],{"class":42},[28,9802,8250],{"class":2453},[28,9804,9805],{"class":30,"line":1711},[28,9806,2036],{"class":34},[28,9808,9809],{"class":30,"line":1802},[28,9810,9811],{"class":34},"    string sName;\n",[28,9813,9814,9816],{"class":30,"line":1808},[28,9815,2475],{"class":42},[28,9817,8285],{"class":34},[28,9819,9820,9822],{"class":30,"line":1820},[28,9821,2475],{"class":42},[28,9823,8297],{"class":34},[28,9825,9826],{"class":30,"line":2102},[28,9827,4483],{"class":34},[28,9829,9830],{"class":30,"line":2107},[28,9831,9063],{"class":73},[28,9833,9834,9836],{"class":30,"line":2113},[28,9835,8247],{"class":42},[28,9837,9070],{"class":2453},[28,9839,9840],{"class":30,"line":2118},[28,9841,2036],{"class":34},[28,9843,9844],{"class":30,"line":2132},[28,9845,9846],{"class":34},"    string tName;\n",[28,9848,9849],{"class":30,"line":2137},[28,9850,9851],{"class":73},"    \u002F\u002F学生数组\n",[28,9853,9854,9856,9858,9861,9863],{"class":30,"line":2143},[28,9855,8383],{"class":42},[28,9857,8386],{"class":2453},[28,9859,9860],{"class":34}," sArray[",[28,9862,108],{"class":38},[28,9864,5178],{"class":34},[28,9866,9867],{"class":30,"line":2164},[28,9868,4483],{"class":34},[28,9870,9871],{"class":30,"line":2169},[28,9872,9873],{"class":73},"\u002F\u002F给老师和学生赋值的函数\n",[28,9875,9876,9878,9881,9883,9885,9888,9891,9894,9896,9898],{"class":30,"line":2183},[28,9877,5852],{"class":42},[28,9879,9880],{"class":2453}," allocateSpace",[28,9882,367],{"class":34},[28,9884,8247],{"class":42},[28,9886,9887],{"class":2453}," Teacher",[28,9889,9890],{"class":5704}," tArray",[28,9892,9893],{"class":34},"[],",[28,9895,640],{"class":42},[28,9897,7819],{"class":5704},[28,9899,228],{"class":34},[28,9901,9902],{"class":30,"line":2188},[28,9903,2036],{"class":34},[28,9905,9906,9909,9911,9914],{"class":30,"line":2217},[28,9907,9908],{"class":34},"    string nameSeed",[28,9910,83],{"class":42},[28,9912,9913],{"class":735},"\"ABCDE\"",[28,9915,1781],{"class":34},[28,9917,9918,9920,9922,9924,9926,9928,9930,9933,9935,9938,9940],{"class":30,"line":2222},[28,9919,377],{"class":42},[28,9921,2148],{"class":34},[28,9923,640],{"class":42},[28,9925,52],{"class":34},[28,9927,83],{"class":42},[28,9929,4581],{"class":38},[28,9931,9932],{"class":34},"; i ",[28,9934,1529],{"class":42},[28,9936,9937],{"class":34}," len; i",[28,9939,2782],{"class":42},[28,9941,228],{"class":34},[28,9943,9944],{"class":30,"line":2239},[28,9945,2520],{"class":34},[28,9947,9948,9951,9953,9956],{"class":30,"line":2244},[28,9949,9950],{"class":34},"        tArray[i].tName ",[28,9952,83],{"class":42},[28,9954,9955],{"class":735}," \"Teacher_\"",[28,9957,1781],{"class":34},[28,9959,9960,9962,9965],{"class":30,"line":2249},[28,9961,9950],{"class":34},[28,9963,9964],{"class":42},"+=",[28,9966,9967],{"class":34},"nameSeed[i];\n",[28,9969,9970],{"class":30,"line":2254},[28,9971,2890],{"emptyLinePlaceholder":562},[28,9973,9974],{"class":30,"line":2268},[28,9975,9976],{"class":73},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[28,9978,9979,9981,9983,9985,9987,9989,9991,9994,9996,9998,10001,10003],{"class":30,"line":2273},[28,9980,3891],{"class":42},[28,9982,2148],{"class":34},[28,9984,640],{"class":42},[28,9986,380],{"class":34},[28,9988,83],{"class":42},[28,9990,4581],{"class":38},[28,9992,9993],{"class":34},"; j ",[28,9995,1529],{"class":42},[28,9997,2638],{"class":38},[28,9999,10000],{"class":34},"; j",[28,10002,2782],{"class":42},[28,10004,228],{"class":34},[28,10006,10007],{"class":30,"line":3067},[28,10008,3000],{"class":34},[28,10010,10011,10014,10016,10019],{"class":30,"line":3081},[28,10012,10013],{"class":34},"            tArray[i].sArray[j].sName ",[28,10015,83],{"class":42},[28,10017,10018],{"class":735}," \"Student_\"",[28,10020,1781],{"class":34},[28,10022,10023,10025,10027],{"class":30,"line":3089},[28,10024,10013],{"class":34},[28,10026,9964],{"class":42},[28,10028,10029],{"class":34}," nameSeed[j];\n",[28,10031,10032,10035,10038,10040,10042,10044,10046,10048,10050,10052,10054],{"class":30,"line":3094},[28,10033,10034],{"class":42},"            int",[28,10036,10037],{"class":34}," random",[28,10039,83],{"class":42},[28,10041,2914],{"class":2453},[28,10043,2917],{"class":34},[28,10045,954],{"class":42},[28,10047,1526],{"class":38},[28,10049,1104],{"class":42},[28,10051,1026],{"class":38},[28,10053,689],{"class":34},[28,10055,10056],{"class":73},"\u002F\u002F40~99\n",[28,10058,10059,10062,10064,10066],{"class":30,"line":3100},[28,10060,10061],{"class":34},"            tArray[i].sArray[j].age ",[28,10063,83],{"class":42},[28,10065,9438],{"class":38},[28,10067,1781],{"class":34},[28,10069,10070,10073,10075],{"class":30,"line":3106},[28,10071,10072],{"class":34},"            tArray[i].sArray[j].score ",[28,10074,83],{"class":42},[28,10076,10077],{"class":34}," random;\n",[28,10079,10080],{"class":30,"line":3111},[28,10081,3019],{"class":34},[28,10083,10084],{"class":30,"line":8436},[28,10085,2677],{"class":34},[28,10087,10088],{"class":30,"line":8460},[28,10089,2055],{"class":34},[28,10091,10092],{"class":30,"line":8465},[28,10093,10094],{"class":73},"\u002F\u002F打印所有信息的函数\n",[28,10096,10097,10099,10102,10104,10106,10108,10110,10113,10115,10117],{"class":30,"line":8471},[28,10098,5852],{"class":42},[28,10100,10101],{"class":2453}," printInfo",[28,10103,367],{"class":34},[28,10105,8247],{"class":42},[28,10107,9887],{"class":2453},[28,10109,9890],{"class":5704},[28,10111,10112],{"class":34},"[], ",[28,10114,640],{"class":42},[28,10116,7819],{"class":5704},[28,10118,228],{"class":34},[28,10120,10121],{"class":30,"line":8498},[28,10122,2036],{"class":34},[28,10124,10125,10127,10129,10131,10133,10135,10137,10139,10141,10143,10145],{"class":30,"line":8503},[28,10126,377],{"class":42},[28,10128,2148],{"class":34},[28,10130,640],{"class":42},[28,10132,52],{"class":34},[28,10134,83],{"class":42},[28,10136,4581],{"class":38},[28,10138,9932],{"class":34},[28,10140,1529],{"class":42},[28,10142,9937],{"class":34},[28,10144,2782],{"class":42},[28,10146,228],{"class":34},[28,10148,10149],{"class":30,"line":8509},[28,10150,2520],{"class":34},[28,10152,10153,10156,10158,10161,10163,10166,10168],{"class":30,"line":8521},[28,10154,10155],{"class":34},"        cout ",[28,10157,1663],{"class":42},[28,10159,10160],{"class":735}," \"Teacher: \"",[28,10162,1935],{"class":42},[28,10164,10165],{"class":34}," tArray[i].tName ",[28,10167,1663],{"class":42},[28,10169,9328],{"class":34},[28,10171,10172,10174,10176,10178,10180,10182,10184,10186,10188,10190,10192,10194],{"class":30,"line":8533},[28,10173,3891],{"class":42},[28,10175,2148],{"class":34},[28,10177,640],{"class":42},[28,10179,380],{"class":34},[28,10181,83],{"class":42},[28,10183,4581],{"class":38},[28,10185,9993],{"class":34},[28,10187,1529],{"class":42},[28,10189,2638],{"class":38},[28,10191,10000],{"class":34},[28,10193,2782],{"class":42},[28,10195,228],{"class":34},[28,10197,10198],{"class":30,"line":8545},[28,10199,3000],{"class":34},[28,10201,10203,10206,10208,10211,10213,10216,10218,10221,10223],{"class":30,"line":10202},47,[28,10204,10205],{"class":34},"            cout ",[28,10207,1663],{"class":42},[28,10209,10210],{"class":735}," \"",[28,10212,1721],{"class":38},[28,10214,10215],{"class":735},"Student: \"",[28,10217,1935],{"class":42},[28,10219,10220],{"class":34}," tArray[i].sArray[j].sName",[28,10222,1663],{"class":42},[28,10224,1685],{"class":34},[28,10226,10228,10230,10232,10234,10236,10239,10241,10244,10246],{"class":30,"line":10227},48,[28,10229,10205],{"class":34},[28,10231,1663],{"class":42},[28,10233,10210],{"class":735},[28,10235,1721],{"class":38},[28,10237,10238],{"class":735},"Age: \"",[28,10240,1935],{"class":42},[28,10242,10243],{"class":34}," tArray[i].sArray[j].age ",[28,10245,1663],{"class":42},[28,10247,9328],{"class":34},[28,10249,10251,10253,10255,10257,10259,10262,10264,10267,10269],{"class":30,"line":10250},49,[28,10252,10205],{"class":34},[28,10254,1663],{"class":42},[28,10256,10210],{"class":735},[28,10258,1721],{"class":38},[28,10260,10261],{"class":735},"Score: \"",[28,10263,1935],{"class":42},[28,10265,10266],{"class":34}," tArray[i].sArray[j].score ",[28,10268,1663],{"class":42},[28,10270,10271],{"class":34}," endl;   \n",[28,10273,10275],{"class":30,"line":10274},50,[28,10276,3019],{"class":34},[28,10278,10280],{"class":30,"line":10279},51,[28,10281,2677],{"class":34},[28,10283,10285],{"class":30,"line":10284},52,[28,10286,2055],{"class":34},[28,10288,10290,10292,10294],{"class":30,"line":10289},53,[28,10291,640],{"class":42},[28,10293,2463],{"class":2453},[28,10295,2466],{"class":34},[28,10297,10299],{"class":30,"line":10298},54,[28,10300,2036],{"class":34},[28,10302,10304],{"class":30,"line":10303},55,[28,10305,10306],{"class":73},"    \u002F\u002F随机数种子\n",[28,10308,10310,10312,10314,10316,10318,10320,10322,10324,10326],{"class":30,"line":10309},56,[28,10311,2863],{"class":2453},[28,10313,2866],{"class":34},[28,10315,2869],{"class":42},[28,10317,2872],{"class":42},[28,10319,1054],{"class":34},[28,10321,2877],{"class":2453},[28,10323,367],{"class":34},[28,10325,2882],{"class":38},[28,10327,2885],{"class":34},[28,10329,10331],{"class":30,"line":10330},57,[28,10332,10333],{"class":73},"    \u002F\u002F1.创建3名老师的数组\n",[28,10335,10337,10339,10341,10344,10346],{"class":30,"line":10336},58,[28,10338,8383],{"class":42},[28,10340,9887],{"class":2453},[28,10342,10343],{"class":34}," tArray[",[28,10345,98],{"class":38},[28,10347,5178],{"class":34},[28,10349,10351],{"class":30,"line":10350},59,[28,10352,10353],{"class":73},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[28,10355,10357,10359,10362,10364,10367,10370,10372,10374,10377,10379],{"class":30,"line":10356},60,[28,10358,2475],{"class":42},[28,10360,10361],{"class":34}," len ",[28,10363,83],{"class":42},[28,10365,10366],{"class":42}," sizeof",[28,10368,10369],{"class":34},"(tArray) ",[28,10371,43],{"class":42},[28,10373,10366],{"class":42},[28,10375,10376],{"class":34},"(tArray[",[28,10378,822],{"class":38},[28,10380,4344],{"class":34},[28,10382,10384,10387],{"class":30,"line":10383},61,[28,10385,10386],{"class":2453},"    allocateSpace",[28,10388,10389],{"class":34},"(tArray, len);\n",[28,10391,10393],{"class":30,"line":10392},62,[28,10394,10395],{"class":73},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[28,10397,10399,10402],{"class":30,"line":10398},63,[28,10400,10401],{"class":2453},"    printInfo",[28,10403,10389],{"class":34},[28,10405,10407],{"class":30,"line":10406},64,[28,10408,2890],{"emptyLinePlaceholder":562},[28,10410,10412],{"class":30,"line":10411},65,[28,10413,2055],{"class":34},[588,10415,10416],{"start":77},[591,10417,10418,10421],{},[780,10419,10420],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10423,10424],{},"五名英雄信息如下：",[18,10426,10430],{"className":10427,"code":10428,"language":10429,"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,10431,10432,10450,10467,10484,10501],{"__ignoreMap":23},[28,10433,10434,10436,10439,10441,10443,10445,10448],{"class":30,"line":31},[28,10435,5405],{"class":34},[28,10437,10438],{"class":735},"\"刘备\"",[28,10440,90],{"class":34},[28,10442,1395],{"class":38},[28,10444,90],{"class":34},[28,10446,10447],{"class":735},"\"男\"",[28,10449,5418],{"class":34},[28,10451,10452,10454,10457,10459,10461,10463,10465],{"class":30,"line":77},[28,10453,5405],{"class":34},[28,10455,10456],{"class":735},"\"关羽\"",[28,10458,90],{"class":34},[28,10460,1370],{"class":38},[28,10462,90],{"class":34},[28,10464,10447],{"class":735},[28,10466,5418],{"class":34},[28,10468,10469,10471,10474,10476,10478,10480,10482],{"class":30,"line":114},[28,10470,5405],{"class":34},[28,10472,10473],{"class":735},"\"张飞\"",[28,10475,90],{"class":34},[28,10477,1320],{"class":38},[28,10479,90],{"class":34},[28,10481,10447],{"class":735},[28,10483,5418],{"class":34},[28,10485,10486,10488,10491,10493,10495,10497,10499],{"class":30,"line":128},[28,10487,5405],{"class":34},[28,10489,10490],{"class":735},"\"赵云\"",[28,10492,90],{"class":34},[28,10494,1345],{"class":38},[28,10496,90],{"class":34},[28,10498,10447],{"class":735},[28,10500,5418],{"class":34},[28,10502,10503,10505,10508,10510,10512,10514,10517],{"class":30,"line":393},[28,10504,5405],{"class":34},[28,10506,10507],{"class":735},"\"貂蝉\"",[28,10509,90],{"class":34},[28,10511,1295],{"class":38},[28,10513,90],{"class":34},[28,10515,10516],{"class":735},"\"女\"",[28,10518,5418],{"class":34},[14,10520,10521],{},"代码：",[18,10523,10525],{"className":626,"code":10524,"language":628,"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,10526,10527,10533,10543,10549,10556,10560,10564,10570,10575,10579,10584,10607,10611,10636,10640,10673,10678,10707,10712,10727,10753,10773,10778,10783,10787,10791,10796,10818,10822,10846,10850,10912,10916,10920,10928,10932,10937,10948,10952,10968,10984,11000,11016,11032,11036,11056,11078,11083,11096,11103,11108,11114,11119,11132,11138],{"__ignoreMap":23},[28,10528,10529,10531],{"class":30,"line":31},[28,10530,2439],{"class":42},[28,10532,2442],{"class":735},[28,10534,10535,10537,10539,10541],{"class":30,"line":77},[28,10536,2447],{"class":42},[28,10538,2450],{"class":42},[28,10540,2454],{"class":2453},[28,10542,1781],{"class":34},[28,10544,10545,10547],{"class":30,"line":114},[28,10546,2439],{"class":42},[28,10548,8237],{"class":735},[28,10550,10551,10553],{"class":30,"line":128},[28,10552,8247],{"class":42},[28,10554,10555],{"class":2453}," Sanguo\n",[28,10557,10558],{"class":30,"line":393},[28,10559,2036],{"class":34},[28,10561,10562],{"class":30,"line":409},[28,10563,8273],{"class":34},[28,10565,10566,10568],{"class":30,"line":1711},[28,10567,2475],{"class":42},[28,10569,8285],{"class":34},[28,10571,10572],{"class":30,"line":1802},[28,10573,10574],{"class":34},"    string gender;\n",[28,10576,10577],{"class":30,"line":1808},[28,10578,4483],{"class":34},[28,10580,10581],{"class":30,"line":1820},[28,10582,10583],{"class":73},"\u002F\u002F定义排序函数\n",[28,10585,10586,10588,10590,10592,10595,10597,10599,10601,10603,10605],{"class":30,"line":2102},[28,10587,5852],{"class":42},[28,10589,7804],{"class":2453},[28,10591,367],{"class":34},[28,10593,10594],{"class":2453},"Sanguo",[28,10596,7006],{"class":42},[28,10598,1315],{"class":5704},[28,10600,90],{"class":34},[28,10602,640],{"class":42},[28,10604,7819],{"class":5704},[28,10606,228],{"class":34},[28,10608,10609],{"class":30,"line":2107},[28,10610,2036],{"class":34},[28,10612,10613,10615,10617,10619,10621,10623,10625,10627,10629,10632,10634],{"class":30,"line":2113},[28,10614,377],{"class":42},[28,10616,367],{"class":34},[28,10618,640],{"class":42},[28,10620,3521],{"class":34},[28,10622,83],{"class":42},[28,10624,822],{"class":38},[28,10626,3528],{"class":34},[28,10628,1529],{"class":42},[28,10630,10631],{"class":34},"len;i",[28,10633,2782],{"class":42},[28,10635,228],{"class":34},[28,10637,10638],{"class":30,"line":2118},[28,10639,2520],{"class":34},[28,10641,10642,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10665,10667,10669,10671],{"class":30,"line":2132},[28,10643,10644],{"class":42},"     for",[28,10646,2148],{"class":34},[28,10648,640],{"class":42},[28,10650,3898],{"class":34},[28,10652,83],{"class":42},[28,10654,822],{"class":38},[28,10656,3905],{"class":34},[28,10658,1529],{"class":42},[28,10660,7846],{"class":34},[28,10662,445],{"class":42},[28,10664,39],{"class":38},[28,10666,445],{"class":42},[28,10668,4038],{"class":34},[28,10670,2782],{"class":42},[28,10672,228],{"class":34},[28,10674,10675],{"class":30,"line":2137},[28,10676,10677],{"class":34},"     {\n",[28,10679,10680,10683,10686,10688,10691,10693,10696,10698,10700,10702,10704],{"class":30,"line":2143},[28,10681,10682],{"class":42},"         if",[28,10684,10685],{"class":34}," ((s",[28,10687,1104],{"class":42},[28,10689,10690],{"class":34},"j)->age ",[28,10692,1579],{"class":42},[28,10694,10695],{"class":34}," (s",[28,10697,1104],{"class":42},[28,10699,1090],{"class":34},[28,10701,1104],{"class":42},[28,10703,39],{"class":38},[28,10705,10706],{"class":34},")->age)\n",[28,10708,10709],{"class":30,"line":2164},[28,10710,10711],{"class":34},"         {\n",[28,10713,10714,10717,10719,10722,10724],{"class":30,"line":2169},[28,10715,10716],{"class":34},"             Sanguo temp",[28,10718,7641],{"class":42},[28,10720,10721],{"class":34},"(s",[28,10723,1104],{"class":42},[28,10725,10726],{"class":34},"j);\n",[28,10728,10729,10732,10734,10736,10739,10741,10743,10745,10747,10749,10751],{"class":30,"line":2183},[28,10730,10731],{"class":42},"             *",[28,10733,10721],{"class":34},[28,10735,1104],{"class":42},[28,10737,10738],{"class":34},"j)",[28,10740,7641],{"class":42},[28,10742,10721],{"class":34},[28,10744,1104],{"class":42},[28,10746,1090],{"class":34},[28,10748,1104],{"class":42},[28,10750,39],{"class":38},[28,10752,3209],{"class":34},[28,10754,10755,10757,10759,10761,10763,10765,10767,10769,10771],{"class":30,"line":2188},[28,10756,10731],{"class":42},[28,10758,10721],{"class":34},[28,10760,1104],{"class":42},[28,10762,1090],{"class":34},[28,10764,1104],{"class":42},[28,10766,39],{"class":38},[28,10768,1054],{"class":34},[28,10770,83],{"class":42},[28,10772,4768],{"class":34},[28,10774,10775],{"class":30,"line":2217},[28,10776,10777],{"class":34},"         }\n",[28,10779,10780],{"class":30,"line":2222},[28,10781,10782],{"class":34},"     }\n",[28,10784,10785],{"class":30,"line":2239},[28,10786,2677],{"class":34},[28,10788,10789],{"class":30,"line":2244},[28,10790,2055],{"class":34},[28,10792,10793],{"class":30,"line":2249},[28,10794,10795],{"class":73},"\u002F\u002F定义打印函数\n",[28,10797,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816],{"class":30,"line":2254},[28,10799,5852],{"class":42},[28,10801,10101],{"class":2453},[28,10803,367],{"class":34},[28,10805,10594],{"class":2453},[28,10807,7006],{"class":42},[28,10809,1315],{"class":5704},[28,10811,90],{"class":34},[28,10813,640],{"class":42},[28,10815,7819],{"class":5704},[28,10817,228],{"class":34},[28,10819,10820],{"class":30,"line":2268},[28,10821,2036],{"class":34},[28,10823,10824,10826,10828,10830,10832,10834,10836,10838,10840,10842,10844],{"class":30,"line":2273},[28,10825,377],{"class":42},[28,10827,2148],{"class":34},[28,10829,640],{"class":42},[28,10831,3521],{"class":34},[28,10833,83],{"class":42},[28,10835,822],{"class":38},[28,10837,3528],{"class":34},[28,10839,1529],{"class":42},[28,10841,10631],{"class":34},[28,10843,2782],{"class":42},[28,10845,228],{"class":34},[28,10847,10848],{"class":30,"line":3067},[28,10849,2520],{"class":34},[28,10851,10852,10854,10856,10858,10860,10863,10865,10867,10869,10872,10874,10876,10878,10881,10883,10885,10887,10890,10892,10894,10896,10899,10901,10903,10905,10908,10910],{"class":30,"line":3081},[28,10853,3939],{"class":34},[28,10855,1663],{"class":42},[28,10857,880],{"class":735},[28,10859,1721],{"class":38},[28,10861,10862],{"class":735},"姓名：\"",[28,10864,1663],{"class":42},[28,10866,10721],{"class":34},[28,10868,1104],{"class":42},[28,10870,10871],{"class":34},"i)->name",[28,10873,1663],{"class":42},[28,10875,880],{"class":735},[28,10877,1721],{"class":38},[28,10879,10880],{"class":735},"年龄：\"",[28,10882,1663],{"class":42},[28,10884,10721],{"class":34},[28,10886,1104],{"class":42},[28,10888,10889],{"class":34},"i)->age",[28,10891,1663],{"class":42},[28,10893,880],{"class":735},[28,10895,1721],{"class":38},[28,10897,10898],{"class":735},"性别：\"",[28,10900,1663],{"class":42},[28,10902,10721],{"class":34},[28,10904,1104],{"class":42},[28,10906,10907],{"class":34},"i)->gender",[28,10909,1663],{"class":42},[28,10911,1685],{"class":34},[28,10913,10914],{"class":30,"line":3089},[28,10915,2677],{"class":34},[28,10917,10918],{"class":30,"line":3094},[28,10919,2055],{"class":34},[28,10921,10922,10924,10926],{"class":30,"line":3100},[28,10923,640],{"class":42},[28,10925,2463],{"class":2453},[28,10927,2466],{"class":34},[28,10929,10930],{"class":30,"line":3106},[28,10931,2036],{"class":34},[28,10933,10934],{"class":30,"line":3111},[28,10935,10936],{"class":73},"    \u002F\u002F定义结构体变量\n",[28,10938,10939,10942,10944,10946],{"class":30,"line":8436},[28,10940,10941],{"class":34},"    Sanguo s1[",[28,10943,108],{"class":38},[28,10945,1559],{"class":34},[28,10947,5396],{"class":42},[28,10949,10950],{"class":30,"line":8460},[28,10951,2520],{"class":34},[28,10953,10954,10956,10958,10960,10962,10964,10966],{"class":30,"line":8465},[28,10955,5405],{"class":34},[28,10957,10438],{"class":735},[28,10959,90],{"class":34},[28,10961,1395],{"class":38},[28,10963,90],{"class":34},[28,10965,10447],{"class":735},[28,10967,5418],{"class":34},[28,10969,10970,10972,10974,10976,10978,10980,10982],{"class":30,"line":8471},[28,10971,5405],{"class":34},[28,10973,10456],{"class":735},[28,10975,90],{"class":34},[28,10977,1370],{"class":38},[28,10979,90],{"class":34},[28,10981,10447],{"class":735},[28,10983,5418],{"class":34},[28,10985,10986,10988,10990,10992,10994,10996,10998],{"class":30,"line":8498},[28,10987,5405],{"class":34},[28,10989,10473],{"class":735},[28,10991,90],{"class":34},[28,10993,1320],{"class":38},[28,10995,90],{"class":34},[28,10997,10447],{"class":735},[28,10999,5418],{"class":34},[28,11001,11002,11004,11006,11008,11010,11012,11014],{"class":30,"line":8503},[28,11003,5405],{"class":34},[28,11005,10490],{"class":735},[28,11007,90],{"class":34},[28,11009,1345],{"class":38},[28,11011,90],{"class":34},[28,11013,10447],{"class":735},[28,11015,5418],{"class":34},[28,11017,11018,11020,11022,11024,11026,11028,11030],{"class":30,"line":8509},[28,11019,5405],{"class":34},[28,11021,10507],{"class":735},[28,11023,90],{"class":34},[28,11025,1295],{"class":38},[28,11027,90],{"class":34},[28,11029,10516],{"class":735},[28,11031,5418],{"class":34},[28,11033,11034],{"class":30,"line":8521},[28,11035,5439],{"class":34},[28,11037,11038,11040,11042,11044,11047,11049,11052,11054],{"class":30,"line":8533},[28,11039,2475],{"class":42},[28,11041,7819],{"class":34},[28,11043,4691],{"class":42},[28,11045,11046],{"class":34},"(s1)",[28,11048,4697],{"class":42},[28,11050,11051],{"class":34},"(s1[",[28,11053,822],{"class":38},[28,11055,4344],{"class":34},[28,11057,11058,11061,11063,11066,11068,11071,11074,11076],{"class":30,"line":8545},[28,11059,11060],{"class":34},"    Sanguo ",[28,11062,256],{"class":42},[28,11064,11065],{"class":34},"s ",[28,11067,83],{"class":42},[28,11069,11070],{"class":42}," &",[28,11072,11073],{"class":34},"s1[",[28,11075,822],{"class":38},[28,11077,5178],{"class":34},[28,11079,11080],{"class":30,"line":10202},[28,11081,11082],{"class":73},"    \u002F\u002F排序前：\n",[28,11084,11085,11087,11089,11092,11094],{"class":30,"line":10227},[28,11086,7017],{"class":34},[28,11088,1663],{"class":42},[28,11090,11091],{"class":735}," \"排序前：\"",[28,11093,1935],{"class":42},[28,11095,9328],{"class":34},[28,11097,11098,11100],{"class":30,"line":10250},[28,11099,10401],{"class":2453},[28,11101,11102],{"class":34},"(s,len);\n",[28,11104,11105],{"class":30,"line":10274},[28,11106,11107],{"class":73},"    \u002F\u002F调用排序函数\n",[28,11109,11110,11112],{"class":30,"line":10279},[28,11111,8086],{"class":2453},[28,11113,11102],{"class":34},[28,11115,11116],{"class":30,"line":10284},[28,11117,11118],{"class":73},"    \u002F\u002F排序后\n",[28,11120,11121,11123,11125,11128,11130],{"class":30,"line":10289},[28,11122,7017],{"class":34},[28,11124,1663],{"class":42},[28,11126,11127],{"class":735}," \"排序后：\"",[28,11129,1935],{"class":42},[28,11131,9328],{"class":34},[28,11133,11134,11136],{"class":30,"line":10298},[28,11135,10401],{"class":2453},[28,11137,11102],{"class":34},[28,11139,11140],{"class":30,"line":10303},[28,11141,2055],{"class":34},[14,11143,11144,11145,11147],{},"注意：使用指针时直接用传首地址**&s",[28,11146,822],{},"**",[547,11149,11150],{},"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":77,"depth":77,"links":11152},[11153,11154,11155,11156,11157,11158,11159],{"id":8191,"depth":77,"text":8192},{"id":8553,"depth":77,"text":8554},{"id":8822,"depth":77,"text":8823},{"id":8987,"depth":77,"text":8988},{"id":9203,"depth":77,"text":9204},{"id":9524,"depth":77,"text":9525},{"id":9752,"depth":77,"text":9753},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8180,"description":8188},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11166,"title":11167,"body":11168,"description":23,"extension":560,"meta":12511,"navigation":562,"path":12512,"seo":12513,"stem":12514,"__hash__":12515},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11169,"toc":12505},[11170,11173,11177,11183,11197,11202,11205,11209,11216,11222,11225,11232,11238,11243,11246,11249,11252,11816,11819,11833,11837,11842,11858,11998,12001,12007,12010,12015,12023,12131,12134,12139,12142,12147,12150,12156,12159,12502],[10,11171,11167],{"id":11172},"_5程序内存模型",[60,11174,11176],{"id":11175},"_51内存分区模型","5.1内存分区模型",[14,11178,11179,11180],{},"C++程序在执行时，将内存大方向划分为",[780,11181,11182],{},"4个区域",[1626,11184,11185,11188,11191,11194],{},[591,11186,11187],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[591,11189,11190],{},"全局区：存放全局变量和静态变量以及常量",[591,11192,11193],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[591,11195,11196],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11198,11199],{},[780,11200,11201],{},"内存四区意义：",[14,11203,11204],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[605,11206,11208],{"id":11207},"_511程序运行前","5.1.1程序运行前",[14,11210,11211,11212,11215],{},"​\t在程序编译后，生成了exe可执行程序，",[780,11213,11214],{},"未执行该程序前","分为两个区域",[14,11217,11218,11219],{},"​\t",[780,11220,11221],{},"代码区：",[14,11223,11224],{},"​\t\t存放 CPU 执行的机器指令",[14,11226,11227,11228,11231],{},"​\t\t代码区是",[780,11229,11230],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11233,11227,11234,11237],{},[780,11235,11236],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11239,11218,11240],{},[780,11241,11242],{},"全局区：",[14,11244,11245],{},"​\t\t全局变量和静态变量存放在此.",[14,11247,11248],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11250,11251],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[18,11253,11255],{"className":626,"code":11254,"language":628,"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,11256,11257,11262,11275,11288,11292,11297,11312,11327,11331,11340,11344,11349,11362,11375,11379,11384,11410,11436,11440,11467,11493,11497,11502,11518,11533,11537,11563,11589,11593,11618,11643,11647,11673,11699,11703,11719,11734,11760,11786,11790,11800,11804,11812],{"__ignoreMap":23},[28,11258,11259],{"class":30,"line":31},[28,11260,11261],{"class":73},"\u002F\u002F全局变量\n",[28,11263,11264,11266,11269,11271,11273],{"class":30,"line":77},[28,11265,640],{"class":42},[28,11267,11268],{"class":34}," g_a ",[28,11270,83],{"class":42},[28,11272,2528],{"class":38},[28,11274,1781],{"class":34},[28,11276,11277,11279,11282,11284,11286],{"class":30,"line":114},[28,11278,640],{"class":42},[28,11280,11281],{"class":34}," g_b ",[28,11283,83],{"class":42},[28,11285,2528],{"class":38},[28,11287,1781],{"class":34},[28,11289,11290],{"class":30,"line":128},[28,11291,2890],{"emptyLinePlaceholder":562},[28,11293,11294],{"class":30,"line":393},[28,11295,11296],{"class":73},"\u002F\u002F全局常量\n",[28,11298,11299,11301,11303,11306,11308,11310],{"class":30,"line":409},[28,11300,7280],{"class":42},[28,11302,2872],{"class":42},[28,11304,11305],{"class":34}," c_g_a ",[28,11307,83],{"class":42},[28,11309,2528],{"class":38},[28,11311,1781],{"class":34},[28,11313,11314,11316,11318,11321,11323,11325],{"class":30,"line":1711},[28,11315,7280],{"class":42},[28,11317,2872],{"class":42},[28,11319,11320],{"class":34}," c_g_b ",[28,11322,83],{"class":42},[28,11324,2528],{"class":38},[28,11326,1781],{"class":34},[28,11328,11329],{"class":30,"line":1802},[28,11330,2890],{"emptyLinePlaceholder":562},[28,11332,11333,11335,11337],{"class":30,"line":1808},[28,11334,640],{"class":42},[28,11336,2463],{"class":2453},[28,11338,11339],{"class":34},"() {\n",[28,11341,11342],{"class":30,"line":1820},[28,11343,2890],{"emptyLinePlaceholder":562},[28,11345,11346],{"class":30,"line":2102},[28,11347,11348],{"class":73},"    \u002F\u002F局部变量\n",[28,11350,11351,11353,11356,11358,11360],{"class":30,"line":2107},[28,11352,2475],{"class":42},[28,11354,11355],{"class":34}," a ",[28,11357,83],{"class":42},[28,11359,2528],{"class":38},[28,11361,1781],{"class":34},[28,11363,11364,11366,11369,11371,11373],{"class":30,"line":2113},[28,11365,2475],{"class":42},[28,11367,11368],{"class":34}," b ",[28,11370,83],{"class":42},[28,11372,2528],{"class":38},[28,11374,1781],{"class":34},[28,11376,11377],{"class":30,"line":2118},[28,11378,2890],{"emptyLinePlaceholder":562},[28,11380,11381],{"class":30,"line":2132},[28,11382,11383],{"class":73},"    \u002F\u002F打印地址\n",[28,11385,11386,11388,11390,11393,11395,11397,11399,11401,11403,11406,11408],{"class":30,"line":2137},[28,11387,7017],{"class":34},[28,11389,1663],{"class":42},[28,11391,11392],{"class":735}," \"局部变量a地址为： \"",[28,11394,1935],{"class":42},[28,11396,2148],{"class":34},[28,11398,640],{"class":42},[28,11400,1054],{"class":34},[28,11402,979],{"class":42},[28,11404,11405],{"class":34},"a ",[28,11407,1663],{"class":42},[28,11409,9328],{"class":34},[28,11411,11412,11414,11416,11419,11421,11423,11425,11427,11429,11432,11434],{"class":30,"line":2143},[28,11413,7017],{"class":34},[28,11415,1663],{"class":42},[28,11417,11418],{"class":735}," \"局部变量b地址为： \"",[28,11420,1935],{"class":42},[28,11422,2148],{"class":34},[28,11424,640],{"class":42},[28,11426,1054],{"class":34},[28,11428,979],{"class":42},[28,11430,11431],{"class":34},"b ",[28,11433,1663],{"class":42},[28,11435,9328],{"class":34},[28,11437,11438],{"class":30,"line":2164},[28,11439,2890],{"emptyLinePlaceholder":562},[28,11441,11442,11444,11446,11449,11451,11454,11456,11458,11460,11463,11465],{"class":30,"line":2169},[28,11443,7017],{"class":34},[28,11445,1663],{"class":42},[28,11447,11448],{"class":735}," \"全局变量g_a地址为： \"",[28,11450,1935],{"class":42},[28,11452,11453],{"class":34},"  (",[28,11455,640],{"class":42},[28,11457,1054],{"class":34},[28,11459,979],{"class":42},[28,11461,11462],{"class":34},"g_a ",[28,11464,1663],{"class":42},[28,11466,9328],{"class":34},[28,11468,11469,11471,11473,11476,11478,11480,11482,11484,11486,11489,11491],{"class":30,"line":2183},[28,11470,7017],{"class":34},[28,11472,1663],{"class":42},[28,11474,11475],{"class":735}," \"全局变量g_b地址为： \"",[28,11477,1935],{"class":42},[28,11479,11453],{"class":34},[28,11481,640],{"class":42},[28,11483,1054],{"class":34},[28,11485,979],{"class":42},[28,11487,11488],{"class":34},"g_b ",[28,11490,1663],{"class":42},[28,11492,9328],{"class":34},[28,11494,11495],{"class":30,"line":2188},[28,11496,2890],{"emptyLinePlaceholder":562},[28,11498,11499],{"class":30,"line":2217},[28,11500,11501],{"class":73},"    \u002F\u002F静态变量\n",[28,11503,11504,11507,11509,11512,11514,11516],{"class":30,"line":2222},[28,11505,11506],{"class":42},"    static",[28,11508,2872],{"class":42},[28,11510,11511],{"class":34}," s_a ",[28,11513,83],{"class":42},[28,11515,2528],{"class":38},[28,11517,1781],{"class":34},[28,11519,11520,11522,11524,11527,11529,11531],{"class":30,"line":2239},[28,11521,11506],{"class":42},[28,11523,2872],{"class":42},[28,11525,11526],{"class":34}," s_b ",[28,11528,83],{"class":42},[28,11530,2528],{"class":38},[28,11532,1781],{"class":34},[28,11534,11535],{"class":30,"line":2244},[28,11536,2890],{"emptyLinePlaceholder":562},[28,11538,11539,11541,11543,11546,11548,11550,11552,11554,11556,11559,11561],{"class":30,"line":2249},[28,11540,7017],{"class":34},[28,11542,1663],{"class":42},[28,11544,11545],{"class":735}," \"静态变量s_a地址为： \"",[28,11547,1935],{"class":42},[28,11549,2148],{"class":34},[28,11551,640],{"class":42},[28,11553,1054],{"class":34},[28,11555,979],{"class":42},[28,11557,11558],{"class":34},"s_a ",[28,11560,1663],{"class":42},[28,11562,9328],{"class":34},[28,11564,11565,11567,11569,11572,11574,11576,11578,11580,11582,11585,11587],{"class":30,"line":2254},[28,11566,7017],{"class":34},[28,11568,1663],{"class":42},[28,11570,11571],{"class":735}," \"静态变量s_b地址为： \"",[28,11573,1935],{"class":42},[28,11575,2148],{"class":34},[28,11577,640],{"class":42},[28,11579,1054],{"class":34},[28,11581,979],{"class":42},[28,11583,11584],{"class":34},"s_b ",[28,11586,1663],{"class":42},[28,11588,9328],{"class":34},[28,11590,11591],{"class":30,"line":2268},[28,11592,2890],{"emptyLinePlaceholder":562},[28,11594,11595,11597,11599,11602,11604,11606,11608,11610,11612,11614,11616],{"class":30,"line":2273},[28,11596,7017],{"class":34},[28,11598,1663],{"class":42},[28,11600,11601],{"class":735}," \"字符串常量地址为： \"",[28,11603,1935],{"class":42},[28,11605,2148],{"class":34},[28,11607,640],{"class":42},[28,11609,1054],{"class":34},[28,11611,979],{"class":42},[28,11613,1680],{"class":735},[28,11615,1935],{"class":42},[28,11617,9328],{"class":34},[28,11619,11620,11622,11624,11626,11628,11630,11632,11634,11636,11639,11641],{"class":30,"line":3067},[28,11621,7017],{"class":34},[28,11623,1663],{"class":42},[28,11625,11601],{"class":735},[28,11627,1935],{"class":42},[28,11629,2148],{"class":34},[28,11631,640],{"class":42},[28,11633,1054],{"class":34},[28,11635,979],{"class":42},[28,11637,11638],{"class":735},"\"hello world1\"",[28,11640,1935],{"class":42},[28,11642,9328],{"class":34},[28,11644,11645],{"class":30,"line":3081},[28,11646,2890],{"emptyLinePlaceholder":562},[28,11648,11649,11651,11653,11656,11658,11660,11662,11664,11666,11669,11671],{"class":30,"line":3089},[28,11650,7017],{"class":34},[28,11652,1663],{"class":42},[28,11654,11655],{"class":735}," \"全局常量c_g_a地址为： \"",[28,11657,1935],{"class":42},[28,11659,2148],{"class":34},[28,11661,640],{"class":42},[28,11663,1054],{"class":34},[28,11665,979],{"class":42},[28,11667,11668],{"class":34},"c_g_a ",[28,11670,1663],{"class":42},[28,11672,9328],{"class":34},[28,11674,11675,11677,11679,11682,11684,11686,11688,11690,11692,11695,11697],{"class":30,"line":3094},[28,11676,7017],{"class":34},[28,11678,1663],{"class":42},[28,11680,11681],{"class":735}," \"全局常量c_g_b地址为： \"",[28,11683,1935],{"class":42},[28,11685,2148],{"class":34},[28,11687,640],{"class":42},[28,11689,1054],{"class":34},[28,11691,979],{"class":42},[28,11693,11694],{"class":34},"c_g_b ",[28,11696,1663],{"class":42},[28,11698,9328],{"class":34},[28,11700,11701],{"class":30,"line":3100},[28,11702,2890],{"emptyLinePlaceholder":562},[28,11704,11705,11708,11710,11713,11715,11717],{"class":30,"line":3106},[28,11706,11707],{"class":42},"    const",[28,11709,2872],{"class":42},[28,11711,11712],{"class":34}," c_l_a ",[28,11714,83],{"class":42},[28,11716,2528],{"class":38},[28,11718,1781],{"class":34},[28,11720,11721,11723,11725,11728,11730,11732],{"class":30,"line":3111},[28,11722,11707],{"class":42},[28,11724,2872],{"class":42},[28,11726,11727],{"class":34}," c_l_b ",[28,11729,83],{"class":42},[28,11731,2528],{"class":38},[28,11733,1781],{"class":34},[28,11735,11736,11738,11740,11743,11745,11747,11749,11751,11753,11756,11758],{"class":30,"line":8436},[28,11737,7017],{"class":34},[28,11739,1663],{"class":42},[28,11741,11742],{"class":735}," \"局部常量c_l_a地址为： \"",[28,11744,1935],{"class":42},[28,11746,2148],{"class":34},[28,11748,640],{"class":42},[28,11750,1054],{"class":34},[28,11752,979],{"class":42},[28,11754,11755],{"class":34},"c_l_a ",[28,11757,1663],{"class":42},[28,11759,9328],{"class":34},[28,11761,11762,11764,11766,11769,11771,11773,11775,11777,11779,11782,11784],{"class":30,"line":8460},[28,11763,7017],{"class":34},[28,11765,1663],{"class":42},[28,11767,11768],{"class":735}," \"局部常量c_l_b地址为： \"",[28,11770,1935],{"class":42},[28,11772,2148],{"class":34},[28,11774,640],{"class":42},[28,11776,1054],{"class":34},[28,11778,979],{"class":42},[28,11780,11781],{"class":34},"c_l_b ",[28,11783,1663],{"class":42},[28,11785,9328],{"class":34},[28,11787,11788],{"class":30,"line":8465},[28,11789,2890],{"emptyLinePlaceholder":562},[28,11791,11792,11794,11796,11798],{"class":30,"line":8471},[28,11793,2793],{"class":2453},[28,11795,367],{"class":34},[28,11797,2798],{"class":735},[28,11799,3209],{"class":34},[28,11801,11802],{"class":30,"line":8498},[28,11803,2890],{"emptyLinePlaceholder":562},[28,11805,11806,11808,11810],{"class":30,"line":8503},[28,11807,4578],{"class":42},[28,11809,4581],{"class":38},[28,11811,1781],{"class":34},[28,11813,11814],{"class":30,"line":8509},[28,11815,2055],{"class":34},[14,11817,11818],{},"总结：",[1626,11820,11821,11824,11827,11830],{},[591,11822,11823],{},"c++中程序运行前分为全局区和代码区",[591,11825,11826],{},"代码区特点是共享和只读",[591,11828,11829],{},"全局区中存放全局变量、静态变量、常量",[591,11831,11832],{},"常量区中存放const修饰的全局常量和字符串常量",[605,11834,11836],{"id":11835},"_512程序运行后","5.1.2程序运行后",[588,11838,11839],{},[591,11840,11841],{},"栈区：",[1626,11843,11844,11851],{},[591,11845,11846,11847,11850],{},"由编译器自动分配释放, 存放",[780,11848,11849],{},"函数的参数值,局部变量","等",[591,11852,11853,11854,11857],{},"注意事项：",[780,11855,11856],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[18,11859,11861],{"className":626,"code":11860,"language":628,"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,11862,11863,11874,11878,11893,11905,11909,11913,11921,11926,11941,11959,11976,11986,11994],{"__ignoreMap":23},[28,11864,11865,11867,11869,11872],{"class":30,"line":31},[28,11866,640],{"class":42},[28,11868,7006],{"class":42},[28,11870,11871],{"class":2453}," func",[28,11873,2466],{"class":34},[28,11875,11876],{"class":30,"line":77},[28,11877,2036],{"class":34},[28,11879,11880,11882,11884,11886,11888,11890],{"class":30,"line":114},[28,11881,2475],{"class":42},[28,11883,11355],{"class":34},[28,11885,83],{"class":42},[28,11887,2528],{"class":38},[28,11889,689],{"class":34},[28,11891,11892],{"class":73}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[28,11894,11895,11897,11899,11902],{"class":30,"line":128},[28,11896,4578],{"class":42},[28,11898,11070],{"class":42},[28,11900,11901],{"class":34},"a;",[28,11903,11904],{"class":73}," \u002F\u002F放回局部变量的地址\n",[28,11906,11907],{"class":30,"line":393},[28,11908,2055],{"class":34},[28,11910,11911],{"class":30,"line":409},[28,11912,2890],{"emptyLinePlaceholder":562},[28,11914,11915,11917,11919],{"class":30,"line":1711},[28,11916,640],{"class":42},[28,11918,2463],{"class":2453},[28,11920,11339],{"class":34},[28,11922,11923],{"class":30,"line":1802},[28,11924,11925],{"class":73},"    \u002F\u002F接受func的返回值\n",[28,11927,11928,11930,11932,11935,11937,11939],{"class":30,"line":1808},[28,11929,2475],{"class":42},[28,11931,7006],{"class":42},[28,11933,11934],{"class":34},"p ",[28,11936,83],{"class":42},[28,11938,11871],{"class":2453},[28,11940,6124],{"class":34},[28,11942,11943,11945,11947,11949,11951,11953,11956],{"class":30,"line":1820},[28,11944,7017],{"class":34},[28,11946,1663],{"class":42},[28,11948,7006],{"class":42},[28,11950,11934],{"class":34},[28,11952,1663],{"class":42},[28,11954,11955],{"class":34}," endl;",[28,11957,11958],{"class":73}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[28,11960,11961,11963,11965,11967,11969,11971,11973],{"class":30,"line":2102},[28,11962,7017],{"class":34},[28,11964,1663],{"class":42},[28,11966,7006],{"class":42},[28,11968,11934],{"class":34},[28,11970,1663],{"class":42},[28,11972,11955],{"class":34},[28,11974,11975],{"class":73}," \u002F\u002F第二次这个数据不再保留\n",[28,11977,11978,11980,11982,11984],{"class":30,"line":2107},[28,11979,2793],{"class":2453},[28,11981,367],{"class":34},[28,11983,2798],{"class":735},[28,11985,3209],{"class":34},[28,11987,11988,11990,11992],{"class":30,"line":2113},[28,11989,4578],{"class":42},[28,11991,4581],{"class":38},[28,11993,1781],{"class":34},[28,11995,11996],{"class":30,"line":2118},[28,11997,2055],{"class":34},[14,11999,12000],{},"输出结果：",[14,12002,12003],{},[420,12004],{"alt":12005,"src":12006},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,12008,12009],{},"总结：不要返回局部变量的地址",[588,12011,12012],{"start":77},[591,12013,12014],{},"堆区",[1626,12016,12017,12020],{},[591,12018,12019],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[591,12021,12022],{},"在c++中主要利用new在堆区开辟内存",[18,12024,12026],{"className":626,"code":12025,"language":628,"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,12027,12028,12043,12047,12052,12073,12080,12084,12092,12096,12101,12115,12127],{"__ignoreMap":23},[28,12029,12030,12032,12035,12038,12040],{"class":30,"line":31},[28,12031,640],{"class":42},[28,12033,12034],{"class":42},"  *",[28,12036,12037],{"class":2453},"func",[28,12039,2917],{"class":34},[28,12041,12042],{"class":73},"  \u002F\u002F函数返回指针\n",[28,12044,12045],{"class":30,"line":77},[28,12046,2036],{"class":34},[28,12048,12049],{"class":30,"line":114},[28,12050,12051],{"class":73},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[28,12053,12054,12056,12058,12060,12062,12065,12067,12069,12071],{"class":30,"line":128},[28,12055,4635],{"class":42},[28,12057,7006],{"class":42},[28,12059,14],{"class":34},[28,12061,83],{"class":42},[28,12063,12064],{"class":42}," new",[28,12066,2872],{"class":42},[28,12068,367],{"class":34},[28,12070,225],{"class":38},[28,12072,3209],{"class":34},[28,12074,12075,12077],{"class":30,"line":393},[28,12076,4869],{"class":42},[28,12078,12079],{"class":34}," p;\n",[28,12081,12082],{"class":30,"line":409},[28,12083,2055],{"class":34},[28,12085,12086,12088,12090],{"class":30,"line":1711},[28,12087,640],{"class":42},[28,12089,2463],{"class":2453},[28,12091,2466],{"class":34},[28,12093,12094],{"class":30,"line":1802},[28,12095,2036],{"class":34},[28,12097,12098],{"class":30,"line":1808},[28,12099,12100],{"class":73},"    \u002F\u002F在堆区开辟数据\n",[28,12102,12103,12105,12107,12109,12111,12113],{"class":30,"line":1820},[28,12104,2475],{"class":42},[28,12106,7006],{"class":42},[28,12108,14],{"class":34},[28,12110,83],{"class":42},[28,12112,12037],{"class":2453},[28,12114,6124],{"class":34},[28,12116,12117,12119,12121,12123,12125],{"class":30,"line":2102},[28,12118,2041],{"class":34},[28,12120,6907],{"class":42},[28,12122,14],{"class":34},[28,12124,1663],{"class":42},[28,12126,1685],{"class":34},[28,12128,12129],{"class":30,"line":2107},[28,12130,2055],{"class":34},[14,12132,12133],{},"图片展示：",[14,12135,12136],{},[420,12137],{"alt":12005,"src":12138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12140,12141],{},"堆区内存由程序员管生死！！！",[588,12143,12144],{"start":114},[591,12145,12146],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12148,12149],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12151,12152,12153],{},"​语法：",[25,12154,12155],{}," new 数据类型",[14,12157,12158],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[18,12160,12162],{"className":626,"code":12161,"language":628,"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,12163,12164,12169,12179,12183,12188,12193,12215,12219,12227,12231,12245,12257,12269,12281,12286,12291,12302,12306,12311,12319,12323,12328,12350,12376,12380,12398,12402,12428,12432,12444,12448,12453,12458,12466,12470,12474,12482,12486,12492,12498],{"__ignoreMap":23},[28,12165,12166],{"class":30,"line":31},[28,12167,12168],{"class":73},"\u002F\u002F1.new的基本语法\n",[28,12170,12171,12173,12175,12177],{"class":30,"line":77},[28,12172,640],{"class":42},[28,12174,7006],{"class":42},[28,12176,12037],{"class":2453},[28,12178,2466],{"class":34},[28,12180,12181],{"class":30,"line":114},[28,12182,2036],{"class":34},[28,12184,12185],{"class":30,"line":128},[28,12186,12187],{"class":73},"    \u002F\u002F在堆区创建整型数据\n",[28,12189,12190],{"class":30,"line":393},[28,12191,12192],{"class":73},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[28,12194,12195,12197,12199,12201,12204,12206,12208,12210,12212],{"class":30,"line":409},[28,12196,2475],{"class":42},[28,12198,7006],{"class":42},[28,12200,14],{"class":34},[28,12202,12203],{"class":42},"=new",[28,12205,2872],{"class":42},[28,12207,367],{"class":34},[28,12209,225],{"class":38},[28,12211,6454],{"class":34},[28,12213,12214],{"class":73},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[28,12216,12217],{"class":30,"line":1711},[28,12218,2055],{"class":34},[28,12220,12221,12223,12225],{"class":30,"line":1802},[28,12222,5852],{"class":42},[28,12224,6076],{"class":2453},[28,12226,2466],{"class":34},[28,12228,12229],{"class":30,"line":1808},[28,12230,2036],{"class":34},[28,12232,12233,12235,12237,12239,12241,12243],{"class":30,"line":1820},[28,12234,2475],{"class":42},[28,12236,7006],{"class":42},[28,12238,14],{"class":34},[28,12240,83],{"class":42},[28,12242,12037],{"class":2453},[28,12244,6124],{"class":34},[28,12246,12247,12249,12251,12253,12255],{"class":30,"line":2102},[28,12248,2041],{"class":34},[28,12250,6907],{"class":42},[28,12252,14],{"class":34},[28,12254,1663],{"class":42},[28,12256,1685],{"class":34},[28,12258,12259,12261,12263,12265,12267],{"class":30,"line":2107},[28,12260,2041],{"class":34},[28,12262,6907],{"class":42},[28,12264,14],{"class":34},[28,12266,1663],{"class":42},[28,12268,1685],{"class":34},[28,12270,12271,12273,12275,12277,12279],{"class":30,"line":2113},[28,12272,2041],{"class":34},[28,12274,6907],{"class":42},[28,12276,14],{"class":34},[28,12278,1663],{"class":42},[28,12280,1685],{"class":34},[28,12282,12283],{"class":30,"line":2118},[28,12284,12285],{"class":73},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[28,12287,12288],{"class":30,"line":2132},[28,12289,12290],{"class":73},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[28,12292,12293,12296,12299],{"class":30,"line":2137},[28,12294,12295],{"class":42},"    delete",[28,12297,12298],{"class":34}," p;",[28,12300,12301],{"class":73},"\u002F\u002F删除这块地址\n",[28,12303,12304],{"class":30,"line":2143},[28,12305,2055],{"class":34},[28,12307,12308],{"class":30,"line":2164},[28,12309,12310],{"class":73},"\u002F\u002F2.在堆区利用new开辟数组\n",[28,12312,12313,12315,12317],{"class":30,"line":2169},[28,12314,5852],{"class":42},[28,12316,6145],{"class":2453},[28,12318,2466],{"class":34},[28,12320,12321],{"class":30,"line":2183},[28,12322,2036],{"class":34},[28,12324,12325],{"class":30,"line":2188},[28,12326,12327],{"class":73},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[28,12329,12330,12332,12334,12336,12338,12340,12342,12344,12347],{"class":30,"line":2217},[28,12331,2475],{"class":42},[28,12333,7006],{"class":42},[28,12335,4368],{"class":34},[28,12337,12203],{"class":42},[28,12339,2872],{"class":42},[28,12341,35],{"class":34},[28,12343,225],{"class":38},[28,12345,12346],{"class":34},"];",[28,12348,12349],{"class":73},"\u002F\u002F10代表数组有10个元素\n",[28,12351,12352,12354,12356,12358,12360,12362,12364,12366,12368,12370,12372,12374],{"class":30,"line":2222},[28,12353,377],{"class":42},[28,12355,2148],{"class":34},[28,12357,640],{"class":42},[28,12359,3521],{"class":34},[28,12361,83],{"class":42},[28,12363,822],{"class":38},[28,12365,3528],{"class":34},[28,12367,1529],{"class":42},[28,12369,225],{"class":38},[28,12371,3528],{"class":34},[28,12373,2782],{"class":42},[28,12375,228],{"class":34},[28,12377,12378],{"class":30,"line":2239},[28,12379,2520],{"class":34},[28,12381,12382,12385,12387,12389,12391,12393,12395],{"class":30,"line":2244},[28,12383,12384],{"class":34},"        arr[i]",[28,12386,83],{"class":42},[28,12388,1066],{"class":34},[28,12390,1104],{"class":42},[28,12392,938],{"class":38},[28,12394,689],{"class":34},[28,12396,12397],{"class":73},"\u002F\u002F给10个元素赋值100～109\n",[28,12399,12400],{"class":30,"line":2249},[28,12401,2677],{"class":34},[28,12403,12404,12406,12408,12410,12412,12414,12416,12418,12420,12422,12424,12426],{"class":30,"line":2254},[28,12405,377],{"class":42},[28,12407,2148],{"class":34},[28,12409,640],{"class":42},[28,12411,3521],{"class":34},[28,12413,83],{"class":42},[28,12415,822],{"class":38},[28,12417,3528],{"class":34},[28,12419,1529],{"class":42},[28,12421,225],{"class":38},[28,12423,3528],{"class":34},[28,12425,2782],{"class":42},[28,12427,228],{"class":34},[28,12429,12430],{"class":30,"line":2268},[28,12431,2520],{"class":34},[28,12433,12434,12436,12438,12440,12442],{"class":30,"line":2273},[28,12435,3939],{"class":34},[28,12437,1663],{"class":42},[28,12439,4842],{"class":34},[28,12441,1663],{"class":42},[28,12443,1685],{"class":34},[28,12445,12446],{"class":30,"line":3067},[28,12447,2677],{"class":34},[28,12449,12450],{"class":30,"line":3081},[28,12451,12452],{"class":73},"    \u002F\u002F释放堆区数组\n",[28,12454,12455],{"class":30,"line":3089},[28,12456,12457],{"class":73},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[28,12459,12460,12463],{"class":30,"line":3094},[28,12461,12462],{"class":42},"    delete[]",[28,12464,12465],{"class":34}," arr;\n",[28,12467,12468],{"class":30,"line":3100},[28,12469,2055],{"class":34},[28,12471,12472],{"class":30,"line":3106},[28,12473,2890],{"emptyLinePlaceholder":562},[28,12475,12476,12478,12480],{"class":30,"line":3111},[28,12477,640],{"class":42},[28,12479,2463],{"class":2453},[28,12481,2466],{"class":34},[28,12483,12484],{"class":30,"line":8436},[28,12485,2036],{"class":34},[28,12487,12488,12490],{"class":30,"line":8460},[28,12489,6121],{"class":2453},[28,12491,6124],{"class":34},[28,12493,12494,12496],{"class":30,"line":8465},[28,12495,6190],{"class":2453},[28,12497,6124],{"class":34},[28,12499,12500],{"class":30,"line":8471},[28,12501,2055],{"class":34},[547,12503,12504],{},"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":77,"depth":77,"links":12506},[12507],{"id":11175,"depth":77,"text":11176,"children":12508},[12509,12510],{"id":11207,"depth":114,"text":11208},{"id":11835,"depth":114,"text":11836},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11167,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12517,"title":12518,"body":12519,"description":23,"extension":560,"meta":14000,"navigation":562,"path":14001,"seo":14002,"stem":14003,"__hash__":14004},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12520,"toc":13992},[12521,12524,12528,12531,12534,12703,12707,12712,12729,12734,12886,12890,12893,12896,13290,13294,13297,13302,13305,13617,13621,13627,13787,13789,13797,13801,13804,13811,13989],[10,12522,12518],{"id":12523},"_6引用",[60,12525,12527],{"id":12526},"_61引用基本用法","6.1引用基本用法",[14,12529,12530],{},"引用的本质：给变量起别名",[14,12532,12533],{},"语法：数据类型 &别名=原名",[18,12535,12537],{"className":626,"code":12536,"language":628,"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,12538,12539,12547,12551,12563,12575,12579,12598,12617,12621,12632,12636,12655,12673,12677,12687,12691,12699],{"__ignoreMap":23},[28,12540,12541,12543,12545],{"class":30,"line":31},[28,12542,640],{"class":42},[28,12544,2463],{"class":2453},[28,12546,11339],{"class":34},[28,12548,12549],{"class":30,"line":77},[28,12550,2890],{"emptyLinePlaceholder":562},[28,12552,12553,12555,12557,12559,12561],{"class":30,"line":114},[28,12554,2475],{"class":42},[28,12556,11355],{"class":34},[28,12558,83],{"class":42},[28,12560,2528],{"class":38},[28,12562,1781],{"class":34},[28,12564,12565,12567,12569,12571,12573],{"class":30,"line":128},[28,12566,2475],{"class":42},[28,12568,11070],{"class":42},[28,12570,11431],{"class":34},[28,12572,83],{"class":42},[28,12574,1923],{"class":34},[28,12576,12577],{"class":30,"line":393},[28,12578,2890],{"emptyLinePlaceholder":562},[28,12580,12581,12583,12585,12588,12590,12592,12594,12596],{"class":30,"line":409},[28,12582,7017],{"class":34},[28,12584,1663],{"class":42},[28,12586,12587],{"class":735}," \"a = \"",[28,12589,1935],{"class":42},[28,12591,11355],{"class":34},[28,12593,1663],{"class":42},[28,12595,11955],{"class":34},[28,12597,7756],{"class":73},[28,12599,12600,12602,12604,12607,12609,12611,12613,12615],{"class":30,"line":1711},[28,12601,7017],{"class":34},[28,12603,1663],{"class":42},[28,12605,12606],{"class":735}," \"b = \"",[28,12608,1935],{"class":42},[28,12610,11368],{"class":34},[28,12612,1663],{"class":42},[28,12614,11955],{"class":34},[28,12616,7756],{"class":73},[28,12618,12619],{"class":30,"line":1802},[28,12620,2890],{"emptyLinePlaceholder":562},[28,12622,12623,12626,12628,12630],{"class":30,"line":1808},[28,12624,12625],{"class":34},"    b ",[28,12627,83],{"class":42},[28,12629,6242],{"class":38},[28,12631,1781],{"class":34},[28,12633,12634],{"class":30,"line":1820},[28,12635,2890],{"emptyLinePlaceholder":562},[28,12637,12638,12640,12642,12644,12646,12648,12650,12652],{"class":30,"line":2102},[28,12639,7017],{"class":34},[28,12641,1663],{"class":42},[28,12643,12587],{"class":735},[28,12645,1935],{"class":42},[28,12647,11355],{"class":34},[28,12649,1663],{"class":42},[28,12651,11955],{"class":34},[28,12653,12654],{"class":73},"\u002F\u002F100\n",[28,12656,12657,12659,12661,12663,12665,12667,12669,12671],{"class":30,"line":2107},[28,12658,7017],{"class":34},[28,12660,1663],{"class":42},[28,12662,12606],{"class":735},[28,12664,1935],{"class":42},[28,12666,11368],{"class":34},[28,12668,1663],{"class":42},[28,12670,11955],{"class":34},[28,12672,12654],{"class":73},[28,12674,12675],{"class":30,"line":2113},[28,12676,2890],{"emptyLinePlaceholder":562},[28,12678,12679,12681,12683,12685],{"class":30,"line":2118},[28,12680,2793],{"class":2453},[28,12682,367],{"class":34},[28,12684,2798],{"class":735},[28,12686,3209],{"class":34},[28,12688,12689],{"class":30,"line":2132},[28,12690,2890],{"emptyLinePlaceholder":562},[28,12692,12693,12695,12697],{"class":30,"line":2137},[28,12694,4578],{"class":42},[28,12696,4581],{"class":38},[28,12698,1781],{"class":34},[28,12700,12701],{"class":30,"line":2143},[28,12702,2055],{"class":34},[60,12704,12706],{"id":12705},"_62引用的注意事项","6.2引用的注意事项",[588,12708,12709],{},[591,12710,12711],{},"引用必须要初始化",[18,12713,12715],{"className":626,"code":12714,"language":628,"meta":23,"style":23},"int &b;\u002F\u002F非常错误！\n",[25,12716,12717],{"__ignoreMap":23},[28,12718,12719,12721,12723,12726],{"class":30,"line":31},[28,12720,640],{"class":42},[28,12722,11070],{"class":42},[28,12724,12725],{"class":34},"b;",[28,12727,12728],{"class":73},"\u002F\u002F非常错误！\n",[588,12730,12731],{"start":77},[591,12732,12733],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[18,12735,12737],{"className":626,"code":12736,"language":628,"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,12738,12739,12747,12759,12771,12779,12795,12808,12826,12844,12864,12874,12882],{"__ignoreMap":23},[28,12740,12741,12743,12745],{"class":30,"line":31},[28,12742,640],{"class":42},[28,12744,2463],{"class":2453},[28,12746,11339],{"class":34},[28,12748,12749,12751,12753,12755,12757],{"class":30,"line":77},[28,12750,2475],{"class":42},[28,12752,11355],{"class":34},[28,12754,83],{"class":42},[28,12756,2528],{"class":38},[28,12758,1781],{"class":34},[28,12760,12761,12763,12765,12767,12769],{"class":30,"line":114},[28,12762,2475],{"class":42},[28,12764,11368],{"class":34},[28,12766,83],{"class":42},[28,12768,9438],{"class":38},[28,12770,1781],{"class":34},[28,12772,12773,12776],{"class":30,"line":128},[28,12774,12775],{"class":73},"    \u002F\u002Fint &c;",[28,12777,12778],{"class":73}," \u002F\u002F错误，引用必须初始化\n",[28,12780,12781,12783,12785,12787,12789,12792],{"class":30,"line":393},[28,12782,2475],{"class":42},[28,12784,11070],{"class":42},[28,12786,3436],{"class":34},[28,12788,83],{"class":42},[28,12790,12791],{"class":34}," a;",[28,12793,12794],{"class":73}," \u002F\u002F一旦初始化后，就不可以更改\n",[28,12796,12797,12800,12802,12805],{"class":30,"line":409},[28,12798,12799],{"class":34},"    c ",[28,12801,83],{"class":42},[28,12803,12804],{"class":34}," b;",[28,12806,12807],{"class":73}," \u002F\u002F这是赋值操作，不是更改引用\n",[28,12809,12810,12812,12814,12816,12818,12820,12822,12824],{"class":30,"line":1711},[28,12811,7017],{"class":34},[28,12813,1663],{"class":42},[28,12815,12587],{"class":735},[28,12817,1935],{"class":42},[28,12819,11355],{"class":34},[28,12821,1663],{"class":42},[28,12823,11955],{"class":34},[28,12825,7741],{"class":73},[28,12827,12828,12830,12832,12834,12836,12838,12840,12842],{"class":30,"line":1802},[28,12829,7017],{"class":34},[28,12831,1663],{"class":42},[28,12833,12606],{"class":735},[28,12835,1935],{"class":42},[28,12837,11368],{"class":34},[28,12839,1663],{"class":42},[28,12841,11955],{"class":34},[28,12843,7741],{"class":73},[28,12845,12846,12848,12850,12853,12855,12858,12860,12862],{"class":30,"line":1808},[28,12847,7017],{"class":34},[28,12849,1663],{"class":42},[28,12851,12852],{"class":735}," \"c = \"",[28,12854,1935],{"class":42},[28,12856,12857],{"class":34}," c ",[28,12859,1663],{"class":42},[28,12861,11955],{"class":34},[28,12863,7741],{"class":73},[28,12865,12866,12868,12870,12872],{"class":30,"line":1820},[28,12867,2793],{"class":2453},[28,12869,367],{"class":34},[28,12871,2798],{"class":735},[28,12873,3209],{"class":34},[28,12875,12876,12878,12880],{"class":30,"line":2102},[28,12877,4578],{"class":42},[28,12879,4581],{"class":38},[28,12881,1781],{"class":34},[28,12883,12884],{"class":30,"line":2107},[28,12885,2055],{"class":34},[60,12887,12889],{"id":12888},"_63引用做函数参数","6.3引用做函数参数",[14,12891,12892],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12894,12895],{},"优点：可以简化指针修改实参",[18,12897,12899],{"className":626,"code":12898,"language":628,"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,12900,12901,12906,12929,12940,12950,12959,12963,12967,12972,12994,13006,13018,13028,13032,13036,13041,13063,13073,13081,13089,13093,13097,13105,13109,13121,13133,13137,13148,13174,13178,13198,13222,13226,13236,13260,13264,13274,13278,13286],{"__ignoreMap":23},[28,12902,12903],{"class":30,"line":31},[28,12904,12905],{"class":73},"\u002F\u002F1. 值传递\n",[28,12907,12908,12910,12913,12915,12917,12919,12922,12924,12926],{"class":30,"line":77},[28,12909,5852],{"class":42},[28,12911,12912],{"class":2453}," mySwap01",[28,12914,367],{"class":34},[28,12916,640],{"class":42},[28,12918,1889],{"class":5704},[28,12920,12921],{"class":34},", ",[28,12923,640],{"class":42},[28,12925,3323],{"class":5704},[28,12927,12928],{"class":34},") {\n",[28,12930,12931,12933,12936,12938],{"class":30,"line":114},[28,12932,2475],{"class":42},[28,12934,12935],{"class":34}," temp ",[28,12937,83],{"class":42},[28,12939,1923],{"class":34},[28,12941,12942,12945,12947],{"class":30,"line":128},[28,12943,12944],{"class":34},"    a ",[28,12946,83],{"class":42},[28,12948,12949],{"class":34}," b;\n",[28,12951,12952,12954,12956],{"class":30,"line":393},[28,12953,12625],{"class":34},[28,12955,83],{"class":42},[28,12957,12958],{"class":34}," temp;\n",[28,12960,12961],{"class":30,"line":409},[28,12962,2055],{"class":34},[28,12964,12965],{"class":30,"line":1711},[28,12966,2890],{"emptyLinePlaceholder":562},[28,12968,12969],{"class":30,"line":1802},[28,12970,12971],{"class":73},"\u002F\u002F2. 地址传递\n",[28,12973,12974,12976,12979,12981,12984,12986,12988,12990,12992],{"class":30,"line":1808},[28,12975,5852],{"class":42},[28,12977,12978],{"class":2453}," mySwap02",[28,12980,367],{"class":34},[28,12982,12983],{"class":42},"int*",[28,12985,1889],{"class":5704},[28,12987,12921],{"class":34},[28,12989,12983],{"class":42},[28,12991,3323],{"class":5704},[28,12993,12928],{"class":34},[28,12995,12996,12998,13000,13002,13004],{"class":30,"line":1820},[28,12997,2475],{"class":42},[28,12999,12935],{"class":34},[28,13001,83],{"class":42},[28,13003,7006],{"class":42},[28,13005,6685],{"class":34},[28,13007,13008,13010,13012,13014,13016],{"class":30,"line":2102},[28,13009,6891],{"class":42},[28,13011,11405],{"class":34},[28,13013,83],{"class":42},[28,13015,7006],{"class":42},[28,13017,6557],{"class":34},[28,13019,13020,13022,13024,13026],{"class":30,"line":2107},[28,13021,6891],{"class":42},[28,13023,11431],{"class":34},[28,13025,83],{"class":42},[28,13027,12958],{"class":34},[28,13029,13030],{"class":30,"line":2113},[28,13031,2055],{"class":34},[28,13033,13034],{"class":30,"line":2118},[28,13035,2890],{"emptyLinePlaceholder":562},[28,13037,13038],{"class":30,"line":2132},[28,13039,13040],{"class":73},"\u002F\u002F3. 引用传递\n",[28,13042,13043,13045,13048,13050,13053,13055,13057,13059,13061],{"class":30,"line":2137},[28,13044,5852],{"class":42},[28,13046,13047],{"class":2453}," mySwap03",[28,13049,367],{"class":34},[28,13051,13052],{"class":42},"int&",[28,13054,1889],{"class":5704},[28,13056,12921],{"class":34},[28,13058,13052],{"class":42},[28,13060,3323],{"class":5704},[28,13062,12928],{"class":34},[28,13064,13065,13067,13069,13071],{"class":30,"line":2143},[28,13066,2475],{"class":42},[28,13068,12935],{"class":34},[28,13070,83],{"class":42},[28,13072,1923],{"class":34},[28,13074,13075,13077,13079],{"class":30,"line":2164},[28,13076,12944],{"class":34},[28,13078,83],{"class":42},[28,13080,12949],{"class":34},[28,13082,13083,13085,13087],{"class":30,"line":2169},[28,13084,12625],{"class":34},[28,13086,83],{"class":42},[28,13088,12958],{"class":34},[28,13090,13091],{"class":30,"line":2183},[28,13092,2055],{"class":34},[28,13094,13095],{"class":30,"line":2188},[28,13096,2890],{"emptyLinePlaceholder":562},[28,13098,13099,13101,13103],{"class":30,"line":2217},[28,13100,640],{"class":42},[28,13102,2463],{"class":2453},[28,13104,11339],{"class":34},[28,13106,13107],{"class":30,"line":2222},[28,13108,2890],{"emptyLinePlaceholder":562},[28,13110,13111,13113,13115,13117,13119],{"class":30,"line":2239},[28,13112,2475],{"class":42},[28,13114,11355],{"class":34},[28,13116,83],{"class":42},[28,13118,2528],{"class":38},[28,13120,1781],{"class":34},[28,13122,13123,13125,13127,13129,13131],{"class":30,"line":2244},[28,13124,2475],{"class":42},[28,13126,11368],{"class":34},[28,13128,83],{"class":42},[28,13130,9438],{"class":38},[28,13132,1781],{"class":34},[28,13134,13135],{"class":30,"line":2249},[28,13136,2890],{"emptyLinePlaceholder":562},[28,13138,13139,13142,13145],{"class":30,"line":2254},[28,13140,13141],{"class":2453},"    mySwap01",[28,13143,13144],{"class":34},"(a, b);",[28,13146,13147],{"class":73},"\u002F\u002F值传递，形参不会修饰实参\n",[28,13149,13150,13152,13154,13157,13159,13161,13163,13166,13168,13170,13172],{"class":30,"line":2268},[28,13151,7017],{"class":34},[28,13153,1663],{"class":42},[28,13155,13156],{"class":735}," \"a:\"",[28,13158,1935],{"class":42},[28,13160,11355],{"class":34},[28,13162,1663],{"class":42},[28,13164,13165],{"class":735}," \" b:\"",[28,13167,1935],{"class":42},[28,13169,11368],{"class":34},[28,13171,1663],{"class":42},[28,13173,9328],{"class":34},[28,13175,13176],{"class":30,"line":2273},[28,13177,2890],{"emptyLinePlaceholder":562},[28,13179,13180,13183,13185,13187,13190,13192,13195],{"class":30,"line":3067},[28,13181,13182],{"class":2453},"    mySwap02",[28,13184,367],{"class":34},[28,13186,979],{"class":42},[28,13188,13189],{"class":34},"a, ",[28,13191,979],{"class":42},[28,13193,13194],{"class":34},"b);",[28,13196,13197],{"class":73},"\u002F\u002F地址传递，形参会修饰实参\n",[28,13199,13200,13202,13204,13206,13208,13210,13212,13214,13216,13218,13220],{"class":30,"line":3081},[28,13201,7017],{"class":34},[28,13203,1663],{"class":42},[28,13205,13156],{"class":735},[28,13207,1935],{"class":42},[28,13209,11355],{"class":34},[28,13211,1663],{"class":42},[28,13213,13165],{"class":735},[28,13215,1935],{"class":42},[28,13217,11368],{"class":34},[28,13219,1663],{"class":42},[28,13221,9328],{"class":34},[28,13223,13224],{"class":30,"line":3089},[28,13225,2890],{"emptyLinePlaceholder":562},[28,13227,13228,13231,13233],{"class":30,"line":3094},[28,13229,13230],{"class":2453},"    mySwap03",[28,13232,13144],{"class":34},[28,13234,13235],{"class":73},"\u002F\u002F引用传递，形参会修饰实参\n",[28,13237,13238,13240,13242,13244,13246,13248,13250,13252,13254,13256,13258],{"class":30,"line":3100},[28,13239,7017],{"class":34},[28,13241,1663],{"class":42},[28,13243,13156],{"class":735},[28,13245,1935],{"class":42},[28,13247,11355],{"class":34},[28,13249,1663],{"class":42},[28,13251,13165],{"class":735},[28,13253,1935],{"class":42},[28,13255,11368],{"class":34},[28,13257,1663],{"class":42},[28,13259,9328],{"class":34},[28,13261,13262],{"class":30,"line":3106},[28,13263,2890],{"emptyLinePlaceholder":562},[28,13265,13266,13268,13270,13272],{"class":30,"line":3111},[28,13267,2793],{"class":2453},[28,13269,367],{"class":34},[28,13271,2798],{"class":735},[28,13273,3209],{"class":34},[28,13275,13276],{"class":30,"line":8436},[28,13277,2890],{"emptyLinePlaceholder":562},[28,13279,13280,13282,13284],{"class":30,"line":8460},[28,13281,4578],{"class":42},[28,13283,4581],{"class":38},[28,13285,1781],{"class":34},[28,13287,13288],{"class":30,"line":8465},[28,13289,2055],{"class":34},[60,13291,13293],{"id":13292},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13295,13296],{},"作用：引用是可以作为函数的返回值存在的",[14,13298,9513,13299],{},[780,13300,13301],{},"不要返回局部变量引用",[14,13303,13304],{},"用法：函数调用作为左值",[18,13306,13308],{"className":10427,"code":13307,"language":10429,"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,13309,13310,13315,13323,13338,13344,13348,13352,13357,13365,13382,13388,13392,13396,13404,13408,13413,13427,13447,13466,13470,13475,13488,13508,13526,13530,13546,13550,13569,13587,13591,13601,13605,13613],{"__ignoreMap":23},[28,13311,13312],{"class":30,"line":31},[28,13313,13314],{"class":73},"\u002F\u002F返回局部变量引用\n",[28,13316,13317,13319,13321],{"class":30,"line":77},[28,13318,13052],{"class":42},[28,13320,6076],{"class":2453},[28,13322,11339],{"class":34},[28,13324,13325,13327,13329,13331,13333,13335],{"class":30,"line":114},[28,13326,2475],{"class":42},[28,13328,11355],{"class":34},[28,13330,83],{"class":42},[28,13332,2528],{"class":38},[28,13334,689],{"class":34},[28,13336,13337],{"class":73}," \u002F\u002F局部变量\n",[28,13339,13340,13342],{"class":30,"line":128},[28,13341,4578],{"class":42},[28,13343,1923],{"class":34},[28,13345,13346],{"class":30,"line":393},[28,13347,2055],{"class":34},[28,13349,13350],{"class":30,"line":409},[28,13351,2890],{"emptyLinePlaceholder":562},[28,13353,13354],{"class":30,"line":1711},[28,13355,13356],{"class":73},"\u002F\u002F返回静态变量引用\n",[28,13358,13359,13361,13363],{"class":30,"line":1802},[28,13360,13052],{"class":42},[28,13362,6145],{"class":2453},[28,13364,11339],{"class":34},[28,13366,13367,13369,13371,13373,13375,13377,13379],{"class":30,"line":1808},[28,13368,11506],{"class":42},[28,13370,2872],{"class":42},[28,13372,11355],{"class":34},[28,13374,83],{"class":42},[28,13376,9438],{"class":38},[28,13378,689],{"class":34},[28,13380,13381],{"class":73},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[28,13383,13384,13386],{"class":30,"line":1820},[28,13385,4578],{"class":42},[28,13387,1923],{"class":34},[28,13389,13390],{"class":30,"line":2102},[28,13391,2055],{"class":34},[28,13393,13394],{"class":30,"line":2107},[28,13395,2890],{"emptyLinePlaceholder":562},[28,13397,13398,13400,13402],{"class":30,"line":2113},[28,13399,640],{"class":42},[28,13401,2463],{"class":2453},[28,13403,11339],{"class":34},[28,13405,13406],{"class":30,"line":2118},[28,13407,2890],{"emptyLinePlaceholder":562},[28,13409,13410],{"class":30,"line":2132},[28,13411,13412],{"class":73},"    \u002F\u002F不能返回局部变量的引用\n",[28,13414,13415,13418,13421,13423,13425],{"class":30,"line":2137},[28,13416,13417],{"class":42},"    int&",[28,13419,13420],{"class":34}," ref ",[28,13422,83],{"class":42},[28,13424,6076],{"class":2453},[28,13426,6124],{"class":34},[28,13428,13429,13431,13433,13436,13438,13440,13442,13444],{"class":30,"line":2143},[28,13430,7017],{"class":34},[28,13432,1663],{"class":42},[28,13434,13435],{"class":735}," \"ref = \"",[28,13437,1935],{"class":42},[28,13439,13420],{"class":34},[28,13441,1663],{"class":42},[28,13443,11955],{"class":34},[28,13445,13446],{"class":73},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[28,13448,13449,13451,13453,13455,13457,13459,13461,13463],{"class":30,"line":2164},[28,13450,7017],{"class":34},[28,13452,1663],{"class":42},[28,13454,13435],{"class":735},[28,13456,1935],{"class":42},[28,13458,13420],{"class":34},[28,13460,1663],{"class":42},[28,13462,11955],{"class":34},[28,13464,13465],{"class":73},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[28,13467,13468],{"class":30,"line":2169},[28,13469,2890],{"emptyLinePlaceholder":562},[28,13471,13472],{"class":30,"line":2183},[28,13473,13474],{"class":73},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[28,13476,13477,13479,13482,13484,13486],{"class":30,"line":2188},[28,13478,13417],{"class":42},[28,13480,13481],{"class":34}," ref2 ",[28,13483,83],{"class":42},[28,13485,6145],{"class":2453},[28,13487,6124],{"class":34},[28,13489,13490,13492,13494,13497,13499,13501,13503,13505],{"class":30,"line":2217},[28,13491,7017],{"class":34},[28,13493,1663],{"class":42},[28,13495,13496],{"class":735}," \"ref2 = \"",[28,13498,1935],{"class":42},[28,13500,13481],{"class":34},[28,13502,1663],{"class":42},[28,13504,11955],{"class":34},[28,13506,13507],{"class":73}," \u002F\u002F20\n",[28,13509,13510,13512,13514,13516,13518,13520,13522,13524],{"class":30,"line":2222},[28,13511,7017],{"class":34},[28,13513,1663],{"class":42},[28,13515,13496],{"class":735},[28,13517,1935],{"class":42},[28,13519,13481],{"class":34},[28,13521,1663],{"class":42},[28,13523,11955],{"class":34},[28,13525,13507],{"class":73},[28,13527,13528],{"class":30,"line":2239},[28,13529,2890],{"emptyLinePlaceholder":562},[28,13531,13532,13534,13537,13539,13541,13543],{"class":30,"line":2244},[28,13533,6190],{"class":2453},[28,13535,13536],{"class":34},"() ",[28,13538,83],{"class":42},[28,13540,3489],{"class":38},[28,13542,689],{"class":34},[28,13544,13545],{"class":73},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[28,13547,13548],{"class":30,"line":2249},[28,13549,2890],{"emptyLinePlaceholder":562},[28,13551,13552,13554,13556,13558,13560,13562,13564,13566],{"class":30,"line":2254},[28,13553,7017],{"class":34},[28,13555,1663],{"class":42},[28,13557,13496],{"class":735},[28,13559,1935],{"class":42},[28,13561,13481],{"class":34},[28,13563,1663],{"class":42},[28,13565,11955],{"class":34},[28,13567,13568],{"class":73}," \u002F\u002F1000\n",[28,13570,13571,13573,13575,13577,13579,13581,13583,13585],{"class":30,"line":2268},[28,13572,7017],{"class":34},[28,13574,1663],{"class":42},[28,13576,13496],{"class":735},[28,13578,1935],{"class":42},[28,13580,13481],{"class":34},[28,13582,1663],{"class":42},[28,13584,11955],{"class":34},[28,13586,13568],{"class":73},[28,13588,13589],{"class":30,"line":2273},[28,13590,2890],{"emptyLinePlaceholder":562},[28,13592,13593,13595,13597,13599],{"class":30,"line":3067},[28,13594,2793],{"class":2453},[28,13596,367],{"class":34},[28,13598,2798],{"class":735},[28,13600,3209],{"class":34},[28,13602,13603],{"class":30,"line":3081},[28,13604,2890],{"emptyLinePlaceholder":562},[28,13606,13607,13609,13611],{"class":30,"line":3089},[28,13608,4578],{"class":42},[28,13610,4581],{"class":38},[28,13612,1781],{"class":34},[28,13614,13615],{"class":30,"line":3094},[28,13616,2055],{"class":34},[60,13618,13620],{"id":13619},"_65引用的本质","6.5引用的本质",[14,13622,13623,13624],{},"本质：",[780,13625,13626],{},"引用的本质在c++内部实现是一个指针常量.",[18,13628,13630],{"className":626,"code":13629,"language":628,"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,13631,13632,13637,13653,13667,13671,13680,13692,13697,13702,13713,13726,13730,13746,13763,13767,13775,13783],{"__ignoreMap":23},[28,13633,13634],{"class":30,"line":31},[28,13635,13636],{"class":73},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[28,13638,13639,13641,13643,13645,13647,13650],{"class":30,"line":77},[28,13640,5852],{"class":42},[28,13642,11871],{"class":2453},[28,13644,367],{"class":34},[28,13646,13052],{"class":42},[28,13648,13649],{"class":5704}," ref",[28,13651,13652],{"class":34},"){\n",[28,13654,13655,13658,13660,13662,13664],{"class":30,"line":114},[28,13656,13657],{"class":34},"    ref ",[28,13659,83],{"class":42},[28,13661,6242],{"class":38},[28,13663,689],{"class":34},[28,13665,13666],{"class":73}," \u002F\u002F ref是引用，转换为*ref = 100\n",[28,13668,13669],{"class":30,"line":128},[28,13670,2055],{"class":34},[28,13672,13673,13675,13677],{"class":30,"line":393},[28,13674,640],{"class":42},[28,13676,2463],{"class":2453},[28,13678,13679],{"class":34},"(){\n",[28,13681,13682,13684,13686,13688,13690],{"class":30,"line":409},[28,13683,2475],{"class":42},[28,13685,11355],{"class":34},[28,13687,83],{"class":42},[28,13689,2528],{"class":38},[28,13691,1781],{"class":34},[28,13693,13694],{"class":30,"line":1711},[28,13695,13696],{"class":34},"    \n",[28,13698,13699],{"class":30,"line":1802},[28,13700,13701],{"class":73},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[28,13703,13704,13706,13708,13710],{"class":30,"line":1808},[28,13705,13417],{"class":42},[28,13707,13420],{"class":34},[28,13709,83],{"class":42},[28,13711,13712],{"class":34}," a; \n",[28,13714,13715,13717,13719,13721,13723],{"class":30,"line":1820},[28,13716,13657],{"class":34},[28,13718,83],{"class":42},[28,13720,9438],{"class":38},[28,13722,689],{"class":34},[28,13724,13725],{"class":73}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[28,13727,13728],{"class":30,"line":2102},[28,13729,13696],{"class":34},[28,13731,13732,13734,13736,13738,13740,13742,13744],{"class":30,"line":2107},[28,13733,7017],{"class":34},[28,13735,1663],{"class":42},[28,13737,13156],{"class":735},[28,13739,1935],{"class":42},[28,13741,11355],{"class":34},[28,13743,1663],{"class":42},[28,13745,9328],{"class":34},[28,13747,13748,13750,13752,13755,13757,13759,13761],{"class":30,"line":2113},[28,13749,7017],{"class":34},[28,13751,1663],{"class":42},[28,13753,13754],{"class":735}," \"ref:\"",[28,13756,1935],{"class":42},[28,13758,13420],{"class":34},[28,13760,1663],{"class":42},[28,13762,9328],{"class":34},[28,13764,13765],{"class":30,"line":2118},[28,13766,13696],{"class":34},[28,13768,13769,13772],{"class":30,"line":2132},[28,13770,13771],{"class":2453},"    func",[28,13773,13774],{"class":34},"(a);\n",[28,13776,13777,13779,13781],{"class":30,"line":2137},[28,13778,4578],{"class":42},[28,13780,4581],{"class":38},[28,13782,1781],{"class":34},[28,13784,13785],{"class":30,"line":2143},[28,13786,2055],{"class":34},[14,13788,11818],{},[588,13790,13791,13794],{},[591,13792,13793],{},"引用的本质，就是一个指针常量",[591,13795,13796],{},"引用一旦初始化，就不可以发生改变",[60,13798,13800],{"id":13799},"_66常量引用","6.6常量引用",[14,13802,13803],{},"作用：常量引用主要用来修饰形参",[14,13805,13806,13807,13810],{},"在函数形参列表中，可以加",[780,13808,13809],{},"const修饰形参","，防止形参改变实参",[18,13812,13814],{"className":626,"code":13813,"language":628,"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,13815,13816,13821,13826,13845,13850,13863,13867,13871,13879,13883,13888,13893,13907,13911,13919,13931,13935,13940,13952,13959,13963,13973,13977,13985],{"__ignoreMap":23},[28,13817,13818],{"class":30,"line":31},[28,13819,13820],{"class":73},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[28,13822,13823],{"class":30,"line":77},[28,13824,13825],{"class":73},"\u002F\u002F加上const就不能修改实参的\n",[28,13827,13828,13830,13833,13835,13837,13840,13843],{"class":30,"line":114},[28,13829,5852],{"class":42},[28,13831,13832],{"class":2453}," showValue",[28,13834,367],{"class":34},[28,13836,7280],{"class":42},[28,13838,13839],{"class":42}," int&",[28,13841,13842],{"class":5704}," v",[28,13844,12928],{"class":34},[28,13846,13847],{"class":30,"line":128},[28,13848,13849],{"class":73},"    \u002F\u002Fv += 100;\n",[28,13851,13852,13854,13856,13859,13861],{"class":30,"line":393},[28,13853,7017],{"class":34},[28,13855,1663],{"class":42},[28,13857,13858],{"class":34}," v ",[28,13860,1663],{"class":42},[28,13862,9328],{"class":34},[28,13864,13865],{"class":30,"line":409},[28,13866,2055],{"class":34},[28,13868,13869],{"class":30,"line":1711},[28,13870,2890],{"emptyLinePlaceholder":562},[28,13872,13873,13875,13877],{"class":30,"line":1802},[28,13874,640],{"class":42},[28,13876,2463],{"class":2453},[28,13878,11339],{"class":34},[28,13880,13881],{"class":30,"line":1808},[28,13882,2890],{"emptyLinePlaceholder":562},[28,13884,13885],{"class":30,"line":1820},[28,13886,13887],{"class":73},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[28,13889,13890],{"class":30,"line":2102},[28,13891,13892],{"class":73},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[28,13894,13895,13897,13899,13901,13903,13905],{"class":30,"line":2107},[28,13896,11707],{"class":42},[28,13898,13839],{"class":42},[28,13900,13420],{"class":34},[28,13902,83],{"class":42},[28,13904,2528],{"class":38},[28,13906,1781],{"class":34},[28,13908,13909],{"class":30,"line":2113},[28,13910,2890],{"emptyLinePlaceholder":562},[28,13912,13913,13916],{"class":30,"line":2118},[28,13914,13915],{"class":73},"    \u002F\u002Fref = 100;",[28,13917,13918],{"class":73},"  \u002F\u002F加入const后不可以修改变量\n",[28,13920,13921,13923,13925,13927,13929],{"class":30,"line":2132},[28,13922,7017],{"class":34},[28,13924,1663],{"class":42},[28,13926,13420],{"class":34},[28,13928,1663],{"class":42},[28,13930,9328],{"class":34},[28,13932,13933],{"class":30,"line":2137},[28,13934,2890],{"emptyLinePlaceholder":562},[28,13936,13937],{"class":30,"line":2143},[28,13938,13939],{"class":73},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[28,13941,13942,13944,13946,13948,13950],{"class":30,"line":2164},[28,13943,2475],{"class":42},[28,13945,11355],{"class":34},[28,13947,83],{"class":42},[28,13949,2528],{"class":38},[28,13951,1781],{"class":34},[28,13953,13954,13957],{"class":30,"line":2169},[28,13955,13956],{"class":2453},"    showValue",[28,13958,13774],{"class":34},[28,13960,13961],{"class":30,"line":2183},[28,13962,2890],{"emptyLinePlaceholder":562},[28,13964,13965,13967,13969,13971],{"class":30,"line":2188},[28,13966,2793],{"class":2453},[28,13968,367],{"class":34},[28,13970,2798],{"class":735},[28,13972,3209],{"class":34},[28,13974,13975],{"class":30,"line":2217},[28,13976,2890],{"emptyLinePlaceholder":562},[28,13978,13979,13981,13983],{"class":30,"line":2222},[28,13980,4578],{"class":42},[28,13982,4581],{"class":38},[28,13984,1781],{"class":34},[28,13986,13987],{"class":30,"line":2239},[28,13988,2055],{"class":34},[547,13990,13991],{},"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":77,"depth":77,"links":13993},[13994,13995,13996,13997,13998,13999],{"id":12526,"depth":77,"text":12527},{"id":12705,"depth":77,"text":12706},{"id":12888,"depth":77,"text":12889},{"id":13292,"depth":77,"text":13293},{"id":13619,"depth":77,"text":13620},{"id":13799,"depth":77,"text":13800},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12518,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14006,"title":14007,"body":14008,"description":23,"extension":560,"meta":15089,"navigation":562,"path":15090,"seo":15091,"stem":15092,"__hash__":15093},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14009,"toc":15081},[14010,14013,14017,14020,14025,14257,14259,14270,14274,14277,14285,14389,14392,14396,14399,14403,14406,14411,14433,14439,14766,14769,14773,14781,15078],[10,14011,14007],{"id":14012},"_7函数高级部分",[60,14014,14016],{"id":14015},"_71函数默认参数","7.1函数默认参数",[14,14018,14019],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,14021,5669,14022],{},[25,14023,14024],{}," 返回值类型  函数名 （参数= 默认值）{}",[18,14026,14028],{"className":626,"code":14027,"language":628,"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,14029,14030,14065,14080,14084,14088,14093,14098,14127,14147,14157,14161,14165,14173,14177,14205,14227,14231,14241,14245,14253],{"__ignoreMap":23},[28,14031,14032,14034,14036,14038,14040,14042,14044,14046,14048,14051,14053,14055,14057,14059,14061,14063],{"class":30,"line":31},[28,14033,640],{"class":42},[28,14035,11871],{"class":2453},[28,14037,367],{"class":34},[28,14039,640],{"class":42},[28,14041,1889],{"class":5704},[28,14043,12921],{"class":34},[28,14045,640],{"class":42},[28,14047,3323],{"class":5704},[28,14049,14050],{"class":42}," =",[28,14052,2528],{"class":38},[28,14054,12921],{"class":34},[28,14056,640],{"class":42},[28,14058,3339],{"class":5704},[28,14060,14050],{"class":42},[28,14062,2528],{"class":38},[28,14064,12928],{"class":34},[28,14066,14067,14069,14071,14073,14075,14077],{"class":30,"line":77},[28,14068,4578],{"class":42},[28,14070,11355],{"class":34},[28,14072,1104],{"class":42},[28,14074,11368],{"class":34},[28,14076,1104],{"class":42},[28,14078,14079],{"class":34}," c;\n",[28,14081,14082],{"class":30,"line":114},[28,14083,2055],{"class":34},[28,14085,14086],{"class":30,"line":128},[28,14087,2890],{"emptyLinePlaceholder":562},[28,14089,14090],{"class":30,"line":393},[28,14091,14092],{"class":73},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[28,14094,14095],{"class":30,"line":409},[28,14096,14097],{"class":73},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[28,14099,14100,14102,14105,14107,14109,14111,14113,14115,14117,14119,14121,14123,14125],{"class":30,"line":1711},[28,14101,640],{"class":42},[28,14103,14104],{"class":2453}," func2",[28,14106,367],{"class":34},[28,14108,640],{"class":42},[28,14110,1889],{"class":5704},[28,14112,14050],{"class":42},[28,14114,2528],{"class":38},[28,14116,12921],{"class":34},[28,14118,640],{"class":42},[28,14120,3323],{"class":5704},[28,14122,14050],{"class":42},[28,14124,2528],{"class":38},[28,14126,3209],{"class":34},[28,14128,14129,14131,14133,14135,14137,14139,14141,14143,14145],{"class":30,"line":1802},[28,14130,640],{"class":42},[28,14132,14104],{"class":2453},[28,14134,367],{"class":34},[28,14136,640],{"class":42},[28,14138,1889],{"class":5704},[28,14140,12921],{"class":34},[28,14142,640],{"class":42},[28,14144,3323],{"class":5704},[28,14146,12928],{"class":34},[28,14148,14149,14151,14153,14155],{"class":30,"line":1808},[28,14150,4578],{"class":42},[28,14152,11355],{"class":34},[28,14154,1104],{"class":42},[28,14156,12949],{"class":34},[28,14158,14159],{"class":30,"line":1820},[28,14160,2055],{"class":34},[28,14162,14163],{"class":30,"line":2102},[28,14164,2890],{"emptyLinePlaceholder":562},[28,14166,14167,14169,14171],{"class":30,"line":2107},[28,14168,640],{"class":42},[28,14170,2463],{"class":2453},[28,14172,11339],{"class":34},[28,14174,14175],{"class":30,"line":2113},[28,14176,2890],{"emptyLinePlaceholder":562},[28,14178,14179,14181,14183,14186,14188,14190,14192,14194,14196,14198,14201,14203],{"class":30,"line":2118},[28,14180,7017],{"class":34},[28,14182,1663],{"class":42},[28,14184,14185],{"class":735}," \"ret = \"",[28,14187,1935],{"class":42},[28,14189,11871],{"class":2453},[28,14191,367],{"class":34},[28,14193,1320],{"class":38},[28,14195,12921],{"class":34},[28,14197,1320],{"class":38},[28,14199,14200],{"class":34},") ",[28,14202,1663],{"class":42},[28,14204,9328],{"class":34},[28,14206,14207,14209,14211,14213,14215,14217,14219,14221,14223,14225],{"class":30,"line":2132},[28,14208,7017],{"class":34},[28,14210,1663],{"class":42},[28,14212,14185],{"class":735},[28,14214,1935],{"class":42},[28,14216,11871],{"class":2453},[28,14218,367],{"class":34},[28,14220,938],{"class":38},[28,14222,14200],{"class":34},[28,14224,1663],{"class":42},[28,14226,9328],{"class":34},[28,14228,14229],{"class":30,"line":2137},[28,14230,2890],{"emptyLinePlaceholder":562},[28,14232,14233,14235,14237,14239],{"class":30,"line":2143},[28,14234,2793],{"class":2453},[28,14236,367],{"class":34},[28,14238,2798],{"class":735},[28,14240,3209],{"class":34},[28,14242,14243],{"class":30,"line":2164},[28,14244,2890],{"emptyLinePlaceholder":562},[28,14246,14247,14249,14251],{"class":30,"line":2169},[28,14248,4578],{"class":42},[28,14250,4581],{"class":38},[28,14252,1781],{"class":34},[28,14254,14255],{"class":30,"line":2183},[28,14256,2055],{"class":34},[14,14258,11818],{},[588,14260,14261,14264,14267],{},[591,14262,14263],{},"我传就用我；没传就用你",[591,14265,14266],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[591,14268,14269],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[60,14271,14273],{"id":14272},"_72函数的占位参数","7.2函数的占位参数",[14,14275,14276],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14278,14279,14281,14282],{},[780,14280,5669],{}," ",[25,14283,14284],{},"返回值类型 函数名 (数据类型){}",[18,14286,14288],{"className":626,"code":14287,"language":628,"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,14289,14290,14295,14313,14326,14330,14338,14342,14359,14363,14373,14377,14385],{"__ignoreMap":23},[28,14291,14292],{"class":30,"line":31},[28,14293,14294],{"class":73},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[28,14296,14297,14299,14301,14303,14305,14307,14309,14311],{"class":30,"line":77},[28,14298,5852],{"class":42},[28,14300,11871],{"class":2453},[28,14302,367],{"class":34},[28,14304,640],{"class":42},[28,14306,1889],{"class":5704},[28,14308,12921],{"class":34},[28,14310,640],{"class":42},[28,14312,12928],{"class":34},[28,14314,14315,14317,14319,14322,14324],{"class":30,"line":114},[28,14316,7017],{"class":34},[28,14318,1663],{"class":42},[28,14320,14321],{"class":735}," \"this is func\"",[28,14323,1935],{"class":42},[28,14325,9328],{"class":34},[28,14327,14328],{"class":30,"line":128},[28,14329,2055],{"class":34},[28,14331,14332,14334,14336],{"class":30,"line":393},[28,14333,640],{"class":42},[28,14335,2463],{"class":2453},[28,14337,11339],{"class":34},[28,14339,14340],{"class":30,"line":409},[28,14341,2890],{"emptyLinePlaceholder":562},[28,14343,14344,14346,14348,14350,14352,14354,14356],{"class":30,"line":1711},[28,14345,13771],{"class":2453},[28,14347,367],{"class":34},[28,14349,225],{"class":38},[28,14351,90],{"class":34},[28,14353,225],{"class":38},[28,14355,6454],{"class":34},[28,14357,14358],{"class":73}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[28,14360,14361],{"class":30,"line":1802},[28,14362,2890],{"emptyLinePlaceholder":562},[28,14364,14365,14367,14369,14371],{"class":30,"line":1808},[28,14366,2793],{"class":2453},[28,14368,367],{"class":34},[28,14370,2798],{"class":735},[28,14372,3209],{"class":34},[28,14374,14375],{"class":30,"line":1820},[28,14376,2890],{"emptyLinePlaceholder":562},[28,14378,14379,14381,14383],{"class":30,"line":2102},[28,14380,4578],{"class":42},[28,14382,4581],{"class":38},[28,14384,1781],{"class":34},[28,14386,14387],{"class":30,"line":2107},[28,14388,2055],{"class":34},[14,14390,14391],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[60,14393,14395],{"id":14394},"_73函数重载","7.3函数重载",[14,14397,14398],{},"意思是函数名是可以相同的",[605,14400,14402],{"id":14401},"_731基本语法","7.3.1基本语法",[14,14404,14405],{},"作用：函数名可以相同，提高复用性",[14,14407,14408],{},[780,14409,14410],{},"函数重载满足条件：",[1626,14412,14413,14416,14419],{},[591,14414,14415],{},"同一个作用域下",[591,14417,14418],{},"函数名称相同",[591,14420,14421,14422,14425,14426,14429,14430],{},"函数参数",[780,14423,14424],{},"类型不同","  或者 ",[780,14427,14428],{},"个数不同"," 或者 ",[780,14431,14432],{},"顺序不同",[14,14434,14435,14438],{},[780,14436,14437],{},"注意:","  函数的返回值不可以作为函数重载的条件",[18,14440,14442],{"className":10427,"code":14441,"language":10429,"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,14443,14444,14449,14457,14461,14474,14478,14492,14496,14509,14513,14528,14532,14545,14549,14570,14574,14587,14591,14611,14615,14628,14632,14636,14641,14646,14651,14656,14661,14665,14669,14677,14681,14687,14697,14707,14721,14736,14740,14750,14754,14762],{"__ignoreMap":23},[28,14445,14446],{"class":30,"line":31},[28,14447,14448],{"class":73},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[28,14450,14451,14453,14455],{"class":30,"line":77},[28,14452,5852],{"class":42},[28,14454,11871],{"class":2453},[28,14456,2466],{"class":34},[28,14458,14459],{"class":30,"line":114},[28,14460,2036],{"class":34},[28,14462,14463,14465,14467,14470,14472],{"class":30,"line":128},[28,14464,7017],{"class":34},[28,14466,1663],{"class":42},[28,14468,14469],{"class":735}," \"func 的调用！\"",[28,14471,1935],{"class":42},[28,14473,9328],{"class":34},[28,14475,14476],{"class":30,"line":393},[28,14477,2055],{"class":34},[28,14479,14480,14482,14484,14486,14488,14490],{"class":30,"line":409},[28,14481,5852],{"class":42},[28,14483,11871],{"class":2453},[28,14485,367],{"class":34},[28,14487,640],{"class":42},[28,14489,1889],{"class":5704},[28,14491,228],{"class":34},[28,14493,14494],{"class":30,"line":1711},[28,14495,2036],{"class":34},[28,14497,14498,14500,14502,14505,14507],{"class":30,"line":1802},[28,14499,7017],{"class":34},[28,14501,1663],{"class":42},[28,14503,14504],{"class":735}," \"func (int a) 的调用！\"",[28,14506,1935],{"class":42},[28,14508,9328],{"class":34},[28,14510,14511],{"class":30,"line":1808},[28,14512,2055],{"class":34},[28,14514,14515,14517,14519,14521,14524,14526],{"class":30,"line":1820},[28,14516,5852],{"class":42},[28,14518,11871],{"class":2453},[28,14520,367],{"class":34},[28,14522,14523],{"class":42},"double",[28,14525,1889],{"class":5704},[28,14527,228],{"class":34},[28,14529,14530],{"class":30,"line":2102},[28,14531,2036],{"class":34},[28,14533,14534,14536,14538,14541,14543],{"class":30,"line":2107},[28,14535,7017],{"class":34},[28,14537,1663],{"class":42},[28,14539,14540],{"class":735}," \"func (double a)的调用！\"",[28,14542,1935],{"class":42},[28,14544,9328],{"class":34},[28,14546,14547],{"class":30,"line":2113},[28,14548,2055],{"class":34},[28,14550,14551,14553,14555,14557,14559,14561,14564,14566,14568],{"class":30,"line":2118},[28,14552,5852],{"class":42},[28,14554,11871],{"class":2453},[28,14556,367],{"class":34},[28,14558,640],{"class":42},[28,14560,1889],{"class":5704},[28,14562,14563],{"class":34}," ,",[28,14565,14523],{"class":42},[28,14567,3323],{"class":5704},[28,14569,228],{"class":34},[28,14571,14572],{"class":30,"line":2132},[28,14573,2036],{"class":34},[28,14575,14576,14578,14580,14583,14585],{"class":30,"line":2137},[28,14577,7017],{"class":34},[28,14579,1663],{"class":42},[28,14581,14582],{"class":735}," \"func (int a ,double b) 的调用！\"",[28,14584,1935],{"class":42},[28,14586,9328],{"class":34},[28,14588,14589],{"class":30,"line":2143},[28,14590,2055],{"class":34},[28,14592,14593,14595,14597,14599,14601,14603,14605,14607,14609],{"class":30,"line":2164},[28,14594,5852],{"class":42},[28,14596,11871],{"class":2453},[28,14598,367],{"class":34},[28,14600,14523],{"class":42},[28,14602,1889],{"class":5704},[28,14604,14563],{"class":34},[28,14606,640],{"class":42},[28,14608,3323],{"class":5704},[28,14610,228],{"class":34},[28,14612,14613],{"class":30,"line":2169},[28,14614,2036],{"class":34},[28,14616,14617,14619,14621,14624,14626],{"class":30,"line":2183},[28,14618,7017],{"class":34},[28,14620,1663],{"class":42},[28,14622,14623],{"class":735}," \"func (double a ,int b)的调用！\"",[28,14625,1935],{"class":42},[28,14627,9328],{"class":34},[28,14629,14630],{"class":30,"line":2188},[28,14631,2055],{"class":34},[28,14633,14634],{"class":30,"line":2217},[28,14635,2890],{"emptyLinePlaceholder":562},[28,14637,14638],{"class":30,"line":2222},[28,14639,14640],{"class":73},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[28,14642,14643],{"class":30,"line":2239},[28,14644,14645],{"class":73},"\u002F\u002Fint func(double a, int b)\n",[28,14647,14648],{"class":30,"line":2244},[28,14649,14650],{"class":73},"\u002F\u002F{\n",[28,14652,14653],{"class":30,"line":2249},[28,14654,14655],{"class":73},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[28,14657,14658],{"class":30,"line":2254},[28,14659,14660],{"class":73},"\u002F\u002F}\n",[28,14662,14663],{"class":30,"line":2268},[28,14664,2890],{"emptyLinePlaceholder":562},[28,14666,14667],{"class":30,"line":2273},[28,14668,2890],{"emptyLinePlaceholder":562},[28,14670,14671,14673,14675],{"class":30,"line":3067},[28,14672,640],{"class":42},[28,14674,2463],{"class":2453},[28,14676,11339],{"class":34},[28,14678,14679],{"class":30,"line":3081},[28,14680,2890],{"emptyLinePlaceholder":562},[28,14682,14683,14685],{"class":30,"line":3089},[28,14684,13771],{"class":2453},[28,14686,6124],{"class":34},[28,14688,14689,14691,14693,14695],{"class":30,"line":3094},[28,14690,13771],{"class":2453},[28,14692,367],{"class":34},[28,14694,225],{"class":38},[28,14696,3209],{"class":34},[28,14698,14699,14701,14703,14705],{"class":30,"line":3100},[28,14700,13771],{"class":2453},[28,14702,367],{"class":34},[28,14704,683],{"class":38},[28,14706,3209],{"class":34},[28,14708,14709,14711,14713,14715,14717,14719],{"class":30,"line":3106},[28,14710,13771],{"class":2453},[28,14712,367],{"class":34},[28,14714,225],{"class":38},[28,14716,90],{"class":34},[28,14718,683],{"class":38},[28,14720,3209],{"class":34},[28,14722,14723,14725,14727,14729,14732,14734],{"class":30,"line":3111},[28,14724,13771],{"class":2453},[28,14726,367],{"class":34},[28,14728,683],{"class":38},[28,14730,14731],{"class":34}," , ",[28,14733,225],{"class":38},[28,14735,3209],{"class":34},[28,14737,14738],{"class":30,"line":8436},[28,14739,13696],{"class":34},[28,14741,14742,14744,14746,14748],{"class":30,"line":8460},[28,14743,2793],{"class":2453},[28,14745,367],{"class":34},[28,14747,2798],{"class":735},[28,14749,3209],{"class":34},[28,14751,14752],{"class":30,"line":8465},[28,14753,2890],{"emptyLinePlaceholder":562},[28,14755,14756,14758,14760],{"class":30,"line":8471},[28,14757,4578],{"class":42},[28,14759,4581],{"class":38},[28,14761,1781],{"class":34},[28,14763,14764],{"class":30,"line":8498},[28,14765,2055],{"class":34},[14,14767,14768],{},"重点：函数返回值不可以作为函数重载条件！",[605,14770,14772],{"id":14771},"_732注意事项","7.3.2注意事项",[1626,14774,14775,14778],{},[591,14776,14777],{},"引用作为重载条件!!!",[591,14779,14780],{},"函数重载碰到函数默认参数",[18,14782,14784],{"className":626,"code":14783,"language":628,"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,14785,14786,14791,14796,14800,14816,14820,14833,14837,14841,14859,14863,14876,14880,14884,14888,14893,14897,14921,14925,14938,14942,14946,14960,14964,14977,14981,14985,14993,14997,15009,15019,15032,15036,15040,15048,15052,15062,15066,15074],{"__ignoreMap":23},[28,14787,14788],{"class":30,"line":31},[28,14789,14790],{"class":73},"\u002F\u002F函数重载注意事项\n",[28,14792,14793],{"class":30,"line":77},[28,14794,14795],{"class":73},"\u002F\u002F1、引用作为重载条件\n",[28,14797,14798],{"class":30,"line":114},[28,14799,2890],{"emptyLinePlaceholder":562},[28,14801,14802,14804,14806,14808,14810,14812,14814],{"class":30,"line":128},[28,14803,5852],{"class":42},[28,14805,11871],{"class":2453},[28,14807,367],{"class":34},[28,14809,640],{"class":42},[28,14811,11070],{"class":42},[28,14813,80],{"class":5704},[28,14815,228],{"class":34},[28,14817,14818],{"class":30,"line":393},[28,14819,2036],{"class":34},[28,14821,14822,14824,14826,14829,14831],{"class":30,"line":409},[28,14823,7017],{"class":34},[28,14825,1663],{"class":42},[28,14827,14828],{"class":735}," \"func (int &a) 调用 \"",[28,14830,1935],{"class":42},[28,14832,9328],{"class":34},[28,14834,14835],{"class":30,"line":1711},[28,14836,2055],{"class":34},[28,14838,14839],{"class":30,"line":1802},[28,14840,2890],{"emptyLinePlaceholder":562},[28,14842,14843,14845,14847,14849,14851,14853,14855,14857],{"class":30,"line":1808},[28,14844,5852],{"class":42},[28,14846,11871],{"class":2453},[28,14848,367],{"class":34},[28,14850,7280],{"class":42},[28,14852,2872],{"class":42},[28,14854,11070],{"class":42},[28,14856,80],{"class":5704},[28,14858,228],{"class":34},[28,14860,14861],{"class":30,"line":1820},[28,14862,2036],{"class":34},[28,14864,14865,14867,14869,14872,14874],{"class":30,"line":2102},[28,14866,7017],{"class":34},[28,14868,1663],{"class":42},[28,14870,14871],{"class":735}," \"func (const int &a) 调用 \"",[28,14873,1935],{"class":42},[28,14875,9328],{"class":34},[28,14877,14878],{"class":30,"line":2107},[28,14879,2055],{"class":34},[28,14881,14882],{"class":30,"line":2113},[28,14883,2890],{"emptyLinePlaceholder":562},[28,14885,14886],{"class":30,"line":2118},[28,14887,2890],{"emptyLinePlaceholder":562},[28,14889,14890],{"class":30,"line":2132},[28,14891,14892],{"class":73},"\u002F\u002F2、函数重载碰到函数默认参数\n",[28,14894,14895],{"class":30,"line":2137},[28,14896,2890],{"emptyLinePlaceholder":562},[28,14898,14899,14901,14903,14905,14907,14909,14911,14913,14915,14917,14919],{"class":30,"line":2143},[28,14900,5852],{"class":42},[28,14902,14104],{"class":2453},[28,14904,367],{"class":34},[28,14906,640],{"class":42},[28,14908,1889],{"class":5704},[28,14910,12921],{"class":34},[28,14912,640],{"class":42},[28,14914,3323],{"class":5704},[28,14916,14050],{"class":42},[28,14918,2528],{"class":38},[28,14920,228],{"class":34},[28,14922,14923],{"class":30,"line":2164},[28,14924,2036],{"class":34},[28,14926,14927,14929,14931,14934,14936],{"class":30,"line":2169},[28,14928,7017],{"class":34},[28,14930,1663],{"class":42},[28,14932,14933],{"class":735}," \"func2(int a, int b = 10) 调用\"",[28,14935,1935],{"class":42},[28,14937,9328],{"class":34},[28,14939,14940],{"class":30,"line":2183},[28,14941,2055],{"class":34},[28,14943,14944],{"class":30,"line":2188},[28,14945,2890],{"emptyLinePlaceholder":562},[28,14947,14948,14950,14952,14954,14956,14958],{"class":30,"line":2217},[28,14949,5852],{"class":42},[28,14951,14104],{"class":2453},[28,14953,367],{"class":34},[28,14955,640],{"class":42},[28,14957,1889],{"class":5704},[28,14959,228],{"class":34},[28,14961,14962],{"class":30,"line":2222},[28,14963,2036],{"class":34},[28,14965,14966,14968,14970,14973,14975],{"class":30,"line":2239},[28,14967,7017],{"class":34},[28,14969,1663],{"class":42},[28,14971,14972],{"class":735}," \"func2(int a) 调用\"",[28,14974,1935],{"class":42},[28,14976,9328],{"class":34},[28,14978,14979],{"class":30,"line":2244},[28,14980,2055],{"class":34},[28,14982,14983],{"class":30,"line":2249},[28,14984,2890],{"emptyLinePlaceholder":562},[28,14986,14987,14989,14991],{"class":30,"line":2254},[28,14988,640],{"class":42},[28,14990,2463],{"class":2453},[28,14992,11339],{"class":34},[28,14994,14995],{"class":30,"line":2268},[28,14996,13696],{"class":34},[28,14998,14999,15001,15003,15005,15007],{"class":30,"line":2273},[28,15000,2475],{"class":42},[28,15002,11355],{"class":34},[28,15004,83],{"class":42},[28,15006,2528],{"class":38},[28,15008,1781],{"class":34},[28,15010,15011,15013,15016],{"class":30,"line":3067},[28,15012,13771],{"class":2453},[28,15014,15015],{"class":34},"(a);",[28,15017,15018],{"class":73}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[28,15020,15021,15023,15025,15027,15029],{"class":30,"line":3081},[28,15022,13771],{"class":2453},[28,15024,367],{"class":34},[28,15026,225],{"class":38},[28,15028,6454],{"class":34},[28,15030,15031],{"class":73},"\u002F\u002F调用有const   10是个常量\n",[28,15033,15034],{"class":30,"line":3089},[28,15035,2890],{"emptyLinePlaceholder":562},[28,15037,15038],{"class":30,"line":3094},[28,15039,2890],{"emptyLinePlaceholder":562},[28,15041,15042,15045],{"class":30,"line":3100},[28,15043,15044],{"class":73},"    \u002F\u002Ffunc2(10);",[28,15046,15047],{"class":73}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[28,15049,15050],{"class":30,"line":3106},[28,15051,2890],{"emptyLinePlaceholder":562},[28,15053,15054,15056,15058,15060],{"class":30,"line":3111},[28,15055,2793],{"class":2453},[28,15057,367],{"class":34},[28,15059,2798],{"class":735},[28,15061,3209],{"class":34},[28,15063,15064],{"class":30,"line":8436},[28,15065,2890],{"emptyLinePlaceholder":562},[28,15067,15068,15070,15072],{"class":30,"line":8460},[28,15069,4578],{"class":42},[28,15071,4581],{"class":38},[28,15073,1781],{"class":34},[28,15075,15076],{"class":30,"line":8465},[28,15077,2055],{"class":34},[547,15079,15080],{},"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":77,"depth":77,"links":15082},[15083,15084,15085],{"id":14015,"depth":77,"text":14016},{"id":14272,"depth":77,"text":14273},{"id":14394,"depth":77,"text":14395,"children":15086},[15087,15088],{"id":14401,"depth":114,"text":14402},{"id":14771,"depth":114,"text":14772},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14007,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15095,"title":15096,"body":15097,"description":23851,"extension":560,"meta":23852,"navigation":562,"path":23853,"seo":23854,"stem":23855,"__hash__":23856},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15098,"toc":23832},[15099,15102,15108,15115,15120,15123,15126,15129,15133,15137,15140,15143,15151,15156,15159,15166,15171,15330,15333,15586,15589,15592,15595,15600,15603,15606,15617,15622,15858,15862,15872,15875,15883,16030,16034,16037,16040,16044,16489,16493,16501,16509,17421,17428,17433,18061,18064,18067,18070,18189,18192,18279,18282,18408,18411,18505,18508,18861,18865,18873,18877,18884,18887,18890,18901,18907,18912,18924,18932,18952,18960,18977,19163,19166,19170,19173,19176,19179,19182,19185,19188,19191,19651,19657,19661,19664,19675,20262,20265,20754,20758,20761,20764,20767,20770,20773,20781,21177,21181,21184,21187,21634,21637,21640,21645,21648,21653,21656,21660,21663,21665,21671,21674,21980,21990,22031,22035,22038,22040,22073,22076,22383,22385,22400,22403,22426,22435,22441,22444,22448,22451,22454,22459,22470,22475,22483,22488,22618,22621,22624,22799,22804,23016,23020,23023,23137,23142,23381,23385,23389,23392,23395,23400,23505,23508,23511,23514,23518,23629,23632,23635,23640,23692,23695,23698,23703,23749,23752,23757,23825,23827,23830],[10,15100,15096],{"id":15101},"_8类和对象",[14,15103,15104,15105],{},"C++面向对象的三大特性为",[780,15106,15107],{},"封装、继承、多态",[14,15109,15110,15111,15114],{},"C++认为",[780,15112,15113],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15116,15117],{},[780,15118,15119],{},"例如：",[14,15121,15122],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15124,15125],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15127,15128],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[60,15130,15132],{"id":15131},"_81封装","8.1封装",[605,15134,15136],{"id":15135},"_811封装的意义","8.1.1封装的意义",[14,15138,15139],{},"封装是C++面向对象三大特性之一",[14,15141,15142],{},"封装的意义：",[1626,15144,15145,15148],{},[591,15146,15147],{},"将属性和行为作为一个整体，表现生活中的事物",[591,15149,15150],{},"将属性和行为加以权限控制",[14,15152,15153],{},[780,15154,15155],{},"封装意义一：",[14,15157,15158],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15160,15161,14281,15163],{},[780,15162,5669],{},[25,15164,15165],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[588,15167,15168],{},[591,15169,15170],{},"**示例1：**设计一个圆类，求圆的周长",[18,15172,15174],{"className":626,"code":15173,"language":628,"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,15175,15176,15184,15188,15193,15198,15203,15208,15215,15220,15230,15234,15252,15256,15260,15268,15272,15277,15282,15287,15292,15303,15326],{"__ignoreMap":23},[28,15177,15178,15181],{"class":30,"line":31},[28,15179,15180],{"class":42},"class",[28,15182,15183],{"class":2453}," Circle\n",[28,15185,15186],{"class":30,"line":77},[28,15187,2036],{"class":34},[28,15189,15190],{"class":30,"line":114},[28,15191,15192],{"class":73},"    \u002F\u002F访问权限\n",[28,15194,15195],{"class":30,"line":128},[28,15196,15197],{"class":73},"    \u002F\u002F公共权限\n",[28,15199,15200],{"class":30,"line":393},[28,15201,15202],{"class":42},"public:\n",[28,15204,15205],{"class":30,"line":409},[28,15206,15207],{"class":73},"    \u002F\u002F属性\n",[28,15209,15210,15212],{"class":30,"line":1711},[28,15211,2475],{"class":42},[28,15213,15214],{"class":34}," m_r;\n",[28,15216,15217],{"class":30,"line":1802},[28,15218,15219],{"class":73},"    \u002F\u002F行为\n",[28,15221,15222,15225,15228],{"class":30,"line":1808},[28,15223,15224],{"class":42},"    double",[28,15226,15227],{"class":2453}," calculateZC",[28,15229,2466],{"class":34},[28,15231,15232],{"class":30,"line":1820},[28,15233,2520],{"class":34},[28,15235,15236,15239,15242,15244,15247,15249],{"class":30,"line":2102},[28,15237,15238],{"class":42},"        return",[28,15240,15241],{"class":38}," 2",[28,15243,256],{"class":42},[28,15245,15246],{"class":34},"PI",[28,15248,256],{"class":42},[28,15250,15251],{"class":34},"m_r;\n",[28,15253,15254],{"class":30,"line":2107},[28,15255,2677],{"class":34},[28,15257,15258],{"class":30,"line":2113},[28,15259,4483],{"class":34},[28,15261,15262,15264,15266],{"class":30,"line":2118},[28,15263,640],{"class":42},[28,15265,2463],{"class":2453},[28,15267,2466],{"class":34},[28,15269,15270],{"class":30,"line":2132},[28,15271,2036],{"class":34},[28,15273,15274],{"class":30,"line":2137},[28,15275,15276],{"class":73},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[28,15278,15279],{"class":30,"line":2143},[28,15280,15281],{"class":73},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[28,15283,15284],{"class":30,"line":2164},[28,15285,15286],{"class":34},"    Circle c1;\n",[28,15288,15289],{"class":30,"line":2169},[28,15290,15291],{"class":73},"    \u002F\u002F给圆对象 的属性进行赋值\n",[28,15293,15294,15297,15299,15301],{"class":30,"line":2183},[28,15295,15296],{"class":34},"    c1.m_r",[28,15298,83],{"class":42},[28,15300,225],{"class":38},[28,15302,1781],{"class":34},[28,15304,15305,15307,15309,15312,15314,15317,15320,15322,15324],{"class":30,"line":2188},[28,15306,2041],{"class":34},[28,15308,1663],{"class":42},[28,15310,15311],{"class":735},"\"圆的周长\"",[28,15313,1663],{"class":42},[28,15315,15316],{"class":34},"c1.",[28,15318,15319],{"class":2453},"calculateZC",[28,15321,2917],{"class":34},[28,15323,1663],{"class":42},[28,15325,1685],{"class":34},[28,15327,15328],{"class":30,"line":2217},[28,15329,2055],{"class":34},[14,15331,15332],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[18,15334,15336],{"className":626,"code":15335,"language":628,"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,15337,15338,15344,15354,15360,15366,15370,15374,15379,15386,15391,15409,15413,15423,15427,15432,15448,15452,15462,15466,15471,15479,15483,15515,15519,15523,15531,15535,15540,15545,15559,15573,15582],{"__ignoreMap":23},[28,15339,15340,15342],{"class":30,"line":31},[28,15341,2439],{"class":42},[28,15343,2442],{"class":735},[28,15345,15346,15348,15350,15352],{"class":30,"line":77},[28,15347,2447],{"class":42},[28,15349,2450],{"class":42},[28,15351,2454],{"class":2453},[28,15353,1781],{"class":34},[28,15355,15356,15358],{"class":30,"line":114},[28,15357,2439],{"class":42},[28,15359,8237],{"class":735},[28,15361,15362,15364],{"class":30,"line":128},[28,15363,15180],{"class":42},[28,15365,8250],{"class":2453},[28,15367,15368],{"class":30,"line":393},[28,15369,2036],{"class":34},[28,15371,15372],{"class":30,"line":409},[28,15373,15202],{"class":42},[28,15375,15376],{"class":30,"line":1711},[28,15377,15378],{"class":34},"    string m_name;\n",[28,15380,15381,15383],{"class":30,"line":1802},[28,15382,2475],{"class":42},[28,15384,15385],{"class":34}," m_id;\n",[28,15387,15388],{"class":30,"line":1808},[28,15389,15390],{"class":73},"    \u002F\u002F赋值姓名\n",[28,15392,15393,15396,15399,15401,15404,15407],{"class":30,"line":1820},[28,15394,15395],{"class":42},"    void",[28,15397,15398],{"class":2453}," setName",[28,15400,367],{"class":34},[28,15402,15403],{"class":2453},"string",[28,15405,15406],{"class":5704}," name",[28,15408,228],{"class":34},[28,15410,15411],{"class":30,"line":2102},[28,15412,2520],{"class":34},[28,15414,15415,15418,15420],{"class":30,"line":2107},[28,15416,15417],{"class":34},"        m_name",[28,15419,83],{"class":42},[28,15421,15422],{"class":34},"name;\n",[28,15424,15425],{"class":30,"line":2113},[28,15426,2677],{"class":34},[28,15428,15429],{"class":30,"line":2118},[28,15430,15431],{"class":73},"    \u002F\u002F赋值学号\n",[28,15433,15434,15436,15439,15441,15443,15446],{"class":30,"line":2132},[28,15435,15395],{"class":42},[28,15437,15438],{"class":2453}," setId",[28,15440,367],{"class":34},[28,15442,640],{"class":42},[28,15444,15445],{"class":5704}," id",[28,15447,228],{"class":34},[28,15449,15450],{"class":30,"line":2137},[28,15451,2520],{"class":34},[28,15453,15454,15457,15459],{"class":30,"line":2143},[28,15455,15456],{"class":34},"        m_id",[28,15458,83],{"class":42},[28,15460,15461],{"class":34},"id;\n",[28,15463,15464],{"class":30,"line":2164},[28,15465,2677],{"class":34},[28,15467,15468],{"class":30,"line":2169},[28,15469,15470],{"class":73},"    \u002F\u002F打印学生信息\n",[28,15472,15473,15475,15477],{"class":30,"line":2183},[28,15474,15395],{"class":42},[28,15476,10101],{"class":2453},[28,15478,2466],{"class":34},[28,15480,15481],{"class":30,"line":2188},[28,15482,2520],{"class":34},[28,15484,15485,15487,15489,15492,15494,15497,15499,15501,15503,15506,15508,15511,15513],{"class":30,"line":2217},[28,15486,3939],{"class":34},[28,15488,1663],{"class":42},[28,15490,15491],{"class":735},"\"姓名：\"",[28,15493,1663],{"class":42},[28,15495,15496],{"class":34},"m_name",[28,15498,1663],{"class":42},[28,15500,4847],{"class":735},[28,15502,1663],{"class":42},[28,15504,15505],{"class":735},"\"学号：\"",[28,15507,1663],{"class":42},[28,15509,15510],{"class":34},"m_id",[28,15512,1663],{"class":42},[28,15514,1685],{"class":34},[28,15516,15517],{"class":30,"line":2222},[28,15518,2677],{"class":34},[28,15520,15521],{"class":30,"line":2239},[28,15522,4483],{"class":34},[28,15524,15525,15527,15529],{"class":30,"line":2244},[28,15526,640],{"class":42},[28,15528,2463],{"class":2453},[28,15530,2466],{"class":34},[28,15532,15533],{"class":30,"line":2249},[28,15534,2036],{"class":34},[28,15536,15537],{"class":30,"line":2254},[28,15538,15539],{"class":73},"    \u002F\u002F实例化\n",[28,15541,15542],{"class":30,"line":2268},[28,15543,15544],{"class":34},"    Student s1;\n",[28,15546,15547,15550,15553,15555,15557],{"class":30,"line":2273},[28,15548,15549],{"class":34},"    s1.",[28,15551,15552],{"class":2453},"setName",[28,15554,367],{"class":34},[28,15556,8404],{"class":735},[28,15558,3209],{"class":34},[28,15560,15561,15563,15566,15568,15571],{"class":30,"line":3067},[28,15562,15549],{"class":34},[28,15564,15565],{"class":2453},"setId",[28,15567,367],{"class":34},[28,15569,15570],{"class":38},"123456",[28,15572,3209],{"class":34},[28,15574,15575,15577,15580],{"class":30,"line":3081},[28,15576,15549],{"class":34},[28,15578,15579],{"class":2453},"printInfo",[28,15581,6124],{"class":34},[28,15583,15584],{"class":30,"line":3089},[28,15585,2055],{"class":34},[14,15587,15588],{},"类中的属性和行为统称为成员",[14,15590,15591],{},"属性：成员属性(成员变量)",[14,15593,15594],{},"方法：成员函数(成员方法)",[14,15596,15597],{},[780,15598,15599],{},"封装意义二：",[14,15601,15602],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15604,15605],{},"访问权限有三种：",[588,15607,15608,15611,15614],{},[591,15609,15610],{},"public        公共权限",[591,15612,15613],{},"protected 保护权限",[591,15615,15616],{},"private      私有权限",[14,15618,15619],{},[780,15620,15621],{},"示例：",[18,15623,15625],{"className":10427,"code":15624,"language":10429,"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,15626,15627,15632,15637,15642,15647,15651,15658,15662,15667,15671,15676,15680,15685,15690,15695,15699,15704,15709,15716,15720,15724,15732,15736,15747,15759,15771,15775,15779,15783,15791,15795,15800,15812,15820,15828,15832,15842,15846,15854],{"__ignoreMap":23},[28,15628,15629],{"class":30,"line":31},[28,15630,15631],{"class":73},"\u002F\u002F三种权限\n",[28,15633,15634],{"class":30,"line":77},[28,15635,15636],{"class":73},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[28,15638,15639],{"class":30,"line":114},[28,15640,15641],{"class":73},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[28,15643,15644],{"class":30,"line":128},[28,15645,15646],{"class":73},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[28,15648,15649],{"class":30,"line":393},[28,15650,2890],{"emptyLinePlaceholder":562},[28,15652,15653,15655],{"class":30,"line":409},[28,15654,15180],{"class":42},[28,15656,15657],{"class":2453}," Person\n",[28,15659,15660],{"class":30,"line":1711},[28,15661,2036],{"class":34},[28,15663,15664],{"class":30,"line":1802},[28,15665,15666],{"class":73},"    \u002F\u002F姓名  公共权限\n",[28,15668,15669],{"class":30,"line":1808},[28,15670,15202],{"class":42},[28,15672,15673],{"class":30,"line":1820},[28,15674,15675],{"class":34},"    string m_Name;\n",[28,15677,15678],{"class":30,"line":2102},[28,15679,2890],{"emptyLinePlaceholder":562},[28,15681,15682],{"class":30,"line":2107},[28,15683,15684],{"class":73},"    \u002F\u002F汽车  保护权限\n",[28,15686,15687],{"class":30,"line":2113},[28,15688,15689],{"class":42},"protected:\n",[28,15691,15692],{"class":30,"line":2118},[28,15693,15694],{"class":34},"    string m_Car;\n",[28,15696,15697],{"class":30,"line":2132},[28,15698,2890],{"emptyLinePlaceholder":562},[28,15700,15701],{"class":30,"line":2137},[28,15702,15703],{"class":73},"    \u002F\u002F银行卡密码  私有权限\n",[28,15705,15706],{"class":30,"line":2143},[28,15707,15708],{"class":42},"private:\n",[28,15710,15711,15713],{"class":30,"line":2164},[28,15712,2475],{"class":42},[28,15714,15715],{"class":34}," m_Password;\n",[28,15717,15718],{"class":30,"line":2169},[28,15719,2890],{"emptyLinePlaceholder":562},[28,15721,15722],{"class":30,"line":2183},[28,15723,15202],{"class":42},[28,15725,15726,15728,15730],{"class":30,"line":2188},[28,15727,15395],{"class":42},[28,15729,11871],{"class":2453},[28,15731,2466],{"class":34},[28,15733,15734],{"class":30,"line":2217},[28,15735,2520],{"class":34},[28,15737,15738,15741,15743,15745],{"class":30,"line":2222},[28,15739,15740],{"class":34},"        m_Name ",[28,15742,83],{"class":42},[28,15744,9426],{"class":735},[28,15746,1781],{"class":34},[28,15748,15749,15752,15754,15757],{"class":30,"line":2239},[28,15750,15751],{"class":34},"        m_Car ",[28,15753,83],{"class":42},[28,15755,15756],{"class":735}," \"拖拉机\"",[28,15758,1781],{"class":34},[28,15760,15761,15764,15766,15769],{"class":30,"line":2244},[28,15762,15763],{"class":34},"        m_Password ",[28,15765,83],{"class":42},[28,15767,15768],{"class":38}," 123456",[28,15770,1781],{"class":34},[28,15772,15773],{"class":30,"line":2249},[28,15774,2677],{"class":34},[28,15776,15777],{"class":30,"line":2254},[28,15778,4483],{"class":34},[28,15780,15781],{"class":30,"line":2268},[28,15782,2890],{"emptyLinePlaceholder":562},[28,15784,15785,15787,15789],{"class":30,"line":2273},[28,15786,640],{"class":42},[28,15788,2463],{"class":2453},[28,15790,11339],{"class":34},[28,15792,15793],{"class":30,"line":3067},[28,15794,2890],{"emptyLinePlaceholder":562},[28,15796,15797],{"class":30,"line":3081},[28,15798,15799],{"class":34},"    Person p;\n",[28,15801,15802,15805,15807,15810],{"class":30,"line":3089},[28,15803,15804],{"class":34},"    p.m_Name ",[28,15806,83],{"class":42},[28,15808,15809],{"class":735}," \"李四\"",[28,15811,1781],{"class":34},[28,15813,15814,15817],{"class":30,"line":3094},[28,15815,15816],{"class":73},"    \u002F\u002Fp.m_Car = \"奔驰\";",[28,15818,15819],{"class":73},"  \u002F\u002F保护权限类外访问不到\n",[28,15821,15822,15825],{"class":30,"line":3100},[28,15823,15824],{"class":73},"    \u002F\u002Fp.m_Password = 123;",[28,15826,15827],{"class":73}," \u002F\u002F私有权限类外访问不到\n",[28,15829,15830],{"class":30,"line":3106},[28,15831,2890],{"emptyLinePlaceholder":562},[28,15833,15834,15836,15838,15840],{"class":30,"line":3111},[28,15835,2793],{"class":2453},[28,15837,367],{"class":34},[28,15839,2798],{"class":735},[28,15841,3209],{"class":34},[28,15843,15844],{"class":30,"line":8436},[28,15845,2890],{"emptyLinePlaceholder":562},[28,15847,15848,15850,15852],{"class":30,"line":8460},[28,15849,4578],{"class":42},[28,15851,4581],{"class":38},[28,15853,1781],{"class":34},[28,15855,15856],{"class":30,"line":8465},[28,15857,2055],{"class":34},[605,15859,15861],{"id":15860},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15863,15864,15865,15868,15869],{},"在C++中 struct和class唯一的",[780,15866,15867],{},"区别","就在于 ",[780,15870,15871],{},"默认的访问权限不同",[14,15873,15874],{},"区别：",[1626,15876,15877,15880],{},[591,15878,15879],{},"struct 默认权限为公共",[591,15881,15882],{},"class   默认权限为私有",[18,15884,15886],{"className":10427,"code":15885,"language":10429,"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,15887,15888,15895,15899,15909,15913,15917,15924,15928,15938,15942,15946,15954,15958,15963,15977,15981,15986,16000,16004,16014,16018,16026],{"__ignoreMap":23},[28,15889,15890,15892],{"class":30,"line":31},[28,15891,15180],{"class":42},[28,15893,15894],{"class":2453}," C1\n",[28,15896,15897],{"class":30,"line":77},[28,15898,2036],{"class":34},[28,15900,15901,15903,15906],{"class":30,"line":114},[28,15902,2475],{"class":42},[28,15904,15905],{"class":34},"  m_A;",[28,15907,15908],{"class":73}," \u002F\u002F默认是私有权限\n",[28,15910,15911],{"class":30,"line":128},[28,15912,4483],{"class":34},[28,15914,15915],{"class":30,"line":393},[28,15916,2890],{"emptyLinePlaceholder":562},[28,15918,15919,15921],{"class":30,"line":409},[28,15920,8247],{"class":42},[28,15922,15923],{"class":2453}," C2\n",[28,15925,15926],{"class":30,"line":1711},[28,15927,2036],{"class":34},[28,15929,15930,15932,15935],{"class":30,"line":1802},[28,15931,2475],{"class":42},[28,15933,15934],{"class":34}," m_A;",[28,15936,15937],{"class":73},"  \u002F\u002F默认是公共权限\n",[28,15939,15940],{"class":30,"line":1808},[28,15941,4483],{"class":34},[28,15943,15944],{"class":30,"line":1820},[28,15945,2890],{"emptyLinePlaceholder":562},[28,15947,15948,15950,15952],{"class":30,"line":2102},[28,15949,640],{"class":42},[28,15951,2463],{"class":2453},[28,15953,11339],{"class":34},[28,15955,15956],{"class":30,"line":2107},[28,15957,2890],{"emptyLinePlaceholder":562},[28,15959,15960],{"class":30,"line":2113},[28,15961,15962],{"class":34},"    C1 c1;\n",[28,15964,15965,15968,15970,15972,15974],{"class":30,"line":2118},[28,15966,15967],{"class":34},"    c1.m_A ",[28,15969,83],{"class":42},[28,15971,2528],{"class":38},[28,15973,689],{"class":34},[28,15975,15976],{"class":73}," \u002F\u002F错误，访问权限是私有\n",[28,15978,15979],{"class":30,"line":2132},[28,15980,2890],{"emptyLinePlaceholder":562},[28,15982,15983],{"class":30,"line":2137},[28,15984,15985],{"class":34},"    C2 c2;\n",[28,15987,15988,15991,15993,15995,15997],{"class":30,"line":2143},[28,15989,15990],{"class":34},"    c2.m_A ",[28,15992,83],{"class":42},[28,15994,2528],{"class":38},[28,15996,689],{"class":34},[28,15998,15999],{"class":73}," \u002F\u002F正确，访问权限是公共\n",[28,16001,16002],{"class":30,"line":2164},[28,16003,2890],{"emptyLinePlaceholder":562},[28,16005,16006,16008,16010,16012],{"class":30,"line":2169},[28,16007,2793],{"class":2453},[28,16009,367],{"class":34},[28,16011,2798],{"class":735},[28,16013,3209],{"class":34},[28,16015,16016],{"class":30,"line":2183},[28,16017,2890],{"emptyLinePlaceholder":562},[28,16019,16020,16022,16024],{"class":30,"line":2188},[28,16021,4578],{"class":42},[28,16023,4581],{"class":38},[28,16025,1781],{"class":34},[28,16027,16028],{"class":30,"line":2217},[28,16029,2055],{"class":34},[605,16031,16033],{"id":16032},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16035,16036],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16038,16039],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16041,16042],{},[780,16043,15621],{},[18,16045,16047],{"className":10427,"code":16046,"language":10429,"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,16048,16049,16059,16063,16067,16072,16086,16095,16099,16109,16113,16120,16124,16128,16132,16137,16146,16153,16157,16162,16178,16201,16214,16221,16225,16234,16238,16242,16247,16263,16273,16277,16281,16285,16293,16297,16307,16311,16319,16323,16327,16335,16339,16343,16348,16361,16384,16388,16393,16406,16428,16432,16437,16451,16459,16463,16473,16477,16485],{"__ignoreMap":23},[28,16050,16051,16053,16056],{"class":30,"line":31},[28,16052,15180],{"class":42},[28,16054,16055],{"class":2453}," Person",[28,16057,16058],{"class":34}," {\n",[28,16060,16061],{"class":30,"line":77},[28,16062,15202],{"class":42},[28,16064,16065],{"class":30,"line":114},[28,16066,2890],{"emptyLinePlaceholder":562},[28,16068,16069],{"class":30,"line":128},[28,16070,16071],{"class":73},"    \u002F\u002F姓名设置可读可写\n",[28,16073,16074,16076,16078,16080,16082,16084],{"class":30,"line":393},[28,16075,15395],{"class":42},[28,16077,15398],{"class":2453},[28,16079,367],{"class":34},[28,16081,15403],{"class":2453},[28,16083,15406],{"class":5704},[28,16085,12928],{"class":34},[28,16087,16088,16090,16092],{"class":30,"line":409},[28,16089,15740],{"class":34},[28,16091,83],{"class":42},[28,16093,16094],{"class":34}," name;\n",[28,16096,16097],{"class":30,"line":1711},[28,16098,2677],{"class":34},[28,16100,16101,16104,16107],{"class":30,"line":1802},[28,16102,16103],{"class":2453},"    string",[28,16105,16106],{"class":2453}," getName",[28,16108,2466],{"class":34},[28,16110,16111],{"class":30,"line":1808},[28,16112,2520],{"class":34},[28,16114,16115,16117],{"class":30,"line":1820},[28,16116,15238],{"class":42},[28,16118,16119],{"class":34}," m_Name;\n",[28,16121,16122],{"class":30,"line":2102},[28,16123,2677],{"class":34},[28,16125,16126],{"class":30,"line":2107},[28,16127,2890],{"emptyLinePlaceholder":562},[28,16129,16130],{"class":30,"line":2113},[28,16131,2890],{"emptyLinePlaceholder":562},[28,16133,16134],{"class":30,"line":2118},[28,16135,16136],{"class":73},"    \u002F\u002F获取年龄 \n",[28,16138,16139,16141,16144],{"class":30,"line":2132},[28,16140,2475],{"class":42},[28,16142,16143],{"class":2453}," getAge",[28,16145,11339],{"class":34},[28,16147,16148,16150],{"class":30,"line":2137},[28,16149,15238],{"class":42},[28,16151,16152],{"class":34}," m_Age;\n",[28,16154,16155],{"class":30,"line":2143},[28,16156,2677],{"class":34},[28,16158,16159],{"class":30,"line":2164},[28,16160,16161],{"class":73},"    \u002F\u002F设置年龄\n",[28,16163,16164,16166,16169,16171,16173,16176],{"class":30,"line":2169},[28,16165,15395],{"class":42},[28,16167,16168],{"class":2453}," setAge",[28,16170,367],{"class":34},[28,16172,640],{"class":42},[28,16174,16175],{"class":5704}," age",[28,16177,12928],{"class":34},[28,16179,16180,16182,16185,16187,16189,16191,16194,16196,16199],{"class":30,"line":2183},[28,16181,2987],{"class":42},[28,16183,16184],{"class":34}," (age ",[28,16186,1529],{"class":42},[28,16188,4581],{"class":38},[28,16190,3743],{"class":42},[28,16192,16193],{"class":34}," age ",[28,16195,1579],{"class":42},[28,16197,16198],{"class":38}," 150",[28,16200,12928],{"class":34},[28,16202,16203,16205,16207,16210,16212],{"class":30,"line":2188},[28,16204,10205],{"class":34},[28,16206,1663],{"class":42},[28,16208,16209],{"class":735}," \"你个老妖精!\"",[28,16211,1935],{"class":42},[28,16213,9328],{"class":34},[28,16215,16216,16219],{"class":30,"line":2217},[28,16217,16218],{"class":42},"            return",[28,16220,1781],{"class":34},[28,16222,16223],{"class":30,"line":2222},[28,16224,3019],{"class":34},[28,16226,16227,16230,16232],{"class":30,"line":2239},[28,16228,16229],{"class":34},"        m_Age ",[28,16231,83],{"class":42},[28,16233,8285],{"class":34},[28,16235,16236],{"class":30,"line":2244},[28,16237,2677],{"class":34},[28,16239,16240],{"class":30,"line":2249},[28,16241,2890],{"emptyLinePlaceholder":562},[28,16243,16244],{"class":30,"line":2254},[28,16245,16246],{"class":73},"    \u002F\u002F情人设置为只写\n",[28,16248,16249,16251,16254,16256,16258,16261],{"class":30,"line":2268},[28,16250,15395],{"class":42},[28,16252,16253],{"class":2453}," setLover",[28,16255,367],{"class":34},[28,16257,15403],{"class":2453},[28,16259,16260],{"class":5704}," lover",[28,16262,12928],{"class":34},[28,16264,16265,16268,16270],{"class":30,"line":2273},[28,16266,16267],{"class":34},"        m_Lover ",[28,16269,83],{"class":42},[28,16271,16272],{"class":34}," lover;\n",[28,16274,16275],{"class":30,"line":3067},[28,16276,2677],{"class":34},[28,16278,16279],{"class":30,"line":3081},[28,16280,2890],{"emptyLinePlaceholder":562},[28,16282,16283],{"class":30,"line":3089},[28,16284,15708],{"class":42},[28,16286,16287,16290],{"class":30,"line":3094},[28,16288,16289],{"class":34},"    string m_Name;",[28,16291,16292],{"class":73}," \u002F\u002F可读可写  姓名\n",[28,16294,16295],{"class":30,"line":3100},[28,16296,13696],{"class":34},[28,16298,16299,16301,16304],{"class":30,"line":3106},[28,16300,2475],{"class":42},[28,16302,16303],{"class":34}," m_Age;",[28,16305,16306],{"class":73}," \u002F\u002F只读  年龄\n",[28,16308,16309],{"class":30,"line":3111},[28,16310,2890],{"emptyLinePlaceholder":562},[28,16312,16313,16316],{"class":30,"line":8436},[28,16314,16315],{"class":34},"    string m_Lover;",[28,16317,16318],{"class":73}," \u002F\u002F只写  情人\n",[28,16320,16321],{"class":30,"line":8460},[28,16322,4483],{"class":34},[28,16324,16325],{"class":30,"line":8465},[28,16326,2890],{"emptyLinePlaceholder":562},[28,16328,16329,16331,16333],{"class":30,"line":8471},[28,16330,640],{"class":42},[28,16332,2463],{"class":2453},[28,16334,11339],{"class":34},[28,16336,16337],{"class":30,"line":8498},[28,16338,2890],{"emptyLinePlaceholder":562},[28,16340,16341],{"class":30,"line":8503},[28,16342,15799],{"class":34},[28,16344,16345],{"class":30,"line":8509},[28,16346,16347],{"class":73},"    \u002F\u002F姓名设置\n",[28,16349,16350,16353,16355,16357,16359],{"class":30,"line":8521},[28,16351,16352],{"class":34},"    p.",[28,16354,15552],{"class":2453},[28,16356,367],{"class":34},[28,16358,8404],{"class":735},[28,16360,3209],{"class":34},[28,16362,16363,16365,16367,16370,16372,16375,16378,16380,16382],{"class":30,"line":8533},[28,16364,7017],{"class":34},[28,16366,1663],{"class":42},[28,16368,16369],{"class":735}," \"姓名： \"",[28,16371,1935],{"class":42},[28,16373,16374],{"class":34}," p.",[28,16376,16377],{"class":2453},"getName",[28,16379,13536],{"class":34},[28,16381,1663],{"class":42},[28,16383,9328],{"class":34},[28,16385,16386],{"class":30,"line":8545},[28,16387,2890],{"emptyLinePlaceholder":562},[28,16389,16390],{"class":30,"line":10202},[28,16391,16392],{"class":73},"    \u002F\u002F年龄设置\n",[28,16394,16395,16397,16400,16402,16404],{"class":30,"line":10227},[28,16396,16352],{"class":34},[28,16398,16399],{"class":2453},"setAge",[28,16401,367],{"class":34},[28,16403,1276],{"class":38},[28,16405,3209],{"class":34},[28,16407,16408,16410,16412,16415,16417,16419,16422,16424,16426],{"class":30,"line":10250},[28,16409,7017],{"class":34},[28,16411,1663],{"class":42},[28,16413,16414],{"class":735}," \"年龄： \"",[28,16416,1935],{"class":42},[28,16418,16374],{"class":34},[28,16420,16421],{"class":2453},"getAge",[28,16423,13536],{"class":34},[28,16425,1663],{"class":42},[28,16427,9328],{"class":34},[28,16429,16430],{"class":30,"line":10274},[28,16431,2890],{"emptyLinePlaceholder":562},[28,16433,16434],{"class":30,"line":10279},[28,16435,16436],{"class":73},"    \u002F\u002F情人设置\n",[28,16438,16439,16441,16444,16446,16449],{"class":30,"line":10284},[28,16440,16352],{"class":34},[28,16442,16443],{"class":2453},"setLover",[28,16445,367],{"class":34},[28,16447,16448],{"class":735},"\"苍井\"",[28,16450,3209],{"class":34},[28,16452,16453,16456],{"class":30,"line":10289},[28,16454,16455],{"class":73},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[28,16457,16458],{"class":73},"  \u002F\u002F只写属性，不可以读取\n",[28,16460,16461],{"class":30,"line":10298},[28,16462,2890],{"emptyLinePlaceholder":562},[28,16464,16465,16467,16469,16471],{"class":30,"line":10303},[28,16466,2793],{"class":2453},[28,16468,367],{"class":34},[28,16470,2798],{"class":735},[28,16472,3209],{"class":34},[28,16474,16475],{"class":30,"line":10309},[28,16476,2890],{"emptyLinePlaceholder":562},[28,16478,16479,16481,16483],{"class":30,"line":10330},[28,16480,4578],{"class":42},[28,16482,4581],{"class":38},[28,16484,1781],{"class":34},[28,16486,16487],{"class":30,"line":10336},[28,16488,2055],{"class":34},[605,16490,16492],{"id":16491},"_814封装案例","8.1.4封装案例",[588,16494,16495],{},[591,16496,16497,16500],{},[780,16498,16499],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1626,16502,16503,16506],{},[591,16504,16505],{},"求出立方体的面积和体积",[591,16507,16508],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[18,16510,16512],{"className":626,"code":16511,"language":628,"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,16513,16514,16520,16530,16537,16541,16545,16550,16580,16584,16594,16604,16614,16618,16627,16631,16667,16671,16680,16684,16700,16704,16709,16718,16722,16729,16733,16742,16746,16753,16757,16766,16770,16777,16781,16786,16803,16807,16853,16857,16866,16870,16874,16878,16887,16891,16895,16900,16904,16910,16916,16922,16926,16930,16935,16957,16961,17015,17019,17027,17031,17036,17041,17054,17061,17077,17088,17094,17117,17123,17146,17160,17180,17186,17197,17220,17242,17247,17253,17267,17280,17285,17299,17304,17310,17315,17329,17334,17339,17353,17365,17370,17383,17388,17393,17398,17411,17416],{"__ignoreMap":23},[28,16515,16516,16518],{"class":30,"line":31},[28,16517,2439],{"class":42},[28,16519,2442],{"class":735},[28,16521,16522,16524,16526,16528],{"class":30,"line":77},[28,16523,2447],{"class":42},[28,16525,2450],{"class":42},[28,16527,2454],{"class":2453},[28,16529,1781],{"class":34},[28,16531,16532,16534],{"class":30,"line":114},[28,16533,15180],{"class":42},[28,16535,16536],{"class":2453}," Cube\n",[28,16538,16539],{"class":30,"line":128},[28,16540,2036],{"class":34},[28,16542,16543],{"class":30,"line":393},[28,16544,15202],{"class":42},[28,16546,16547],{"class":30,"line":409},[28,16548,16549],{"class":73},"    \u002F\u002F输入长宽高\n",[28,16551,16552,16554,16557,16559,16561,16564,16566,16568,16571,16573,16575,16578],{"class":30,"line":1711},[28,16553,15395],{"class":42},[28,16555,16556],{"class":2453}," setLwh",[28,16558,367],{"class":34},[28,16560,640],{"class":42},[28,16562,16563],{"class":5704}," l",[28,16565,90],{"class":34},[28,16567,640],{"class":42},[28,16569,16570],{"class":5704}," w",[28,16572,90],{"class":34},[28,16574,640],{"class":42},[28,16576,16577],{"class":5704}," h",[28,16579,228],{"class":34},[28,16581,16582],{"class":30,"line":1802},[28,16583,2520],{"class":34},[28,16585,16586,16589,16591],{"class":30,"line":1808},[28,16587,16588],{"class":34},"        m_L",[28,16590,83],{"class":42},[28,16592,16593],{"class":34},"l;\n",[28,16595,16596,16599,16601],{"class":30,"line":1820},[28,16597,16598],{"class":34},"        m_W",[28,16600,83],{"class":42},[28,16602,16603],{"class":34},"w;\n",[28,16605,16606,16609,16611],{"class":30,"line":2102},[28,16607,16608],{"class":34},"        m_H",[28,16610,83],{"class":42},[28,16612,16613],{"class":34},"h;\n",[28,16615,16616],{"class":30,"line":2107},[28,16617,2677],{"class":34},[28,16619,16620,16622,16625],{"class":30,"line":2113},[28,16621,2475],{"class":42},[28,16623,16624],{"class":2453}," mianji",[28,16626,2466],{"class":34},[28,16628,16629],{"class":30,"line":2118},[28,16630,2520],{"class":34},[28,16632,16633,16635,16637,16639,16642,16644,16647,16649,16652,16654,16657,16659,16662,16664],{"class":30,"line":2132},[28,16634,15238],{"class":42},[28,16636,15241],{"class":38},[28,16638,256],{"class":42},[28,16640,16641],{"class":34},"(m_L",[28,16643,256],{"class":42},[28,16645,16646],{"class":34},"m_W ",[28,16648,1104],{"class":42},[28,16650,16651],{"class":34}," m_L",[28,16653,256],{"class":42},[28,16655,16656],{"class":34},"m_H ",[28,16658,1104],{"class":42},[28,16660,16661],{"class":34}," m_W",[28,16663,256],{"class":42},[28,16665,16666],{"class":34},"m_H);\n",[28,16668,16669],{"class":30,"line":2137},[28,16670,2677],{"class":34},[28,16672,16673,16675,16678],{"class":30,"line":2143},[28,16674,2475],{"class":42},[28,16676,16677],{"class":2453}," tiji",[28,16679,2466],{"class":34},[28,16681,16682],{"class":30,"line":2164},[28,16683,2520],{"class":34},[28,16685,16686,16688,16690,16692,16695,16697],{"class":30,"line":2169},[28,16687,15238],{"class":42},[28,16689,16651],{"class":34},[28,16691,256],{"class":42},[28,16693,16694],{"class":34},"m_W",[28,16696,256],{"class":42},[28,16698,16699],{"class":34},"m_H;\n",[28,16701,16702],{"class":30,"line":2183},[28,16703,2677],{"class":34},[28,16705,16706],{"class":30,"line":2188},[28,16707,16708],{"class":73},"    \u002F\u002F获取长宽高\n",[28,16710,16711,16713,16716],{"class":30,"line":2217},[28,16712,2475],{"class":42},[28,16714,16715],{"class":2453}," getLength",[28,16717,2466],{"class":34},[28,16719,16720],{"class":30,"line":2222},[28,16721,2520],{"class":34},[28,16723,16724,16726],{"class":30,"line":2239},[28,16725,15238],{"class":42},[28,16727,16728],{"class":34}," m_L;\n",[28,16730,16731],{"class":30,"line":2244},[28,16732,2677],{"class":34},[28,16734,16735,16737,16740],{"class":30,"line":2249},[28,16736,2475],{"class":42},[28,16738,16739],{"class":2453}," getWidth",[28,16741,2466],{"class":34},[28,16743,16744],{"class":30,"line":2254},[28,16745,2520],{"class":34},[28,16747,16748,16750],{"class":30,"line":2268},[28,16749,15238],{"class":42},[28,16751,16752],{"class":34}," m_W;\n",[28,16754,16755],{"class":30,"line":2273},[28,16756,2677],{"class":34},[28,16758,16759,16761,16764],{"class":30,"line":3067},[28,16760,2475],{"class":42},[28,16762,16763],{"class":2453}," getHeight",[28,16765,2466],{"class":34},[28,16767,16768],{"class":30,"line":3081},[28,16769,2520],{"class":34},[28,16771,16772,16774],{"class":30,"line":3089},[28,16773,15238],{"class":42},[28,16775,16776],{"class":34}," m_H;\n",[28,16778,16779],{"class":30,"line":3094},[28,16780,2677],{"class":34},[28,16782,16783],{"class":30,"line":3100},[28,16784,16785],{"class":73},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[28,16787,16788,16791,16794,16796,16799,16801],{"class":30,"line":3106},[28,16789,16790],{"class":42},"    bool",[28,16792,16793],{"class":2453}," isEqual",[28,16795,367],{"class":34},[28,16797,16798],{"class":2453},"Cube",[28,16800,3339],{"class":5704},[28,16802,228],{"class":34},[28,16804,16805],{"class":30,"line":3111},[28,16806,2520],{"class":34},[28,16808,16809,16811,16814,16817,16819,16821,16824,16826,16829,16832,16834,16836,16839,16841,16843,16846,16848,16850],{"class":30,"line":8436},[28,16810,2987],{"class":42},[28,16812,16813],{"class":34}," (c.",[28,16815,16816],{"class":2453},"getLength",[28,16818,13536],{"class":34},[28,16820,3439],{"class":42},[28,16822,16823],{"class":34}," m_L ",[28,16825,2205],{"class":42},[28,16827,16828],{"class":34}," c.",[28,16830,16831],{"class":2453},"getWidth",[28,16833,13536],{"class":34},[28,16835,3439],{"class":42},[28,16837,16838],{"class":34}," m_W ",[28,16840,2205],{"class":42},[28,16842,16828],{"class":34},[28,16844,16845],{"class":2453},"getHeight",[28,16847,13536],{"class":34},[28,16849,3439],{"class":42},[28,16851,16852],{"class":34}," m_H)\n",[28,16854,16855],{"class":30,"line":8460},[28,16856,3000],{"class":34},[28,16858,16859,16861,16864],{"class":30,"line":8465},[28,16860,16218],{"class":42},[28,16862,16863],{"class":38}," true",[28,16865,1781],{"class":34},[28,16867,16868],{"class":30,"line":8471},[28,16869,3019],{"class":34},[28,16871,16872],{"class":30,"line":8498},[28,16873,3060],{"class":42},[28,16875,16876],{"class":30,"line":8503},[28,16877,3000],{"class":34},[28,16879,16880,16882,16885],{"class":30,"line":8509},[28,16881,16218],{"class":42},[28,16883,16884],{"class":38}," false",[28,16886,1781],{"class":34},[28,16888,16889],{"class":30,"line":8521},[28,16890,3019],{"class":34},[28,16892,16893],{"class":30,"line":8533},[28,16894,2677],{"class":34},[28,16896,16897],{"class":30,"line":8545},[28,16898,16899],{"class":73},"    \u002F\u002F私有属性\n",[28,16901,16902],{"class":30,"line":10202},[28,16903,15708],{"class":42},[28,16905,16906,16908],{"class":30,"line":10227},[28,16907,2475],{"class":42},[28,16909,16728],{"class":34},[28,16911,16912,16914],{"class":30,"line":10250},[28,16913,2475],{"class":42},[28,16915,16752],{"class":34},[28,16917,16918,16920],{"class":30,"line":10274},[28,16919,2475],{"class":42},[28,16921,16776],{"class":34},[28,16923,16924],{"class":30,"line":10279},[28,16925,2890],{"emptyLinePlaceholder":562},[28,16927,16928],{"class":30,"line":10284},[28,16929,4483],{"class":34},[28,16931,16932],{"class":30,"line":10289},[28,16933,16934],{"class":73},"\u002F\u002F全局函数判断两个立方体是否相等\n",[28,16936,16937,16939,16941,16943,16945,16948,16950,16952,16955],{"class":30,"line":10298},[28,16938,1845],{"class":42},[28,16940,16793],{"class":2453},[28,16942,367],{"class":34},[28,16944,16798],{"class":2453},[28,16946,16947],{"class":5704}," c1",[28,16949,90],{"class":34},[28,16951,16798],{"class":2453},[28,16953,16954],{"class":5704}," c2",[28,16956,228],{"class":34},[28,16958,16959],{"class":30,"line":10303},[28,16960,2036],{"class":34},[28,16962,16963,16965,16968,16970,16972,16974,16977,16979,16982,16984,16986,16988,16990,16992,16994,16996,16998,17000,17002,17004,17006,17008,17010,17012],{"class":30,"line":10309},[28,16964,4578],{"class":42},[28,16966,16967],{"class":34}," (c1.",[28,16969,16816],{"class":2453},[28,16971,13536],{"class":34},[28,16973,3439],{"class":42},[28,16975,16976],{"class":34}," c2.",[28,16978,16816],{"class":2453},[28,16980,16981],{"class":34},"()) ",[28,16983,2205],{"class":42},[28,16985,16967],{"class":34},[28,16987,16831],{"class":2453},[28,16989,13536],{"class":34},[28,16991,3439],{"class":42},[28,16993,16976],{"class":34},[28,16995,16831],{"class":2453},[28,16997,16981],{"class":34},[28,16999,2205],{"class":42},[28,17001,16967],{"class":34},[28,17003,16845],{"class":2453},[28,17005,13536],{"class":34},[28,17007,3439],{"class":42},[28,17009,16976],{"class":34},[28,17011,16845],{"class":2453},[28,17013,17014],{"class":34},"());\n",[28,17016,17017],{"class":30,"line":10330},[28,17018,2055],{"class":34},[28,17020,17021,17023,17025],{"class":30,"line":10336},[28,17022,640],{"class":42},[28,17024,2463],{"class":2453},[28,17026,2466],{"class":34},[28,17028,17029],{"class":30,"line":10350},[28,17030,2036],{"class":34},[28,17032,17033],{"class":30,"line":10356},[28,17034,17035],{"class":34},"    Cube c1;\n",[28,17037,17038],{"class":30,"line":10383},[28,17039,17040],{"class":73},"    \u002F\u002F输入立方体的长宽高\n",[28,17042,17043,17045,17047,17050,17052],{"class":30,"line":10392},[28,17044,2041],{"class":34},[28,17046,1663],{"class":42},[28,17048,17049],{"class":735},"\"请输入第一个立方体的长、宽、高：\"",[28,17051,1663],{"class":42},[28,17053,1685],{"class":34},[28,17055,17056,17058],{"class":30,"line":10398},[28,17057,2475],{"class":42},[28,17059,17060],{"class":34}," l,w,h,l1,w1,h1;\n",[28,17062,17063,17065,17067,17069,17071,17073,17075],{"class":30,"line":10406},[28,17064,2502],{"class":34},[28,17066,1920],{"class":42},[28,17068,1141],{"class":34},[28,17070,1920],{"class":42},[28,17072,1415],{"class":34},[28,17074,1920],{"class":42},[28,17076,16613],{"class":34},[28,17078,17079,17082,17085],{"class":30,"line":10411},[28,17080,17081],{"class":34},"    c1.",[28,17083,17084],{"class":2453},"setLwh",[28,17086,17087],{"class":34},"(l,w,h);\n",[28,17089,17091],{"class":30,"line":17090},66,[28,17092,17093],{"class":73},"    \u002F\u002F面积\n",[28,17095,17097,17099,17101,17104,17106,17108,17111,17113,17115],{"class":30,"line":17096},67,[28,17098,2041],{"class":34},[28,17100,1663],{"class":42},[28,17102,17103],{"class":735},"\"立方体的表面积为：\"",[28,17105,1663],{"class":42},[28,17107,15316],{"class":34},[28,17109,17110],{"class":2453},"mianji",[28,17112,2917],{"class":34},[28,17114,1663],{"class":42},[28,17116,1685],{"class":34},[28,17118,17120],{"class":30,"line":17119},68,[28,17121,17122],{"class":73},"    \u002F\u002F体积\n",[28,17124,17126,17128,17130,17133,17135,17137,17140,17142,17144],{"class":30,"line":17125},69,[28,17127,2041],{"class":34},[28,17129,1663],{"class":42},[28,17131,17132],{"class":735},"\"立方体的体积为：\"",[28,17134,1663],{"class":42},[28,17136,15316],{"class":34},[28,17138,17139],{"class":2453},"tiji",[28,17141,2917],{"class":34},[28,17143,1663],{"class":42},[28,17145,1685],{"class":34},[28,17147,17149,17151,17153,17156,17158],{"class":30,"line":17148},70,[28,17150,2041],{"class":34},[28,17152,1663],{"class":42},[28,17154,17155],{"class":735},"\"请输入第二个立方体的长、宽、高：\"",[28,17157,1663],{"class":42},[28,17159,1685],{"class":34},[28,17161,17163,17165,17167,17170,17172,17175,17177],{"class":30,"line":17162},71,[28,17164,2502],{"class":34},[28,17166,1920],{"class":42},[28,17168,17169],{"class":34},"l1",[28,17171,1920],{"class":42},[28,17173,17174],{"class":34},"w1",[28,17176,1920],{"class":42},[28,17178,17179],{"class":34},"h1;\n",[28,17181,17183],{"class":30,"line":17182},72,[28,17184,17185],{"class":34},"    Cube c2;\n",[28,17187,17189,17192,17194],{"class":30,"line":17188},73,[28,17190,17191],{"class":34},"    c2.",[28,17193,17084],{"class":2453},[28,17195,17196],{"class":34},"(l1,w1,h1);\n",[28,17198,17200,17202,17204,17207,17209,17212,17214,17216,17218],{"class":30,"line":17199},74,[28,17201,2041],{"class":34},[28,17203,1663],{"class":42},[28,17205,17206],{"class":735},"\"第二个立方体的表面积为：\"",[28,17208,1663],{"class":42},[28,17210,17211],{"class":34},"c2.",[28,17213,17110],{"class":2453},[28,17215,2917],{"class":34},[28,17217,1663],{"class":42},[28,17219,1685],{"class":34},[28,17221,17223,17225,17227,17230,17232,17234,17236,17238,17240],{"class":30,"line":17222},75,[28,17224,2041],{"class":34},[28,17226,1663],{"class":42},[28,17228,17229],{"class":735},"\"第二个立方体的体积为：\"",[28,17231,1663],{"class":42},[28,17233,17211],{"class":34},[28,17235,17139],{"class":2453},[28,17237,2917],{"class":34},[28,17239,1663],{"class":42},[28,17241,1685],{"class":34},[28,17243,17245],{"class":30,"line":17244},76,[28,17246,2890],{"emptyLinePlaceholder":562},[28,17248,17250],{"class":30,"line":17249},77,[28,17251,17252],{"class":73},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[28,17254,17256,17258,17260,17263,17265],{"class":30,"line":17255},78,[28,17257,2041],{"class":34},[28,17259,1663],{"class":42},[28,17261,17262],{"class":735},"\"内部函数判断结果：\"",[28,17264,1663],{"class":42},[28,17266,1685],{"class":34},[28,17268,17270,17272,17274,17277],{"class":30,"line":17269},79,[28,17271,3590],{"class":42},[28,17273,16967],{"class":34},[28,17275,17276],{"class":2453},"isEqual",[28,17278,17279],{"class":34},"(c2))\n",[28,17281,17283],{"class":30,"line":17282},80,[28,17284,2520],{"class":34},[28,17286,17288,17290,17292,17295,17297],{"class":30,"line":17287},81,[28,17289,3939],{"class":34},[28,17291,1663],{"class":42},[28,17293,17294],{"class":735},"\"两个立方体相等\"",[28,17296,1663],{"class":42},[28,17298,1685],{"class":34},[28,17300,17302],{"class":30,"line":17301},82,[28,17303,2677],{"class":34},[28,17305,17307],{"class":30,"line":17306},83,[28,17308,17309],{"class":42},"    else\n",[28,17311,17313],{"class":30,"line":17312},84,[28,17314,2520],{"class":34},[28,17316,17318,17320,17322,17325,17327],{"class":30,"line":17317},85,[28,17319,3939],{"class":34},[28,17321,1663],{"class":42},[28,17323,17324],{"class":735},"\"两个立方体不相等\"",[28,17326,1663],{"class":42},[28,17328,1685],{"class":34},[28,17330,17332],{"class":30,"line":17331},86,[28,17333,2677],{"class":34},[28,17335,17337],{"class":30,"line":17336},87,[28,17338,2890],{"emptyLinePlaceholder":562},[28,17340,17342,17344,17346,17349,17351],{"class":30,"line":17341},88,[28,17343,2041],{"class":34},[28,17345,1663],{"class":42},[28,17347,17348],{"class":735},"\"全局函数判断结果：\"",[28,17350,1663],{"class":42},[28,17352,1685],{"class":34},[28,17354,17356,17358,17360,17362],{"class":30,"line":17355},89,[28,17357,3590],{"class":42},[28,17359,2148],{"class":34},[28,17361,17276],{"class":2453},[28,17363,17364],{"class":34},"(c1, c2))\n",[28,17366,17368],{"class":30,"line":17367},90,[28,17369,2520],{"class":34},[28,17371,17373,17375,17377,17379,17381],{"class":30,"line":17372},91,[28,17374,3939],{"class":34},[28,17376,1663],{"class":42},[28,17378,17294],{"class":735},[28,17380,1663],{"class":42},[28,17382,1685],{"class":34},[28,17384,17386],{"class":30,"line":17385},92,[28,17387,2677],{"class":34},[28,17389,17391],{"class":30,"line":17390},93,[28,17392,17309],{"class":42},[28,17394,17396],{"class":30,"line":17395},94,[28,17397,2520],{"class":34},[28,17399,17401,17403,17405,17407,17409],{"class":30,"line":17400},95,[28,17402,3939],{"class":34},[28,17404,1663],{"class":42},[28,17406,17324],{"class":735},[28,17408,1663],{"class":42},[28,17410,1685],{"class":34},[28,17412,17414],{"class":30,"line":17413},96,[28,17415,2677],{"class":34},[28,17417,17419],{"class":30,"line":17418},97,[28,17420,2055],{"class":34},[588,17422,17423],{"start":77},[591,17424,17425],{},[780,17426,17427],{},"练习案例2：点和圆的关系",[1626,17429,17430],{},[591,17431,17432],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[18,17434,17436],{"className":626,"code":17435,"language":628,"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,17437,17438,17444,17454,17461,17468,17472,17476,17481,17515,17520,17536,17550,17554,17558,17565,17572,17576,17582,17586,17590,17594,17616,17639,17644,17658,17673,17677,17681,17687,17692,17697,17701,17727,17731,17761,17789,17817,17834,17838,17851,17855,17859,17863,17876,17880,17884,17892,17896,17900,17904,17909,17913,17924,17931,17940,17950,17961,17968,17981,17992,18002,18013,18020,18034,18039,18049,18057],{"__ignoreMap":23},[28,17439,17440,17442],{"class":30,"line":31},[28,17441,2439],{"class":42},[28,17443,2442],{"class":735},[28,17445,17446,17448,17450,17452],{"class":30,"line":77},[28,17447,2447],{"class":42},[28,17449,2450],{"class":42},[28,17451,2454],{"class":2453},[28,17453,1781],{"class":34},[28,17455,17456,17458],{"class":30,"line":114},[28,17457,2439],{"class":42},[28,17459,17460],{"class":735},"\u003Ccmath>\n",[28,17462,17463,17465],{"class":30,"line":128},[28,17464,15180],{"class":42},[28,17466,17467],{"class":2453}," Point\n",[28,17469,17470],{"class":30,"line":393},[28,17471,2036],{"class":34},[28,17473,17474],{"class":30,"line":409},[28,17475,15202],{"class":42},[28,17477,17478],{"class":30,"line":1711},[28,17479,17480],{"class":73},"    \u002F\u002F赋值\n",[28,17482,17483,17485,17488,17490,17492,17495,17497,17499,17502,17505,17507,17510,17512],{"class":30,"line":1802},[28,17484,15395],{"class":42},[28,17486,17487],{"class":2453}," setPoint",[28,17489,367],{"class":34},[28,17491,14523],{"class":42},[28,17493,17494],{"class":5704}," x",[28,17496,12921],{"class":34},[28,17498,14523],{"class":42},[28,17500,17501],{"class":5704}," y",[28,17503,17504],{"class":34},") { m_x ",[28,17506,83],{"class":42},[28,17508,17509],{"class":34}," x; m_y ",[28,17511,83],{"class":42},[28,17513,17514],{"class":34}," y; }\n",[28,17516,17517],{"class":30,"line":1808},[28,17518,17519],{"class":73},"    \u002F\u002F获取坐标\n",[28,17521,17522,17524,17527,17530,17533],{"class":30,"line":1820},[28,17523,15224],{"class":42},[28,17525,17526],{"class":2453}," getX",[28,17528,17529],{"class":34},"() { ",[28,17531,17532],{"class":42},"return",[28,17534,17535],{"class":34}," m_x; }\n",[28,17537,17538,17540,17543,17545,17547],{"class":30,"line":2102},[28,17539,15224],{"class":42},[28,17541,17542],{"class":2453}," getY",[28,17544,17529],{"class":34},[28,17546,17532],{"class":42},[28,17548,17549],{"class":34}," m_y; }\n",[28,17551,17552],{"class":30,"line":2107},[28,17553,2890],{"emptyLinePlaceholder":562},[28,17555,17556],{"class":30,"line":2113},[28,17557,15708],{"class":42},[28,17559,17560,17562],{"class":30,"line":2118},[28,17561,15224],{"class":42},[28,17563,17564],{"class":34}," m_x;\n",[28,17566,17567,17569],{"class":30,"line":2132},[28,17568,15224],{"class":42},[28,17570,17571],{"class":34}," m_y;\n",[28,17573,17574],{"class":30,"line":2137},[28,17575,4483],{"class":34},[28,17577,17578,17580],{"class":30,"line":2143},[28,17579,15180],{"class":42},[28,17581,15183],{"class":2453},[28,17583,17584],{"class":30,"line":2164},[28,17585,2036],{"class":34},[28,17587,17588],{"class":30,"line":2169},[28,17589,15202],{"class":42},[28,17591,17592],{"class":30,"line":2183},[28,17593,17480],{"class":73},[28,17595,17596,17598,17601,17603,17605,17608,17611,17613],{"class":30,"line":2188},[28,17597,15395],{"class":42},[28,17599,17600],{"class":2453}," setRadius",[28,17602,367],{"class":34},[28,17604,14523],{"class":42},[28,17606,17607],{"class":5704}," r",[28,17609,17610],{"class":34},") { m_r ",[28,17612,83],{"class":42},[28,17614,17615],{"class":34}," r; }\n",[28,17617,17618,17620,17623,17625,17628,17631,17634,17636],{"class":30,"line":2217},[28,17619,15395],{"class":42},[28,17621,17622],{"class":2453}," setCenter",[28,17624,367],{"class":34},[28,17626,17627],{"class":2453},"Point",[28,17629,17630],{"class":5704}," center",[28,17632,17633],{"class":34},") { m_center ",[28,17635,83],{"class":42},[28,17637,17638],{"class":34}," center; }\n",[28,17640,17641],{"class":30,"line":2222},[28,17642,17643],{"class":73},"    \u002F\u002F获取属性\n",[28,17645,17646,17648,17651,17653,17655],{"class":30,"line":2239},[28,17647,15224],{"class":42},[28,17649,17650],{"class":2453}," getRadius",[28,17652,17529],{"class":34},[28,17654,17532],{"class":42},[28,17656,17657],{"class":34}," m_r; }\n",[28,17659,17660,17663,17666,17668,17670],{"class":30,"line":2244},[28,17661,17662],{"class":2453},"    Point",[28,17664,17665],{"class":2453}," getCenter",[28,17667,17529],{"class":34},[28,17669,17532],{"class":42},[28,17671,17672],{"class":34}," m_center; }\n",[28,17674,17675],{"class":30,"line":2249},[28,17676,2890],{"emptyLinePlaceholder":562},[28,17678,17679],{"class":30,"line":2254},[28,17680,15708],{"class":42},[28,17682,17683,17685],{"class":30,"line":2268},[28,17684,15224],{"class":42},[28,17686,15214],{"class":34},[28,17688,17689],{"class":30,"line":2273},[28,17690,17691],{"class":73},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[28,17693,17694],{"class":30,"line":3067},[28,17695,17696],{"class":34},"    Point m_center;\n",[28,17698,17699],{"class":30,"line":3081},[28,17700,4483],{"class":34},[28,17702,17703,17705,17708,17710,17713,17715,17717,17719,17721,17723,17725],{"class":30,"line":3089},[28,17704,5852],{"class":42},[28,17706,17707],{"class":2453}," isInCircle",[28,17709,367],{"class":34},[28,17711,17712],{"class":2453},"Circle",[28,17714,11070],{"class":42},[28,17716,916],{"class":5704},[28,17718,90],{"class":34},[28,17720,17627],{"class":2453},[28,17722,11070],{"class":42},[28,17724,14],{"class":5704},[28,17726,228],{"class":34},[28,17728,17729],{"class":30,"line":3094},[28,17730,2036],{"class":34},[28,17732,17733,17735,17738,17740,17742,17745,17748,17751,17753,17755,17757,17759],{"class":30,"line":3100},[28,17734,15224],{"class":42},[28,17736,17737],{"class":34}," dx ",[28,17739,83],{"class":42},[28,17741,16828],{"class":34},[28,17743,17744],{"class":2453},"getCenter",[28,17746,17747],{"class":34},"().",[28,17749,17750],{"class":2453},"getX",[28,17752,13536],{"class":34},[28,17754,445],{"class":42},[28,17756,16374],{"class":34},[28,17758,17750],{"class":2453},[28,17760,6124],{"class":34},[28,17762,17763,17765,17768,17770,17772,17774,17776,17779,17781,17783,17785,17787],{"class":30,"line":3106},[28,17764,15224],{"class":42},[28,17766,17767],{"class":34}," dy ",[28,17769,83],{"class":42},[28,17771,16828],{"class":34},[28,17773,17744],{"class":2453},[28,17775,17747],{"class":34},[28,17777,17778],{"class":2453},"getY",[28,17780,13536],{"class":34},[28,17782,445],{"class":42},[28,17784,16374],{"class":34},[28,17786,17778],{"class":2453},[28,17788,6124],{"class":34},[28,17790,17791,17793,17796,17798,17801,17804,17806,17808,17810,17812,17814],{"class":30,"line":3111},[28,17792,15224],{"class":42},[28,17794,17795],{"class":34}," distance ",[28,17797,83],{"class":42},[28,17799,17800],{"class":2453}," sqrt",[28,17802,17803],{"class":34},"(dx ",[28,17805,256],{"class":42},[28,17807,17737],{"class":34},[28,17809,1104],{"class":42},[28,17811,17767],{"class":34},[28,17813,256],{"class":42},[28,17815,17816],{"class":34}," dy);\n",[28,17818,17819,17821,17824,17826,17828,17831],{"class":30,"line":8436},[28,17820,3590],{"class":42},[28,17822,17823],{"class":34}," (distance ",[28,17825,1529],{"class":42},[28,17827,16828],{"class":34},[28,17829,17830],{"class":2453},"getRadius",[28,17832,17833],{"class":34},"())\n",[28,17835,17836],{"class":30,"line":8460},[28,17837,2520],{"class":34},[28,17839,17840,17842,17844,17847,17849],{"class":30,"line":8465},[28,17841,10155],{"class":34},[28,17843,1663],{"class":42},[28,17845,17846],{"class":735}," \"点在圆内\"",[28,17848,1935],{"class":42},[28,17850,9328],{"class":34},[28,17852,17853],{"class":30,"line":8471},[28,17854,2677],{"class":34},[28,17856,17857],{"class":30,"line":8498},[28,17858,17309],{"class":42},[28,17860,17861],{"class":30,"line":8503},[28,17862,2520],{"class":34},[28,17864,17865,17867,17869,17872,17874],{"class":30,"line":8509},[28,17866,10155],{"class":34},[28,17868,1663],{"class":42},[28,17870,17871],{"class":735}," \"点在圆外\"",[28,17873,1935],{"class":42},[28,17875,9328],{"class":34},[28,17877,17878],{"class":30,"line":8521},[28,17879,2677],{"class":34},[28,17881,17882],{"class":30,"line":8533},[28,17883,2055],{"class":34},[28,17885,17886,17888,17890],{"class":30,"line":8545},[28,17887,640],{"class":42},[28,17889,2463],{"class":2453},[28,17891,2466],{"class":34},[28,17893,17894],{"class":30,"line":10202},[28,17895,2036],{"class":34},[28,17897,17898],{"class":30,"line":10227},[28,17899,15539],{"class":73},[28,17901,17902],{"class":30,"line":10250},[28,17903,15286],{"class":34},[28,17905,17906],{"class":30,"line":10274},[28,17907,17908],{"class":34},"    Point p1;\n",[28,17910,17911],{"class":30,"line":10279},[28,17912,17480],{"class":73},[28,17914,17915,17917,17919,17922],{"class":30,"line":10284},[28,17916,2041],{"class":34},[28,17918,1663],{"class":42},[28,17920,17921],{"class":735},"\"请输入圆的半径：\"",[28,17923,1781],{"class":34},[28,17925,17926,17928],{"class":30,"line":10289},[28,17927,15224],{"class":42},[28,17929,17930],{"class":34}," r;\n",[28,17932,17933,17935,17937],{"class":30,"line":10298},[28,17934,2502],{"class":34},[28,17936,1920],{"class":42},[28,17938,17939],{"class":34},"r;\n",[28,17941,17942,17944,17947],{"class":30,"line":10303},[28,17943,17081],{"class":34},[28,17945,17946],{"class":2453},"setRadius",[28,17948,17949],{"class":34},"(r);\n",[28,17951,17952,17954,17956,17959],{"class":30,"line":10309},[28,17953,2041],{"class":34},[28,17955,1663],{"class":42},[28,17957,17958],{"class":735},"\"请输入圆心坐标：\"",[28,17960,1781],{"class":34},[28,17962,17963,17965],{"class":30,"line":10330},[28,17964,15224],{"class":42},[28,17966,17967],{"class":34}," x, y;\n",[28,17969,17970,17972,17974,17976,17978],{"class":30,"line":10336},[28,17971,2502],{"class":34},[28,17973,1920],{"class":42},[28,17975,1440],{"class":34},[28,17977,1920],{"class":42},[28,17979,17980],{"class":34},"y;\n",[28,17982,17983,17986,17989],{"class":30,"line":10350},[28,17984,17985],{"class":34},"    p1.",[28,17987,17988],{"class":2453},"setPoint",[28,17990,17991],{"class":34},"(x, y);\n",[28,17993,17994,17996,17999],{"class":30,"line":10356},[28,17995,17081],{"class":34},[28,17997,17998],{"class":2453},"setCenter",[28,18000,18001],{"class":34},"(p1);\n",[28,18003,18004,18006,18008,18011],{"class":30,"line":10383},[28,18005,2041],{"class":34},[28,18007,1663],{"class":42},[28,18009,18010],{"class":735},"\"请输入测试点坐标：\"",[28,18012,1781],{"class":34},[28,18014,18015,18017],{"class":30,"line":10392},[28,18016,15224],{"class":42},[28,18018,18019],{"class":34}," x1, y1;\n",[28,18021,18022,18024,18026,18029,18031],{"class":30,"line":10398},[28,18023,2502],{"class":34},[28,18025,1920],{"class":42},[28,18027,18028],{"class":34},"x1",[28,18030,1920],{"class":42},[28,18032,18033],{"class":34},"y1;\n",[28,18035,18036],{"class":30,"line":10406},[28,18037,18038],{"class":34},"    Point p2;\n",[28,18040,18041,18044,18046],{"class":30,"line":10411},[28,18042,18043],{"class":34},"    p2.",[28,18045,17988],{"class":2453},[28,18047,18048],{"class":34},"(x1, y1);\n",[28,18050,18051,18054],{"class":30,"line":17090},[28,18052,18053],{"class":2453},"    isInCircle",[28,18055,18056],{"class":34},"(c1, p2);\n",[28,18058,18059],{"class":30,"line":17096},[28,18060,2055],{"class":34},[14,18062,18063],{},"在类中可以让另一个类作为本来的成员",[14,18065,18066],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18068,18069],{},"创建point.h",[18,18071,18073],{"className":626,"code":18072,"language":628,"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,18074,18075,18086,18092,18102,18108,18112,18117,18121,18125,18145,18149,18157,18165,18169,18173,18179,18185],{"__ignoreMap":23},[28,18076,18077,18080,18083],{"class":30,"line":31},[28,18078,18079],{"class":42},"#pragma",[28,18081,18082],{"class":2453}," once",[28,18084,18085],{"class":73}," \u002F\u002F防止头文件重复包含\n",[28,18087,18088,18090],{"class":30,"line":77},[28,18089,2439],{"class":42},[28,18091,2442],{"class":735},[28,18093,18094,18096,18098,18100],{"class":30,"line":114},[28,18095,2447],{"class":42},[28,18097,2450],{"class":42},[28,18099,2454],{"class":2453},[28,18101,1781],{"class":34},[28,18103,18104,18106],{"class":30,"line":128},[28,18105,15180],{"class":42},[28,18107,17467],{"class":2453},[28,18109,18110],{"class":30,"line":393},[28,18111,2036],{"class":34},[28,18113,18114],{"class":30,"line":409},[28,18115,18116],{"class":73},"\u002F\u002F做好声明与变量定义就可以\n",[28,18118,18119],{"class":30,"line":1711},[28,18120,15202],{"class":42},[28,18122,18123],{"class":30,"line":1802},[28,18124,17480],{"class":73},[28,18126,18127,18129,18131,18133,18135,18137,18139,18141,18143],{"class":30,"line":1808},[28,18128,15395],{"class":42},[28,18130,17487],{"class":2453},[28,18132,367],{"class":34},[28,18134,14523],{"class":42},[28,18136,17494],{"class":5704},[28,18138,12921],{"class":34},[28,18140,14523],{"class":42},[28,18142,17501],{"class":5704},[28,18144,3209],{"class":34},[28,18146,18147],{"class":30,"line":1820},[28,18148,17519],{"class":73},[28,18150,18151,18153,18155],{"class":30,"line":2102},[28,18152,15224],{"class":42},[28,18154,17526],{"class":2453},[28,18156,6124],{"class":34},[28,18158,18159,18161,18163],{"class":30,"line":2107},[28,18160,15224],{"class":42},[28,18162,17542],{"class":2453},[28,18164,6124],{"class":34},[28,18166,18167],{"class":30,"line":2113},[28,18168,2890],{"emptyLinePlaceholder":562},[28,18170,18171],{"class":30,"line":2118},[28,18172,15708],{"class":42},[28,18174,18175,18177],{"class":30,"line":2132},[28,18176,15224],{"class":42},[28,18178,17564],{"class":34},[28,18180,18181,18183],{"class":30,"line":2137},[28,18182,15224],{"class":42},[28,18184,17571],{"class":34},[28,18186,18187],{"class":30,"line":2143},[28,18188,4483],{"class":34},[14,18190,18191],{},"创建point.cpp",[18,18193,18195],{"className":626,"code":18194,"language":628,"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,18196,18197,18204,18209,18243,18247,18263],{"__ignoreMap":23},[28,18198,18199,18201],{"class":30,"line":31},[28,18200,2439],{"class":42},[28,18202,18203],{"class":735},"\u003Cpoint.h>\n",[28,18205,18206],{"class":30,"line":77},[28,18207,18208],{"class":73},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[28,18210,18211,18213,18216,18219,18221,18223,18225,18227,18229,18231,18233,18235,18237,18239,18241],{"class":30,"line":114},[28,18212,15395],{"class":42},[28,18214,18215],{"class":2453}," Point",[28,18217,18218],{"class":34},"::",[28,18220,17988],{"class":2453},[28,18222,367],{"class":34},[28,18224,14523],{"class":42},[28,18226,17494],{"class":5704},[28,18228,12921],{"class":34},[28,18230,14523],{"class":42},[28,18232,17501],{"class":5704},[28,18234,17504],{"class":34},[28,18236,83],{"class":42},[28,18238,17509],{"class":34},[28,18240,83],{"class":42},[28,18242,17514],{"class":34},[28,18244,18245],{"class":30,"line":128},[28,18246,17519],{"class":73},[28,18248,18249,18251,18253,18255,18257,18259,18261],{"class":30,"line":393},[28,18250,15224],{"class":42},[28,18252,18215],{"class":2453},[28,18254,18218],{"class":34},[28,18256,17750],{"class":2453},[28,18258,17529],{"class":34},[28,18260,17532],{"class":42},[28,18262,17535],{"class":34},[28,18264,18265,18267,18269,18271,18273,18275,18277],{"class":30,"line":409},[28,18266,15224],{"class":42},[28,18268,18215],{"class":2453},[28,18270,18218],{"class":34},[28,18272,17778],{"class":2453},[28,18274,17529],{"class":34},[28,18276,17532],{"class":42},[28,18278,17549],{"class":34},[14,18280,18281],{},"创建circle.h",[18,18283,18285],{"className":626,"code":18284,"language":628,"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,18286,18287,18294,18300,18310,18316,18322,18326,18330,18334,18348,18362,18366,18374,18382,18386,18390,18396,18400,18404],{"__ignoreMap":23},[28,18288,18289,18291],{"class":30,"line":31},[28,18290,18079],{"class":42},[28,18292,18293],{"class":2453}," once\n",[28,18295,18296,18298],{"class":30,"line":77},[28,18297,2439],{"class":42},[28,18299,2442],{"class":735},[28,18301,18302,18304,18306,18308],{"class":30,"line":114},[28,18303,2447],{"class":42},[28,18305,2450],{"class":42},[28,18307,2454],{"class":2453},[28,18309,1781],{"class":34},[28,18311,18312,18314],{"class":30,"line":128},[28,18313,2439],{"class":42},[28,18315,18203],{"class":735},[28,18317,18318,18320],{"class":30,"line":393},[28,18319,15180],{"class":42},[28,18321,15183],{"class":2453},[28,18323,18324],{"class":30,"line":409},[28,18325,2036],{"class":34},[28,18327,18328],{"class":30,"line":1711},[28,18329,15202],{"class":42},[28,18331,18332],{"class":30,"line":1802},[28,18333,17480],{"class":73},[28,18335,18336,18338,18340,18342,18344,18346],{"class":30,"line":1808},[28,18337,15395],{"class":42},[28,18339,17600],{"class":2453},[28,18341,367],{"class":34},[28,18343,14523],{"class":42},[28,18345,17607],{"class":5704},[28,18347,3209],{"class":34},[28,18349,18350,18352,18354,18356,18358,18360],{"class":30,"line":1820},[28,18351,15395],{"class":42},[28,18353,17622],{"class":2453},[28,18355,367],{"class":34},[28,18357,17627],{"class":2453},[28,18359,17630],{"class":5704},[28,18361,3209],{"class":34},[28,18363,18364],{"class":30,"line":2102},[28,18365,17643],{"class":73},[28,18367,18368,18370,18372],{"class":30,"line":2107},[28,18369,15224],{"class":42},[28,18371,17650],{"class":2453},[28,18373,6124],{"class":34},[28,18375,18376,18378,18380],{"class":30,"line":2113},[28,18377,17662],{"class":2453},[28,18379,17665],{"class":2453},[28,18381,6124],{"class":34},[28,18383,18384],{"class":30,"line":2118},[28,18385,2890],{"emptyLinePlaceholder":562},[28,18387,18388],{"class":30,"line":2132},[28,18389,15708],{"class":42},[28,18391,18392,18394],{"class":30,"line":2137},[28,18393,15224],{"class":42},[28,18395,15214],{"class":34},[28,18397,18398],{"class":30,"line":2143},[28,18399,17691],{"class":73},[28,18401,18402],{"class":30,"line":2164},[28,18403,17696],{"class":34},[28,18405,18406],{"class":30,"line":2169},[28,18407,4483],{"class":34},[14,18409,18410],{},"创建circle.cpp",[18,18412,18414],{"className":626,"code":18413,"language":628,"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,18415,18416,18423,18446,18468,18473,18489],{"__ignoreMap":23},[28,18417,18418,18420],{"class":30,"line":31},[28,18419,2439],{"class":42},[28,18421,18422],{"class":735},"\u003Ccircle.h>\n",[28,18424,18425,18427,18430,18432,18434,18436,18438,18440,18442,18444],{"class":30,"line":77},[28,18426,5852],{"class":42},[28,18428,18429],{"class":2453}," Circle",[28,18431,18218],{"class":34},[28,18433,17946],{"class":2453},[28,18435,367],{"class":34},[28,18437,14523],{"class":42},[28,18439,17607],{"class":5704},[28,18441,17610],{"class":34},[28,18443,83],{"class":42},[28,18445,17615],{"class":34},[28,18447,18448,18450,18452,18454,18456,18458,18460,18462,18464,18466],{"class":30,"line":114},[28,18449,5852],{"class":42},[28,18451,18429],{"class":2453},[28,18453,18218],{"class":34},[28,18455,17998],{"class":2453},[28,18457,367],{"class":34},[28,18459,17627],{"class":2453},[28,18461,17630],{"class":5704},[28,18463,17633],{"class":34},[28,18465,83],{"class":42},[28,18467,17638],{"class":34},[28,18469,18470],{"class":30,"line":128},[28,18471,18472],{"class":73},"\u002F\u002F获取属性\n",[28,18474,18475,18477,18479,18481,18483,18485,18487],{"class":30,"line":393},[28,18476,14523],{"class":42},[28,18478,18429],{"class":2453},[28,18480,18218],{"class":34},[28,18482,17830],{"class":2453},[28,18484,17529],{"class":34},[28,18486,17532],{"class":42},[28,18488,17657],{"class":34},[28,18490,18491,18493,18495,18497,18499,18501,18503],{"class":30,"line":409},[28,18492,17627],{"class":2453},[28,18494,18429],{"class":2453},[28,18496,18218],{"class":34},[28,18498,17744],{"class":2453},[28,18500,17529],{"class":34},[28,18502,17532],{"class":42},[28,18504,17672],{"class":34},[14,18506,18507],{},"使用封装的类",[18,18509,18511],{"className":626,"code":18510,"language":628,"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,18512,18513,18519,18529,18535,18541,18565,18569,18595,18621,18645,18659,18663,18675,18679,18683,18687,18699,18703,18707,18715,18719,18723,18727,18731,18735,18745,18751,18759,18767,18777,18783,18795,18803,18811,18821,18827,18839,18843,18851,18857],{"__ignoreMap":23},[28,18514,18515,18517],{"class":30,"line":31},[28,18516,2439],{"class":42},[28,18518,2442],{"class":735},[28,18520,18521,18523,18525,18527],{"class":30,"line":77},[28,18522,2447],{"class":42},[28,18524,2450],{"class":42},[28,18526,2454],{"class":2453},[28,18528,1781],{"class":34},[28,18530,18531,18533],{"class":30,"line":114},[28,18532,2439],{"class":42},[28,18534,18422],{"class":735},[28,18536,18537,18539],{"class":30,"line":128},[28,18538,2439],{"class":42},[28,18540,18203],{"class":735},[28,18542,18543,18545,18547,18549,18551,18553,18555,18557,18559,18561,18563],{"class":30,"line":393},[28,18544,5852],{"class":42},[28,18546,17707],{"class":2453},[28,18548,367],{"class":34},[28,18550,17712],{"class":2453},[28,18552,11070],{"class":42},[28,18554,916],{"class":5704},[28,18556,90],{"class":34},[28,18558,17627],{"class":2453},[28,18560,11070],{"class":42},[28,18562,14],{"class":5704},[28,18564,228],{"class":34},[28,18566,18567],{"class":30,"line":409},[28,18568,2036],{"class":34},[28,18570,18571,18573,18575,18577,18579,18581,18583,18585,18587,18589,18591,18593],{"class":30,"line":1711},[28,18572,15224],{"class":42},[28,18574,17737],{"class":34},[28,18576,83],{"class":42},[28,18578,16828],{"class":34},[28,18580,17744],{"class":2453},[28,18582,17747],{"class":34},[28,18584,17750],{"class":2453},[28,18586,13536],{"class":34},[28,18588,445],{"class":42},[28,18590,16374],{"class":34},[28,18592,17750],{"class":2453},[28,18594,6124],{"class":34},[28,18596,18597,18599,18601,18603,18605,18607,18609,18611,18613,18615,18617,18619],{"class":30,"line":1802},[28,18598,15224],{"class":42},[28,18600,17767],{"class":34},[28,18602,83],{"class":42},[28,18604,16828],{"class":34},[28,18606,17744],{"class":2453},[28,18608,17747],{"class":34},[28,18610,17778],{"class":2453},[28,18612,13536],{"class":34},[28,18614,445],{"class":42},[28,18616,16374],{"class":34},[28,18618,17778],{"class":2453},[28,18620,6124],{"class":34},[28,18622,18623,18625,18627,18629,18631,18633,18635,18637,18639,18641,18643],{"class":30,"line":1808},[28,18624,15224],{"class":42},[28,18626,17795],{"class":34},[28,18628,83],{"class":42},[28,18630,17800],{"class":2453},[28,18632,17803],{"class":34},[28,18634,256],{"class":42},[28,18636,17737],{"class":34},[28,18638,1104],{"class":42},[28,18640,17767],{"class":34},[28,18642,256],{"class":42},[28,18644,17816],{"class":34},[28,18646,18647,18649,18651,18653,18655,18657],{"class":30,"line":1820},[28,18648,3590],{"class":42},[28,18650,17823],{"class":34},[28,18652,1529],{"class":42},[28,18654,16828],{"class":34},[28,18656,17830],{"class":2453},[28,18658,17833],{"class":34},[28,18660,18661],{"class":30,"line":2102},[28,18662,2520],{"class":34},[28,18664,18665,18667,18669,18671,18673],{"class":30,"line":2107},[28,18666,10155],{"class":34},[28,18668,1663],{"class":42},[28,18670,17846],{"class":735},[28,18672,1935],{"class":42},[28,18674,9328],{"class":34},[28,18676,18677],{"class":30,"line":2113},[28,18678,2677],{"class":34},[28,18680,18681],{"class":30,"line":2118},[28,18682,17309],{"class":42},[28,18684,18685],{"class":30,"line":2132},[28,18686,2520],{"class":34},[28,18688,18689,18691,18693,18695,18697],{"class":30,"line":2137},[28,18690,10155],{"class":34},[28,18692,1663],{"class":42},[28,18694,17871],{"class":735},[28,18696,1935],{"class":42},[28,18698,9328],{"class":34},[28,18700,18701],{"class":30,"line":2143},[28,18702,2677],{"class":34},[28,18704,18705],{"class":30,"line":2164},[28,18706,2055],{"class":34},[28,18708,18709,18711,18713],{"class":30,"line":2169},[28,18710,640],{"class":42},[28,18712,2463],{"class":2453},[28,18714,2466],{"class":34},[28,18716,18717],{"class":30,"line":2183},[28,18718,2036],{"class":34},[28,18720,18721],{"class":30,"line":2188},[28,18722,15539],{"class":73},[28,18724,18725],{"class":30,"line":2217},[28,18726,15286],{"class":34},[28,18728,18729],{"class":30,"line":2222},[28,18730,17908],{"class":34},[28,18732,18733],{"class":30,"line":2239},[28,18734,17480],{"class":73},[28,18736,18737,18739,18741,18743],{"class":30,"line":2244},[28,18738,2041],{"class":34},[28,18740,1663],{"class":42},[28,18742,17921],{"class":735},[28,18744,1781],{"class":34},[28,18746,18747,18749],{"class":30,"line":2249},[28,18748,15224],{"class":42},[28,18750,17930],{"class":34},[28,18752,18753,18755,18757],{"class":30,"line":2254},[28,18754,2502],{"class":34},[28,18756,1920],{"class":42},[28,18758,17939],{"class":34},[28,18760,18761,18763,18765],{"class":30,"line":2268},[28,18762,17081],{"class":34},[28,18764,17946],{"class":2453},[28,18766,17949],{"class":34},[28,18768,18769,18771,18773,18775],{"class":30,"line":2273},[28,18770,2041],{"class":34},[28,18772,1663],{"class":42},[28,18774,17958],{"class":735},[28,18776,1781],{"class":34},[28,18778,18779,18781],{"class":30,"line":3067},[28,18780,15224],{"class":42},[28,18782,17967],{"class":34},[28,18784,18785,18787,18789,18791,18793],{"class":30,"line":3081},[28,18786,2502],{"class":34},[28,18788,1920],{"class":42},[28,18790,1440],{"class":34},[28,18792,1920],{"class":42},[28,18794,17980],{"class":34},[28,18796,18797,18799,18801],{"class":30,"line":3089},[28,18798,17985],{"class":34},[28,18800,17988],{"class":2453},[28,18802,17991],{"class":34},[28,18804,18805,18807,18809],{"class":30,"line":3094},[28,18806,17081],{"class":34},[28,18808,17998],{"class":2453},[28,18810,18001],{"class":34},[28,18812,18813,18815,18817,18819],{"class":30,"line":3100},[28,18814,2041],{"class":34},[28,18816,1663],{"class":42},[28,18818,18010],{"class":735},[28,18820,1781],{"class":34},[28,18822,18823,18825],{"class":30,"line":3106},[28,18824,15224],{"class":42},[28,18826,18019],{"class":34},[28,18828,18829,18831,18833,18835,18837],{"class":30,"line":3111},[28,18830,2502],{"class":34},[28,18832,1920],{"class":42},[28,18834,18028],{"class":34},[28,18836,1920],{"class":42},[28,18838,18033],{"class":34},[28,18840,18841],{"class":30,"line":8436},[28,18842,18038],{"class":34},[28,18844,18845,18847,18849],{"class":30,"line":8460},[28,18846,18043],{"class":34},[28,18848,17988],{"class":2453},[28,18850,18048],{"class":34},[28,18852,18853,18855],{"class":30,"line":8465},[28,18854,18053],{"class":2453},[28,18856,18056],{"class":34},[28,18858,18859],{"class":30,"line":8471},[28,18860,2055],{"class":34},[60,18862,18864],{"id":18863},"_82对象的初始化清理","8.2对象的初始化清理",[1626,18866,18867,18870],{},[591,18868,18869],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[591,18871,18872],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[605,18874,18876],{"id":18875},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18878,18879,18880,18883],{},"对象的",[780,18881,18882],{},"初始化和清理","也是两个非常重要的安全问题",[14,18885,18886],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18888,18889],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18891,18892,18893,18896,18897,18900],{},"c++利用了",[780,18894,18895],{},"构造函数","和",[780,18898,18899],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18902,18903,18904],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[780,18905,18906],{},"我们不提供构造和析构，编译器会提供",[14,18908,18909],{},[780,18910,18911],{},"编译器提供的构造函数和析构函数是空实现。",[1626,18913,18914,18917],{},[591,18915,18916],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[591,18918,18919,18920,18923],{},"析构函数：主要作用在于对象",[780,18921,18922],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18925,18926,18929],{},[780,18927,18928],{},"构造函数语法：",[25,18930,18931],{},"类名(){}",[588,18933,18934,18937,18940,18943,18946],{},[591,18935,18936],{},"构造函数，没有返回值也不写void",[591,18938,18939],{},"函数名称与类名相同",[591,18941,18942],{},"构造函数可以有参数，因此可以发生重载",[591,18944,18945],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[591,18947,18948,18949,1054],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[25,18950,18951],{},"Person(){}",[14,18953,18954,14281,18957],{},[780,18955,18956],{},"析构函数语法：",[25,18958,18959],{},"~类名(){}",[588,18961,18962,18965,18968,18974],{},[591,18963,18964],{},"析构函数，没有返回值也不写void",[591,18966,18967],{},"函数名称与类名相同,在名称前加上符号  ~",[591,18969,18970,18971],{},"析构函数不可以有参数，因此",[780,18972,18973],{},"不可以发生重载",[591,18975,18976],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[18,18978,18980],{"className":626,"code":18979,"language":628,"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,18981,18982,18988,18992,18996,19001,19008,19012,19025,19029,19034,19041,19045,19058,19062,19066,19070,19074,19082,19086,19094,19098,19102,19110,19114,19119,19123,19130,19134,19147,19151,19159],{"__ignoreMap":23},[28,18983,18984,18986],{"class":30,"line":31},[28,18985,15180],{"class":42},[28,18987,15657],{"class":2453},[28,18989,18990],{"class":30,"line":77},[28,18991,2036],{"class":34},[28,18993,18994],{"class":30,"line":114},[28,18995,15202],{"class":42},[28,18997,18998],{"class":30,"line":128},[28,18999,19000],{"class":73},"    \u002F\u002F构造函数\n",[28,19002,19003,19006],{"class":30,"line":393},[28,19004,19005],{"class":2453},"    Person",[28,19007,2466],{"class":34},[28,19009,19010],{"class":30,"line":409},[28,19011,2520],{"class":34},[28,19013,19014,19016,19018,19021,19023],{"class":30,"line":1711},[28,19015,10155],{"class":34},[28,19017,1663],{"class":42},[28,19019,19020],{"class":735}," \"Person的构造函数调用\"",[28,19022,1935],{"class":42},[28,19024,9328],{"class":34},[28,19026,19027],{"class":30,"line":1802},[28,19028,2677],{"class":34},[28,19030,19031],{"class":30,"line":1808},[28,19032,19033],{"class":73},"    \u002F\u002F析构函数\n",[28,19035,19036,19039],{"class":30,"line":1820},[28,19037,19038],{"class":2453},"    ~Person",[28,19040,2466],{"class":34},[28,19042,19043],{"class":30,"line":2102},[28,19044,2520],{"class":34},[28,19046,19047,19049,19051,19054,19056],{"class":30,"line":2107},[28,19048,10155],{"class":34},[28,19050,1663],{"class":42},[28,19052,19053],{"class":735}," \"Person的析构函数调用\"",[28,19055,1935],{"class":42},[28,19057,9328],{"class":34},[28,19059,19060],{"class":30,"line":2113},[28,19061,2677],{"class":34},[28,19063,19064],{"class":30,"line":2118},[28,19065,2890],{"emptyLinePlaceholder":562},[28,19067,19068],{"class":30,"line":2132},[28,19069,4483],{"class":34},[28,19071,19072],{"class":30,"line":2137},[28,19073,2890],{"emptyLinePlaceholder":562},[28,19075,19076,19078,19080],{"class":30,"line":2143},[28,19077,5852],{"class":42},[28,19079,6076],{"class":2453},[28,19081,2466],{"class":34},[28,19083,19084],{"class":30,"line":2164},[28,19085,2036],{"class":34},[28,19087,19088,19091],{"class":30,"line":2169},[28,19089,19090],{"class":34},"    Person p;",[28,19092,19093],{"class":73},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[28,19095,19096],{"class":30,"line":2183},[28,19097,2055],{"class":34},[28,19099,19100],{"class":30,"line":2188},[28,19101,2890],{"emptyLinePlaceholder":562},[28,19103,19104,19106,19108],{"class":30,"line":2217},[28,19105,640],{"class":42},[28,19107,2463],{"class":2453},[28,19109,11339],{"class":34},[28,19111,19112],{"class":30,"line":2222},[28,19113,13696],{"class":34},[28,19115,19116],{"class":30,"line":2239},[28,19117,19118],{"class":73},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[28,19120,19121],{"class":30,"line":2244},[28,19122,2890],{"emptyLinePlaceholder":562},[28,19124,19125,19127],{"class":30,"line":2249},[28,19126,19090],{"class":34},[28,19128,19129],{"class":73},"\u002F\u002F只有构造函数\n",[28,19131,19132],{"class":30,"line":2254},[28,19133,2890],{"emptyLinePlaceholder":562},[28,19135,19136,19138,19140,19142,19144],{"class":30,"line":2268},[28,19137,2793],{"class":2453},[28,19139,367],{"class":34},[28,19141,2798],{"class":735},[28,19143,6454],{"class":34},[28,19145,19146],{"class":73},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[28,19148,19149],{"class":30,"line":2273},[28,19150,2890],{"emptyLinePlaceholder":562},[28,19152,19153,19155,19157],{"class":30,"line":3067},[28,19154,4578],{"class":42},[28,19156,4581],{"class":38},[28,19158,1781],{"class":34},[28,19160,19161],{"class":30,"line":3081},[28,19162,2055],{"class":34},[14,19164,19165],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[605,19167,19169],{"id":19168},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19171,19172],{},"两种分类方式：",[14,19174,19175],{},"​\t按参数分为： 有参构造和无参构造",[14,19177,19178],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19180,19181],{},"三种调用方式：",[14,19183,19184],{},"​\t括号法",[14,19186,19187],{},"​\t显示法",[14,19189,19190],{},"​\t隐式转换法",[18,19192,19194],{"className":626,"code":19193,"language":628,"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,19195,19196,19202,19212,19217,19222,19227,19232,19236,19244,19248,19252,19256,19262,19266,19279,19283,19295,19299,19308,19321,19325,19329,19335,19339,19352,19356,19361,19377,19381,19386,19395,19408,19412,19418,19422,19427,19435,19439,19444,19448,19456,19460,19465,19470,19475,19480,19485,19489,19494,19499,19504,19509,19513,19518,19523,19539,19551,19556,19560,19565,19570,19575,19579,19584,19598,19611,19615,19623,19627,19633,19639,19647],{"__ignoreMap":23},[28,19197,19198,19200],{"class":30,"line":31},[28,19199,2439],{"class":42},[28,19201,2442],{"class":735},[28,19203,19204,19206,19208,19210],{"class":30,"line":77},[28,19205,2447],{"class":42},[28,19207,2450],{"class":42},[28,19209,2454],{"class":2453},[28,19211,1781],{"class":34},[28,19213,19214],{"class":30,"line":114},[28,19215,19216],{"class":73},"\u002F\u002F1.构造函数的分类及调用\n",[28,19218,19219],{"class":30,"line":128},[28,19220,19221],{"class":73},"\u002F\u002F分类\n",[28,19223,19224],{"class":30,"line":393},[28,19225,19226],{"class":73},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[28,19228,19229],{"class":30,"line":409},[28,19230,19231],{"class":73},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[28,19233,19234],{"class":30,"line":1711},[28,19235,2890],{"emptyLinePlaceholder":562},[28,19237,19238,19240,19242],{"class":30,"line":1802},[28,19239,15180],{"class":42},[28,19241,16055],{"class":2453},[28,19243,3164],{"class":34},[28,19245,19246],{"class":30,"line":1808},[28,19247,2036],{"class":34},[28,19249,19250],{"class":30,"line":1820},[28,19251,15202],{"class":42},[28,19253,19254],{"class":30,"line":2102},[28,19255,19000],{"class":73},[28,19257,19258,19260],{"class":30,"line":2107},[28,19259,19005],{"class":2453},[28,19261,2466],{"class":34},[28,19263,19264],{"class":30,"line":2113},[28,19265,2520],{"class":34},[28,19267,19268,19270,19272,19275,19277],{"class":30,"line":2118},[28,19269,3939],{"class":34},[28,19271,1663],{"class":42},[28,19273,19274],{"class":735},"\"Person构造函数无参构造\"",[28,19276,1663],{"class":42},[28,19278,1685],{"class":34},[28,19280,19281],{"class":30,"line":2132},[28,19282,2677],{"class":34},[28,19284,19285,19287,19289,19291,19293],{"class":30,"line":2137},[28,19286,19005],{"class":2453},[28,19288,367],{"class":34},[28,19290,640],{"class":42},[28,19292,1889],{"class":5704},[28,19294,228],{"class":34},[28,19296,19297],{"class":30,"line":2143},[28,19298,2520],{"class":34},[28,19300,19301,19304,19306],{"class":30,"line":2164},[28,19302,19303],{"class":34},"        age",[28,19305,83],{"class":42},[28,19307,6685],{"class":34},[28,19309,19310,19312,19314,19317,19319],{"class":30,"line":2169},[28,19311,3939],{"class":34},[28,19313,1663],{"class":42},[28,19315,19316],{"class":735},"\"Person构造函数有参构造\"",[28,19318,1663],{"class":42},[28,19320,1685],{"class":34},[28,19322,19323],{"class":30,"line":2183},[28,19324,2677],{"class":34},[28,19326,19327],{"class":30,"line":2188},[28,19328,19033],{"class":73},[28,19330,19331,19333],{"class":30,"line":2217},[28,19332,19038],{"class":2453},[28,19334,2466],{"class":34},[28,19336,19337],{"class":30,"line":2222},[28,19338,2520],{"class":34},[28,19340,19341,19343,19345,19348,19350],{"class":30,"line":2239},[28,19342,3939],{"class":34},[28,19344,1663],{"class":42},[28,19346,19347],{"class":735},"\"Person析构函数被调用\"",[28,19349,1663],{"class":42},[28,19351,1685],{"class":34},[28,19353,19354],{"class":30,"line":2244},[28,19355,2677],{"class":34},[28,19357,19358],{"class":30,"line":2249},[28,19359,19360],{"class":73},"    \u002F\u002F拷贝构造函数\n",[28,19362,19363,19365,19367,19369,19371,19373,19375],{"class":30,"line":2254},[28,19364,19005],{"class":2453},[28,19366,367],{"class":34},[28,19368,7280],{"class":42},[28,19370,16055],{"class":2453},[28,19372,11070],{"class":42},[28,19374,14],{"class":5704},[28,19376,228],{"class":34},[28,19378,19379],{"class":30,"line":2268},[28,19380,2520],{"class":34},[28,19382,19383],{"class":30,"line":2273},[28,19384,19385],{"class":73},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[28,19387,19388,19390,19392],{"class":30,"line":3067},[28,19389,19303],{"class":34},[28,19391,83],{"class":42},[28,19393,19394],{"class":34},"p.age;\n",[28,19396,19397,19399,19401,19404,19406],{"class":30,"line":3081},[28,19398,3939],{"class":34},[28,19400,1663],{"class":42},[28,19402,19403],{"class":735},"\"Person拷贝构造函数被调用\"",[28,19405,1663],{"class":42},[28,19407,1685],{"class":34},[28,19409,19410],{"class":30,"line":3089},[28,19411,2677],{"class":34},[28,19413,19414,19416],{"class":30,"line":3094},[28,19415,2475],{"class":42},[28,19417,8285],{"class":34},[28,19419,19420],{"class":30,"line":3100},[28,19421,4483],{"class":34},[28,19423,19424],{"class":30,"line":3106},[28,19425,19426],{"class":73},"\u002F\u002F调用\n",[28,19428,19429,19431,19433],{"class":30,"line":3111},[28,19430,5852],{"class":42},[28,19432,6076],{"class":2453},[28,19434,2466],{"class":34},[28,19436,19437],{"class":30,"line":8436},[28,19438,2036],{"class":34},[28,19440,19441],{"class":30,"line":8460},[28,19442,19443],{"class":73},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[28,19445,19446],{"class":30,"line":8465},[28,19447,2055],{"class":34},[28,19449,19450,19452,19454],{"class":30,"line":8471},[28,19451,5852],{"class":42},[28,19453,6145],{"class":2453},[28,19455,2466],{"class":34},[28,19457,19458],{"class":30,"line":8498},[28,19459,2036],{"class":34},[28,19461,19462],{"class":30,"line":8503},[28,19463,19464],{"class":73},"    \u002F\u002F1.括号法\n",[28,19466,19467],{"class":30,"line":8509},[28,19468,19469],{"class":73},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[28,19471,19472],{"class":30,"line":8521},[28,19473,19474],{"class":73},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[28,19476,19477],{"class":30,"line":8533},[28,19478,19479],{"class":73},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[28,19481,19482],{"class":30,"line":8545},[28,19483,19484],{"class":73},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[28,19486,19487],{"class":30,"line":10202},[28,19488,2890],{"emptyLinePlaceholder":562},[28,19490,19491],{"class":30,"line":10227},[28,19492,19493],{"class":73},"    \u002F\u002F注意事项\n",[28,19495,19496],{"class":30,"line":10250},[28,19497,19498],{"class":73},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[28,19500,19501],{"class":30,"line":10274},[28,19502,19503],{"class":73},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[28,19505,19506],{"class":30,"line":10279},[28,19507,19508],{"class":73},"    \u002F\u002F Person p4();\n",[28,19510,19511],{"class":30,"line":10284},[28,19512,2890],{"emptyLinePlaceholder":562},[28,19514,19515],{"class":30,"line":10289},[28,19516,19517],{"class":73},"    \u002F\u002F2.显示法\n",[28,19519,19520],{"class":30,"line":10298},[28,19521,19522],{"class":34},"    Person p1;\n",[28,19524,19525,19528,19530,19533,19535,19537],{"class":30,"line":10303},[28,19526,19527],{"class":34},"    Person p2",[28,19529,83],{"class":42},[28,19531,19532],{"class":2453},"Person",[28,19534,367],{"class":34},[28,19536,225],{"class":38},[28,19538,3209],{"class":34},[28,19540,19541,19544,19546,19548],{"class":30,"line":10309},[28,19542,19543],{"class":34},"    Person p3",[28,19545,83],{"class":42},[28,19547,19532],{"class":2453},[28,19549,19550],{"class":34},"(p2);\n",[28,19552,19553],{"class":30,"line":10330},[28,19554,19555],{"class":73},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[28,19557,19558],{"class":30,"line":10336},[28,19559,2890],{"emptyLinePlaceholder":562},[28,19561,19562],{"class":30,"line":10350},[28,19563,19564],{"class":73},"    \u002F\u002F 注意事项2\n",[28,19566,19567],{"class":30,"line":10356},[28,19568,19569],{"class":73},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[28,19571,19572],{"class":30,"line":10383},[28,19573,19574],{"class":73},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[28,19576,19577],{"class":30,"line":10392},[28,19578,2890],{"emptyLinePlaceholder":562},[28,19580,19581],{"class":30,"line":10398},[28,19582,19583],{"class":73},"    \u002F\u002F3.隐士转换法\n",[28,19585,19586,19589,19591,19593,19595],{"class":30,"line":10406},[28,19587,19588],{"class":34},"    Person p4",[28,19590,83],{"class":42},[28,19592,225],{"class":38},[28,19594,689],{"class":34},[28,19596,19597],{"class":73},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[28,19599,19600,19603,19605,19608],{"class":30,"line":10411},[28,19601,19602],{"class":34},"    Person p5",[28,19604,83],{"class":42},[28,19606,19607],{"class":34},"p4;",[28,19609,19610],{"class":73}," \u002F\u002F 这里会调用拷贝构造函数\n",[28,19612,19613],{"class":30,"line":17090},[28,19614,2055],{"class":34},[28,19616,19617,19619,19621],{"class":30,"line":17096},[28,19618,640],{"class":42},[28,19620,2463],{"class":2453},[28,19622,2466],{"class":34},[28,19624,19625],{"class":30,"line":17119},[28,19626,2036],{"class":34},[28,19628,19629,19631],{"class":30,"line":17125},[28,19630,6121],{"class":2453},[28,19632,6124],{"class":34},[28,19634,19635,19637],{"class":30,"line":17148},[28,19636,6190],{"class":2453},[28,19638,6124],{"class":34},[28,19640,19641,19643,19645],{"class":30,"line":17162},[28,19642,4578],{"class":42},[28,19644,4581],{"class":38},[28,19646,1781],{"class":34},[28,19648,19649],{"class":30,"line":17182},[28,19650,2055],{"class":34},[14,19652,19653,19656],{},[780,19654,19655],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[605,19658,19660],{"id":19659},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19662,19663],{},"C++中拷贝构造函数调用时机通常有三种情况",[1626,19665,19666,19669,19672],{},[591,19667,19668],{},"使用一个已经创建完毕的对象来初始化一个新对象",[591,19670,19671],{},"值传递的方式给函数参数传值",[591,19673,19674],{},"以值方式返回局部对象",[18,19676,19678],{"className":626,"code":19677,"language":628,"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,19679,19680,19686,19696,19700,19705,19709,19714,19719,19724,19730,19734,19738,19744,19748,19761,19765,19770,19782,19786,19794,19807,19811,19815,19831,19835,19844,19857,19861,19867,19871,19883,19887,19893,19897,19901,19909,19913,19926,19934,19952,19956,19961,19966,19981,19985,19998,20002,20010,20014,20018,20026,20030,20035,20044,20048,20052,20077,20087,20091,20099,20103,20114,20139,20143,20147,20151,20159,20163,20168,20173,20180,20185,20190,20195,20200,20204,20209,20213,20218,20222,20227,20232,20236,20240,20245,20250,20258],{"__ignoreMap":23},[28,19681,19682,19684],{"class":30,"line":31},[28,19683,2439],{"class":42},[28,19685,2442],{"class":735},[28,19687,19688,19690,19692,19694],{"class":30,"line":77},[28,19689,2447],{"class":42},[28,19691,2450],{"class":42},[28,19693,2454],{"class":2453},[28,19695,1781],{"class":34},[28,19697,19698],{"class":30,"line":114},[28,19699,2890],{"emptyLinePlaceholder":562},[28,19701,19702],{"class":30,"line":128},[28,19703,19704],{"class":73},"\u002F\u002F拷贝构造函数调用时机\n",[28,19706,19707],{"class":30,"line":393},[28,19708,2890],{"emptyLinePlaceholder":562},[28,19710,19711],{"class":30,"line":409},[28,19712,19713],{"class":73},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[28,19715,19716],{"class":30,"line":1711},[28,19717,19718],{"class":73},"\u002F\u002F2.值传递的方式给函数参数传值\n",[28,19720,19721],{"class":30,"line":1802},[28,19722,19723],{"class":73},"\u002F\u002F3.以值方式返回局部对象\n",[28,19725,19726,19728],{"class":30,"line":1808},[28,19727,15180],{"class":42},[28,19729,15657],{"class":2453},[28,19731,19732],{"class":30,"line":1820},[28,19733,2036],{"class":34},[28,19735,19736],{"class":30,"line":2102},[28,19737,15202],{"class":42},[28,19739,19740,19742],{"class":30,"line":2107},[28,19741,19005],{"class":2453},[28,19743,2466],{"class":34},[28,19745,19746],{"class":30,"line":2113},[28,19747,2520],{"class":34},[28,19749,19750,19752,19754,19757,19759],{"class":30,"line":2118},[28,19751,10155],{"class":34},[28,19753,1663],{"class":42},[28,19755,19756],{"class":735}," \"Person的默认构造函数调用\"",[28,19758,1935],{"class":42},[28,19760,9328],{"class":34},[28,19762,19763],{"class":30,"line":2132},[28,19764,2677],{"class":34},[28,19766,19767],{"class":30,"line":2137},[28,19768,19769],{"class":73},"    \u002F\u002F有参构造\n",[28,19771,19772,19774,19776,19778,19780],{"class":30,"line":2143},[28,19773,19005],{"class":2453},[28,19775,367],{"class":34},[28,19777,640],{"class":42},[28,19779,16175],{"class":5704},[28,19781,228],{"class":34},[28,19783,19784],{"class":30,"line":2164},[28,19785,2520],{"class":34},[28,19787,19788,19790,19792],{"class":30,"line":2169},[28,19789,16229],{"class":34},[28,19791,83],{"class":42},[28,19793,8285],{"class":34},[28,19795,19796,19798,19800,19803,19805],{"class":30,"line":2183},[28,19797,10155],{"class":34},[28,19799,1663],{"class":42},[28,19801,19802],{"class":735}," \"Person的有参构造函数调用\"",[28,19804,1935],{"class":42},[28,19806,9328],{"class":34},[28,19808,19809],{"class":30,"line":2188},[28,19810,2677],{"class":34},[28,19812,19813],{"class":30,"line":2217},[28,19814,19360],{"class":73},[28,19816,19817,19819,19821,19823,19825,19827,19829],{"class":30,"line":2222},[28,19818,19005],{"class":2453},[28,19820,367],{"class":34},[28,19822,7280],{"class":42},[28,19824,16055],{"class":2453},[28,19826,11070],{"class":42},[28,19828,14],{"class":5704},[28,19830,228],{"class":34},[28,19832,19833],{"class":30,"line":2239},[28,19834,2520],{"class":34},[28,19836,19837,19839,19841],{"class":30,"line":2244},[28,19838,16229],{"class":34},[28,19840,83],{"class":42},[28,19842,19843],{"class":34}," p.m_Age;\n",[28,19845,19846,19848,19850,19853,19855],{"class":30,"line":2249},[28,19847,10155],{"class":34},[28,19849,1663],{"class":42},[28,19851,19852],{"class":735}," \"Person的拷贝构造函数调用\"",[28,19854,1935],{"class":42},[28,19856,9328],{"class":34},[28,19858,19859],{"class":30,"line":2254},[28,19860,2677],{"class":34},[28,19862,19863,19865],{"class":30,"line":2268},[28,19864,19038],{"class":2453},[28,19866,2466],{"class":34},[28,19868,19869],{"class":30,"line":2273},[28,19870,2520],{"class":34},[28,19872,19873,19875,19877,19879,19881],{"class":30,"line":3067},[28,19874,10155],{"class":34},[28,19876,1663],{"class":42},[28,19878,19053],{"class":735},[28,19880,1935],{"class":42},[28,19882,9328],{"class":34},[28,19884,19885],{"class":30,"line":3081},[28,19886,2677],{"class":34},[28,19888,19889,19891],{"class":30,"line":3089},[28,19890,2475],{"class":42},[28,19892,16152],{"class":34},[28,19894,19895],{"class":30,"line":3094},[28,19896,4483],{"class":34},[28,19898,19899],{"class":30,"line":3100},[28,19900,19713],{"class":73},[28,19902,19903,19905,19907],{"class":30,"line":3106},[28,19904,5852],{"class":42},[28,19906,6076],{"class":2453},[28,19908,2466],{"class":34},[28,19910,19911],{"class":30,"line":3111},[28,19912,2036],{"class":34},[28,19914,19915,19918,19920,19922,19924],{"class":30,"line":8436},[28,19916,19917],{"class":34},"    Person ",[28,19919,7618],{"class":2453},[28,19921,367],{"class":34},[28,19923,1320],{"class":38},[28,19925,3209],{"class":34},[28,19927,19928,19930,19932],{"class":30,"line":8460},[28,19929,19917],{"class":34},[28,19931,7521],{"class":2453},[28,19933,18001],{"class":34},[28,19935,19936,19938,19940,19943,19945,19948,19950],{"class":30,"line":8465},[28,19937,2041],{"class":34},[28,19939,1663],{"class":42},[28,19941,19942],{"class":735},"\"P2的年龄为：\"",[28,19944,1663],{"class":42},[28,19946,19947],{"class":34},"p2.m_Age",[28,19949,1663],{"class":42},[28,19951,1685],{"class":34},[28,19953,19954],{"class":30,"line":8471},[28,19955,2055],{"class":34},[28,19957,19958],{"class":30,"line":8498},[28,19959,19960],{"class":73},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[28,19962,19963],{"class":30,"line":8503},[28,19964,19965],{"class":73},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[28,19967,19968,19970,19973,19975,19977,19979],{"class":30,"line":8509},[28,19969,5852],{"class":42},[28,19971,19972],{"class":2453}," doWork",[28,19974,367],{"class":34},[28,19976,19532],{"class":2453},[28,19978,7313],{"class":5704},[28,19980,228],{"class":34},[28,19982,19983],{"class":30,"line":8521},[28,19984,2036],{"class":34},[28,19986,19987,19989,19991,19994,19996],{"class":30,"line":8533},[28,19988,7017],{"class":34},[28,19990,1663],{"class":42},[28,19992,19993],{"class":735}," \"doWork函数调用\"",[28,19995,1935],{"class":42},[28,19997,9328],{"class":34},[28,19999,20000],{"class":30,"line":8545},[28,20001,2055],{"class":34},[28,20003,20004,20006,20008],{"class":30,"line":10202},[28,20005,5852],{"class":42},[28,20007,6145],{"class":2453},[28,20009,2466],{"class":34},[28,20011,20012],{"class":30,"line":10227},[28,20013,2036],{"class":34},[28,20015,20016],{"class":30,"line":10250},[28,20017,15799],{"class":34},[28,20019,20020,20023],{"class":30,"line":10274},[28,20021,20022],{"class":2453},"    doWork",[28,20024,20025],{"class":34},"(p);\n",[28,20027,20028],{"class":30,"line":10279},[28,20029,2055],{"class":34},[28,20031,20032],{"class":30,"line":10284},[28,20033,20034],{"class":73},"\u002F\u002F 3.以值方式返回局部对象\n",[28,20036,20037,20039,20042],{"class":30,"line":10289},[28,20038,19532],{"class":2453},[28,20040,20041],{"class":2453}," doWork2",[28,20043,2466],{"class":34},[28,20045,20046],{"class":30,"line":10298},[28,20047,2036],{"class":34},[28,20049,20050],{"class":30,"line":10303},[28,20051,19522],{"class":34},[28,20053,20054,20056,20058,20060,20062,20064,20066,20068,20070,20072,20074],{"class":30,"line":10309},[28,20055,2041],{"class":34},[28,20057,1663],{"class":42},[28,20059,367],{"class":34},[28,20061,640],{"class":42},[28,20063,7006],{"class":42},[28,20065,1054],{"class":34},[28,20067,979],{"class":42},[28,20069,7618],{"class":34},[28,20071,1663],{"class":42},[28,20073,1729],{"class":34},[28,20075,20076],{"class":73},"\u002F\u002F打印p1的地址\n",[28,20078,20079,20081,20084],{"class":30,"line":10330},[28,20080,4578],{"class":42},[28,20082,20083],{"class":34}," p1;",[28,20085,20086],{"class":73},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[28,20088,20089],{"class":30,"line":10336},[28,20090,2055],{"class":34},[28,20092,20093,20095,20097],{"class":30,"line":10350},[28,20094,5852],{"class":42},[28,20096,6217],{"class":2453},[28,20098,2466],{"class":34},[28,20100,20101],{"class":30,"line":10356},[28,20102,2036],{"class":34},[28,20104,20105,20108,20110,20112],{"class":30,"line":10383},[28,20106,20107],{"class":34},"    Person p ",[28,20109,83],{"class":42},[28,20111,20041],{"class":2453},[28,20113,6124],{"class":34},[28,20115,20116,20118,20120,20122,20124,20126,20128,20130,20132,20134,20136],{"class":30,"line":10392},[28,20117,2041],{"class":34},[28,20119,1663],{"class":42},[28,20121,367],{"class":34},[28,20123,640],{"class":42},[28,20125,7006],{"class":42},[28,20127,1054],{"class":34},[28,20129,979],{"class":42},[28,20131,14],{"class":34},[28,20133,1663],{"class":42},[28,20135,1729],{"class":34},[28,20137,20138],{"class":73},"\u002F\u002F打印p的地址\n",[28,20140,20141],{"class":30,"line":10398},[28,20142,2055],{"class":34},[28,20144,20145],{"class":30,"line":10406},[28,20146,2890],{"emptyLinePlaceholder":562},[28,20148,20149],{"class":30,"line":10411},[28,20150,2890],{"emptyLinePlaceholder":562},[28,20152,20153,20155,20157],{"class":30,"line":17090},[28,20154,640],{"class":42},[28,20156,2463],{"class":2453},[28,20158,2466],{"class":34},[28,20160,20161],{"class":30,"line":17096},[28,20162,2036],{"class":34},[28,20164,20165],{"class":30,"line":17119},[28,20166,20167],{"class":73},"    \u002F\u002F test01();\n",[28,20169,20170],{"class":30,"line":17125},[28,20171,20172],{"class":73},"    \u002F\u002F test02();\n",[28,20174,20175,20178],{"class":30,"line":17148},[28,20176,20177],{"class":2453},"    test03",[28,20179,6124],{"class":34},[28,20181,20182],{"class":30,"line":17162},[28,20183,20184],{"class":73},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[28,20186,20187],{"class":30,"line":17182},[28,20188,20189],{"class":73},"\u002F\u002F 输出结果如下：\n",[28,20191,20192],{"class":30,"line":17188},[28,20193,20194],{"class":73},"\u002F\u002F Person的默认构造函数调用\n",[28,20196,20197],{"class":30,"line":17199},[28,20198,20199],{"class":73},"\u002F\u002F 0x7fffffffceec\n",[28,20201,20202],{"class":30,"line":17222},[28,20203,20199],{"class":73},[28,20205,20206],{"class":30,"line":17244},[28,20207,20208],{"class":73},"\u002F\u002F Person的析构函数调用\n",[28,20210,20211],{"class":30,"line":17249},[28,20212,2890],{"emptyLinePlaceholder":562},[28,20214,20215],{"class":30,"line":17255},[28,20216,20217],{"class":73},"\u002F\u002F 之前的输出结果如下：\n",[28,20219,20220],{"class":30,"line":17269},[28,20221,20194],{"class":73},[28,20223,20224],{"class":30,"line":17282},[28,20225,20226],{"class":73},"\u002F\u002F 地址\n",[28,20228,20229],{"class":30,"line":17287},[28,20230,20231],{"class":73},"\u002F\u002F Person的拷贝构造函数调用\n",[28,20233,20234],{"class":30,"line":17301},[28,20235,20208],{"class":73},[28,20237,20238],{"class":30,"line":17306},[28,20239,20226],{"class":73},[28,20241,20242],{"class":30,"line":17312},[28,20243,20244],{"class":73},"\u002F\u002F (这两次输出的地址也是不同的) \n",[28,20246,20247],{"class":30,"line":17317},[28,20248,20249],{"class":73},"\u002F\u002F Person的析构函数调用     \n",[28,20251,20252,20254,20256],{"class":30,"line":17331},[28,20253,4578],{"class":42},[28,20255,4581],{"class":38},[28,20257,1781],{"class":34},[28,20259,20260],{"class":30,"line":17336},[28,20261,2055],{"class":34},[14,20263,20264],{},"简化版理解",[18,20266,20268],{"className":626,"code":20267,"language":628,"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,20269,20270,20278,20282,20288,20301,20312,20316,20328,20341,20349,20353,20369,20382,20391,20395,20400,20406,20419,20423,20427,20434,20438,20442,20447,20455,20459,20475,20488,20501,20505,20510,20518,20522,20526,20531,20536,20552,20560,20567,20573,20577,20581,20586,20594,20598,20602,20625,20632,20636,20640,20648,20652,20662,20684,20688,20692,20696,20704,20708,20713,20718,20724,20728,20738,20742,20750],{"__ignoreMap":23},[28,20271,20272,20274,20276],{"class":30,"line":31},[28,20273,15180],{"class":42},[28,20275,16055],{"class":2453},[28,20277,16058],{"class":34},[28,20279,20280],{"class":30,"line":77},[28,20281,15202],{"class":42},[28,20283,20284,20286],{"class":30,"line":114},[28,20285,19005],{"class":2453},[28,20287,11339],{"class":34},[28,20289,20290,20292,20294,20297,20299],{"class":30,"line":128},[28,20291,10155],{"class":34},[28,20293,1663],{"class":42},[28,20295,20296],{"class":735}," \"无参构造函数!\"",[28,20298,1935],{"class":42},[28,20300,9328],{"class":34},[28,20302,20303,20306,20308,20310],{"class":30,"line":393},[28,20304,20305],{"class":34},"        mAge ",[28,20307,83],{"class":42},[28,20309,4581],{"class":38},[28,20311,1781],{"class":34},[28,20313,20314],{"class":30,"line":409},[28,20315,2677],{"class":34},[28,20317,20318,20320,20322,20324,20326],{"class":30,"line":1711},[28,20319,19005],{"class":2453},[28,20321,367],{"class":34},[28,20323,640],{"class":42},[28,20325,16175],{"class":5704},[28,20327,12928],{"class":34},[28,20329,20330,20332,20334,20337,20339],{"class":30,"line":1802},[28,20331,10155],{"class":34},[28,20333,1663],{"class":42},[28,20335,20336],{"class":735}," \"有参构造函数!\"",[28,20338,1935],{"class":42},[28,20340,9328],{"class":34},[28,20342,20343,20345,20347],{"class":30,"line":1808},[28,20344,20305],{"class":34},[28,20346,83],{"class":42},[28,20348,8285],{"class":34},[28,20350,20351],{"class":30,"line":1820},[28,20352,2677],{"class":34},[28,20354,20355,20357,20359,20361,20363,20365,20367],{"class":30,"line":2102},[28,20356,19005],{"class":2453},[28,20358,367],{"class":34},[28,20360,7280],{"class":42},[28,20362,16055],{"class":2453},[28,20364,979],{"class":42},[28,20366,7313],{"class":5704},[28,20368,12928],{"class":34},[28,20370,20371,20373,20375,20378,20380],{"class":30,"line":2107},[28,20372,10155],{"class":34},[28,20374,1663],{"class":42},[28,20376,20377],{"class":735}," \"拷贝构造函数!\"",[28,20379,1935],{"class":42},[28,20381,9328],{"class":34},[28,20383,20384,20386,20388],{"class":30,"line":2113},[28,20385,20305],{"class":34},[28,20387,83],{"class":42},[28,20389,20390],{"class":34}," p.mAge;\n",[28,20392,20393],{"class":30,"line":2118},[28,20394,2677],{"class":34},[28,20396,20397],{"class":30,"line":2132},[28,20398,20399],{"class":73},"    \u002F\u002F析构函数在释放内存之前调用\n",[28,20401,20402,20404],{"class":30,"line":2137},[28,20403,19038],{"class":2453},[28,20405,11339],{"class":34},[28,20407,20408,20410,20412,20415,20417],{"class":30,"line":2143},[28,20409,10155],{"class":34},[28,20411,1663],{"class":42},[28,20413,20414],{"class":735}," \"析构函数!\"",[28,20416,1935],{"class":42},[28,20418,9328],{"class":34},[28,20420,20421],{"class":30,"line":2164},[28,20422,2677],{"class":34},[28,20424,20425],{"class":30,"line":2169},[28,20426,15202],{"class":42},[28,20428,20429,20431],{"class":30,"line":2183},[28,20430,2475],{"class":42},[28,20432,20433],{"class":34}," mAge;\n",[28,20435,20436],{"class":30,"line":2188},[28,20437,4483],{"class":34},[28,20439,20440],{"class":30,"line":2217},[28,20441,2890],{"emptyLinePlaceholder":562},[28,20443,20444],{"class":30,"line":2222},[28,20445,20446],{"class":73},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[28,20448,20449,20451,20453],{"class":30,"line":2239},[28,20450,5852],{"class":42},[28,20452,6076],{"class":2453},[28,20454,11339],{"class":34},[28,20456,20457],{"class":30,"line":2244},[28,20458,2890],{"emptyLinePlaceholder":562},[28,20460,20461,20463,20466,20468,20470,20472],{"class":30,"line":2249},[28,20462,19917],{"class":34},[28,20464,20465],{"class":2453},"man",[28,20467,367],{"class":34},[28,20469,938],{"class":38},[28,20471,6454],{"class":34},[28,20473,20474],{"class":73}," \u002F\u002Fp对象已经创建完毕\n",[28,20476,20477,20479,20482,20485],{"class":30,"line":2254},[28,20478,19917],{"class":34},[28,20480,20481],{"class":2453},"newman",[28,20483,20484],{"class":34},"(man);",[28,20486,20487],{"class":73}," \u002F\u002F调用拷贝构造函数\n",[28,20489,20490,20493,20495,20498],{"class":30,"line":2268},[28,20491,20492],{"class":34},"    Person newman2 ",[28,20494,83],{"class":42},[28,20496,20497],{"class":34}," man;",[28,20499,20500],{"class":73}," \u002F\u002F拷贝构造\n",[28,20502,20503],{"class":30,"line":2273},[28,20504,2890],{"emptyLinePlaceholder":562},[28,20506,20507],{"class":30,"line":3067},[28,20508,20509],{"class":73},"    \u002F\u002FPerson newman3;\n",[28,20511,20512,20515],{"class":30,"line":3081},[28,20513,20514],{"class":73},"    \u002F\u002Fnewman3 = man;",[28,20516,20517],{"class":73}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[28,20519,20520],{"class":30,"line":3089},[28,20521,2055],{"class":34},[28,20523,20524],{"class":30,"line":3094},[28,20525,2890],{"emptyLinePlaceholder":562},[28,20527,20528],{"class":30,"line":3100},[28,20529,20530],{"class":73},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[28,20532,20533],{"class":30,"line":3106},[28,20534,20535],{"class":73},"\u002F\u002F相当于Person p1 = p;\n",[28,20537,20538,20540,20542,20544,20546,20549],{"class":30,"line":3111},[28,20539,5852],{"class":42},[28,20541,19972],{"class":2453},[28,20543,367],{"class":34},[28,20545,19532],{"class":2453},[28,20547,20548],{"class":5704}," p1",[28,20550,20551],{"class":34},") {}\n",[28,20553,20554,20556,20558],{"class":30,"line":8436},[28,20555,5852],{"class":42},[28,20557,6145],{"class":2453},[28,20559,11339],{"class":34},[28,20561,20562,20564],{"class":30,"line":8460},[28,20563,19090],{"class":34},[28,20565,20566],{"class":73}," \u002F\u002F无参构造函数\n",[28,20568,20569,20571],{"class":30,"line":8465},[28,20570,20022],{"class":2453},[28,20572,20025],{"class":34},[28,20574,20575],{"class":30,"line":8471},[28,20576,2055],{"class":34},[28,20578,20579],{"class":30,"line":8498},[28,20580,2890],{"emptyLinePlaceholder":562},[28,20582,20583],{"class":30,"line":8503},[28,20584,20585],{"class":73},"\u002F\u002F3. 以值方式返回局部对象\n",[28,20587,20588,20590,20592],{"class":30,"line":8509},[28,20589,19532],{"class":2453},[28,20591,20041],{"class":2453},[28,20593,2466],{"class":34},[28,20595,20596],{"class":30,"line":8521},[28,20597,2036],{"class":34},[28,20599,20600],{"class":30,"line":8533},[28,20601,19522],{"class":34},[28,20603,20604,20606,20608,20610,20612,20614,20616,20618,20621,20623],{"class":30,"line":8545},[28,20605,7017],{"class":34},[28,20607,1663],{"class":42},[28,20609,2148],{"class":34},[28,20611,640],{"class":42},[28,20613,7006],{"class":42},[28,20615,1054],{"class":34},[28,20617,979],{"class":42},[28,20619,20620],{"class":34},"p1 ",[28,20622,1663],{"class":42},[28,20624,9328],{"class":34},[28,20626,20627,20629],{"class":30,"line":10202},[28,20628,4578],{"class":42},[28,20630,20631],{"class":34}," p1;\n",[28,20633,20634],{"class":30,"line":10227},[28,20635,2055],{"class":34},[28,20637,20638],{"class":30,"line":10250},[28,20639,2890],{"emptyLinePlaceholder":562},[28,20641,20642,20644,20646],{"class":30,"line":10274},[28,20643,5852],{"class":42},[28,20645,6217],{"class":2453},[28,20647,2466],{"class":34},[28,20649,20650],{"class":30,"line":10279},[28,20651,2036],{"class":34},[28,20653,20654,20656,20658,20660],{"class":30,"line":10284},[28,20655,20107],{"class":34},[28,20657,83],{"class":42},[28,20659,20041],{"class":2453},[28,20661,6124],{"class":34},[28,20663,20664,20666,20668,20670,20672,20674,20676,20678,20680,20682],{"class":30,"line":10289},[28,20665,7017],{"class":34},[28,20667,1663],{"class":42},[28,20669,2148],{"class":34},[28,20671,640],{"class":42},[28,20673,7006],{"class":42},[28,20675,1054],{"class":34},[28,20677,979],{"class":42},[28,20679,11934],{"class":34},[28,20681,1663],{"class":42},[28,20683,9328],{"class":34},[28,20685,20686],{"class":30,"line":10298},[28,20687,2055],{"class":34},[28,20689,20690],{"class":30,"line":10303},[28,20691,2890],{"emptyLinePlaceholder":562},[28,20693,20694],{"class":30,"line":10309},[28,20695,2890],{"emptyLinePlaceholder":562},[28,20697,20698,20700,20702],{"class":30,"line":10330},[28,20699,640],{"class":42},[28,20701,2463],{"class":2453},[28,20703,11339],{"class":34},[28,20705,20706],{"class":30,"line":10336},[28,20707,2890],{"emptyLinePlaceholder":562},[28,20709,20710],{"class":30,"line":10350},[28,20711,20712],{"class":73},"    \u002F\u002Ftest01();\n",[28,20714,20715],{"class":30,"line":10356},[28,20716,20717],{"class":73},"    \u002F\u002Ftest02();\n",[28,20719,20720,20722],{"class":30,"line":10383},[28,20721,20177],{"class":2453},[28,20723,6124],{"class":34},[28,20725,20726],{"class":30,"line":10392},[28,20727,2890],{"emptyLinePlaceholder":562},[28,20729,20730,20732,20734,20736],{"class":30,"line":10398},[28,20731,2793],{"class":2453},[28,20733,367],{"class":34},[28,20735,2798],{"class":735},[28,20737,3209],{"class":34},[28,20739,20740],{"class":30,"line":10406},[28,20741,2890],{"emptyLinePlaceholder":562},[28,20743,20744,20746,20748],{"class":30,"line":10411},[28,20745,4578],{"class":42},[28,20747,4581],{"class":38},[28,20749,1781],{"class":34},[28,20751,20752],{"class":30,"line":17090},[28,20753,2055],{"class":34},[605,20755,20757],{"id":20756},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20759,20760],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20762,20763],{},"1．默认构造函数(无参，函数体为空)",[14,20765,20766],{},"2．默认析构函数(无参，函数体为空)",[14,20768,20769],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20771,20772],{},"构造函数调用规则如下：",[1626,20774,20775,20778],{},[591,20776,20777],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[591,20779,20780],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[18,20782,20784],{"className":626,"code":20783,"language":628,"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,20785,20786,20794,20798,20803,20809,20821,20825,20830,20842,20851,20863,20867,20871,20887,20896,20908,20912,20916,20922,20934,20938,20942,20948,20952,20956,20964,20968,20980,20985,20993,20997,21015,21019,21023,21031,21035,21040,21048,21063,21076,21080,21085,21092,21108,21121,21125,21129,21137,21141,21147,21151,21161,21165,21173],{"__ignoreMap":23},[28,20787,20788,20790,20792],{"class":30,"line":31},[28,20789,15180],{"class":42},[28,20791,16055],{"class":2453},[28,20793,16058],{"class":34},[28,20795,20796],{"class":30,"line":77},[28,20797,15202],{"class":42},[28,20799,20800],{"class":30,"line":114},[28,20801,20802],{"class":73},"    \u002F\u002F无参（默认）构造函数\n",[28,20804,20805,20807],{"class":30,"line":128},[28,20806,19005],{"class":2453},[28,20808,11339],{"class":34},[28,20810,20811,20813,20815,20817,20819],{"class":30,"line":393},[28,20812,10155],{"class":34},[28,20814,1663],{"class":42},[28,20816,20296],{"class":735},[28,20818,1935],{"class":42},[28,20820,9328],{"class":34},[28,20822,20823],{"class":30,"line":409},[28,20824,2677],{"class":34},[28,20826,20827],{"class":30,"line":1711},[28,20828,20829],{"class":73},"    \u002F\u002F有参构造函数\n",[28,20831,20832,20834,20836,20838,20840],{"class":30,"line":1802},[28,20833,19005],{"class":2453},[28,20835,367],{"class":34},[28,20837,640],{"class":42},[28,20839,1889],{"class":5704},[28,20841,12928],{"class":34},[28,20843,20844,20847,20849],{"class":30,"line":1808},[28,20845,20846],{"class":34},"        age ",[28,20848,83],{"class":42},[28,20850,1923],{"class":34},[28,20852,20853,20855,20857,20859,20861],{"class":30,"line":1820},[28,20854,10155],{"class":34},[28,20856,1663],{"class":42},[28,20858,20336],{"class":735},[28,20860,1935],{"class":42},[28,20862,9328],{"class":34},[28,20864,20865],{"class":30,"line":2102},[28,20866,2677],{"class":34},[28,20868,20869],{"class":30,"line":2107},[28,20870,19360],{"class":73},[28,20872,20873,20875,20877,20879,20881,20883,20885],{"class":30,"line":2113},[28,20874,19005],{"class":2453},[28,20876,367],{"class":34},[28,20878,7280],{"class":42},[28,20880,16055],{"class":2453},[28,20882,979],{"class":42},[28,20884,7313],{"class":5704},[28,20886,12928],{"class":34},[28,20888,20889,20891,20893],{"class":30,"line":2118},[28,20890,20846],{"class":34},[28,20892,83],{"class":42},[28,20894,20895],{"class":34}," p.age;\n",[28,20897,20898,20900,20902,20904,20906],{"class":30,"line":2132},[28,20899,10155],{"class":34},[28,20901,1663],{"class":42},[28,20903,20377],{"class":735},[28,20905,1935],{"class":42},[28,20907,9328],{"class":34},[28,20909,20910],{"class":30,"line":2137},[28,20911,2677],{"class":34},[28,20913,20914],{"class":30,"line":2143},[28,20915,19033],{"class":73},[28,20917,20918,20920],{"class":30,"line":2164},[28,20919,19038],{"class":2453},[28,20921,11339],{"class":34},[28,20923,20924,20926,20928,20930,20932],{"class":30,"line":2169},[28,20925,10155],{"class":34},[28,20927,1663],{"class":42},[28,20929,20414],{"class":735},[28,20931,1935],{"class":42},[28,20933,9328],{"class":34},[28,20935,20936],{"class":30,"line":2183},[28,20937,2677],{"class":34},[28,20939,20940],{"class":30,"line":2188},[28,20941,15202],{"class":42},[28,20943,20944,20946],{"class":30,"line":2217},[28,20945,2475],{"class":42},[28,20947,8285],{"class":34},[28,20949,20950],{"class":30,"line":2222},[28,20951,4483],{"class":34},[28,20953,20954],{"class":30,"line":2239},[28,20955,2890],{"emptyLinePlaceholder":562},[28,20957,20958,20960,20962],{"class":30,"line":2244},[28,20959,5852],{"class":42},[28,20961,6076],{"class":2453},[28,20963,2466],{"class":34},[28,20965,20966],{"class":30,"line":2249},[28,20967,2036],{"class":34},[28,20969,20970,20972,20974,20976,20978],{"class":30,"line":2254},[28,20971,19917],{"class":34},[28,20973,7618],{"class":2453},[28,20975,367],{"class":34},[28,20977,1270],{"class":38},[28,20979,3209],{"class":34},[28,20981,20982],{"class":30,"line":2268},[28,20983,20984],{"class":73},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[28,20986,20987,20989,20991],{"class":30,"line":2273},[28,20988,19917],{"class":34},[28,20990,7521],{"class":2453},[28,20992,18001],{"class":34},[28,20994,20995],{"class":30,"line":3067},[28,20996,2890],{"emptyLinePlaceholder":562},[28,20998,20999,21001,21003,21006,21008,21011,21013],{"class":30,"line":3081},[28,21000,7017],{"class":34},[28,21002,1663],{"class":42},[28,21004,21005],{"class":735}," \"p2的年龄为： \"",[28,21007,1935],{"class":42},[28,21009,21010],{"class":34}," p2.age ",[28,21012,1663],{"class":42},[28,21014,9328],{"class":34},[28,21016,21017],{"class":30,"line":3089},[28,21018,2055],{"class":34},[28,21020,21021],{"class":30,"line":3094},[28,21022,2890],{"emptyLinePlaceholder":562},[28,21024,21025,21027,21029],{"class":30,"line":3100},[28,21026,5852],{"class":42},[28,21028,6145],{"class":2453},[28,21030,2466],{"class":34},[28,21032,21033],{"class":30,"line":3106},[28,21034,2036],{"class":34},[28,21036,21037],{"class":30,"line":3111},[28,21038,21039],{"class":73},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[28,21041,21042,21045],{"class":30,"line":8436},[28,21043,21044],{"class":34},"    Person p1;",[28,21046,21047],{"class":73}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[28,21049,21050,21052,21054,21056,21058,21060],{"class":30,"line":8460},[28,21051,19917],{"class":34},[28,21053,7521],{"class":2453},[28,21055,367],{"class":34},[28,21057,225],{"class":38},[28,21059,6454],{"class":34},[28,21061,21062],{"class":73}," \u002F\u002F用户提供的有参\n",[28,21064,21065,21067,21070,21073],{"class":30,"line":8465},[28,21066,19917],{"class":34},[28,21068,21069],{"class":2453},"p3",[28,21071,21072],{"class":34},"(p2);",[28,21074,21075],{"class":73}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[28,21077,21078],{"class":30,"line":8471},[28,21079,2890],{"emptyLinePlaceholder":562},[28,21081,21082],{"class":30,"line":8498},[28,21083,21084],{"class":73},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[28,21086,21087,21090],{"class":30,"line":8503},[28,21088,21089],{"class":34},"    Person p4;",[28,21091,21047],{"class":73},[28,21093,21094,21096,21099,21101,21103,21105],{"class":30,"line":8509},[28,21095,19917],{"class":34},[28,21097,21098],{"class":2453},"p5",[28,21100,367],{"class":34},[28,21102,225],{"class":38},[28,21104,6454],{"class":34},[28,21106,21107],{"class":73}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[28,21109,21110,21112,21115,21118],{"class":30,"line":8521},[28,21111,19917],{"class":34},[28,21113,21114],{"class":2453},"p6",[28,21116,21117],{"class":34},"(p5);",[28,21119,21120],{"class":73}," \u002F\u002F用户自己提供拷贝构造\n",[28,21122,21123],{"class":30,"line":8533},[28,21124,2055],{"class":34},[28,21126,21127],{"class":30,"line":8545},[28,21128,2890],{"emptyLinePlaceholder":562},[28,21130,21131,21133,21135],{"class":30,"line":10202},[28,21132,640],{"class":42},[28,21134,2463],{"class":2453},[28,21136,11339],{"class":34},[28,21138,21139],{"class":30,"line":10227},[28,21140,2890],{"emptyLinePlaceholder":562},[28,21142,21143,21145],{"class":30,"line":10250},[28,21144,6121],{"class":2453},[28,21146,6124],{"class":34},[28,21148,21149],{"class":30,"line":10274},[28,21150,2890],{"emptyLinePlaceholder":562},[28,21152,21153,21155,21157,21159],{"class":30,"line":10279},[28,21154,2793],{"class":2453},[28,21156,367],{"class":34},[28,21158,2798],{"class":735},[28,21160,3209],{"class":34},[28,21162,21163],{"class":30,"line":10284},[28,21164,2890],{"emptyLinePlaceholder":562},[28,21166,21167,21169,21171],{"class":30,"line":10289},[28,21168,4578],{"class":42},[28,21170,4581],{"class":38},[28,21172,1781],{"class":34},[28,21174,21175],{"class":30,"line":10298},[28,21176,2055],{"class":34},[605,21178,21180],{"id":21179},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21182,21183],{},"浅拷贝：简单的赋值拷贝操作",[14,21185,21186],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[18,21188,21190],{"className":626,"code":21189,"language":628,"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,21191,21192,21198,21208,21214,21218,21222,21227,21233,21237,21250,21254,21258,21265,21269,21279,21294,21307,21311,21316,21321,21337,21341,21354,21359,21364,21369,21378,21383,21398,21402,21406,21410,21416,21420,21425,21440,21444,21455,21469,21473,21482,21486,21492,21504,21508,21516,21520,21537,21568,21576,21604,21608,21612,21620,21624,21630],{"__ignoreMap":23},[28,21193,21194,21196],{"class":30,"line":31},[28,21195,2439],{"class":42},[28,21197,2442],{"class":735},[28,21199,21200,21202,21204,21206],{"class":30,"line":77},[28,21201,2447],{"class":42},[28,21203,2450],{"class":42},[28,21205,2454],{"class":2453},[28,21207,1781],{"class":34},[28,21209,21210,21212],{"class":30,"line":114},[28,21211,15180],{"class":42},[28,21213,15657],{"class":2453},[28,21215,21216],{"class":30,"line":128},[28,21217,2036],{"class":34},[28,21219,21220],{"class":30,"line":393},[28,21221,15202],{"class":42},[28,21223,21224],{"class":30,"line":409},[28,21225,21226],{"class":73},"    \u002F\u002F默认构造函数\n",[28,21228,21229,21231],{"class":30,"line":1711},[28,21230,19005],{"class":2453},[28,21232,2466],{"class":34},[28,21234,21235],{"class":30,"line":1802},[28,21236,2520],{"class":34},[28,21238,21239,21241,21243,21246,21248],{"class":30,"line":1808},[28,21240,3939],{"class":34},[28,21242,1663],{"class":42},[28,21244,21245],{"class":735},"\"默认构造函数\"",[28,21247,1663],{"class":42},[28,21249,1685],{"class":34},[28,21251,21252],{"class":30,"line":1820},[28,21253,2677],{"class":34},[28,21255,21256],{"class":30,"line":2102},[28,21257,20829],{"class":73},[28,21259,21260,21262],{"class":30,"line":2107},[28,21261,19038],{"class":2453},[28,21263,21264],{"class":34},"(int age,int height)\n",[28,21266,21267],{"class":30,"line":2113},[28,21268,2520],{"class":34},[28,21270,21271,21274,21276],{"class":30,"line":2118},[28,21272,21273],{"class":34},"        m_Age",[28,21275,83],{"class":42},[28,21277,21278],{"class":34},"age;\n",[28,21280,21281,21284,21286,21288,21291],{"class":30,"line":2132},[28,21282,21283],{"class":34},"        m_Height",[28,21285,12203],{"class":42},[28,21287,2872],{"class":42},[28,21289,21290],{"class":34},"(height);",[28,21292,21293],{"class":73},"\u002F\u002F放到堆区\n",[28,21295,21296,21298,21300,21303,21305],{"class":30,"line":2137},[28,21297,3939],{"class":34},[28,21299,1663],{"class":42},[28,21301,21302],{"class":735},"\"有参构造函数\"",[28,21304,1663],{"class":42},[28,21306,1685],{"class":34},[28,21308,21309],{"class":30,"line":2143},[28,21310,2677],{"class":34},[28,21312,21313],{"class":30,"line":2164},[28,21314,21315],{"class":73},"    \u002F\u002F深拷贝解决上述问题\n",[28,21317,21318],{"class":30,"line":2169},[28,21319,21320],{"class":73},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[28,21322,21323,21325,21327,21329,21331,21333,21335],{"class":30,"line":2183},[28,21324,19005],{"class":2453},[28,21326,367],{"class":34},[28,21328,7280],{"class":42},[28,21330,16055],{"class":2453},[28,21332,11070],{"class":42},[28,21334,14],{"class":5704},[28,21336,228],{"class":34},[28,21338,21339],{"class":30,"line":2188},[28,21340,2520],{"class":34},[28,21342,21343,21345,21347,21350,21352],{"class":30,"line":2217},[28,21344,3939],{"class":34},[28,21346,1663],{"class":42},[28,21348,21349],{"class":735},"\"拷贝构造函数\"",[28,21351,1663],{"class":42},[28,21353,1685],{"class":34},[28,21355,21356],{"class":30,"line":2222},[28,21357,21358],{"class":73},"        \u002F\u002F编译器默认的写如下注释部分\n",[28,21360,21361],{"class":30,"line":2239},[28,21362,21363],{"class":73},"        \u002F\u002Fm_Age=p.m_Age;\n",[28,21365,21366],{"class":30,"line":2244},[28,21367,21368],{"class":73},"        \u002F\u002Fm_Height=p.m_Height;\n",[28,21370,21371,21373,21375],{"class":30,"line":2249},[28,21372,21273],{"class":34},[28,21374,83],{"class":42},[28,21376,21377],{"class":34},"p.m_Age;\n",[28,21379,21380],{"class":30,"line":2254},[28,21381,21382],{"class":73},"        \u002F\u002F深拷贝操作\n",[28,21384,21385,21387,21389,21391,21393,21395],{"class":30,"line":2268},[28,21386,21283],{"class":34},[28,21388,12203],{"class":42},[28,21390,2872],{"class":42},[28,21392,367],{"class":34},[28,21394,256],{"class":42},[28,21396,21397],{"class":34},"p.m_Height);\n",[28,21399,21400],{"class":30,"line":2273},[28,21401,2677],{"class":34},[28,21403,21404],{"class":30,"line":3067},[28,21405,2890],{"emptyLinePlaceholder":562},[28,21407,21408],{"class":30,"line":3081},[28,21409,19033],{"class":73},[28,21411,21412,21414],{"class":30,"line":3089},[28,21413,19038],{"class":2453},[28,21415,2466],{"class":34},[28,21417,21418],{"class":30,"line":3094},[28,21419,2520],{"class":34},[28,21421,21422],{"class":30,"line":3100},[28,21423,21424],{"class":73},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[28,21426,21427,21429,21432,21435,21438],{"class":30,"line":3106},[28,21428,2987],{"class":42},[28,21430,21431],{"class":34},"(m_Height ",[28,21433,21434],{"class":42},"!=",[28,21436,21437],{"class":38}," NULL",[28,21439,228],{"class":34},[28,21441,21442],{"class":30,"line":3111},[28,21443,3000],{"class":34},[28,21445,21446,21449,21452],{"class":30,"line":8436},[28,21447,21448],{"class":42},"            delete",[28,21450,21451],{"class":34}," m_Height;",[28,21453,21454],{"class":73}," \u002F\u002F释放堆区内存\n",[28,21456,21457,21460,21462,21464,21466],{"class":30,"line":8460},[28,21458,21459],{"class":34},"            m_Height",[28,21461,83],{"class":42},[28,21463,2882],{"class":38},[28,21465,689],{"class":34},[28,21467,21468],{"class":73}," \u002F\u002F防止野指针\n",[28,21470,21471],{"class":30,"line":8465},[28,21472,3019],{"class":34},[28,21474,21475,21477,21479],{"class":30,"line":8471},[28,21476,3939],{"class":34},[28,21478,1663],{"class":42},[28,21480,21481],{"class":735},"\"Person的析构函数调用\"\n",[28,21483,21484],{"class":30,"line":8498},[28,21485,2677],{"class":34},[28,21487,21488,21490],{"class":30,"line":8503},[28,21489,2475],{"class":42},[28,21491,16152],{"class":34},[28,21493,21494,21496,21498,21501],{"class":30,"line":8509},[28,21495,2475],{"class":42},[28,21497,7006],{"class":42},[28,21499,21500],{"class":34},"m_Height;",[28,21502,21503],{"class":73}," \u002F\u002F定义一个指针，指向身高\n",[28,21505,21506],{"class":30,"line":8521},[28,21507,4483],{"class":34},[28,21509,21510,21512,21514],{"class":30,"line":8533},[28,21511,5852],{"class":42},[28,21513,6076],{"class":2453},[28,21515,2466],{"class":34},[28,21517,21518],{"class":30,"line":8545},[28,21519,2036],{"class":34},[28,21521,21522,21524,21526,21528,21530,21532,21535],{"class":30,"line":10202},[28,21523,19917],{"class":34},[28,21525,7618],{"class":2453},[28,21527,367],{"class":34},[28,21529,1270],{"class":38},[28,21531,90],{"class":34},[28,21533,21534],{"class":38},"160",[28,21536,3209],{"class":34},[28,21538,21539,21541,21543,21546,21548,21551,21553,21556,21558,21561,21563,21565],{"class":30,"line":10227},[28,21540,2041],{"class":34},[28,21542,1663],{"class":42},[28,21544,21545],{"class":735},"\"p1的年龄为:\"",[28,21547,1663],{"class":42},[28,21549,21550],{"class":34},"p1.m_Age",[28,21552,1663],{"class":42},[28,21554,21555],{"class":735},"\"身高为：\"",[28,21557,6907],{"class":42},[28,21559,21560],{"class":34},"p1.m_Height",[28,21562,1663],{"class":42},[28,21564,1729],{"class":34},[28,21566,21567],{"class":73},"  \u002F\u002F18\n",[28,21569,21570,21572,21574],{"class":30,"line":10250},[28,21571,19917],{"class":34},[28,21573,7521],{"class":2453},[28,21575,18001],{"class":34},[28,21577,21578,21580,21582,21585,21587,21589,21591,21593,21595,21598,21600,21602],{"class":30,"line":10274},[28,21579,2041],{"class":34},[28,21581,1663],{"class":42},[28,21583,21584],{"class":735},"\"p2的年龄为：\"",[28,21586,1663],{"class":42},[28,21588,19947],{"class":34},[28,21590,1663],{"class":42},[28,21592,21555],{"class":735},[28,21594,6907],{"class":42},[28,21596,21597],{"class":34},"p2.m_Height",[28,21599,1663],{"class":42},[28,21601,1729],{"class":34},[28,21603,21567],{"class":73},[28,21605,21606],{"class":30,"line":10279},[28,21607,13696],{"class":34},[28,21609,21610],{"class":30,"line":10284},[28,21611,2055],{"class":34},[28,21613,21614,21616,21618],{"class":30,"line":10289},[28,21615,640],{"class":42},[28,21617,2463],{"class":2453},[28,21619,2466],{"class":34},[28,21621,21622],{"class":30,"line":10298},[28,21623,2036],{"class":34},[28,21625,21626,21628],{"class":30,"line":10303},[28,21627,6121],{"class":2453},[28,21629,6124],{"class":34},[28,21631,21632],{"class":30,"line":10309},[28,21633,2055],{"class":34},[14,21635,21636],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21638,21639],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21641,21642],{},[420,21643],{"alt":23,"src":21644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21646,21647],{},"浅拷贝问题要使用深拷贝来解决",[14,21649,21650],{},[420,21651],{"alt":23,"src":21652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21654,21655],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[605,21657,21659],{"id":21658},"_826初始化列表","8.2.6初始化列表",[14,21661,21662],{},"作用：初始化属性",[14,21664,5669],{},[18,21666,21669],{"className":21667,"code":21668,"language":5675},[5673],"构造函数():属性1(值1),属性2(值2).....{}\n",[25,21670,21668],{"__ignoreMap":23},[14,21672,21673],{},"例子",[18,21675,21677],{"className":626,"code":21676,"language":628,"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,21678,21679,21685,21695,21701,21705,21710,21714,21719,21724,21729,21734,21739,21744,21748,21753,21758,21801,21810,21828,21846,21864,21868,21872,21879,21886,21893,21897,21901,21909,21913,21917,21937,21946,21950,21954,21964,21968,21976],{"__ignoreMap":23},[28,21680,21681,21683],{"class":30,"line":31},[28,21682,2439],{"class":42},[28,21684,2442],{"class":735},[28,21686,21687,21689,21691,21693],{"class":30,"line":77},[28,21688,2447],{"class":42},[28,21690,2450],{"class":42},[28,21692,2454],{"class":2453},[28,21694,1781],{"class":34},[28,21696,21697,21699],{"class":30,"line":114},[28,21698,15180],{"class":42},[28,21700,15657],{"class":2453},[28,21702,21703],{"class":30,"line":128},[28,21704,2036],{"class":34},[28,21706,21707],{"class":30,"line":393},[28,21708,21709],{"class":42},"    public:\n",[28,21711,21712],{"class":30,"line":409},[28,21713,2890],{"emptyLinePlaceholder":562},[28,21715,21716],{"class":30,"line":1711},[28,21717,21718],{"class":73},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[28,21720,21721],{"class":30,"line":1802},[28,21722,21723],{"class":73},"    \u002F\u002FPerson(int a, int b, int c) {\n",[28,21725,21726],{"class":30,"line":1808},[28,21727,21728],{"class":73},"    \u002F\u002F  m_A = a;\n",[28,21730,21731],{"class":30,"line":1820},[28,21732,21733],{"class":73},"    \u002F\u002F  m_B = b;\n",[28,21735,21736],{"class":30,"line":2102},[28,21737,21738],{"class":73},"    \u002F\u002F  m_C = c;\n",[28,21740,21741],{"class":30,"line":2107},[28,21742,21743],{"class":73},"    \u002F\u002F}\n",[28,21745,21746],{"class":30,"line":2113},[28,21747,2890],{"emptyLinePlaceholder":562},[28,21749,21750],{"class":30,"line":2118},[28,21751,21752],{"class":73},"    \u002F\u002F初始化列表方式初始化\n",[28,21754,21755],{"class":30,"line":2132},[28,21756,21757],{"class":73},"    \u002F\u002F使用有参构造函数\n",[28,21759,21760,21762,21764,21766,21768,21770,21772,21774,21776,21778,21780,21783,21786,21789,21792,21795,21798],{"class":30,"line":2137},[28,21761,19005],{"class":2453},[28,21763,367],{"class":34},[28,21765,640],{"class":42},[28,21767,1889],{"class":5704},[28,21769,12921],{"class":34},[28,21771,640],{"class":42},[28,21773,3323],{"class":5704},[28,21775,12921],{"class":34},[28,21777,640],{"class":42},[28,21779,3339],{"class":5704},[28,21781,21782],{"class":34},") :",[28,21784,21785],{"class":2453},"m_A",[28,21787,21788],{"class":34},"(a), ",[28,21790,21791],{"class":2453},"m_B",[28,21793,21794],{"class":34},"(b), ",[28,21796,21797],{"class":2453},"m_C",[28,21799,21800],{"class":34},"(c) {}\n",[28,21802,21803,21805,21808],{"class":30,"line":2143},[28,21804,15395],{"class":42},[28,21806,21807],{"class":2453}," PrintPerson",[28,21809,11339],{"class":34},[28,21811,21812,21814,21816,21819,21821,21824,21826],{"class":30,"line":2164},[28,21813,10155],{"class":34},[28,21815,1663],{"class":42},[28,21817,21818],{"class":735}," \"mA:\"",[28,21820,1935],{"class":42},[28,21822,21823],{"class":34}," m_A ",[28,21825,1663],{"class":42},[28,21827,9328],{"class":34},[28,21829,21830,21832,21834,21837,21839,21842,21844],{"class":30,"line":2169},[28,21831,10155],{"class":34},[28,21833,1663],{"class":42},[28,21835,21836],{"class":735}," \"mB:\"",[28,21838,1935],{"class":42},[28,21840,21841],{"class":34}," m_B ",[28,21843,1663],{"class":42},[28,21845,9328],{"class":34},[28,21847,21848,21850,21852,21855,21857,21860,21862],{"class":30,"line":2183},[28,21849,10155],{"class":34},[28,21851,1663],{"class":42},[28,21853,21854],{"class":735}," \"mC:\"",[28,21856,1935],{"class":42},[28,21858,21859],{"class":34}," m_C ",[28,21861,1663],{"class":42},[28,21863,9328],{"class":34},[28,21865,21866],{"class":30,"line":2188},[28,21867,2677],{"class":34},[28,21869,21870],{"class":30,"line":2217},[28,21871,15708],{"class":42},[28,21873,21874,21876],{"class":30,"line":2222},[28,21875,2475],{"class":42},[28,21877,21878],{"class":34}," m_A;\n",[28,21880,21881,21883],{"class":30,"line":2239},[28,21882,2475],{"class":42},[28,21884,21885],{"class":34}," m_B;\n",[28,21887,21888,21890],{"class":30,"line":2244},[28,21889,2475],{"class":42},[28,21891,21892],{"class":34}," m_C;\n",[28,21894,21895],{"class":30,"line":2249},[28,21896,4483],{"class":34},[28,21898,21899],{"class":30,"line":2254},[28,21900,2890],{"emptyLinePlaceholder":562},[28,21902,21903,21905,21907],{"class":30,"line":2268},[28,21904,640],{"class":42},[28,21906,2463],{"class":2453},[28,21908,6466],{"class":34},[28,21910,21911],{"class":30,"line":2273},[28,21912,2036],{"class":34},[28,21914,21915],{"class":30,"line":3067},[28,21916,2890],{"emptyLinePlaceholder":562},[28,21918,21919,21921,21923,21925,21927,21929,21931,21933,21935],{"class":30,"line":3081},[28,21920,19917],{"class":34},[28,21922,14],{"class":2453},[28,21924,367],{"class":34},[28,21926,39],{"class":38},[28,21928,12921],{"class":34},[28,21930,93],{"class":38},[28,21932,12921],{"class":34},[28,21934,98],{"class":38},[28,21936,3209],{"class":34},[28,21938,21939,21941,21944],{"class":30,"line":3089},[28,21940,16352],{"class":34},[28,21942,21943],{"class":2453},"PrintPerson",[28,21945,6124],{"class":34},[28,21947,21948],{"class":30,"line":3094},[28,21949,2890],{"emptyLinePlaceholder":562},[28,21951,21952],{"class":30,"line":3100},[28,21953,2890],{"emptyLinePlaceholder":562},[28,21955,21956,21958,21960,21962],{"class":30,"line":3106},[28,21957,2793],{"class":2453},[28,21959,367],{"class":34},[28,21961,2798],{"class":735},[28,21963,3209],{"class":34},[28,21965,21966],{"class":30,"line":3111},[28,21967,2890],{"emptyLinePlaceholder":562},[28,21969,21970,21972,21974],{"class":30,"line":8436},[28,21971,4578],{"class":42},[28,21973,4581],{"class":38},[28,21975,1781],{"class":34},[28,21977,21978],{"class":30,"line":8460},[28,21979,2055],{"class":34},[14,21981,21982,21983,21986,21987],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[780,21984,21985],{},"参数名就是定义的对象属性","，",[780,21988,21989],{},"属性后面的值为有参构造函数的形参",[18,21991,21993],{"className":626,"code":21992,"language":628,"meta":23,"style":23},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[25,21994,21995],{"__ignoreMap":23},[28,21996,21997,21999,22001,22003,22006,22008,22011,22013,22016,22018,22021,22023,22026,22028],{"class":30,"line":31},[28,21998,19532],{"class":2453},[28,22000,367],{"class":34},[28,22002,640],{"class":42},[28,22004,22005],{"class":34}," a.",[28,22007,640],{"class":42},[28,22009,22010],{"class":34}," b,",[28,22012,640],{"class":42},[28,22014,22015],{"class":34}," b):",[28,22017,21785],{"class":2453},[28,22019,22020],{"class":34},"(a),",[28,22022,21791],{"class":2453},[28,22024,22025],{"class":34},"(c),",[28,22027,21797],{"class":2453},[28,22029,22030],{"class":34},"(b) {}\n",[605,22032,22034],{"id":22033},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22036,22037],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22039,15119],{},[18,22041,22043],{"className":626,"code":22042,"language":628,"meta":23,"style":23},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[25,22044,22045,22050,22055,22059,22064,22068],{"__ignoreMap":23},[28,22046,22047],{"class":30,"line":31},[28,22048,22049],{"class":34},"A{};\n",[28,22051,22052],{"class":30,"line":77},[28,22053,22054],{"class":34},"B\n",[28,22056,22057],{"class":30,"line":114},[28,22058,2036],{"class":34},[28,22060,22061],{"class":30,"line":128},[28,22062,22063],{"class":34},"    A a;\n",[28,22065,22066],{"class":30,"line":393},[28,22067,2055],{"class":34},[28,22069,22070],{"class":30,"line":409},[28,22071,22072],{"class":73},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22074,22075],{},"案例",[18,22077,22079],{"className":626,"code":22078,"language":628,"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,22080,22081,22086,22093,22097,22102,22107,22121,22125,22135,22146,22150,22157,22161,22174,22178,22183,22188,22192,22198,22202,22206,22210,22241,22245,22256,22260,22266,22270,22283,22287,22291,22295,22300,22305,22309,22317,22321,22338,22357,22361,22369,22373,22379],{"__ignoreMap":23},[28,22082,22083],{"class":30,"line":31},[28,22084,22085],{"class":73},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[28,22087,22088,22090],{"class":30,"line":77},[28,22089,15180],{"class":42},[28,22091,22092],{"class":2453}," Phone\n",[28,22094,22095],{"class":30,"line":114},[28,22096,2036],{"class":34},[28,22098,22099],{"class":30,"line":128},[28,22100,22101],{"class":34},"public：\n",[28,22103,22104],{"class":30,"line":393},[28,22105,22106],{"class":73},"    \u002F\u002F 赋值(构造函数)\n",[28,22108,22109,22112,22114,22116,22119],{"class":30,"line":409},[28,22110,22111],{"class":2453},"    Phone",[28,22113,367],{"class":34},[28,22115,15403],{"class":2453},[28,22117,22118],{"class":5704}," pName",[28,22120,228],{"class":34},[28,22122,22123],{"class":30,"line":1711},[28,22124,2520],{"class":34},[28,22126,22127,22130,22132],{"class":30,"line":1802},[28,22128,22129],{"class":34},"        m_pName",[28,22131,83],{"class":42},[28,22133,22134],{"class":34},"pName;\n",[28,22136,22137,22139,22141,22144],{"class":30,"line":1808},[28,22138,3939],{"class":34},[28,22140,1663],{"class":42},[28,22142,22143],{"class":735},"\"Phone的构造函数调用\"",[28,22145,1781],{"class":34},[28,22147,22148],{"class":30,"line":1820},[28,22149,2677],{"class":34},[28,22151,22152,22155],{"class":30,"line":2102},[28,22153,22154],{"class":2453},"    ~Phone",[28,22156,2466],{"class":34},[28,22158,22159],{"class":30,"line":2107},[28,22160,2520],{"class":34},[28,22162,22163,22165,22167,22170,22172],{"class":30,"line":2113},[28,22164,3939],{"class":34},[28,22166,1663],{"class":42},[28,22168,22169],{"class":735},"\"Phone析构函数调用\"",[28,22171,1663],{"class":42},[28,22173,1685],{"class":34},[28,22175,22176],{"class":30,"line":2118},[28,22177,2677],{"class":34},[28,22179,22180],{"class":30,"line":2132},[28,22181,22182],{"class":73},"    \u002F\u002F\n",[28,22184,22185],{"class":30,"line":2137},[28,22186,22187],{"class":34},"    string m_PName;\n",[28,22189,22190],{"class":30,"line":2143},[28,22191,4483],{"class":34},[28,22193,22194,22196],{"class":30,"line":2164},[28,22195,15180],{"class":42},[28,22197,15657],{"class":2453},[28,22199,22200],{"class":30,"line":2169},[28,22201,2036],{"class":34},[28,22203,22204],{"class":30,"line":2183},[28,22205,15202],{"class":42},[28,22207,22208],{"class":30,"line":2188},[28,22209,17480],{"class":73},[28,22211,22212,22214,22216,22218,22220,22222,22224,22227,22230,22232,22235,22238],{"class":30,"line":2217},[28,22213,19005],{"class":2453},[28,22215,367],{"class":34},[28,22217,15403],{"class":2453},[28,22219,15406],{"class":5704},[28,22221,90],{"class":34},[28,22223,15403],{"class":2453},[28,22225,22226],{"class":5704}," pname",[28,22228,22229],{"class":34},"):",[28,22231,15496],{"class":2453},[28,22233,22234],{"class":34},"(name),m_phone.",[28,22236,22237],{"class":2453},"m_PName",[28,22239,22240],{"class":34},"(pname) \n",[28,22242,22243],{"class":30,"line":2222},[28,22244,2520],{"class":34},[28,22246,22247,22249,22251,22254],{"class":30,"line":2239},[28,22248,3939],{"class":34},[28,22250,1663],{"class":42},[28,22252,22253],{"class":735},"\"Person的构造函数调用\"",[28,22255,1781],{"class":34},[28,22257,22258],{"class":30,"line":2244},[28,22259,2677],{"class":34},[28,22261,22262,22264],{"class":30,"line":2249},[28,22263,19038],{"class":2453},[28,22265,2466],{"class":34},[28,22267,22268],{"class":30,"line":2254},[28,22269,2520],{"class":34},[28,22271,22272,22274,22276,22279,22281],{"class":30,"line":2268},[28,22273,3939],{"class":34},[28,22275,1663],{"class":42},[28,22277,22278],{"class":735},"\"Person析构函数调用\"",[28,22280,1663],{"class":42},[28,22282,1685],{"class":34},[28,22284,22285],{"class":30,"line":2273},[28,22286,2677],{"class":34},[28,22288,22289],{"class":30,"line":3067},[28,22290,8268],{"class":73},[28,22292,22293],{"class":30,"line":3081},[28,22294,15378],{"class":34},[28,22296,22297],{"class":30,"line":3089},[28,22298,22299],{"class":73},"    \u002F\u002F手机\n",[28,22301,22302],{"class":30,"line":3094},[28,22303,22304],{"class":34},"    Phone m_Phone;\n",[28,22306,22307],{"class":30,"line":3100},[28,22308,4483],{"class":34},[28,22310,22311,22313,22315],{"class":30,"line":3106},[28,22312,5852],{"class":42},[28,22314,6076],{"class":2453},[28,22316,2466],{"class":34},[28,22318,22319],{"class":30,"line":3111},[28,22320,2036],{"class":34},[28,22322,22323,22325,22327,22329,22331,22333,22336],{"class":30,"line":8436},[28,22324,19917],{"class":34},[28,22326,14],{"class":2453},[28,22328,367],{"class":34},[28,22330,8404],{"class":735},[28,22332,90],{"class":34},[28,22334,22335],{"class":735},"\"安卓\"",[28,22337,3209],{"class":34},[28,22339,22340,22342,22344,22347,22349,22352,22354],{"class":30,"line":8460},[28,22341,2041],{"class":34},[28,22343,1663],{"class":42},[28,22345,22346],{"class":34},"p.Name",[28,22348,1663],{"class":42},[28,22350,22351],{"class":735},"\"拿着：\"",[28,22353,1663],{"class":42},[28,22355,22356],{"class":34},"p.m_phone.m_PName;\n",[28,22358,22359],{"class":30,"line":8465},[28,22360,2055],{"class":34},[28,22362,22363,22365,22367],{"class":30,"line":8471},[28,22364,640],{"class":42},[28,22366,2463],{"class":2453},[28,22368,2466],{"class":34},[28,22370,22371],{"class":30,"line":8498},[28,22372,2036],{"class":34},[28,22374,22375,22377],{"class":30,"line":8503},[28,22376,6121],{"class":2453},[28,22378,6124],{"class":34},[28,22380,22381],{"class":30,"line":8509},[28,22382,2055],{"class":34},[14,22384,9513],{},[18,22386,22388],{"className":626,"code":22387,"language":628,"meta":23,"style":23},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[25,22389,22390,22395],{"__ignoreMap":23},[28,22391,22392],{"class":30,"line":31},[28,22393,22394],{"class":73},"    \u002F\u002F不需要写这个：\n",[28,22396,22397],{"class":30,"line":77},[28,22398,22399],{"class":73},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22401,22402],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[18,22404,22406],{"className":626,"code":22405,"language":628,"meta":23,"style":23},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[25,22407,22408],{"__ignoreMap":23},[28,22409,22410,22412,22415,22417,22420,22423],{"class":30,"line":31},[28,22411,19532],{"class":2453},[28,22413,22414],{"class":34},"(string name.string pname):",[28,22416,15496],{"class":2453},[28,22418,22419],{"class":34},"(name),",[28,22421,22422],{"class":2453},"m_phone",[28,22424,22425],{"class":34},"(pname) {}\n",[14,22427,22428,22429,83,22432],{},"采用的是隐式转换法，实际为如下：\n",[25,22430,22431],{},"m_phone(pname)",[25,22433,22434],{},"Phone m_phone=pname",[14,22436,22437,22440],{},[780,22438,22439],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22442,22443],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[605,22445,22447],{"id":22446},"_828静态对象","8.2.8静态对象",[14,22449,22450],{},"静态对象在成员对象前static，称为静态对象",[14,22452,22453],{},"静态对象分为两类：",[588,22455,22456],{},[591,22457,22458],{},"静态成员变量",[1626,22460,22461,22464,22467],{},[591,22462,22463],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[591,22465,22466],{},"②在编译阶段分配内存",[591,22468,22469],{},"③类内声明，类外初始化",[588,22471,22472],{"start":77},[591,22473,22474],{},"静态成员函数",[1626,22476,22477,22480],{},[591,22478,22479],{},"①所有对象共享同一个函数",[591,22481,22482],{},"②静态成员函数只能访问静态成员变量",[22484,22485,22487],"h4",{"id":22486},"_8281静态成员变量","8.2.8.1静态成员变量",[18,22489,22491],{"className":626,"code":22490,"language":628,"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,22492,22493,22499,22509,22515,22519,22523,22528,22533,22538,22546,22550,22554,22558,22566,22570,22574,22579,22592,22596,22604,22608,22614],{"__ignoreMap":23},[28,22494,22495,22497],{"class":30,"line":31},[28,22496,2439],{"class":42},[28,22498,2442],{"class":735},[28,22500,22501,22503,22505,22507],{"class":30,"line":77},[28,22502,2447],{"class":42},[28,22504,2450],{"class":42},[28,22506,2454],{"class":2453},[28,22508,1781],{"class":34},[28,22510,22511,22513],{"class":30,"line":114},[28,22512,15180],{"class":42},[28,22514,15657],{"class":2453},[28,22516,22517],{"class":30,"line":128},[28,22518,2036],{"class":34},[28,22520,22521],{"class":30,"line":393},[28,22522,15202],{"class":42},[28,22524,22525],{"class":30,"line":409},[28,22526,22527],{"class":73},"    \u002F\u002F非静态成员变量\n",[28,22529,22530],{"class":30,"line":1711},[28,22531,22532],{"class":73},"    \u002F\u002F int m_A;\n",[28,22534,22535],{"class":30,"line":1802},[28,22536,22537],{"class":73},"    \u002F\u002F定义静态成员变量\n",[28,22539,22540,22542,22544],{"class":30,"line":1808},[28,22541,11506],{"class":42},[28,22543,2872],{"class":42},[28,22545,21878],{"class":34},[28,22547,22548],{"class":30,"line":1820},[28,22549,2890],{"emptyLinePlaceholder":562},[28,22551,22552],{"class":30,"line":2102},[28,22553,2890],{"emptyLinePlaceholder":562},[28,22555,22556],{"class":30,"line":2107},[28,22557,4483],{"class":34},[28,22559,22560,22562,22564],{"class":30,"line":2113},[28,22561,5852],{"class":42},[28,22563,6076],{"class":2453},[28,22565,2466],{"class":34},[28,22567,22568],{"class":30,"line":2118},[28,22569,2036],{"class":34},[28,22571,22572],{"class":30,"line":2132},[28,22573,15799],{"class":34},[28,22575,22576],{"class":30,"line":2137},[28,22577,22578],{"class":73},"    \u002F\u002F输出类成员变量这块内存\n",[28,22580,22581,22583,22585,22588,22590],{"class":30,"line":2143},[28,22582,2041],{"class":34},[28,22584,1663],{"class":42},[28,22586,22587],{"class":34},"p.m_A",[28,22589,1663],{"class":42},[28,22591,1685],{"class":34},[28,22593,22594],{"class":30,"line":2164},[28,22595,2055],{"class":34},[28,22597,22598,22600,22602],{"class":30,"line":2169},[28,22599,640],{"class":42},[28,22601,2463],{"class":2453},[28,22603,2466],{"class":34},[28,22605,22606],{"class":30,"line":2183},[28,22607,2036],{"class":34},[28,22609,22610,22612],{"class":30,"line":2188},[28,22611,6121],{"class":2453},[28,22613,2466],{"class":34},[28,22615,22616],{"class":30,"line":2217},[28,22617,2055],{"class":34},[14,22619,22620],{},"此时输出是报错的：无法解析外部命令",[14,22622,22623],{},"解决这一问题：必须用到类内声明，类外初始化操作",[18,22625,22627],{"className":626,"code":22626,"language":628,"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,22628,22629,22635,22645,22651,22655,22659,22664,22672,22676,22681,22696,22704,22708,22712,22717,22722,22734,22739,22750,22755,22760,22773,22777,22785,22789,22795],{"__ignoreMap":23},[28,22630,22631,22633],{"class":30,"line":31},[28,22632,2439],{"class":42},[28,22634,2442],{"class":735},[28,22636,22637,22639,22641,22643],{"class":30,"line":77},[28,22638,2447],{"class":42},[28,22640,2450],{"class":42},[28,22642,2454],{"class":2453},[28,22644,1781],{"class":34},[28,22646,22647,22649],{"class":30,"line":114},[28,22648,15180],{"class":42},[28,22650,15657],{"class":2453},[28,22652,22653],{"class":30,"line":128},[28,22654,2036],{"class":34},[28,22656,22657],{"class":30,"line":393},[28,22658,15202],{"class":42},[28,22660,22661],{"class":30,"line":409},[28,22662,22663],{"class":73},"    \u002F\u002F类内声明\n",[28,22665,22666,22668,22670],{"class":30,"line":1711},[28,22667,11506],{"class":42},[28,22669,2872],{"class":42},[28,22671,21878],{"class":34},[28,22673,22674],{"class":30,"line":1802},[28,22675,4483],{"class":34},[28,22677,22678],{"class":30,"line":1808},[28,22679,22680],{"class":73},"\u002F\u002F类外初始化\n",[28,22682,22683,22685,22687,22690,22692,22694],{"class":30,"line":1820},[28,22684,640],{"class":42},[28,22686,16055],{"class":2453},[28,22688,22689],{"class":34},"::m_A",[28,22691,83],{"class":42},[28,22693,225],{"class":38},[28,22695,1781],{"class":34},[28,22697,22698,22700,22702],{"class":30,"line":2102},[28,22699,5852],{"class":42},[28,22701,6076],{"class":2453},[28,22703,2466],{"class":34},[28,22705,22706],{"class":30,"line":2107},[28,22707,2036],{"class":34},[28,22709,22710],{"class":30,"line":2113},[28,22711,15799],{"class":34},[28,22713,22714],{"class":30,"line":2118},[28,22715,22716],{"class":73},"    \u002F\u002F访问变量的原内存空间\n",[28,22718,22719],{"class":30,"line":2132},[28,22720,22721],{"class":73},"    \u002F\u002F100\n",[28,22723,22724,22726,22728,22730,22732],{"class":30,"line":2137},[28,22725,2041],{"class":34},[28,22727,1663],{"class":42},[28,22729,22587],{"class":34},[28,22731,1663],{"class":42},[28,22733,1685],{"class":34},[28,22735,22736],{"class":30,"line":2143},[28,22737,22738],{"class":34},"    Person p2;\n",[28,22740,22741,22744,22746,22748],{"class":30,"line":2164},[28,22742,22743],{"class":34},"    p2.m_A",[28,22745,83],{"class":42},[28,22747,2212],{"class":38},[28,22749,1781],{"class":34},[28,22751,22752],{"class":30,"line":2169},[28,22753,22754],{"class":73},"    \u002F\u002F继续访问这片空间\n",[28,22756,22757],{"class":30,"line":2183},[28,22758,22759],{"class":73},"    \u002F\u002F200\n",[28,22761,22762,22764,22766,22769,22771],{"class":30,"line":2188},[28,22763,2041],{"class":34},[28,22765,1663],{"class":42},[28,22767,22768],{"class":34},"p2.m_A",[28,22770,1663],{"class":42},[28,22772,1685],{"class":34},[28,22774,22775],{"class":30,"line":2217},[28,22776,2055],{"class":34},[28,22778,22779,22781,22783],{"class":30,"line":2222},[28,22780,640],{"class":42},[28,22782,2463],{"class":2453},[28,22784,2466],{"class":34},[28,22786,22787],{"class":30,"line":2239},[28,22788,2036],{"class":34},[28,22790,22791,22793],{"class":30,"line":2244},[28,22792,6121],{"class":2453},[28,22794,6124],{"class":34},[28,22796,22797],{"class":30,"line":2249},[28,22798,2055],{"class":34},[14,22800,22801],{},[780,22802,22803],{},"静态变量的访问",[18,22805,22807],{"className":626,"code":22806,"language":628,"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,22808,22809,22815,22825,22831,22835,22839,22843,22851,22855,22860,22868,22872,22876,22890,22905,22913,22917,22922,22927,22932,22937,22949,22954,22959,22973,22990,22994,23002,23006,23012],{"__ignoreMap":23},[28,22810,22811,22813],{"class":30,"line":31},[28,22812,2439],{"class":42},[28,22814,2442],{"class":735},[28,22816,22817,22819,22821,22823],{"class":30,"line":77},[28,22818,2447],{"class":42},[28,22820,2450],{"class":42},[28,22822,2454],{"class":2453},[28,22824,1781],{"class":34},[28,22826,22827,22829],{"class":30,"line":114},[28,22828,15180],{"class":42},[28,22830,15657],{"class":2453},[28,22832,22833],{"class":30,"line":128},[28,22834,2036],{"class":34},[28,22836,22837],{"class":30,"line":393},[28,22838,15202],{"class":42},[28,22840,22841],{"class":30,"line":409},[28,22842,22663],{"class":73},[28,22844,22845,22847,22849],{"class":30,"line":1711},[28,22846,11506],{"class":42},[28,22848,2872],{"class":42},[28,22850,21878],{"class":34},[28,22852,22853],{"class":30,"line":1802},[28,22854,15708],{"class":42},[28,22856,22857],{"class":30,"line":1808},[28,22858,22859],{"class":73},"    \u002F\u002F静态成员变量也是有访问权限的\n",[28,22861,22862,22864,22866],{"class":30,"line":1820},[28,22863,11506],{"class":42},[28,22865,2872],{"class":42},[28,22867,21885],{"class":34},[28,22869,22870],{"class":30,"line":2102},[28,22871,4483],{"class":34},[28,22873,22874],{"class":30,"line":2107},[28,22875,22680],{"class":73},[28,22877,22878,22880,22882,22884,22886,22888],{"class":30,"line":2113},[28,22879,640],{"class":42},[28,22881,16055],{"class":2453},[28,22883,22689],{"class":34},[28,22885,83],{"class":42},[28,22887,225],{"class":38},[28,22889,1781],{"class":34},[28,22891,22892,22894,22896,22899,22901,22903],{"class":30,"line":2118},[28,22893,640],{"class":42},[28,22895,16055],{"class":2453},[28,22897,22898],{"class":34},"::m_B",[28,22900,83],{"class":42},[28,22902,1320],{"class":38},[28,22904,1781],{"class":34},[28,22906,22907,22909,22911],{"class":30,"line":2132},[28,22908,5852],{"class":42},[28,22910,6145],{"class":2453},[28,22912,2466],{"class":34},[28,22914,22915],{"class":30,"line":2137},[28,22916,2036],{"class":34},[28,22918,22919],{"class":30,"line":2143},[28,22920,22921],{"class":73},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[28,22923,22924],{"class":30,"line":2164},[28,22925,22926],{"class":73},"    \u002F\u002F静态成员变量有两种访问方式：\n",[28,22928,22929],{"class":30,"line":2169},[28,22930,22931],{"class":73},"    \u002F\u002F1.通过对象进行访问\n",[28,22933,22934],{"class":30,"line":2183},[28,22935,22936],{"class":34},"    Person p;  \n",[28,22938,22939,22941,22943,22945,22947],{"class":30,"line":2188},[28,22940,2041],{"class":34},[28,22942,1663],{"class":42},[28,22944,22587],{"class":34},[28,22946,1663],{"class":42},[28,22948,1685],{"class":34},[28,22950,22951],{"class":30,"line":2217},[28,22952,22953],{"class":73},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[28,22955,22956],{"class":30,"line":2222},[28,22957,22958],{"class":73},"    \u002F\u002F2.通过类名进行访问\n",[28,22960,22961,22963,22965,22967,22969,22971],{"class":30,"line":2239},[28,22962,2041],{"class":34},[28,22964,1663],{"class":42},[28,22966,19532],{"class":2453},[28,22968,22689],{"class":34},[28,22970,1663],{"class":42},[28,22972,1685],{"class":34},[28,22974,22975,22977,22979,22981,22983,22985,22987],{"class":30,"line":2244},[28,22976,2041],{"class":34},[28,22978,1663],{"class":42},[28,22980,19532],{"class":2453},[28,22982,22898],{"class":34},[28,22984,1663],{"class":42},[28,22986,1729],{"class":34},[28,22988,22989],{"class":73}," \u002F\u002F没有访问权限，报错\n",[28,22991,22992],{"class":30,"line":2249},[28,22993,2055],{"class":34},[28,22995,22996,22998,23000],{"class":30,"line":2254},[28,22997,640],{"class":42},[28,22999,2463],{"class":2453},[28,23001,2466],{"class":34},[28,23003,23004],{"class":30,"line":2268},[28,23005,2036],{"class":34},[28,23007,23008,23010],{"class":30,"line":2273},[28,23009,6190],{"class":2453},[28,23011,6124],{"class":34},[28,23013,23014],{"class":30,"line":3067},[28,23015,2055],{"class":34},[22484,23017,23019],{"id":23018},"_8282静态成员函数","8.2.8.2静态成员函数",[14,23021,23022],{},"1.静态成员函数定义与访问",[18,23024,23026],{"className":626,"code":23025,"language":628,"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,23027,23028,23034,23038,23042,23047,23058,23062,23076,23080,23084,23092,23096,23101,23106,23110,23118,23123,23133],{"__ignoreMap":23},[28,23029,23030,23032],{"class":30,"line":31},[28,23031,15180],{"class":42},[28,23033,15657],{"class":2453},[28,23035,23036],{"class":30,"line":77},[28,23037,2036],{"class":34},[28,23039,23040],{"class":30,"line":114},[28,23041,15202],{"class":42},[28,23043,23044],{"class":30,"line":128},[28,23045,23046],{"class":73},"    \u002F\u002F在公共权限下定义静态成员函数\n",[28,23048,23049,23051,23054,23056],{"class":30,"line":393},[28,23050,11506],{"class":42},[28,23052,23053],{"class":42}," void",[28,23055,11871],{"class":2453},[28,23057,2466],{"class":34},[28,23059,23060],{"class":30,"line":409},[28,23061,2520],{"class":34},[28,23063,23064,23067,23069,23072,23074],{"class":30,"line":1711},[28,23065,23066],{"class":34},"        coout",[28,23068,1663],{"class":42},[28,23070,23071],{"class":735},"\"静态成员函数的调用\"",[28,23073,1663],{"class":42},[28,23075,1685],{"class":34},[28,23077,23078],{"class":30,"line":1802},[28,23079,2677],{"class":34},[28,23081,23082],{"class":30,"line":1808},[28,23083,4483],{"class":34},[28,23085,23086,23088,23090],{"class":30,"line":1820},[28,23087,5852],{"class":42},[28,23089,6076],{"class":2453},[28,23091,2466],{"class":34},[28,23093,23094],{"class":30,"line":2102},[28,23095,2036],{"class":34},[28,23097,23098],{"class":30,"line":2107},[28,23099,23100],{"class":73},"    \u002F\u002F静态成员函数的调用方式:\n",[28,23102,23103],{"class":30,"line":2113},[28,23104,23105],{"class":73},"    \u002F\u002F1.通过对象访问\n",[28,23107,23108],{"class":30,"line":2118},[28,23109,15799],{"class":34},[28,23111,23112,23114,23116],{"class":30,"line":2132},[28,23113,16352],{"class":34},[28,23115,12037],{"class":2453},[28,23117,6124],{"class":34},[28,23119,23120],{"class":30,"line":2137},[28,23121,23122],{"class":73},"    \u002F\u002F2.通过类名访问\n",[28,23124,23125,23127,23129,23131],{"class":30,"line":2143},[28,23126,19005],{"class":2453},[28,23128,18218],{"class":34},[28,23130,12037],{"class":2453},[28,23132,6124],{"class":34},[28,23134,23135],{"class":30,"line":2164},[28,23136,2055],{"class":34},[588,23138,23139],{"start":77},[591,23140,23141],{},"静态成员函数只能访问静态成员变量",[18,23143,23145],{"className":626,"code":23144,"language":628,"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,23146,23147,23153,23157,23161,23165,23175,23179,23193,23198,23210,23214,23225,23235,23239,23243,23247,23257,23261,23274,23278,23282,23286,23290,23304,23312,23316,23320,23324,23328,23336,23340,23350,23355,23359,23367,23371,23377],{"__ignoreMap":23},[28,23148,23149,23151],{"class":30,"line":31},[28,23150,15180],{"class":42},[28,23152,15657],{"class":2453},[28,23154,23155],{"class":30,"line":77},[28,23156,2036],{"class":34},[28,23158,23159],{"class":30,"line":114},[28,23160,15202],{"class":42},[28,23162,23163],{"class":30,"line":128},[28,23164,23046],{"class":73},[28,23166,23167,23169,23171,23173],{"class":30,"line":393},[28,23168,11506],{"class":42},[28,23170,23053],{"class":42},[28,23172,11871],{"class":2453},[28,23174,2466],{"class":34},[28,23176,23177],{"class":30,"line":409},[28,23178,2520],{"class":34},[28,23180,23181,23184,23186,23188,23190],{"class":30,"line":1711},[28,23182,23183],{"class":34},"        m_A",[28,23185,83],{"class":42},[28,23187,938],{"class":38},[28,23189,689],{"class":34},[28,23191,23192],{"class":73}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[28,23194,23195],{"class":30,"line":1802},[28,23196,23197],{"class":73},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[28,23199,23200,23202,23204,23206,23208],{"class":30,"line":1808},[28,23201,23066],{"class":34},[28,23203,1663],{"class":42},[28,23205,23071],{"class":735},[28,23207,1663],{"class":42},[28,23209,1685],{"class":34},[28,23211,23212],{"class":30,"line":1820},[28,23213,2677],{"class":34},[28,23215,23216,23218,23220,23222],{"class":30,"line":2102},[28,23217,11506],{"class":42},[28,23219,2872],{"class":42},[28,23221,15934],{"class":34},[28,23223,23224],{"class":73}," \u002F\u002F静态成员变量\n",[28,23226,23227,23229,23232],{"class":30,"line":2107},[28,23228,2475],{"class":42},[28,23230,23231],{"class":34}," m_B;",[28,23233,23234],{"class":73}," \u002F\u002F非静态成员变量\n",[28,23236,23237],{"class":30,"line":2113},[28,23238,2890],{"emptyLinePlaceholder":562},[28,23240,23241],{"class":30,"line":2118},[28,23242,15708],{"class":42},[28,23244,23245],{"class":30,"line":2132},[28,23246,22859],{"class":73},[28,23248,23249,23251,23253,23255],{"class":30,"line":2137},[28,23250,11506],{"class":42},[28,23252,23053],{"class":42},[28,23254,14104],{"class":2453},[28,23256,2466],{"class":34},[28,23258,23259],{"class":30,"line":2143},[28,23260,2520],{"class":34},[28,23262,23263,23265,23267,23270,23272],{"class":30,"line":2164},[28,23264,3939],{"class":34},[28,23266,1663],{"class":42},[28,23268,23269],{"class":735},"\"这是私有权限下的静态函数调用\"",[28,23271,1663],{"class":42},[28,23273,1685],{"class":34},[28,23275,23276],{"class":30,"line":2169},[28,23277,2677],{"class":34},[28,23279,23280],{"class":30,"line":2183},[28,23281,2890],{"emptyLinePlaceholder":562},[28,23283,23284],{"class":30,"line":2188},[28,23285,2890],{"emptyLinePlaceholder":562},[28,23287,23288],{"class":30,"line":2217},[28,23289,4483],{"class":34},[28,23291,23292,23294,23296,23298,23300,23302],{"class":30,"line":2222},[28,23293,640],{"class":42},[28,23295,16055],{"class":2453},[28,23297,22689],{"class":34},[28,23299,83],{"class":42},[28,23301,822],{"class":38},[28,23303,1781],{"class":34},[28,23305,23306,23308,23310],{"class":30,"line":2239},[28,23307,5852],{"class":42},[28,23309,6076],{"class":2453},[28,23311,2466],{"class":34},[28,23313,23314],{"class":30,"line":2244},[28,23315,2036],{"class":34},[28,23317,23318],{"class":30,"line":2249},[28,23319,23100],{"class":73},[28,23321,23322],{"class":30,"line":2254},[28,23323,23105],{"class":73},[28,23325,23326],{"class":30,"line":2268},[28,23327,15799],{"class":34},[28,23329,23330,23332,23334],{"class":30,"line":2273},[28,23331,16352],{"class":34},[28,23333,12037],{"class":2453},[28,23335,6124],{"class":34},[28,23337,23338],{"class":30,"line":3067},[28,23339,23122],{"class":73},[28,23341,23342,23344,23346,23348],{"class":30,"line":3081},[28,23343,19005],{"class":2453},[28,23345,18218],{"class":34},[28,23347,12037],{"class":2453},[28,23349,6124],{"class":34},[28,23351,23352],{"class":30,"line":3089},[28,23353,23354],{"class":73},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[28,23356,23357],{"class":30,"line":3094},[28,23358,2055],{"class":34},[28,23360,23361,23363,23365],{"class":30,"line":3100},[28,23362,640],{"class":42},[28,23364,2463],{"class":2453},[28,23366,2466],{"class":34},[28,23368,23369],{"class":30,"line":3106},[28,23370,2036],{"class":34},[28,23372,23373,23375],{"class":30,"line":3111},[28,23374,6121],{"class":2453},[28,23376,6124],{"class":34},[28,23378,23379],{"class":30,"line":8436},[28,23380,2055],{"class":34},[605,23382,23384],{"id":23383},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22484,23386,23388],{"id":23387},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23390,23391],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23393,23394],{},"只有非静态成员变量才属于类的对象上",[23396,23397,23399],"h5",{"id":23398},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[18,23401,23403],{"className":626,"code":23402,"language":628,"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,23404,23405,23412,23422,23428,23432,23436,23440,23448,23452,23456,23479,23483,23491,23495,23501],{"__ignoreMap":23},[28,23406,23407,23409],{"class":30,"line":31},[28,23408,2439],{"class":42},[28,23410,23411],{"class":735},"\u003Ciostraem>\n",[28,23413,23414,23416,23418,23420],{"class":30,"line":77},[28,23415,2447],{"class":42},[28,23417,2450],{"class":42},[28,23419,2454],{"class":2453},[28,23421,1781],{"class":34},[28,23423,23424,23426],{"class":30,"line":114},[28,23425,15180],{"class":42},[28,23427,15657],{"class":2453},[28,23429,23430],{"class":30,"line":128},[28,23431,2036],{"class":34},[28,23433,23434],{"class":30,"line":393},[28,23435,2890],{"emptyLinePlaceholder":562},[28,23437,23438],{"class":30,"line":409},[28,23439,4483],{"class":34},[28,23441,23442,23444,23446],{"class":30,"line":1711},[28,23443,5852],{"class":42},[28,23445,6076],{"class":2453},[28,23447,2466],{"class":34},[28,23449,23450],{"class":30,"line":1802},[28,23451,2036],{"class":34},[28,23453,23454],{"class":30,"line":1808},[28,23455,15799],{"class":34},[28,23457,23458,23460,23462,23465,23467,23470,23472,23474,23476],{"class":30,"line":1820},[28,23459,2041],{"class":34},[28,23461,1663],{"class":42},[28,23463,23464],{"class":735},"\"size of p=\"",[28,23466,1663],{"class":42},[28,23468,23469],{"class":2453},"sizeoif",[28,23471,7027],{"class":34},[28,23473,1663],{"class":42},[28,23475,1729],{"class":34},[28,23477,23478],{"class":73}," \u002F\u002F查看这个空类的占用的内存空间\n",[28,23480,23481],{"class":30,"line":2102},[28,23482,2055],{"class":34},[28,23484,23485,23487,23489],{"class":30,"line":2107},[28,23486,640],{"class":42},[28,23488,2463],{"class":2453},[28,23490,2466],{"class":34},[28,23492,23493],{"class":30,"line":2113},[28,23494,2036],{"class":34},[28,23496,23497,23499],{"class":30,"line":2118},[28,23498,6121],{"class":2453},[28,23500,6124],{"class":34},[28,23502,23503],{"class":30,"line":2132},[28,23504,2055],{"class":34},[14,23506,23507],{},"输出结果为：size of p=1",[14,23509,23510],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23512,23513],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23396,23515,23517],{"id":23516},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[18,23519,23521],{"className":626,"code":23520,"language":628,"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,23522,23523,23529,23539,23547,23551,23560,23564,23572,23576,23580,23599,23603,23607,23615,23619,23625],{"__ignoreMap":23},[28,23524,23525,23527],{"class":30,"line":31},[28,23526,2439],{"class":42},[28,23528,2442],{"class":735},[28,23530,23531,23533,23535,23537],{"class":30,"line":77},[28,23532,2447],{"class":42},[28,23534,2450],{"class":42},[28,23536,2454],{"class":2453},[28,23538,1781],{"class":34},[28,23540,23541,23543,23545],{"class":30,"line":114},[28,23542,15180],{"class":42},[28,23544,16055],{"class":2453},[28,23546,3164],{"class":34},[28,23548,23549],{"class":30,"line":128},[28,23550,2036],{"class":34},[28,23552,23553,23555,23557],{"class":30,"line":393},[28,23554,2475],{"class":42},[28,23556,15934],{"class":34},[28,23558,23559],{"class":73},"\u002F\u002F非静态成员变量\n",[28,23561,23562],{"class":30,"line":409},[28,23563,4483],{"class":34},[28,23565,23566,23568,23570],{"class":30,"line":1711},[28,23567,5852],{"class":42},[28,23569,6076],{"class":2453},[28,23571,2466],{"class":34},[28,23573,23574],{"class":30,"line":1802},[28,23575,2036],{"class":34},[28,23577,23578],{"class":30,"line":1808},[28,23579,15799],{"class":34},[28,23581,23582,23584,23586,23588,23590,23592,23594,23596],{"class":30,"line":1820},[28,23583,2041],{"class":34},[28,23585,1663],{"class":42},[28,23587,23464],{"class":735},[28,23589,1863],{"class":42},[28,23591,7027],{"class":34},[28,23593,1663],{"class":42},[28,23595,1729],{"class":34},[28,23597,23598],{"class":73}," \u002F\u002F查看不是空对象时占用多少内存\n",[28,23600,23601],{"class":30,"line":2102},[28,23602,2890],{"emptyLinePlaceholder":562},[28,23604,23605],{"class":30,"line":2107},[28,23606,2055],{"class":34},[28,23608,23609,23611,23613],{"class":30,"line":2113},[28,23610,640],{"class":42},[28,23612,2463],{"class":2453},[28,23614,2466],{"class":34},[28,23616,23617],{"class":30,"line":2118},[28,23618,2036],{"class":34},[28,23620,23621,23623],{"class":30,"line":2132},[28,23622,6121],{"class":2453},[28,23624,6124],{"class":34},[28,23626,23627],{"class":30,"line":2137},[28,23628,2055],{"class":34},[14,23630,23631],{},"输出结果：size of p=4",[14,23633,23634],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[588,23636,23637],{},[591,23638,23639],{},"如果加上非静态成员变量，Person类修改如下",[18,23641,23643],{"className":626,"code":23642,"language":628,"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,23644,23645,23651,23655,23661,23669,23673,23678],{"__ignoreMap":23},[28,23646,23647,23649],{"class":30,"line":31},[28,23648,15180],{"class":42},[28,23650,15657],{"class":2453},[28,23652,23653],{"class":30,"line":77},[28,23654,2036],{"class":34},[28,23656,23657,23659],{"class":30,"line":114},[28,23658,2475],{"class":42},[28,23660,21878],{"class":34},[28,23662,23663,23665,23667],{"class":30,"line":128},[28,23664,11506],{"class":42},[28,23666,2872],{"class":42},[28,23668,21885],{"class":34},[28,23670,23671],{"class":30,"line":393},[28,23672,4483],{"class":34},[28,23674,23675],{"class":30,"line":409},[28,23676,23677],{"class":73},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[28,23679,23680,23682,23684,23686,23688,23690],{"class":30,"line":1711},[28,23681,640],{"class":42},[28,23683,16055],{"class":2453},[28,23685,22898],{"class":34},[28,23687,83],{"class":42},[28,23689,822],{"class":38},[28,23691,1781],{"class":34},[14,23693,23694],{},"输出结果：4",[14,23696,23697],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[588,23699,23700],{"start":77},[591,23701,23702],{},"加上非静态成员函数",[18,23704,23706],{"className":626,"code":23705,"language":628,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[25,23707,23708,23715,23719,23725,23733,23737,23741,23745],{"__ignoreMap":23},[28,23709,23710,23712],{"class":30,"line":31},[28,23711,15180],{"class":42},[28,23713,23714],{"class":2453},"  Person\n",[28,23716,23717],{"class":30,"line":77},[28,23718,2036],{"class":34},[28,23720,23721,23723],{"class":30,"line":114},[28,23722,2475],{"class":42},[28,23724,21878],{"class":34},[28,23726,23727,23729,23731],{"class":30,"line":128},[28,23728,15395],{"class":42},[28,23730,11871],{"class":2453},[28,23732,2466],{"class":34},[28,23734,23735],{"class":30,"line":393},[28,23736,2520],{"class":34},[28,23738,23739],{"class":30,"line":409},[28,23740,2890],{"emptyLinePlaceholder":562},[28,23742,23743],{"class":30,"line":1711},[28,23744,2677],{"class":34},[28,23746,23747],{"class":30,"line":1802},[28,23748,4483],{"class":34},[14,23750,23751],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[588,23753,23754],{"start":114},[591,23755,23756],{},"加上静态成员函数",[18,23758,23760],{"className":626,"code":23759,"language":628,"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,23761,23762,23768,23772,23778,23786,23790,23794,23798,23809,23813,23817,23821],{"__ignoreMap":23},[28,23763,23764,23766],{"class":30,"line":31},[28,23765,15180],{"class":42},[28,23767,23714],{"class":2453},[28,23769,23770],{"class":30,"line":77},[28,23771,2036],{"class":34},[28,23773,23774,23776],{"class":30,"line":114},[28,23775,2475],{"class":42},[28,23777,21878],{"class":34},[28,23779,23780,23782,23784],{"class":30,"line":128},[28,23781,15395],{"class":42},[28,23783,11871],{"class":2453},[28,23785,2466],{"class":34},[28,23787,23788],{"class":30,"line":393},[28,23789,2520],{"class":34},[28,23791,23792],{"class":30,"line":409},[28,23793,2890],{"emptyLinePlaceholder":562},[28,23795,23796],{"class":30,"line":1711},[28,23797,2677],{"class":34},[28,23799,23800,23802,23804,23807],{"class":30,"line":1802},[28,23801,11506],{"class":42},[28,23803,23053],{"class":42},[28,23805,23806],{"class":2453}," func1",[28,23808,2466],{"class":34},[28,23810,23811],{"class":30,"line":1808},[28,23812,2520],{"class":34},[28,23814,23815],{"class":30,"line":1820},[28,23816,2890],{"emptyLinePlaceholder":562},[28,23818,23819],{"class":30,"line":2102},[28,23820,2677],{"class":34},[28,23822,23823],{"class":30,"line":2107},[28,23824,4483],{"class":34},[14,23826,23694],{},[14,23828,23829],{},"解释：静态成员函数也不属于类上",[547,23831,8162],{},{"title":23,"searchDepth":77,"depth":77,"links":23833},[23834,23840],{"id":15131,"depth":77,"text":15132,"children":23835},[23836,23837,23838,23839],{"id":15135,"depth":114,"text":15136},{"id":15860,"depth":114,"text":15861},{"id":16032,"depth":114,"text":16033},{"id":16491,"depth":114,"text":16492},{"id":18863,"depth":77,"text":18864,"children":23841},[23842,23843,23844,23845,23846,23847,23848,23849,23850],{"id":18875,"depth":114,"text":18876},{"id":19168,"depth":114,"text":19169},{"id":19659,"depth":114,"text":19660},{"id":20756,"depth":114,"text":20757},{"id":21179,"depth":114,"text":21180},{"id":21658,"depth":114,"text":21659},{"id":22033,"depth":114,"text":22034},{"id":22446,"depth":114,"text":22447},{"id":23383,"depth":114,"text":23384},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15096,"description":23851},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23858,"title":628,"body":23859,"description":559,"extension":560,"meta":23863,"navigation":562,"path":23865,"seo":23866,"stem":23867,"__hash__":23868},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23860,"toc":23861},[],{"title":23,"searchDepth":77,"depth":77,"links":23862},[],{"category":23864},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":628,"description":559},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23870,"title":23871,"body":23872,"description":23,"extension":560,"meta":24463,"navigation":562,"path":24464,"seo":24465,"stem":24466,"__hash__":24467},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23873,"toc":24445},[23874,23877,23881,23884,23887,23890,23908,23913,23916,23919,23922,23925,23930,23933,23938,23941,23944,23948,23951,23954,23960,23963,23981,23985,23989,23992,23997,24000,24004,24007,24020,24023,24027,24030,24033,24036,24061,24064,24073,24084,24099,24131,24135,24142,24150,24154,24157,24160,24165,24169,24172,24175,24180,24183,24187,24190,24193,24198,24201,24205,24210,24214,24281,24285,24288,24291,24294,24297,24300,24306,24327,24330,24344,24353,24357,24360,24363,24368,24371,24376,24381,24384,24387,24392,24397,24400,24405,24410,24413,24418,24423,24426,24429,24434,24437,24442],[10,23875,23871],{"id":23876},"_1强化学习基本认识",[60,23878,23880],{"id":23879},"_11什么是强化学习","1.1.什么是强化学习",[14,23882,23883],{},"强化学习有两部分组成：智能体和环境；",[14,23885,23886],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23888,23889],{},"强化学习与监督学习的区别:",[588,23891,23892,23895,23898,23901],{},[591,23893,23894],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[591,23896,23897],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[591,23899,23900],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[591,23902,23903,23904,23907],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[780,23905,23906],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23909,23910],{},[420,23911],{"alt":23,"src":23912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23914,23915],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23917,23918],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23920,23921],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23923,23924],{},"获取奖励",[14,23926,23927],{},[420,23928],{"alt":23,"src":23929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23931,23932],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23934,23935],{},[420,23936],{"alt":23,"src":23937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23939,23940],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23942,23943],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[60,23945,23947],{"id":23946},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23949,23950],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23952,23953],{},"具身智能中的应用",[14,23955,23956,23959],{},[780,23957,23958],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23961,23962],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23964,23965,23966,23969,23970,23973,23974,23977,23978],{},"机器人是",[780,23967,23968],{},"躯体","，深度学习是",[780,23971,23972],{},"神经元****网络","，VLA是",[780,23975,23976],{},"通用的行为逻辑","，而强化学习是",[780,23979,23980],{},"教练",[60,23982,23984],{"id":23983},"_13序列决策","1.3.序列决策",[605,23986,23988],{"id":23987},"_131智能体与环境","1.3.1.智能体与环境",[14,23990,23991],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23993,23994],{},[420,23995],{"alt":23,"src":23996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23998,23999],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[605,24001,24003],{"id":24002},"_132奖励","1.3.2.奖励",[14,24005,24006],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,24008,24009,24010,24019],{},"取某个策略的表现如何。强化学习的目的就是",[780,24011,24012,24013,24018],{},"最大化",[780,24014,24015],{},[780,24016,24017],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,24021,24022],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[605,24024,24026],{"id":24025},"_133序列决策","1.3.3.序列决策",[14,24028,24029],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24031,24032],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24034,24035],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24037,24038,24042,24043,24045,24046,24048,24049,24051,24052,14281,24055,14281,24058],{},[24039,24040,24041],"em",{},"Ht"," = ",[24039,24044,1216],{},"1*, a",[24039,24047,39],{},", r",[24039,24050,39],{},", . . . ,* ",[24039,24053,24054],{},"ot",[24039,24056,24057],{},", at ,",[24039,24059,24060],{},"rt",[14,24062,24063],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24065,24066,24042,24069,2148,24071,1054],{},[24039,24067,24068],{},"st",[24039,24070,686],{},[24039,24072,24041],{},[14,24074,24075,24076,24079,24080,24083],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[780,24077,24078],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[780,24081,24082],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24085,24086,24087,24090,24091,24094,24095,24098],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[780,24088,24089],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[780,24092,24093],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24039,24096,24097],{},"S, A, T, R, Ω, O, γ",")。",[14,24100,24101,24102,24104,24105,24107,24108,367,24110,24113,24114,24116,24117,367,24120,24123,24124,24126,24127,24130],{},"其中 ",[24039,24103,1309],{}," 表示状态空间，为隐变量，",[24039,24106,862],{}," 为动作空间，",[24039,24109,1334],{},[24039,24111,24112],{},"s ′ |s, a",") 为状态转移概率，",[24039,24115,1284],{}," 为奖励函数，",[24039,24118,24119],{},"Ω",[24039,24121,24122],{},"o|s, a",") 为观测概率，",[24039,24125,1210],{}," 为观测空间，",[24039,24128,24129],{},"γ"," 为折扣因子。",[60,24132,24134],{"id":24133},"_14动作空间","1.4.动作空间",[14,24136,24137,24138,24141],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[780,24139,24140],{},"动作空间"," ，动作空间分为:",[588,24143,24144,24147],{},[591,24145,24146],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[591,24148,24149],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[60,24151,24153],{"id":24152},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24155,24156],{},"由策略、价值函数、模型三部分组成",[14,24158,24159],{},"这三者组成马尔可夫决策过程",[14,24161,24162],{},[420,24163],{"alt":23,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[605,24166,24168],{"id":24167},"_151策略","1.5.1.策略",[14,24170,24171],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24173,24174],{},"策略可分为两种：",[14,24176,24177],{},[420,24178],{"alt":23,"src":24179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24181,24182],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[605,24184,24186],{"id":24185},"_152价值函数","1.5.2.价值函数",[14,24188,24189],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24191,24192],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24194,24195],{},[420,24196],{"alt":23,"src":24197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24199,24200],{},"进入某个状态采取的最优动作可以通过Q函数得到",[605,24202,24204],{"id":24203},"_153模型","1.5.3.模型",[14,24206,24207],{},[420,24208],{"alt":23,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[60,24211,24213],{"id":24212},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[768,24215,24216,24227],{},[771,24217,24218],{},[774,24219,24220,24224],{},[777,24221,24223],{"align":24222},"left","类型",[777,24225,24226],{"align":24222},"特点",[815,24228,24229,24239,24249,24259,24271],{},[774,24230,24231,24236],{},[820,24232,24233],{"align":24222},[780,24234,24235],{},"基于价值的智能体",[820,24237,24238],{"align":24222},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[774,24240,24241,24246],{},[820,24242,24243],{"align":24222},[780,24244,24245],{},"基于策略的智能体",[820,24247,24248],{"align":24222},"直接学习策略，没有学习价值函数",[774,24250,24251,24256],{},[820,24252,24253],{"align":24222},[780,24254,24255],{},"演员-评论员智能体",[820,24257,24258],{"align":24222},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[774,24260,24261,24266],{},[820,24262,24263],{"align":24222},[780,24264,24265],{},"有模型强化学习智能体",[820,24267,24268],{"align":24222},[420,24269],{"alt":23,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[774,24272,24273,24278],{},[820,24274,24275],{"align":24222},[780,24276,24277],{},"免模型强化学习智能体",[820,24279,24280],{"align":24222},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[60,24282,24284],{"id":24283},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24286,24287],{},"学习和规划是序列决策的两个基本问题",[14,24289,24290],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24292,24293],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24295,24296],{},"强化学习用到的库：Gym",[14,24298,24299],{},"Gym可以检验强化学习算法的优劣",[14,24301,24302,24305],{},[780,24303,24304],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[18,24307,24311],{"className":24308,"code":24309,"language":24310,"meta":23,"style":23},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[25,24312,24313],{"__ignoreMap":23},[28,24314,24315,24318,24321,24324],{"class":30,"line":31},[28,24316,24317],{"class":2453},"pip",[28,24319,24320],{"class":735}," install",[28,24322,24323],{"class":735}," gym==",[28,24325,24326],{"class":38},"0.25.2\n",[14,24328,24329],{},"显示图形界面需要",[18,24331,24333],{"className":24308,"code":24332,"language":24310,"meta":23,"style":23},"pip install pygame\n",[25,24334,24335],{"__ignoreMap":23},[28,24336,24337,24339,24341],{"class":30,"line":31},[28,24338,24317],{"class":2453},[28,24340,24320],{"class":735},[28,24342,24343],{"class":735}," pygame\n",[14,24345,24346,24347],{},"有关Gym库的相关文档介绍：",[80,24348,24352],{"href":24349,"rel":24350},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24351],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[60,24354,24356],{"id":24355},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24358,24359],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24361,24362],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24364,24365],{},[420,24366],{"alt":23,"src":24367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24369,24370],{},"折扣率需要自己来设定",[14,24372,24373],{},[420,24374],{"alt":23,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[588,24377,24378],{},[591,24379,24380],{},"状态转移函数：",[14,24382,24383],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24385,24386],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24388,24389],{},[420,24390],{"alt":23,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[588,24393,24394],{"start":77},[591,24395,24396],{},"动作价值函数：",[14,24398,24399],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24401,24402],{},[420,24403],{"alt":23,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[588,24406,24407],{"start":114},[591,24408,24409],{},"最优动作价值函数：",[14,24411,24412],{},"这个函数是对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,24414,24415],{},[420,24416],{"alt":23,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[588,24419,24420],{"start":128},[591,24421,24422],{},"状态价值函数:",[14,24424,24425],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24427,24428],{},"它衡量的是“一个具体动作”的长期价值",[14,24430,24431],{},[420,24432],{"alt":23,"src":24433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24435,24436],{},"几个价值函数之间的比较：",[14,24438,24439],{},[420,24440],{"alt":23,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[547,24443,24444],{},"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":77,"depth":77,"links":24446},[24447,24448,24449,24454,24455,24460,24461,24462],{"id":23879,"depth":77,"text":23880},{"id":23946,"depth":77,"text":23947},{"id":23983,"depth":77,"text":23984,"children":24450},[24451,24452,24453],{"id":23987,"depth":114,"text":23988},{"id":24002,"depth":114,"text":24003},{"id":24025,"depth":114,"text":24026},{"id":24133,"depth":77,"text":24134},{"id":24152,"depth":77,"text":24153,"children":24456},[24457,24458,24459],{"id":24167,"depth":114,"text":24168},{"id":24185,"depth":114,"text":24186},{"id":24203,"depth":114,"text":24204},{"id":24212,"depth":77,"text":24213},{"id":24283,"depth":77,"text":24284},{"id":24355,"depth":77,"text":24356},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23871,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24469,"title":24470,"body":24471,"description":24478,"extension":560,"meta":24489,"navigation":562,"path":24490,"seo":24491,"stem":24492,"__hash__":24493},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24472,"toc":24487},[24473,24476,24479,24484],[10,24474,24470],{"id":24475},"_2马尔可夫决策过程",[14,24477,24478],{},"这是强化学习的基本框架",[14,24480,24481],{},[420,24482],{"alt":23,"src":24483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24485,24486],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":23,"searchDepth":77,"depth":77,"links":24488},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24470,"description":24478},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24495,"title":24496,"body":24497,"description":23,"extension":560,"meta":24613,"navigation":562,"path":24614,"seo":24615,"stem":24616,"__hash__":24617},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24498,"toc":24608},[24499,24502,24506,24509,24514,24519,24522,24527,24530,24535,24538,24542,24547,24550,24555,24560,24565,24568,24572,24577,24580,24585,24590,24595,24600,24603],[10,24500,24496],{"id":24501},"_3动作价值函数",[60,24503,24505],{"id":24504},"_31dqn","3.1.DQN",[14,24507,24508],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24510,24511],{},[420,24512],{"alt":23,"src":24513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24515,24516],{},[420,24517],{"alt":23,"src":24518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24520,24521],{},"DQN算法的描述：",[14,24523,24524],{},[420,24525],{"alt":23,"src":24526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24528,24529],{},"这里的Dense指的是全连接层",[14,24531,24532],{},[420,24533],{"alt":23,"src":24534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24536,24537],{},"当前观测的状态为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算法",[60,24539,24541],{"id":24540},"_32dqn的举例","3.2.DQN的举例",[14,24543,24544],{},[420,24545],{"alt":23,"src":24546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24548,24549],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24551,24552],{},[420,24553],{"alt":23,"src":24554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24556,24557],{},[420,24558],{"alt":23,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24561,24562],{},[420,24563],{"alt":23,"src":24564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24566,24567],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[60,24569,24571],{"id":24570},"_33td算法","3.3.TD算法",[14,24573,24574],{},[420,24575],{"alt":23,"src":24576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24578,24579],{},"强化学习TD算法公式的粗略解释：",[14,24581,24582],{},[420,24583],{"alt":23,"src":24584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24586,24587],{},[420,24588],{"alt":23,"src":24589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24591,24592],{},[420,24593],{"alt":23,"src":24594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24596,24597],{},[420,24598],{"alt":23,"src":24599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24601,24602],{},"TD算法总结：",[14,24604,24605],{},[420,24606],{"alt":23,"src":24607},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":23,"searchDepth":77,"depth":77,"links":24609},[24610,24611,24612],{"id":24504,"depth":77,"text":24505},{"id":24540,"depth":77,"text":24541},{"id":24570,"depth":77,"text":24571},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24496,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24619,"title":24620,"body":24621,"description":23,"extension":560,"meta":24854,"navigation":562,"path":24855,"seo":24856,"stem":24857,"__hash__":24858},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24622,"toc":24850},[24623,24626,24630,24633,24636,24641,24646,24649,24654,24659,24662,24667,24670,24675,24678,24683,24686,24691,24694,24699,24704,24707,24712,24715,24718,24723,24726,24731,24736,24740,24743,24746,24751,24756,24759,24764,24769,24772,24777,24780,24783,24788,24791,24796,24799,24804,24809,24812,24817,24822,24825,24830,24833,24838,24841],[10,24624,24620],{"id":24625},"_4策略学习",[60,24627,24629],{"id":24628},"_41概念描述","4.1.概念描述",[14,24631,24632],{},"用神经网络（策略网络）近似策略函数",[14,24634,24635],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24637,24638],{},[420,24639],{"alt":23,"src":24640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24642,24643],{},[420,24644],{"alt":23,"src":24645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24647,24648],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24650,24651],{},[420,24652],{"alt":23,"src":24653},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24655,24656],{},[420,24657],{"alt":23,"src":24658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24660,24661],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24663,24664],{},[420,24665],{"alt":23,"src":24666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24668,24669],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24671,24672],{},[420,24673],{"alt":23,"src":24674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24676,24677],{},"改进theta要用到策略梯度算法",[14,24679,24680],{},[420,24681],{"alt":23,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24684,24685],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24687,24688],{},[420,24689],{"alt":23,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24692,24693],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24695,24696],{},[420,24697],{"alt":23,"src":24698},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24700,24701],{},[420,24702],{"alt":23,"src":24703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24705,24706],{},"梯度公式总结：",[14,24708,24709],{},[420,24710],{"alt":23,"src":24711},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24713,24714],{},"两个公式的分别应用场景：",[14,24716,24717],{},"对于离散的动作：",[14,24719,24720],{},[420,24721],{"alt":23,"src":24722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24724,24725],{},"对于连续的动作：",[14,24727,24728],{},[420,24729],{"alt":23,"src":24730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24732,24733],{},[420,24734],{"alt":23,"src":24735},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[60,24737,24739],{"id":24738},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24741,24742],{},"使用蒙特卡洛来近似计算策略梯度",[14,24744,24745],{},"蒙特卡洛法的解释如下：",[14,24747,24748],{},[420,24749],{"alt":23,"src":24750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24752,24753],{},[420,24754],{"alt":23,"src":24755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24757,24758],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[588,24760,24761],{},[591,24762,24763],{},"方法一：reinforce算法",[14,24765,24766],{},[420,24767],{"alt":23,"src":24768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24770,24771],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[588,24773,24774],{"start":77},[591,24775,24776],{},"方法二：actor-critic算法",[14,24778,24779],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24781,24782],{},"两个网络的构建：",[14,24784,24785],{},[420,24786],{"alt":23,"src":24787},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24789,24790],{},"actor网路：",[14,24792,24793],{},[420,24794],{"alt":23,"src":24795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24797,24798],{},"critic网络",[14,24800,24801],{},[420,24802],{"alt":23,"src":24803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[588,24805,24806],{"start":114},[591,24807,24808],{},"网络的训练",[14,24810,24811],{},"网络描述",[14,24813,24814],{},[420,24815],{"alt":23,"src":24816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24818,24819],{},[420,24820],{"alt":23,"src":24821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24823,24824],{},"TD算法更新梯度：",[14,24826,24827],{},[420,24828],{"alt":23,"src":24829},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24831,24832],{},"策略网络更新梯度：",[14,24834,24835],{},[420,24836],{"alt":23,"src":24837},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24839,24840],{},"训练整个流程的具体描述：",[14,24842,24843,24846,24847],{},[420,24844],{"alt":23,"src":24845},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[420,24848],{"alt":23,"src":24849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":23,"searchDepth":77,"depth":77,"links":24851},[24852,24853],{"id":24628,"depth":77,"text":24629},{"id":24738,"depth":77,"text":24739},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24620,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24860,"title":24861,"body":24862,"description":24869,"extension":560,"meta":24919,"navigation":562,"path":24920,"seo":24921,"stem":24922,"__hash__":24923},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24863,"toc":24915},[24864,24867,24870,24874,24877,24882,24886,24889,24894,24897,24902,24907,24910],[10,24865,24861],{"id":24866},"_5alphago算法",[14,24868,24869],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[60,24871,24873],{"id":24872},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24875,24876],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24878,24879],{},[420,24880],{"alt":23,"src":24881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[60,24883,24885],{"id":24884},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24887,24888],{},"采用强化学习的方式训练策略网络",[14,24890,24891],{},[420,24892],{"alt":23,"src":24893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24895,24896],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24898,24899],{},[420,24900],{"alt":23,"src":24901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24903,24904],{},[420,24905],{"alt":23,"src":24906},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24908,24909],{},"强化学习训练策略网络的总结：",[14,24911,24912],{},[420,24913],{"alt":23,"src":24914},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":23,"searchDepth":77,"depth":77,"links":24916},[24917,24918],{"id":24872,"depth":77,"text":24873},{"id":24884,"depth":77,"text":24885},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24861,"description":24869},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24925,"title":24926,"body":24927,"description":24934,"extension":560,"meta":24937,"navigation":562,"path":24938,"seo":24939,"stem":24940,"__hash__":24941},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24928,"toc":24935},[24929,24932],[10,24930,24926],{"id":24931},"_6价值网络",[14,24933,24934],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":23,"searchDepth":77,"depth":77,"links":24936},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24926,"description":24934},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24943,"title":24944,"body":24945,"description":24949,"extension":560,"meta":24950,"navigation":562,"path":24951,"seo":24952,"stem":24953,"__hash__":24954},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24946,"toc":24947},[],{"title":23,"searchDepth":77,"depth":77,"links":24948},[],"记录自己的强化学习笔记。",{"category":23864},"\u002Fwiki\u002F2025-12-04",{"title":24944,"description":24949},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24956,"title":24957,"body":24958,"description":559,"extension":560,"meta":24997,"navigation":562,"path":24998,"seo":24999,"stem":25000,"__hash__":25001},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24959,"toc":24995},[24960,24963,24966,24972,24975,24981,24984,24989,24992],[10,24961,24957],{"id":24962},"_1-项目概览与官方资源",[14,24964,24965],{},"官方文档：",[14,24967,24968],{},[80,24969,24970],{"href":24970,"rel":24971},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24351],[14,24973,24974],{},"官方代码仓库：",[14,24976,24977],{},[80,24978,24979],{"href":24979,"rel":24980},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24351],[14,24982,24983],{},"复现大体流程：",[14,24985,24986],{},[420,24987],{"alt":23,"src":24988},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24990,24991],{},"本教程的目标是打通这条链路：",[14,24993,24994],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":23,"searchDepth":77,"depth":77,"links":24996},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24957,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25003,"title":25004,"body":25005,"description":559,"extension":560,"meta":25121,"navigation":562,"path":25122,"seo":25123,"stem":25124,"__hash__":25125},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25006,"toc":25116},[25007,25010,25014,25017,25024,25028,25031,25040,25050,25054,25084,25087,25113],[10,25008,25004],{"id":25009},"_2-环境准备与设备连接",[60,25011,25013],{"id":25012},"_21-系统与环境","2.1 系统与环境",[14,25015,25016],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,25018,25019,25020,25023],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[25,25021,25022],{},"lerobot"," 依赖。",[60,25025,25027],{"id":25026},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25029,25030],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[18,25032,25034],{"className":24308,"code":25033,"language":24310,"meta":23,"style":23},"lerobot-find-out\n",[25,25035,25036],{"__ignoreMap":23},[28,25037,25038],{"class":30,"line":31},[28,25039,25033],{"class":2453},[14,25041,25042,25043,843,25046,25049],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[25,25044,25045],{},"\u002Fdev\u002FttyACM0",[25,25047,25048],{},"\u002Fdev\u002FttyACM1","）。",[60,25051,25053],{"id":25052},"_23-串口授权","2.3 串口授权",[18,25055,25057],{"className":24308,"code":25056,"language":24310,"meta":23,"style":23},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[25,25058,25059,25073],{"__ignoreMap":23},[28,25060,25061,25064,25067,25070],{"class":30,"line":31},[28,25062,25063],{"class":2453},"sudo",[28,25065,25066],{"class":735}," chmod",[28,25068,25069],{"class":38}," 666",[28,25071,25072],{"class":735}," \u002Fdev\u002FttyACM0\n",[28,25074,25075,25077,25079,25081],{"class":30,"line":77},[28,25076,25063],{"class":2453},[28,25078,25066],{"class":735},[28,25080,25069],{"class":38},[28,25082,25083],{"class":735}," \u002Fdev\u002FttyACM1\n",[14,25085,25086],{},"说明：",[1626,25088,25089,25094,25100,25110],{},[591,25090,25091,25093],{},[25,25092,25063],{},"：以 root 权限执行命令。",[591,25095,25096,25099],{},[25,25097,25098],{},"chmod","：修改设备节点权限。",[591,25101,25102,25105,25106,25109],{},[25,25103,25104],{},"666","：",[25,25107,25108],{},"rw-rw-rw-","，所有用户可读写。",[591,25111,25112],{},"串口号必须替换为你机器上的真实端口。",[547,25114,25115],{},"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":77,"depth":77,"links":25117},[25118,25119,25120],{"id":25012,"depth":77,"text":25013},{"id":25026,"depth":77,"text":25027},{"id":25052,"depth":77,"text":25053},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25004,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25127,"title":25128,"body":25129,"description":559,"extension":560,"meta":25290,"navigation":562,"path":25291,"seo":25292,"stem":25293,"__hash__":25294},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25130,"toc":25286},[25131,25135,25139,25145,25148,25205,25208,25212,25215,25283],[10,25132,25134],{"id":25133},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[60,25136,25138],{"id":25137},"_31-配置电机-id","3.1 配置电机 ID",[14,25140,25141,25142,25144],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[25,25143,39],{},"，需要改成机械臂链路里不冲突的编号。",[14,25146,25147],{},"方式一：用 LeRobot 命令逐步写入。",[18,25149,25151],{"className":24308,"code":25150,"language":24310,"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,25152,25153,25158,25166,25173,25178,25182,25187,25193,25200],{"__ignoreMap":23},[28,25154,25155],{"class":30,"line":31},[28,25156,25157],{"class":73},"# 主臂舵机配置 ID\n",[28,25159,25160,25163],{"class":30,"line":77},[28,25161,25162],{"class":2453},"lerobot-setup-motors",[28,25164,25165],{"class":38}," \\\n",[28,25167,25168,25171],{"class":30,"line":114},[28,25169,25170],{"class":38},"  --teleop.type=so101_leader",[28,25172,25165],{"class":38},[28,25174,25175],{"class":30,"line":128},[28,25176,25177],{"class":38},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[28,25179,25180],{"class":30,"line":393},[28,25181,2890],{"emptyLinePlaceholder":562},[28,25183,25184],{"class":30,"line":409},[28,25185,25186],{"class":73},"# 从臂舵机配置 ID\n",[28,25188,25189,25191],{"class":30,"line":1711},[28,25190,25162],{"class":2453},[28,25192,25165],{"class":38},[28,25194,25195,25198],{"class":30,"line":1802},[28,25196,25197],{"class":38},"  --robot.type=so101_follower",[28,25199,25165],{"class":38},[28,25201,25202],{"class":30,"line":1808},[28,25203,25204],{"class":38},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25206,25207],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[60,25209,25211],{"id":25210},"_32-机械臂校准","3.2 机械臂校准",[14,25213,25214],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[18,25216,25218],{"className":24308,"code":25217,"language":24310,"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,25219,25220,25225,25232,25238,25245,25250,25254,25259,25265,25271,25278],{"__ignoreMap":23},[28,25221,25222],{"class":30,"line":31},[28,25223,25224],{"class":73},"# 主臂校准\n",[28,25226,25227,25230],{"class":30,"line":77},[28,25228,25229],{"class":2453},"lerobot-calibrate",[28,25231,25165],{"class":38},[28,25233,25234,25236],{"class":30,"line":114},[28,25235,25170],{"class":38},[28,25237,25165],{"class":38},[28,25239,25240,25243],{"class":30,"line":128},[28,25241,25242],{"class":38},"  --teleop.port=\u002Fdev\u002FttyACM0",[28,25244,25165],{"class":38},[28,25246,25247],{"class":30,"line":393},[28,25248,25249],{"class":38},"  --teleop.id=my_awesome_leader_arm\n",[28,25251,25252],{"class":30,"line":409},[28,25253,2890],{"emptyLinePlaceholder":562},[28,25255,25256],{"class":30,"line":1711},[28,25257,25258],{"class":73},"# 从臂校准\n",[28,25260,25261,25263],{"class":30,"line":1802},[28,25262,25229],{"class":2453},[28,25264,25165],{"class":38},[28,25266,25267,25269],{"class":30,"line":1808},[28,25268,25197],{"class":38},[28,25270,25165],{"class":38},[28,25272,25273,25276],{"class":30,"line":1820},[28,25274,25275],{"class":38},"  --robot.port=\u002Fdev\u002FttyACM1",[28,25277,25165],{"class":38},[28,25279,25280],{"class":30,"line":2102},[28,25281,25282],{"class":38},"  --robot.id=my_awesome_follower_arm\n",[547,25284,25285],{},"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":77,"depth":77,"links":25287},[25288,25289],{"id":25137,"depth":77,"text":25138},{"id":25210,"depth":77,"text":25211},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25128,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25296,"title":25297,"body":25298,"description":559,"extension":560,"meta":25489,"navigation":562,"path":25490,"seo":25491,"stem":25492,"__hash__":25493},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25299,"toc":25485},[25300,25303,25307,25354,25358,25371,25434,25437,25482],[10,25301,25297],{"id":25302},"_4-遥操与相机接入",[60,25304,25306],{"id":25305},"_41-不带相机遥操","4.1 不带相机遥操",[18,25308,25310],{"className":24308,"code":25309,"language":24310,"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,25311,25312,25319,25325,25331,25338,25344,25350],{"__ignoreMap":23},[28,25313,25314,25317],{"class":30,"line":31},[28,25315,25316],{"class":2453},"lerobot-teleoperate",[28,25318,25165],{"class":38},[28,25320,25321,25323],{"class":30,"line":77},[28,25322,25197],{"class":38},[28,25324,25165],{"class":38},[28,25326,25327,25329],{"class":30,"line":114},[28,25328,25275],{"class":38},[28,25330,25165],{"class":38},[28,25332,25333,25336],{"class":30,"line":128},[28,25334,25335],{"class":38},"  --robot.id=my_awesome_follower_arm",[28,25337,25165],{"class":38},[28,25339,25340,25342],{"class":30,"line":393},[28,25341,25170],{"class":38},[28,25343,25165],{"class":38},[28,25345,25346,25348],{"class":30,"line":409},[28,25347,25242],{"class":38},[28,25349,25165],{"class":38},[28,25351,25352],{"class":30,"line":1711},[28,25353,25249],{"class":38},[60,25355,25357],{"id":25356},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[18,25359,25361],{"className":24308,"code":25360,"language":24310,"meta":23,"style":23},"lerobot-find-cameras opencv\n",[25,25362,25363],{"__ignoreMap":23},[28,25364,25365,25368],{"class":30,"line":31},[28,25366,25367],{"class":2453},"lerobot-find-cameras",[28,25369,25370],{"class":735}," opencv\n",[18,25372,25374],{"className":24308,"code":25373,"language":24310,"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,25375,25376,25382,25388,25394,25400,25410,25416,25422,25429],{"__ignoreMap":23},[28,25377,25378,25380],{"class":30,"line":31},[28,25379,25316],{"class":2453},[28,25381,25165],{"class":38},[28,25383,25384,25386],{"class":30,"line":77},[28,25385,25197],{"class":38},[28,25387,25165],{"class":38},[28,25389,25390,25392],{"class":30,"line":114},[28,25391,25275],{"class":38},[28,25393,25165],{"class":38},[28,25395,25396,25398],{"class":30,"line":128},[28,25397,25335],{"class":38},[28,25399,25165],{"class":38},[28,25401,25402,25405,25408],{"class":30,"line":393},[28,25403,25404],{"class":38},"  --robot.cameras=",[28,25406,25407],{"class":735},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[28,25409,25165],{"class":38},[28,25411,25412,25414],{"class":30,"line":409},[28,25413,25170],{"class":38},[28,25415,25165],{"class":38},[28,25417,25418,25420],{"class":30,"line":1711},[28,25419,25242],{"class":38},[28,25421,25165],{"class":38},[28,25423,25424,25427],{"class":30,"line":1802},[28,25425,25426],{"class":38},"  --teleop.id=my_awesome_leader_arm",[28,25428,25165],{"class":38},[28,25430,25431],{"class":30,"line":1808},[28,25432,25433],{"class":38},"  --display_data=true\n",[14,25435,25436],{},"相机参数说明：",[1626,25438,25439,25445,25451,25460,25470,25476],{},[591,25440,25441,25444],{},[25,25442,25443],{},"front","：相机名称。",[591,25446,25447,25450],{},[25,25448,25449],{},"type: opencv","：相机驱动类型。",[591,25452,25453,25456,25457,25049],{},[25,25454,25455],{},"index_or_path","：设备编号或设备路径（如 ",[25,25458,25459],{},"\u002Fdev\u002Fvideo4",[591,25461,25462,25465,25466,25469],{},[25,25463,25464],{},"width"," \u002F ",[25,25467,25468],{},"height","：图像分辨率。",[591,25471,25472,25475],{},[25,25473,25474],{},"fps","：采样帧率。",[591,25477,25478,25481],{},[25,25479,25480],{},"--display_data=true","：启用实时可视化。",[547,25483,25484],{},"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":77,"depth":77,"links":25486},[25487,25488],{"id":25305,"depth":77,"text":25306},{"id":25356,"depth":77,"text":25357},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25297,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25495,"title":25496,"body":25497,"description":559,"extension":560,"meta":25669,"navigation":562,"path":25670,"seo":25671,"stem":25672,"__hash__":25673},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25498,"toc":25664},[25499,25503,25507,25512,25517,25520,25562,25568,25572,25621,25626,25630,25633,25641,25646,25651,25656,25661],[10,25500,25502],{"id":25501},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[60,25504,25506],{"id":25505},"_51-生成访问令牌","5.1 生成访问令牌",[14,25508,25509],{},[420,25510],{"alt":23,"src":25511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25513,25514],{},[420,25515],{"alt":23,"src":25516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25518,25519],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[18,25521,25523],{"className":24308,"code":25522,"language":24310,"meta":23,"style":23},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[25,25524,25525,25538],{"__ignoreMap":23},[28,25526,25527,25530,25533,25535],{"class":30,"line":31},[28,25528,25529],{"class":42},"export",[28,25531,25532],{"class":34}," HF_TOKEN",[28,25534,83],{"class":42},[28,25536,25537],{"class":735},"\"your_huggingface_token\"\n",[28,25539,25540,25543,25546,25549,25552,25554,25557,25559],{"class":30,"line":77},[28,25541,25542],{"class":2453},"hf",[28,25544,25545],{"class":735}," auth",[28,25547,25548],{"class":735}," login",[28,25550,25551],{"class":38}," --token",[28,25553,10210],{"class":735},[28,25555,25556],{"class":34},"$HF_TOKEN",[28,25558,880],{"class":735},[28,25560,25561],{"class":38}," --add-to-git-credential\n",[14,25563,25564,25567],{},[25,25565,25566],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[60,25569,25571],{"id":25570},"_52-验证登录","5.2 验证登录",[18,25573,25575],{"className":24308,"code":25574,"language":24310,"meta":23,"style":23},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[25,25576,25577,25608],{"__ignoreMap":23},[28,25578,25579,25582,25584,25587,25589,25591,25594,25597,25600,25603,25606],{"class":30,"line":31},[28,25580,25581],{"class":34},"HF_USER",[28,25583,83],{"class":42},[28,25585,25586],{"class":34},"$(",[28,25588,25542],{"class":2453},[28,25590,25545],{"class":735},[28,25592,25593],{"class":735}," whoami",[28,25595,25596],{"class":42}," |",[28,25598,25599],{"class":2453}," head",[28,25601,25602],{"class":38}," -n",[28,25604,25605],{"class":38}," 1",[28,25607,228],{"class":34},[28,25609,25610,25613,25615,25618],{"class":30,"line":77},[28,25611,25612],{"class":38},"echo",[28,25614,10210],{"class":735},[28,25616,25617],{"class":34},"$HF_USER",[28,25619,25620],{"class":735},"\"\n",[14,25622,25623],{},[420,25624],{"alt":23,"src":25625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[60,25627,25629],{"id":25628},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25631,25632],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1626,25634,25635,25638],{},[591,25636,25637],{},"Dataset Repo（用于上传演示数据）",[591,25639,25640],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25642,25643],{},[420,25644],{"alt":23,"src":25645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25647,25648],{},[420,25649],{"alt":23,"src":25650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25652,25653],{},[420,25654],{"alt":23,"src":25655},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25657,25658],{},[420,25659],{"alt":23,"src":25660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[547,25662,25663],{},"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":77,"depth":77,"links":25665},[25666,25667,25668],{"id":25505,"depth":77,"text":25506},{"id":25570,"depth":77,"text":25571},{"id":25628,"depth":77,"text":25629},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25496,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25675,"title":25676,"body":25677,"description":559,"extension":560,"meta":25874,"navigation":562,"path":25875,"seo":25876,"stem":25877,"__hash__":25878},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25678,"toc":25869},[25679,25683,25687,25783,25791,25796,25800,25816,25819,25823,25866],[10,25680,25682],{"id":25681},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[60,25684,25686],{"id":25685},"_61-录制示教数据","6.1 录制示教数据",[18,25688,25690],{"className":24308,"code":25689,"language":24310,"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,25691,25692,25699,25705,25711,25717,25726,25732,25738,25744,25751,25761,25768,25778],{"__ignoreMap":23},[28,25693,25694,25697],{"class":30,"line":31},[28,25695,25696],{"class":2453},"lerobot-record",[28,25698,25165],{"class":38},[28,25700,25701,25703],{"class":30,"line":77},[28,25702,25197],{"class":38},[28,25704,25165],{"class":38},[28,25706,25707,25709],{"class":30,"line":114},[28,25708,25275],{"class":38},[28,25710,25165],{"class":38},[28,25712,25713,25715],{"class":30,"line":128},[28,25714,25335],{"class":38},[28,25716,25165],{"class":38},[28,25718,25719,25721,25724],{"class":30,"line":393},[28,25720,25404],{"class":38},[28,25722,25723],{"class":735},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[28,25725,25165],{"class":38},[28,25727,25728,25730],{"class":30,"line":409},[28,25729,25170],{"class":38},[28,25731,25165],{"class":38},[28,25733,25734,25736],{"class":30,"line":1711},[28,25735,25242],{"class":38},[28,25737,25165],{"class":38},[28,25739,25740,25742],{"class":30,"line":1802},[28,25741,25426],{"class":38},[28,25743,25165],{"class":38},[28,25745,25746,25749],{"class":30,"line":1808},[28,25747,25748],{"class":38},"  --display_data=true",[28,25750,25165],{"class":38},[28,25752,25753,25756,25759],{"class":30,"line":1820},[28,25754,25755],{"class":38},"  --dataset.repo_id=",[28,25757,25758],{"class":735},"\"Embodied-AI-6\u002Fso101_test\"",[28,25760,25165],{"class":38},[28,25762,25763,25766],{"class":30,"line":2102},[28,25764,25765],{"class":38},"  --dataset.num_episodes=10",[28,25767,25165],{"class":38},[28,25769,25770,25773,25776],{"class":30,"line":2107},[28,25771,25772],{"class":38},"  --dataset.single_task=",[28,25774,25775],{"class":735},"\"Grab the green cube\"",[28,25777,25165],{"class":38},[28,25779,25780],{"class":30,"line":2113},[28,25781,25782],{"class":38},"  --resume=true\n",[1626,25784,25785],{},[591,25786,25787,25790],{},[25,25788,25789],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25792,25793],{},[420,25794],{"alt":23,"src":25795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[60,25797,25799],{"id":25798},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[18,25801,25803],{"className":24308,"code":25802,"language":24310,"meta":23,"style":23},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[25,25804,25805],{"__ignoreMap":23},[28,25806,25807,25810,25813],{"class":30,"line":31},[28,25808,25809],{"class":2453},"rm",[28,25811,25812],{"class":38}," -rf",[28,25814,25815],{"class":735}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25817,25818],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[60,25820,25822],{"id":25821},"_63-回放指定-episode","6.3 回放指定 episode",[18,25824,25826],{"className":24308,"code":25825,"language":24310,"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,25827,25828,25835,25841,25847,25853,25861],{"__ignoreMap":23},[28,25829,25830,25833],{"class":30,"line":31},[28,25831,25832],{"class":2453},"lerobot-replay",[28,25834,25165],{"class":38},[28,25836,25837,25839],{"class":30,"line":77},[28,25838,25197],{"class":38},[28,25840,25165],{"class":38},[28,25842,25843,25845],{"class":30,"line":114},[28,25844,25275],{"class":38},[28,25846,25165],{"class":38},[28,25848,25849,25851],{"class":30,"line":128},[28,25850,25335],{"class":38},[28,25852,25165],{"class":38},[28,25854,25855,25857,25859],{"class":30,"line":393},[28,25856,25755],{"class":38},[28,25858,25758],{"class":735},[28,25860,25165],{"class":38},[28,25862,25863],{"class":30,"line":409},[28,25864,25865],{"class":38},"  --dataset.episode=0\n",[547,25867,25868],{},"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":77,"depth":77,"links":25870},[25871,25872,25873],{"id":25685,"depth":77,"text":25686},{"id":25798,"depth":77,"text":25799},{"id":25821,"depth":77,"text":25822},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25676,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25880,"title":25881,"body":25882,"description":559,"extension":560,"meta":26010,"navigation":562,"path":26011,"seo":26012,"stem":26013,"__hash__":26014},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25883,"toc":26008},[25884,25888,25951,25954,26001,26006],[10,25885,25887],{"id":25886},"_7-act-模型训练","7. ACT 模型训练",[18,25889,25891],{"className":24308,"code":25890,"language":24310,"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,25892,25893,25900,25908,25915,25922,25929,25936,25943],{"__ignoreMap":23},[28,25894,25895,25898],{"class":30,"line":31},[28,25896,25897],{"class":2453},"lerobot-train",[28,25899,25165],{"class":38},[28,25901,25902,25904,25906],{"class":30,"line":77},[28,25903,25755],{"class":38},[28,25905,25758],{"class":735},[28,25907,25165],{"class":38},[28,25909,25910,25913],{"class":30,"line":114},[28,25911,25912],{"class":38},"  --policy.type=act",[28,25914,25165],{"class":38},[28,25916,25917,25920],{"class":30,"line":128},[28,25918,25919],{"class":38},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[28,25921,25165],{"class":38},[28,25923,25924,25927],{"class":30,"line":393},[28,25925,25926],{"class":38},"  --job_name=act_so101_test",[28,25928,25165],{"class":38},[28,25930,25931,25934],{"class":30,"line":409},[28,25932,25933],{"class":38},"  --policy.device=cuda",[28,25935,25165],{"class":38},[28,25937,25938,25941],{"class":30,"line":1711},[28,25939,25940],{"class":38},"  --wandb.enable=false",[28,25942,25165],{"class":38},[28,25944,25945,25948],{"class":30,"line":1802},[28,25946,25947],{"class":38},"  --policy.repo_id=",[28,25949,25950],{"class":735},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25952,25953],{},"参数说明：",[1626,25955,25956,25962,25968,25974,25980,25989,25995],{},[591,25957,25958,25961],{},[25,25959,25960],{},"--dataset.repo_id","：训练数据集仓库。",[591,25963,25964,25967],{},[25,25965,25966],{},"--policy.type=act","：策略模型类型为 ACT。",[591,25969,25970,25973],{},[25,25971,25972],{},"--output_dir","：本地训练输出目录。",[591,25975,25976,25979],{},[25,25977,25978],{},"--job_name","：训练任务名称。",[591,25981,25982,25985,25986,25049],{},[25,25983,25984],{},"--policy.device","：训练设备（如 ",[25,25987,25988],{},"cuda",[591,25990,25991,25994],{},[25,25992,25993],{},"--wandb.enable","：是否启用 WandB 可视化。",[591,25996,25997,26000],{},[25,25998,25999],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,26002,26003],{},[420,26004],{"alt":23,"src":26005},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[547,26007,25868],{},{"title":23,"searchDepth":77,"depth":77,"links":26009},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25881,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26016,"title":26017,"body":26018,"description":559,"extension":560,"meta":26105,"navigation":562,"path":26106,"seo":26107,"stem":26108,"__hash__":26109},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26019,"toc":26103},[26020,26023,26026,26093,26101],[10,26021,26017],{"id":26022},"_8-策略部署与自动采集",[14,26024,26025],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[18,26027,26029],{"className":24308,"code":26028,"language":24310,"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,26030,26031,26037,26043,26049,26057,26063,26070,26078,26086],{"__ignoreMap":23},[28,26032,26033,26035],{"class":30,"line":31},[28,26034,25696],{"class":2453},[28,26036,25165],{"class":38},[28,26038,26039,26041],{"class":30,"line":77},[28,26040,25197],{"class":38},[28,26042,25165],{"class":38},[28,26044,26045,26047],{"class":30,"line":114},[28,26046,25275],{"class":38},[28,26048,25165],{"class":38},[28,26050,26051,26053,26055],{"class":30,"line":128},[28,26052,25404],{"class":38},[28,26054,25723],{"class":735},[28,26056,25165],{"class":38},[28,26058,26059,26061],{"class":30,"line":393},[28,26060,25335],{"class":38},[28,26062,25165],{"class":38},[28,26064,26065,26068],{"class":30,"line":409},[28,26066,26067],{"class":38},"  --display_data=false",[28,26069,25165],{"class":38},[28,26071,26072,26074,26076],{"class":30,"line":1711},[28,26073,25755],{"class":38},[28,26075,25758],{"class":735},[28,26077,25165],{"class":38},[28,26079,26080,26082,26084],{"class":30,"line":1802},[28,26081,25772],{"class":38},[28,26083,25775],{"class":735},[28,26085,25165],{"class":38},[28,26087,26088,26091],{"class":30,"line":1808},[28,26089,26090],{"class":38},"  --policy.path=",[28,26092,25950],{"class":735},[1626,26094,26095],{},[591,26096,26097,26100],{},[25,26098,26099],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[547,26102,25868],{},{"title":23,"searchDepth":77,"depth":77,"links":26104},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26017,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26111,"title":26112,"body":26113,"description":559,"extension":560,"meta":26142,"navigation":562,"path":26143,"seo":26144,"stem":26145,"__hash__":26146},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26114,"toc":26140},[26115,26119,26122,26128,26131,26137],[10,26116,26118],{"id":26117},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26120,26121],{},"项目地址：",[14,26123,26124],{},[80,26125,26126],{"href":26126,"rel":26127},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24351],[14,26129,26130],{},"参考教程：",[14,26132,26133],{},[80,26134,26135],{"href":26135,"rel":26136},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24351],[14,26138,26139],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":23,"searchDepth":77,"depth":77,"links":26141},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26112,"description":559},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26148,"title":26149,"body":26150,"description":26154,"extension":560,"meta":26155,"navigation":562,"path":26156,"seo":26157,"stem":26158,"__hash__":26159},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26151,"toc":26152},[],{"title":23,"searchDepth":77,"depth":77,"links":26153},[],"act复现",{"category":23864},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26149,"description":26154},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26161,"title":26162,"body":26163,"description":23,"extension":560,"meta":26465,"navigation":562,"path":26466,"seo":26467,"stem":26468,"__hash__":26469},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26164,"toc":26457},[26165,26168,26172,26182,26189,26196,26199,26206,26209,26212,26216,26228,26232,26278,26281,26284,26287,26290,26293,26297,26335,26341,26345,26399,26404,26407,26410,26415,26418,26423,26426,26429,26433,26436,26439,26443],[10,26166,26162],{"id":26167},"_1简介",[605,26169,26171],{"id":26170},"_11什么是-docker","1.1什么是 Docker？",[14,26173,26174,26175,26178,26179],{},"Docker 是一个开源的 ",[780,26176,26177],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[780,26180,26181],{},"一次构建，到处运行。",[14,26183,26184,26185,26188],{},"“ ",[780,26186,26187],{},"一次构建，到处运行"," ”也就是说：",[588,26190,26191],{},[591,26192,26193],{},[780,26194,26195],{},"之前：",[14,26197,26198],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[588,26200,26201],{},[591,26202,26203],{},[780,26204,26205],{},"使用docker后：",[14,26207,26208],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26210,26211],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[605,26213,26215],{"id":26214},"_12它是怎么工作的","1.2.它是怎么工作的？",[1626,26217,26218,26221],{},[591,26219,26220],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[591,26222,26223,26224,26227],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[780,26225,26226],{},"无论在哪运行都一样稳定"," 。",[605,26229,26231],{"id":26230},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[768,26233,26234,26244],{},[771,26235,26236],{},[774,26237,26238,26241],{},[777,26239,26240],{"align":24222},"概念",[777,26242,26243],{"align":24222},"解释",[815,26245,26246,26254,26262,26270],{},[774,26247,26248,26251],{},[820,26249,26250],{"align":24222},"镜像",[820,26252,26253],{"align":24222},"Image，运行容器的模板，像是一个应用快照",[774,26255,26256,26259],{},[820,26257,26258],{"align":24222},"容器",[820,26260,26261],{"align":24222},"Container，运行中的镜像实例，有自己的文件系统、网络等",[774,26263,26264,26267],{},[820,26265,26266],{"align":24222},"Dockerfile",[820,26268,26269],{"align":24222},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[774,26271,26272,26275],{},[820,26273,26274],{"align":24222},"仓库",[820,26276,26277],{"align":24222},"Registry，存放镜像的地方，比如 Docker Hub",[14,26279,26280],{},"抽象化理解:",[14,26282,26283],{},"Docker镜像≈C++类",[14,26285,26286],{},"Docker容器≈C++类实例(即对象)",[14,26288,26289],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26291,26292],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[605,26294,26296],{"id":26295},"_14类比理解","1.4.类比理解",[768,26298,26299,26309],{},[771,26300,26301],{},[774,26302,26303,26306],{},[777,26304,26305],{"align":24222},"传统部署",[777,26307,26308],{"align":24222},"Docker部署",[815,26310,26311,26319,26327],{},[774,26312,26313,26316],{},[820,26314,26315],{"align":24222},"手动安装依赖、调试版本不一致问题",[820,26317,26318],{"align":24222},"一次打包环境和代码",[774,26320,26321,26324],{},[820,26322,26323],{"align":24222},"程序“裸奔”跑在系统上",[820,26325,26326],{"align":24222},"程序“穿着容器”隔离运行",[774,26328,26329,26332],{},[820,26330,26331],{"align":24222},"容易“在我电脑上能跑”",[820,26333,26334],{"align":24222},"保证“无论在哪都能跑”",[14,26336,26337,26338],{},"就像快递包裹： ",[780,26339,26340],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[605,26342,26344],{"id":26343},"_15docker-的核心优势","1.5.Docker 的核心优势",[768,26346,26347,26357],{},[771,26348,26349],{},[774,26350,26351,26354],{},[777,26352,26353],{"align":24222},"优势",[777,26355,26356],{"align":24222},"说明",[815,26358,26359,26367,26375,26383,26391],{},[774,26360,26361,26364],{},[820,26362,26363],{"align":24222},"轻量级",[820,26365,26366],{"align":24222},"基于系统内核共享，启动速度快，占资源少",[774,26368,26369,26372],{},[820,26370,26371],{"align":24222},"跨平台",[820,26373,26374],{"align":24222},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[774,26376,26377,26380],{},[820,26378,26379],{"align":24222},"易于迁移部署",[820,26381,26382],{"align":24222},"应用和环境一起封装，不怕依赖不一致",[774,26384,26385,26388],{},[820,26386,26387],{"align":24222},"易于版本控制",[820,26389,26390],{"align":24222},"镜像版本可控，支持回滚",[774,26392,26393,26396],{},[820,26394,26395],{"align":24222},"生态丰富",[820,26397,26398],{"align":24222},"Docker Hub 上有成千上万的现成镜像可用",[588,26400,26401],{},[591,26402,26403],{},"在Linux上可以几乎实现无性能损失。",[14,26405,26406],{},"docker里的发行版和本机共用Linux内核。",[14,26408,26409],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[588,26411,26412],{},[591,26413,26414],{},"可以快速部署在绝大多数Linux发行版",[14,26416,26417],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[588,26419,26420],{},[591,26421,26422],{},"配置环境简单",[14,26424,26425],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26427,26428],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[588,26430,26431],{},[591,26432,26395],{},[14,26434,26435],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26437,26438],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[605,26440,26442],{"id":26441},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1626,26444,26445,26448,26451,26454],{},[591,26446,26447],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[591,26449,26450],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[591,26452,26453],{},"微服务架构：每个服务一个容器，灵活组合",[591,26455,26456],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":23,"searchDepth":77,"depth":77,"links":26458},[26459,26460,26461,26462,26463,26464],{"id":26170,"depth":114,"text":26171},{"id":26214,"depth":114,"text":26215},{"id":26230,"depth":114,"text":26231},{"id":26295,"depth":114,"text":26296},{"id":26343,"depth":114,"text":26344},{"id":26441,"depth":114,"text":26442},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26162,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26471,"title":26472,"body":26473,"description":23,"extension":560,"meta":27205,"navigation":562,"path":27206,"seo":27207,"stem":27208,"__hash__":27209},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26474,"toc":27200},[26475,26478,26482,26485,26488,26494,26500,26504,26513,26516,26572,26575,26626,26629,26712,26715,26752,26756,26767,26780,26787,26790,26870,26873,26923,26926,26949,26953,26960,26963,26979,26985,26988,27004,27010,27013,27029,27043,27049,27069,27075,27078,27090,27096,27099,27113,27119,27122,27142,27147,27150,27153,27157,27160,27163,27166,27173,27176,27179,27182,27187,27192,27197],[10,26476,26472],{"id":26477},"_2安装docker",[605,26479,26481],{"id":26480},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26483,26484],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26486,26487],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26489,26490],{},[80,26491,26492],{"href":26492,"rel":26493},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24351],[14,26495,26496],{},[80,26497,26498],{"href":26498,"rel":26499},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24351],[22484,26501,26503],{"id":26502},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26505,26506,26507,26512],{},"以下内容根据 ",[80,26508,26511],{"href":26509,"rel":26510},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24351],"官方文档"," 修改而来。",[14,26514,26515],{},"如果你过去安装过 docker，先删掉：",[18,26517,26519],{"className":24308,"code":26518,"language":24310,"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,26520,26521],{"__ignoreMap":23},[28,26522,26523,26525,26528,26530,26533,26536,26539,26542,26545,26548,26551,26554,26557,26560,26563,26566,26569],{"class":30,"line":31},[28,26524,49],{"class":42},[28,26526,26527],{"class":34}," pkg ",[28,26529,55],{"class":42},[28,26531,26532],{"class":735}," docker.io",[28,26534,26535],{"class":735}," docker-doc",[28,26537,26538],{"class":735}," docker-compose",[28,26540,26541],{"class":735}," docker-compose-v2",[28,26543,26544],{"class":735}," podman-docker",[28,26546,26547],{"class":735}," containerd",[28,26549,26550],{"class":735}," runc",[28,26552,26553],{"class":34},"; ",[28,26555,26556],{"class":42},"do",[28,26558,26559],{"class":2453}," sudo",[28,26561,26562],{"class":735}," apt-get",[28,26564,26565],{"class":735}," remove",[28,26567,26568],{"class":34}," $pkg; ",[28,26570,26571],{"class":42},"done\n",[14,26573,26574],{},"首先安装依赖和GPG：",[18,26576,26580],{"className":26577,"code":26578,"language":26579,"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,26581,26582,26587,26592,26597,26602,26607,26612,26616,26621],{"__ignoreMap":23},[28,26583,26584],{"class":30,"line":31},[28,26585,26586],{},"# Add Docker's official GPG key:\n",[28,26588,26589],{"class":30,"line":77},[28,26590,26591],{},"sudo apt-get update\n",[28,26593,26594],{"class":30,"line":114},[28,26595,26596],{},"sudo apt-get install ca-certificates curl\n",[28,26598,26599],{"class":30,"line":128},[28,26600,26601],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[28,26603,26604],{"class":30,"line":393},[28,26605,26606],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[28,26608,26609],{"class":30,"line":409},[28,26610,26611],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[28,26613,26614],{"class":30,"line":1711},[28,26615,2890],{"emptyLinePlaceholder":562},[28,26617,26618],{"class":30,"line":1802},[28,26619,26620],{},"# 如果上面这行报错就弄下面这行\n",[28,26622,26623],{"class":30,"line":1808},[28,26624,26625],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26627,26628],{},"信任 Docker 的 GPG 公钥并添加仓库：",[18,26630,26632],{"className":24308,"code":26631,"language":24310,"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,26633,26634,26639,26645,26662,26695],{"__ignoreMap":23},[28,26635,26636],{"class":30,"line":31},[28,26637,26638],{"class":73},"# Add the repository to Apt sources:\n",[28,26640,26641,26643],{"class":30,"line":77},[28,26642,25612],{"class":38},[28,26644,25165],{"class":38},[28,26646,26647,26650,26653,26656,26659],{"class":30,"line":114},[28,26648,26649],{"class":735},"  \"deb [arch=$(",[28,26651,26652],{"class":2453},"dpkg",[28,26654,26655],{"class":38}," --print-architecture",[28,26657,26658],{"class":735},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[28,26660,26661],{"class":38},"\\\n",[28,26663,26664,26667,26669,26671,26674,26677,26679,26681,26684,26686,26688,26691,26693],{"class":30,"line":128},[28,26665,26666],{"class":735},"  \"",[28,26668,25586],{"class":34},[28,26670,1179],{"class":38},[28,26672,26673],{"class":735}," \u002Fetc\u002Fos-release",[28,26675,26676],{"class":34}," && ",[28,26678,25612],{"class":38},[28,26680,10210],{"class":735},[28,26682,26683],{"class":34},"$VERSION_CODENAME",[28,26685,880],{"class":735},[28,26687,1054],{"class":34},[28,26689,26690],{"class":735},"\" stable\"",[28,26692,25596],{"class":42},[28,26694,25165],{"class":38},[28,26696,26697,26700,26703,26706,26709],{"class":30,"line":393},[28,26698,26699],{"class":2453},"  sudo",[28,26701,26702],{"class":735}," tee",[28,26704,26705],{"class":735}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[28,26707,26708],{"class":42}," >",[28,26710,26711],{"class":735}," \u002Fdev\u002Fnull\n",[14,26713,26714],{},"最后安装",[18,26716,26718],{"className":24308,"code":26717,"language":24310,"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,26719,26720,26729],{"__ignoreMap":23},[28,26721,26722,26724,26726],{"class":30,"line":31},[28,26723,25063],{"class":2453},[28,26725,26562],{"class":735},[28,26727,26728],{"class":735}," update\n",[28,26730,26731,26733,26735,26737,26740,26743,26746,26749],{"class":30,"line":77},[28,26732,25063],{"class":2453},[28,26734,26562],{"class":735},[28,26736,24320],{"class":735},[28,26738,26739],{"class":735}," docker-ce",[28,26741,26742],{"class":735}," docker-ce-cli",[28,26744,26745],{"class":735}," containerd.io",[28,26747,26748],{"class":735}," docker-buildx-plugin",[28,26750,26751],{"class":735}," docker-compose-plugin\n",[22484,26753,26755],{"id":26754},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26757,26758,26759,26762,26763,26766],{},"查看自己自己包管理工具版本（dnf是 ",[780,26760,26761],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[780,26764,26765],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[18,26768,26770],{"className":24308,"code":26769,"language":24310,"meta":23,"style":23},"dnf --version\n",[25,26771,26772],{"__ignoreMap":23},[28,26773,26774,26777],{"class":30,"line":31},[28,26775,26776],{"class":2453},"dnf",[28,26778,26779],{"class":38}," --version\n",[14,26781,26506,26782,26786],{},[80,26783,26511],{"href":26784,"rel":26785},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24351]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26788,26789],{},"如果你之前安装过 docker，请先删掉",[18,26791,26793],{"className":24308,"code":26792,"language":24310,"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,26794,26795,26809,26816,26823,26830,26837,26844,26851,26858,26865],{"__ignoreMap":23},[28,26796,26797,26799,26802,26804,26807],{"class":30,"line":31},[28,26798,25063],{"class":2453},[28,26800,26801],{"class":735}," dnf",[28,26803,26565],{"class":735},[28,26805,26806],{"class":735}," docker",[28,26808,25165],{"class":38},[28,26810,26811,26814],{"class":30,"line":77},[28,26812,26813],{"class":735},"                  docker-client",[28,26815,25165],{"class":38},[28,26817,26818,26821],{"class":30,"line":114},[28,26819,26820],{"class":735},"                  docker-client-latest",[28,26822,25165],{"class":38},[28,26824,26825,26828],{"class":30,"line":128},[28,26826,26827],{"class":735},"                  docker-common",[28,26829,25165],{"class":38},[28,26831,26832,26835],{"class":30,"line":393},[28,26833,26834],{"class":735},"                  docker-latest",[28,26836,25165],{"class":38},[28,26838,26839,26842],{"class":30,"line":409},[28,26840,26841],{"class":735},"                  docker-latest-logrotate",[28,26843,25165],{"class":38},[28,26845,26846,26849],{"class":30,"line":1711},[28,26847,26848],{"class":735},"                  docker-logrotate",[28,26850,25165],{"class":38},[28,26852,26853,26856],{"class":30,"line":1802},[28,26854,26855],{"class":735},"                  docker-selinux",[28,26857,25165],{"class":38},[28,26859,26860,26863],{"class":30,"line":1808},[28,26861,26862],{"class":735},"                  docker-engine-selinux",[28,26864,25165],{"class":38},[28,26866,26867],{"class":30,"line":1820},[28,26868,26869],{"class":735},"                  docker-engine\n",[14,26871,26872],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[18,26874,26876],{"className":24308,"code":26875,"language":24310,"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,26877,26878,26892,26907],{"__ignoreMap":23},[28,26879,26880,26882,26884,26887,26889],{"class":30,"line":31},[28,26881,25063],{"class":2453},[28,26883,26801],{"class":735},[28,26885,26886],{"class":38}," -y",[28,26888,24320],{"class":735},[28,26890,26891],{"class":735}," dnf-plugins-core\n",[28,26893,26894,26896,26898,26901,26904],{"class":30,"line":77},[28,26895,25063],{"class":2453},[28,26897,26801],{"class":735},[28,26899,26900],{"class":735}," config-manager",[28,26902,26903],{"class":735}," addrepo",[28,26905,26906],{"class":38}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[28,26908,26909,26911,26914,26917,26920],{"class":30,"line":114},[28,26910,25063],{"class":2453},[28,26912,26913],{"class":735}," sed",[28,26915,26916],{"class":38}," -i",[28,26918,26919],{"class":735}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[28,26921,26922],{"class":735}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26924,26925],{},"最后安装：",[18,26927,26929],{"className":24308,"code":26928,"language":24310,"meta":23,"style":23},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26930,26931],{"__ignoreMap":23},[28,26932,26933,26935,26937,26939,26941,26943,26945,26947],{"class":30,"line":31},[28,26934,25063],{"class":2453},[28,26936,26801],{"class":735},[28,26938,24320],{"class":735},[28,26940,26739],{"class":735},[28,26942,26742],{"class":735},[28,26944,26745],{"class":735},[28,26946,26748],{"class":735},[28,26948,26751],{"class":735},[605,26950,26952],{"id":26951},"_22配置环境","2.2.配置环境",[22484,26954,26956,26959],{"id":26955},"_221检查-docker-服务状态",[780,26957,26958],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26961,26962],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[18,26964,26966],{"className":24308,"code":26965,"language":24310,"meta":23,"style":23},"systemctl status docker\n",[25,26967,26968],{"__ignoreMap":23},[28,26969,26970,26973,26976],{"class":30,"line":31},[28,26971,26972],{"class":2453},"systemctl",[28,26974,26975],{"class":735}," status",[28,26977,26978],{"class":735}," docker\n",[22484,26980,26982,26959],{"id":26981},"_222启动-docker-服务",[780,26983,26984],{},"2.2.2.启动 Docker 服务",[14,26986,26987],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[18,26989,26991],{"className":24308,"code":26990,"language":24310,"meta":23,"style":23},"sudo systemctl start docker\n",[25,26992,26993],{"__ignoreMap":23},[28,26994,26995,26997,27000,27002],{"class":30,"line":31},[28,26996,25063],{"class":2453},[28,26998,26999],{"class":735}," systemctl",[28,27001,4672],{"class":735},[28,27003,26978],{"class":735},[22484,27005,27007,26959],{"id":27006},"_223设置-docker-开机自启",[780,27008,27009],{},"2.2.3.设置 Docker 开机自启",[14,27011,27012],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[18,27014,27016],{"className":24308,"code":27015,"language":24310,"meta":23,"style":23},"sudo systemctl enable docker\n",[25,27017,27018],{"__ignoreMap":23},[28,27019,27020,27022,27024,27027],{"class":30,"line":31},[28,27021,25063],{"class":2453},[28,27023,26999],{"class":735},[28,27025,27026],{"class":735}," enable",[28,27028,26978],{"class":735},[22484,27030,27032,14281,27035,14281,27040,26959],{"id":27031},"_224将用户添加到-docker-组",[780,27033,27034],{},"2.2.4.将用户添加到",[780,27036,27037],{},[25,27038,27039],{},"docker",[780,27041,27042],{},"组",[14,27044,27045,27046,27048],{},"使用以下命令将当前用户添加到 ",[25,27047,27039],{}," 组：",[18,27050,27052],{"className":24308,"code":27051,"language":24310,"meta":23,"style":23},"sudo usermod -aG docker $USER\n",[25,27053,27054],{"__ignoreMap":23},[28,27055,27056,27058,27061,27064,27066],{"class":30,"line":31},[28,27057,25063],{"class":2453},[28,27059,27060],{"class":735}," usermod",[28,27062,27063],{"class":38}," -aG",[28,27065,26806],{"class":735},[28,27067,27068],{"class":34}," $USER\n",[22484,27070,27072,26959],{"id":27071},"_225退出并重新登录",[780,27073,27074],{},"2.2.5.退出并重新登录",[14,27076,27077],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[18,27079,27081],{"className":24308,"code":27080,"language":24310,"meta":23,"style":23},"newgrp docker\n",[25,27082,27083],{"__ignoreMap":23},[28,27084,27085,27088],{"class":30,"line":31},[28,27086,27087],{"class":2453},"newgrp",[28,27089,26978],{"class":735},[22484,27091,27093,26959],{"id":27092},"_226重新启动-docker-服务如果需要",[780,27094,27095],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27097,27098],{},"确保 Docker 服务正在运行，可以使用以下命令：",[18,27100,27101],{"className":24308,"code":26990,"language":24310,"meta":23,"style":23},[25,27102,27103],{"__ignoreMap":23},[28,27104,27105,27107,27109,27111],{"class":30,"line":31},[28,27106,25063],{"class":2453},[28,27108,26999],{"class":735},[28,27110,4672],{"class":735},[28,27112,26978],{"class":735},[22484,27114,27116,26959],{"id":27115},"_227重启电脑后检查-docker-服务状态",[780,27117,27118],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27120,27121],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[18,27123,27125],{"className":24308,"code":27124,"language":24310,"meta":23,"style":23},"sudo reboot\nsystemctl status docker\n",[25,27126,27127,27134],{"__ignoreMap":23},[28,27128,27129,27131],{"class":30,"line":31},[28,27130,25063],{"class":2453},[28,27132,27133],{"class":735}," reboot\n",[28,27135,27136,27138,27140],{"class":30,"line":77},[28,27137,26972],{"class":2453},[28,27139,26975],{"class":735},[28,27141,26978],{"class":735},[14,27143,27144],{},[420,27145],{"alt":23,"src":27146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27148,27149],{},"第三行显示enabled说明开机自启动成功",[14,27151,27152],{},"按q退出",[605,27154,27156],{"id":27155},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27158,27159],{},"优先使用linux来使用docker是比较好的",[14,27161,27162],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27164,27165],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27167,27168,27169],{},"官方下载安装:",[80,27170,27171],{"href":27171,"rel":27172},"https:\u002F\u002Fwww.docker.com\u002F",[24351],[14,27174,27175],{},"Windows的Docker显卡直通与USB直通:",[14,27177,27178],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27180,27181],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27183,27184],{},[420,27185],{"alt":23,"src":27186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27188,27189],{},[420,27190],{"alt":23,"src":27191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27193,27194],{},[420,27195],{"alt":23,"src":27196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[547,27198,27199],{},"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":77,"depth":77,"links":27201},[27202,27203,27204],{"id":26480,"depth":114,"text":26481},{"id":26951,"depth":114,"text":26952},{"id":27155,"depth":114,"text":27156},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26472,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27211,"title":27212,"body":27213,"description":27220,"extension":560,"meta":27913,"navigation":562,"path":27914,"seo":27915,"stem":27916,"__hash__":27917},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27214,"toc":27907},[27215,27218,27221,27225,27230,27235,27238,27266,27271,27280,27283,27288,27292,27299,27304,27310,27314,27317,27321,27326,27418,27423,27441,27446,27467,27472,27488,27492,27497,27526,27531,27577,27582,27626,27634,27651,27656,27672,27677,27691,27694,27697,27700,27703,27732,27735,27740,27744,27747,27750,27756,27759,27762,27765,27827,27834,27839,27842,27860,27864,27867,27884,27887,27890,27904],[10,27216,27212],{"id":27217},"_3docker直通",[14,27219,27220],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[605,27222,27224],{"id":27223},"_31usb直通","3.1.USB直通",[14,27226,27227],{},[420,27228],{"alt":23,"src":27229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[588,27231,27232],{},[591,27233,27234],{},"方法一(不是很推荐新手)：",[14,27236,27237],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[18,27239,27241],{"className":24308,"code":27240,"language":24310,"meta":23,"style":23},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[25,27242,27243,27251,27256],{"__ignoreMap":23},[28,27244,27245,27248],{"class":30,"line":31},[28,27246,27247],{"class":2453},"ls",[28,27249,27250],{"class":735}," \u002Fdev\n",[28,27252,27253],{"class":30,"line":77},[28,27254,27255],{"class":73},"#例如\n",[28,27257,27258,27261,27263],{"class":30,"line":114},[28,27259,27260],{"class":34},"--device",[28,27262,83],{"class":42},[28,27264,27265],{"class":735},"\u002Fdev\u002Ftty_USB0\n",[588,27267,27268],{"start":77},[591,27269,27270],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[18,27272,27274],{"className":24308,"code":27273,"language":24310,"meta":23,"style":23},"--privileged\n",[25,27275,27276],{"__ignoreMap":23},[28,27277,27278],{"class":30,"line":31},[28,27279,27273],{"class":2453},[14,27281,27282],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27284,27285],{},[420,27286],{"alt":23,"src":27287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[605,27289,27291],{"id":27290},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27293,27294,27295,27298],{},"NVIDIA Container Toolkit使用户 ",[780,27296,27297],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27300,27301],{},[420,27302],{"alt":23,"src":27303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27305,27306],{},[80,27307,27308],{"href":27308,"rel":27309},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24351],[22484,27311,27313],{"id":27312},"_321安装","3.2.1.安装",[14,27315,27316],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23396,27318,27320],{"id":27319},"_3211ubuntu","3.2.1.1.Ubuntu",[588,27322,27323],{},[591,27324,27325],{},"配置存储库 并更新",[18,27327,27329],{"className":24308,"code":27328,"language":24310,"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,27330,27331,27360,27380,27392,27404,27410],{"__ignoreMap":23},[28,27332,27333,27336,27339,27342,27344,27346,27349,27352,27355,27358],{"class":30,"line":31},[28,27334,27335],{"class":2453},"curl",[28,27337,27338],{"class":38}," -fsSL",[28,27340,27341],{"class":735}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[28,27343,25596],{"class":42},[28,27345,26559],{"class":2453},[28,27347,27348],{"class":735}," gpg",[28,27350,27351],{"class":38}," --dearmor",[28,27353,27354],{"class":38}," -o",[28,27356,27357],{"class":735}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[28,27359,25165],{"class":38},[28,27361,27362,27365,27367,27370,27373,27376,27378],{"class":30,"line":77},[28,27363,27364],{"class":34},"  && ",[28,27366,27335],{"class":2453},[28,27368,27369],{"class":38}," -s",[28,27371,27372],{"class":38}," -L",[28,27374,27375],{"class":735}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[28,27377,25596],{"class":42},[28,27379,25165],{"class":38},[28,27381,27382,27385,27388,27390],{"class":30,"line":114},[28,27383,27384],{"class":2453},"    sed",[28,27386,27387],{"class":735}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[28,27389,25596],{"class":42},[28,27391,25165],{"class":38},[28,27393,27394,27397,27399,27402],{"class":30,"line":128},[28,27395,27396],{"class":2453},"    sudo",[28,27398,26702],{"class":735},[28,27400,27401],{"class":735}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[28,27403,25165],{"class":38},[28,27405,27406,27408],{"class":30,"line":393},[28,27407,27364],{"class":34},[28,27409,26661],{"class":38},[28,27411,27412,27414,27416],{"class":30,"line":409},[28,27413,27396],{"class":2453},[28,27415,26562],{"class":735},[28,27417,26728],{"class":735},[588,27419,27420],{"start":77},[591,27421,27422],{},"安装nvidia-docker2",[18,27424,27426],{"className":24308,"code":27425,"language":24310,"meta":23,"style":23},"sudo apt-get install -y nvidia-docker2\n",[25,27427,27428],{"__ignoreMap":23},[28,27429,27430,27432,27434,27436,27438],{"class":30,"line":31},[28,27431,25063],{"class":2453},[28,27433,26562],{"class":735},[28,27435,24320],{"class":735},[28,27437,26886],{"class":38},[28,27439,27440],{"class":735}," nvidia-docker2\n",[588,27442,27443],{"start":114},[591,27444,27445],{},"使用nvidia-ctk命令配置container runtime",[18,27447,27449],{"className":24308,"code":27448,"language":24310,"meta":23,"style":23},"sudo nvidia-ctk runtime configure --runtime=docker\n",[25,27450,27451],{"__ignoreMap":23},[28,27452,27453,27455,27458,27461,27464],{"class":30,"line":31},[28,27454,25063],{"class":2453},[28,27456,27457],{"class":735}," nvidia-ctk",[28,27459,27460],{"class":735}," runtime",[28,27462,27463],{"class":735}," configure",[28,27465,27466],{"class":38}," --runtime=docker\n",[588,27468,27469],{"start":128},[591,27470,27471],{},"重启docker服务:",[18,27473,27475],{"className":24308,"code":27474,"language":24310,"meta":23,"style":23},"sudo systemctl restart docker\n",[25,27476,27477],{"__ignoreMap":23},[28,27478,27479,27481,27483,27486],{"class":30,"line":31},[28,27480,25063],{"class":2453},[28,27482,26999],{"class":735},[28,27484,27485],{"class":735}," restart",[28,27487,26978],{"class":735},[23396,27489,27491],{"id":27490},"_3212fedora","3.2.1.2.Fedora",[588,27493,27494],{},[591,27495,27496],{},"配置存储库",[18,27498,27500],{"className":24308,"code":27499,"language":24310,"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,27501,27502,27517],{"__ignoreMap":23},[28,27503,27504,27506,27508,27510,27513,27515],{"class":30,"line":31},[28,27505,27335],{"class":2453},[28,27507,27369],{"class":38},[28,27509,27372],{"class":38},[28,27511,27512],{"class":735}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[28,27514,25596],{"class":42},[28,27516,25165],{"class":38},[28,27518,27519,27521,27523],{"class":30,"line":77},[28,27520,25063],{"class":2453},[28,27522,26702],{"class":735},[28,27524,27525],{"class":735}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[588,27527,27528],{"start":77},[591,27529,27530],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[18,27532,27534],{"className":24308,"code":27533,"language":24310,"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,27535,27536,27541,27555,27559,27564],{"__ignoreMap":23},[28,27537,27538],{"class":30,"line":31},[28,27539,27540],{"class":73},"# 如果是RHEL或者Rocky（DNF4）\n",[28,27542,27543,27545,27547,27549,27552],{"class":30,"line":77},[28,27544,25063],{"class":2453},[28,27546,26801],{"class":735},[28,27548,26900],{"class":735},[28,27550,27551],{"class":38}," --add-repo",[28,27553,27554],{"class":735}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,27556,27557],{"class":30,"line":114},[28,27558,2890],{"emptyLinePlaceholder":562},[28,27560,27561],{"class":30,"line":128},[28,27562,27563],{"class":73},"# 如果是Feodra41+（DNF5）\n",[28,27565,27566,27568,27570,27572,27574],{"class":30,"line":393},[28,27567,25063],{"class":2453},[28,27569,26801],{"class":735},[28,27571,26900],{"class":735},[28,27573,26903],{"class":735},[28,27575,27576],{"class":38}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[588,27578,27579],{"start":114},[591,27580,27581],{},"安装NVIDIA Container Toolki包",[18,27583,27585],{"className":24308,"code":27584,"language":24310,"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,27586,27587,27592,27605,27609,27614],{"__ignoreMap":23},[28,27588,27589],{"class":30,"line":31},[28,27590,27591],{"class":73},"# 如果是RHEL或者Rocky\n",[28,27593,27594,27596,27598,27600,27602],{"class":30,"line":77},[28,27595,25063],{"class":2453},[28,27597,26801],{"class":735},[28,27599,24320],{"class":735},[28,27601,26886],{"class":38},[28,27603,27604],{"class":735}," nvidia-container-toolkit\n",[28,27606,27607],{"class":30,"line":114},[28,27608,2890],{"emptyLinePlaceholder":562},[28,27610,27611],{"class":30,"line":128},[28,27612,27613],{"class":73},"# 如果是Fedora\n",[28,27615,27616,27618,27620,27622,27624],{"class":30,"line":393},[28,27617,25063],{"class":2453},[28,27619,26801],{"class":735},[28,27621,24320],{"class":735},[28,27623,26886],{"class":38},[28,27625,27604],{"class":735},[588,27627,27628],{"start":128},[591,27629,27630,27631,27633],{},"安装nvidia-docker2 ： 在Fedora上使用",[25,27632,26776],{},"进行安装",[18,27635,27637],{"className":24308,"code":27636,"language":24310,"meta":23,"style":23},"sudo dnf install -y nvidia-docker2\n",[25,27638,27639],{"__ignoreMap":23},[28,27640,27641,27643,27645,27647,27649],{"class":30,"line":31},[28,27642,25063],{"class":2453},[28,27644,26801],{"class":735},[28,27646,24320],{"class":735},[28,27648,26886],{"class":38},[28,27650,27440],{"class":735},[588,27652,27653],{"start":393},[591,27654,27655],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[18,27657,27658],{"className":24308,"code":27448,"language":24310,"meta":23,"style":23},[25,27659,27660],{"__ignoreMap":23},[28,27661,27662,27664,27666,27668,27670],{"class":30,"line":31},[28,27663,25063],{"class":2453},[28,27665,27457],{"class":735},[28,27667,27460],{"class":735},[28,27669,27463],{"class":735},[28,27671,27466],{"class":38},[588,27673,27674],{"start":409},[591,27675,27676],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[18,27678,27679],{"className":24308,"code":27474,"language":24310,"meta":23,"style":23},[25,27680,27681],{"__ignoreMap":23},[28,27682,27683,27685,27687,27689],{"class":30,"line":31},[28,27684,25063],{"class":2453},[28,27686,26999],{"class":735},[28,27688,27485],{"class":735},[28,27690,26978],{"class":735},[14,27692,27693],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27695,27696],{},"方法：",[14,27698,27699],{},"1️⃣nvidia-smi",[14,27701,27702],{},"2️⃣运行nvidia cuda 容器进行测试",[18,27704,27706],{"className":24308,"code":27705,"language":24310,"meta":23,"style":23},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[25,27707,27708],{"__ignoreMap":23},[28,27709,27710,27712,27714,27717,27720,27723,27726,27729],{"class":30,"line":31},[28,27711,25063],{"class":2453},[28,27713,26806],{"class":735},[28,27715,27716],{"class":735}," run",[28,27718,27719],{"class":38}," --rm",[28,27721,27722],{"class":38}," --gpus",[28,27724,27725],{"class":735}," all",[28,27727,27728],{"class":735}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[28,27730,27731],{"class":735}," nvidia-smi\n",[14,27733,27734],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27736,27737],{},[420,27738],{"alt":23,"src":27739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[605,27741,27743],{"id":27742},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27745,27746],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27748,27749],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27751,27752],{},[80,27753,27754],{"href":27754,"rel":27755},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24351],[14,27757,27758],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27760,27761],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27763,27764],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[768,27766,27767,27783],{},[771,27768,27769],{},[774,27770,27771,27774,27777,27780],{},[777,27772,27773],{"align":24222},"镜像类型",[777,27775,27776],{"align":24222},"适用场景",[777,27778,27779],{"align":24222},"示例标签",[777,27781,27782],{"align":24222},"大小",[815,27784,27785,27799,27813],{},[774,27786,27787,27790,27793,27796],{},[820,27788,27789],{"align":24222},"base",[820,27791,27792],{"align":24222},"仅需 CUDA 运行时库",[820,27794,27795],{"align":24222},"12.4.0-base-ubuntu22.04",[820,27797,27798],{"align":24222},"~240MB",[774,27800,27801,27804,27807,27810],{},[820,27802,27803],{"align":24222},"runtime",[820,27805,27806],{"align":24222},"部署编译后的应用（含数学库）",[820,27808,27809],{"align":24222},"12.4.0-runtime-ubuntu22.04",[820,27811,27812],{"align":24222},"~2GB",[774,27814,27815,27818,27821,27824],{},[820,27816,27817],{"align":24222},"devel",[820,27819,27820],{"align":24222},"开发环境（含编译工具）",[820,27822,27823],{"align":24222},"12.4.0-devel-ubuntu22.04",[820,27825,27826],{"align":24222},"~3GB",[14,27828,27829,27830,27833],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[25,27831,27832],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27835,27836],{},[420,27837],{"alt":23,"src":27838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27840,27841],{},"在dockerfile里就可以开头这么写：",[18,27843,27845],{"className":24308,"code":27844,"language":24310,"meta":23,"style":23},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[25,27846,27847,27852],{"__ignoreMap":23},[28,27848,27849],{"class":30,"line":31},[28,27850,27851],{"class":73},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[28,27853,27854,27857],{"class":30,"line":77},[28,27855,27856],{"class":2453},"FROM",[28,27858,27859],{"class":735}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[605,27861,27863],{"id":27862},"_34配置以太网","3.4.配置以太网",[14,27865,27866],{},"指定网络模式",[18,27868,27870],{"className":24308,"code":27869,"language":24310,"meta":23,"style":23},"--net=host \\\n",[25,27871,27872],{"__ignoreMap":23},[28,27873,27874,27877,27879,27882],{"class":30,"line":31},[28,27875,27876],{"class":34},"--net",[28,27878,83],{"class":42},[28,27880,27881],{"class":735},"host",[28,27883,25165],{"class":2453},[14,27885,27886],{},"启动参数里加上这行即可。具体在下方",[14,27888,27889],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1626,27891,27892,27895,27898,27901],{},[591,27893,27894],{},"--net=bridge:默认选项，表示连接到默认的网桥",[591,27896,27897],{},"--net=host:容器使用宿主机的网络",[591,27899,27900],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[591,27902,27903],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[547,27905,27906],{},"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":77,"depth":77,"links":27908},[27909,27910,27911,27912],{"id":27223,"depth":114,"text":27224},{"id":27290,"depth":114,"text":27291},{"id":27742,"depth":114,"text":27743},{"id":27862,"depth":114,"text":27863},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27212,"description":27220},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27919,"title":27920,"body":27921,"description":27928,"extension":560,"meta":27934,"navigation":562,"path":27935,"seo":27936,"stem":27937,"__hash__":27938},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27922,"toc":27932},[27923,27926,27929],[10,27924,27920],{"id":27925},"_4dockerhub换源",[14,27927,27928],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27930,27931],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":23,"searchDepth":77,"depth":77,"links":27933},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27920,"description":27928},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27940,"title":27941,"body":27942,"description":23,"extension":560,"meta":28954,"navigation":562,"path":28955,"seo":28956,"stem":28957,"__hash__":28958},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27943,"toc":28949},[27944,27947,27951,27957,27961,27964,28304,28307,28310,28313,28318,28323,28326,28329,28332,28335,28354,28357,28368,28374,28556,28566,28582,28845,28847,28872,28887,28896,28946],[10,27945,27941],{"id":27946},"_5docker命令学习",[605,27948,27950],{"id":27949},"_51参考文档","5.1.参考文档",[14,27952,27953],{},[80,27954,27955],{"href":27955,"rel":27956},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24351],[605,27958,27960],{"id":27959},"_52常用命令","5.2.常用命令",[14,27962,27963],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[768,27965,27966,27979],{},[771,27967,27968],{},[774,27969,27970,27973,27976],{},[777,27971,27972],{"align":24222},"命令",[777,27974,27975],{"align":24222},"描述",[777,27977,27978],{"align":24222},"示例",[815,27980,27981,27992,28003,28014,28025,28036,28047,28058,28068,28079,28090,28101,28111,28122,28133,28144,28154,28164,28174,28184,28195,28206,28217,28228,28239,28250,28260,28271,28282,28293],{},[774,27982,27983,27986,27989],{},[820,27984,27985],{"align":24222},"docker run",[820,27987,27988],{"align":24222},"创建并启动一个新的容器。",[820,27990,27991],{"align":24222},"docker run -it ubuntu bash",[774,27993,27994,27997,28000],{},[820,27995,27996],{"align":24222},"docker build",[820,27998,27999],{"align":24222},"通过指定的 Dockerfile 创建一个新的镜像。",[820,28001,28002],{"align":24222},"docker build -t myimage .",[774,28004,28005,28008,28011],{},[820,28006,28007],{"align":24222},"docker pull",[820,28009,28010],{"align":24222},"从 Docker 仓库拉取镜像。",[820,28012,28013],{"align":24222},"docker pull ubuntu",[774,28015,28016,28019,28022],{},[820,28017,28018],{"align":24222},"docker push",[820,28020,28021],{"align":24222},"将本地镜像推送到 Docker 仓库。",[820,28023,28024],{"align":24222},"docker push myimage",[774,28026,28027,28030,28033],{},[820,28028,28029],{"align":24222},"docker stop",[820,28031,28032],{"align":24222},"停止一个正在运行的容器。",[820,28034,28035],{"align":24222},"docker stop container_id",[774,28037,28038,28041,28044],{},[820,28039,28040],{"align":24222},"docker start",[820,28042,28043],{"align":24222},"启动一个已经存在的容器。",[820,28045,28046],{"align":24222},"docker start container_id",[774,28048,28049,28052,28055],{},[820,28050,28051],{"align":24222},"docker restart",[820,28053,28054],{"align":24222},"重新启动容器。",[820,28056,28057],{"align":24222},"docker restart container_id",[774,28059,28060,28063,28066],{},[820,28061,28062],{"align":24222},"docker ps",[820,28064,28065],{"align":24222},"列出当前正在运行的容器。",[820,28067,28062],{"align":24222},[774,28069,28070,28073,28076],{},[820,28071,28072],{"align":24222},"docker rm",[820,28074,28075],{"align":24222},"删除一个或多个停止的容器。",[820,28077,28078],{"align":24222},"docker rm container_id",[774,28080,28081,28084,28087],{},[820,28082,28083],{"align":24222},"docker exec",[820,28085,28086],{"align":24222},"在一个正在运行的容器中执行命令。",[820,28088,28089],{"align":24222},"docker exec -it container_id bash",[774,28091,28092,28095,28098],{},[820,28093,28094],{"align":24222},"docker logs",[820,28096,28097],{"align":24222},"查看容器的日志输出。",[820,28099,28100],{"align":24222},"docker logs container_id",[774,28102,28103,28106,28109],{},[820,28104,28105],{"align":24222},"docker images",[820,28107,28108],{"align":24222},"列出本地所有镜像。",[820,28110,28105],{"align":24222},[774,28112,28113,28116,28119],{},[820,28114,28115],{"align":24222},"docker rmi",[820,28117,28118],{"align":24222},"删除一个或多个镜像。",[820,28120,28121],{"align":24222},"docker rmi myimage",[774,28123,28124,28127,28130],{},[820,28125,28126],{"align":24222},"docker network",[820,28128,28129],{"align":24222},"管理 Docker 网络。",[820,28131,28132],{"align":24222},"docker network ls",[774,28134,28135,28138,28141],{},[820,28136,28137],{"align":24222},"docker volume",[820,28139,28140],{"align":24222},"管理 Docker 数据卷。",[820,28142,28143],{"align":24222},"docker volume ls",[774,28145,28146,28149,28152],{},[820,28147,28148],{"align":24222},"docker-compose up",[820,28150,28151],{"align":24222},"启动 docker-compose.yml 中定义的所有服务。",[820,28153,28148],{"align":24222},[774,28155,28156,28159,28162],{},[820,28157,28158],{"align":24222},"docker-compose down",[820,28160,28161],{"align":24222},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[820,28163,28158],{"align":24222},[774,28165,28166,28169,28172],{},[820,28167,28168],{"align":24222},"docker info",[820,28170,28171],{"align":24222},"显示 Docker 系统的详细信息。",[820,28173,28168],{"align":24222},[774,28175,28176,28179,28182],{},[820,28177,28178],{"align":24222},"docker stats",[820,28180,28181],{"align":24222},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[820,28183,28178],{"align":24222},[774,28185,28186,28189,28192],{},[820,28187,28188],{"align":24222},"docker inspect",[820,28190,28191],{"align":24222},"查看容器或镜像的详细信息（JSON 格式）。",[820,28193,28194],{"align":24222},"docker inspect container_id",[774,28196,28197,28200,28203],{},[820,28198,28199],{"align":24222},"docker save",[820,28201,28202],{"align":24222},"将一个镜像保存为 tar 文件。",[820,28204,28205],{"align":24222},"docker save -o myimage.tar myimage",[774,28207,28208,28211,28214],{},[820,28209,28210],{"align":24222},"docker load",[820,28212,28213],{"align":24222},"从 tar 文件中加载镜像。",[820,28215,28216],{"align":24222},"docker load -i myimage.tar",[774,28218,28219,28222,28225],{},[820,28220,28221],{"align":24222},"docker tag",[820,28223,28224],{"align":24222},"为镜像添加标签（tag）。",[820,28226,28227],{"align":24222},"docker tag myimage myimage:v1",[774,28229,28230,28233,28236],{},[820,28231,28232],{"align":24222},"docker buildx build",[820,28234,28235],{"align":24222},"使用 Buildx 构建多架构镜像。",[820,28237,28238],{"align":24222},"docker buildx build -t myimage .",[774,28240,28241,28244,28247],{},[820,28242,28243],{"align":24222},"docker buildx create",[820,28245,28246],{"align":24222},"创建一个新的 Buildx 构建实例。",[820,28248,28249],{"align":24222},"docker buildx create –use",[774,28251,28252,28255,28258],{},[820,28253,28254],{"align":24222},"docker buildx ls",[820,28256,28257],{"align":24222},"列出所有可用的 Buildx 构建实例。",[820,28259,28254],{"align":24222},[774,28261,28262,28265,28268],{},[820,28263,28264],{"align":24222},"docker buildx use",[820,28266,28267],{"align":24222},"设置当前的 Buildx 构建实例。",[820,28269,28270],{"align":24222},"docker buildx use mybuilder",[774,28272,28273,28276,28279],{},[820,28274,28275],{"align":24222},"docker buildx bake",[820,28277,28278],{"align":24222},"使用 Bake 文件批量构建镜像。",[820,28280,28281],{"align":24222},"docker buildx bake -f bake.hcl",[774,28283,28284,28287,28290],{},[820,28285,28286],{"align":24222},"docker buildx build –push",[820,28288,28289],{"align":24222},"构建镜像并推送到镜像仓库。",[820,28291,28292],{"align":24222},"docker buildx build –push -t myimage .",[774,28294,28295,28298,28301],{},[820,28296,28297],{"align":24222},"docker buildx build –platform",[820,28299,28300],{"align":24222},"构建镜像并为多个平台生成支持。",[820,28302,28303],{"align":24222},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28305,28306],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28308,28309],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28311,28312],{},"docker images 可以查看已经下载的镜像",[14,28314,28315],{},[420,28316],{"alt":23,"src":28317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28319,28320],{},[780,28321,28322],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28324,28325],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28327,28328],{},"docker container logs 查看容器日志",[14,28330,28331],{},"docker top 查看容器里的进程",[14,28333,28334],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[18,28336,28338],{"className":24308,"code":28337,"language":24310,"meta":23,"style":23},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[25,28339,28340],{"__ignoreMap":23},[28,28341,28342,28345,28348,28351],{"class":30,"line":31},[28,28343,28344],{"class":2453},"如：docker",[28,28346,28347],{"class":735}," cp",[28,28349,28350],{"class":735}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[28,28352,28353],{"class":735}," \u002Fmydata\u002Fnginx\n",[14,28355,28356],{},"docker run时在启动容器的时候会有几个常用的选项：",[1626,28358,28359,28362,28365],{},[591,28360,28361],{},"-d选项：表示后台运行",[591,28363,28364],{},"-P选项：随机端口映射",[591,28366,28367],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[605,28369,28371],{"id":28370},"_53run命令的参数非常重要",[780,28372,28373],{},"5.3.run命令的参数（非常重要）",[768,28375,28376,28389],{},[771,28377,28378],{},[774,28379,28380,28383,28386],{},[777,28381,28382],{"align":24222},"参数\u002F配置",[777,28384,28385],{"align":24222},"功能说明",[777,28387,28388],{"align":24222},"重要性与参考依据",[815,28390,28391,28402,28413,28424,28435,28446,28457,28468,28479,28490,28501,28512,28523,28534,28545],{},[774,28392,28393,28396,28399],{},[820,28394,28395],{"align":24222},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[820,28397,28398],{"align":24222},"指定容器名称，便于后续管理",[820,28400,28401],{"align":24222},"替代随机生成的容器名。",[774,28403,28404,28407,28410],{},[820,28405,28406],{"align":24222},"–gpus all",[820,28408,28409],{"align":24222},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[820,28411,28412],{"align":24222},"用于CUDA加速等GPU依赖任务。",[774,28414,28415,28418,28421],{},[820,28416,28417],{"align":24222},"-e NVIDIA_DRIVER_CAPABILITIES=all",[820,28419,28420],{"align":24222},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[820,28422,28423],{"align":24222},"确保容器内GPU功能完整67。",[774,28425,28426,28429,28432],{},[820,28427,28428],{"align":24222},"-dit",[820,28430,28431],{"align":24222},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[820,28433,28434],{"align":24222},"允许容器在后台运行并支持交互操作。",[774,28436,28437,28440,28443],{},[820,28438,28439],{"align":24222},"–privileged",[820,28441,28442],{"align":24222},"赋予容器完全主机权限（可访问设备、内核模块等）",[820,28444,28445],{"align":24222},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[774,28447,28448,28451,28454],{},[820,28449,28450],{"align":24222},"–net=host",[820,28452,28453],{"align":24222},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[820,28455,28456],{"align":24222},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[774,28458,28459,28462,28465],{},[820,28460,28461],{"align":24222},"–group-add audio–group-add video–group-add dialout",[820,28463,28464],{"align":24222},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[820,28466,28467],{"align":24222},"避免权限问题（如避免无法调用摄像头、麦克风）。",[774,28469,28470,28473,28476],{},[820,28471,28472],{"align":24222},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[820,28474,28475],{"align":24222},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[820,28477,28478],{"align":24222},"支持容器内运行图形界面应用（如OpenCV可视化）。",[774,28480,28481,28484,28487],{},[820,28482,28483],{"align":24222},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[820,28485,28486],{"align":24222},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[820,28488,28489],{"align":24222},"实现容器内图形显示。",[774,28491,28492,28495,28498],{},[820,28493,28494],{"align":24222},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[820,28496,28497],{"align":24222},"挂载X11认证文件（只读）",[820,28499,28500],{"align":24222},"确保容器有权连接宿主机显示服务。",[774,28502,28503,28506,28509],{},[820,28504,28505],{"align":24222},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[820,28507,28508],{"align":24222},"挂载Wayland显示协议相关目录",[820,28510,28511],{"align":24222},"支持Wayland协议的图形显示。",[774,28513,28514,28517,28520],{},[820,28515,28516],{"align":24222},"–ulimit nofile=1024:524288",[820,28518,28519],{"align":24222},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[820,28521,28522],{"align":24222},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[774,28524,28525,28528,28531],{},[820,28526,28527],{"align":24222},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[820,28529,28530],{"align":24222},"挂载宿主机用户目录到容器内同名路径",[820,28532,28533],{"align":24222},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[774,28535,28536,28539,28542],{},[820,28537,28538],{"align":24222},"-w \u002Fhome\u002Ftungchiahui",[820,28540,28541],{"align":24222},"设置容器启动后的默认工作目录",[820,28543,28544],{"align":24222},"直接进入项目路径，方便执行命令2324。",[774,28546,28547,28550,28553],{},[820,28548,28549],{"align":24222},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[820,28551,28552],{"align":24222},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[820,28554,28555],{"align":24222},"提供预配置的深度学习与机器人开发环境。",[14,28557,28558,28559,28561,28562,28565],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[25,28560,25063],{},"加不加",[25,28563,28564],{},"sudo -E","都无所谓。",[14,28567,28568,28569,28571,28572,28574,28575,28578,28579,28581],{},"用户已经被加到docker组了，不用",[25,28570,25063],{},"也行跑，其次，",[25,28573,25063],{},"运行的话，你的",[25,28576,28577],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[25,28580,28577],{},"更不可能变了。",[18,28583,28585],{"className":24308,"code":28584,"language":24310,"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,28586,28587,28600,28610,28620,28632,28639,28646,28653,28663,28672,28681,28695,28707,28719,28728,28738,28747,28762,28795,28822,28833,28840],{"__ignoreMap":23},[28,28588,28589,28591,28593,28595,28598],{"class":30,"line":31},[28,28590,25063],{"class":2453},[28,28592,26806],{"class":735},[28,28594,27716],{"class":735},[28,28596,28597],{"class":38}," --name=ros_opencv_cuda",[28,28599,25165],{"class":38},[28,28601,28602,28605,28608],{"class":30,"line":77},[28,28603,28604],{"class":34},"--gpus ",[28,28606,28607],{"class":735},"all",[28,28609,25165],{"class":38},[28,28611,28612,28615,28618],{"class":30,"line":114},[28,28613,28614],{"class":34},"-e ",[28,28616,28617],{"class":735},"NVIDIA_DRIVER_CAPABILITIES=all",[28,28619,25165],{"class":38},[28,28621,28622,28624,28627,28630],{"class":30,"line":128},[28,28623,28614],{"class":34},[28,28625,28626],{"class":735},"DISPLAY=",[28,28628,28629],{"class":34},"$DISPLAY ",[28,28631,26661],{"class":38},[28,28633,28634,28637],{"class":30,"line":393},[28,28635,28636],{"class":34},"-dit ",[28,28638,26661],{"class":38},[28,28640,28641,28644],{"class":30,"line":409},[28,28642,28643],{"class":34},"--privileged ",[28,28645,26661],{"class":38},[28,28647,28648,28651],{"class":30,"line":1711},[28,28649,28650],{"class":34},"--net=host ",[28,28652,26661],{"class":38},[28,28654,28655,28658,28661],{"class":30,"line":1802},[28,28656,28657],{"class":34},"--group-add ",[28,28659,28660],{"class":735},"audio",[28,28662,25165],{"class":38},[28,28664,28665,28667,28670],{"class":30,"line":1808},[28,28666,28657],{"class":34},[28,28668,28669],{"class":735},"video",[28,28671,25165],{"class":38},[28,28673,28674,28676,28679],{"class":30,"line":1820},[28,28675,28657],{"class":34},[28,28677,28678],{"class":735},"dialout",[28,28680,25165],{"class":38},[28,28682,28683,28685,28688,28690,28693],{"class":30,"line":2102},[28,28684,28614],{"class":34},[28,28686,28687],{"class":735},"XAUTHORITY=",[28,28689,28577],{"class":34},[28,28691,28692],{"class":735},"\u002F.Xauthority",[28,28694,25165],{"class":38},[28,28696,28697,28699,28702,28705],{"class":30,"line":2107},[28,28698,28614],{"class":34},[28,28700,28701],{"class":735},"WAYLAND_DISPLAY=",[28,28703,28704],{"class":34},"$WAYLAND_DISPLAY ",[28,28706,26661],{"class":38},[28,28708,28709,28711,28714,28717],{"class":30,"line":2113},[28,28710,28614],{"class":34},[28,28712,28713],{"class":735},"XDG_RUNTIME_DIR=",[28,28715,28716],{"class":34},"$XDG_RUNTIME_DIR ",[28,28718,26661],{"class":38},[28,28720,28721,28723,28726],{"class":30,"line":2118},[28,28722,28614],{"class":34},[28,28724,28725],{"class":735},"QT_QPA_PLATFORM=xcb",[28,28727,25165],{"class":38},[28,28729,28730,28733,28736],{"class":30,"line":2132},[28,28731,28732],{"class":34},"-v ",[28,28734,28735],{"class":735},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[28,28737,25165],{"class":38},[28,28739,28740,28742,28745],{"class":30,"line":2137},[28,28741,28732],{"class":34},[28,28743,28744],{"class":735},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[28,28746,25165],{"class":38},[28,28748,28749,28752,28755,28757,28760],{"class":30,"line":2143},[28,28750,28751],{"class":34},"-v $HOME",[28,28753,28754],{"class":735},"\u002F.Xauthority:",[28,28756,28577],{"class":34},[28,28758,28759],{"class":735},"\u002F.Xauthority:ro",[28,28761,25165],{"class":38},[28,28763,28764,28766,28769,28771,28774,28777,28779,28782,28784,28786,28788,28790,28793],{"class":30,"line":2164},[28,28765,28732],{"class":34},[28,28767,28768],{"class":735},"\u002Frun\u002Fuser\u002F",[28,28770,25586],{"class":34},[28,28772,28773],{"class":2453},"id",[28,28775,28776],{"class":38}," -u",[28,28778,1054],{"class":34},[28,28780,28781],{"class":735},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[28,28783,25586],{"class":34},[28,28785,28773],{"class":2453},[28,28787,28776],{"class":38},[28,28789,1054],{"class":34},[28,28791,28792],{"class":735},"\u002Fwayland-0",[28,28794,25165],{"class":38},[28,28796,28797,28799,28801,28803,28805,28807,28809,28812,28814,28816,28818,28820],{"class":30,"line":2169},[28,28798,28732],{"class":34},[28,28800,28768],{"class":735},[28,28802,25586],{"class":34},[28,28804,28773],{"class":2453},[28,28806,28776],{"class":38},[28,28808,1054],{"class":34},[28,28810,28811],{"class":735},":\u002Frun\u002Fuser\u002F",[28,28813,25586],{"class":34},[28,28815,28773],{"class":2453},[28,28817,28776],{"class":38},[28,28819,14200],{"class":34},[28,28821,26661],{"class":38},[28,28823,28824,28826,28828,28831],{"class":30,"line":2183},[28,28825,28751],{"class":34},[28,28827,1479],{"class":735},[28,28829,28830],{"class":34},"$HOME ",[28,28832,26661],{"class":38},[28,28834,28835,28838],{"class":30,"line":2188},[28,28836,28837],{"class":34},"-w $HOME ",[28,28839,26661],{"class":38},[28,28841,28842],{"class":30,"line":2217},[28,28843,28844],{"class":34},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28846,9513],{},[588,28848,28849,28857,28860,28863],{},[591,28850,28851,14281,28853,28856],{},[25,28852,28617],{},[25,28854,28855],{},"--gpus all","没有英伟达显卡请注释。",[591,28858,28859],{},"--name后面请自己为容器起名。",[591,28861,28862],{},"最后一行仓库名称请你自己找对应的镜像填上。",[591,28864,28865,28866,28871],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24039,28867,28868],{},[780,28869,28870],{},"请不要加","。",[18,28873,28875],{"className":24308,"code":28874,"language":24310,"meta":23,"style":23},"--ulimit nofile=1024:524288 \\\n",[25,28876,28877],{"__ignoreMap":23},[28,28878,28879,28882,28885],{"class":30,"line":31},[28,28880,28881],{"class":2453},"--ulimit",[28,28883,28884],{"class":735}," nofile=1024:524288",[28,28886,25165],{"class":38},[14,28888,28889,28890,28895],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24039,28891,28892],{},[780,28893,28894],{},"不建议","**.**",[18,28897,28899],{"className":24308,"code":28898,"language":24310,"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,28900,28901,28928,28937],{"__ignoreMap":23},[28,28902,28903,28906,28909,28911,28913,28915,28917,28919,28921,28924,28926],{"class":30,"line":31},[28,28904,28905],{"class":2453},"--user",[28,28907,28908],{"class":34}," $(",[28,28910,28773],{"class":2453},[28,28912,28776],{"class":38},[28,28914,1054],{"class":34},[28,28916,1479],{"class":735},[28,28918,25586],{"class":34},[28,28920,28773],{"class":2453},[28,28922,28923],{"class":38}," -g",[28,28925,14200],{"class":34},[28,28927,26661],{"class":38},[28,28929,28930,28932,28935],{"class":30,"line":77},[28,28931,28732],{"class":34},[28,28933,28934],{"class":735},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[28,28936,25165],{"class":38},[28,28938,28939,28941,28944],{"class":30,"line":114},[28,28940,28732],{"class":34},[28,28942,28943],{"class":735},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[28,28945,25165],{"class":38},[547,28947,28948],{},"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":77,"depth":77,"links":28950},[28951,28952,28953],{"id":27949,"depth":114,"text":27950},{"id":27959,"depth":114,"text":27960},{"id":28370,"depth":114,"text":28373},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27941,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28960,"title":28961,"body":28962,"description":23,"extension":560,"meta":30585,"navigation":562,"path":30586,"seo":30587,"stem":30588,"__hash__":30589},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28963,"toc":30580},[28964,28967,28971,28974,29196,29200,29204,29207,29313,29318,29321,29326,29329,29334,29337,29342,29345,29357,29360,29365,29372,29400,29407,29483,29488,29491,29514,29516,29591,29596,29599,29603,29611,29616,29621,29625,29636,29642,29645,29648,29672,29675,29678,29706,29709,29712,30177,30180,30185,30190,30194,30217,30222,30226,30230,30233,30236,30239,30266,30269,30272,30290,30293,30296,30318,30326,30331,30336,30340,30343,30346,30349,30352,30397,30400,30418,30421,30426,30429,30450,30453,30509,30512,30517,30521,30524,30531,30534,30537,30542,30545,30561,30564,30577],[10,28965,28961],{"id":28966},"_6手动创建docker镜像",[605,28968,28970],{"id":28969},"_61dockerfile","6.1.DockerFile",[14,28972,28973],{},"常用命令：",[768,28975,28976,28987],{},[771,28977,28978],{},[774,28979,28980,28983,28985],{},[777,28981,28982],{"align":24222},"指令",[777,28984,26356],{"align":24222},[777,28986,27978],{"align":24222},[815,28988,28989,28999,29015,29026,29037,29048,29059,29070,29081,29095,29109,29120,29134,29145,29156,29170,29185],{},[774,28990,28991,28993,28996],{},[820,28992,27856],{"align":24222},[820,28994,28995],{"align":24222},"指定基础镜像，是 Dockerfile 的起点",[820,28997,28998],{"align":24222},"FROM ubuntu:22.04",[774,29000,29001,29004,29007],{},[820,29002,29003],{"align":24222},"LABEL",[820,29005,29006],{"align":24222},"添加元数据（如作者、版本等）",[820,29008,29009,29010,29014],{"align":24222},"LABEL maintainer=”",[80,29011,29013],{"href":29012},"mailto:you@example.com","you@example.com","”",[774,29016,29017,29020,29023],{},[820,29018,29019],{"align":24222},"ENV",[820,29021,29022],{"align":24222},"设置环境变量",[820,29024,29025],{"align":24222},"ENV PORT=8080",[774,29027,29028,29031,29034],{},[820,29029,29030],{"align":24222},"ARG",[820,29032,29033],{"align":24222},"构建参数，只在构建期间可用",[820,29035,29036],{"align":24222},"ARG VERSION=1.0",[774,29038,29039,29042,29045],{},[820,29040,29041],{"align":24222},"RUN",[820,29043,29044],{"align":24222},"构建镜像时运行命令",[820,29046,29047],{"align":24222},"RUN apt-get update && apt-get install -y curl",[774,29049,29050,29053,29056],{},[820,29051,29052],{"align":24222},"COPY",[820,29054,29055],{"align":24222},"复制文件到镜像中",[820,29057,29058],{"align":24222},"COPY . \u002Fapp",[774,29060,29061,29064,29067],{},[820,29062,29063],{"align":24222},"ADD",[820,29065,29066],{"align":24222},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[820,29068,29069],{"align":24222},"ADD archive.tar.gz \u002Fdata\u002F",[774,29071,29072,29075,29078],{},[820,29073,29074],{"align":24222},"WORKDIR",[820,29076,29077],{"align":24222},"设置工作目录",[820,29079,29080],{"align":24222},"WORKDIR \u002Fopt",[774,29082,29083,29086,29089],{},[820,29084,29085],{"align":24222},"CMD",[820,29087,29088],{"align":24222},"设置容器启动时默认命令（可被 docker run 覆盖）",[820,29090,29091,29092],{"align":24222},"CMD ",[28,29093,29094],{},"“node”, “index.js”",[774,29096,29097,29100,29103],{},[820,29098,29099],{"align":24222},"ENTRYPOINT",[820,29101,29102],{"align":24222},"设置容器启动时固定命令（通常用于 CLI 工具等）",[820,29104,29105,29106],{"align":24222},"ENTRYPOINT ",[28,29107,29108],{},"“python3”",[774,29110,29111,29114,29117],{},[820,29112,29113],{"align":24222},"EXPOSE",[820,29115,29116],{"align":24222},"声明镜像内服务监听的端口（不会自动映射）",[820,29118,29119],{"align":24222},"EXPOSE 80",[774,29121,29122,29125,29128],{},[820,29123,29124],{"align":24222},"VOLUME",[820,29126,29127],{"align":24222},"声明数据卷挂载点",[820,29129,29130,29131],{"align":24222},"VOLUME ",[28,29132,29133],{},"“\u002Fdata”",[774,29135,29136,29139,29142],{},[820,29137,29138],{"align":24222},"USER",[820,29140,29141],{"align":24222},"设置后续命令执行的用户",[820,29143,29144],{"align":24222},"USER appuser",[774,29146,29147,29150,29153],{},[820,29148,29149],{"align":24222},"ONBUILD",[820,29151,29152],{"align":24222},"当镜像作为其他镜像基础镜像时触发的构建指令",[820,29154,29155],{"align":24222},"ONBUILD COPY . \u002Fsrc",[774,29157,29158,29161,29164],{},[820,29159,29160],{"align":24222},"SHELL",[820,29162,29163],{"align":24222},"更改默认 shell，比如将 sh -c 改为 bash -c",[820,29165,29166,29167],{"align":24222},"SHELL ",[28,29168,29169],{},"“\u002Fbin\u002Fbash”, “-c”",[774,29171,29172,29175,29178],{},[820,29173,29174],{"align":24222},"HEALTHCHECK",[820,29176,29177],{"align":24222},"定义容器运行时的健康检查命令",[820,29179,29180,29181],{"align":24222},"`HEALTHCHECK CMD curl –fail ",[80,29182,29183],{"href":29183,"rel":29184},"http:\u002F\u002Flocalhost:8080",[24351],[774,29186,29187,29190,29193],{},[820,29188,29189],{"align":24222},"STOPSIGNAL",[820,29191,29192],{"align":24222},"容器停止时发送的信号",[820,29194,29195],{"align":24222},"STOPSIGNAL SIGKILL",[605,29197,29199],{"id":29198},"_62自己创建容器","6.2.自己创建容器",[22484,29201,29203],{"id":29202},"_621手动创建","6.2.1.手动创建",[14,29205,29206],{},"在x86电脑上编译x86的：",[18,29208,29210],{"className":24308,"code":29209,"language":24310,"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,29211,29212,29228,29232,29245,29249,29262,29266,29279,29283,29296,29300],{"__ignoreMap":23},[28,29213,29214,29216,29219,29222,29225],{"class":30,"line":31},[28,29215,27039],{"class":2453},[28,29217,29218],{"class":735}," build",[28,29220,29221],{"class":38}," -t",[28,29223,29224],{"class":735}," ros-melodic-cuda118-cudnn8-bionic:latest",[28,29226,29227],{"class":735}," .\n",[28,29229,29230],{"class":30,"line":77},[28,29231,2890],{"emptyLinePlaceholder":562},[28,29233,29234,29236,29238,29240,29243],{"class":30,"line":114},[28,29235,27039],{"class":2453},[28,29237,29218],{"class":735},[28,29239,29221],{"class":38},[28,29241,29242],{"class":735}," ros-noetic-focal:latest",[28,29244,29227],{"class":735},[28,29246,29247],{"class":30,"line":128},[28,29248,2890],{"emptyLinePlaceholder":562},[28,29250,29251,29253,29255,29257,29260],{"class":30,"line":393},[28,29252,27039],{"class":2453},[28,29254,29218],{"class":735},[28,29256,29221],{"class":38},[28,29258,29259],{"class":735}," ros-humble-jammy:latest",[28,29261,29227],{"class":735},[28,29263,29264],{"class":30,"line":409},[28,29265,2890],{"emptyLinePlaceholder":562},[28,29267,29268,29270,29272,29274,29277],{"class":30,"line":1711},[28,29269,27039],{"class":2453},[28,29271,29218],{"class":735},[28,29273,29221],{"class":38},[28,29275,29276],{"class":735}," ros-jazzy-noble:latest",[28,29278,29227],{"class":735},[28,29280,29281],{"class":30,"line":1802},[28,29282,2890],{"emptyLinePlaceholder":562},[28,29284,29285,29287,29289,29291,29294],{"class":30,"line":1808},[28,29286,27039],{"class":2453},[28,29288,29218],{"class":735},[28,29290,29221],{"class":38},[28,29292,29293],{"class":735}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[28,29295,29227],{"class":735},[28,29297,29298],{"class":30,"line":1820},[28,29299,2890],{"emptyLinePlaceholder":562},[28,29301,29302,29304,29306,29308,29311],{"class":30,"line":2102},[28,29303,27039],{"class":2453},[28,29305,29218],{"class":735},[28,29307,29221],{"class":38},[28,29309,29310],{"class":735}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[28,29312,29227],{"class":735},[14,29314,29315],{},[420,29316],{"alt":23,"src":29317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29319,29320],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29322,29323],{},[420,29324],{"alt":23,"src":29325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29327,29328],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[588,29330,29331],{},[591,29332,29333],{},"创建 Docker Hub 账户",[14,29335,29336],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[588,29338,29339],{"start":77},[591,29340,29341],{},"登录 Docker Hub",[14,29343,29344],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[18,29346,29348],{"className":24308,"code":29347,"language":24310,"meta":23,"style":23},"docker login\n",[25,29349,29350],{"__ignoreMap":23},[28,29351,29352,29354],{"class":30,"line":31},[28,29353,27039],{"class":2453},[28,29355,29356],{"class":735}," login\n",[14,29358,29359],{},"输入你的 Docker Hub 用户名和密码进行验证。",[588,29361,29362],{},[591,29363,29364],{},"为你的镜像打标签",[14,29366,29367,29368,29371],{},"Docker Hub 使用 ",[25,29369,29370],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[18,29373,29375],{"className":24308,"code":29374,"language":24310,"meta":23,"style":23},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[25,29376,29377],{"__ignoreMap":23},[28,29378,29379,29381,29384,29386,29389,29392,29395,29397],{"class":30,"line":31},[28,29380,27039],{"class":2453},[28,29382,29383],{"class":735}," tag",[28,29385,29276],{"class":735},[28,29387,29388],{"class":42}," \u003C",[28,29390,29391],{"class":735},"你的用户",[28,29393,29394],{"class":34},"名",[28,29396,1579],{"class":42},[28,29398,29399],{"class":735},"\u002Fros-jazzy-noble:latest\n",[14,29401,29402,29403,29406],{},"例如，如果你的 Docker Hub 用户名是 ",[25,29404,29405],{},"tungchiahui","，你应该执行：",[18,29408,29410],{"className":24308,"code":29409,"language":24310,"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,29411,29412,29423,29427,29438,29442,29453,29457,29468,29472],{"__ignoreMap":23},[28,29413,29414,29416,29418,29420],{"class":30,"line":31},[28,29415,27039],{"class":2453},[28,29417,29383],{"class":735},[28,29419,29242],{"class":735},[28,29421,29422],{"class":735}," tungchiahui\u002Fros-noetic-focal:latest\n",[28,29424,29425],{"class":30,"line":77},[28,29426,2890],{"emptyLinePlaceholder":562},[28,29428,29429,29431,29433,29435],{"class":30,"line":114},[28,29430,27039],{"class":2453},[28,29432,29383],{"class":735},[28,29434,29259],{"class":735},[28,29436,29437],{"class":735}," tungchiahui\u002Fros-humble-jammy:latest\n",[28,29439,29440],{"class":30,"line":128},[28,29441,2890],{"emptyLinePlaceholder":562},[28,29443,29444,29446,29448,29450],{"class":30,"line":393},[28,29445,27039],{"class":2453},[28,29447,29383],{"class":735},[28,29449,29276],{"class":735},[28,29451,29452],{"class":735}," tungchiahui\u002Fros-jazzy-noble:latest\n",[28,29454,29455],{"class":30,"line":409},[28,29456,2890],{"emptyLinePlaceholder":562},[28,29458,29459,29461,29463,29465],{"class":30,"line":1711},[28,29460,27039],{"class":2453},[28,29462,29383],{"class":735},[28,29464,29293],{"class":735},[28,29466,29467],{"class":735}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29469,29470],{"class":30,"line":1802},[28,29471,2890],{"emptyLinePlaceholder":562},[28,29473,29474,29476,29478,29480],{"class":30,"line":1808},[28,29475,27039],{"class":2453},[28,29477,29383],{"class":735},[28,29479,29310],{"class":735},[28,29481,29482],{"class":735}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[588,29484,29485],{"start":77},[591,29486,29487],{},"推送镜像到 Docker Hub",[14,29489,29490],{},"使用以下命令将镜像推送到 Docker Hub：",[18,29492,29494],{"className":24308,"code":29493,"language":24310,"meta":23,"style":23},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[25,29495,29496],{"__ignoreMap":23},[28,29497,29498,29500,29503,29505,29507,29509,29511],{"class":30,"line":31},[28,29499,27039],{"class":2453},[28,29501,29502],{"class":735}," push",[28,29504,29388],{"class":42},[28,29506,29391],{"class":735},[28,29508,29394],{"class":34},[28,29510,1579],{"class":42},[28,29512,29513],{"class":735},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29515,15119],{},[18,29517,29519],{"className":24308,"code":29518,"language":24310,"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,29520,29521,29529,29533,29541,29545,29553,29557,29566,29570,29578,29582],{"__ignoreMap":23},[28,29522,29523,29525,29527],{"class":30,"line":31},[28,29524,27039],{"class":2453},[28,29526,29502],{"class":735},[28,29528,29422],{"class":735},[28,29530,29531],{"class":30,"line":77},[28,29532,2890],{"emptyLinePlaceholder":562},[28,29534,29535,29537,29539],{"class":30,"line":114},[28,29536,27039],{"class":2453},[28,29538,29502],{"class":735},[28,29540,29437],{"class":735},[28,29542,29543],{"class":30,"line":128},[28,29544,2890],{"emptyLinePlaceholder":562},[28,29546,29547,29549,29551],{"class":30,"line":393},[28,29548,27039],{"class":2453},[28,29550,29502],{"class":735},[28,29552,29452],{"class":735},[28,29554,29555],{"class":30,"line":409},[28,29556,2890],{"emptyLinePlaceholder":562},[28,29558,29559,29561,29563],{"class":30,"line":1711},[28,29560,27039],{"class":2453},[28,29562,29502],{"class":735},[28,29564,29565],{"class":735}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29567,29568],{"class":30,"line":1802},[28,29569,2890],{"emptyLinePlaceholder":562},[28,29571,29572,29574,29576],{"class":30,"line":1808},[28,29573,27039],{"class":2453},[28,29575,29502],{"class":735},[28,29577,29482],{"class":735},[28,29579,29580],{"class":30,"line":1820},[28,29581,2890],{"emptyLinePlaceholder":562},[28,29583,29584,29586,29588],{"class":30,"line":2102},[28,29585,27039],{"class":2453},[28,29587,29502],{"class":735},[28,29589,29590],{"class":735}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[588,29592,29593],{"start":114},[591,29594,29595],{},"验证推送成功",[14,29597,29598],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29600,29601],{},[780,29602,4272],{},[1626,29604,29605,29608],{},[591,29606,29607],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[591,29609,29610],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29612,29613],{},[420,29614],{"alt":23,"src":29615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29617,29618],{},[420,29619],{"alt":23,"src":29620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22484,29622,29624],{"id":29623},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29626,29627,29628,29631,29632,29635],{},"如果您想在 ",[780,29629,29630],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[780,29633,29634],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29637,29638,29639],{},"1. ",[780,29640,29641],{},"启用 Docker 跨平台构建",[14,29643,29644],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29646,29647],{},"第一步：启用 buildx（只需执行一次）",[18,29649,29651],{"className":24308,"code":29650,"language":24310,"meta":23,"style":23},"docker buildx create --name multiarch_builder --use\n",[25,29652,29653],{"__ignoreMap":23},[28,29654,29655,29657,29660,29663,29666,29669],{"class":30,"line":31},[28,29656,27039],{"class":2453},[28,29658,29659],{"class":735}," buildx",[28,29661,29662],{"class":735}," create",[28,29664,29665],{"class":38}," --name",[28,29667,29668],{"class":735}," multiarch_builder",[28,29670,29671],{"class":38}," --use\n",[14,29673,29674],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29676,29677],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[18,29679,29681],{"className":24308,"code":29680,"language":24310,"meta":23,"style":23},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[25,29682,29683],{"__ignoreMap":23},[28,29684,29685,29687,29689,29691,29694,29697,29700,29703],{"class":30,"line":31},[28,29686,27039],{"class":2453},[28,29688,27716],{"class":735},[28,29690,27719],{"class":38},[28,29692,29693],{"class":38}," --privileged",[28,29695,29696],{"class":735}," multiarch\u002Fqemu-user-static",[28,29698,29699],{"class":38}," --reset",[28,29701,29702],{"class":38}," -p",[28,29704,29705],{"class":735}," yes\n",[14,29707,29708],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29710,29711],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[18,29713,29715],{"className":24308,"code":29714,"language":24310,"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,29716,29717,29759,29763,29768,29778,29788,29797,29803,29807,29811,29821,29829,29838,29844,29848,29852,29862,29870,29879,29885,29889,29893,29903,29911,29920,29926,29930,29934,29944,29952,29961,29967,29971,29975,29985,29993,30002,30008,30012,30016,30026,30034,30043,30049,30053,30057,30067,30075,30084,30090,30094,30098,30108,30116,30125,30131,30135,30139,30150,30158,30167,30173],{"__ignoreMap":23},[28,29718,29719,29721,29723,29725,29728,29731,29733,29735,29738,29740,29742,29744,29746,29749,29752,29754,29757],{"class":30,"line":31},[28,29720,27039],{"class":2453},[28,29722,29659],{"class":735},[28,29724,29218],{"class":735},[28,29726,29727],{"class":38}," --platform",[28,29729,29730],{"class":735}," linux\u002Famd64,linux\u002Farm64",[28,29732,29221],{"class":38},[28,29734,29388],{"class":42},[28,29736,29737],{"class":735},"你的镜像",[28,29739,29394],{"class":34},[28,29741,1579],{"class":42},[28,29743,1479],{"class":735},[28,29745,1529],{"class":42},[28,29747,29748],{"class":735},"标",[28,29750,29751],{"class":34},"签",[28,29753,1579],{"class":42},[28,29755,29756],{"class":38}," --push",[28,29758,29227],{"class":735},[28,29760,29761],{"class":30,"line":77},[28,29762,2890],{"emptyLinePlaceholder":562},[28,29764,29765],{"class":30,"line":114},[28,29766,29767],{"class":73},"# 例子：\n",[28,29769,29770,29772,29774,29776],{"class":30,"line":128},[28,29771,27039],{"class":2453},[28,29773,29659],{"class":735},[28,29775,29218],{"class":735},[28,29777,25165],{"class":38},[28,29779,29780,29783,29786],{"class":30,"line":393},[28,29781,29782],{"class":34},"--platform ",[28,29784,29785],{"class":735},"linux\u002Famd64,linux\u002Farm64",[28,29787,25165],{"class":38},[28,29789,29790,29792,29795],{"class":30,"line":409},[28,29791,29221],{"class":38},[28,29793,29794],{"class":735}," tungchiahui\u002Fros:noetic-focal",[28,29796,25165],{"class":38},[28,29798,29799,29801],{"class":30,"line":1711},[28,29800,29756],{"class":38},[28,29802,25165],{"class":38},[28,29804,29805],{"class":30,"line":1802},[28,29806,29227],{"class":735},[28,29808,29809],{"class":30,"line":1808},[28,29810,2890],{"emptyLinePlaceholder":562},[28,29812,29813,29815,29817,29819],{"class":30,"line":1820},[28,29814,27039],{"class":2453},[28,29816,29659],{"class":735},[28,29818,29218],{"class":735},[28,29820,25165],{"class":38},[28,29822,29823,29825,29827],{"class":30,"line":2102},[28,29824,29782],{"class":34},[28,29826,29785],{"class":735},[28,29828,25165],{"class":38},[28,29830,29831,29833,29836],{"class":30,"line":2107},[28,29832,29221],{"class":38},[28,29834,29835],{"class":735}," tungchiahui\u002Fros:humble-jammy",[28,29837,25165],{"class":38},[28,29839,29840,29842],{"class":30,"line":2113},[28,29841,29756],{"class":38},[28,29843,25165],{"class":38},[28,29845,29846],{"class":30,"line":2118},[28,29847,29227],{"class":735},[28,29849,29850],{"class":30,"line":2132},[28,29851,2890],{"emptyLinePlaceholder":562},[28,29853,29854,29856,29858,29860],{"class":30,"line":2137},[28,29855,27039],{"class":2453},[28,29857,29659],{"class":735},[28,29859,29218],{"class":735},[28,29861,25165],{"class":38},[28,29863,29864,29866,29868],{"class":30,"line":2143},[28,29865,29782],{"class":34},[28,29867,29785],{"class":735},[28,29869,25165],{"class":38},[28,29871,29872,29874,29877],{"class":30,"line":2164},[28,29873,29221],{"class":38},[28,29875,29876],{"class":735}," tungchiahui\u002Fros:jazzy-noble",[28,29878,25165],{"class":38},[28,29880,29881,29883],{"class":30,"line":2169},[28,29882,29756],{"class":38},[28,29884,25165],{"class":38},[28,29886,29887],{"class":30,"line":2183},[28,29888,29227],{"class":735},[28,29890,29891],{"class":30,"line":2188},[28,29892,2890],{"emptyLinePlaceholder":562},[28,29894,29895,29897,29899,29901],{"class":30,"line":2217},[28,29896,26806],{"class":2453},[28,29898,29659],{"class":735},[28,29900,29218],{"class":735},[28,29902,25165],{"class":38},[28,29904,29905,29907,29909],{"class":30,"line":2222},[28,29906,29782],{"class":34},[28,29908,29785],{"class":735},[28,29910,25165],{"class":38},[28,29912,29913,29915,29918],{"class":30,"line":2239},[28,29914,29221],{"class":38},[28,29916,29917],{"class":735}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[28,29919,25165],{"class":38},[28,29921,29922,29924],{"class":30,"line":2244},[28,29923,29756],{"class":38},[28,29925,25165],{"class":38},[28,29927,29928],{"class":30,"line":2249},[28,29929,29227],{"class":735},[28,29931,29932],{"class":30,"line":2254},[28,29933,2890],{"emptyLinePlaceholder":562},[28,29935,29936,29938,29940,29942],{"class":30,"line":2268},[28,29937,27039],{"class":2453},[28,29939,29659],{"class":735},[28,29941,29218],{"class":735},[28,29943,25165],{"class":38},[28,29945,29946,29948,29950],{"class":30,"line":2273},[28,29947,29782],{"class":34},[28,29949,29785],{"class":735},[28,29951,25165],{"class":38},[28,29953,29954,29956,29959],{"class":30,"line":3067},[28,29955,29221],{"class":38},[28,29957,29958],{"class":735}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[28,29960,25165],{"class":38},[28,29962,29963,29965],{"class":30,"line":3081},[28,29964,29756],{"class":38},[28,29966,25165],{"class":38},[28,29968,29969],{"class":30,"line":3089},[28,29970,29227],{"class":735},[28,29972,29973],{"class":30,"line":3094},[28,29974,2890],{"emptyLinePlaceholder":562},[28,29976,29977,29979,29981,29983],{"class":30,"line":3100},[28,29978,26806],{"class":2453},[28,29980,29659],{"class":735},[28,29982,29218],{"class":735},[28,29984,25165],{"class":38},[28,29986,29987,29989,29991],{"class":30,"line":3106},[28,29988,29782],{"class":34},[28,29990,29785],{"class":735},[28,29992,25165],{"class":38},[28,29994,29995,29997,30000],{"class":30,"line":3111},[28,29996,29221],{"class":38},[28,29998,29999],{"class":735}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[28,30001,25165],{"class":38},[28,30003,30004,30006],{"class":30,"line":8436},[28,30005,29756],{"class":38},[28,30007,25165],{"class":38},[28,30009,30010],{"class":30,"line":8460},[28,30011,29227],{"class":735},[28,30013,30014],{"class":30,"line":8465},[28,30015,2890],{"emptyLinePlaceholder":562},[28,30017,30018,30020,30022,30024],{"class":30,"line":8471},[28,30019,27039],{"class":2453},[28,30021,29659],{"class":735},[28,30023,29218],{"class":735},[28,30025,25165],{"class":38},[28,30027,30028,30030,30032],{"class":30,"line":8498},[28,30029,29782],{"class":34},[28,30031,29785],{"class":735},[28,30033,25165],{"class":38},[28,30035,30036,30038,30041],{"class":30,"line":8503},[28,30037,29221],{"class":38},[28,30039,30040],{"class":735}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[28,30042,25165],{"class":38},[28,30044,30045,30047],{"class":30,"line":8509},[28,30046,29756],{"class":38},[28,30048,25165],{"class":38},[28,30050,30051],{"class":30,"line":8521},[28,30052,29227],{"class":735},[28,30054,30055],{"class":30,"line":8533},[28,30056,2890],{"emptyLinePlaceholder":562},[28,30058,30059,30061,30063,30065],{"class":30,"line":8545},[28,30060,27039],{"class":2453},[28,30062,29659],{"class":735},[28,30064,29218],{"class":735},[28,30066,25165],{"class":38},[28,30068,30069,30071,30073],{"class":30,"line":10202},[28,30070,29782],{"class":34},[28,30072,29785],{"class":735},[28,30074,25165],{"class":38},[28,30076,30077,30079,30082],{"class":30,"line":10227},[28,30078,29221],{"class":38},[28,30080,30081],{"class":735}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,30083,25165],{"class":38},[28,30085,30086,30088],{"class":30,"line":10250},[28,30087,29756],{"class":38},[28,30089,25165],{"class":38},[28,30091,30092],{"class":30,"line":10274},[28,30093,29227],{"class":735},[28,30095,30096],{"class":30,"line":10279},[28,30097,2890],{"emptyLinePlaceholder":562},[28,30099,30100,30102,30104,30106],{"class":30,"line":10284},[28,30101,26806],{"class":2453},[28,30103,29659],{"class":735},[28,30105,29218],{"class":735},[28,30107,25165],{"class":38},[28,30109,30110,30112,30114],{"class":30,"line":10289},[28,30111,29782],{"class":34},[28,30113,29785],{"class":735},[28,30115,25165],{"class":38},[28,30117,30118,30120,30123],{"class":30,"line":10298},[28,30119,29221],{"class":38},[28,30121,30122],{"class":735}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[28,30124,25165],{"class":38},[28,30126,30127,30129],{"class":30,"line":10303},[28,30128,29756],{"class":38},[28,30130,25165],{"class":38},[28,30132,30133],{"class":30,"line":10309},[28,30134,29227],{"class":735},[28,30136,30137],{"class":30,"line":10330},[28,30138,2890],{"emptyLinePlaceholder":562},[28,30140,30141,30144,30146,30148],{"class":30,"line":10336},[28,30142,30143],{"class":2453},"  docker",[28,30145,29659],{"class":735},[28,30147,29218],{"class":735},[28,30149,25165],{"class":38},[28,30151,30152,30154,30156],{"class":30,"line":10350},[28,30153,29782],{"class":34},[28,30155,29785],{"class":735},[28,30157,25165],{"class":38},[28,30159,30160,30162,30165],{"class":30,"line":10356},[28,30161,29221],{"class":38},[28,30163,30164],{"class":735}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,30166,25165],{"class":38},[28,30168,30169,30171],{"class":30,"line":10383},[28,30170,29756],{"class":38},[28,30172,25165],{"class":38},[28,30174,30175],{"class":30,"line":10392},[28,30176,29227],{"class":735},[14,30178,30179],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30181,30182],{},[420,30183],{"alt":23,"src":30184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30186,30187],{},[420,30188],{"alt":23,"src":30189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22484,30191,30193],{"id":30192},"_623清除构建缓存","6.2.3.清除构建缓存",[18,30195,30197],{"className":24308,"code":30196,"language":24310,"meta":23,"style":23},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[25,30198,30199,30204],{"__ignoreMap":23},[28,30200,30201],{"class":30,"line":31},[28,30202,30203],{"class":73},"# 清理BuildKit构建缓存\n",[28,30205,30206,30208,30211,30214],{"class":30,"line":77},[28,30207,27039],{"class":2453},[28,30209,30210],{"class":735}," builder",[28,30212,30213],{"class":735}," prune",[28,30215,30216],{"class":38}," -f\n",[14,30218,30219],{},[420,30220],{"alt":23,"src":30221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[605,30223,30225],{"id":30224},"_63补充","6.3.补充",[22484,30227,30229],{"id":30228},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30231,30232],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30234,30235],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30237,30238],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[18,30240,30242],{"className":24308,"code":30241,"language":24310,"meta":23,"style":23},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[25,30243,30244,30251],{"__ignoreMap":23},[28,30245,30246,30248],{"class":30,"line":31},[28,30247,27856],{"class":2453},[28,30249,30250],{"class":735}," nginx\n",[28,30252,30253,30255,30258,30261,30263],{"class":30,"line":77},[28,30254,29041],{"class":2453},[28,30256,30257],{"class":735}," echo",[28,30259,30260],{"class":735}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[28,30262,26708],{"class":42},[28,30264,30265],{"class":735}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30267,30268],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30270,30271],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[18,30273,30275],{"className":24308,"code":30274,"language":24310,"meta":23,"style":23},"docker build -t nginx:tuling .\n",[25,30276,30277],{"__ignoreMap":23},[28,30278,30279,30281,30283,30285,30288],{"class":30,"line":31},[28,30280,27039],{"class":2453},[28,30282,29218],{"class":735},[28,30284,29221],{"class":38},[28,30286,30287],{"class":735}," nginx:tuling",[28,30289,29227],{"class":735},[14,30291,30292],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30294,30295],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[18,30297,30299],{"className":24308,"code":30298,"language":24310,"meta":23,"style":23},"docker run -d -p 92:80 nginx:tuling\n",[25,30300,30301],{"__ignoreMap":23},[28,30302,30303,30305,30307,30310,30312,30315],{"class":30,"line":31},[28,30304,27039],{"class":2453},[28,30306,27716],{"class":735},[28,30308,30309],{"class":38}," -d",[28,30311,29702],{"class":38},[28,30313,30314],{"class":735}," 92:80",[28,30316,30317],{"class":735}," nginx:tuling\n",[14,30319,30320,30321],{},"4、访问 ",[80,30322,30325],{"href":30323,"rel":30324},"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",[24351],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30327,30328],{},[420,30329],{"alt":23,"src":30330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30332,30333],{},[420,30334],{"alt":23,"src":30335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22484,30337,30339],{"id":30338},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30341,30342],{},"只需要知道大体流程即可",[14,30344,30345],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30347,30348],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30350,30351],{},"2、在Dockerfile中添加以下内容",[18,30353,30355],{"className":26577,"code":30354,"language":26579,"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,30356,30357,30362,30367,30372,30377,30382,30387,30392],{"__ignoreMap":23},[28,30358,30359],{"class":30,"line":31},[28,30360,30361],{},"# 基于哪个镜像\n",[28,30363,30364],{"class":30,"line":77},[28,30365,30366],{},"From java:8\n",[28,30368,30369],{"class":30,"line":114},[28,30370,30371],{},"# 复制文件到容器\n",[28,30373,30374],{"class":30,"line":128},[28,30375,30376],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[28,30378,30379],{"class":30,"line":393},[28,30380,30381],{},"# 声明需要暴露的端口\n",[28,30383,30384],{"class":30,"line":409},[28,30385,30386],{},"EXPOSE 8877\n",[28,30388,30389],{"class":30,"line":1711},[28,30390,30391],{},"# 配置容器启动后执行的命令\n",[28,30393,30394],{"class":30,"line":1802},[28,30395,30396],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30398,30399],{},"3、使用docker build命令构建镜像",[18,30401,30403],{"className":24308,"code":30402,"language":24310,"meta":23,"style":23},"docker build -t tulingmall-member:0.0.5 .\n",[25,30404,30405],{"__ignoreMap":23},[28,30406,30407,30409,30411,30413,30416],{"class":30,"line":31},[28,30408,27039],{"class":2453},[28,30410,29218],{"class":735},[28,30412,29221],{"class":38},[28,30414,30415],{"class":735}," tulingmall-member:0.0.5",[28,30417,29227],{"class":735},[14,30419,30420],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30422,30423],{},[420,30424],{"alt":23,"src":30425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30427,30428],{},"4、启动镜像，加-d可在后台启动",[18,30430,30432],{"className":24308,"code":30431,"language":24310,"meta":23,"style":23},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[25,30433,30434],{"__ignoreMap":23},[28,30435,30436,30438,30440,30442,30444,30447],{"class":30,"line":31},[28,30437,27039],{"class":2453},[28,30439,27716],{"class":735},[28,30441,30309],{"class":38},[28,30443,29702],{"class":38},[28,30445,30446],{"class":735}," 8877:8877",[28,30448,30449],{"class":735}," tulingmall-member:0.0.5\n",[14,30451,30452],{},"加上JVM参数：",[18,30454,30456],{"className":24308,"code":30455,"language":24310,"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,30457,30458,30463,30478,30488,30497,30504],{"__ignoreMap":23},[28,30459,30460],{"class":30,"line":31},[28,30461,30462],{"class":73},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[28,30464,30465,30467,30469,30472,30474,30476],{"class":30,"line":77},[28,30466,27039],{"class":2453},[28,30468,27716],{"class":735},[28,30470,30471],{"class":38},"  -d",[28,30473,29702],{"class":38},[28,30475,30446],{"class":735},[28,30477,25165],{"class":38},[28,30479,30480,30482,30485],{"class":30,"line":114},[28,30481,28614],{"class":34},[28,30483,30484],{"class":735},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[28,30486,30487],{"class":38},"  \\\n",[28,30489,30490,30492,30495],{"class":30,"line":128},[28,30491,28614],{"class":34},[28,30493,30494],{"class":735},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[28,30496,30487],{"class":38},[28,30498,30499,30502],{"class":30,"line":393},[28,30500,30501],{"class":34},"--cap-add=SYS_PTRACE  ",[28,30503,26661],{"class":38},[28,30505,30506],{"class":30,"line":409},[28,30507,30508],{"class":34},"tulingmall-member:0.0.5\n",[14,30510,30511],{},"5、访问会员服务接口",[14,30513,30514],{},[420,30515],{"alt":23,"src":30516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22484,30518,30520],{"id":30519},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30522,30523],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30525,30526,30527],{},"阿里云docker镜像仓库：",[80,30528,30529],{"href":30529,"rel":30530},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24351],[14,30532,30533],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30535,30536],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30538,30539],{},[420,30540],{"alt":23,"src":30541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30543,30544],{},"要把镜像推送到镜像仓库",[18,30546,30548],{"className":24308,"code":30547,"language":24310,"meta":23,"style":23},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30549,30550],{"__ignoreMap":23},[28,30551,30552,30554,30556,30558],{"class":30,"line":31},[28,30553,27039],{"class":2453},[28,30555,29383],{"class":735},[28,30557,30415],{"class":735},[28,30559,30560],{"class":735}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30562,30563],{},"最后将镜像推送到远程仓库",[18,30565,30567],{"className":24308,"code":30566,"language":24310,"meta":23,"style":23},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30568,30569],{"__ignoreMap":23},[28,30570,30571,30573,30575],{"class":30,"line":31},[28,30572,27039],{"class":2453},[28,30574,29502],{"class":735},[28,30576,30560],{"class":735},[547,30578,30579],{},"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":77,"depth":77,"links":30581},[30582,30583,30584],{"id":28969,"depth":114,"text":28970},{"id":29198,"depth":114,"text":29199},{"id":30224,"depth":114,"text":30225},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28961,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30591,"title":30592,"body":30593,"description":23,"extension":560,"meta":30736,"navigation":562,"path":30737,"seo":30738,"stem":30739,"__hash__":30740},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30594,"toc":30734},[30595,30598,30603,30608,30611,30616,30621,30624,30629,30634,30637,30642,30645,30648,30651,30654,30657,30660,30680,30702,30705,30708,30728,30731],[10,30596,30592],{"id":30597},"_7vscode远程开发",[588,30599,30600],{},[591,30601,30602],{},"插件1：微软Docker工具",[14,30604,30605],{},[420,30606],{"alt":23,"src":30607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30609,30610],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30612,30613],{},[420,30614],{"alt":23,"src":30615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[588,30617,30618],{"start":77},[591,30619,30620],{},"插件2：微软Docker远程开发工具",[14,30622,30623],{},"下面这是远程开发的插件。",[14,30625,30626],{},[420,30627],{"alt":23,"src":30628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30630,30631],{},[420,30632],{"alt":23,"src":30633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30635,30636],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30638,30639],{},[420,30640],{"alt":23,"src":30641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30643,30644],{},"安装完拓展之后，vscode进行链接：",[14,30646,30647],{},"1.按ctrl+shift+p",[14,30649,30650],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30652,30653],{},"3.选择目前运行的容器",[14,30655,30656],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30658,30659],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[18,30661,30663],{"className":24308,"code":30662,"language":24310,"meta":23,"style":23},"docker run -v 主机目录:容器目录 image-name\n",[25,30664,30665],{"__ignoreMap":23},[28,30666,30667,30669,30671,30674,30677],{"class":30,"line":31},[28,30668,27039],{"class":2453},[28,30670,27716],{"class":735},[28,30672,30673],{"class":38}," -v",[28,30675,30676],{"class":735}," 主机目录:容器目录",[28,30678,30679],{"class":735}," image-name\n",[18,30681,30683],{"className":24308,"code":30682,"language":24310,"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,30684,30685],{"__ignoreMap":23},[28,30686,30687,30689,30691,30694,30696,30699],{"class":30,"line":31},[28,30688,27039],{"class":2453},[28,30690,27716],{"class":735},[28,30692,30693],{"class":38}," -it",[28,30695,30673],{"class":38},[28,30697,30698],{"class":735}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[28,30700,30701],{"class":735}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30703,30704],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30706,30707],{},"查看挂载情况：",[18,30709,30711],{"className":24308,"code":30710,"language":24310,"meta":23,"style":23},"mount | grep -i project\n",[25,30712,30713],{"__ignoreMap":23},[28,30714,30715,30718,30720,30723,30725],{"class":30,"line":31},[28,30716,30717],{"class":2453},"mount",[28,30719,25596],{"class":42},[28,30721,30722],{"class":2453}," grep",[28,30724,26916],{"class":38},[28,30726,30727],{"class":735}," project\n",[14,30729,30730],{},"也可以通过ls来进行查看",[547,30732,30733],{},"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":77,"depth":77,"links":30735},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30592,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30742,"title":30743,"body":30744,"description":559,"extension":560,"meta":30748,"navigation":562,"path":30750,"seo":30751,"stem":30752,"__hash__":30753},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30745,"toc":30746},[],{"title":23,"searchDepth":77,"depth":77,"links":30747},[],{"category":30749},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30743,"description":559},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30755,"title":30756,"body":30757,"description":559,"extension":560,"meta":30761,"navigation":562,"path":30762,"seo":30763,"stem":30764,"__hash__":30765},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30758,"toc":30759},[],{"title":23,"searchDepth":77,"depth":77,"links":30760},[],{"category":30749},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30756,"description":559},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30767,"title":30768,"body":30769,"description":559,"extension":560,"meta":31059,"navigation":562,"path":31060,"seo":31061,"stem":31062,"__hash__":31063},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30770,"toc":31057},[30771,30774,30782,30797,30802,30853,30856,30862,31046,31051,31054],[10,30772,30768],{"id":30773},"_1验证深度学习环境",[14,30775,30776,30777],{},"关于环境的安装，看",[80,30778,30781],{"href":30779,"rel":30780},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24351],"Pytorch-->深度学习",[14,30783,30784,30785,30788,30789,30792,30793,30796],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[25,30786,30787],{},"pytorch-cuda=12.4"," 是一个“ ",[780,30790,30791],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[780,30794,30795],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30798,30799],{},[420,30800],{"alt":23,"src":30801},"\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,30803,30805],{"className":24308,"code":30804,"language":24310,"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,30806,30807,30812],{"__ignoreMap":23},[28,30808,30809],{"class":30,"line":31},[28,30810,30811],{"class":73},"# CUDA 12.4\n",[28,30813,30814,30817,30819,30822,30825,30828,30831,30834,30836,30839,30842,30845,30848,30850],{"class":30,"line":77},[28,30815,30816],{"class":2453},"conda",[28,30818,24320],{"class":735},[28,30820,30821],{"class":735}," pytorch==",[28,30823,30824],{"class":38},"2.5.1",[28,30826,30827],{"class":735}," torchvision==",[28,30829,30830],{"class":38},"0.20.1",[28,30832,30833],{"class":735}," torchaudio==",[28,30835,30824],{"class":38},[28,30837,30838],{"class":735}," pytorch-cuda=",[28,30840,30841],{"class":38},"12.4",[28,30843,30844],{"class":38}," -c",[28,30846,30847],{"class":735}," pytorch",[28,30849,30844],{"class":38},[28,30851,30852],{"class":735}," nvidia\n",[14,30854,30855],{},"）：",[14,30857,30858],{},[80,30859,30860],{"href":30860,"rel":30861},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24351],[18,30863,30865],{"className":20,"code":30864,"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,30866,30867,30872,30879,30884,30894,30910,30915,30925,30962,30969,30981,30997,31002,31012,31024,31034],{"__ignoreMap":23},[28,30868,30869],{"class":30,"line":31},[28,30870,30871],{"class":73},"# 对深度学习环境进行测试\n",[28,30873,30874,30876],{"class":30,"line":77},[28,30875,536],{"class":42},[28,30877,30878],{"class":34}," torch\n",[28,30880,30881],{"class":30,"line":114},[28,30882,30883],{"class":73},"# 查看cuda是否被激活\n",[28,30885,30886,30889,30891],{"class":30,"line":128},[28,30887,30888],{"class":34},"flag",[28,30890,83],{"class":42},[28,30892,30893],{"class":34},"torch.cuda.is_available()\n",[28,30895,30896,30899,30901,30904,30907],{"class":30,"line":393},[28,30897,30898],{"class":38},"print",[28,30900,367],{"class":34},[28,30902,30903],{"class":735},"\"cuda:\"",[28,30905,30906],{"class":34},", flag)   ",[28,30908,30909],{"class":73},"#返回true的话说明被激活\n",[28,30911,30912],{"class":30,"line":409},[28,30913,30914],{"class":73},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[28,30916,30917,30920,30922],{"class":30,"line":1711},[28,30918,30919],{"class":34},"ngpu",[28,30921,83],{"class":42},[28,30923,30924],{"class":38},"1\n",[28,30926,30927,30930,30932,30935,30938,30940,30943,30946,30949,30951,30953,30955,30957,30960],{"class":30,"line":1802},[28,30928,30929],{"class":34},"device",[28,30931,83],{"class":42},[28,30933,30934],{"class":34},"torch.device(",[28,30936,30937],{"class":735},"\"cuda:0\"",[28,30939,2194],{"class":42},[28,30941,30942],{"class":34},"(torch.cuda.is_available() ",[28,30944,30945],{"class":42},"and",[28,30947,30948],{"class":34}," ngpu",[28,30950,1579],{"class":42},[28,30952,822],{"class":38},[28,30954,14200],{"class":34},[28,30956,2191],{"class":42},[28,30958,30959],{"class":735}," \"cpu\"",[28,30961,228],{"class":34},[28,30963,30964,30966],{"class":30,"line":1808},[28,30965,30898],{"class":38},[28,30967,30968],{"class":34},"(device)\n",[28,30970,30971,30973,30976,30978],{"class":30,"line":1820},[28,30972,30898],{"class":38},[28,30974,30975],{"class":34},"(torch.cuda.get_device_name(",[28,30977,822],{"class":38},[28,30979,30980],{"class":34},"))\n",[28,30982,30983,30985,30988,30990,30992,30994],{"class":30,"line":2102},[28,30984,30898],{"class":38},[28,30986,30987],{"class":34},"(torch.rand(",[28,30989,98],{"class":38},[28,30991,90],{"class":34},[28,30993,98],{"class":38},[28,30995,30996],{"class":34},").cuda())\n",[28,30998,30999],{"class":30,"line":2107},[28,31000,31001],{"class":73},"# 查看cuda和cudnn的版本\n",[28,31003,31004,31007,31009],{"class":30,"line":2113},[28,31005,31006],{"class":34},"cuda_version",[28,31008,83],{"class":42},[28,31010,31011],{"class":34},"torch.version.cuda\n",[28,31013,31014,31016,31018,31021],{"class":30,"line":2118},[28,31015,30898],{"class":38},[28,31017,367],{"class":34},[28,31019,31020],{"class":735},"\"cuda version\"",[28,31022,31023],{"class":34},",cuda_version)\n",[28,31025,31026,31029,31031],{"class":30,"line":2132},[28,31027,31028],{"class":34},"cudnn_version",[28,31030,83],{"class":42},[28,31032,31033],{"class":34},"torch.backends.cudnn.version()\n",[28,31035,31036,31038,31040,31043],{"class":30,"line":2137},[28,31037,30898],{"class":38},[28,31039,367],{"class":34},[28,31041,31042],{"class":735},"\"cudnn version\"",[28,31044,31045],{"class":34},",cudnn_version)\n",[14,31047,31048],{},[420,31049],{"alt":23,"src":31050},"\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,31052,31053],{},"cuda:0 指的是一块显卡",[547,31055,31056],{},"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":77,"depth":77,"links":31058},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30768,"description":559},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31065,"title":31066,"body":31067,"description":559,"extension":560,"meta":50865,"navigation":562,"path":50866,"seo":50867,"stem":50868,"__hash__":50869},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31068,"toc":50859},[31069,31072,31076,31080,31083,31088,31093,31096,31101,31106,31111,31114,31118,31123,31127,31132,31135,31140,31143,31146,31149,31152,31157,31160,31165,31170,31175,31180,31183,31187,31190,31195,31797,31802,31805,31810,31813,31816,32278,32281,32284,32287,32290,34339,34342,34347,34352,35147,35150,35155,35933,35937,37596,37600,38314,38318,38322,38327,38332,38337,38340,38345,38350,38355,38360,38365,38369,38374,39656,39661,39664,39667,39670,39825,39828,39831,41047,41052,41747,41751,41755,41760,41765,41768,41773,41778,41783,41788,41793,41798,41803,41808,41813,41818,41823,41828,41833,41838,41843,41848,41853,41858,41863,41868,41873,41878,41883,41888,41893,41898,41903,41908,41913,41918,41922,41926,41929,43407,43411,45058,45062,45756,45760,45763,45766,46310,46313,46317,46320,47717,47721,47724,48302,50089,50093,50096,50856],[10,31070,31066],{"id":31071},"_2经典神经网络",[605,31073,31075],{"id":31074},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22484,31077,31079],{"id":31078},"_211原理介绍","2.1.1.原理介绍",[14,31081,31082],{},"LeNet-5",[588,31084,31085],{},[591,31086,31087],{},"原理",[14,31089,31090],{},[420,31091],{"alt":23,"src":31092},"\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,31094,31095],{},"B是batch批次；C是channel通道",[588,31097,31098],{"start":77},[591,31099,31100],{},"网络参数详细",[14,31102,31103],{},[420,31104],{"alt":23,"src":31105},"\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,31107,31108],{},[420,31109],{"alt":23,"src":31110},"\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,31112,31113],{},"AlexNet",[588,31115,31116],{},[591,31117,31087],{},[14,31119,31120],{},[420,31121],{"alt":23,"src":31122},"\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",[588,31124,31125],{"start":77},[591,31126,31100],{},[14,31128,31129],{},[420,31130],{"alt":23,"src":31131},"\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,31133,31134],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31136,31137],{},[420,31138],{"alt":23,"src":31139},"\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,31141,31142],{},"数据处理中的图像增强操作:",[14,31144,31145],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31147,31148],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31150,31151],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31153,31154],{},[420,31155],{"alt":23,"src":31156},"\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,31158,31159],{},"提升网络精确度的方法：LRN正则化",[14,31161,31162],{},[420,31163],{"alt":23,"src":31164},"\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,31166,31167],{},[420,31168],{"alt":23,"src":31169},"\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",[588,31171,31172],{"start":114},[591,31173,31174],{},"AlexNet的总结",[14,31176,31177],{},[420,31178],{"alt":23,"src":31179},"\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,31181,31182],{},"比LeNet模型要深一丢丢",[22484,31184,31186],{"id":31185},"_212代码实现","2.1.2.代码实现",[14,31188,31189],{},"（1）LeNet",[588,31191,31192],{},[591,31193,31194],{},"模型搭建",[18,31196,31198],{"className":20,"code":31197,"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,31199,31200,31205,31211,31216,31228,31233,31245,31249,31268,31273,31278,31289,31294,31313,31317,31322,31371,31383,31388,31417,31452,31479,31484,31496,31501,31521,31540,31559,31563,31568,31578,31595,31606,31621,31632,31643,31658,31673,31684,31691,31695,31709,31714,31737,31742,31747,31752,31756,31761,31766,31776],{"__ignoreMap":23},[28,31201,31202],{"class":30,"line":31},[28,31203,31204],{"class":73},"# 导入库\n",[28,31206,31207,31209],{"class":30,"line":77},[28,31208,536],{"class":42},[28,31210,30878],{"class":34},[28,31212,31213],{"class":30,"line":114},[28,31214,31215],{"class":73},"# 导入神经网络层\n",[28,31217,31218,31220,31223,31225],{"class":30,"line":128},[28,31219,530],{"class":42},[28,31221,31222],{"class":34}," torch ",[28,31224,536],{"class":42},[28,31226,31227],{"class":34}," nn\n",[28,31229,31230],{"class":30,"line":393},[28,31231,31232],{"class":73},"# 导入展示神经网络参数的包\n",[28,31234,31235,31237,31240,31242],{"class":30,"line":409},[28,31236,530],{"class":42},[28,31238,31239],{"class":34}," torchsummary ",[28,31241,536],{"class":42},[28,31243,31244],{"class":34}," summary\n",[28,31246,31247],{"class":30,"line":1711},[28,31248,2890],{"emptyLinePlaceholder":562},[28,31250,31251,31253,31256,31258,31261,31263,31266],{"class":30,"line":1802},[28,31252,15180],{"class":42},[28,31254,31255],{"class":2453}," LeNet",[28,31257,367],{"class":34},[28,31259,31260],{"class":2453},"nn",[28,31262,1179],{"class":34},[28,31264,31265],{"class":2453},"Module",[28,31267,372],{"class":34},[28,31269,31270],{"class":30,"line":1808},[28,31271,31272],{"class":73},"    # 模型初始化:\n",[28,31274,31275],{"class":30,"line":1820},[28,31276,31277],{"class":73},"    # 定义一些网络层和激活函数\n",[28,31279,31280,31283,31286],{"class":30,"line":2102},[28,31281,31282],{"class":42},"    def",[28,31284,31285],{"class":38}," __init__",[28,31287,31288],{"class":34},"(self):\n",[28,31290,31291],{"class":30,"line":2107},[28,31292,31293],{"class":73},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[28,31295,31296,31299,31302,31305,31308,31311],{"class":30,"line":2113},[28,31297,31298],{"class":38},"        super",[28,31300,31301],{"class":34},"(LeNet,",[28,31303,31304],{"class":38},"self",[28,31306,31307],{"class":34},").",[28,31309,31310],{"class":38},"__init__",[28,31312,2466],{"class":34},[28,31314,31315],{"class":30,"line":2118},[28,31316,2890],{"emptyLinePlaceholder":562},[28,31318,31319],{"class":30,"line":2132},[28,31320,31321],{"class":73},"        # 定义网络层\n",[28,31323,31324,31327,31330,31332,31335,31338,31340,31342,31344,31347,31349,31351,31353,31356,31358,31360,31362,31365,31367,31369],{"class":30,"line":2137},[28,31325,31326],{"class":38},"        self",[28,31328,31329],{"class":34},".c1",[28,31331,83],{"class":42},[28,31333,31334],{"class":34},"nn.Conv2d(",[28,31336,31337],{"class":5704},"in_channels",[28,31339,83],{"class":42},[28,31341,39],{"class":38},[28,31343,90],{"class":34},[28,31345,31346],{"class":5704},"out_channels",[28,31348,83],{"class":42},[28,31350,970],{"class":38},[28,31352,90],{"class":34},[28,31354,31355],{"class":5704},"kernel_size",[28,31357,83],{"class":42},[28,31359,108],{"class":38},[28,31361,90],{"class":34},[28,31363,31364],{"class":5704},"padding",[28,31366,83],{"class":42},[28,31368,93],{"class":38},[28,31370,228],{"class":34},[28,31372,31373,31375,31378,31380],{"class":30,"line":2143},[28,31374,31326],{"class":38},[28,31376,31377],{"class":34},".sig",[28,31379,83],{"class":42},[28,31381,31382],{"class":34},"nn.Sigmoid()\n",[28,31384,31385],{"class":30,"line":2164},[28,31386,31387],{"class":73},"        # 定义池化\n",[28,31389,31390,31392,31395,31397,31400,31402,31404,31406,31408,31411,31413,31415],{"class":30,"line":2169},[28,31391,31326],{"class":38},[28,31393,31394],{"class":34},".s2",[28,31396,83],{"class":42},[28,31398,31399],{"class":34},"nn.AvgPool2d(",[28,31401,31355],{"class":5704},[28,31403,83],{"class":42},[28,31405,93],{"class":38},[28,31407,90],{"class":34},[28,31409,31410],{"class":5704},"stride",[28,31412,83],{"class":42},[28,31414,93],{"class":38},[28,31416,228],{"class":34},[28,31418,31419,31421,31424,31426,31428,31430,31432,31434,31436,31438,31440,31442,31444,31446,31448,31450],{"class":30,"line":2183},[28,31420,31326],{"class":38},[28,31422,31423],{"class":34},".c3",[28,31425,83],{"class":42},[28,31427,31334],{"class":34},[28,31429,31337],{"class":5704},[28,31431,83],{"class":42},[28,31433,970],{"class":38},[28,31435,90],{"class":34},[28,31437,31346],{"class":5704},[28,31439,83],{"class":42},[28,31441,1221],{"class":38},[28,31443,90],{"class":34},[28,31445,31355],{"class":5704},[28,31447,83],{"class":42},[28,31449,108],{"class":38},[28,31451,228],{"class":34},[28,31453,31454,31456,31459,31461,31463,31465,31467,31469,31471,31473,31475,31477],{"class":30,"line":2188},[28,31455,31326],{"class":38},[28,31457,31458],{"class":34},".s4",[28,31460,83],{"class":42},[28,31462,31399],{"class":34},[28,31464,31355],{"class":5704},[28,31466,83],{"class":42},[28,31468,93],{"class":38},[28,31470,90],{"class":34},[28,31472,31410],{"class":5704},[28,31474,83],{"class":42},[28,31476,93],{"class":38},[28,31478,228],{"class":34},[28,31480,31481],{"class":30,"line":2217},[28,31482,31483],{"class":73},"        # 定义平展层\n",[28,31485,31486,31488,31491,31493],{"class":30,"line":2222},[28,31487,31326],{"class":38},[28,31489,31490],{"class":34},".flatten",[28,31492,83],{"class":42},[28,31494,31495],{"class":34},"nn.Flatten()\n",[28,31497,31498],{"class":30,"line":2239},[28,31499,31500],{"class":73},"        # 定义全连接层\n",[28,31502,31503,31505,31508,31510,31513,31515,31517,31519],{"class":30,"line":2244},[28,31504,31326],{"class":38},[28,31506,31507],{"class":34},".f5",[28,31509,83],{"class":42},[28,31511,31512],{"class":34},"nn.Linear(",[28,31514,4475],{"class":38},[28,31516,90],{"class":34},[28,31518,1437],{"class":38},[28,31520,228],{"class":34},[28,31522,31523,31525,31528,31530,31532,31534,31536,31538],{"class":30,"line":2249},[28,31524,31326],{"class":38},[28,31526,31527],{"class":34},".f6",[28,31529,83],{"class":42},[28,31531,31512],{"class":34},[28,31533,1437],{"class":38},[28,31535,90],{"class":34},[28,31537,1331],{"class":38},[28,31539,228],{"class":34},[28,31541,31542,31544,31547,31549,31551,31553,31555,31557],{"class":30,"line":2254},[28,31543,31326],{"class":38},[28,31545,31546],{"class":34},".f7",[28,31548,83],{"class":42},[28,31550,31512],{"class":34},[28,31552,1331],{"class":38},[28,31554,90],{"class":34},[28,31556,225],{"class":38},[28,31558,228],{"class":34},[28,31560,31561],{"class":30,"line":2268},[28,31562,2890],{"emptyLinePlaceholder":562},[28,31564,31565],{"class":30,"line":2273},[28,31566,31567],{"class":73},"    # 写工具->写前向传播\n",[28,31569,31570,31572,31575],{"class":30,"line":3067},[28,31571,31282],{"class":42},[28,31573,31574],{"class":2453}," forward",[28,31576,31577],{"class":34},"(self,x):\n",[28,31579,31580,31583,31585,31587,31590,31592],{"class":30,"line":3081},[28,31581,31582],{"class":34},"        x",[28,31584,83],{"class":42},[28,31586,31304],{"class":38},[28,31588,31589],{"class":34},".sig(",[28,31591,31304],{"class":38},[28,31593,31594],{"class":34},".c1(x))\n",[28,31596,31597,31599,31601,31603],{"class":30,"line":3089},[28,31598,31582],{"class":34},[28,31600,83],{"class":42},[28,31602,31304],{"class":38},[28,31604,31605],{"class":34},".s2(x)\n",[28,31607,31608,31610,31612,31614,31616,31618],{"class":30,"line":3094},[28,31609,31582],{"class":34},[28,31611,83],{"class":42},[28,31613,31304],{"class":38},[28,31615,31589],{"class":34},[28,31617,31304],{"class":38},[28,31619,31620],{"class":34},".c3(x))\n",[28,31622,31623,31625,31627,31629],{"class":30,"line":3100},[28,31624,31582],{"class":34},[28,31626,83],{"class":42},[28,31628,31304],{"class":38},[28,31630,31631],{"class":34},".s4(x)\n",[28,31633,31634,31636,31638,31640],{"class":30,"line":3106},[28,31635,31582],{"class":34},[28,31637,83],{"class":42},[28,31639,31304],{"class":38},[28,31641,31642],{"class":34},".flatten(x)\n",[28,31644,31645,31647,31649,31651,31653,31655],{"class":30,"line":3111},[28,31646,31582],{"class":34},[28,31648,83],{"class":42},[28,31650,31304],{"class":38},[28,31652,31589],{"class":34},[28,31654,31304],{"class":38},[28,31656,31657],{"class":34},".f5(x))\n",[28,31659,31660,31662,31664,31666,31668,31670],{"class":30,"line":8436},[28,31661,31582],{"class":34},[28,31663,83],{"class":42},[28,31665,31304],{"class":38},[28,31667,31589],{"class":34},[28,31669,31304],{"class":38},[28,31671,31672],{"class":34},".f6(x))\n",[28,31674,31675,31677,31679,31681],{"class":30,"line":8460},[28,31676,31582],{"class":34},[28,31678,83],{"class":42},[28,31680,31304],{"class":38},[28,31682,31683],{"class":34},".f7(x)\n",[28,31685,31686,31688],{"class":30,"line":8465},[28,31687,15238],{"class":42},[28,31689,31690],{"class":34}," x\n",[28,31692,31693],{"class":30,"line":8471},[28,31694,2890],{"emptyLinePlaceholder":562},[28,31696,31697,31699,31702,31704,31707],{"class":30,"line":8498},[28,31698,2021],{"class":42},[28,31700,31701],{"class":38}," __name__",[28,31703,3439],{"class":42},[28,31705,31706],{"class":735},"\"__main__\"",[28,31708,4227],{"class":34},[28,31710,31711],{"class":30,"line":8503},[28,31712,31713],{"class":73},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[28,31715,31716,31719,31721,31723,31726,31728,31731,31733,31735],{"class":30,"line":8509},[28,31717,31718],{"class":34},"    device",[28,31720,83],{"class":42},[28,31722,30934],{"class":34},[28,31724,31725],{"class":735},"\"cuda\"",[28,31727,2194],{"class":42},[28,31729,31730],{"class":34}," torch.cuda.is_available() ",[28,31732,2191],{"class":42},[28,31734,30959],{"class":735},[28,31736,228],{"class":34},[28,31738,31739],{"class":30,"line":8521},[28,31740,31741],{"class":73},"    # 如果就是想指定用cpu用下方代码:\n",[28,31743,31744],{"class":30,"line":8533},[28,31745,31746],{"class":73},"    # device=\"cpu\"\n",[28,31748,31749],{"class":30,"line":8545},[28,31750,31751],{"class":73},"    # print(device)\n",[28,31753,31754],{"class":30,"line":10202},[28,31755,2890],{"emptyLinePlaceholder":562},[28,31757,31758],{"class":30,"line":10227},[28,31759,31760],{"class":73},"    # 实例化模型\n",[28,31762,31763],{"class":30,"line":10250},[28,31764,31765],{"class":73},"    # 将模型放到设备中去运行\n",[28,31767,31768,31771,31773],{"class":30,"line":10274},[28,31769,31770],{"class":34},"    model",[28,31772,83],{"class":42},[28,31774,31775],{"class":34},"LeNet().to(device)\n",[28,31777,31778,31781,31784,31786,31788,31790,31792,31794],{"class":30,"line":10279},[28,31779,31780],{"class":38},"    print",[28,31782,31783],{"class":34},"(summary(model,(",[28,31785,39],{"class":38},[28,31787,90],{"class":34},[28,31789,1520],{"class":38},[28,31791,90],{"class":34},[28,31793,1520],{"class":38},[28,31795,31796],{"class":34},")))\n",[14,31798,31799],{},[420,31800],{"alt":23,"src":31801},"\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,31803,31804],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[588,31806,31807],{"start":77},[591,31808,31809],{},"训练",[14,31811,31812],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31814,31815],{},"在训练之前可以将数据展示看一下",[18,31817,31819],{"className":20,"code":31818,"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,31820,31821,31826,31831,31843,31855,31867,31872,31884,31889,31901,31906,31917,31921,31925,31946,31958,31963,31984,31995,31999,32004,32022,32033,32038,32049,32054,32065,32069,32074,32089,32102,32107,32112,32125,32138,32151,32156,32160,32165,32185,32202,32222,32235,32248,32258,32273],{"__ignoreMap":23},[28,31822,31823],{"class":30,"line":31},[28,31824,31825],{"class":73},"# 建立画图的函数，用于展示数据\n",[28,31827,31828],{"class":30,"line":77},[28,31829,31830],{"class":73},"# torchvision中包含很多内置的数据集\n",[28,31832,31833,31835,31838,31840],{"class":30,"line":114},[28,31834,530],{"class":42},[28,31836,31837],{"class":34}," sklearn.externals.array_api_compat.torch ",[28,31839,536],{"class":42},[28,31841,31842],{"class":34}," squeeze\n",[28,31844,31845,31847,31850,31852],{"class":30,"line":128},[28,31846,530],{"class":42},[28,31848,31849],{"class":34}," torchvision.datasets ",[28,31851,536],{"class":42},[28,31853,31854],{"class":34}," FashionMNIST\n",[28,31856,31857,31859,31862,31864],{"class":30,"line":393},[28,31858,536],{"class":42},[28,31860,31861],{"class":34}," numpy ",[28,31863,542],{"class":42},[28,31865,31866],{"class":34}," np\n",[28,31868,31869],{"class":30,"line":409},[28,31870,31871],{"class":73},"# 引入处理数据集的包\n",[28,31873,31874,31876,31879,31881],{"class":30,"line":1711},[28,31875,530],{"class":42},[28,31877,31878],{"class":34}," torchvision ",[28,31880,536],{"class":42},[28,31882,31883],{"class":34}," transforms\n",[28,31885,31886],{"class":30,"line":1802},[28,31887,31888],{"class":73},"# 从torch库中引入数据处理的包\n",[28,31890,31891,31893,31896,31898],{"class":30,"line":1808},[28,31892,536],{"class":42},[28,31894,31895],{"class":34}," torch.utils.data ",[28,31897,542],{"class":42},[28,31899,31900],{"class":34}," Data\n",[28,31902,31903],{"class":30,"line":1820},[28,31904,31905],{"class":73},"# 导入画图的库\n",[28,31907,31908,31910,31913,31915],{"class":30,"line":2102},[28,31909,536],{"class":42},[28,31911,31912],{"class":34}," matplotlib.pyplot ",[28,31914,542],{"class":42},[28,31916,545],{"class":34},[28,31918,31919],{"class":30,"line":2107},[28,31920,2890],{"emptyLinePlaceholder":562},[28,31922,31923],{"class":30,"line":2113},[28,31924,2890],{"emptyLinePlaceholder":562},[28,31926,31927,31930,31932,31935,31938,31940,31943],{"class":30,"line":2118},[28,31928,31929],{"class":34},"train_data",[28,31931,83],{"class":42},[28,31933,31934],{"class":34},"FashionMNIST(",[28,31936,31937],{"class":5704},"root",[28,31939,83],{"class":42},[28,31941,31942],{"class":735},"'.\u002Fdata'",[28,31944,31945],{"class":34},",\n",[28,31947,31948,31951,31953,31956],{"class":30,"line":2132},[28,31949,31950],{"class":5704},"                        train",[28,31952,83],{"class":42},[28,31954,31955],{"class":38},"True",[28,31957,31945],{"class":34},[28,31959,31960],{"class":30,"line":2137},[28,31961,31962],{"class":73},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[28,31964,31965,31968,31970,31973,31976,31978,31981],{"class":30,"line":2143},[28,31966,31967],{"class":5704},"                        transform",[28,31969,83],{"class":42},[28,31971,31972],{"class":34},"transforms.Compose([transforms.Resize(",[28,31974,31975],{"class":5704},"size",[28,31977,83],{"class":42},[28,31979,31980],{"class":38},"224",[28,31982,31983],{"class":34},"),transforms.ToTensor()]),\n",[28,31985,31986,31989,31991,31993],{"class":30,"line":2164},[28,31987,31988],{"class":5704},"                        download",[28,31990,83],{"class":42},[28,31992,31955],{"class":38},[28,31994,228],{"class":34},[28,31996,31997],{"class":30,"line":2169},[28,31998,2890],{"emptyLinePlaceholder":562},[28,32000,32001],{"class":30,"line":2183},[28,32002,32003],{"class":73},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[28,32005,32006,32009,32011,32014,32017,32019],{"class":30,"line":2188},[28,32007,32008],{"class":34},"train_loader",[28,32010,83],{"class":42},[28,32012,32013],{"class":34},"Data.DataLoader(",[28,32015,32016],{"class":5704},"dataset",[28,32018,83],{"class":42},[28,32020,32021],{"class":34},"train_data,\n",[28,32023,32024,32027,32029,32031],{"class":30,"line":2217},[28,32025,32026],{"class":5704},"                             batch_size",[28,32028,83],{"class":42},[28,32030,834],{"class":38},[28,32032,31945],{"class":34},[28,32034,32035],{"class":30,"line":2222},[28,32036,32037],{"class":73},"                             # 数据是否打乱\n",[28,32039,32040,32043,32045,32047],{"class":30,"line":2239},[28,32041,32042],{"class":5704},"                             shuffle",[28,32044,83],{"class":42},[28,32046,31955],{"class":38},[28,32048,31945],{"class":34},[28,32050,32051],{"class":30,"line":2244},[28,32052,32053],{"class":73},"                             # 规定加载数据的进程\n",[28,32055,32056,32059,32061,32063],{"class":30,"line":2249},[28,32057,32058],{"class":5704},"                             num_workers",[28,32060,83],{"class":42},[28,32062,822],{"class":38},[28,32064,228],{"class":34},[28,32066,32067],{"class":30,"line":2254},[28,32068,2890],{"emptyLinePlaceholder":562},[28,32070,32071],{"class":30,"line":2268},[28,32072,32073],{"class":73},"# 获得一个batch的数据\n",[28,32075,32076,32078,32081,32083,32086],{"class":30,"line":2273},[28,32077,49],{"class":42},[28,32079,32080],{"class":34}," step,(b_x,b_y) ",[28,32082,55],{"class":42},[28,32084,32085],{"class":38}," enumerate",[28,32087,32088],{"class":34},"(train_loader):\n",[28,32090,32091,32093,32096,32098,32100],{"class":30,"line":3067},[28,32092,3590],{"class":42},[28,32094,32095],{"class":34}," step ",[28,32097,1579],{"class":42},[28,32099,4581],{"class":38},[28,32101,4227],{"class":34},[28,32103,32104],{"class":30,"line":3081},[28,32105,32106],{"class":42},"        break\n",[28,32108,32109],{"class":30,"line":3089},[28,32110,32111],{"class":73},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[28,32113,32114,32117,32119,32122],{"class":30,"line":3094},[28,32115,32116],{"class":34},"batch_x",[28,32118,83],{"class":42},[28,32120,32121],{"class":34},"b_x.squeeze().numpy()  ",[28,32123,32124],{"class":73},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[28,32126,32127,32130,32132,32135],{"class":30,"line":3100},[28,32128,32129],{"class":34},"batch_y",[28,32131,83],{"class":42},[28,32133,32134],{"class":34},"b_y.numpy()   ",[28,32136,32137],{"class":73},"#将张量转换成功numpy数组\n",[28,32139,32140,32143,32145,32148],{"class":30,"line":3106},[28,32141,32142],{"class":34},"class_label",[28,32144,83],{"class":42},[28,32146,32147],{"class":34},"train_data.classes  ",[28,32149,32150],{"class":73},"#训练集标签\n",[28,32152,32153],{"class":30,"line":3111},[28,32154,32155],{"class":73},"# print(class_label)\n",[28,32157,32158],{"class":30,"line":8436},[28,32159,2890],{"emptyLinePlaceholder":562},[28,32161,32162],{"class":30,"line":8460},[28,32163,32164],{"class":73},"# 可视化一个batch的图像\n",[28,32166,32167,32170,32173,32175,32177,32179,32181,32183],{"class":30,"line":8465},[28,32168,32169],{"class":34},"plt.figure(",[28,32171,32172],{"class":5704},"figsize",[28,32174,83],{"class":42},[28,32176,367],{"class":34},[28,32178,1121],{"class":38},[28,32180,90],{"class":34},[28,32182,108],{"class":38},[28,32184,30980],{"class":34},[28,32186,32187,32189,32192,32194,32197,32199],{"class":30,"line":8471},[28,32188,49],{"class":42},[28,32190,32191],{"class":34}," ii ",[28,32193,55],{"class":42},[28,32195,32196],{"class":34}," np.arange(",[28,32198,7846],{"class":38},[28,32200,32201],{"class":34},"(batch_y)):\n",[28,32203,32204,32207,32209,32211,32213,32216,32218,32220],{"class":30,"line":8498},[28,32205,32206],{"class":34},"    plt.subplot(",[28,32208,103],{"class":38},[28,32210,90],{"class":34},[28,32212,1221],{"class":38},[28,32214,32215],{"class":34},",ii ",[28,32217,1104],{"class":42},[28,32219,25605],{"class":38},[28,32221,228],{"class":34},[28,32223,32224,32227,32230,32232],{"class":30,"line":8503},[28,32225,32226],{"class":34},"    plt.imshow(batch_x[ii,:,:],",[28,32228,32229],{"class":5704},"cmap",[28,32231,83],{"class":42},[28,32233,32234],{"class":34},"plt.cm.gray)\n",[28,32236,32237,32240,32242,32244,32246],{"class":30,"line":8509},[28,32238,32239],{"class":34},"    plt.title(class_label[batch_y[ii]],",[28,32241,31975],{"class":5704},[28,32243,83],{"class":42},[28,32245,225],{"class":38},[28,32247,228],{"class":34},[28,32249,32250,32253,32256],{"class":30,"line":8521},[28,32251,32252],{"class":34},"    plt.axis(",[28,32254,32255],{"class":735},"\"off\"",[28,32257,228],{"class":34},[28,32259,32260,32263,32266,32268,32271],{"class":30,"line":8533},[28,32261,32262],{"class":34},"    plt.subplots_adjust(",[28,32264,32265],{"class":5704},"wspace",[28,32267,83],{"class":42},[28,32269,32270],{"class":38},"0.05",[28,32272,228],{"class":34},[28,32274,32275],{"class":30,"line":8545},[28,32276,32277],{"class":34},"plt.show()\n",[14,32279,32280],{},"用matplotlib进行展示的过程可以后续再补",[14,32282,32283],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32285,32286],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32288,32289],{},"模型训练：",[18,32291,32293],{"className":20,"code":32292,"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,32294,32295,32302,32309,32313,32325,32331,32342,32352,32362,32372,32382,32387,32399,32409,32413,32417,32422,32433,32446,32457,32474,32485,32524,32540,32552,32563,32568,32579,32595,32606,32617,32628,32635,32639,32644,32649,32653,32658,32668,32689,32693,32697,32702,32707,32712,32732,32736,32741,32751,32755,32760,32769,32774,32779,32784,32794,32798,32802,32807,32812,32822,32827,32837,32842,32851,32856,32865,32870,32879,32883,32888,32898,32902,32906,32911,32925,32953,32968,32972,32977,32982,32991,32996,33005,33010,33019,33024,33033,33038,33047,33052,33061,33066,33079,33084,33094,33099,33109,33115,33121,33127,33133,33144,33150,33170,33176,33187,33193,33199,33205,33211,33217,33223,33229,33249,33255,33271,33277,33291,33297,33312,33318,33327,33333,33342,33348,33354,33363,33369,33380,33386,33405,33411,33422,33428,33448,33464,33470,33484,33490,33496,33507,33513,33519,33529,33535,33546,33552,33562,33567,33573,33622,33669,33674,33680,33699,33705,33724,33730,33736,33746,33751,33757,33773,33818,33824,33830,33836,33847,33853,33859,33865,33883,33897,33906,33915,33924,33933,33939,33945,33953,33958,33964,33975,33981,34001,34007,34013,34019,34036,34042,34048,34054,34060,34066,34093,34117,34123,34129,34135,34146,34157,34163,34180,34203,34226,34232,34237,34246,34256,34262,34267,34273,34286,34292,34303,34314,34333],{"__ignoreMap":23},[28,32296,32297,32299],{"class":30,"line":31},[28,32298,536],{"class":42},[28,32300,32301],{"class":34}," copy\n",[28,32303,32304,32306],{"class":30,"line":77},[28,32305,536],{"class":42},[28,32307,32308],{"class":34}," time\n",[28,32310,32311],{"class":30,"line":114},[28,32312,2890],{"emptyLinePlaceholder":562},[28,32314,32315,32317,32320,32322],{"class":30,"line":128},[28,32316,536],{"class":42},[28,32318,32319],{"class":34}," pandas ",[28,32321,542],{"class":42},[28,32323,32324],{"class":34}," pd\n",[28,32326,32327,32329],{"class":30,"line":393},[28,32328,536],{"class":42},[28,32330,30878],{"class":34},[28,32332,32333,32335,32337,32339],{"class":30,"line":409},[28,32334,530],{"class":42},[28,32336,31895],{"class":34},[28,32338,536],{"class":42},[28,32340,32341],{"class":34}," Dataset\n",[28,32343,32344,32346,32348,32350],{"class":30,"line":1711},[28,32345,530],{"class":42},[28,32347,31849],{"class":34},[28,32349,536],{"class":42},[28,32351,31854],{"class":34},[28,32353,32354,32356,32358,32360],{"class":30,"line":1802},[28,32355,530],{"class":42},[28,32357,31878],{"class":34},[28,32359,536],{"class":42},[28,32361,31883],{"class":34},[28,32363,32364,32366,32368,32370],{"class":30,"line":1808},[28,32365,536],{"class":42},[28,32367,31895],{"class":34},[28,32369,542],{"class":42},[28,32371,31900],{"class":34},[28,32373,32374,32376,32378,32380],{"class":30,"line":1820},[28,32375,536],{"class":42},[28,32377,31912],{"class":34},[28,32379,542],{"class":42},[28,32381,545],{"class":34},[28,32383,32384],{"class":30,"line":2102},[28,32385,32386],{"class":73},"# 导入模型\n",[28,32388,32389,32391,32394,32396],{"class":30,"line":2107},[28,32390,530],{"class":42},[28,32392,32393],{"class":34}," model ",[28,32395,536],{"class":42},[28,32397,32398],{"class":34}," LeNet\n",[28,32400,32401,32403,32405,32407],{"class":30,"line":2113},[28,32402,530],{"class":42},[28,32404,31222],{"class":34},[28,32406,536],{"class":42},[28,32408,31227],{"class":34},[28,32410,32411],{"class":30,"line":2118},[28,32412,2890],{"emptyLinePlaceholder":562},[28,32414,32415],{"class":30,"line":2132},[28,32416,2890],{"emptyLinePlaceholder":562},[28,32418,32419],{"class":30,"line":2137},[28,32420,32421],{"class":73},"# 处理训练集与验证集函数--->划分数据集\n",[28,32423,32424,32427,32430],{"class":30,"line":2143},[28,32425,32426],{"class":42},"def",[28,32428,32429],{"class":2453}," train_val_data_process",[28,32431,32432],{"class":34},"():\n",[28,32434,32435,32438,32440,32442,32444],{"class":30,"line":2164},[28,32436,32437],{"class":34},"    train_data",[28,32439,83],{"class":42},[28,32441,31934],{"class":34},[28,32443,31942],{"class":735},[28,32445,31945],{"class":34},[28,32447,32448,32451,32453,32455],{"class":30,"line":2169},[28,32449,32450],{"class":5704},"                            train",[28,32452,83],{"class":42},[28,32454,31955],{"class":38},[28,32456,31945],{"class":34},[28,32458,32459,32462,32464,32466,32468,32470,32472],{"class":30,"line":2183},[28,32460,32461],{"class":5704},"                            transform",[28,32463,83],{"class":42},[28,32465,31972],{"class":34},[28,32467,31975],{"class":5704},[28,32469,83],{"class":42},[28,32471,1520],{"class":38},[28,32473,31983],{"class":34},[28,32475,32476,32479,32481,32483],{"class":30,"line":2188},[28,32477,32478],{"class":5704},"                            download",[28,32480,83],{"class":42},[28,32482,31955],{"class":38},[28,32484,228],{"class":34},[28,32486,32487,32490,32492,32495,32498,32500,32503,32505,32507,32510,32512,32514,32517,32519,32521],{"class":30,"line":2217},[28,32488,32489],{"class":34},"    train_data,val_data",[28,32491,83],{"class":42},[28,32493,32494],{"class":34},"Data.random_split(train_data,[",[28,32496,32497],{"class":38},"round",[28,32499,367],{"class":34},[28,32501,32502],{"class":38},"0.8",[28,32504,256],{"class":42},[28,32506,7846],{"class":38},[28,32508,32509],{"class":34},"(train_data)),",[28,32511,32497],{"class":38},[28,32513,367],{"class":34},[28,32515,32516],{"class":38},"0.2",[28,32518,256],{"class":42},[28,32520,7846],{"class":38},[28,32522,32523],{"class":34},"(train_data))])\n",[28,32525,32526,32529,32531,32534,32536,32538],{"class":30,"line":2222},[28,32527,32528],{"class":34},"    train_dataloader ",[28,32530,83],{"class":42},[28,32532,32533],{"class":34}," Data.DataLoader(",[28,32535,32016],{"class":5704},[28,32537,83],{"class":42},[28,32539,32021],{"class":34},[28,32541,32542,32545,32547,32550],{"class":30,"line":2239},[28,32543,32544],{"class":5704},"                                       batch_size",[28,32546,83],{"class":42},[28,32548,32549],{"class":38},"128",[28,32551,31945],{"class":34},[28,32553,32554,32557,32559,32561],{"class":30,"line":2244},[28,32555,32556],{"class":5704},"                                       shuffle",[28,32558,83],{"class":42},[28,32560,31955],{"class":38},[28,32562,31945],{"class":34},[28,32564,32565],{"class":30,"line":2249},[28,32566,32567],{"class":73},"                                       # 规定8个进程\n",[28,32569,32570,32573,32575,32577],{"class":30,"line":2254},[28,32571,32572],{"class":5704},"                                       num_workers",[28,32574,83],{"class":42},[28,32576,1020],{"class":38},[28,32578,228],{"class":34},[28,32580,32581,32584,32586,32588,32590,32592],{"class":30,"line":2268},[28,32582,32583],{"class":34},"    val_dataloader",[28,32585,83],{"class":42},[28,32587,32013],{"class":34},[28,32589,32016],{"class":5704},[28,32591,83],{"class":42},[28,32593,32594],{"class":34},"val_data,\n",[28,32596,32597,32600,32602,32604],{"class":30,"line":2273},[28,32598,32599],{"class":5704},"                                   batch_size",[28,32601,83],{"class":42},[28,32603,32549],{"class":38},[28,32605,31945],{"class":34},[28,32607,32608,32611,32613,32615],{"class":30,"line":3067},[28,32609,32610],{"class":5704},"                                   shuffle",[28,32612,83],{"class":42},[28,32614,31955],{"class":38},[28,32616,31945],{"class":34},[28,32618,32619,32622,32624,32626],{"class":30,"line":3081},[28,32620,32621],{"class":5704},"                                   num_workers",[28,32623,83],{"class":42},[28,32625,1020],{"class":38},[28,32627,228],{"class":34},[28,32629,32630,32632],{"class":30,"line":3089},[28,32631,4578],{"class":42},[28,32633,32634],{"class":34}," train_dataloader,val_dataloader\n",[28,32636,32637],{"class":30,"line":3094},[28,32638,2890],{"emptyLinePlaceholder":562},[28,32640,32641],{"class":30,"line":3100},[28,32642,32643],{"class":73},"# 验证是否出错\n",[28,32645,32646],{"class":30,"line":3106},[28,32647,32648],{"class":73},"# train_val_data_process()\n",[28,32650,32651],{"class":30,"line":3111},[28,32652,2890],{"emptyLinePlaceholder":562},[28,32654,32655],{"class":30,"line":8436},[28,32656,32657],{"class":73},"# 定义模型训练函数\n",[28,32659,32660,32662,32665],{"class":30,"line":8460},[28,32661,32426],{"class":42},[28,32663,32664],{"class":2453}," train_model_process",[28,32666,32667],{"class":34},"(model,train_dataloader,val_dataloader,num_epochs):\n",[28,32669,32670,32672,32674,32676,32678,32680,32682,32684,32687],{"class":30,"line":8465},[28,32671,31718],{"class":34},[28,32673,83],{"class":42},[28,32675,30934],{"class":34},[28,32677,31725],{"class":735},[28,32679,2194],{"class":42},[28,32681,31730],{"class":34},[28,32683,2191],{"class":42},[28,32685,32686],{"class":735}," 'cpu'",[28,32688,228],{"class":34},[28,32690,32691],{"class":30,"line":8471},[28,32692,2890],{"emptyLinePlaceholder":562},[28,32694,32695],{"class":30,"line":8498},[28,32696,2890],{"emptyLinePlaceholder":562},[28,32698,32699],{"class":30,"line":8503},[28,32700,32701],{"class":73},"    # 定义优化器\n",[28,32703,32704],{"class":30,"line":8509},[28,32705,32706],{"class":73},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[28,32708,32709],{"class":30,"line":8521},[28,32710,32711],{"class":73},"    # lr为学习率\n",[28,32713,32714,32717,32719,32722,32725,32727,32730],{"class":30,"line":8533},[28,32715,32716],{"class":34},"    optimizer",[28,32718,83],{"class":42},[28,32720,32721],{"class":34},"torch.optim.Adam(model.parameters(),",[28,32723,32724],{"class":5704},"lr",[28,32726,83],{"class":42},[28,32728,32729],{"class":38},"0.001",[28,32731,228],{"class":34},[28,32733,32734],{"class":30,"line":8545},[28,32735,2890],{"emptyLinePlaceholder":562},[28,32737,32738],{"class":30,"line":10202},[28,32739,32740],{"class":73},"    # 定义损失函数使用交叉熵损失函数\n",[28,32742,32743,32746,32748],{"class":30,"line":10227},[28,32744,32745],{"class":34},"    criterion",[28,32747,83],{"class":42},[28,32749,32750],{"class":34},"nn.CrossEntropyLoss()\n",[28,32752,32753],{"class":30,"line":10250},[28,32754,2890],{"emptyLinePlaceholder":562},[28,32756,32757],{"class":30,"line":10274},[28,32758,32759],{"class":73},"    # 将模型放到GPU中进行训练\n",[28,32761,32762,32764,32766],{"class":30,"line":10279},[28,32763,31770],{"class":34},[28,32765,83],{"class":42},[28,32767,32768],{"class":34},"model.to(device)\n",[28,32770,32771],{"class":30,"line":10284},[28,32772,32773],{"class":73},"    # 复制当前模型的参数\n",[28,32775,32776],{"class":30,"line":10289},[28,32777,32778],{"class":73},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[28,32780,32781],{"class":30,"line":10298},[28,32782,32783],{"class":73},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[28,32785,32786,32789,32791],{"class":30,"line":10303},[28,32787,32788],{"class":34},"    best_model_wts",[28,32790,83],{"class":42},[28,32792,32793],{"class":34},"copy.deepcopy(model.state_dict())\n",[28,32795,32796],{"class":30,"line":10309},[28,32797,2890],{"emptyLinePlaceholder":562},[28,32799,32800],{"class":30,"line":10330},[28,32801,2890],{"emptyLinePlaceholder":562},[28,32803,32804],{"class":30,"line":10336},[28,32805,32806],{"class":73},"    # 初始化参数\n",[28,32808,32809],{"class":30,"line":10350},[28,32810,32811],{"class":73},"    # 最高准确度\n",[28,32813,32814,32817,32819],{"class":30,"line":10356},[28,32815,32816],{"class":34},"    best_acc",[28,32818,83],{"class":42},[28,32820,32821],{"class":38},"0.0\n",[28,32823,32824],{"class":30,"line":10383},[28,32825,32826],{"class":73},"    # 训练集损失列表\n",[28,32828,32829,32832,32834],{"class":30,"line":10392},[28,32830,32831],{"class":34},"    train_loss_all",[28,32833,83],{"class":42},[28,32835,32836],{"class":34},"[]\n",[28,32838,32839],{"class":30,"line":10398},[28,32840,32841],{"class":73},"    # 验证集函数列表\n",[28,32843,32844,32847,32849],{"class":30,"line":10406},[28,32845,32846],{"class":34},"    val_loss_all",[28,32848,83],{"class":42},[28,32850,32836],{"class":34},[28,32852,32853],{"class":30,"line":10411},[28,32854,32855],{"class":73},"    # 训练集准确度列表\n",[28,32857,32858,32861,32863],{"class":30,"line":17090},[28,32859,32860],{"class":34},"    train_acc_all",[28,32862,83],{"class":42},[28,32864,32836],{"class":34},[28,32866,32867],{"class":30,"line":17096},[28,32868,32869],{"class":73},"    # 验证集准确度列表\n",[28,32871,32872,32875,32877],{"class":30,"line":17119},[28,32873,32874],{"class":34},"    val_acc_all",[28,32876,83],{"class":42},[28,32878,32836],{"class":34},[28,32880,32881],{"class":30,"line":17125},[28,32882,2890],{"emptyLinePlaceholder":562},[28,32884,32885],{"class":30,"line":17148},[28,32886,32887],{"class":73},"    # 保存当前时间--->方便看每轮训练的时间\n",[28,32889,32890,32893,32895],{"class":30,"line":17162},[28,32891,32892],{"class":34},"    since",[28,32894,83],{"class":42},[28,32896,32897],{"class":34},"time.time()\n",[28,32899,32900],{"class":30,"line":17182},[28,32901,2890],{"emptyLinePlaceholder":562},[28,32903,32904],{"class":30,"line":17188},[28,32905,2890],{"emptyLinePlaceholder":562},[28,32907,32908],{"class":30,"line":17199},[28,32909,32910],{"class":73},"    # 准备工作完成--->开始训练模型\n",[28,32912,32913,32915,32918,32920,32922],{"class":30,"line":17222},[28,32914,377],{"class":42},[28,32916,32917],{"class":34}," epoch ",[28,32919,55],{"class":42},[28,32921,364],{"class":38},[28,32923,32924],{"class":34},"(num_epochs):\n",[28,32926,32927,32930,32932,32935,32938,32940,32942,32944,32947,32949,32951],{"class":30,"line":17244},[28,32928,32929],{"class":38},"        print",[28,32931,367],{"class":34},[28,32933,32934],{"class":735},"\"Epoch ",[28,32936,32937],{"class":38},"{}",[28,32939,43],{"class":735},[28,32941,32937],{"class":38},[28,32943,880],{"class":735},[28,32945,32946],{"class":34},".format(epoch,num_epochs",[28,32948,445],{"class":42},[28,32950,39],{"class":38},[28,32952,30980],{"class":34},[28,32954,32955,32957,32959,32962,32964,32966],{"class":30,"line":17249},[28,32956,32929],{"class":38},[28,32958,367],{"class":34},[28,32960,32961],{"class":735},"\"-\"",[28,32963,256],{"class":42},[28,32965,225],{"class":38},[28,32967,228],{"class":34},[28,32969,32970],{"class":30,"line":17255},[28,32971,2890],{"emptyLinePlaceholder":562},[28,32973,32974],{"class":30,"line":17269},[28,32975,32976],{"class":73},"        # 初始化参数\n",[28,32978,32979],{"class":30,"line":17282},[28,32980,32981],{"class":73},"        # 训练集损失函数\n",[28,32983,32984,32987,32989],{"class":30,"line":17287},[28,32985,32986],{"class":34},"        train_loss",[28,32988,83],{"class":42},[28,32990,32821],{"class":38},[28,32992,32993],{"class":30,"line":17301},[28,32994,32995],{"class":73},"        # 训练集准确度\n",[28,32997,32998,33001,33003],{"class":30,"line":17306},[28,32999,33000],{"class":34},"        train_corrects",[28,33002,83],{"class":42},[28,33004,3574],{"class":38},[28,33006,33007],{"class":30,"line":17312},[28,33008,33009],{"class":73},"        # 验证集损失函数\n",[28,33011,33012,33015,33017],{"class":30,"line":17317},[28,33013,33014],{"class":34},"        val_loss",[28,33016,83],{"class":42},[28,33018,32821],{"class":38},[28,33020,33021],{"class":30,"line":17331},[28,33022,33023],{"class":73},"        # 验证集准确度\n",[28,33025,33026,33029,33031],{"class":30,"line":17336},[28,33027,33028],{"class":34},"        val_corrects",[28,33030,83],{"class":42},[28,33032,3574],{"class":38},[28,33034,33035],{"class":30,"line":17341},[28,33036,33037],{"class":73},"        # 训练集样本数量\n",[28,33039,33040,33043,33045],{"class":30,"line":17355},[28,33041,33042],{"class":34},"        train_num",[28,33044,83],{"class":42},[28,33046,3574],{"class":38},[28,33048,33049],{"class":30,"line":17367},[28,33050,33051],{"class":73},"        # 验证集样本数量\n",[28,33053,33054,33057,33059],{"class":30,"line":17372},[28,33055,33056],{"class":34},"        val_num",[28,33058,83],{"class":42},[28,33060,3574],{"class":38},[28,33062,33063],{"class":30,"line":17385},[28,33064,33065],{"class":73},"        # 将数据放到设备,并开始训练\n",[28,33067,33068,33070,33072,33074,33076],{"class":30,"line":17390},[28,33069,3891],{"class":42},[28,33071,32080],{"class":34},[28,33073,55],{"class":42},[28,33075,32085],{"class":38},[28,33077,33078],{"class":34},"(train_dataloader):\n",[28,33080,33081],{"class":30,"line":17395},[28,33082,33083],{"class":73},"            # 将特征放入到训练设备\n",[28,33085,33086,33089,33091],{"class":30,"line":17400},[28,33087,33088],{"class":34},"            b_x",[28,33090,83],{"class":42},[28,33092,33093],{"class":34},"b_x.to(device)\n",[28,33095,33096],{"class":30,"line":17413},[28,33097,33098],{"class":73},"            # 将标签放入到训练设备当中\n",[28,33100,33101,33104,33106],{"class":30,"line":17418},[28,33102,33103],{"class":34},"            b_y",[28,33105,83],{"class":42},[28,33107,33108],{"class":34},"b_y.to(device)\n",[28,33110,33112],{"class":30,"line":33111},98,[28,33113,33114],{"class":73},"            # 设置模型为训练模式\n",[28,33116,33118],{"class":30,"line":33117},99,[28,33119,33120],{"class":34},"            model.train()\n",[28,33122,33124],{"class":30,"line":33123},100,[28,33125,33126],{"class":73},"            # 将数据放到模型当中,开始前向传播\n",[28,33128,33130],{"class":30,"line":33129},101,[28,33131,33132],{"class":73},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[28,33134,33136,33139,33141],{"class":30,"line":33135},102,[28,33137,33138],{"class":34},"            output",[28,33140,83],{"class":42},[28,33142,33143],{"class":34},"model(b_x)\n",[28,33145,33147],{"class":30,"line":33146},103,[28,33148,33149],{"class":73},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[28,33151,33153,33156,33158,33161,33164,33166,33168],{"class":30,"line":33152},104,[28,33154,33155],{"class":34},"            pre_lab",[28,33157,83],{"class":42},[28,33159,33160],{"class":34},"torch.argmax(output,",[28,33162,33163],{"class":5704},"dim",[28,33165,83],{"class":42},[28,33167,39],{"class":38},[28,33169,228],{"class":34},[28,33171,33173],{"class":30,"line":33172},105,[28,33174,33175],{"class":73},"            # 计算每一个batch的损失函数\n",[28,33177,33179,33182,33184],{"class":30,"line":33178},106,[28,33180,33181],{"class":34},"            loss",[28,33183,83],{"class":42},[28,33185,33186],{"class":34},"criterion(output,b_y)\n",[28,33188,33190],{"class":30,"line":33189},107,[28,33191,33192],{"class":73},"            # 将梯度初始化为0\n",[28,33194,33196],{"class":30,"line":33195},108,[28,33197,33198],{"class":34},"            optimizer.zero_grad()\n",[28,33200,33202],{"class":30,"line":33201},109,[28,33203,33204],{"class":73},"            # 梯度置为0后再进行反向传播\n",[28,33206,33208],{"class":30,"line":33207},110,[28,33209,33210],{"class":34},"            loss.backward()\n",[28,33212,33214],{"class":30,"line":33213},111,[28,33215,33216],{"class":73},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[28,33218,33220],{"class":30,"line":33219},112,[28,33221,33222],{"class":34},"            optimizer.step()\n",[28,33224,33226],{"class":30,"line":33225},113,[28,33227,33228],{"class":73},"            # loss.item()指的是batch的平均损失\n",[28,33230,33232,33235,33237,33240,33242,33245,33247],{"class":30,"line":33231},114,[28,33233,33234],{"class":34},"            train_loss",[28,33236,9964],{"class":42},[28,33238,33239],{"class":34},"loss.item()",[28,33241,256],{"class":42},[28,33243,33244],{"class":34},"b_x.size(",[28,33246,822],{"class":38},[28,33248,228],{"class":34},[28,33250,33252],{"class":30,"line":33251},115,[28,33253,33254],{"class":73},"            # 计算每个批次中正确预测的数量\n",[28,33256,33258,33261,33263,33266,33268],{"class":30,"line":33257},116,[28,33259,33260],{"class":34},"            train_corrects",[28,33262,9964],{"class":42},[28,33264,33265],{"class":34},"torch.sum(pre_lab",[28,33267,3439],{"class":42},[28,33269,33270],{"class":34},"b_y.data)\n",[28,33272,33274],{"class":30,"line":33273},117,[28,33275,33276],{"class":73},"            # 计算目前为止一共处理了多少样本\n",[28,33278,33280,33283,33285,33287,33289],{"class":30,"line":33279},118,[28,33281,33282],{"class":34},"            train_num",[28,33284,9964],{"class":42},[28,33286,33244],{"class":34},[28,33288,822],{"class":38},[28,33290,228],{"class":34},[28,33292,33294],{"class":30,"line":33293},119,[28,33295,33296],{"class":73},"        # 验证数据\n",[28,33298,33300,33302,33305,33307,33309],{"class":30,"line":33299},120,[28,33301,3891],{"class":42},[28,33303,33304],{"class":34}," step ,(b_x,b_y) ",[28,33306,55],{"class":42},[28,33308,32085],{"class":38},[28,33310,33311],{"class":34},"(val_dataloader):\n",[28,33313,33315],{"class":30,"line":33314},121,[28,33316,33317],{"class":73},"            # 将特征放到验证设备当中\n",[28,33319,33321,33323,33325],{"class":30,"line":33320},122,[28,33322,33088],{"class":34},[28,33324,83],{"class":42},[28,33326,33093],{"class":34},[28,33328,33330],{"class":30,"line":33329},123,[28,33331,33332],{"class":73},"            # 将标签放到放到训练设备当中\n",[28,33334,33336,33338,33340],{"class":30,"line":33335},124,[28,33337,33103],{"class":34},[28,33339,83],{"class":42},[28,33341,33108],{"class":34},[28,33343,33345],{"class":30,"line":33344},125,[28,33346,33347],{"class":73},"            # 开启验证模式，设置模型为评估模式\n",[28,33349,33351],{"class":30,"line":33350},126,[28,33352,33353],{"class":34},"            model.eval()\n",[28,33355,33357,33360],{"class":30,"line":33356},127,[28,33358,33359],{"class":42},"            with",[28,33361,33362],{"class":34}," torch.no_grad():\n",[28,33364,33366],{"class":30,"line":33365},128,[28,33367,33368],{"class":73},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[28,33370,33372,33375,33377],{"class":30,"line":33371},129,[28,33373,33374],{"class":34},"                output ",[28,33376,83],{"class":42},[28,33378,33379],{"class":34}," model(b_x)\n",[28,33381,33383],{"class":30,"line":33382},130,[28,33384,33385],{"class":73},"                # 查找每一行中最大值对应的下标\n",[28,33387,33389,33392,33394,33397,33399,33401,33403],{"class":30,"line":33388},131,[28,33390,33391],{"class":34},"                pre_lab ",[28,33393,83],{"class":42},[28,33395,33396],{"class":34}," torch.argmax(output, ",[28,33398,33163],{"class":5704},[28,33400,83],{"class":42},[28,33402,39],{"class":38},[28,33404,228],{"class":34},[28,33406,33408],{"class":30,"line":33407},132,[28,33409,33410],{"class":73},"                # 计算验证集上的当前 batch 损失\n",[28,33412,33414,33417,33419],{"class":30,"line":33413},133,[28,33415,33416],{"class":34},"                val_batch_loss ",[28,33418,83],{"class":42},[28,33420,33421],{"class":34}," criterion(output, b_y)\n",[28,33423,33425],{"class":30,"line":33424},134,[28,33426,33427],{"class":73},"                # 对损失函数进行累加（按样本数加权）\n",[28,33429,33431,33434,33436,33439,33441,33444,33446],{"class":30,"line":33430},135,[28,33432,33433],{"class":34},"                val_loss ",[28,33435,9964],{"class":42},[28,33437,33438],{"class":34}," val_batch_loss.item() ",[28,33440,256],{"class":42},[28,33442,33443],{"class":34}," b_x.size(",[28,33445,822],{"class":38},[28,33447,228],{"class":34},[28,33449,33451,33454,33456,33459,33461],{"class":30,"line":33450},136,[28,33452,33453],{"class":34},"                val_corrects ",[28,33455,9964],{"class":42},[28,33457,33458],{"class":34}," torch.sum(pre_lab ",[28,33460,3439],{"class":42},[28,33462,33463],{"class":34}," b_y.data)\n",[28,33465,33467],{"class":30,"line":33466},137,[28,33468,33469],{"class":73},"                # 当前用于验证的样本数量\n",[28,33471,33473,33476,33478,33480,33482],{"class":30,"line":33472},138,[28,33474,33475],{"class":34},"            val_num ",[28,33477,9964],{"class":42},[28,33479,33443],{"class":34},[28,33481,822],{"class":38},[28,33483,228],{"class":34},[28,33485,33487],{"class":30,"line":33486},139,[28,33488,33489],{"class":73},"        # 计算并保存每一次迭代的loss值和准确率\n",[28,33491,33493],{"class":30,"line":33492},140,[28,33494,33495],{"class":73},"        # 计算并保存训练集的loss值\n",[28,33497,33499,33502,33504],{"class":30,"line":33498},141,[28,33500,33501],{"class":34},"        train_loss_all.append(train_loss",[28,33503,43],{"class":42},[28,33505,33506],{"class":34},"train_num)\n",[28,33508,33510],{"class":30,"line":33509},142,[28,33511,33512],{"class":73},"        # 取双精度\n",[28,33514,33516],{"class":30,"line":33515},143,[28,33517,33518],{"class":73},"        # 计算并保存训练集的准确率\n",[28,33520,33522,33525,33527],{"class":30,"line":33521},144,[28,33523,33524],{"class":34},"        train_acc_all.append(train_corrects.double().item()",[28,33526,43],{"class":42},[28,33528,33506],{"class":34},[28,33530,33532],{"class":30,"line":33531},145,[28,33533,33534],{"class":73},"        # 计算并保存验证集的loss值\n",[28,33536,33538,33541,33543],{"class":30,"line":33537},146,[28,33539,33540],{"class":34},"        val_loss_all.append(val_loss",[28,33542,43],{"class":42},[28,33544,33545],{"class":34},"val_num)\n",[28,33547,33549],{"class":30,"line":33548},147,[28,33550,33551],{"class":73},"        # 计算并保存验证集的准确率\n",[28,33553,33555,33558,33560],{"class":30,"line":33554},148,[28,33556,33557],{"class":34},"        val_acc_all.append(val_corrects.double().item()",[28,33559,43],{"class":42},[28,33561,33545],{"class":34},[28,33563,33565],{"class":30,"line":33564},149,[28,33566,2890],{"emptyLinePlaceholder":562},[28,33568,33570],{"class":30,"line":33569},150,[28,33571,33572],{"class":73},"        # 打印训练一轮的loss值和准确率\n",[28,33574,33576,33578,33580,33582,33584,33587,33589,33592,33594,33597,33599,33601,33603,33605,33608,33610,33612,33615,33617,33619],{"class":30,"line":33575},151,[28,33577,32929],{"class":38},[28,33579,367],{"class":34},[28,33581,4080],{"class":735},[28,33583,32937],{"class":38},[28,33585,33586],{"class":735},"train loss:",[28,33588,1515],{"class":38},[28,33590,33591],{"class":42},":.4f",[28,33593,1565],{"class":38},[28,33595,33596],{"class":735}," train acc:",[28,33598,1515],{"class":38},[28,33600,33591],{"class":42},[28,33602,1565],{"class":38},[28,33604,4080],{"class":735},[28,33606,33607],{"class":34},".format(epoch,train_loss_all[",[28,33609,445],{"class":42},[28,33611,39],{"class":38},[28,33613,33614],{"class":34},"],train_acc_all[",[28,33616,445],{"class":42},[28,33618,39],{"class":38},[28,33620,33621],{"class":34},"]))\n",[28,33623,33625,33627,33629,33631,33633,33636,33638,33640,33642,33645,33647,33649,33651,33653,33656,33658,33660,33663,33665,33667],{"class":30,"line":33624},152,[28,33626,32929],{"class":38},[28,33628,367],{"class":34},[28,33630,4080],{"class":735},[28,33632,32937],{"class":38},[28,33634,33635],{"class":735},"val loss:",[28,33637,1515],{"class":38},[28,33639,33591],{"class":42},[28,33641,1565],{"class":38},[28,33643,33644],{"class":735}," val acc:",[28,33646,1515],{"class":38},[28,33648,33591],{"class":42},[28,33650,1565],{"class":38},[28,33652,4080],{"class":735},[28,33654,33655],{"class":34},".format(epoch,val_loss_all[",[28,33657,445],{"class":42},[28,33659,39],{"class":38},[28,33661,33662],{"class":34},"],val_acc_all[",[28,33664,445],{"class":42},[28,33666,39],{"class":38},[28,33668,33621],{"class":34},[28,33670,33672],{"class":30,"line":33671},153,[28,33673,2890],{"emptyLinePlaceholder":562},[28,33675,33677],{"class":30,"line":33676},154,[28,33678,33679],{"class":73},"        # 判断准确度--->保存最优模型\n",[28,33681,33683,33685,33688,33690,33692,33694,33696],{"class":30,"line":33682},155,[28,33684,2987],{"class":42},[28,33686,33687],{"class":34}," val_acc_all[",[28,33689,445],{"class":42},[28,33691,39],{"class":38},[28,33693,1559],{"class":34},[28,33695,1579],{"class":42},[28,33697,33698],{"class":34},"best_acc:\n",[28,33700,33702],{"class":30,"line":33701},156,[28,33703,33704],{"class":73},"            # 保存当前模型准确度\n",[28,33706,33708,33711,33713,33715,33718,33720,33722],{"class":30,"line":33707},157,[28,33709,33710],{"class":34},"            best_acc:",[28,33712,675],{"class":38},[28,33714,83],{"class":42},[28,33716,33717],{"class":34},"val_acc_all[",[28,33719,445],{"class":42},[28,33721,39],{"class":38},[28,33723,111],{"class":34},[28,33725,33727],{"class":30,"line":33726},158,[28,33728,33729],{"class":73},"            # 保存当前的准确度\n",[28,33731,33733],{"class":30,"line":33732},159,[28,33734,33735],{"class":73},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[28,33737,33739,33742,33744],{"class":30,"line":33738},160,[28,33740,33741],{"class":34},"            best_model_wts",[28,33743,83],{"class":42},[28,33745,32793],{"class":34},[28,33747,33749],{"class":30,"line":33748},161,[28,33750,2890],{"emptyLinePlaceholder":562},[28,33752,33754],{"class":30,"line":33753},162,[28,33755,33756],{"class":73},"        # 计算耗时\n",[28,33758,33760,33763,33765,33768,33770],{"class":30,"line":33759},163,[28,33761,33762],{"class":34},"        time_use",[28,33764,83],{"class":42},[28,33766,33767],{"class":34},"time.time()",[28,33769,445],{"class":42},[28,33771,33772],{"class":34},"since\n",[28,33774,33776,33778,33780,33783,33785,33788,33790,33792,33794,33796,33798,33801,33804,33807,33809,33812,33814,33816],{"class":30,"line":33775},164,[28,33777,32929],{"class":38},[28,33779,367],{"class":34},[28,33781,33782],{"class":735},"'训练和验证耗费的时间",[28,33784,1515],{"class":38},[28,33786,33787],{"class":42},":.0f",[28,33789,1565],{"class":38},[28,33791,1165],{"class":735},[28,33793,1515],{"class":38},[28,33795,33787],{"class":42},[28,33797,1565],{"class":38},[28,33799,33800],{"class":735},"s'",[28,33802,33803],{"class":34},".format(time_use",[28,33805,33806],{"class":42},"\u002F\u002F",[28,33808,1526],{"class":38},[28,33810,33811],{"class":34},",time_use",[28,33813,954],{"class":42},[28,33815,1526],{"class":38},[28,33817,30980],{"class":34},[28,33819,33821],{"class":30,"line":33820},165,[28,33822,33823],{"class":73},"    # 选择最优参数\n",[28,33825,33827],{"class":30,"line":33826},166,[28,33828,33829],{"class":73},"    # 加载最高准确率下的模型参数\n",[28,33831,33833],{"class":30,"line":33832},167,[28,33834,33835],{"class":73},"    # model.load_state_dict(best_model_wts)\n",[28,33837,33839,33842,33845],{"class":30,"line":33838},168,[28,33840,33841],{"class":34},"    torch.save(model.state_dict(best_model_wts), ",[28,33843,33844],{"class":735},"'.\u002Fbest_model.pth'",[28,33846,228],{"class":34},[28,33848,33850],{"class":30,"line":33849},169,[28,33851,33852],{"class":73},"    # 或者写成\n",[28,33854,33856],{"class":30,"line":33855},170,[28,33857,33858],{"class":73},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[28,33860,33862],{"class":30,"line":33861},171,[28,33863,33864],{"class":73},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[28,33866,33868,33871,33873,33876,33879,33881],{"class":30,"line":33867},172,[28,33869,33870],{"class":34},"    train_process",[28,33872,83],{"class":42},[28,33874,33875],{"class":34},"pd.DataFrame(",[28,33877,33878],{"class":5704},"data",[28,33880,83],{"class":42},[28,33882,2036],{"class":34},[28,33884,33886,33889,33891,33894],{"class":30,"line":33885},173,[28,33887,33888],{"class":735},"        \"epoch\"",[28,33890,1479],{"class":34},[28,33892,33893],{"class":38},"range",[28,33895,33896],{"class":34},"(num_epochs),\n",[28,33898,33900,33903],{"class":30,"line":33899},174,[28,33901,33902],{"class":735},"        \"train_loss_all\"",[28,33904,33905],{"class":34},":train_loss_all,\n",[28,33907,33909,33912],{"class":30,"line":33908},175,[28,33910,33911],{"class":735},"        \"val_loss_all\"",[28,33913,33914],{"class":34},":val_loss_all,\n",[28,33916,33918,33921],{"class":30,"line":33917},176,[28,33919,33920],{"class":735},"        \"train_acc_all\"",[28,33922,33923],{"class":34},":train_acc_all,\n",[28,33925,33927,33930],{"class":30,"line":33926},177,[28,33928,33929],{"class":735},"        \"val_acc_all\"",[28,33931,33932],{"class":34},":val_acc_all\n",[28,33934,33936],{"class":30,"line":33935},178,[28,33937,33938],{"class":34},"    })\n",[28,33940,33942],{"class":30,"line":33941},179,[28,33943,33944],{"class":73},"    # 返回训练保存的过程\n",[28,33946,33948,33950],{"class":30,"line":33947},180,[28,33949,4578],{"class":42},[28,33951,33952],{"class":34}," train_process\n",[28,33954,33956],{"class":30,"line":33955},181,[28,33957,2890],{"emptyLinePlaceholder":562},[28,33959,33961],{"class":30,"line":33960},182,[28,33962,33963],{"class":73},"# 将loss值和精度按照图片的形式展示出来\n",[28,33965,33967,33969,33972],{"class":30,"line":33966},183,[28,33968,32426],{"class":42},[28,33970,33971],{"class":2453}," matplot_acc_loss",[28,33973,33974],{"class":34},"(train_process):\n",[28,33976,33978],{"class":30,"line":33977},184,[28,33979,33980],{"class":73},"    # 设置图的大小\n",[28,33982,33984,33987,33989,33991,33993,33995,33997,33999],{"class":30,"line":33983},185,[28,33985,33986],{"class":34},"    plt.figure(",[28,33988,32172],{"class":5704},[28,33990,83],{"class":42},[28,33992,367],{"class":34},[28,33994,1121],{"class":38},[28,33996,90],{"class":34},[28,33998,103],{"class":38},[28,34000,30980],{"class":34},[28,34002,34004],{"class":30,"line":34003},186,[28,34005,34006],{"class":73},"    # 设置图中有几张图\n",[28,34008,34010],{"class":30,"line":34009},187,[28,34011,34012],{"class":73},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[28,34014,34016],{"class":30,"line":34015},188,[28,34017,34018],{"class":73},"    # ①loss图\n",[28,34020,34022,34024,34026,34028,34030,34032,34034],{"class":30,"line":34021},189,[28,34023,32206],{"class":34},[28,34025,39],{"class":38},[28,34027,90],{"class":34},[28,34029,93],{"class":38},[28,34031,90],{"class":34},[28,34033,39],{"class":38},[28,34035,228],{"class":34},[28,34037,34039],{"class":30,"line":34038},190,[28,34040,34041],{"class":73},"    # 补充:\n",[28,34043,34045],{"class":30,"line":34044},191,[28,34046,34047],{"class":73},"    # plt.subplot(nrows, ncols, index)\n",[28,34049,34051],{"class":30,"line":34050},192,[28,34052,34053],{"class":73},"    # nrows：行数\n",[28,34055,34057],{"class":30,"line":34056},193,[28,34058,34059],{"class":73},"    # ncols：列数\n",[28,34061,34063],{"class":30,"line":34062},194,[28,34064,34065],{"class":73},"    # index：目前选中第几个子图（从1开始）\n",[28,34067,34069,34072,34075,34078,34081,34083,34086,34088,34091],{"class":30,"line":34068},195,[28,34070,34071],{"class":34},"    plt.plot(train_process[",[28,34073,34074],{"class":735},"\"epoch\"",[28,34076,34077],{"class":34},"],train_process.train_loss_all,",[28,34079,34080],{"class":735},"'ro-'",[28,34082,90],{"class":34},[28,34084,34085],{"class":5704},"label",[28,34087,83],{"class":42},[28,34089,34090],{"class":735},"'train loss'",[28,34092,228],{"class":34},[28,34094,34096,34098,34100,34103,34106,34108,34110,34112,34115],{"class":30,"line":34095},196,[28,34097,34071],{"class":34},[28,34099,34074],{"class":735},[28,34101,34102],{"class":34},"],train_process.val_loss_all,",[28,34104,34105],{"class":735},"'bs--'",[28,34107,90],{"class":34},[28,34109,34085],{"class":5704},[28,34111,83],{"class":42},[28,34113,34114],{"class":735},"'val loss'",[28,34116,228],{"class":34},[28,34118,34120],{"class":30,"line":34119},197,[28,34121,34122],{"class":73},"    # 添加一个图例\n",[28,34124,34126],{"class":30,"line":34125},198,[28,34127,34128],{"class":34},"    plt.legend()\n",[28,34130,34132],{"class":30,"line":34131},199,[28,34133,34134],{"class":73},"    # 给轴添加标签\n",[28,34136,34138,34141,34144],{"class":30,"line":34137},200,[28,34139,34140],{"class":34},"    plt.xlabel(",[28,34142,34143],{"class":735},"'epoch'",[28,34145,228],{"class":34},[28,34147,34149,34152,34155],{"class":30,"line":34148},201,[28,34150,34151],{"class":34},"    plt.ylabel(",[28,34153,34154],{"class":735},"'loss'",[28,34156,228],{"class":34},[28,34158,34160],{"class":30,"line":34159},202,[28,34161,34162],{"class":73},"    # ②准确度图\n",[28,34164,34166,34168,34170,34172,34174,34176,34178],{"class":30,"line":34165},203,[28,34167,32206],{"class":34},[28,34169,39],{"class":38},[28,34171,90],{"class":34},[28,34173,93],{"class":38},[28,34175,90],{"class":34},[28,34177,93],{"class":38},[28,34179,228],{"class":34},[28,34181,34183,34185,34187,34190,34192,34194,34196,34198,34201],{"class":30,"line":34182},204,[28,34184,34071],{"class":34},[28,34186,34074],{"class":735},[28,34188,34189],{"class":34},"],train_process.train_acc_all,",[28,34191,34080],{"class":735},[28,34193,90],{"class":34},[28,34195,34085],{"class":5704},[28,34197,83],{"class":42},[28,34199,34200],{"class":735},"'train acc'",[28,34202,228],{"class":34},[28,34204,34206,34208,34210,34213,34215,34217,34219,34221,34224],{"class":30,"line":34205},205,[28,34207,34071],{"class":34},[28,34209,34074],{"class":735},[28,34211,34212],{"class":34},"],train_process.val_acc_all,",[28,34214,34105],{"class":735},[28,34216,90],{"class":34},[28,34218,34085],{"class":5704},[28,34220,83],{"class":42},[28,34222,34223],{"class":735},"'val acc'",[28,34225,228],{"class":34},[28,34227,34229],{"class":30,"line":34228},206,[28,34230,34231],{"class":73},"    # 添加图例\n",[28,34233,34235],{"class":30,"line":34234},207,[28,34236,34128],{"class":34},[28,34238,34240,34242,34244],{"class":30,"line":34239},208,[28,34241,34140],{"class":34},[28,34243,34074],{"class":735},[28,34245,228],{"class":34},[28,34247,34249,34251,34254],{"class":30,"line":34248},209,[28,34250,34151],{"class":34},[28,34252,34253],{"class":735},"\"acc\"",[28,34255,228],{"class":34},[28,34257,34259],{"class":30,"line":34258},210,[28,34260,34261],{"class":34},"    plt.show()\n",[28,34263,34265],{"class":30,"line":34264},211,[28,34266,2890],{"emptyLinePlaceholder":562},[28,34268,34270],{"class":30,"line":34269},212,[28,34271,34272],{"class":73},"# 正式开始训练:\n",[28,34274,34276,34278,34280,34282,34284],{"class":30,"line":34275},213,[28,34277,2021],{"class":42},[28,34279,31701],{"class":38},[28,34281,3439],{"class":42},[28,34283,31706],{"class":735},[28,34285,4227],{"class":34},[28,34287,34289],{"class":30,"line":34288},214,[28,34290,34291],{"class":73},"    # 将模型实例化\n",[28,34293,34295,34298,34300],{"class":30,"line":34294},215,[28,34296,34297],{"class":34},"    LeNet",[28,34299,83],{"class":42},[28,34301,34302],{"class":34},"LeNet()\n",[28,34304,34306,34309,34311],{"class":30,"line":34305},216,[28,34307,34308],{"class":34},"    train_dataloader,val_dataloader",[28,34310,83],{"class":42},[28,34312,34313],{"class":34},"train_val_data_process()\n",[28,34315,34317,34319,34321,34324,34327,34329,34331],{"class":30,"line":34316},217,[28,34318,33870],{"class":34},[28,34320,83],{"class":42},[28,34322,34323],{"class":34},"train_model_process(LeNet,train_dataloader,val_dataloader,",[28,34325,34326],{"class":5704},"num_epochs",[28,34328,83],{"class":42},[28,34330,1320],{"class":38},[28,34332,228],{"class":34},[28,34334,34336],{"class":30,"line":34335},218,[28,34337,34338],{"class":34},"    matplot_acc_loss(train_process)\n",[14,34340,34341],{},"画图的补充点学习：",[14,34343,34344],{},[420,34345],{"alt":23,"src":34346},"\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",[588,34348,34349],{"start":114},[591,34350,34351],{},"测试",[18,34353,34355],{"className":20,"code":34354,"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,34356,34357,34363,34373,34385,34395,34400,34410,34420,34424,34429,34438,34455,34467,34484,34495,34511,34516,34527,34538,34549,34556,34560,34565,34575,34580,34597,34605,34609,34614,34623,34632,34636,34641,34646,34651,34658,34663,34675,34685,34695,34700,34704,34709,34718,34723,34739,34744,34749,34754,34768,34773,34787,34791,34796,34811,34816,34828,34832,34837,34849,34854,34862,34867,34872,34882,34887,34896,34901,34906,34910,34915,34920,34936,34944,34949,34954,35013,35019,35024,35035,35043,35051,35055,35060,35064,35069,35077,35082,35098,35103,35113,35123],{"__ignoreMap":23},[28,34358,34359,34361],{"class":30,"line":31},[28,34360,536],{"class":42},[28,34362,30878],{"class":34},[28,34364,34365,34367,34369,34371],{"class":30,"line":77},[28,34366,536],{"class":42},[28,34368,31895],{"class":34},[28,34370,542],{"class":42},[28,34372,31900],{"class":34},[28,34374,34375,34377,34380,34382],{"class":30,"line":114},[28,34376,530],{"class":42},[28,34378,34379],{"class":34}," jupyter_client.consoleapp ",[28,34381,536],{"class":42},[28,34383,34384],{"class":34}," classes\n",[28,34386,34387,34389,34391,34393],{"class":30,"line":128},[28,34388,530],{"class":42},[28,34390,31878],{"class":34},[28,34392,536],{"class":42},[28,34394,31883],{"class":34},[28,34396,34397],{"class":30,"line":393},[28,34398,34399],{"class":73},"# 导入数据集\n",[28,34401,34402,34404,34406,34408],{"class":30,"line":409},[28,34403,530],{"class":42},[28,34405,31849],{"class":34},[28,34407,536],{"class":42},[28,34409,31854],{"class":34},[28,34411,34412,34414,34416,34418],{"class":30,"line":1711},[28,34413,530],{"class":42},[28,34415,32393],{"class":34},[28,34417,536],{"class":42},[28,34419,32398],{"class":34},[28,34421,34422],{"class":30,"line":1802},[28,34423,2890],{"emptyLinePlaceholder":562},[28,34425,34426],{"class":30,"line":1808},[28,34427,34428],{"class":73},"# 测试数据处理\n",[28,34430,34431,34433,34436],{"class":30,"line":1820},[28,34432,32426],{"class":42},[28,34434,34435],{"class":2453}," test_data_process",[28,34437,32432],{"class":34},[28,34439,34440,34443,34445,34447,34449,34451,34453],{"class":30,"line":2102},[28,34441,34442],{"class":34},"    test_data",[28,34444,83],{"class":42},[28,34446,31934],{"class":34},[28,34448,31937],{"class":5704},[28,34450,83],{"class":42},[28,34452,31942],{"class":735},[28,34454,31945],{"class":34},[28,34456,34457,34460,34462,34465],{"class":30,"line":2107},[28,34458,34459],{"class":5704},"                           train",[28,34461,83],{"class":42},[28,34463,34464],{"class":38},"False",[28,34466,31945],{"class":34},[28,34468,34469,34472,34474,34476,34478,34480,34482],{"class":30,"line":2113},[28,34470,34471],{"class":5704},"                           transform",[28,34473,83],{"class":42},[28,34475,31972],{"class":34},[28,34477,31975],{"class":5704},[28,34479,83],{"class":42},[28,34481,1520],{"class":38},[28,34483,31983],{"class":34},[28,34485,34486,34489,34491,34493],{"class":30,"line":2118},[28,34487,34488],{"class":5704},"                           download",[28,34490,83],{"class":42},[28,34492,31955],{"class":38},[28,34494,228],{"class":34},[28,34496,34497,34500,34502,34504,34506,34508],{"class":30,"line":2132},[28,34498,34499],{"class":34},"    test_dataloader",[28,34501,83],{"class":42},[28,34503,32013],{"class":34},[28,34505,32016],{"class":5704},[28,34507,83],{"class":42},[28,34509,34510],{"class":34},"test_data,\n",[28,34512,34513],{"class":30,"line":2137},[28,34514,34515],{"class":73},"                                    # 这里是一张一张进行测试\n",[28,34517,34518,34521,34523,34525],{"class":30,"line":2143},[28,34519,34520],{"class":5704},"                                    batch_size",[28,34522,83],{"class":42},[28,34524,39],{"class":38},[28,34526,31945],{"class":34},[28,34528,34529,34532,34534,34536],{"class":30,"line":2164},[28,34530,34531],{"class":5704},"                                    shuffle",[28,34533,83],{"class":42},[28,34535,31955],{"class":38},[28,34537,31945],{"class":34},[28,34539,34540,34543,34545,34547],{"class":30,"line":2169},[28,34541,34542],{"class":5704},"                                    num_workers",[28,34544,83],{"class":42},[28,34546,822],{"class":38},[28,34548,228],{"class":34},[28,34550,34551,34553],{"class":30,"line":2183},[28,34552,4578],{"class":42},[28,34554,34555],{"class":34}," test_dataloader\n",[28,34557,34558],{"class":30,"line":2188},[28,34559,2890],{"emptyLinePlaceholder":562},[28,34561,34562],{"class":30,"line":2217},[28,34563,34564],{"class":73},"# 定义模型测试函数\n",[28,34566,34567,34569,34572],{"class":30,"line":2222},[28,34568,32426],{"class":42},[28,34570,34571],{"class":2453}," test_model_process",[28,34573,34574],{"class":34},"(model,test_dataloader):\n",[28,34576,34577],{"class":30,"line":2239},[28,34578,34579],{"class":73},"    # 将模型放到设备当中，先进行判断\n",[28,34581,34582,34584,34586,34588,34590,34592,34594],{"class":30,"line":2244},[28,34583,31718],{"class":34},[28,34585,83],{"class":42},[28,34587,31725],{"class":735},[28,34589,2194],{"class":42},[28,34591,31730],{"class":34},[28,34593,2191],{"class":42},[28,34595,34596],{"class":735}," \"cpu\"\n",[28,34598,34599,34601,34603],{"class":30,"line":2249},[28,34600,31770],{"class":34},[28,34602,83],{"class":42},[28,34604,32768],{"class":34},[28,34606,34607],{"class":30,"line":2254},[28,34608,2890],{"emptyLinePlaceholder":562},[28,34610,34611],{"class":30,"line":2268},[28,34612,34613],{"class":73},"    # 设置初始化参数\n",[28,34615,34616,34619,34621],{"class":30,"line":2273},[28,34617,34618],{"class":34},"    test_corrects",[28,34620,83],{"class":42},[28,34622,32821],{"class":38},[28,34624,34625,34628,34630],{"class":30,"line":3067},[28,34626,34627],{"class":34},"    test_num",[28,34629,83],{"class":42},[28,34631,3574],{"class":38},[28,34633,34634],{"class":30,"line":3081},[28,34635,2890],{"emptyLinePlaceholder":562},[28,34637,34638],{"class":30,"line":3089},[28,34639,34640],{"class":73},"    # 进行模型测试\n",[28,34642,34643],{"class":30,"line":3094},[28,34644,34645],{"class":73},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[28,34647,34648],{"class":30,"line":3100},[28,34649,34650],{"class":73},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[28,34652,34653,34656],{"class":30,"line":3106},[28,34654,34655],{"class":42},"    with",[28,34657,33362],{"class":34},[28,34659,34660],{"class":30,"line":3111},[28,34661,34662],{"class":73},"        # 从数据中进行\n",[28,34664,34665,34667,34670,34672],{"class":30,"line":8436},[28,34666,3891],{"class":42},[28,34668,34669],{"class":34}," test_data_x,test_data_y ",[28,34671,55],{"class":42},[28,34673,34674],{"class":34}," test_dataloader:\n",[28,34676,34677,34680,34682],{"class":30,"line":8460},[28,34678,34679],{"class":34},"            test_data_x",[28,34681,83],{"class":42},[28,34683,34684],{"class":34},"test_data_x.to(device)\n",[28,34686,34687,34690,34692],{"class":30,"line":8465},[28,34688,34689],{"class":34},"            test_data_y",[28,34691,83],{"class":42},[28,34693,34694],{"class":34},"test_data_y.to(device)\n",[28,34696,34697],{"class":30,"line":8471},[28,34698,34699],{"class":73},"            # 设置为验证模式\n",[28,34701,34702],{"class":30,"line":8498},[28,34703,33353],{"class":34},[28,34705,34706],{"class":30,"line":8503},[28,34707,34708],{"class":73},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[28,34710,34711,34713,34715],{"class":30,"line":8509},[28,34712,33138],{"class":34},[28,34714,83],{"class":42},[28,34716,34717],{"class":34},"model(test_data_x)\n",[28,34719,34720],{"class":30,"line":8521},[28,34721,34722],{"class":73},"            # 查找每一行中最大值对应的下标\n",[28,34724,34725,34727,34729,34731,34733,34735,34737],{"class":30,"line":8533},[28,34726,33155],{"class":34},[28,34728,83],{"class":42},[28,34730,33160],{"class":34},[28,34732,33163],{"class":5704},[28,34734,83],{"class":42},[28,34736,39],{"class":38},[28,34738,228],{"class":34},[28,34740,34741],{"class":30,"line":8545},[28,34742,34743],{"class":73},"            # 计算正确率\n",[28,34745,34746],{"class":30,"line":10202},[28,34747,34748],{"class":73},"            # .data表示是一个不带梯度信息的tensor\n",[28,34750,34751],{"class":30,"line":10227},[28,34752,34753],{"class":73},"            # 如果预测正确，则准确度test_corrects加1\n",[28,34755,34756,34759,34761,34763,34765],{"class":30,"line":10250},[28,34757,34758],{"class":34},"            test_corrects",[28,34760,9964],{"class":42},[28,34762,33265],{"class":34},[28,34764,3439],{"class":42},[28,34766,34767],{"class":34},"test_data_y.data)\n",[28,34769,34770],{"class":30,"line":10274},[28,34771,34772],{"class":73},"            # 将所有的测试样本进行累计\n",[28,34774,34775,34778,34780,34783,34785],{"class":30,"line":10279},[28,34776,34777],{"class":34},"            test_num",[28,34779,9964],{"class":42},[28,34781,34782],{"class":34},"test_data_x.size(",[28,34784,822],{"class":38},[28,34786,228],{"class":34},[28,34788,34789],{"class":30,"line":10284},[28,34790,2890],{"emptyLinePlaceholder":562},[28,34792,34793],{"class":30,"line":10289},[28,34794,34795],{"class":73},"        # 计算准确度\n",[28,34797,34798,34801,34803,34806,34808],{"class":30,"line":10298},[28,34799,34800],{"class":34},"        test_acc",[28,34802,83],{"class":42},[28,34804,34805],{"class":34},"test_corrects.double().item()",[28,34807,43],{"class":42},[28,34809,34810],{"class":34},"test_num\n",[28,34812,34813],{"class":30,"line":10303},[28,34814,34815],{"class":73},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[28,34817,34818,34820,34822,34825],{"class":30,"line":10309},[28,34819,32929],{"class":38},[28,34821,367],{"class":34},[28,34823,34824],{"class":735},"\"测试的准确率：\"",[28,34826,34827],{"class":34},",test_acc)\n",[28,34829,34830],{"class":30,"line":10330},[28,34831,2890],{"emptyLinePlaceholder":562},[28,34833,34834],{"class":30,"line":10336},[28,34835,34836],{"class":73},"# 实现模型的测试功能\n",[28,34838,34839,34841,34843,34845,34847],{"class":30,"line":10350},[28,34840,2021],{"class":42},[28,34842,31701],{"class":38},[28,34844,3439],{"class":42},[28,34846,31706],{"class":735},[28,34848,4227],{"class":34},[28,34850,34851],{"class":30,"line":10356},[28,34852,34853],{"class":73},"    # 加载模型\n",[28,34855,34856,34858,34860],{"class":30,"line":10383},[28,34857,31770],{"class":34},[28,34859,83],{"class":42},[28,34861,34302],{"class":34},[28,34863,34864],{"class":30,"line":10392},[28,34865,34866],{"class":73},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[28,34868,34869],{"class":30,"line":10398},[28,34870,34871],{"class":73},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[28,34873,34874,34877,34880],{"class":30,"line":10406},[28,34875,34876],{"class":34},"    model.load_state_dict(torch.load(",[28,34878,34879],{"class":735},"'best_model.pth'",[28,34881,30980],{"class":34},[28,34883,34884],{"class":30,"line":10411},[28,34885,34886],{"class":73},"    # 数据加载\n",[28,34888,34889,34891,34893],{"class":30,"line":17090},[28,34890,34499],{"class":34},[28,34892,83],{"class":42},[28,34894,34895],{"class":34},"test_data_process()\n",[28,34897,34898],{"class":30,"line":17096},[28,34899,34900],{"class":73},"    # 加载模型测试的函数\n",[28,34902,34903],{"class":30,"line":17119},[28,34904,34905],{"class":34},"    test_model_process(model,test_dataloader)\n",[28,34907,34908],{"class":30,"line":17125},[28,34909,2890],{"emptyLinePlaceholder":562},[28,34911,34912],{"class":30,"line":17148},[28,34913,34914],{"class":73},"    # 验证集推理实现：\n",[28,34916,34917],{"class":30,"line":17162},[28,34918,34919],{"class":73},"    # 加载数据加载的更详细一些\n",[28,34921,34922,34924,34926,34928,34930,34932,34934],{"class":30,"line":17182},[28,34923,31718],{"class":34},[28,34925,83],{"class":42},[28,34927,31725],{"class":735},[28,34929,2194],{"class":42},[28,34931,31730],{"class":34},[28,34933,2191],{"class":42},[28,34935,34596],{"class":735},[28,34937,34938,34940,34942],{"class":30,"line":17188},[28,34939,31770],{"class":34},[28,34941,83],{"class":42},[28,34943,32768],{"class":34},[28,34945,34946],{"class":30,"line":17199},[28,34947,34948],{"class":73},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[28,34950,34951],{"class":30,"line":17222},[28,34952,34953],{"class":73},"    # 顺序不可改变\n",[28,34955,34956,34959,34961,34963,34966,34968,34971,34973,34976,34978,34981,34983,34986,34988,34991,34993,34996,34998,35001,35003,35006,35008,35011],{"class":30,"line":17244},[28,34957,34958],{"class":34},"    classes",[28,34960,83],{"class":42},[28,34962,35],{"class":34},[28,34964,34965],{"class":735},"'T-shirt\u002Ftop'",[28,34967,90],{"class":34},[28,34969,34970],{"class":735},"'Trouser'",[28,34972,90],{"class":34},[28,34974,34975],{"class":735},"'Pullover'",[28,34977,90],{"class":34},[28,34979,34980],{"class":735},"'Dress'",[28,34982,90],{"class":34},[28,34984,34985],{"class":735},"'Coat'",[28,34987,90],{"class":34},[28,34989,34990],{"class":735},"'Sandal'",[28,34992,90],{"class":34},[28,34994,34995],{"class":735},"'Shirt'",[28,34997,90],{"class":34},[28,34999,35000],{"class":735},"'Sneaker'",[28,35002,90],{"class":34},[28,35004,35005],{"class":735},"'Bag'",[28,35007,90],{"class":34},[28,35009,35010],{"class":735},"'Ankle boot'",[28,35012,111],{"class":34},[28,35014,35015,35017],{"class":30,"line":17249},[28,35016,34655],{"class":42},[28,35018,33362],{"class":34},[28,35020,35021],{"class":30,"line":17255},[28,35022,35023],{"class":73},"        # 将数据和标签都放到设备当中\n",[28,35025,35026,35028,35031,35033],{"class":30,"line":17269},[28,35027,3891],{"class":42},[28,35029,35030],{"class":34}," b_x,b_y ",[28,35032,55],{"class":42},[28,35034,34674],{"class":34},[28,35036,35037,35039,35041],{"class":30,"line":17282},[28,35038,33088],{"class":34},[28,35040,83],{"class":42},[28,35042,33093],{"class":34},[28,35044,35045,35047,35049],{"class":30,"line":17287},[28,35046,33103],{"class":34},[28,35048,83],{"class":42},[28,35050,33108],{"class":34},[28,35052,35053],{"class":30,"line":17301},[28,35054,2890],{"emptyLinePlaceholder":562},[28,35056,35057],{"class":30,"line":17306},[28,35058,35059],{"class":73},"            # 设置模型为验证模式\n",[28,35061,35062],{"class":30,"line":17312},[28,35063,33353],{"class":34},[28,35065,35066],{"class":30,"line":17317},[28,35067,35068],{"class":73},"            # 模型推理结果\n",[28,35070,35071,35073,35075],{"class":30,"line":17331},[28,35072,33138],{"class":34},[28,35074,83],{"class":42},[28,35076,33143],{"class":34},[28,35078,35079],{"class":30,"line":17336},[28,35080,35081],{"class":73},"            # 获取最大下标，最大下标就是类别号\n",[28,35083,35084,35086,35088,35090,35092,35094,35096],{"class":30,"line":17341},[28,35085,33155],{"class":34},[28,35087,83],{"class":42},[28,35089,33160],{"class":34},[28,35091,33163],{"class":5704},[28,35093,83],{"class":42},[28,35095,39],{"class":38},[28,35097,228],{"class":34},[28,35099,35100],{"class":30,"line":17355},[28,35101,35102],{"class":73},"            # 取出张量中的数值\n",[28,35104,35105,35108,35110],{"class":30,"line":17367},[28,35106,35107],{"class":34},"            result",[28,35109,83],{"class":42},[28,35111,35112],{"class":34},"pre_lab.item()\n",[28,35114,35115,35118,35120],{"class":30,"line":17372},[28,35116,35117],{"class":34},"            label",[28,35119,83],{"class":42},[28,35121,35122],{"class":34},"b_y.item()\n",[28,35124,35125,35128,35130,35133,35136,35139,35141,35144],{"class":30,"line":17385},[28,35126,35127],{"class":38},"            print",[28,35129,367],{"class":34},[28,35131,35132],{"class":735},"\"预测值：\"",[28,35134,35135],{"class":34},",classes[result],",[28,35137,35138],{"class":735},"\"------\"",[28,35140,90],{"class":34},[28,35142,35143],{"class":735},"\"真实值：\"",[28,35145,35146],{"class":34},",classes[label])\n",[14,35148,35149],{},"（2）AlexNet",[588,35151,35152],{},[591,35153,35154],{},"神经网络构建",[18,35156,35158],{"className":20,"code":35157,"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,35159,35160,35166,35176,35186,35198,35202,35219,35227,35242,35254,35296,35323,35366,35392,35436,35479,35522,35549,35553,35563,35568,35596,35615,35634,35638,35643,35651,35666,35676,35690,35700,35715,35730,35745,35756,35760,35765,35775,35790,35795,35809,35824,35836,35841,35852,35857,35863,35868,35880,35900,35905,35914],{"__ignoreMap":23},[28,35161,35162,35164],{"class":30,"line":31},[28,35163,536],{"class":42},[28,35165,30878],{"class":34},[28,35167,35168,35170,35172,35174],{"class":30,"line":77},[28,35169,530],{"class":42},[28,35171,31222],{"class":34},[28,35173,536],{"class":42},[28,35175,31227],{"class":34},[28,35177,35178,35180,35182,35184],{"class":30,"line":114},[28,35179,530],{"class":42},[28,35181,31239],{"class":34},[28,35183,536],{"class":42},[28,35185,31244],{"class":34},[28,35187,35188,35190,35193,35195],{"class":30,"line":128},[28,35189,536],{"class":42},[28,35191,35192],{"class":34}," torch.nn.functional ",[28,35194,542],{"class":42},[28,35196,35197],{"class":34}," F\n",[28,35199,35200],{"class":30,"line":393},[28,35201,2890],{"emptyLinePlaceholder":562},[28,35203,35204,35206,35209,35211,35213,35215,35217],{"class":30,"line":409},[28,35205,15180],{"class":42},[28,35207,35208],{"class":2453}," AlexNet",[28,35210,367],{"class":34},[28,35212,31260],{"class":2453},[28,35214,1179],{"class":34},[28,35216,31265],{"class":2453},[28,35218,372],{"class":34},[28,35220,35221,35223,35225],{"class":30,"line":1711},[28,35222,31282],{"class":42},[28,35224,31285],{"class":38},[28,35226,31288],{"class":34},[28,35228,35229,35231,35234,35236,35238,35240],{"class":30,"line":1802},[28,35230,31298],{"class":38},[28,35232,35233],{"class":34},"(AlexNet,",[28,35235,31304],{"class":38},[28,35237,31307],{"class":34},[28,35239,31310],{"class":38},[28,35241,2466],{"class":34},[28,35243,35244,35246,35249,35251],{"class":30,"line":1808},[28,35245,31326],{"class":38},[28,35247,35248],{"class":34},".ReLu",[28,35250,83],{"class":42},[28,35252,35253],{"class":34},"nn.ReLU()\n",[28,35255,35256,35258,35260,35262,35264,35266,35268,35270,35272,35274,35276,35278,35280,35282,35284,35286,35288,35290,35292,35294],{"class":30,"line":1820},[28,35257,31326],{"class":38},[28,35259,31329],{"class":34},[28,35261,83],{"class":42},[28,35263,31334],{"class":34},[28,35265,31337],{"class":5704},[28,35267,83],{"class":42},[28,35269,39],{"class":38},[28,35271,90],{"class":34},[28,35273,31346],{"class":5704},[28,35275,83],{"class":42},[28,35277,840],{"class":38},[28,35279,90],{"class":34},[28,35281,31355],{"class":5704},[28,35283,83],{"class":42},[28,35285,1095],{"class":38},[28,35287,90],{"class":34},[28,35289,31410],{"class":5704},[28,35291,83],{"class":42},[28,35293,103],{"class":38},[28,35295,228],{"class":34},[28,35297,35298,35300,35302,35304,35307,35309,35311,35313,35315,35317,35319,35321],{"class":30,"line":2102},[28,35299,31326],{"class":38},[28,35301,31394],{"class":34},[28,35303,83],{"class":42},[28,35305,35306],{"class":34},"nn.MaxPool2d(",[28,35308,31355],{"class":5704},[28,35310,83],{"class":42},[28,35312,98],{"class":38},[28,35314,90],{"class":34},[28,35316,31410],{"class":5704},[28,35318,83],{"class":42},[28,35320,93],{"class":38},[28,35322,228],{"class":34},[28,35324,35325,35327,35329,35331,35333,35335,35337,35339,35341,35343,35345,35348,35350,35352,35354,35356,35358,35360,35362,35364],{"class":30,"line":2107},[28,35326,31326],{"class":38},[28,35328,31423],{"class":34},[28,35330,83],{"class":42},[28,35332,31334],{"class":34},[28,35334,31337],{"class":5704},[28,35336,83],{"class":42},[28,35338,840],{"class":38},[28,35340,90],{"class":34},[28,35342,31346],{"class":5704},[28,35344,83],{"class":42},[28,35346,35347],{"class":38},"256",[28,35349,90],{"class":34},[28,35351,31355],{"class":5704},[28,35353,83],{"class":42},[28,35355,108],{"class":38},[28,35357,90],{"class":34},[28,35359,31364],{"class":5704},[28,35361,83],{"class":42},[28,35363,93],{"class":38},[28,35365,228],{"class":34},[28,35367,35368,35370,35372,35374,35376,35378,35380,35382,35384,35386,35388,35390],{"class":30,"line":2113},[28,35369,31326],{"class":38},[28,35371,31458],{"class":34},[28,35373,83],{"class":42},[28,35375,35306],{"class":34},[28,35377,31355],{"class":5704},[28,35379,83],{"class":42},[28,35381,98],{"class":38},[28,35383,90],{"class":34},[28,35385,31410],{"class":5704},[28,35387,83],{"class":42},[28,35389,93],{"class":38},[28,35391,228],{"class":34},[28,35393,35394,35396,35399,35401,35403,35405,35407,35409,35411,35413,35415,35418,35420,35422,35424,35426,35428,35430,35432,35434],{"class":30,"line":2118},[28,35395,31326],{"class":38},[28,35397,35398],{"class":34},".c5",[28,35400,83],{"class":42},[28,35402,31334],{"class":34},[28,35404,31337],{"class":5704},[28,35406,83],{"class":42},[28,35408,35347],{"class":38},[28,35410,90],{"class":34},[28,35412,31346],{"class":5704},[28,35414,83],{"class":42},[28,35416,35417],{"class":38},"384",[28,35419,90],{"class":34},[28,35421,31355],{"class":5704},[28,35423,83],{"class":42},[28,35425,98],{"class":38},[28,35427,90],{"class":34},[28,35429,31364],{"class":5704},[28,35431,83],{"class":42},[28,35433,39],{"class":38},[28,35435,228],{"class":34},[28,35437,35438,35440,35443,35445,35447,35449,35451,35453,35455,35457,35459,35461,35463,35465,35467,35469,35471,35473,35475,35477],{"class":30,"line":2132},[28,35439,31326],{"class":38},[28,35441,35442],{"class":34},".c6",[28,35444,83],{"class":42},[28,35446,31334],{"class":34},[28,35448,31337],{"class":5704},[28,35450,83],{"class":42},[28,35452,35417],{"class":38},[28,35454,90],{"class":34},[28,35456,31346],{"class":5704},[28,35458,83],{"class":42},[28,35460,35417],{"class":38},[28,35462,90],{"class":34},[28,35464,31355],{"class":5704},[28,35466,83],{"class":42},[28,35468,98],{"class":38},[28,35470,90],{"class":34},[28,35472,31364],{"class":5704},[28,35474,83],{"class":42},[28,35476,39],{"class":38},[28,35478,228],{"class":34},[28,35480,35481,35483,35486,35488,35490,35492,35494,35496,35498,35500,35502,35504,35506,35508,35510,35512,35514,35516,35518,35520],{"class":30,"line":2137},[28,35482,31326],{"class":38},[28,35484,35485],{"class":34},".c7",[28,35487,83],{"class":42},[28,35489,31334],{"class":34},[28,35491,31337],{"class":5704},[28,35493,83],{"class":42},[28,35495,35417],{"class":38},[28,35497,90],{"class":34},[28,35499,31346],{"class":5704},[28,35501,83],{"class":42},[28,35503,35347],{"class":38},[28,35505,90],{"class":34},[28,35507,31355],{"class":5704},[28,35509,83],{"class":42},[28,35511,98],{"class":38},[28,35513,90],{"class":34},[28,35515,31364],{"class":5704},[28,35517,83],{"class":42},[28,35519,39],{"class":38},[28,35521,228],{"class":34},[28,35523,35524,35526,35529,35531,35533,35535,35537,35539,35541,35543,35545,35547],{"class":30,"line":2143},[28,35525,31326],{"class":38},[28,35527,35528],{"class":34},".s8",[28,35530,83],{"class":42},[28,35532,35306],{"class":34},[28,35534,31355],{"class":5704},[28,35536,83],{"class":42},[28,35538,98],{"class":38},[28,35540,90],{"class":34},[28,35542,31410],{"class":5704},[28,35544,83],{"class":42},[28,35546,93],{"class":38},[28,35548,228],{"class":34},[28,35550,35551],{"class":30,"line":2164},[28,35552,31483],{"class":73},[28,35554,35555,35557,35559,35561],{"class":30,"line":2169},[28,35556,31326],{"class":38},[28,35558,31490],{"class":34},[28,35560,83],{"class":42},[28,35562,31495],{"class":34},[28,35564,35565],{"class":30,"line":2183},[28,35566,35567],{"class":73},"       # 定义全连接层\n",[28,35569,35570,35572,35575,35577,35579,35581,35583,35585,35587,35589,35591,35594],{"class":30,"line":2188},[28,35571,31326],{"class":38},[28,35573,35574],{"class":34},".f1",[28,35576,83],{"class":42},[28,35578,31512],{"class":34},[28,35580,970],{"class":38},[28,35582,256],{"class":42},[28,35584,970],{"class":38},[28,35586,256],{"class":42},[28,35588,35347],{"class":38},[28,35590,90],{"class":34},[28,35592,35593],{"class":38},"4096",[28,35595,228],{"class":34},[28,35597,35598,35600,35603,35605,35607,35609,35611,35613],{"class":30,"line":2217},[28,35599,31326],{"class":38},[28,35601,35602],{"class":34},".f2",[28,35604,83],{"class":42},[28,35606,31512],{"class":34},[28,35608,35593],{"class":38},[28,35610,90],{"class":34},[28,35612,35593],{"class":38},[28,35614,228],{"class":34},[28,35616,35617,35619,35622,35624,35626,35628,35630,35632],{"class":30,"line":2222},[28,35618,31326],{"class":38},[28,35620,35621],{"class":34},".f3",[28,35623,83],{"class":42},[28,35625,31512],{"class":34},[28,35627,35593],{"class":38},[28,35629,90],{"class":34},[28,35631,225],{"class":38},[28,35633,228],{"class":34},[28,35635,35636],{"class":30,"line":2239},[28,35637,2890],{"emptyLinePlaceholder":562},[28,35639,35640],{"class":30,"line":2244},[28,35641,35642],{"class":73},"    # 定义前向传播\n",[28,35644,35645,35647,35649],{"class":30,"line":2249},[28,35646,31282],{"class":42},[28,35648,31574],{"class":2453},[28,35650,31577],{"class":34},[28,35652,35653,35655,35657,35659,35662,35664],{"class":30,"line":2254},[28,35654,31582],{"class":34},[28,35656,83],{"class":42},[28,35658,31304],{"class":38},[28,35660,35661],{"class":34},".ReLu(",[28,35663,31304],{"class":38},[28,35665,31594],{"class":34},[28,35667,35668,35670,35672,35674],{"class":30,"line":2268},[28,35669,31582],{"class":34},[28,35671,83],{"class":42},[28,35673,31304],{"class":38},[28,35675,31605],{"class":34},[28,35677,35678,35680,35682,35684,35686,35688],{"class":30,"line":2273},[28,35679,31582],{"class":34},[28,35681,83],{"class":42},[28,35683,31304],{"class":38},[28,35685,35661],{"class":34},[28,35687,31304],{"class":38},[28,35689,31620],{"class":34},[28,35691,35692,35694,35696,35698],{"class":30,"line":3067},[28,35693,31582],{"class":34},[28,35695,83],{"class":42},[28,35697,31304],{"class":38},[28,35699,31631],{"class":34},[28,35701,35702,35704,35706,35708,35710,35712],{"class":30,"line":3081},[28,35703,31582],{"class":34},[28,35705,83],{"class":42},[28,35707,31304],{"class":38},[28,35709,35661],{"class":34},[28,35711,31304],{"class":38},[28,35713,35714],{"class":34},".c5(x))\n",[28,35716,35717,35719,35721,35723,35725,35727],{"class":30,"line":3089},[28,35718,31582],{"class":34},[28,35720,83],{"class":42},[28,35722,31304],{"class":38},[28,35724,35661],{"class":34},[28,35726,31304],{"class":38},[28,35728,35729],{"class":34},".c6(x))\n",[28,35731,35732,35734,35736,35738,35740,35742],{"class":30,"line":3094},[28,35733,31582],{"class":34},[28,35735,83],{"class":42},[28,35737,31304],{"class":38},[28,35739,35661],{"class":34},[28,35741,31304],{"class":38},[28,35743,35744],{"class":34},".c7(x))\n",[28,35746,35747,35749,35751,35753],{"class":30,"line":3100},[28,35748,31582],{"class":34},[28,35750,83],{"class":42},[28,35752,31304],{"class":38},[28,35754,35755],{"class":34},".s8(x)\n",[28,35757,35758],{"class":30,"line":3106},[28,35759,2890],{"emptyLinePlaceholder":562},[28,35761,35762],{"class":30,"line":3111},[28,35763,35764],{"class":73},"        # 展平加线性全连接层\n",[28,35766,35767,35769,35771,35773],{"class":30,"line":8436},[28,35768,31582],{"class":34},[28,35770,83],{"class":42},[28,35772,31304],{"class":38},[28,35774,31642],{"class":34},[28,35776,35777,35779,35781,35783,35785,35787],{"class":30,"line":8460},[28,35778,31582],{"class":34},[28,35780,83],{"class":42},[28,35782,31304],{"class":38},[28,35784,35661],{"class":34},[28,35786,31304],{"class":38},[28,35788,35789],{"class":34},".f1(x))\n",[28,35791,35792],{"class":30,"line":8465},[28,35793,35794],{"class":73},"        # 还需要dropout对神经元随机进行失活\n",[28,35796,35797,35799,35801,35804,35807],{"class":30,"line":8471},[28,35798,31582],{"class":34},[28,35800,83],{"class":42},[28,35802,35803],{"class":34},"F.dropout(x,",[28,35805,35806],{"class":38},"0.5",[28,35808,228],{"class":34},[28,35810,35811,35813,35815,35817,35819,35821],{"class":30,"line":8498},[28,35812,31582],{"class":34},[28,35814,83],{"class":42},[28,35816,31304],{"class":38},[28,35818,35661],{"class":34},[28,35820,31304],{"class":38},[28,35822,35823],{"class":34},".f2(x))\n",[28,35825,35826,35828,35830,35832,35834],{"class":30,"line":8503},[28,35827,31582],{"class":34},[28,35829,83],{"class":42},[28,35831,35803],{"class":34},[28,35833,35806],{"class":38},[28,35835,228],{"class":34},[28,35837,35838],{"class":30,"line":8509},[28,35839,35840],{"class":73},"        # 直接输出\n",[28,35842,35843,35845,35847,35849],{"class":30,"line":8521},[28,35844,31582],{"class":34},[28,35846,83],{"class":42},[28,35848,31304],{"class":38},[28,35850,35851],{"class":34},".f3(x)\n",[28,35853,35854],{"class":30,"line":8533},[28,35855,35856],{"class":73},"        # 前向传播输出\n",[28,35858,35859,35861],{"class":30,"line":8545},[28,35860,15238],{"class":42},[28,35862,31690],{"class":34},[28,35864,35865],{"class":30,"line":10202},[28,35866,35867],{"class":73},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[28,35869,35870,35872,35874,35876,35878],{"class":30,"line":10227},[28,35871,2021],{"class":42},[28,35873,31701],{"class":38},[28,35875,3439],{"class":42},[28,35877,31706],{"class":735},[28,35879,4227],{"class":34},[28,35881,35882,35884,35886,35888,35890,35892,35894,35896,35898],{"class":30,"line":10250},[28,35883,31718],{"class":34},[28,35885,83],{"class":42},[28,35887,30934],{"class":34},[28,35889,31725],{"class":735},[28,35891,2194],{"class":42},[28,35893,31730],{"class":34},[28,35895,2191],{"class":42},[28,35897,30959],{"class":735},[28,35899,228],{"class":34},[28,35901,35902],{"class":30,"line":10274},[28,35903,35904],{"class":73},"    # 模型实例化，然后将实例化的模型放到设备中\n",[28,35906,35907,35909,35911],{"class":30,"line":10279},[28,35908,31770],{"class":34},[28,35910,83],{"class":42},[28,35912,35913],{"class":34},"AlexNet().to(device)\n",[28,35915,35916,35918,35920,35922,35924,35927,35929,35931],{"class":30,"line":10284},[28,35917,31780],{"class":38},[28,35919,31783],{"class":34},[28,35921,39],{"class":38},[28,35923,90],{"class":34},[28,35925,35926],{"class":38},"227",[28,35928,90],{"class":34},[28,35930,35926],{"class":38},[28,35932,31796],{"class":34},[588,35934,35935],{"start":77},[591,35936,31809],{},[18,35938,35940],{"className":20,"code":35939,"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,35941,35942,35948,35954,35964,35970,35980,35990,36000,36010,36020,36024,36035,36045,36049,36053,36057,36065,36077,36087,36103,36113,36145,36159,36169,36179,36183,36193,36207,36217,36227,36237,36243,36247,36251,36255,36259,36263,36271,36291,36295,36299,36303,36307,36311,36327,36331,36335,36343,36347,36351,36359,36363,36367,36371,36379,36383,36387,36391,36395,36403,36407,36415,36419,36427,36431,36439,36443,36451,36455,36459,36467,36471,36475,36479,36491,36515,36529,36533,36537,36541,36549,36553,36561,36565,36573,36577,36585,36589,36597,36601,36609,36613,36625,36629,36637,36641,36649,36653,36657,36661,36665,36673,36677,36693,36697,36705,36709,36713,36717,36721,36725,36729,36733,36749,36753,36765,36769,36781,36785,36797,36801,36809,36813,36821,36825,36829,36834,36840,36844,36853,36857,36874,36878,36887,36891,36909,36922,36927,36940,36944,36948,36956,36960,36964,36972,36976,36984,36988,36996,37000,37004,37046,37088,37092,37096,37112,37116,37132,37136,37140,37148,37152,37156,37168,37206,37211,37216,37225,37229,37243,37253,37259,37265,37271,37277,37281,37285,37291,37295,37299,37307,37311,37329,37333,37337,37341,37357,37361,37365,37369,37373,37377,37397,37417,37421,37425,37429,37437,37445,37449,37465,37485,37505,37509,37513,37521,37529,37533,37537,37541,37553,37557,37567,37575,37592],{"__ignoreMap":23},[28,35943,35944,35946],{"class":30,"line":31},[28,35945,536],{"class":42},[28,35947,32301],{"class":34},[28,35949,35950,35952],{"class":30,"line":77},[28,35951,536],{"class":42},[28,35953,32308],{"class":34},[28,35955,35956,35958,35960,35962],{"class":30,"line":114},[28,35957,536],{"class":42},[28,35959,32319],{"class":34},[28,35961,542],{"class":42},[28,35963,32324],{"class":34},[28,35965,35966,35968],{"class":30,"line":128},[28,35967,536],{"class":42},[28,35969,30878],{"class":34},[28,35971,35972,35974,35976,35978],{"class":30,"line":393},[28,35973,530],{"class":42},[28,35975,31895],{"class":34},[28,35977,536],{"class":42},[28,35979,32341],{"class":34},[28,35981,35982,35984,35986,35988],{"class":30,"line":409},[28,35983,530],{"class":42},[28,35985,31849],{"class":34},[28,35987,536],{"class":42},[28,35989,31854],{"class":34},[28,35991,35992,35994,35996,35998],{"class":30,"line":1711},[28,35993,530],{"class":42},[28,35995,31878],{"class":34},[28,35997,536],{"class":42},[28,35999,31883],{"class":34},[28,36001,36002,36004,36006,36008],{"class":30,"line":1802},[28,36003,536],{"class":42},[28,36005,31895],{"class":34},[28,36007,542],{"class":42},[28,36009,31900],{"class":34},[28,36011,36012,36014,36016,36018],{"class":30,"line":1808},[28,36013,536],{"class":42},[28,36015,31912],{"class":34},[28,36017,542],{"class":42},[28,36019,545],{"class":34},[28,36021,36022],{"class":30,"line":1820},[28,36023,32386],{"class":73},[28,36025,36026,36028,36030,36032],{"class":30,"line":2102},[28,36027,530],{"class":42},[28,36029,32393],{"class":34},[28,36031,536],{"class":42},[28,36033,36034],{"class":34}," AlexNet\n",[28,36036,36037,36039,36041,36043],{"class":30,"line":2107},[28,36038,530],{"class":42},[28,36040,31222],{"class":34},[28,36042,536],{"class":42},[28,36044,31227],{"class":34},[28,36046,36047],{"class":30,"line":2113},[28,36048,2890],{"emptyLinePlaceholder":562},[28,36050,36051],{"class":30,"line":2118},[28,36052,2890],{"emptyLinePlaceholder":562},[28,36054,36055],{"class":30,"line":2132},[28,36056,32421],{"class":73},[28,36058,36059,36061,36063],{"class":30,"line":2137},[28,36060,32426],{"class":42},[28,36062,32429],{"class":2453},[28,36064,32432],{"class":34},[28,36066,36067,36069,36071,36073,36075],{"class":30,"line":2143},[28,36068,32437],{"class":34},[28,36070,83],{"class":42},[28,36072,31934],{"class":34},[28,36074,31942],{"class":735},[28,36076,31945],{"class":34},[28,36078,36079,36081,36083,36085],{"class":30,"line":2164},[28,36080,32450],{"class":5704},[28,36082,83],{"class":42},[28,36084,31955],{"class":38},[28,36086,31945],{"class":34},[28,36088,36089,36091,36093,36095,36097,36099,36101],{"class":30,"line":2169},[28,36090,32461],{"class":5704},[28,36092,83],{"class":42},[28,36094,31972],{"class":34},[28,36096,31975],{"class":5704},[28,36098,83],{"class":42},[28,36100,35926],{"class":38},[28,36102,31983],{"class":34},[28,36104,36105,36107,36109,36111],{"class":30,"line":2183},[28,36106,32478],{"class":5704},[28,36108,83],{"class":42},[28,36110,31955],{"class":38},[28,36112,228],{"class":34},[28,36114,36115,36117,36119,36121,36123,36125,36127,36129,36131,36133,36135,36137,36139,36141,36143],{"class":30,"line":2188},[28,36116,32489],{"class":34},[28,36118,83],{"class":42},[28,36120,32494],{"class":34},[28,36122,32497],{"class":38},[28,36124,367],{"class":34},[28,36126,32502],{"class":38},[28,36128,256],{"class":42},[28,36130,7846],{"class":38},[28,36132,32509],{"class":34},[28,36134,32497],{"class":38},[28,36136,367],{"class":34},[28,36138,32516],{"class":38},[28,36140,256],{"class":42},[28,36142,7846],{"class":38},[28,36144,32523],{"class":34},[28,36146,36147,36149,36151,36153,36155,36157],{"class":30,"line":2217},[28,36148,32528],{"class":34},[28,36150,83],{"class":42},[28,36152,32533],{"class":34},[28,36154,32016],{"class":5704},[28,36156,83],{"class":42},[28,36158,32021],{"class":34},[28,36160,36161,36163,36165,36167],{"class":30,"line":2222},[28,36162,32544],{"class":5704},[28,36164,83],{"class":42},[28,36166,32549],{"class":38},[28,36168,31945],{"class":34},[28,36170,36171,36173,36175,36177],{"class":30,"line":2239},[28,36172,32556],{"class":5704},[28,36174,83],{"class":42},[28,36176,31955],{"class":38},[28,36178,31945],{"class":34},[28,36180,36181],{"class":30,"line":2244},[28,36182,32567],{"class":73},[28,36184,36185,36187,36189,36191],{"class":30,"line":2249},[28,36186,32572],{"class":5704},[28,36188,83],{"class":42},[28,36190,1020],{"class":38},[28,36192,228],{"class":34},[28,36194,36195,36197,36199,36201,36203,36205],{"class":30,"line":2254},[28,36196,32583],{"class":34},[28,36198,83],{"class":42},[28,36200,32013],{"class":34},[28,36202,32016],{"class":5704},[28,36204,83],{"class":42},[28,36206,32594],{"class":34},[28,36208,36209,36211,36213,36215],{"class":30,"line":2268},[28,36210,32599],{"class":5704},[28,36212,83],{"class":42},[28,36214,32549],{"class":38},[28,36216,31945],{"class":34},[28,36218,36219,36221,36223,36225],{"class":30,"line":2273},[28,36220,32610],{"class":5704},[28,36222,83],{"class":42},[28,36224,31955],{"class":38},[28,36226,31945],{"class":34},[28,36228,36229,36231,36233,36235],{"class":30,"line":3067},[28,36230,32621],{"class":5704},[28,36232,83],{"class":42},[28,36234,1020],{"class":38},[28,36236,228],{"class":34},[28,36238,36239,36241],{"class":30,"line":3081},[28,36240,4578],{"class":42},[28,36242,32634],{"class":34},[28,36244,36245],{"class":30,"line":3089},[28,36246,2890],{"emptyLinePlaceholder":562},[28,36248,36249],{"class":30,"line":3094},[28,36250,32643],{"class":73},[28,36252,36253],{"class":30,"line":3100},[28,36254,32648],{"class":73},[28,36256,36257],{"class":30,"line":3106},[28,36258,2890],{"emptyLinePlaceholder":562},[28,36260,36261],{"class":30,"line":3111},[28,36262,32657],{"class":73},[28,36264,36265,36267,36269],{"class":30,"line":8436},[28,36266,32426],{"class":42},[28,36268,32664],{"class":2453},[28,36270,32667],{"class":34},[28,36272,36273,36275,36277,36279,36281,36283,36285,36287,36289],{"class":30,"line":8460},[28,36274,31718],{"class":34},[28,36276,83],{"class":42},[28,36278,30934],{"class":34},[28,36280,31725],{"class":735},[28,36282,2194],{"class":42},[28,36284,31730],{"class":34},[28,36286,2191],{"class":42},[28,36288,32686],{"class":735},[28,36290,228],{"class":34},[28,36292,36293],{"class":30,"line":8465},[28,36294,2890],{"emptyLinePlaceholder":562},[28,36296,36297],{"class":30,"line":8471},[28,36298,2890],{"emptyLinePlaceholder":562},[28,36300,36301],{"class":30,"line":8498},[28,36302,32701],{"class":73},[28,36304,36305],{"class":30,"line":8503},[28,36306,32706],{"class":73},[28,36308,36309],{"class":30,"line":8509},[28,36310,32711],{"class":73},[28,36312,36313,36315,36317,36319,36321,36323,36325],{"class":30,"line":8521},[28,36314,32716],{"class":34},[28,36316,83],{"class":42},[28,36318,32721],{"class":34},[28,36320,32724],{"class":5704},[28,36322,83],{"class":42},[28,36324,32729],{"class":38},[28,36326,228],{"class":34},[28,36328,36329],{"class":30,"line":8533},[28,36330,2890],{"emptyLinePlaceholder":562},[28,36332,36333],{"class":30,"line":8545},[28,36334,32740],{"class":73},[28,36336,36337,36339,36341],{"class":30,"line":10202},[28,36338,32745],{"class":34},[28,36340,83],{"class":42},[28,36342,32750],{"class":34},[28,36344,36345],{"class":30,"line":10227},[28,36346,2890],{"emptyLinePlaceholder":562},[28,36348,36349],{"class":30,"line":10250},[28,36350,32759],{"class":73},[28,36352,36353,36355,36357],{"class":30,"line":10274},[28,36354,31770],{"class":34},[28,36356,83],{"class":42},[28,36358,32768],{"class":34},[28,36360,36361],{"class":30,"line":10279},[28,36362,32773],{"class":73},[28,36364,36365],{"class":30,"line":10284},[28,36366,32778],{"class":73},[28,36368,36369],{"class":30,"line":10289},[28,36370,32783],{"class":73},[28,36372,36373,36375,36377],{"class":30,"line":10298},[28,36374,32788],{"class":34},[28,36376,83],{"class":42},[28,36378,32793],{"class":34},[28,36380,36381],{"class":30,"line":10303},[28,36382,2890],{"emptyLinePlaceholder":562},[28,36384,36385],{"class":30,"line":10309},[28,36386,2890],{"emptyLinePlaceholder":562},[28,36388,36389],{"class":30,"line":10330},[28,36390,32806],{"class":73},[28,36392,36393],{"class":30,"line":10336},[28,36394,32811],{"class":73},[28,36396,36397,36399,36401],{"class":30,"line":10350},[28,36398,32816],{"class":34},[28,36400,83],{"class":42},[28,36402,32821],{"class":38},[28,36404,36405],{"class":30,"line":10356},[28,36406,32826],{"class":73},[28,36408,36409,36411,36413],{"class":30,"line":10383},[28,36410,32831],{"class":34},[28,36412,83],{"class":42},[28,36414,32836],{"class":34},[28,36416,36417],{"class":30,"line":10392},[28,36418,32841],{"class":73},[28,36420,36421,36423,36425],{"class":30,"line":10398},[28,36422,32846],{"class":34},[28,36424,83],{"class":42},[28,36426,32836],{"class":34},[28,36428,36429],{"class":30,"line":10406},[28,36430,32855],{"class":73},[28,36432,36433,36435,36437],{"class":30,"line":10411},[28,36434,32860],{"class":34},[28,36436,83],{"class":42},[28,36438,32836],{"class":34},[28,36440,36441],{"class":30,"line":17090},[28,36442,32869],{"class":73},[28,36444,36445,36447,36449],{"class":30,"line":17096},[28,36446,32874],{"class":34},[28,36448,83],{"class":42},[28,36450,32836],{"class":34},[28,36452,36453],{"class":30,"line":17119},[28,36454,2890],{"emptyLinePlaceholder":562},[28,36456,36457],{"class":30,"line":17125},[28,36458,32887],{"class":73},[28,36460,36461,36463,36465],{"class":30,"line":17148},[28,36462,32892],{"class":34},[28,36464,83],{"class":42},[28,36466,32897],{"class":34},[28,36468,36469],{"class":30,"line":17162},[28,36470,2890],{"emptyLinePlaceholder":562},[28,36472,36473],{"class":30,"line":17182},[28,36474,2890],{"emptyLinePlaceholder":562},[28,36476,36477],{"class":30,"line":17188},[28,36478,32910],{"class":73},[28,36480,36481,36483,36485,36487,36489],{"class":30,"line":17199},[28,36482,377],{"class":42},[28,36484,32917],{"class":34},[28,36486,55],{"class":42},[28,36488,364],{"class":38},[28,36490,32924],{"class":34},[28,36492,36493,36495,36497,36499,36501,36503,36505,36507,36509,36511,36513],{"class":30,"line":17222},[28,36494,32929],{"class":38},[28,36496,367],{"class":34},[28,36498,32934],{"class":735},[28,36500,32937],{"class":38},[28,36502,43],{"class":735},[28,36504,32937],{"class":38},[28,36506,880],{"class":735},[28,36508,32946],{"class":34},[28,36510,445],{"class":42},[28,36512,39],{"class":38},[28,36514,30980],{"class":34},[28,36516,36517,36519,36521,36523,36525,36527],{"class":30,"line":17244},[28,36518,32929],{"class":38},[28,36520,367],{"class":34},[28,36522,32961],{"class":735},[28,36524,256],{"class":42},[28,36526,225],{"class":38},[28,36528,228],{"class":34},[28,36530,36531],{"class":30,"line":17249},[28,36532,2890],{"emptyLinePlaceholder":562},[28,36534,36535],{"class":30,"line":17255},[28,36536,32976],{"class":73},[28,36538,36539],{"class":30,"line":17269},[28,36540,32981],{"class":73},[28,36542,36543,36545,36547],{"class":30,"line":17282},[28,36544,32986],{"class":34},[28,36546,83],{"class":42},[28,36548,32821],{"class":38},[28,36550,36551],{"class":30,"line":17287},[28,36552,32995],{"class":73},[28,36554,36555,36557,36559],{"class":30,"line":17301},[28,36556,33000],{"class":34},[28,36558,83],{"class":42},[28,36560,3574],{"class":38},[28,36562,36563],{"class":30,"line":17306},[28,36564,33009],{"class":73},[28,36566,36567,36569,36571],{"class":30,"line":17312},[28,36568,33014],{"class":34},[28,36570,83],{"class":42},[28,36572,32821],{"class":38},[28,36574,36575],{"class":30,"line":17317},[28,36576,33023],{"class":73},[28,36578,36579,36581,36583],{"class":30,"line":17331},[28,36580,33028],{"class":34},[28,36582,83],{"class":42},[28,36584,3574],{"class":38},[28,36586,36587],{"class":30,"line":17336},[28,36588,33037],{"class":73},[28,36590,36591,36593,36595],{"class":30,"line":17341},[28,36592,33042],{"class":34},[28,36594,83],{"class":42},[28,36596,3574],{"class":38},[28,36598,36599],{"class":30,"line":17355},[28,36600,33051],{"class":73},[28,36602,36603,36605,36607],{"class":30,"line":17367},[28,36604,33056],{"class":34},[28,36606,83],{"class":42},[28,36608,3574],{"class":38},[28,36610,36611],{"class":30,"line":17372},[28,36612,33065],{"class":73},[28,36614,36615,36617,36619,36621,36623],{"class":30,"line":17385},[28,36616,3891],{"class":42},[28,36618,32080],{"class":34},[28,36620,55],{"class":42},[28,36622,32085],{"class":38},[28,36624,33078],{"class":34},[28,36626,36627],{"class":30,"line":17390},[28,36628,33083],{"class":73},[28,36630,36631,36633,36635],{"class":30,"line":17395},[28,36632,33088],{"class":34},[28,36634,83],{"class":42},[28,36636,33093],{"class":34},[28,36638,36639],{"class":30,"line":17400},[28,36640,33098],{"class":73},[28,36642,36643,36645,36647],{"class":30,"line":17413},[28,36644,33103],{"class":34},[28,36646,83],{"class":42},[28,36648,33108],{"class":34},[28,36650,36651],{"class":30,"line":17418},[28,36652,33114],{"class":73},[28,36654,36655],{"class":30,"line":33111},[28,36656,33120],{"class":34},[28,36658,36659],{"class":30,"line":33117},[28,36660,33126],{"class":73},[28,36662,36663],{"class":30,"line":33123},[28,36664,33132],{"class":73},[28,36666,36667,36669,36671],{"class":30,"line":33129},[28,36668,33138],{"class":34},[28,36670,83],{"class":42},[28,36672,33143],{"class":34},[28,36674,36675],{"class":30,"line":33135},[28,36676,33149],{"class":73},[28,36678,36679,36681,36683,36685,36687,36689,36691],{"class":30,"line":33146},[28,36680,33155],{"class":34},[28,36682,83],{"class":42},[28,36684,33160],{"class":34},[28,36686,33163],{"class":5704},[28,36688,83],{"class":42},[28,36690,39],{"class":38},[28,36692,228],{"class":34},[28,36694,36695],{"class":30,"line":33152},[28,36696,33175],{"class":73},[28,36698,36699,36701,36703],{"class":30,"line":33172},[28,36700,33181],{"class":34},[28,36702,83],{"class":42},[28,36704,33186],{"class":34},[28,36706,36707],{"class":30,"line":33178},[28,36708,33192],{"class":73},[28,36710,36711],{"class":30,"line":33189},[28,36712,33198],{"class":34},[28,36714,36715],{"class":30,"line":33195},[28,36716,33204],{"class":73},[28,36718,36719],{"class":30,"line":33201},[28,36720,33210],{"class":34},[28,36722,36723],{"class":30,"line":33207},[28,36724,33216],{"class":73},[28,36726,36727],{"class":30,"line":33213},[28,36728,33222],{"class":34},[28,36730,36731],{"class":30,"line":33219},[28,36732,33228],{"class":73},[28,36734,36735,36737,36739,36741,36743,36745,36747],{"class":30,"line":33225},[28,36736,33234],{"class":34},[28,36738,9964],{"class":42},[28,36740,33239],{"class":34},[28,36742,256],{"class":42},[28,36744,33244],{"class":34},[28,36746,822],{"class":38},[28,36748,228],{"class":34},[28,36750,36751],{"class":30,"line":33231},[28,36752,33254],{"class":73},[28,36754,36755,36757,36759,36761,36763],{"class":30,"line":33251},[28,36756,33260],{"class":34},[28,36758,9964],{"class":42},[28,36760,33265],{"class":34},[28,36762,3439],{"class":42},[28,36764,33270],{"class":34},[28,36766,36767],{"class":30,"line":33257},[28,36768,33276],{"class":73},[28,36770,36771,36773,36775,36777,36779],{"class":30,"line":33273},[28,36772,33282],{"class":34},[28,36774,9964],{"class":42},[28,36776,33244],{"class":34},[28,36778,822],{"class":38},[28,36780,228],{"class":34},[28,36782,36783],{"class":30,"line":33279},[28,36784,33296],{"class":73},[28,36786,36787,36789,36791,36793,36795],{"class":30,"line":33293},[28,36788,3891],{"class":42},[28,36790,33304],{"class":34},[28,36792,55],{"class":42},[28,36794,32085],{"class":38},[28,36796,33311],{"class":34},[28,36798,36799],{"class":30,"line":33299},[28,36800,33317],{"class":73},[28,36802,36803,36805,36807],{"class":30,"line":33314},[28,36804,33088],{"class":34},[28,36806,83],{"class":42},[28,36808,33093],{"class":34},[28,36810,36811],{"class":30,"line":33320},[28,36812,33332],{"class":73},[28,36814,36815,36817,36819],{"class":30,"line":33329},[28,36816,33103],{"class":34},[28,36818,83],{"class":42},[28,36820,33108],{"class":34},[28,36822,36823],{"class":30,"line":33335},[28,36824,33347],{"class":73},[28,36826,36827],{"class":30,"line":33344},[28,36828,33353],{"class":34},[28,36830,36831],{"class":30,"line":33350},[28,36832,36833],{"class":73},"            # 验证时不计算梯度以节省内存\u002F计算\n",[28,36835,36836,36838],{"class":30,"line":33356},[28,36837,33359],{"class":42},[28,36839,33362],{"class":34},[28,36841,36842],{"class":30,"line":33365},[28,36843,33368],{"class":73},[28,36845,36846,36849,36851],{"class":30,"line":33371},[28,36847,36848],{"class":34},"                output",[28,36850,83],{"class":42},[28,36852,33143],{"class":34},[28,36854,36855],{"class":30,"line":33382},[28,36856,33385],{"class":73},[28,36858,36859,36862,36864,36866,36868,36870,36872],{"class":30,"line":33388},[28,36860,36861],{"class":34},"                pre_lab",[28,36863,83],{"class":42},[28,36865,33160],{"class":34},[28,36867,33163],{"class":5704},[28,36869,83],{"class":42},[28,36871,39],{"class":38},[28,36873,228],{"class":34},[28,36875,36876],{"class":30,"line":33407},[28,36877,33410],{"class":73},[28,36879,36880,36883,36885],{"class":30,"line":33413},[28,36881,36882],{"class":34},"                val_batch_loss",[28,36884,83],{"class":42},[28,36886,33186],{"class":34},[28,36888,36889],{"class":30,"line":33424},[28,36890,33427],{"class":73},[28,36892,36893,36896,36898,36901,36903,36905,36907],{"class":30,"line":33430},[28,36894,36895],{"class":34},"                val_loss",[28,36897,9964],{"class":42},[28,36899,36900],{"class":34},"val_batch_loss.item()",[28,36902,256],{"class":42},[28,36904,33244],{"class":34},[28,36906,822],{"class":38},[28,36908,228],{"class":34},[28,36910,36911,36914,36916,36918,36920],{"class":30,"line":33450},[28,36912,36913],{"class":34},"                val_corrects",[28,36915,9964],{"class":42},[28,36917,33265],{"class":34},[28,36919,3439],{"class":42},[28,36921,33270],{"class":34},[28,36923,36924],{"class":30,"line":33466},[28,36925,36926],{"class":73},"            # 当前用于验证的样本数量\n",[28,36928,36929,36932,36934,36936,36938],{"class":30,"line":33472},[28,36930,36931],{"class":34},"            val_num",[28,36933,9964],{"class":42},[28,36935,33244],{"class":34},[28,36937,822],{"class":38},[28,36939,228],{"class":34},[28,36941,36942],{"class":30,"line":33486},[28,36943,33489],{"class":73},[28,36945,36946],{"class":30,"line":33492},[28,36947,33495],{"class":73},[28,36949,36950,36952,36954],{"class":30,"line":33498},[28,36951,33501],{"class":34},[28,36953,43],{"class":42},[28,36955,33506],{"class":34},[28,36957,36958],{"class":30,"line":33509},[28,36959,33512],{"class":73},[28,36961,36962],{"class":30,"line":33515},[28,36963,33518],{"class":73},[28,36965,36966,36968,36970],{"class":30,"line":33521},[28,36967,33524],{"class":34},[28,36969,43],{"class":42},[28,36971,33506],{"class":34},[28,36973,36974],{"class":30,"line":33531},[28,36975,33534],{"class":73},[28,36977,36978,36980,36982],{"class":30,"line":33537},[28,36979,33540],{"class":34},[28,36981,43],{"class":42},[28,36983,33545],{"class":34},[28,36985,36986],{"class":30,"line":33548},[28,36987,33551],{"class":73},[28,36989,36990,36992,36994],{"class":30,"line":33554},[28,36991,33557],{"class":34},[28,36993,43],{"class":42},[28,36995,33545],{"class":34},[28,36997,36998],{"class":30,"line":33564},[28,36999,2890],{"emptyLinePlaceholder":562},[28,37001,37002],{"class":30,"line":33569},[28,37003,33572],{"class":73},[28,37005,37006,37008,37010,37012,37014,37016,37018,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042,37044],{"class":30,"line":33575},[28,37007,32929],{"class":38},[28,37009,367],{"class":34},[28,37011,4080],{"class":735},[28,37013,32937],{"class":38},[28,37015,33586],{"class":735},[28,37017,1515],{"class":38},[28,37019,33591],{"class":42},[28,37021,1565],{"class":38},[28,37023,33596],{"class":735},[28,37025,1515],{"class":38},[28,37027,33591],{"class":42},[28,37029,1565],{"class":38},[28,37031,4080],{"class":735},[28,37033,33607],{"class":34},[28,37035,445],{"class":42},[28,37037,39],{"class":38},[28,37039,33614],{"class":34},[28,37041,445],{"class":42},[28,37043,39],{"class":38},[28,37045,33621],{"class":34},[28,37047,37048,37050,37052,37054,37056,37058,37060,37062,37064,37066,37068,37070,37072,37074,37076,37078,37080,37082,37084,37086],{"class":30,"line":33624},[28,37049,32929],{"class":38},[28,37051,367],{"class":34},[28,37053,4080],{"class":735},[28,37055,32937],{"class":38},[28,37057,33635],{"class":735},[28,37059,1515],{"class":38},[28,37061,33591],{"class":42},[28,37063,1565],{"class":38},[28,37065,33644],{"class":735},[28,37067,1515],{"class":38},[28,37069,33591],{"class":42},[28,37071,1565],{"class":38},[28,37073,4080],{"class":735},[28,37075,33655],{"class":34},[28,37077,445],{"class":42},[28,37079,39],{"class":38},[28,37081,33662],{"class":34},[28,37083,445],{"class":42},[28,37085,39],{"class":38},[28,37087,33621],{"class":34},[28,37089,37090],{"class":30,"line":33671},[28,37091,2890],{"emptyLinePlaceholder":562},[28,37093,37094],{"class":30,"line":33676},[28,37095,33679],{"class":73},[28,37097,37098,37100,37102,37104,37106,37108,37110],{"class":30,"line":33682},[28,37099,2987],{"class":42},[28,37101,33687],{"class":34},[28,37103,445],{"class":42},[28,37105,39],{"class":38},[28,37107,1559],{"class":34},[28,37109,1579],{"class":42},[28,37111,33698],{"class":34},[28,37113,37114],{"class":30,"line":33701},[28,37115,33704],{"class":73},[28,37117,37118,37120,37122,37124,37126,37128,37130],{"class":30,"line":33707},[28,37119,33710],{"class":34},[28,37121,675],{"class":38},[28,37123,83],{"class":42},[28,37125,33717],{"class":34},[28,37127,445],{"class":42},[28,37129,39],{"class":38},[28,37131,111],{"class":34},[28,37133,37134],{"class":30,"line":33726},[28,37135,33729],{"class":73},[28,37137,37138],{"class":30,"line":33732},[28,37139,33735],{"class":73},[28,37141,37142,37144,37146],{"class":30,"line":33738},[28,37143,33741],{"class":34},[28,37145,83],{"class":42},[28,37147,32793],{"class":34},[28,37149,37150],{"class":30,"line":33748},[28,37151,2890],{"emptyLinePlaceholder":562},[28,37153,37154],{"class":30,"line":33753},[28,37155,33756],{"class":73},[28,37157,37158,37160,37162,37164,37166],{"class":30,"line":33759},[28,37159,33762],{"class":34},[28,37161,83],{"class":42},[28,37163,33767],{"class":34},[28,37165,445],{"class":42},[28,37167,33772],{"class":34},[28,37169,37170,37172,37174,37176,37178,37180,37182,37184,37186,37188,37190,37192,37194,37196,37198,37200,37202,37204],{"class":30,"line":33775},[28,37171,32929],{"class":38},[28,37173,367],{"class":34},[28,37175,33782],{"class":735},[28,37177,1515],{"class":38},[28,37179,33787],{"class":42},[28,37181,1565],{"class":38},[28,37183,1165],{"class":735},[28,37185,1515],{"class":38},[28,37187,33787],{"class":42},[28,37189,1565],{"class":38},[28,37191,33800],{"class":735},[28,37193,33803],{"class":34},[28,37195,33806],{"class":42},[28,37197,1526],{"class":38},[28,37199,33811],{"class":34},[28,37201,954],{"class":42},[28,37203,1526],{"class":38},[28,37205,30980],{"class":34},[28,37207,37208],{"class":30,"line":33820},[28,37209,37210],{"class":73},"    # 选择最优参数并保存\n",[28,37212,37213],{"class":30,"line":33826},[28,37214,37215],{"class":73},"    # 保存最佳模型权重字典\n",[28,37217,37218,37221,37223],{"class":30,"line":33832},[28,37219,37220],{"class":34},"    torch.save(best_model_wts,",[28,37222,33844],{"class":735},[28,37224,228],{"class":34},[28,37226,37227],{"class":30,"line":33838},[28,37228,33864],{"class":73},[28,37230,37231,37233,37235,37237,37239,37241],{"class":30,"line":33849},[28,37232,33870],{"class":34},[28,37234,83],{"class":42},[28,37236,33875],{"class":34},[28,37238,33878],{"class":5704},[28,37240,83],{"class":42},[28,37242,2036],{"class":34},[28,37244,37245,37247,37249,37251],{"class":30,"line":33855},[28,37246,33888],{"class":735},[28,37248,1479],{"class":34},[28,37250,33893],{"class":38},[28,37252,33896],{"class":34},[28,37254,37255,37257],{"class":30,"line":33861},[28,37256,33902],{"class":735},[28,37258,33905],{"class":34},[28,37260,37261,37263],{"class":30,"line":33867},[28,37262,33911],{"class":735},[28,37264,33914],{"class":34},[28,37266,37267,37269],{"class":30,"line":33885},[28,37268,33920],{"class":735},[28,37270,33923],{"class":34},[28,37272,37273,37275],{"class":30,"line":33899},[28,37274,33929],{"class":735},[28,37276,33932],{"class":34},[28,37278,37279],{"class":30,"line":33908},[28,37280,33938],{"class":34},[28,37282,37283],{"class":30,"line":33917},[28,37284,33944],{"class":73},[28,37286,37287,37289],{"class":30,"line":33926},[28,37288,4578],{"class":42},[28,37290,33952],{"class":34},[28,37292,37293],{"class":30,"line":33935},[28,37294,2890],{"emptyLinePlaceholder":562},[28,37296,37297],{"class":30,"line":33941},[28,37298,33963],{"class":73},[28,37300,37301,37303,37305],{"class":30,"line":33947},[28,37302,32426],{"class":42},[28,37304,33971],{"class":2453},[28,37306,33974],{"class":34},[28,37308,37309],{"class":30,"line":33955},[28,37310,33980],{"class":73},[28,37312,37313,37315,37317,37319,37321,37323,37325,37327],{"class":30,"line":33960},[28,37314,33986],{"class":34},[28,37316,32172],{"class":5704},[28,37318,83],{"class":42},[28,37320,367],{"class":34},[28,37322,1121],{"class":38},[28,37324,90],{"class":34},[28,37326,103],{"class":38},[28,37328,30980],{"class":34},[28,37330,37331],{"class":30,"line":33966},[28,37332,34006],{"class":73},[28,37334,37335],{"class":30,"line":33977},[28,37336,34012],{"class":73},[28,37338,37339],{"class":30,"line":33983},[28,37340,34018],{"class":73},[28,37342,37343,37345,37347,37349,37351,37353,37355],{"class":30,"line":34003},[28,37344,32206],{"class":34},[28,37346,39],{"class":38},[28,37348,90],{"class":34},[28,37350,93],{"class":38},[28,37352,90],{"class":34},[28,37354,39],{"class":38},[28,37356,228],{"class":34},[28,37358,37359],{"class":30,"line":34009},[28,37360,34041],{"class":73},[28,37362,37363],{"class":30,"line":34015},[28,37364,34047],{"class":73},[28,37366,37367],{"class":30,"line":34021},[28,37368,34053],{"class":73},[28,37370,37371],{"class":30,"line":34038},[28,37372,34059],{"class":73},[28,37374,37375],{"class":30,"line":34044},[28,37376,34065],{"class":73},[28,37378,37379,37381,37383,37385,37387,37389,37391,37393,37395],{"class":30,"line":34050},[28,37380,34071],{"class":34},[28,37382,34074],{"class":735},[28,37384,34077],{"class":34},[28,37386,34080],{"class":735},[28,37388,90],{"class":34},[28,37390,34085],{"class":5704},[28,37392,83],{"class":42},[28,37394,34090],{"class":735},[28,37396,228],{"class":34},[28,37398,37399,37401,37403,37405,37407,37409,37411,37413,37415],{"class":30,"line":34056},[28,37400,34071],{"class":34},[28,37402,34074],{"class":735},[28,37404,34102],{"class":34},[28,37406,34105],{"class":735},[28,37408,90],{"class":34},[28,37410,34085],{"class":5704},[28,37412,83],{"class":42},[28,37414,34114],{"class":735},[28,37416,228],{"class":34},[28,37418,37419],{"class":30,"line":34062},[28,37420,34122],{"class":73},[28,37422,37423],{"class":30,"line":34068},[28,37424,34128],{"class":34},[28,37426,37427],{"class":30,"line":34095},[28,37428,34134],{"class":73},[28,37430,37431,37433,37435],{"class":30,"line":34119},[28,37432,34140],{"class":34},[28,37434,34143],{"class":735},[28,37436,228],{"class":34},[28,37438,37439,37441,37443],{"class":30,"line":34125},[28,37440,34151],{"class":34},[28,37442,34154],{"class":735},[28,37444,228],{"class":34},[28,37446,37447],{"class":30,"line":34131},[28,37448,34162],{"class":73},[28,37450,37451,37453,37455,37457,37459,37461,37463],{"class":30,"line":34137},[28,37452,32206],{"class":34},[28,37454,39],{"class":38},[28,37456,90],{"class":34},[28,37458,93],{"class":38},[28,37460,90],{"class":34},[28,37462,93],{"class":38},[28,37464,228],{"class":34},[28,37466,37467,37469,37471,37473,37475,37477,37479,37481,37483],{"class":30,"line":34148},[28,37468,34071],{"class":34},[28,37470,34074],{"class":735},[28,37472,34189],{"class":34},[28,37474,34080],{"class":735},[28,37476,90],{"class":34},[28,37478,34085],{"class":5704},[28,37480,83],{"class":42},[28,37482,34200],{"class":735},[28,37484,228],{"class":34},[28,37486,37487,37489,37491,37493,37495,37497,37499,37501,37503],{"class":30,"line":34159},[28,37488,34071],{"class":34},[28,37490,34074],{"class":735},[28,37492,34212],{"class":34},[28,37494,34105],{"class":735},[28,37496,90],{"class":34},[28,37498,34085],{"class":5704},[28,37500,83],{"class":42},[28,37502,34223],{"class":735},[28,37504,228],{"class":34},[28,37506,37507],{"class":30,"line":34165},[28,37508,34231],{"class":73},[28,37510,37511],{"class":30,"line":34182},[28,37512,34128],{"class":34},[28,37514,37515,37517,37519],{"class":30,"line":34205},[28,37516,34140],{"class":34},[28,37518,34074],{"class":735},[28,37520,228],{"class":34},[28,37522,37523,37525,37527],{"class":30,"line":34228},[28,37524,34151],{"class":34},[28,37526,34253],{"class":735},[28,37528,228],{"class":34},[28,37530,37531],{"class":30,"line":34234},[28,37532,34261],{"class":34},[28,37534,37535],{"class":30,"line":34239},[28,37536,2890],{"emptyLinePlaceholder":562},[28,37538,37539],{"class":30,"line":34248},[28,37540,34272],{"class":73},[28,37542,37543,37545,37547,37549,37551],{"class":30,"line":34258},[28,37544,2021],{"class":42},[28,37546,31701],{"class":38},[28,37548,3439],{"class":42},[28,37550,31706],{"class":735},[28,37552,4227],{"class":34},[28,37554,37555],{"class":30,"line":34264},[28,37556,34291],{"class":73},[28,37558,37559,37562,37564],{"class":30,"line":34269},[28,37560,37561],{"class":34},"    AlexNet",[28,37563,83],{"class":42},[28,37565,37566],{"class":34},"AlexNet()\n",[28,37568,37569,37571,37573],{"class":30,"line":34275},[28,37570,34308],{"class":34},[28,37572,83],{"class":42},[28,37574,34313],{"class":34},[28,37576,37577,37579,37581,37584,37586,37588,37590],{"class":30,"line":34288},[28,37578,33870],{"class":34},[28,37580,83],{"class":42},[28,37582,37583],{"class":34},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[28,37585,34326],{"class":5704},[28,37587,83],{"class":42},[28,37589,1320],{"class":38},[28,37591,228],{"class":34},[28,37593,37594],{"class":30,"line":34294},[28,37595,34338],{"class":34},[588,37597,37598],{"start":114},[591,37599,34351],{},[18,37601,37603],{"className":20,"code":37602,"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,37604,37605,37611,37621,37631,37641,37645,37655,37665,37676,37680,37684,37688,37696,37712,37722,37738,37748,37762,37766,37776,37786,37796,37802,37806,37810,37818,37822,37838,37846,37850,37854,37862,37870,37874,37878,37882,37886,37892,37896,37906,37914,37922,37926,37930,37934,37942,37946,37962,37966,37970,37974,37986,37990,38002,38006,38010,38022,38026,38036,38040,38044,38056,38060,38068,38072,38076,38084,38088,38096,38100,38104,38108,38112,38116,38132,38140,38144,38148,38196,38202,38206,38216,38224,38232,38236,38240,38244,38248,38256,38260,38276,38280,38288,38296],{"__ignoreMap":23},[28,37606,37607,37609],{"class":30,"line":31},[28,37608,536],{"class":42},[28,37610,30878],{"class":34},[28,37612,37613,37615,37617,37619],{"class":30,"line":77},[28,37614,536],{"class":42},[28,37616,31895],{"class":34},[28,37618,542],{"class":42},[28,37620,31900],{"class":34},[28,37622,37623,37625,37627,37629],{"class":30,"line":114},[28,37624,530],{"class":42},[28,37626,34379],{"class":34},[28,37628,536],{"class":42},[28,37630,34384],{"class":34},[28,37632,37633,37635,37637,37639],{"class":30,"line":128},[28,37634,530],{"class":42},[28,37636,31878],{"class":34},[28,37638,536],{"class":42},[28,37640,31883],{"class":34},[28,37642,37643],{"class":30,"line":393},[28,37644,34399],{"class":73},[28,37646,37647,37649,37651,37653],{"class":30,"line":409},[28,37648,530],{"class":42},[28,37650,31849],{"class":34},[28,37652,536],{"class":42},[28,37654,31854],{"class":34},[28,37656,37657,37659,37661,37663],{"class":30,"line":1711},[28,37658,530],{"class":42},[28,37660,32393],{"class":34},[28,37662,536],{"class":42},[28,37664,36034],{"class":34},[28,37666,37667,37669,37672,37674],{"class":30,"line":1802},[28,37668,530],{"class":42},[28,37670,37671],{"class":34}," 练习.AlexNet.model ",[28,37673,536],{"class":42},[28,37675,36034],{"class":34},[28,37677,37678],{"class":30,"line":1808},[28,37679,2890],{"emptyLinePlaceholder":562},[28,37681,37682],{"class":30,"line":1820},[28,37683,2890],{"emptyLinePlaceholder":562},[28,37685,37686],{"class":30,"line":2102},[28,37687,34428],{"class":73},[28,37689,37690,37692,37694],{"class":30,"line":2107},[28,37691,32426],{"class":42},[28,37693,34435],{"class":2453},[28,37695,32432],{"class":34},[28,37697,37698,37700,37702,37704,37706,37708,37710],{"class":30,"line":2113},[28,37699,34442],{"class":34},[28,37701,83],{"class":42},[28,37703,31934],{"class":34},[28,37705,31937],{"class":5704},[28,37707,83],{"class":42},[28,37709,31942],{"class":735},[28,37711,31945],{"class":34},[28,37713,37714,37716,37718,37720],{"class":30,"line":2118},[28,37715,34459],{"class":5704},[28,37717,83],{"class":42},[28,37719,34464],{"class":38},[28,37721,31945],{"class":34},[28,37723,37724,37726,37728,37730,37732,37734,37736],{"class":30,"line":2132},[28,37725,34471],{"class":5704},[28,37727,83],{"class":42},[28,37729,31972],{"class":34},[28,37731,31975],{"class":5704},[28,37733,83],{"class":42},[28,37735,35926],{"class":38},[28,37737,31983],{"class":34},[28,37739,37740,37742,37744,37746],{"class":30,"line":2137},[28,37741,34488],{"class":5704},[28,37743,83],{"class":42},[28,37745,31955],{"class":38},[28,37747,228],{"class":34},[28,37749,37750,37752,37754,37756,37758,37760],{"class":30,"line":2143},[28,37751,34499],{"class":34},[28,37753,83],{"class":42},[28,37755,32013],{"class":34},[28,37757,32016],{"class":5704},[28,37759,83],{"class":42},[28,37761,34510],{"class":34},[28,37763,37764],{"class":30,"line":2164},[28,37765,34515],{"class":73},[28,37767,37768,37770,37772,37774],{"class":30,"line":2169},[28,37769,34520],{"class":5704},[28,37771,83],{"class":42},[28,37773,39],{"class":38},[28,37775,31945],{"class":34},[28,37777,37778,37780,37782,37784],{"class":30,"line":2183},[28,37779,34531],{"class":5704},[28,37781,83],{"class":42},[28,37783,31955],{"class":38},[28,37785,31945],{"class":34},[28,37787,37788,37790,37792,37794],{"class":30,"line":2188},[28,37789,34542],{"class":5704},[28,37791,83],{"class":42},[28,37793,822],{"class":38},[28,37795,228],{"class":34},[28,37797,37798,37800],{"class":30,"line":2217},[28,37799,4578],{"class":42},[28,37801,34555],{"class":34},[28,37803,37804],{"class":30,"line":2222},[28,37805,2890],{"emptyLinePlaceholder":562},[28,37807,37808],{"class":30,"line":2239},[28,37809,34564],{"class":73},[28,37811,37812,37814,37816],{"class":30,"line":2244},[28,37813,32426],{"class":42},[28,37815,34571],{"class":2453},[28,37817,34574],{"class":34},[28,37819,37820],{"class":30,"line":2249},[28,37821,34579],{"class":73},[28,37823,37824,37826,37828,37830,37832,37834,37836],{"class":30,"line":2254},[28,37825,31718],{"class":34},[28,37827,83],{"class":42},[28,37829,31725],{"class":735},[28,37831,2194],{"class":42},[28,37833,31730],{"class":34},[28,37835,2191],{"class":42},[28,37837,34596],{"class":735},[28,37839,37840,37842,37844],{"class":30,"line":2268},[28,37841,31770],{"class":34},[28,37843,83],{"class":42},[28,37845,32768],{"class":34},[28,37847,37848],{"class":30,"line":2273},[28,37849,2890],{"emptyLinePlaceholder":562},[28,37851,37852],{"class":30,"line":3067},[28,37853,34613],{"class":73},[28,37855,37856,37858,37860],{"class":30,"line":3081},[28,37857,34618],{"class":34},[28,37859,83],{"class":42},[28,37861,32821],{"class":38},[28,37863,37864,37866,37868],{"class":30,"line":3089},[28,37865,34627],{"class":34},[28,37867,83],{"class":42},[28,37869,3574],{"class":38},[28,37871,37872],{"class":30,"line":3094},[28,37873,2890],{"emptyLinePlaceholder":562},[28,37875,37876],{"class":30,"line":3100},[28,37877,34640],{"class":73},[28,37879,37880],{"class":30,"line":3106},[28,37881,34645],{"class":73},[28,37883,37884],{"class":30,"line":3111},[28,37885,34650],{"class":73},[28,37887,37888,37890],{"class":30,"line":8436},[28,37889,34655],{"class":42},[28,37891,33362],{"class":34},[28,37893,37894],{"class":30,"line":8460},[28,37895,34662],{"class":73},[28,37897,37898,37900,37902,37904],{"class":30,"line":8465},[28,37899,3891],{"class":42},[28,37901,34669],{"class":34},[28,37903,55],{"class":42},[28,37905,34674],{"class":34},[28,37907,37908,37910,37912],{"class":30,"line":8471},[28,37909,34679],{"class":34},[28,37911,83],{"class":42},[28,37913,34684],{"class":34},[28,37915,37916,37918,37920],{"class":30,"line":8498},[28,37917,34689],{"class":34},[28,37919,83],{"class":42},[28,37921,34694],{"class":34},[28,37923,37924],{"class":30,"line":8503},[28,37925,34699],{"class":73},[28,37927,37928],{"class":30,"line":8509},[28,37929,33353],{"class":34},[28,37931,37932],{"class":30,"line":8521},[28,37933,34708],{"class":73},[28,37935,37936,37938,37940],{"class":30,"line":8533},[28,37937,33138],{"class":34},[28,37939,83],{"class":42},[28,37941,34717],{"class":34},[28,37943,37944],{"class":30,"line":8545},[28,37945,34722],{"class":73},[28,37947,37948,37950,37952,37954,37956,37958,37960],{"class":30,"line":10202},[28,37949,33155],{"class":34},[28,37951,83],{"class":42},[28,37953,33160],{"class":34},[28,37955,33163],{"class":5704},[28,37957,83],{"class":42},[28,37959,39],{"class":38},[28,37961,228],{"class":34},[28,37963,37964],{"class":30,"line":10227},[28,37965,34743],{"class":73},[28,37967,37968],{"class":30,"line":10250},[28,37969,34748],{"class":73},[28,37971,37972],{"class":30,"line":10274},[28,37973,34753],{"class":73},[28,37975,37976,37978,37980,37982,37984],{"class":30,"line":10279},[28,37977,34758],{"class":34},[28,37979,9964],{"class":42},[28,37981,33265],{"class":34},[28,37983,3439],{"class":42},[28,37985,34767],{"class":34},[28,37987,37988],{"class":30,"line":10284},[28,37989,34772],{"class":73},[28,37991,37992,37994,37996,37998,38000],{"class":30,"line":10289},[28,37993,34777],{"class":34},[28,37995,9964],{"class":42},[28,37997,34782],{"class":34},[28,37999,822],{"class":38},[28,38001,228],{"class":34},[28,38003,38004],{"class":30,"line":10298},[28,38005,2890],{"emptyLinePlaceholder":562},[28,38007,38008],{"class":30,"line":10303},[28,38009,34795],{"class":73},[28,38011,38012,38014,38016,38018,38020],{"class":30,"line":10309},[28,38013,34800],{"class":34},[28,38015,83],{"class":42},[28,38017,34805],{"class":34},[28,38019,43],{"class":42},[28,38021,34810],{"class":34},[28,38023,38024],{"class":30,"line":10330},[28,38025,34815],{"class":73},[28,38027,38028,38030,38032,38034],{"class":30,"line":10336},[28,38029,32929],{"class":38},[28,38031,367],{"class":34},[28,38033,34824],{"class":735},[28,38035,34827],{"class":34},[28,38037,38038],{"class":30,"line":10350},[28,38039,2890],{"emptyLinePlaceholder":562},[28,38041,38042],{"class":30,"line":10356},[28,38043,34836],{"class":73},[28,38045,38046,38048,38050,38052,38054],{"class":30,"line":10383},[28,38047,2021],{"class":42},[28,38049,31701],{"class":38},[28,38051,3439],{"class":42},[28,38053,31706],{"class":735},[28,38055,4227],{"class":34},[28,38057,38058],{"class":30,"line":10392},[28,38059,34853],{"class":73},[28,38061,38062,38064,38066],{"class":30,"line":10398},[28,38063,31770],{"class":34},[28,38065,83],{"class":42},[28,38067,37566],{"class":34},[28,38069,38070],{"class":30,"line":10406},[28,38071,34866],{"class":73},[28,38073,38074],{"class":30,"line":10411},[28,38075,34871],{"class":73},[28,38077,38078,38080,38082],{"class":30,"line":17090},[28,38079,34876],{"class":34},[28,38081,34879],{"class":735},[28,38083,30980],{"class":34},[28,38085,38086],{"class":30,"line":17096},[28,38087,34886],{"class":73},[28,38089,38090,38092,38094],{"class":30,"line":17119},[28,38091,34499],{"class":34},[28,38093,83],{"class":42},[28,38095,34895],{"class":34},[28,38097,38098],{"class":30,"line":17125},[28,38099,34900],{"class":73},[28,38101,38102],{"class":30,"line":17148},[28,38103,34905],{"class":34},[28,38105,38106],{"class":30,"line":17162},[28,38107,2890],{"emptyLinePlaceholder":562},[28,38109,38110],{"class":30,"line":17182},[28,38111,34914],{"class":73},[28,38113,38114],{"class":30,"line":17188},[28,38115,34919],{"class":73},[28,38117,38118,38120,38122,38124,38126,38128,38130],{"class":30,"line":17199},[28,38119,31718],{"class":34},[28,38121,83],{"class":42},[28,38123,31725],{"class":735},[28,38125,2194],{"class":42},[28,38127,31730],{"class":34},[28,38129,2191],{"class":42},[28,38131,34596],{"class":735},[28,38133,38134,38136,38138],{"class":30,"line":17222},[28,38135,31770],{"class":34},[28,38137,83],{"class":42},[28,38139,32768],{"class":34},[28,38141,38142],{"class":30,"line":17244},[28,38143,34948],{"class":73},[28,38145,38146],{"class":30,"line":17249},[28,38147,34953],{"class":73},[28,38149,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194],{"class":30,"line":17255},[28,38151,34958],{"class":34},[28,38153,83],{"class":42},[28,38155,35],{"class":34},[28,38157,34965],{"class":735},[28,38159,90],{"class":34},[28,38161,34970],{"class":735},[28,38163,90],{"class":34},[28,38165,34975],{"class":735},[28,38167,90],{"class":34},[28,38169,34980],{"class":735},[28,38171,90],{"class":34},[28,38173,34985],{"class":735},[28,38175,90],{"class":34},[28,38177,34990],{"class":735},[28,38179,90],{"class":34},[28,38181,34995],{"class":735},[28,38183,90],{"class":34},[28,38185,35000],{"class":735},[28,38187,90],{"class":34},[28,38189,35005],{"class":735},[28,38191,90],{"class":34},[28,38193,35010],{"class":735},[28,38195,111],{"class":34},[28,38197,38198,38200],{"class":30,"line":17269},[28,38199,34655],{"class":42},[28,38201,33362],{"class":34},[28,38203,38204],{"class":30,"line":17282},[28,38205,35023],{"class":73},[28,38207,38208,38210,38212,38214],{"class":30,"line":17287},[28,38209,3891],{"class":42},[28,38211,35030],{"class":34},[28,38213,55],{"class":42},[28,38215,34674],{"class":34},[28,38217,38218,38220,38222],{"class":30,"line":17301},[28,38219,33088],{"class":34},[28,38221,83],{"class":42},[28,38223,33093],{"class":34},[28,38225,38226,38228,38230],{"class":30,"line":17306},[28,38227,33103],{"class":34},[28,38229,83],{"class":42},[28,38231,33108],{"class":34},[28,38233,38234],{"class":30,"line":17312},[28,38235,2890],{"emptyLinePlaceholder":562},[28,38237,38238],{"class":30,"line":17317},[28,38239,35059],{"class":73},[28,38241,38242],{"class":30,"line":17331},[28,38243,33353],{"class":34},[28,38245,38246],{"class":30,"line":17336},[28,38247,35068],{"class":73},[28,38249,38250,38252,38254],{"class":30,"line":17341},[28,38251,33138],{"class":34},[28,38253,83],{"class":42},[28,38255,33143],{"class":34},[28,38257,38258],{"class":30,"line":17355},[28,38259,35081],{"class":73},[28,38261,38262,38264,38266,38268,38270,38272,38274],{"class":30,"line":17367},[28,38263,33155],{"class":34},[28,38265,83],{"class":42},[28,38267,33160],{"class":34},[28,38269,33163],{"class":5704},[28,38271,83],{"class":42},[28,38273,39],{"class":38},[28,38275,228],{"class":34},[28,38277,38278],{"class":30,"line":17372},[28,38279,35102],{"class":73},[28,38281,38282,38284,38286],{"class":30,"line":17385},[28,38283,35107],{"class":34},[28,38285,83],{"class":42},[28,38287,35112],{"class":34},[28,38289,38290,38292,38294],{"class":30,"line":17390},[28,38291,35117],{"class":34},[28,38293,83],{"class":42},[28,38295,35122],{"class":34},[28,38297,38298,38300,38302,38304,38306,38308,38310,38312],{"class":30,"line":17395},[28,38299,35127],{"class":38},[28,38301,367],{"class":34},[28,38303,35132],{"class":735},[28,38305,35135],{"class":34},[28,38307,35138],{"class":735},[28,38309,90],{"class":34},[28,38311,35143],{"class":735},[28,38313,35146],{"class":34},[605,38315,38317],{"id":38316},"_22vgg","2.2.VGG",[22484,38319,38321],{"id":38320},"_221原理","2.2.1.原理",[14,38323,38324],{},[420,38325],{"alt":23,"src":38326},"\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,38328,38329],{},[420,38330],{"alt":23,"src":38331},"\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,38333,38334],{},[420,38335],{"alt":23,"src":38336},"\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,38338,38339],{},"参数详细描述：",[14,38341,38342],{},[420,38343],{"alt":23,"src":38344},"\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,38346,38347],{},[420,38348],{"alt":23,"src":38349},"\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,38351,38352],{},[420,38353],{"alt":23,"src":38354},"\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,38356,38357],{},[420,38358],{"alt":23,"src":38359},"\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,38361,38362],{},[420,38363],{"alt":23,"src":38364},"\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",[22484,38366,38368],{"id":38367},"_222代码实现","2.2.2.代码实现",[588,38370,38371],{},[591,38372,38373],{},"网络搭建",[18,38375,38377],{"className":20,"code":38376,"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,38378,38379,38385,38397,38407,38417,38421,38438,38446,38465,38470,38475,38487,38525,38530,38566,38570,38599,38604,38609,38620,38656,38660,38696,38700,38728,38732,38737,38748,38784,38788,38824,38828,38864,38868,38896,38900,38905,38916,38953,38957,38993,38997,39033,39037,39065,39069,39074,39085,39121,39125,39161,39165,39201,39205,39233,39237,39242,39253,39258,39263,39268,39289,39293,39305,39309,39321,39325,39329,39334,39339,39354,39359,39369,39374,39389,39394,39413,39418,39427,39432,39442,39447,39452,39466,39471,39485,39493,39497,39501,39509,39520,39531,39542,39553,39564,39575,39581,39585,39590,39603,39623,39629,39638],{"__ignoreMap":23},[28,38380,38381,38383],{"class":30,"line":31},[28,38382,536],{"class":42},[28,38384,30878],{"class":34},[28,38386,38387,38389,38392,38394],{"class":30,"line":77},[28,38388,530],{"class":42},[28,38390,38391],{"class":34}," sympy.core.sympify ",[28,38393,536],{"class":42},[28,38395,38396],{"class":34}," kernS\n",[28,38398,38399,38401,38403,38405],{"class":30,"line":114},[28,38400,530],{"class":42},[28,38402,31222],{"class":34},[28,38404,536],{"class":42},[28,38406,31227],{"class":34},[28,38408,38409,38411,38413,38415],{"class":30,"line":128},[28,38410,530],{"class":42},[28,38412,31239],{"class":34},[28,38414,536],{"class":42},[28,38416,31244],{"class":34},[28,38418,38419],{"class":30,"line":393},[28,38420,2890],{"emptyLinePlaceholder":562},[28,38422,38423,38425,38428,38430,38432,38434,38436],{"class":30,"line":409},[28,38424,15180],{"class":42},[28,38426,38427],{"class":2453}," VGG16",[28,38429,367],{"class":34},[28,38431,31260],{"class":2453},[28,38433,1179],{"class":34},[28,38435,31265],{"class":2453},[28,38437,372],{"class":34},[28,38439,38440,38442,38444],{"class":30,"line":1711},[28,38441,31282],{"class":42},[28,38443,31285],{"class":38},[28,38445,31288],{"class":34},[28,38447,38448,38450,38452,38455,38457,38459,38461,38463],{"class":30,"line":1802},[28,38449,31298],{"class":38},[28,38451,367],{"class":34},[28,38453,38454],{"class":38},"VGG16",[28,38456,12921],{"class":34},[28,38458,31304],{"class":38},[28,38460,31307],{"class":34},[28,38462,31310],{"class":38},[28,38464,2466],{"class":34},[28,38466,38467],{"class":30,"line":1808},[28,38468,38469],{"class":73},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[28,38471,38472],{"class":30,"line":1820},[28,38473,38474],{"class":73},"        # 这里用的是灰度图\n",[28,38476,38477,38479,38482,38484],{"class":30,"line":2102},[28,38478,31326],{"class":38},[28,38480,38481],{"class":34},".block1",[28,38483,83],{"class":42},[28,38485,38486],{"class":34},"nn.Sequential(\n",[28,38488,38489,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522],{"class":30,"line":2107},[28,38490,38491],{"class":34},"            nn.Conv2d(",[28,38493,31337],{"class":5704},[28,38495,83],{"class":42},[28,38497,39],{"class":38},[28,38499,90],{"class":34},[28,38501,31346],{"class":5704},[28,38503,83],{"class":42},[28,38505,834],{"class":38},[28,38507,90],{"class":34},[28,38509,31355],{"class":5704},[28,38511,83],{"class":42},[28,38513,98],{"class":38},[28,38515,90],{"class":34},[28,38517,31364],{"class":5704},[28,38519,83],{"class":42},[28,38521,39],{"class":38},[28,38523,38524],{"class":34},"),\n",[28,38526,38527],{"class":30,"line":2113},[28,38528,38529],{"class":34},"            nn.ReLU(),\n",[28,38531,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564],{"class":30,"line":2118},[28,38533,38491],{"class":34},[28,38535,31337],{"class":5704},[28,38537,83],{"class":42},[28,38539,834],{"class":38},[28,38541,90],{"class":34},[28,38543,31346],{"class":5704},[28,38545,83],{"class":42},[28,38547,834],{"class":38},[28,38549,90],{"class":34},[28,38551,31355],{"class":5704},[28,38553,83],{"class":42},[28,38555,98],{"class":38},[28,38557,90],{"class":34},[28,38559,31364],{"class":5704},[28,38561,83],{"class":42},[28,38563,39],{"class":38},[28,38565,38524],{"class":34},[28,38567,38568],{"class":30,"line":2132},[28,38569,38529],{"class":34},[28,38571,38572,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597],{"class":30,"line":2137},[28,38573,38574],{"class":34},"            nn.MaxPool2d(",[28,38576,31355],{"class":5704},[28,38578,83],{"class":42},[28,38580,93],{"class":38},[28,38582,90],{"class":34},[28,38584,31410],{"class":5704},[28,38586,83],{"class":42},[28,38588,93],{"class":38},[28,38590,90],{"class":34},[28,38592,31364],{"class":5704},[28,38594,83],{"class":42},[28,38596,822],{"class":38},[28,38598,228],{"class":34},[28,38600,38601],{"class":30,"line":2143},[28,38602,38603],{"class":34},"        )\n",[28,38605,38606],{"class":30,"line":2164},[28,38607,38608],{"class":73},"        # 第二层\n",[28,38610,38611,38613,38616,38618],{"class":30,"line":2169},[28,38612,31326],{"class":38},[28,38614,38615],{"class":34},".block2",[28,38617,83],{"class":42},[28,38619,38486],{"class":34},[28,38621,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654],{"class":30,"line":2183},[28,38623,38491],{"class":34},[28,38625,31337],{"class":5704},[28,38627,83],{"class":42},[28,38629,834],{"class":38},[28,38631,90],{"class":34},[28,38633,31346],{"class":5704},[28,38635,83],{"class":42},[28,38637,32549],{"class":38},[28,38639,90],{"class":34},[28,38641,31355],{"class":5704},[28,38643,83],{"class":42},[28,38645,98],{"class":38},[28,38647,90],{"class":34},[28,38649,31364],{"class":5704},[28,38651,83],{"class":42},[28,38653,39],{"class":38},[28,38655,38524],{"class":34},[28,38657,38658],{"class":30,"line":2188},[28,38659,38529],{"class":34},[28,38661,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694],{"class":30,"line":2217},[28,38663,38491],{"class":34},[28,38665,31337],{"class":5704},[28,38667,83],{"class":42},[28,38669,32549],{"class":38},[28,38671,90],{"class":34},[28,38673,31346],{"class":5704},[28,38675,83],{"class":42},[28,38677,32549],{"class":38},[28,38679,90],{"class":34},[28,38681,31355],{"class":5704},[28,38683,83],{"class":42},[28,38685,98],{"class":38},[28,38687,90],{"class":34},[28,38689,31364],{"class":5704},[28,38691,83],{"class":42},[28,38693,39],{"class":38},[28,38695,38524],{"class":34},[28,38697,38698],{"class":30,"line":2222},[28,38699,38529],{"class":34},[28,38701,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726],{"class":30,"line":2239},[28,38703,38574],{"class":34},[28,38705,31355],{"class":5704},[28,38707,83],{"class":42},[28,38709,93],{"class":38},[28,38711,90],{"class":34},[28,38713,31410],{"class":5704},[28,38715,83],{"class":42},[28,38717,93],{"class":38},[28,38719,90],{"class":34},[28,38721,31364],{"class":5704},[28,38723,83],{"class":42},[28,38725,822],{"class":38},[28,38727,228],{"class":34},[28,38729,38730],{"class":30,"line":2244},[28,38731,38603],{"class":34},[28,38733,38734],{"class":30,"line":2249},[28,38735,38736],{"class":73},"        # 第三层\n",[28,38738,38739,38741,38744,38746],{"class":30,"line":2254},[28,38740,31326],{"class":38},[28,38742,38743],{"class":34},".block3",[28,38745,83],{"class":42},[28,38747,38486],{"class":34},[28,38749,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782],{"class":30,"line":2268},[28,38751,38491],{"class":34},[28,38753,31337],{"class":5704},[28,38755,83],{"class":42},[28,38757,32549],{"class":38},[28,38759,90],{"class":34},[28,38761,31346],{"class":5704},[28,38763,83],{"class":42},[28,38765,35347],{"class":38},[28,38767,90],{"class":34},[28,38769,31355],{"class":5704},[28,38771,83],{"class":42},[28,38773,98],{"class":38},[28,38775,90],{"class":34},[28,38777,31364],{"class":5704},[28,38779,83],{"class":42},[28,38781,39],{"class":38},[28,38783,38524],{"class":34},[28,38785,38786],{"class":30,"line":2273},[28,38787,38529],{"class":34},[28,38789,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822],{"class":30,"line":3067},[28,38791,38491],{"class":34},[28,38793,31337],{"class":5704},[28,38795,83],{"class":42},[28,38797,35347],{"class":38},[28,38799,90],{"class":34},[28,38801,31346],{"class":5704},[28,38803,83],{"class":42},[28,38805,35347],{"class":38},[28,38807,90],{"class":34},[28,38809,31355],{"class":5704},[28,38811,83],{"class":42},[28,38813,98],{"class":38},[28,38815,90],{"class":34},[28,38817,31364],{"class":5704},[28,38819,83],{"class":42},[28,38821,39],{"class":38},[28,38823,38524],{"class":34},[28,38825,38826],{"class":30,"line":3081},[28,38827,38529],{"class":34},[28,38829,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862],{"class":30,"line":3089},[28,38831,38491],{"class":34},[28,38833,31337],{"class":5704},[28,38835,83],{"class":42},[28,38837,35347],{"class":38},[28,38839,90],{"class":34},[28,38841,31346],{"class":5704},[28,38843,83],{"class":42},[28,38845,35347],{"class":38},[28,38847,90],{"class":34},[28,38849,31355],{"class":5704},[28,38851,83],{"class":42},[28,38853,98],{"class":38},[28,38855,90],{"class":34},[28,38857,31364],{"class":5704},[28,38859,83],{"class":42},[28,38861,39],{"class":38},[28,38863,38524],{"class":34},[28,38865,38866],{"class":30,"line":3094},[28,38867,38529],{"class":34},[28,38869,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894],{"class":30,"line":3100},[28,38871,38574],{"class":34},[28,38873,31355],{"class":5704},[28,38875,83],{"class":42},[28,38877,93],{"class":38},[28,38879,90],{"class":34},[28,38881,31410],{"class":5704},[28,38883,83],{"class":42},[28,38885,93],{"class":38},[28,38887,90],{"class":34},[28,38889,31364],{"class":5704},[28,38891,83],{"class":42},[28,38893,822],{"class":38},[28,38895,228],{"class":34},[28,38897,38898],{"class":30,"line":3106},[28,38899,38603],{"class":34},[28,38901,38902],{"class":30,"line":3111},[28,38903,38904],{"class":73},"        # 第四层\n",[28,38906,38907,38909,38912,38914],{"class":30,"line":8436},[28,38908,31326],{"class":38},[28,38910,38911],{"class":34},".block4",[28,38913,83],{"class":42},[28,38915,38486],{"class":34},[28,38917,38918,38920,38922,38924,38926,38928,38930,38932,38935,38937,38939,38941,38943,38945,38947,38949,38951],{"class":30,"line":8460},[28,38919,38491],{"class":34},[28,38921,31337],{"class":5704},[28,38923,83],{"class":42},[28,38925,35347],{"class":38},[28,38927,90],{"class":34},[28,38929,31346],{"class":5704},[28,38931,83],{"class":42},[28,38933,38934],{"class":38},"512",[28,38936,90],{"class":34},[28,38938,31355],{"class":5704},[28,38940,83],{"class":42},[28,38942,98],{"class":38},[28,38944,90],{"class":34},[28,38946,31364],{"class":5704},[28,38948,83],{"class":42},[28,38950,39],{"class":38},[28,38952,38524],{"class":34},[28,38954,38955],{"class":30,"line":8465},[28,38956,38529],{"class":34},[28,38958,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985,38987,38989,38991],{"class":30,"line":8471},[28,38960,38491],{"class":34},[28,38962,31337],{"class":5704},[28,38964,83],{"class":42},[28,38966,38934],{"class":38},[28,38968,90],{"class":34},[28,38970,31346],{"class":5704},[28,38972,83],{"class":42},[28,38974,38934],{"class":38},[28,38976,90],{"class":34},[28,38978,31355],{"class":5704},[28,38980,83],{"class":42},[28,38982,98],{"class":38},[28,38984,90],{"class":34},[28,38986,31364],{"class":5704},[28,38988,83],{"class":42},[28,38990,39],{"class":38},[28,38992,38524],{"class":34},[28,38994,38995],{"class":30,"line":8498},[28,38996,38529],{"class":34},[28,38998,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023,39025,39027,39029,39031],{"class":30,"line":8503},[28,39000,38491],{"class":34},[28,39002,31337],{"class":5704},[28,39004,83],{"class":42},[28,39006,38934],{"class":38},[28,39008,90],{"class":34},[28,39010,31346],{"class":5704},[28,39012,83],{"class":42},[28,39014,38934],{"class":38},[28,39016,90],{"class":34},[28,39018,31355],{"class":5704},[28,39020,83],{"class":42},[28,39022,98],{"class":38},[28,39024,90],{"class":34},[28,39026,31364],{"class":5704},[28,39028,83],{"class":42},[28,39030,39],{"class":38},[28,39032,38524],{"class":34},[28,39034,39035],{"class":30,"line":8509},[28,39036,38529],{"class":34},[28,39038,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063],{"class":30,"line":8521},[28,39040,38574],{"class":34},[28,39042,31355],{"class":5704},[28,39044,83],{"class":42},[28,39046,93],{"class":38},[28,39048,90],{"class":34},[28,39050,31410],{"class":5704},[28,39052,83],{"class":42},[28,39054,93],{"class":38},[28,39056,90],{"class":34},[28,39058,31364],{"class":5704},[28,39060,83],{"class":42},[28,39062,822],{"class":38},[28,39064,228],{"class":34},[28,39066,39067],{"class":30,"line":8533},[28,39068,38603],{"class":34},[28,39070,39071],{"class":30,"line":8545},[28,39072,39073],{"class":73},"        # 第五层\n",[28,39075,39076,39078,39081,39083],{"class":30,"line":10202},[28,39077,31326],{"class":38},[28,39079,39080],{"class":34},".block5",[28,39082,83],{"class":42},[28,39084,38486],{"class":34},[28,39086,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117,39119],{"class":30,"line":10227},[28,39088,38491],{"class":34},[28,39090,31337],{"class":5704},[28,39092,83],{"class":42},[28,39094,38934],{"class":38},[28,39096,90],{"class":34},[28,39098,31346],{"class":5704},[28,39100,83],{"class":42},[28,39102,38934],{"class":38},[28,39104,90],{"class":34},[28,39106,31355],{"class":5704},[28,39108,83],{"class":42},[28,39110,98],{"class":38},[28,39112,90],{"class":34},[28,39114,31364],{"class":5704},[28,39116,83],{"class":42},[28,39118,39],{"class":38},[28,39120,38524],{"class":34},[28,39122,39123],{"class":30,"line":10250},[28,39124,38529],{"class":34},[28,39126,39127,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159],{"class":30,"line":10274},[28,39128,38491],{"class":34},[28,39130,31337],{"class":5704},[28,39132,83],{"class":42},[28,39134,38934],{"class":38},[28,39136,90],{"class":34},[28,39138,31346],{"class":5704},[28,39140,83],{"class":42},[28,39142,38934],{"class":38},[28,39144,90],{"class":34},[28,39146,31355],{"class":5704},[28,39148,83],{"class":42},[28,39150,98],{"class":38},[28,39152,90],{"class":34},[28,39154,31364],{"class":5704},[28,39156,83],{"class":42},[28,39158,39],{"class":38},[28,39160,38524],{"class":34},[28,39162,39163],{"class":30,"line":10279},[28,39164,38529],{"class":34},[28,39166,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199],{"class":30,"line":10284},[28,39168,38491],{"class":34},[28,39170,31337],{"class":5704},[28,39172,83],{"class":42},[28,39174,38934],{"class":38},[28,39176,90],{"class":34},[28,39178,31346],{"class":5704},[28,39180,83],{"class":42},[28,39182,38934],{"class":38},[28,39184,90],{"class":34},[28,39186,31355],{"class":5704},[28,39188,83],{"class":42},[28,39190,98],{"class":38},[28,39192,90],{"class":34},[28,39194,31364],{"class":5704},[28,39196,83],{"class":42},[28,39198,39],{"class":38},[28,39200,38524],{"class":34},[28,39202,39203],{"class":30,"line":10289},[28,39204,38529],{"class":34},[28,39206,39207,39209,39211,39213,39215,39217,39219,39221,39223,39225,39227,39229,39231],{"class":30,"line":10298},[28,39208,38574],{"class":34},[28,39210,31355],{"class":5704},[28,39212,83],{"class":42},[28,39214,93],{"class":38},[28,39216,90],{"class":34},[28,39218,31410],{"class":5704},[28,39220,83],{"class":42},[28,39222,93],{"class":38},[28,39224,90],{"class":34},[28,39226,31364],{"class":5704},[28,39228,83],{"class":42},[28,39230,822],{"class":38},[28,39232,228],{"class":34},[28,39234,39235],{"class":30,"line":10303},[28,39236,38603],{"class":34},[28,39238,39239],{"class":30,"line":10309},[28,39240,39241],{"class":73},"        # 全连接层\n",[28,39243,39244,39246,39249,39251],{"class":30,"line":10330},[28,39245,31326],{"class":38},[28,39247,39248],{"class":34},".block6",[28,39250,83],{"class":42},[28,39252,38486],{"class":34},[28,39254,39255],{"class":30,"line":10336},[28,39256,39257],{"class":73},"            # 平展操作\n",[28,39259,39260],{"class":30,"line":10350},[28,39261,39262],{"class":73},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[28,39264,39265],{"class":30,"line":10356},[28,39266,39267],{"class":34},"            nn.Flatten(),\n",[28,39269,39270,39273,39275,39277,39279,39281,39283,39285,39287],{"class":30,"line":10383},[28,39271,39272],{"class":34},"            nn.Linear(",[28,39274,995],{"class":38},[28,39276,256],{"class":42},[28,39278,995],{"class":38},[28,39280,256],{"class":42},[28,39282,38934],{"class":38},[28,39284,90],{"class":34},[28,39286,35347],{"class":38},[28,39288,38524],{"class":34},[28,39290,39291],{"class":30,"line":10392},[28,39292,38529],{"class":34},[28,39294,39295,39297,39299,39301,39303],{"class":30,"line":10398},[28,39296,39272],{"class":34},[28,39298,35347],{"class":38},[28,39300,90],{"class":34},[28,39302,32549],{"class":38},[28,39304,38524],{"class":34},[28,39306,39307],{"class":30,"line":10406},[28,39308,38529],{"class":34},[28,39310,39311,39313,39315,39317,39319],{"class":30,"line":10411},[28,39312,39272],{"class":34},[28,39314,32549],{"class":38},[28,39316,90],{"class":34},[28,39318,225],{"class":38},[28,39320,228],{"class":34},[28,39322,39323],{"class":30,"line":17090},[28,39324,38603],{"class":34},[28,39326,39327],{"class":30,"line":17096},[28,39328,2890],{"emptyLinePlaceholder":562},[28,39330,39331],{"class":30,"line":17119},[28,39332,39333],{"class":73},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39335,39336],{"class":30,"line":17125},[28,39337,39338],{"class":73},"        # 循环遍历模型\n",[28,39340,39341,39343,39346,39348,39351],{"class":30,"line":17148},[28,39342,3891],{"class":42},[28,39344,39345],{"class":34}," m ",[28,39347,55],{"class":42},[28,39349,39350],{"class":38}," self",[28,39352,39353],{"class":34},".modules():\n",[28,39355,39356],{"class":30,"line":17162},[28,39357,39358],{"class":73},"            # print(m)\n",[28,39360,39361,39363,39366],{"class":30,"line":17182},[28,39362,5130],{"class":42},[28,39364,39365],{"class":38}," isinstance",[28,39367,39368],{"class":34},"(m,nn.Conv2d):\n",[28,39370,39371],{"class":30,"line":17188},[28,39372,39373],{"class":73},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39375,39376,39379,39382,39384,39387],{"class":30,"line":17199},[28,39377,39378],{"class":34},"                nn.init.kaiming_normal_(m.weight,",[28,39380,39381],{"class":5704},"nonlinearity",[28,39383,83],{"class":42},[28,39385,39386],{"class":735},"'relu'",[28,39388,228],{"class":34},[28,39390,39391],{"class":30,"line":17222},[28,39392,39393],{"class":73},"                # 判断b参数是否存在\n",[28,39395,39396,39399,39402,39405,39408,39411],{"class":30,"line":17244},[28,39397,39398],{"class":42},"                if",[28,39400,39401],{"class":34}," m.bias ",[28,39403,39404],{"class":42},"is",[28,39406,39407],{"class":42}," not",[28,39409,39410],{"class":38}," None",[28,39412,4227],{"class":34},[28,39414,39415],{"class":30,"line":17249},[28,39416,39417],{"class":73},"                    # 如果参数不存在的化初始化b=0\n",[28,39419,39420,39423,39425],{"class":30,"line":17255},[28,39421,39422],{"class":34},"                    nn.init.constant_(m.bias,",[28,39424,822],{"class":38},[28,39426,228],{"class":34},[28,39428,39429],{"class":30,"line":17269},[28,39430,39431],{"class":73},"            # 全连接层初始化\n",[28,39433,39434,39437,39439],{"class":30,"line":17282},[28,39435,39436],{"class":42},"            elif",[28,39438,39365],{"class":38},[28,39440,39441],{"class":34},"(m,nn.Linear):\n",[28,39443,39444],{"class":30,"line":17287},[28,39445,39446],{"class":73},"                # 这个初始化方法是利用的是正太分布的方式\n",[28,39448,39449],{"class":30,"line":17301},[28,39450,39451],{"class":73},"                # 均值为0，方差为0.01\n",[28,39453,39454,39457,39459,39461,39464],{"class":30,"line":17306},[28,39455,39456],{"class":34},"                nn.init.normal_(m.weight,",[28,39458,822],{"class":38},[28,39460,90],{"class":34},[28,39462,39463],{"class":38},"0.01",[28,39465,228],{"class":34},[28,39467,39468],{"class":30,"line":17312},[28,39469,39470],{"class":73},"                # 初始化b参数\n",[28,39472,39473,39475,39477,39479,39481,39483],{"class":30,"line":17317},[28,39474,39398],{"class":42},[28,39476,39401],{"class":34},[28,39478,39404],{"class":42},[28,39480,39407],{"class":42},[28,39482,39410],{"class":38},[28,39484,4227],{"class":34},[28,39486,39487,39489,39491],{"class":30,"line":17331},[28,39488,39422],{"class":34},[28,39490,822],{"class":38},[28,39492,228],{"class":34},[28,39494,39495],{"class":30,"line":17336},[28,39496,2890],{"emptyLinePlaceholder":562},[28,39498,39499],{"class":30,"line":17341},[28,39500,35642],{"class":73},[28,39502,39503,39505,39507],{"class":30,"line":17355},[28,39504,31282],{"class":42},[28,39506,31574],{"class":2453},[28,39508,31577],{"class":34},[28,39510,39511,39513,39515,39517],{"class":30,"line":17367},[28,39512,31582],{"class":34},[28,39514,83],{"class":42},[28,39516,31304],{"class":38},[28,39518,39519],{"class":34},".block1(x)\n",[28,39521,39522,39524,39526,39528],{"class":30,"line":17372},[28,39523,31582],{"class":34},[28,39525,83],{"class":42},[28,39527,31304],{"class":38},[28,39529,39530],{"class":34},".block2(x)\n",[28,39532,39533,39535,39537,39539],{"class":30,"line":17385},[28,39534,31582],{"class":34},[28,39536,83],{"class":42},[28,39538,31304],{"class":38},[28,39540,39541],{"class":34},".block3(x)\n",[28,39543,39544,39546,39548,39550],{"class":30,"line":17390},[28,39545,31582],{"class":34},[28,39547,83],{"class":42},[28,39549,31304],{"class":38},[28,39551,39552],{"class":34},".block4(x)\n",[28,39554,39555,39557,39559,39561],{"class":30,"line":17395},[28,39556,31582],{"class":34},[28,39558,83],{"class":42},[28,39560,31304],{"class":38},[28,39562,39563],{"class":34},".block5(x)\n",[28,39565,39566,39568,39570,39572],{"class":30,"line":17400},[28,39567,31582],{"class":34},[28,39569,83],{"class":42},[28,39571,31304],{"class":38},[28,39573,39574],{"class":34},".block6(x)\n",[28,39576,39577,39579],{"class":30,"line":17413},[28,39578,15238],{"class":42},[28,39580,31690],{"class":34},[28,39582,39583],{"class":30,"line":17418},[28,39584,2890],{"emptyLinePlaceholder":562},[28,39586,39587],{"class":30,"line":33111},[28,39588,39589],{"class":73},"# 验证模型\n",[28,39591,39592,39594,39596,39598,39601],{"class":30,"line":33117},[28,39593,2021],{"class":42},[28,39595,31701],{"class":38},[28,39597,3439],{"class":42},[28,39599,39600],{"class":735},"'__main__'",[28,39602,4227],{"class":34},[28,39604,39605,39607,39609,39611,39613,39615,39617,39619,39621],{"class":30,"line":33123},[28,39606,31718],{"class":34},[28,39608,83],{"class":42},[28,39610,30934],{"class":34},[28,39612,31725],{"class":735},[28,39614,2194],{"class":42},[28,39616,31730],{"class":34},[28,39618,2191],{"class":42},[28,39620,30959],{"class":735},[28,39622,228],{"class":34},[28,39624,39625,39627],{"class":30,"line":33129},[28,39626,31780],{"class":38},[28,39628,30968],{"class":34},[28,39630,39631,39633,39635],{"class":30,"line":33135},[28,39632,31770],{"class":34},[28,39634,83],{"class":42},[28,39636,39637],{"class":34},"VGG16().to(device)\n",[28,39639,39640,39642,39644,39646,39648,39650,39652,39654],{"class":30,"line":33146},[28,39641,31780],{"class":38},[28,39643,31783],{"class":34},[28,39645,39],{"class":38},[28,39647,90],{"class":34},[28,39649,31980],{"class":38},[28,39651,90],{"class":34},[28,39653,31980],{"class":38},[28,39655,31796],{"class":34},[588,39657,39658],{"start":77},[591,39659,39660],{},"训练代码",[14,39662,39663],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39665,39666],{},"解决方式:",[14,39668,39669],{},"①权重初始化",[18,39671,39673],{"className":20,"code":39672,"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,39674,39675,39680,39685,39697,39702,39710,39715,39728,39733,39747,39752,39761,39766,39775,39780,39785,39798,39803,39817],{"__ignoreMap":23},[28,39676,39677],{"class":30,"line":31},[28,39678,39679],{"class":73},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39681,39682],{"class":30,"line":77},[28,39683,39684],{"class":73},"# 循环遍历模型\n",[28,39686,39687,39689,39691,39693,39695],{"class":30,"line":114},[28,39688,49],{"class":42},[28,39690,39345],{"class":34},[28,39692,55],{"class":42},[28,39694,39350],{"class":38},[28,39696,39353],{"class":34},[28,39698,39699],{"class":30,"line":128},[28,39700,39701],{"class":73},"    # print(m)\n",[28,39703,39704,39706,39708],{"class":30,"line":393},[28,39705,3590],{"class":42},[28,39707,39365],{"class":38},[28,39709,39368],{"class":34},[28,39711,39712],{"class":30,"line":409},[28,39713,39714],{"class":73},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39716,39717,39720,39722,39724,39726],{"class":30,"line":1711},[28,39718,39719],{"class":34},"        nn.init.kaiming_normal_(m.weight,",[28,39721,39381],{"class":5704},[28,39723,83],{"class":42},[28,39725,39386],{"class":735},[28,39727,228],{"class":34},[28,39729,39730],{"class":30,"line":1802},[28,39731,39732],{"class":73},"        # 判断b参数是否存在\n",[28,39734,39735,39737,39739,39741,39743,39745],{"class":30,"line":1808},[28,39736,2987],{"class":42},[28,39738,39401],{"class":34},[28,39740,39404],{"class":42},[28,39742,39407],{"class":42},[28,39744,39410],{"class":38},[28,39746,4227],{"class":34},[28,39748,39749],{"class":30,"line":1820},[28,39750,39751],{"class":73},"            # 如果参数不存在的化初始化b=0\n",[28,39753,39754,39757,39759],{"class":30,"line":2102},[28,39755,39756],{"class":34},"            nn.init.constant_(m.bias,",[28,39758,822],{"class":38},[28,39760,228],{"class":34},[28,39762,39763],{"class":30,"line":2107},[28,39764,39765],{"class":73},"    # 全连接层初始化\n",[28,39767,39768,39771,39773],{"class":30,"line":2113},[28,39769,39770],{"class":42},"    elif",[28,39772,39365],{"class":38},[28,39774,39441],{"class":34},[28,39776,39777],{"class":30,"line":2118},[28,39778,39779],{"class":73},"        # 这个初始化方法是利用的是正太分布的方式\n",[28,39781,39782],{"class":30,"line":2132},[28,39783,39784],{"class":73},"        # 均值为0，方差为0.01\n",[28,39786,39787,39790,39792,39794,39796],{"class":30,"line":2137},[28,39788,39789],{"class":34},"        nn.init.normal_(m.weight,",[28,39791,822],{"class":38},[28,39793,90],{"class":34},[28,39795,39463],{"class":38},[28,39797,228],{"class":34},[28,39799,39800],{"class":30,"line":2143},[28,39801,39802],{"class":73},"        # 初始化b参数\n",[28,39804,39805,39807,39809,39811,39813,39815],{"class":30,"line":2164},[28,39806,2987],{"class":42},[28,39808,39401],{"class":34},[28,39810,39404],{"class":42},[28,39812,39407],{"class":42},[28,39814,39410],{"class":38},[28,39816,4227],{"class":34},[28,39818,39819,39821,39823],{"class":30,"line":2169},[28,39820,39756],{"class":34},[28,39822,822],{"class":38},[28,39824,228],{"class":34},[14,39826,39827],{},"②尽可能地增加批次",[14,39829,39830],{},"训练完整代码：",[18,39832,39833],{"className":20,"code":38376,"language":22,"meta":23,"style":23},[25,39834,39835,39841,39851,39861,39871,39875,39891,39899,39917,39921,39925,39935,39971,39975,40011,40015,40043,40047,40051,40061,40097,40101,40137,40141,40169,40173,40177,40187,40223,40227,40263,40267,40303,40307,40335,40339,40343,40353,40389,40393,40429,40433,40469,40473,40501,40505,40509,40519,40555,40559,40595,40599,40635,40639,40667,40671,40675,40685,40689,40693,40697,40717,40721,40733,40737,40749,40753,40757,40761,40765,40777,40781,40789,40793,40805,40809,40823,40827,40835,40839,40847,40851,40855,40867,40871,40885,40893,40897,40901,40909,40919,40929,40939,40949,40959,40969,40975,40979,40983,40995,41015,41021,41029],{"__ignoreMap":23},[28,39836,39837,39839],{"class":30,"line":31},[28,39838,536],{"class":42},[28,39840,30878],{"class":34},[28,39842,39843,39845,39847,39849],{"class":30,"line":77},[28,39844,530],{"class":42},[28,39846,38391],{"class":34},[28,39848,536],{"class":42},[28,39850,38396],{"class":34},[28,39852,39853,39855,39857,39859],{"class":30,"line":114},[28,39854,530],{"class":42},[28,39856,31222],{"class":34},[28,39858,536],{"class":42},[28,39860,31227],{"class":34},[28,39862,39863,39865,39867,39869],{"class":30,"line":128},[28,39864,530],{"class":42},[28,39866,31239],{"class":34},[28,39868,536],{"class":42},[28,39870,31244],{"class":34},[28,39872,39873],{"class":30,"line":393},[28,39874,2890],{"emptyLinePlaceholder":562},[28,39876,39877,39879,39881,39883,39885,39887,39889],{"class":30,"line":409},[28,39878,15180],{"class":42},[28,39880,38427],{"class":2453},[28,39882,367],{"class":34},[28,39884,31260],{"class":2453},[28,39886,1179],{"class":34},[28,39888,31265],{"class":2453},[28,39890,372],{"class":34},[28,39892,39893,39895,39897],{"class":30,"line":1711},[28,39894,31282],{"class":42},[28,39896,31285],{"class":38},[28,39898,31288],{"class":34},[28,39900,39901,39903,39905,39907,39909,39911,39913,39915],{"class":30,"line":1802},[28,39902,31298],{"class":38},[28,39904,367],{"class":34},[28,39906,38454],{"class":38},[28,39908,12921],{"class":34},[28,39910,31304],{"class":38},[28,39912,31307],{"class":34},[28,39914,31310],{"class":38},[28,39916,2466],{"class":34},[28,39918,39919],{"class":30,"line":1808},[28,39920,38469],{"class":73},[28,39922,39923],{"class":30,"line":1820},[28,39924,38474],{"class":73},[28,39926,39927,39929,39931,39933],{"class":30,"line":2102},[28,39928,31326],{"class":38},[28,39930,38481],{"class":34},[28,39932,83],{"class":42},[28,39934,38486],{"class":34},[28,39936,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969],{"class":30,"line":2107},[28,39938,38491],{"class":34},[28,39940,31337],{"class":5704},[28,39942,83],{"class":42},[28,39944,39],{"class":38},[28,39946,90],{"class":34},[28,39948,31346],{"class":5704},[28,39950,83],{"class":42},[28,39952,834],{"class":38},[28,39954,90],{"class":34},[28,39956,31355],{"class":5704},[28,39958,83],{"class":42},[28,39960,98],{"class":38},[28,39962,90],{"class":34},[28,39964,31364],{"class":5704},[28,39966,83],{"class":42},[28,39968,39],{"class":38},[28,39970,38524],{"class":34},[28,39972,39973],{"class":30,"line":2113},[28,39974,38529],{"class":34},[28,39976,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009],{"class":30,"line":2118},[28,39978,38491],{"class":34},[28,39980,31337],{"class":5704},[28,39982,83],{"class":42},[28,39984,834],{"class":38},[28,39986,90],{"class":34},[28,39988,31346],{"class":5704},[28,39990,83],{"class":42},[28,39992,834],{"class":38},[28,39994,90],{"class":34},[28,39996,31355],{"class":5704},[28,39998,83],{"class":42},[28,40000,98],{"class":38},[28,40002,90],{"class":34},[28,40004,31364],{"class":5704},[28,40006,83],{"class":42},[28,40008,39],{"class":38},[28,40010,38524],{"class":34},[28,40012,40013],{"class":30,"line":2132},[28,40014,38529],{"class":34},[28,40016,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041],{"class":30,"line":2137},[28,40018,38574],{"class":34},[28,40020,31355],{"class":5704},[28,40022,83],{"class":42},[28,40024,93],{"class":38},[28,40026,90],{"class":34},[28,40028,31410],{"class":5704},[28,40030,83],{"class":42},[28,40032,93],{"class":38},[28,40034,90],{"class":34},[28,40036,31364],{"class":5704},[28,40038,83],{"class":42},[28,40040,822],{"class":38},[28,40042,228],{"class":34},[28,40044,40045],{"class":30,"line":2143},[28,40046,38603],{"class":34},[28,40048,40049],{"class":30,"line":2164},[28,40050,38608],{"class":73},[28,40052,40053,40055,40057,40059],{"class":30,"line":2169},[28,40054,31326],{"class":38},[28,40056,38615],{"class":34},[28,40058,83],{"class":42},[28,40060,38486],{"class":34},[28,40062,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095],{"class":30,"line":2183},[28,40064,38491],{"class":34},[28,40066,31337],{"class":5704},[28,40068,83],{"class":42},[28,40070,834],{"class":38},[28,40072,90],{"class":34},[28,40074,31346],{"class":5704},[28,40076,83],{"class":42},[28,40078,32549],{"class":38},[28,40080,90],{"class":34},[28,40082,31355],{"class":5704},[28,40084,83],{"class":42},[28,40086,98],{"class":38},[28,40088,90],{"class":34},[28,40090,31364],{"class":5704},[28,40092,83],{"class":42},[28,40094,39],{"class":38},[28,40096,38524],{"class":34},[28,40098,40099],{"class":30,"line":2188},[28,40100,38529],{"class":34},[28,40102,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135],{"class":30,"line":2217},[28,40104,38491],{"class":34},[28,40106,31337],{"class":5704},[28,40108,83],{"class":42},[28,40110,32549],{"class":38},[28,40112,90],{"class":34},[28,40114,31346],{"class":5704},[28,40116,83],{"class":42},[28,40118,32549],{"class":38},[28,40120,90],{"class":34},[28,40122,31355],{"class":5704},[28,40124,83],{"class":42},[28,40126,98],{"class":38},[28,40128,90],{"class":34},[28,40130,31364],{"class":5704},[28,40132,83],{"class":42},[28,40134,39],{"class":38},[28,40136,38524],{"class":34},[28,40138,40139],{"class":30,"line":2222},[28,40140,38529],{"class":34},[28,40142,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":30,"line":2239},[28,40144,38574],{"class":34},[28,40146,31355],{"class":5704},[28,40148,83],{"class":42},[28,40150,93],{"class":38},[28,40152,90],{"class":34},[28,40154,31410],{"class":5704},[28,40156,83],{"class":42},[28,40158,93],{"class":38},[28,40160,90],{"class":34},[28,40162,31364],{"class":5704},[28,40164,83],{"class":42},[28,40166,822],{"class":38},[28,40168,228],{"class":34},[28,40170,40171],{"class":30,"line":2244},[28,40172,38603],{"class":34},[28,40174,40175],{"class":30,"line":2249},[28,40176,38736],{"class":73},[28,40178,40179,40181,40183,40185],{"class":30,"line":2254},[28,40180,31326],{"class":38},[28,40182,38743],{"class":34},[28,40184,83],{"class":42},[28,40186,38486],{"class":34},[28,40188,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":30,"line":2268},[28,40190,38491],{"class":34},[28,40192,31337],{"class":5704},[28,40194,83],{"class":42},[28,40196,32549],{"class":38},[28,40198,90],{"class":34},[28,40200,31346],{"class":5704},[28,40202,83],{"class":42},[28,40204,35347],{"class":38},[28,40206,90],{"class":34},[28,40208,31355],{"class":5704},[28,40210,83],{"class":42},[28,40212,98],{"class":38},[28,40214,90],{"class":34},[28,40216,31364],{"class":5704},[28,40218,83],{"class":42},[28,40220,39],{"class":38},[28,40222,38524],{"class":34},[28,40224,40225],{"class":30,"line":2273},[28,40226,38529],{"class":34},[28,40228,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261],{"class":30,"line":3067},[28,40230,38491],{"class":34},[28,40232,31337],{"class":5704},[28,40234,83],{"class":42},[28,40236,35347],{"class":38},[28,40238,90],{"class":34},[28,40240,31346],{"class":5704},[28,40242,83],{"class":42},[28,40244,35347],{"class":38},[28,40246,90],{"class":34},[28,40248,31355],{"class":5704},[28,40250,83],{"class":42},[28,40252,98],{"class":38},[28,40254,90],{"class":34},[28,40256,31364],{"class":5704},[28,40258,83],{"class":42},[28,40260,39],{"class":38},[28,40262,38524],{"class":34},[28,40264,40265],{"class":30,"line":3081},[28,40266,38529],{"class":34},[28,40268,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301],{"class":30,"line":3089},[28,40270,38491],{"class":34},[28,40272,31337],{"class":5704},[28,40274,83],{"class":42},[28,40276,35347],{"class":38},[28,40278,90],{"class":34},[28,40280,31346],{"class":5704},[28,40282,83],{"class":42},[28,40284,35347],{"class":38},[28,40286,90],{"class":34},[28,40288,31355],{"class":5704},[28,40290,83],{"class":42},[28,40292,98],{"class":38},[28,40294,90],{"class":34},[28,40296,31364],{"class":5704},[28,40298,83],{"class":42},[28,40300,39],{"class":38},[28,40302,38524],{"class":34},[28,40304,40305],{"class":30,"line":3094},[28,40306,38529],{"class":34},[28,40308,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331,40333],{"class":30,"line":3100},[28,40310,38574],{"class":34},[28,40312,31355],{"class":5704},[28,40314,83],{"class":42},[28,40316,93],{"class":38},[28,40318,90],{"class":34},[28,40320,31410],{"class":5704},[28,40322,83],{"class":42},[28,40324,93],{"class":38},[28,40326,90],{"class":34},[28,40328,31364],{"class":5704},[28,40330,83],{"class":42},[28,40332,822],{"class":38},[28,40334,228],{"class":34},[28,40336,40337],{"class":30,"line":3106},[28,40338,38603],{"class":34},[28,40340,40341],{"class":30,"line":3111},[28,40342,38904],{"class":73},[28,40344,40345,40347,40349,40351],{"class":30,"line":8436},[28,40346,31326],{"class":38},[28,40348,38911],{"class":34},[28,40350,83],{"class":42},[28,40352,38486],{"class":34},[28,40354,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387],{"class":30,"line":8460},[28,40356,38491],{"class":34},[28,40358,31337],{"class":5704},[28,40360,83],{"class":42},[28,40362,35347],{"class":38},[28,40364,90],{"class":34},[28,40366,31346],{"class":5704},[28,40368,83],{"class":42},[28,40370,38934],{"class":38},[28,40372,90],{"class":34},[28,40374,31355],{"class":5704},[28,40376,83],{"class":42},[28,40378,98],{"class":38},[28,40380,90],{"class":34},[28,40382,31364],{"class":5704},[28,40384,83],{"class":42},[28,40386,39],{"class":38},[28,40388,38524],{"class":34},[28,40390,40391],{"class":30,"line":8465},[28,40392,38529],{"class":34},[28,40394,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427],{"class":30,"line":8471},[28,40396,38491],{"class":34},[28,40398,31337],{"class":5704},[28,40400,83],{"class":42},[28,40402,38934],{"class":38},[28,40404,90],{"class":34},[28,40406,31346],{"class":5704},[28,40408,83],{"class":42},[28,40410,38934],{"class":38},[28,40412,90],{"class":34},[28,40414,31355],{"class":5704},[28,40416,83],{"class":42},[28,40418,98],{"class":38},[28,40420,90],{"class":34},[28,40422,31364],{"class":5704},[28,40424,83],{"class":42},[28,40426,39],{"class":38},[28,40428,38524],{"class":34},[28,40430,40431],{"class":30,"line":8498},[28,40432,38529],{"class":34},[28,40434,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467],{"class":30,"line":8503},[28,40436,38491],{"class":34},[28,40438,31337],{"class":5704},[28,40440,83],{"class":42},[28,40442,38934],{"class":38},[28,40444,90],{"class":34},[28,40446,31346],{"class":5704},[28,40448,83],{"class":42},[28,40450,38934],{"class":38},[28,40452,90],{"class":34},[28,40454,31355],{"class":5704},[28,40456,83],{"class":42},[28,40458,98],{"class":38},[28,40460,90],{"class":34},[28,40462,31364],{"class":5704},[28,40464,83],{"class":42},[28,40466,39],{"class":38},[28,40468,38524],{"class":34},[28,40470,40471],{"class":30,"line":8509},[28,40472,38529],{"class":34},[28,40474,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499],{"class":30,"line":8521},[28,40476,38574],{"class":34},[28,40478,31355],{"class":5704},[28,40480,83],{"class":42},[28,40482,93],{"class":38},[28,40484,90],{"class":34},[28,40486,31410],{"class":5704},[28,40488,83],{"class":42},[28,40490,93],{"class":38},[28,40492,90],{"class":34},[28,40494,31364],{"class":5704},[28,40496,83],{"class":42},[28,40498,822],{"class":38},[28,40500,228],{"class":34},[28,40502,40503],{"class":30,"line":8533},[28,40504,38603],{"class":34},[28,40506,40507],{"class":30,"line":8545},[28,40508,39073],{"class":73},[28,40510,40511,40513,40515,40517],{"class":30,"line":10202},[28,40512,31326],{"class":38},[28,40514,39080],{"class":34},[28,40516,83],{"class":42},[28,40518,38486],{"class":34},[28,40520,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553],{"class":30,"line":10227},[28,40522,38491],{"class":34},[28,40524,31337],{"class":5704},[28,40526,83],{"class":42},[28,40528,38934],{"class":38},[28,40530,90],{"class":34},[28,40532,31346],{"class":5704},[28,40534,83],{"class":42},[28,40536,38934],{"class":38},[28,40538,90],{"class":34},[28,40540,31355],{"class":5704},[28,40542,83],{"class":42},[28,40544,98],{"class":38},[28,40546,90],{"class":34},[28,40548,31364],{"class":5704},[28,40550,83],{"class":42},[28,40552,39],{"class":38},[28,40554,38524],{"class":34},[28,40556,40557],{"class":30,"line":10250},[28,40558,38529],{"class":34},[28,40560,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593],{"class":30,"line":10274},[28,40562,38491],{"class":34},[28,40564,31337],{"class":5704},[28,40566,83],{"class":42},[28,40568,38934],{"class":38},[28,40570,90],{"class":34},[28,40572,31346],{"class":5704},[28,40574,83],{"class":42},[28,40576,38934],{"class":38},[28,40578,90],{"class":34},[28,40580,31355],{"class":5704},[28,40582,83],{"class":42},[28,40584,98],{"class":38},[28,40586,90],{"class":34},[28,40588,31364],{"class":5704},[28,40590,83],{"class":42},[28,40592,39],{"class":38},[28,40594,38524],{"class":34},[28,40596,40597],{"class":30,"line":10279},[28,40598,38529],{"class":34},[28,40600,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633],{"class":30,"line":10284},[28,40602,38491],{"class":34},[28,40604,31337],{"class":5704},[28,40606,83],{"class":42},[28,40608,38934],{"class":38},[28,40610,90],{"class":34},[28,40612,31346],{"class":5704},[28,40614,83],{"class":42},[28,40616,38934],{"class":38},[28,40618,90],{"class":34},[28,40620,31355],{"class":5704},[28,40622,83],{"class":42},[28,40624,98],{"class":38},[28,40626,90],{"class":34},[28,40628,31364],{"class":5704},[28,40630,83],{"class":42},[28,40632,39],{"class":38},[28,40634,38524],{"class":34},[28,40636,40637],{"class":30,"line":10289},[28,40638,38529],{"class":34},[28,40640,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665],{"class":30,"line":10298},[28,40642,38574],{"class":34},[28,40644,31355],{"class":5704},[28,40646,83],{"class":42},[28,40648,93],{"class":38},[28,40650,90],{"class":34},[28,40652,31410],{"class":5704},[28,40654,83],{"class":42},[28,40656,93],{"class":38},[28,40658,90],{"class":34},[28,40660,31364],{"class":5704},[28,40662,83],{"class":42},[28,40664,822],{"class":38},[28,40666,228],{"class":34},[28,40668,40669],{"class":30,"line":10303},[28,40670,38603],{"class":34},[28,40672,40673],{"class":30,"line":10309},[28,40674,39241],{"class":73},[28,40676,40677,40679,40681,40683],{"class":30,"line":10330},[28,40678,31326],{"class":38},[28,40680,39248],{"class":34},[28,40682,83],{"class":42},[28,40684,38486],{"class":34},[28,40686,40687],{"class":30,"line":10336},[28,40688,39257],{"class":73},[28,40690,40691],{"class":30,"line":10350},[28,40692,39262],{"class":73},[28,40694,40695],{"class":30,"line":10356},[28,40696,39267],{"class":34},[28,40698,40699,40701,40703,40705,40707,40709,40711,40713,40715],{"class":30,"line":10383},[28,40700,39272],{"class":34},[28,40702,995],{"class":38},[28,40704,256],{"class":42},[28,40706,995],{"class":38},[28,40708,256],{"class":42},[28,40710,38934],{"class":38},[28,40712,90],{"class":34},[28,40714,35347],{"class":38},[28,40716,38524],{"class":34},[28,40718,40719],{"class":30,"line":10392},[28,40720,38529],{"class":34},[28,40722,40723,40725,40727,40729,40731],{"class":30,"line":10398},[28,40724,39272],{"class":34},[28,40726,35347],{"class":38},[28,40728,90],{"class":34},[28,40730,32549],{"class":38},[28,40732,38524],{"class":34},[28,40734,40735],{"class":30,"line":10406},[28,40736,38529],{"class":34},[28,40738,40739,40741,40743,40745,40747],{"class":30,"line":10411},[28,40740,39272],{"class":34},[28,40742,32549],{"class":38},[28,40744,90],{"class":34},[28,40746,225],{"class":38},[28,40748,228],{"class":34},[28,40750,40751],{"class":30,"line":17090},[28,40752,38603],{"class":34},[28,40754,40755],{"class":30,"line":17096},[28,40756,2890],{"emptyLinePlaceholder":562},[28,40758,40759],{"class":30,"line":17119},[28,40760,39333],{"class":73},[28,40762,40763],{"class":30,"line":17125},[28,40764,39338],{"class":73},[28,40766,40767,40769,40771,40773,40775],{"class":30,"line":17148},[28,40768,3891],{"class":42},[28,40770,39345],{"class":34},[28,40772,55],{"class":42},[28,40774,39350],{"class":38},[28,40776,39353],{"class":34},[28,40778,40779],{"class":30,"line":17162},[28,40780,39358],{"class":73},[28,40782,40783,40785,40787],{"class":30,"line":17182},[28,40784,5130],{"class":42},[28,40786,39365],{"class":38},[28,40788,39368],{"class":34},[28,40790,40791],{"class":30,"line":17188},[28,40792,39373],{"class":73},[28,40794,40795,40797,40799,40801,40803],{"class":30,"line":17199},[28,40796,39378],{"class":34},[28,40798,39381],{"class":5704},[28,40800,83],{"class":42},[28,40802,39386],{"class":735},[28,40804,228],{"class":34},[28,40806,40807],{"class":30,"line":17222},[28,40808,39393],{"class":73},[28,40810,40811,40813,40815,40817,40819,40821],{"class":30,"line":17244},[28,40812,39398],{"class":42},[28,40814,39401],{"class":34},[28,40816,39404],{"class":42},[28,40818,39407],{"class":42},[28,40820,39410],{"class":38},[28,40822,4227],{"class":34},[28,40824,40825],{"class":30,"line":17249},[28,40826,39417],{"class":73},[28,40828,40829,40831,40833],{"class":30,"line":17255},[28,40830,39422],{"class":34},[28,40832,822],{"class":38},[28,40834,228],{"class":34},[28,40836,40837],{"class":30,"line":17269},[28,40838,39431],{"class":73},[28,40840,40841,40843,40845],{"class":30,"line":17282},[28,40842,39436],{"class":42},[28,40844,39365],{"class":38},[28,40846,39441],{"class":34},[28,40848,40849],{"class":30,"line":17287},[28,40850,39446],{"class":73},[28,40852,40853],{"class":30,"line":17301},[28,40854,39451],{"class":73},[28,40856,40857,40859,40861,40863,40865],{"class":30,"line":17306},[28,40858,39456],{"class":34},[28,40860,822],{"class":38},[28,40862,90],{"class":34},[28,40864,39463],{"class":38},[28,40866,228],{"class":34},[28,40868,40869],{"class":30,"line":17312},[28,40870,39470],{"class":73},[28,40872,40873,40875,40877,40879,40881,40883],{"class":30,"line":17317},[28,40874,39398],{"class":42},[28,40876,39401],{"class":34},[28,40878,39404],{"class":42},[28,40880,39407],{"class":42},[28,40882,39410],{"class":38},[28,40884,4227],{"class":34},[28,40886,40887,40889,40891],{"class":30,"line":17331},[28,40888,39422],{"class":34},[28,40890,822],{"class":38},[28,40892,228],{"class":34},[28,40894,40895],{"class":30,"line":17336},[28,40896,2890],{"emptyLinePlaceholder":562},[28,40898,40899],{"class":30,"line":17341},[28,40900,35642],{"class":73},[28,40902,40903,40905,40907],{"class":30,"line":17355},[28,40904,31282],{"class":42},[28,40906,31574],{"class":2453},[28,40908,31577],{"class":34},[28,40910,40911,40913,40915,40917],{"class":30,"line":17367},[28,40912,31582],{"class":34},[28,40914,83],{"class":42},[28,40916,31304],{"class":38},[28,40918,39519],{"class":34},[28,40920,40921,40923,40925,40927],{"class":30,"line":17372},[28,40922,31582],{"class":34},[28,40924,83],{"class":42},[28,40926,31304],{"class":38},[28,40928,39530],{"class":34},[28,40930,40931,40933,40935,40937],{"class":30,"line":17385},[28,40932,31582],{"class":34},[28,40934,83],{"class":42},[28,40936,31304],{"class":38},[28,40938,39541],{"class":34},[28,40940,40941,40943,40945,40947],{"class":30,"line":17390},[28,40942,31582],{"class":34},[28,40944,83],{"class":42},[28,40946,31304],{"class":38},[28,40948,39552],{"class":34},[28,40950,40951,40953,40955,40957],{"class":30,"line":17395},[28,40952,31582],{"class":34},[28,40954,83],{"class":42},[28,40956,31304],{"class":38},[28,40958,39563],{"class":34},[28,40960,40961,40963,40965,40967],{"class":30,"line":17400},[28,40962,31582],{"class":34},[28,40964,83],{"class":42},[28,40966,31304],{"class":38},[28,40968,39574],{"class":34},[28,40970,40971,40973],{"class":30,"line":17413},[28,40972,15238],{"class":42},[28,40974,31690],{"class":34},[28,40976,40977],{"class":30,"line":17418},[28,40978,2890],{"emptyLinePlaceholder":562},[28,40980,40981],{"class":30,"line":33111},[28,40982,39589],{"class":73},[28,40984,40985,40987,40989,40991,40993],{"class":30,"line":33117},[28,40986,2021],{"class":42},[28,40988,31701],{"class":38},[28,40990,3439],{"class":42},[28,40992,39600],{"class":735},[28,40994,4227],{"class":34},[28,40996,40997,40999,41001,41003,41005,41007,41009,41011,41013],{"class":30,"line":33123},[28,40998,31718],{"class":34},[28,41000,83],{"class":42},[28,41002,30934],{"class":34},[28,41004,31725],{"class":735},[28,41006,2194],{"class":42},[28,41008,31730],{"class":34},[28,41010,2191],{"class":42},[28,41012,30959],{"class":735},[28,41014,228],{"class":34},[28,41016,41017,41019],{"class":30,"line":33129},[28,41018,31780],{"class":38},[28,41020,30968],{"class":34},[28,41022,41023,41025,41027],{"class":30,"line":33135},[28,41024,31770],{"class":34},[28,41026,83],{"class":42},[28,41028,39637],{"class":34},[28,41030,41031,41033,41035,41037,41039,41041,41043,41045],{"class":30,"line":33146},[28,41032,31780],{"class":38},[28,41034,31783],{"class":34},[28,41036,39],{"class":38},[28,41038,90],{"class":34},[28,41040,31980],{"class":38},[28,41042,90],{"class":34},[28,41044,31980],{"class":38},[28,41046,31796],{"class":34},[588,41048,41049],{"start":114},[591,41050,41051],{},"测试代码",[18,41053,41055],{"className":20,"code":41054,"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,41056,41057,41063,41073,41083,41087,41097,41108,41112,41116,41120,41128,41144,41154,41170,41180,41194,41198,41208,41218,41228,41234,41238,41242,41250,41254,41270,41278,41282,41286,41294,41302,41306,41310,41314,41318,41324,41328,41338,41346,41354,41358,41362,41366,41374,41378,41394,41398,41402,41406,41418,41422,41434,41438,41442,41454,41458,41468,41472,41476,41488,41492,41501,41505,41509,41517,41521,41529,41533,41537,41541,41545,41549,41565,41573,41577,41581,41629,41635,41639,41649,41657,41665,41669,41673,41677,41681,41689,41693,41709,41713,41721,41729],{"__ignoreMap":23},[28,41058,41059,41061],{"class":30,"line":31},[28,41060,536],{"class":42},[28,41062,30878],{"class":34},[28,41064,41065,41067,41069,41071],{"class":30,"line":77},[28,41066,536],{"class":42},[28,41068,31895],{"class":34},[28,41070,542],{"class":42},[28,41072,31900],{"class":34},[28,41074,41075,41077,41079,41081],{"class":30,"line":114},[28,41076,530],{"class":42},[28,41078,31878],{"class":34},[28,41080,536],{"class":42},[28,41082,31883],{"class":34},[28,41084,41085],{"class":30,"line":128},[28,41086,34399],{"class":73},[28,41088,41089,41091,41093,41095],{"class":30,"line":393},[28,41090,530],{"class":42},[28,41092,31849],{"class":34},[28,41094,536],{"class":42},[28,41096,31854],{"class":34},[28,41098,41099,41101,41103,41105],{"class":30,"line":409},[28,41100,530],{"class":42},[28,41102,32393],{"class":34},[28,41104,536],{"class":42},[28,41106,41107],{"class":38}," VGG16\n",[28,41109,41110],{"class":30,"line":1711},[28,41111,2890],{"emptyLinePlaceholder":562},[28,41113,41114],{"class":30,"line":1802},[28,41115,2890],{"emptyLinePlaceholder":562},[28,41117,41118],{"class":30,"line":1808},[28,41119,34428],{"class":73},[28,41121,41122,41124,41126],{"class":30,"line":1820},[28,41123,32426],{"class":42},[28,41125,34435],{"class":2453},[28,41127,32432],{"class":34},[28,41129,41130,41132,41134,41136,41138,41140,41142],{"class":30,"line":2102},[28,41131,34442],{"class":34},[28,41133,83],{"class":42},[28,41135,31934],{"class":34},[28,41137,31937],{"class":5704},[28,41139,83],{"class":42},[28,41141,31942],{"class":735},[28,41143,31945],{"class":34},[28,41145,41146,41148,41150,41152],{"class":30,"line":2107},[28,41147,34459],{"class":5704},[28,41149,83],{"class":42},[28,41151,34464],{"class":38},[28,41153,31945],{"class":34},[28,41155,41156,41158,41160,41162,41164,41166,41168],{"class":30,"line":2113},[28,41157,34471],{"class":5704},[28,41159,83],{"class":42},[28,41161,31972],{"class":34},[28,41163,31975],{"class":5704},[28,41165,83],{"class":42},[28,41167,31980],{"class":38},[28,41169,31983],{"class":34},[28,41171,41172,41174,41176,41178],{"class":30,"line":2118},[28,41173,34488],{"class":5704},[28,41175,83],{"class":42},[28,41177,31955],{"class":38},[28,41179,228],{"class":34},[28,41181,41182,41184,41186,41188,41190,41192],{"class":30,"line":2132},[28,41183,34499],{"class":34},[28,41185,83],{"class":42},[28,41187,32013],{"class":34},[28,41189,32016],{"class":5704},[28,41191,83],{"class":42},[28,41193,34510],{"class":34},[28,41195,41196],{"class":30,"line":2137},[28,41197,34515],{"class":73},[28,41199,41200,41202,41204,41206],{"class":30,"line":2143},[28,41201,34520],{"class":5704},[28,41203,83],{"class":42},[28,41205,39],{"class":38},[28,41207,31945],{"class":34},[28,41209,41210,41212,41214,41216],{"class":30,"line":2164},[28,41211,34531],{"class":5704},[28,41213,83],{"class":42},[28,41215,31955],{"class":38},[28,41217,31945],{"class":34},[28,41219,41220,41222,41224,41226],{"class":30,"line":2169},[28,41221,34542],{"class":5704},[28,41223,83],{"class":42},[28,41225,822],{"class":38},[28,41227,228],{"class":34},[28,41229,41230,41232],{"class":30,"line":2183},[28,41231,4578],{"class":42},[28,41233,34555],{"class":34},[28,41235,41236],{"class":30,"line":2188},[28,41237,2890],{"emptyLinePlaceholder":562},[28,41239,41240],{"class":30,"line":2217},[28,41241,34564],{"class":73},[28,41243,41244,41246,41248],{"class":30,"line":2222},[28,41245,32426],{"class":42},[28,41247,34571],{"class":2453},[28,41249,34574],{"class":34},[28,41251,41252],{"class":30,"line":2239},[28,41253,34579],{"class":73},[28,41255,41256,41258,41260,41262,41264,41266,41268],{"class":30,"line":2244},[28,41257,31718],{"class":34},[28,41259,83],{"class":42},[28,41261,31725],{"class":735},[28,41263,2194],{"class":42},[28,41265,31730],{"class":34},[28,41267,2191],{"class":42},[28,41269,34596],{"class":735},[28,41271,41272,41274,41276],{"class":30,"line":2249},[28,41273,31770],{"class":34},[28,41275,83],{"class":42},[28,41277,32768],{"class":34},[28,41279,41280],{"class":30,"line":2254},[28,41281,2890],{"emptyLinePlaceholder":562},[28,41283,41284],{"class":30,"line":2268},[28,41285,34613],{"class":73},[28,41287,41288,41290,41292],{"class":30,"line":2273},[28,41289,34618],{"class":34},[28,41291,83],{"class":42},[28,41293,32821],{"class":38},[28,41295,41296,41298,41300],{"class":30,"line":3067},[28,41297,34627],{"class":34},[28,41299,83],{"class":42},[28,41301,3574],{"class":38},[28,41303,41304],{"class":30,"line":3081},[28,41305,2890],{"emptyLinePlaceholder":562},[28,41307,41308],{"class":30,"line":3089},[28,41309,34640],{"class":73},[28,41311,41312],{"class":30,"line":3094},[28,41313,34645],{"class":73},[28,41315,41316],{"class":30,"line":3100},[28,41317,34650],{"class":73},[28,41319,41320,41322],{"class":30,"line":3106},[28,41321,34655],{"class":42},[28,41323,33362],{"class":34},[28,41325,41326],{"class":30,"line":3111},[28,41327,34662],{"class":73},[28,41329,41330,41332,41334,41336],{"class":30,"line":8436},[28,41331,3891],{"class":42},[28,41333,34669],{"class":34},[28,41335,55],{"class":42},[28,41337,34674],{"class":34},[28,41339,41340,41342,41344],{"class":30,"line":8460},[28,41341,34679],{"class":34},[28,41343,83],{"class":42},[28,41345,34684],{"class":34},[28,41347,41348,41350,41352],{"class":30,"line":8465},[28,41349,34689],{"class":34},[28,41351,83],{"class":42},[28,41353,34694],{"class":34},[28,41355,41356],{"class":30,"line":8471},[28,41357,34699],{"class":73},[28,41359,41360],{"class":30,"line":8498},[28,41361,33353],{"class":34},[28,41363,41364],{"class":30,"line":8503},[28,41365,34708],{"class":73},[28,41367,41368,41370,41372],{"class":30,"line":8509},[28,41369,33138],{"class":34},[28,41371,83],{"class":42},[28,41373,34717],{"class":34},[28,41375,41376],{"class":30,"line":8521},[28,41377,34722],{"class":73},[28,41379,41380,41382,41384,41386,41388,41390,41392],{"class":30,"line":8533},[28,41381,33155],{"class":34},[28,41383,83],{"class":42},[28,41385,33160],{"class":34},[28,41387,33163],{"class":5704},[28,41389,83],{"class":42},[28,41391,39],{"class":38},[28,41393,228],{"class":34},[28,41395,41396],{"class":30,"line":8545},[28,41397,34743],{"class":73},[28,41399,41400],{"class":30,"line":10202},[28,41401,34748],{"class":73},[28,41403,41404],{"class":30,"line":10227},[28,41405,34753],{"class":73},[28,41407,41408,41410,41412,41414,41416],{"class":30,"line":10250},[28,41409,34758],{"class":34},[28,41411,9964],{"class":42},[28,41413,33265],{"class":34},[28,41415,3439],{"class":42},[28,41417,34767],{"class":34},[28,41419,41420],{"class":30,"line":10274},[28,41421,34772],{"class":73},[28,41423,41424,41426,41428,41430,41432],{"class":30,"line":10279},[28,41425,34777],{"class":34},[28,41427,9964],{"class":42},[28,41429,34782],{"class":34},[28,41431,822],{"class":38},[28,41433,228],{"class":34},[28,41435,41436],{"class":30,"line":10284},[28,41437,2890],{"emptyLinePlaceholder":562},[28,41439,41440],{"class":30,"line":10289},[28,41441,34795],{"class":73},[28,41443,41444,41446,41448,41450,41452],{"class":30,"line":10298},[28,41445,34800],{"class":34},[28,41447,83],{"class":42},[28,41449,34805],{"class":34},[28,41451,43],{"class":42},[28,41453,34810],{"class":34},[28,41455,41456],{"class":30,"line":10303},[28,41457,34815],{"class":73},[28,41459,41460,41462,41464,41466],{"class":30,"line":10309},[28,41461,32929],{"class":38},[28,41463,367],{"class":34},[28,41465,34824],{"class":735},[28,41467,34827],{"class":34},[28,41469,41470],{"class":30,"line":10330},[28,41471,2890],{"emptyLinePlaceholder":562},[28,41473,41474],{"class":30,"line":10336},[28,41475,34836],{"class":73},[28,41477,41478,41480,41482,41484,41486],{"class":30,"line":10350},[28,41479,2021],{"class":42},[28,41481,31701],{"class":38},[28,41483,3439],{"class":42},[28,41485,31706],{"class":735},[28,41487,4227],{"class":34},[28,41489,41490],{"class":30,"line":10356},[28,41491,34853],{"class":73},[28,41493,41494,41496,41498],{"class":30,"line":10383},[28,41495,31770],{"class":34},[28,41497,83],{"class":42},[28,41499,41500],{"class":34},"VGG16()\n",[28,41502,41503],{"class":30,"line":10392},[28,41504,34866],{"class":73},[28,41506,41507],{"class":30,"line":10398},[28,41508,34871],{"class":73},[28,41510,41511,41513,41515],{"class":30,"line":10406},[28,41512,34876],{"class":34},[28,41514,34879],{"class":735},[28,41516,30980],{"class":34},[28,41518,41519],{"class":30,"line":10411},[28,41520,34886],{"class":73},[28,41522,41523,41525,41527],{"class":30,"line":17090},[28,41524,34499],{"class":34},[28,41526,83],{"class":42},[28,41528,34895],{"class":34},[28,41530,41531],{"class":30,"line":17096},[28,41532,34900],{"class":73},[28,41534,41535],{"class":30,"line":17119},[28,41536,34905],{"class":34},[28,41538,41539],{"class":30,"line":17125},[28,41540,2890],{"emptyLinePlaceholder":562},[28,41542,41543],{"class":30,"line":17148},[28,41544,34914],{"class":73},[28,41546,41547],{"class":30,"line":17162},[28,41548,34919],{"class":73},[28,41550,41551,41553,41555,41557,41559,41561,41563],{"class":30,"line":17182},[28,41552,31718],{"class":34},[28,41554,83],{"class":42},[28,41556,31725],{"class":735},[28,41558,2194],{"class":42},[28,41560,31730],{"class":34},[28,41562,2191],{"class":42},[28,41564,34596],{"class":735},[28,41566,41567,41569,41571],{"class":30,"line":17188},[28,41568,31770],{"class":34},[28,41570,83],{"class":42},[28,41572,32768],{"class":34},[28,41574,41575],{"class":30,"line":17199},[28,41576,34948],{"class":73},[28,41578,41579],{"class":30,"line":17222},[28,41580,34953],{"class":73},[28,41582,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611,41613,41615,41617,41619,41621,41623,41625,41627],{"class":30,"line":17244},[28,41584,34958],{"class":34},[28,41586,83],{"class":42},[28,41588,35],{"class":34},[28,41590,34965],{"class":735},[28,41592,90],{"class":34},[28,41594,34970],{"class":735},[28,41596,90],{"class":34},[28,41598,34975],{"class":735},[28,41600,90],{"class":34},[28,41602,34980],{"class":735},[28,41604,90],{"class":34},[28,41606,34985],{"class":735},[28,41608,90],{"class":34},[28,41610,34990],{"class":735},[28,41612,90],{"class":34},[28,41614,34995],{"class":735},[28,41616,90],{"class":34},[28,41618,35000],{"class":735},[28,41620,90],{"class":34},[28,41622,35005],{"class":735},[28,41624,90],{"class":34},[28,41626,35010],{"class":735},[28,41628,111],{"class":34},[28,41630,41631,41633],{"class":30,"line":17249},[28,41632,34655],{"class":42},[28,41634,33362],{"class":34},[28,41636,41637],{"class":30,"line":17255},[28,41638,35023],{"class":73},[28,41640,41641,41643,41645,41647],{"class":30,"line":17269},[28,41642,3891],{"class":42},[28,41644,35030],{"class":34},[28,41646,55],{"class":42},[28,41648,34674],{"class":34},[28,41650,41651,41653,41655],{"class":30,"line":17282},[28,41652,33088],{"class":34},[28,41654,83],{"class":42},[28,41656,33093],{"class":34},[28,41658,41659,41661,41663],{"class":30,"line":17287},[28,41660,33103],{"class":34},[28,41662,83],{"class":42},[28,41664,33108],{"class":34},[28,41666,41667],{"class":30,"line":17301},[28,41668,2890],{"emptyLinePlaceholder":562},[28,41670,41671],{"class":30,"line":17306},[28,41672,35059],{"class":73},[28,41674,41675],{"class":30,"line":17312},[28,41676,33353],{"class":34},[28,41678,41679],{"class":30,"line":17317},[28,41680,35068],{"class":73},[28,41682,41683,41685,41687],{"class":30,"line":17331},[28,41684,33138],{"class":34},[28,41686,83],{"class":42},[28,41688,33143],{"class":34},[28,41690,41691],{"class":30,"line":17336},[28,41692,35081],{"class":73},[28,41694,41695,41697,41699,41701,41703,41705,41707],{"class":30,"line":17341},[28,41696,33155],{"class":34},[28,41698,83],{"class":42},[28,41700,33160],{"class":34},[28,41702,33163],{"class":5704},[28,41704,83],{"class":42},[28,41706,39],{"class":38},[28,41708,228],{"class":34},[28,41710,41711],{"class":30,"line":17355},[28,41712,35102],{"class":73},[28,41714,41715,41717,41719],{"class":30,"line":17367},[28,41716,35107],{"class":34},[28,41718,83],{"class":42},[28,41720,35112],{"class":34},[28,41722,41723,41725,41727],{"class":30,"line":17372},[28,41724,35117],{"class":34},[28,41726,83],{"class":42},[28,41728,35122],{"class":34},[28,41730,41731,41733,41735,41737,41739,41741,41743,41745],{"class":30,"line":17385},[28,41732,35127],{"class":38},[28,41734,367],{"class":34},[28,41736,35132],{"class":735},[28,41738,35135],{"class":34},[28,41740,35138],{"class":735},[28,41742,90],{"class":34},[28,41744,35143],{"class":735},[28,41746,35146],{"class":34},[605,41748,41750],{"id":41749},"_23googlenet","2.3.GoogLeNet",[22484,41752,41754],{"id":41753},"_231原理","2.3.1.原理",[588,41756,41757],{},[591,41758,41759],{},"网络结构",[14,41761,41762],{},[420,41763],{"alt":23,"src":41764},"\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,41766,41767],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41769,41770],{},[420,41771],{"alt":23,"src":41772},"\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,41774,41775],{},[420,41776],{"alt":23,"src":41777},"\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,41779,41780],{},[420,41781],{"alt":23,"src":41782},"\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",[588,41784,41785],{"start":77},[591,41786,41787],{},"1x1卷积的优点",[14,41789,41790],{},[420,41791],{"alt":23,"src":41792},"\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",[588,41794,41795],{"start":114},[591,41796,41797],{},"全局平均池化层优点",[14,41799,41800],{},[420,41801],{"alt":23,"src":41802},"\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,41804,41805],{},[420,41806],{"alt":23,"src":41807},"\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",[588,41809,41810],{"start":128},[591,41811,41812],{},"参数详细描述",[14,41814,41815],{},[420,41816],{"alt":23,"src":41817},"\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,41819,41820],{},[420,41821],{"alt":23,"src":41822},"\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,41824,41825],{},[420,41826],{"alt":23,"src":41827},"\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,41829,41830],{},[420,41831],{"alt":23,"src":41832},"\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,41834,41835],{},[420,41836],{"alt":23,"src":41837},"\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,41839,41840],{},[420,41841],{"alt":23,"src":41842},"\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,41844,41845],{},[420,41846],{"alt":23,"src":41847},"\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,41849,41850],{},[420,41851],{"alt":23,"src":41852},"\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,41854,41855],{},[420,41856],{"alt":23,"src":41857},"\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,41859,41860],{},[420,41861],{"alt":23,"src":41862},"\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,41864,41865],{},[420,41866],{"alt":23,"src":41867},"\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,41869,41870],{},[420,41871],{"alt":23,"src":41872},"\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,41874,41875],{},[420,41876],{"alt":23,"src":41877},"\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,41879,41880],{},[420,41881],{"alt":23,"src":41882},"\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,41884,41885],{},[420,41886],{"alt":23,"src":41887},"\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,41889,41890],{},[420,41891],{"alt":23,"src":41892},"\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,41894,41895],{},[420,41896],{"alt":23,"src":41897},"\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,41899,41900],{},[420,41901],{"alt":23,"src":41902},"\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,41904,41905],{},[420,41906],{"alt":23,"src":41907},"\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,41909,41910],{},[420,41911],{"alt":23,"src":41912},"\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,41914,41915],{},[420,41916],{"alt":23,"src":41917},"\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",[22484,41919,41921],{"id":41920},"_232代码实现","2.3.2.代码实现",[588,41923,41924],{},[591,41925,31194],{},[14,41927,41928],{},"根据原理一步一步搭建即可",[18,41930,41932],{"className":20,"code":41931,"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,41933,41934,41940,41950,41960,41964,41981,41990,42005,42015,42020,42053,42058,42095,42142,42147,42183,42230,42235,42240,42275,42307,42311,42319,42335,42359,42384,42405,42410,42425,42429,42433,42438,42455,42460,42469,42484,42495,42539,42543,42571,42575,42586,42614,42618,42655,42659,42687,42691,42702,42738,42770,42798,42802,42813,42847,42879,42911,42944,42978,43006,43010,43021,43054,43086,43100,43104,43117,43121,43126,43138,43146,43168,43173,43178,43183,43188,43193,43198,43212,43220,43229,43242,43257,43266,43270,43278,43289,43300,43311,43322,43333,43339,43343,43348,43360,43380,43389],{"__ignoreMap":23},[28,41935,41936,41938],{"class":30,"line":31},[28,41937,536],{"class":42},[28,41939,30878],{"class":34},[28,41941,41942,41944,41946,41948],{"class":30,"line":77},[28,41943,530],{"class":42},[28,41945,31222],{"class":34},[28,41947,536],{"class":42},[28,41949,31227],{"class":34},[28,41951,41952,41954,41956,41958],{"class":30,"line":114},[28,41953,530],{"class":42},[28,41955,31239],{"class":34},[28,41957,536],{"class":42},[28,41959,31244],{"class":34},[28,41961,41962],{"class":30,"line":128},[28,41963,2890],{"emptyLinePlaceholder":562},[28,41965,41966,41968,41971,41973,41975,41977,41979],{"class":30,"line":393},[28,41967,15180],{"class":42},[28,41969,41970],{"class":2453}," Inception",[28,41972,367],{"class":34},[28,41974,31260],{"class":2453},[28,41976,1179],{"class":34},[28,41978,31265],{"class":2453},[28,41980,372],{"class":34},[28,41982,41983,41985,41987],{"class":30,"line":409},[28,41984,31282],{"class":42},[28,41986,31285],{"class":38},[28,41988,41989],{"class":34},"(self,in_channels,c1,c2,c3,c4):\n",[28,41991,41992,41994,41997,41999,42001,42003],{"class":30,"line":1711},[28,41993,31298],{"class":38},[28,41995,41996],{"class":34},"(Inception,",[28,41998,31304],{"class":38},[28,42000,31307],{"class":34},[28,42002,31310],{"class":38},[28,42004,2466],{"class":34},[28,42006,42007,42009,42011,42013],{"class":30,"line":1802},[28,42008,31326],{"class":38},[28,42010,35248],{"class":34},[28,42012,83],{"class":42},[28,42014,35253],{"class":34},[28,42016,42017],{"class":30,"line":1808},[28,42018,42019],{"class":73},"        # 路线1：定义1*1卷积\n",[28,42021,42022,42024,42027,42029,42031,42033,42035,42038,42040,42042,42045,42047,42049,42051],{"class":30,"line":1820},[28,42023,31326],{"class":38},[28,42025,42026],{"class":34},".p1_1",[28,42028,83],{"class":42},[28,42030,31334],{"class":34},[28,42032,31337],{"class":5704},[28,42034,83],{"class":42},[28,42036,42037],{"class":34},"in_channels,",[28,42039,31346],{"class":5704},[28,42041,83],{"class":42},[28,42043,42044],{"class":34},"c1,",[28,42046,31355],{"class":5704},[28,42048,83],{"class":42},[28,42050,39],{"class":38},[28,42052,228],{"class":34},[28,42054,42055],{"class":30,"line":2102},[28,42056,42057],{"class":73},"        # 路线2：定义1*1卷积和3*3\n",[28,42059,42060,42062,42065,42067,42069,42071,42073,42075,42077,42079,42082,42084,42087,42089,42091,42093],{"class":30,"line":2107},[28,42061,31326],{"class":38},[28,42063,42064],{"class":34},".p2_1",[28,42066,83],{"class":42},[28,42068,31334],{"class":34},[28,42070,31337],{"class":5704},[28,42072,83],{"class":42},[28,42074,42037],{"class":34},[28,42076,31346],{"class":5704},[28,42078,83],{"class":42},[28,42080,42081],{"class":34},"c2[",[28,42083,822],{"class":38},[28,42085,42086],{"class":34},"],",[28,42088,31355],{"class":5704},[28,42090,83],{"class":42},[28,42092,39],{"class":38},[28,42094,228],{"class":34},[28,42096,42097,42099,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140],{"class":30,"line":2113},[28,42098,31326],{"class":38},[28,42100,42101],{"class":34},".p2_2",[28,42103,83],{"class":42},[28,42105,31334],{"class":34},[28,42107,31337],{"class":5704},[28,42109,83],{"class":42},[28,42111,42081],{"class":34},[28,42113,822],{"class":38},[28,42115,42086],{"class":34},[28,42117,31346],{"class":5704},[28,42119,83],{"class":42},[28,42121,42081],{"class":34},[28,42123,39],{"class":38},[28,42125,42086],{"class":34},[28,42127,31355],{"class":5704},[28,42129,83],{"class":42},[28,42131,98],{"class":38},[28,42133,90],{"class":34},[28,42135,31364],{"class":5704},[28,42137,83],{"class":42},[28,42139,39],{"class":38},[28,42141,228],{"class":34},[28,42143,42144],{"class":30,"line":2118},[28,42145,42146],{"class":73},"        # 路线3：定义1*1卷积和5*5\n",[28,42148,42149,42151,42154,42156,42158,42160,42162,42164,42166,42168,42171,42173,42175,42177,42179,42181],{"class":30,"line":2132},[28,42150,31326],{"class":38},[28,42152,42153],{"class":34},".p3_1",[28,42155,83],{"class":42},[28,42157,31334],{"class":34},[28,42159,31337],{"class":5704},[28,42161,83],{"class":42},[28,42163,42037],{"class":34},[28,42165,31346],{"class":5704},[28,42167,83],{"class":42},[28,42169,42170],{"class":34},"c3[",[28,42172,822],{"class":38},[28,42174,42086],{"class":34},[28,42176,31355],{"class":5704},[28,42178,83],{"class":42},[28,42180,39],{"class":38},[28,42182,228],{"class":34},[28,42184,42185,42187,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228],{"class":30,"line":2137},[28,42186,31326],{"class":38},[28,42188,42189],{"class":34},".p3_2",[28,42191,83],{"class":42},[28,42193,31334],{"class":34},[28,42195,31337],{"class":5704},[28,42197,83],{"class":42},[28,42199,42170],{"class":34},[28,42201,822],{"class":38},[28,42203,42086],{"class":34},[28,42205,31346],{"class":5704},[28,42207,83],{"class":42},[28,42209,42170],{"class":34},[28,42211,39],{"class":38},[28,42213,42086],{"class":34},[28,42215,31355],{"class":5704},[28,42217,83],{"class":42},[28,42219,108],{"class":38},[28,42221,90],{"class":34},[28,42223,31364],{"class":5704},[28,42225,83],{"class":42},[28,42227,93],{"class":38},[28,42229,228],{"class":34},[28,42231,42232],{"class":30,"line":2143},[28,42233,42234],{"class":73},"        # 路线4：定义3*3最大池化和1*1卷积\n",[28,42236,42237],{"class":30,"line":2164},[28,42238,42239],{"class":73},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[28,42241,42242,42244,42247,42249,42251,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273],{"class":30,"line":2169},[28,42243,31326],{"class":38},[28,42245,42246],{"class":34},".p4_1",[28,42248,83],{"class":42},[28,42250,35306],{"class":34},[28,42252,31355],{"class":5704},[28,42254,83],{"class":42},[28,42256,98],{"class":38},[28,42258,90],{"class":34},[28,42260,31410],{"class":5704},[28,42262,83],{"class":42},[28,42264,39],{"class":38},[28,42266,90],{"class":34},[28,42268,31364],{"class":5704},[28,42270,83],{"class":42},[28,42272,39],{"class":38},[28,42274,228],{"class":34},[28,42276,42277,42279,42282,42284,42286,42288,42290,42292,42294,42296,42299,42301,42303,42305],{"class":30,"line":2183},[28,42278,31326],{"class":38},[28,42280,42281],{"class":34},".p4_2",[28,42283,83],{"class":42},[28,42285,31334],{"class":34},[28,42287,31337],{"class":5704},[28,42289,83],{"class":42},[28,42291,42037],{"class":34},[28,42293,31346],{"class":5704},[28,42295,83],{"class":42},[28,42297,42298],{"class":34},"c4,",[28,42300,31355],{"class":5704},[28,42302,83],{"class":42},[28,42304,39],{"class":38},[28,42306,228],{"class":34},[28,42308,42309],{"class":30,"line":2188},[28,42310,2890],{"emptyLinePlaceholder":562},[28,42312,42313,42315,42317],{"class":30,"line":2217},[28,42314,31282],{"class":42},[28,42316,31574],{"class":2453},[28,42318,31577],{"class":34},[28,42320,42321,42324,42326,42328,42330,42332],{"class":30,"line":2222},[28,42322,42323],{"class":34},"        p1",[28,42325,83],{"class":42},[28,42327,31304],{"class":38},[28,42329,35661],{"class":34},[28,42331,31304],{"class":38},[28,42333,42334],{"class":34},".p1_1(x))\n",[28,42336,42337,42339,42341,42343,42345,42347,42350,42352,42354,42356],{"class":30,"line":2239},[28,42338,7573],{"class":34},[28,42340,83],{"class":42},[28,42342,31304],{"class":38},[28,42344,35661],{"class":34},[28,42346,31304],{"class":38},[28,42348,42349],{"class":34},".p2_2(",[28,42351,31304],{"class":38},[28,42353,35661],{"class":34},[28,42355,31304],{"class":38},[28,42357,42358],{"class":34},".p2_1(x))))\n",[28,42360,42361,42364,42366,42368,42370,42372,42375,42377,42379,42381],{"class":30,"line":2244},[28,42362,42363],{"class":34},"        p3",[28,42365,83],{"class":42},[28,42367,31304],{"class":38},[28,42369,35661],{"class":34},[28,42371,31304],{"class":38},[28,42373,42374],{"class":34},".p3_2(",[28,42376,31304],{"class":38},[28,42378,35661],{"class":34},[28,42380,31304],{"class":38},[28,42382,42383],{"class":34},".p3_1(x))))\n",[28,42385,42386,42389,42391,42393,42395,42397,42400,42402],{"class":30,"line":2249},[28,42387,42388],{"class":34},"        p4",[28,42390,83],{"class":42},[28,42392,31304],{"class":38},[28,42394,35661],{"class":34},[28,42396,31304],{"class":38},[28,42398,42399],{"class":34},".p4_2(",[28,42401,31304],{"class":38},[28,42403,42404],{"class":34},".p4_1(x)))\n",[28,42406,42407],{"class":30,"line":2254},[28,42408,42409],{"class":73},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[28,42411,42412,42414,42417,42419,42421,42423],{"class":30,"line":2268},[28,42413,15238],{"class":42},[28,42415,42416],{"class":34}," torch.cat((p1,p2,p3,p4),",[28,42418,33163],{"class":5704},[28,42420,83],{"class":42},[28,42422,39],{"class":38},[28,42424,228],{"class":34},[28,42426,42427],{"class":30,"line":2273},[28,42428,2890],{"emptyLinePlaceholder":562},[28,42430,42431],{"class":30,"line":3067},[28,42432,2890],{"emptyLinePlaceholder":562},[28,42434,42435],{"class":30,"line":3081},[28,42436,42437],{"class":73},"# 搭建GoogLeNet网络\n",[28,42439,42440,42442,42445,42447,42449,42451,42453],{"class":30,"line":3089},[28,42441,15180],{"class":42},[28,42443,42444],{"class":2453}," GoogLeNet",[28,42446,367],{"class":34},[28,42448,31260],{"class":2453},[28,42450,1179],{"class":34},[28,42452,31265],{"class":2453},[28,42454,372],{"class":34},[28,42456,42457],{"class":30,"line":3094},[28,42458,42459],{"class":73},"    # 必须把Inception导入到里边\n",[28,42461,42462,42464,42466],{"class":30,"line":3100},[28,42463,31282],{"class":42},[28,42465,31285],{"class":38},[28,42467,42468],{"class":34},"(self,Inception):\n",[28,42470,42471,42473,42476,42478,42480,42482],{"class":30,"line":3106},[28,42472,31298],{"class":38},[28,42474,42475],{"class":34},"(GoogLeNet,",[28,42477,31304],{"class":38},[28,42479,31307],{"class":34},[28,42481,31310],{"class":38},[28,42483,2466],{"class":34},[28,42485,42486,42488,42491,42493],{"class":30,"line":3111},[28,42487,31326],{"class":38},[28,42489,42490],{"class":34},".b1",[28,42492,83],{"class":42},[28,42494,38486],{"class":34},[28,42496,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537],{"class":30,"line":8436},[28,42498,38491],{"class":34},[28,42500,31337],{"class":5704},[28,42502,83],{"class":42},[28,42504,39],{"class":38},[28,42506,90],{"class":34},[28,42508,31346],{"class":5704},[28,42510,83],{"class":42},[28,42512,834],{"class":38},[28,42514,90],{"class":34},[28,42516,31355],{"class":5704},[28,42518,83],{"class":42},[28,42520,995],{"class":38},[28,42522,90],{"class":34},[28,42524,31410],{"class":5704},[28,42526,83],{"class":42},[28,42528,93],{"class":38},[28,42530,90],{"class":34},[28,42532,31364],{"class":5704},[28,42534,83],{"class":42},[28,42536,98],{"class":38},[28,42538,38524],{"class":34},[28,42540,42541],{"class":30,"line":8460},[28,42542,38529],{"class":34},[28,42544,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569],{"class":30,"line":8465},[28,42546,38574],{"class":34},[28,42548,31355],{"class":5704},[28,42550,83],{"class":42},[28,42552,98],{"class":38},[28,42554,90],{"class":34},[28,42556,31410],{"class":5704},[28,42558,83],{"class":42},[28,42560,93],{"class":38},[28,42562,90],{"class":34},[28,42564,31364],{"class":5704},[28,42566,83],{"class":42},[28,42568,39],{"class":38},[28,42570,228],{"class":34},[28,42572,42573],{"class":30,"line":8471},[28,42574,38603],{"class":34},[28,42576,42577,42579,42582,42584],{"class":30,"line":8498},[28,42578,31326],{"class":38},[28,42580,42581],{"class":34},".b2",[28,42583,83],{"class":42},[28,42585,38486],{"class":34},[28,42587,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612],{"class":30,"line":8503},[28,42589,38491],{"class":34},[28,42591,31337],{"class":5704},[28,42593,83],{"class":42},[28,42595,834],{"class":38},[28,42597,90],{"class":34},[28,42599,31346],{"class":5704},[28,42601,83],{"class":42},[28,42603,834],{"class":38},[28,42605,90],{"class":34},[28,42607,31355],{"class":5704},[28,42609,83],{"class":42},[28,42611,39],{"class":38},[28,42613,38524],{"class":34},[28,42615,42616],{"class":30,"line":8509},[28,42617,38529],{"class":34},[28,42619,42620,42622,42624,42626,42628,42630,42632,42634,42637,42639,42641,42643,42645,42647,42649,42651,42653],{"class":30,"line":8521},[28,42621,38491],{"class":34},[28,42623,31337],{"class":5704},[28,42625,83],{"class":42},[28,42627,834],{"class":38},[28,42629,90],{"class":34},[28,42631,31346],{"class":5704},[28,42633,83],{"class":42},[28,42635,42636],{"class":38},"192",[28,42638,90],{"class":34},[28,42640,31355],{"class":5704},[28,42642,83],{"class":42},[28,42644,98],{"class":38},[28,42646,90],{"class":34},[28,42648,31364],{"class":5704},[28,42650,83],{"class":42},[28,42652,39],{"class":38},[28,42654,38524],{"class":34},[28,42656,42657],{"class":30,"line":8533},[28,42658,38529],{"class":34},[28,42660,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683,42685],{"class":30,"line":8545},[28,42662,38574],{"class":34},[28,42664,31355],{"class":5704},[28,42666,83],{"class":42},[28,42668,98],{"class":38},[28,42670,90],{"class":34},[28,42672,31410],{"class":5704},[28,42674,83],{"class":42},[28,42676,93],{"class":38},[28,42678,90],{"class":34},[28,42680,31364],{"class":5704},[28,42682,83],{"class":42},[28,42684,39],{"class":38},[28,42686,228],{"class":34},[28,42688,42689],{"class":30,"line":10202},[28,42690,38603],{"class":34},[28,42692,42693,42695,42698,42700],{"class":30,"line":10227},[28,42694,31326],{"class":38},[28,42696,42697],{"class":34},".b3",[28,42699,83],{"class":42},[28,42701,38486],{"class":34},[28,42703,42704,42707,42709,42711,42713,42716,42718,42720,42722,42725,42727,42729,42731,42734,42736],{"class":30,"line":10250},[28,42705,42706],{"class":34},"            Inception(",[28,42708,42636],{"class":38},[28,42710,90],{"class":34},[28,42712,834],{"class":38},[28,42714,42715],{"class":34},",(",[28,42717,840],{"class":38},[28,42719,90],{"class":34},[28,42721,32549],{"class":38},[28,42723,42724],{"class":34},"),(",[28,42726,1221],{"class":38},[28,42728,90],{"class":34},[28,42730,828],{"class":38},[28,42732,42733],{"class":34},"),",[28,42735,828],{"class":38},[28,42737,38524],{"class":34},[28,42739,42740,42742,42744,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768],{"class":30,"line":10274},[28,42741,42706],{"class":34},[28,42743,35347],{"class":38},[28,42745,90],{"class":34},[28,42747,32549],{"class":38},[28,42749,42715],{"class":34},[28,42751,32549],{"class":38},[28,42753,90],{"class":34},[28,42755,42636],{"class":38},[28,42757,42724],{"class":34},[28,42759,828],{"class":38},[28,42761,90],{"class":34},[28,42763,840],{"class":38},[28,42765,42733],{"class":34},[28,42767,834],{"class":38},[28,42769,38524],{"class":34},[28,42771,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796],{"class":30,"line":10279},[28,42773,38574],{"class":34},[28,42775,31355],{"class":5704},[28,42777,83],{"class":42},[28,42779,98],{"class":38},[28,42781,90],{"class":34},[28,42783,31410],{"class":5704},[28,42785,83],{"class":42},[28,42787,93],{"class":38},[28,42789,90],{"class":34},[28,42791,31364],{"class":5704},[28,42793,83],{"class":42},[28,42795,39],{"class":38},[28,42797,228],{"class":34},[28,42799,42800],{"class":30,"line":10284},[28,42801,38603],{"class":34},[28,42803,42804,42806,42809,42811],{"class":30,"line":10289},[28,42805,31326],{"class":38},[28,42807,42808],{"class":34},".b4",[28,42810,83],{"class":42},[28,42812,38486],{"class":34},[28,42814,42815,42817,42820,42822,42824,42826,42828,42830,42833,42835,42837,42839,42841,42843,42845],{"class":30,"line":10298},[28,42816,42706],{"class":34},[28,42818,42819],{"class":38},"480",[28,42821,90],{"class":34},[28,42823,42636],{"class":38},[28,42825,42715],{"class":34},[28,42827,840],{"class":38},[28,42829,90],{"class":34},[28,42831,42832],{"class":38},"208",[28,42834,42724],{"class":34},[28,42836,1221],{"class":38},[28,42838,90],{"class":34},[28,42840,1227],{"class":38},[28,42842,42733],{"class":34},[28,42844,834],{"class":38},[28,42846,38524],{"class":34},[28,42848,42849,42851,42853,42855,42857,42859,42861,42863,42865,42867,42869,42871,42873,42875,42877],{"class":30,"line":10303},[28,42850,42706],{"class":34},[28,42852,38934],{"class":38},[28,42854,90],{"class":34},[28,42856,21534],{"class":38},[28,42858,42715],{"class":34},[28,42860,1238],{"class":38},[28,42862,90],{"class":34},[28,42864,31980],{"class":38},[28,42866,42724],{"class":34},[28,42868,1420],{"class":38},[28,42870,90],{"class":34},[28,42872,834],{"class":38},[28,42874,42733],{"class":34},[28,42876,834],{"class":38},[28,42878,38524],{"class":34},[28,42880,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903,42905,42907,42909],{"class":30,"line":10309},[28,42882,42706],{"class":34},[28,42884,38934],{"class":38},[28,42886,90],{"class":34},[28,42888,32549],{"class":38},[28,42890,42715],{"class":34},[28,42892,32549],{"class":38},[28,42894,90],{"class":34},[28,42896,35347],{"class":38},[28,42898,42724],{"class":34},[28,42900,1420],{"class":38},[28,42902,90],{"class":34},[28,42904,834],{"class":38},[28,42906,42733],{"class":34},[28,42908,834],{"class":38},[28,42910,38524],{"class":34},[28,42912,42913,42915,42917,42919,42921,42923,42925,42927,42930,42932,42934,42936,42938,42940,42942],{"class":30,"line":10330},[28,42914,42706],{"class":34},[28,42916,38934],{"class":38},[28,42918,90],{"class":34},[28,42920,1238],{"class":38},[28,42922,42715],{"class":34},[28,42924,32549],{"class":38},[28,42926,90],{"class":34},[28,42928,42929],{"class":38},"288",[28,42931,42724],{"class":34},[28,42933,828],{"class":38},[28,42935,90],{"class":34},[28,42937,834],{"class":38},[28,42939,42733],{"class":34},[28,42941,834],{"class":38},[28,42943,38524],{"class":34},[28,42945,42946,42948,42951,42953,42955,42957,42959,42961,42964,42966,42968,42970,42972,42974,42976],{"class":30,"line":10336},[28,42947,42706],{"class":34},[28,42949,42950],{"class":38},"528",[28,42952,90],{"class":34},[28,42954,35347],{"class":38},[28,42956,42715],{"class":34},[28,42958,21534],{"class":38},[28,42960,90],{"class":34},[28,42962,42963],{"class":38},"320",[28,42965,42724],{"class":34},[28,42967,828],{"class":38},[28,42969,90],{"class":34},[28,42971,32549],{"class":38},[28,42973,42733],{"class":34},[28,42975,32549],{"class":38},[28,42977,38524],{"class":34},[28,42979,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004],{"class":30,"line":10350},[28,42981,38574],{"class":34},[28,42983,31355],{"class":5704},[28,42985,83],{"class":42},[28,42987,98],{"class":38},[28,42989,90],{"class":34},[28,42991,31410],{"class":5704},[28,42993,83],{"class":42},[28,42995,93],{"class":38},[28,42997,90],{"class":34},[28,42999,31364],{"class":5704},[28,43001,83],{"class":42},[28,43003,39],{"class":38},[28,43005,228],{"class":34},[28,43007,43008],{"class":30,"line":10356},[28,43009,38603],{"class":34},[28,43011,43012,43014,43017,43019],{"class":30,"line":10383},[28,43013,31326],{"class":38},[28,43015,43016],{"class":34},".b5",[28,43018,83],{"class":42},[28,43020,38486],{"class":34},[28,43022,43023,43025,43028,43030,43032,43034,43036,43038,43040,43042,43044,43046,43048,43050,43052],{"class":30,"line":10392},[28,43024,42706],{"class":34},[28,43026,43027],{"class":38},"832",[28,43029,90],{"class":34},[28,43031,35347],{"class":38},[28,43033,42715],{"class":34},[28,43035,21534],{"class":38},[28,43037,90],{"class":34},[28,43039,42963],{"class":38},[28,43041,42724],{"class":34},[28,43043,828],{"class":38},[28,43045,90],{"class":34},[28,43047,32549],{"class":38},[28,43049,42733],{"class":34},[28,43051,32549],{"class":38},[28,43053,38524],{"class":34},[28,43055,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084],{"class":30,"line":10398},[28,43057,42706],{"class":34},[28,43059,43027],{"class":38},[28,43061,90],{"class":34},[28,43063,35417],{"class":38},[28,43065,42715],{"class":34},[28,43067,42636],{"class":38},[28,43069,90],{"class":34},[28,43071,35417],{"class":38},[28,43073,42724],{"class":34},[28,43075,1227],{"class":38},[28,43077,90],{"class":34},[28,43079,32549],{"class":38},[28,43081,42733],{"class":34},[28,43083,32549],{"class":38},[28,43085,38524],{"class":34},[28,43087,43088,43091,43093,43095,43097],{"class":30,"line":10406},[28,43089,43090],{"class":34},"            nn.AdaptiveAvgPool2d((",[28,43092,39],{"class":38},[28,43094,90],{"class":34},[28,43096,39],{"class":38},[28,43098,43099],{"class":34},")),\n",[28,43101,43102],{"class":30,"line":10411},[28,43103,39267],{"class":34},[28,43105,43106,43108,43111,43113,43115],{"class":30,"line":17090},[28,43107,39272],{"class":34},[28,43109,43110],{"class":38},"1024",[28,43112,90],{"class":34},[28,43114,225],{"class":38},[28,43116,228],{"class":34},[28,43118,43119],{"class":30,"line":17096},[28,43120,38603],{"class":34},[28,43122,43123],{"class":30,"line":17119},[28,43124,43125],{"class":73},"        # 对模型参数初始化\n",[28,43127,43128,43130,43132,43134,43136],{"class":30,"line":17125},[28,43129,3891],{"class":42},[28,43131,39345],{"class":34},[28,43133,55],{"class":42},[28,43135,39350],{"class":38},[28,43137,39353],{"class":34},[28,43139,43140,43142,43144],{"class":30,"line":17148},[28,43141,5130],{"class":42},[28,43143,39365],{"class":38},[28,43145,39368],{"class":34},[28,43147,43148,43150,43153,43155,43158,43160,43162,43164,43166],{"class":30,"line":17162},[28,43149,39378],{"class":34},[28,43151,43152],{"class":5704},"mode",[28,43154,83],{"class":42},[28,43156,43157],{"class":735},"'fan_out'",[28,43159,90],{"class":34},[28,43161,39381],{"class":5704},[28,43163,83],{"class":42},[28,43165,39386],{"class":735},[28,43167,228],{"class":34},[28,43169,43170],{"class":30,"line":17182},[28,43171,43172],{"class":73},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[28,43174,43175],{"class":30,"line":17188},[28,43176,43177],{"class":73},"                # ② mode = 'fan_out'决定使用的fan值：\n",[28,43179,43180],{"class":30,"line":17199},[28,43181,43182],{"class":73},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[28,43184,43185],{"class":30,"line":17222},[28,43186,43187],{"class":73},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[28,43189,43190],{"class":30,"line":17244},[28,43191,43192],{"class":73},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[28,43194,43195],{"class":30,"line":17249},[28,43196,43197],{"class":73},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[28,43199,43200,43202,43204,43206,43208,43210],{"class":30,"line":17255},[28,43201,39398],{"class":42},[28,43203,39401],{"class":34},[28,43205,39404],{"class":42},[28,43207,39407],{"class":42},[28,43209,39410],{"class":38},[28,43211,4227],{"class":34},[28,43213,43214,43216,43218],{"class":30,"line":17269},[28,43215,39422],{"class":34},[28,43217,822],{"class":38},[28,43219,228],{"class":34},[28,43221,43222,43225,43227],{"class":30,"line":17282},[28,43223,43224],{"class":42},"                elif",[28,43226,39365],{"class":38},[28,43228,39441],{"class":34},[28,43230,43231,43234,43236,43238,43240],{"class":30,"line":17287},[28,43232,43233],{"class":34},"                    nn.init.normal_(m.weight,",[28,43235,822],{"class":38},[28,43237,90],{"class":34},[28,43239,39463],{"class":38},[28,43241,228],{"class":34},[28,43243,43244,43247,43249,43251,43253,43255],{"class":30,"line":17301},[28,43245,43246],{"class":42},"                    if",[28,43248,39401],{"class":34},[28,43250,39404],{"class":42},[28,43252,39407],{"class":42},[28,43254,39410],{"class":38},[28,43256,4227],{"class":34},[28,43258,43259,43262,43264],{"class":30,"line":17306},[28,43260,43261],{"class":34},"                        nn.init.constant_(m.bias,",[28,43263,822],{"class":38},[28,43265,228],{"class":34},[28,43267,43268],{"class":30,"line":17312},[28,43269,35642],{"class":73},[28,43271,43272,43274,43276],{"class":30,"line":17317},[28,43273,31282],{"class":42},[28,43275,31574],{"class":2453},[28,43277,31577],{"class":34},[28,43279,43280,43282,43284,43286],{"class":30,"line":17331},[28,43281,31582],{"class":34},[28,43283,83],{"class":42},[28,43285,31304],{"class":38},[28,43287,43288],{"class":34},".b1(x)\n",[28,43290,43291,43293,43295,43297],{"class":30,"line":17336},[28,43292,31582],{"class":34},[28,43294,83],{"class":42},[28,43296,31304],{"class":38},[28,43298,43299],{"class":34},".b2(x)\n",[28,43301,43302,43304,43306,43308],{"class":30,"line":17341},[28,43303,31582],{"class":34},[28,43305,83],{"class":42},[28,43307,31304],{"class":38},[28,43309,43310],{"class":34},".b3(x)\n",[28,43312,43313,43315,43317,43319],{"class":30,"line":17355},[28,43314,31582],{"class":34},[28,43316,83],{"class":42},[28,43318,31304],{"class":38},[28,43320,43321],{"class":34},".b4(x)\n",[28,43323,43324,43326,43328,43330],{"class":30,"line":17367},[28,43325,31582],{"class":34},[28,43327,83],{"class":42},[28,43329,31304],{"class":38},[28,43331,43332],{"class":34},".b5(x)\n",[28,43334,43335,43337],{"class":30,"line":17372},[28,43336,15238],{"class":42},[28,43338,31690],{"class":34},[28,43340,43341],{"class":30,"line":17385},[28,43342,2890],{"emptyLinePlaceholder":562},[28,43344,43345],{"class":30,"line":17390},[28,43346,43347],{"class":73},"# 模型展示\n",[28,43349,43350,43352,43354,43356,43358],{"class":30,"line":17395},[28,43351,2021],{"class":42},[28,43353,31701],{"class":38},[28,43355,3439],{"class":42},[28,43357,31706],{"class":735},[28,43359,4227],{"class":34},[28,43361,43362,43364,43366,43368,43370,43372,43374,43376,43378],{"class":30,"line":17400},[28,43363,31718],{"class":34},[28,43365,83],{"class":42},[28,43367,30934],{"class":34},[28,43369,31725],{"class":735},[28,43371,2194],{"class":42},[28,43373,31730],{"class":34},[28,43375,2191],{"class":42},[28,43377,30959],{"class":735},[28,43379,228],{"class":34},[28,43381,43382,43384,43386],{"class":30,"line":17413},[28,43383,31770],{"class":34},[28,43385,83],{"class":42},[28,43387,43388],{"class":34},"GoogLeNet(Inception).to(device)\n",[28,43390,43391,43393,43395,43397,43399,43401,43403,43405],{"class":30,"line":17418},[28,43392,31780],{"class":38},[28,43394,31783],{"class":34},[28,43396,39],{"class":38},[28,43398,90],{"class":34},[28,43400,31980],{"class":38},[28,43402,90],{"class":34},[28,43404,31980],{"class":38},[28,43406,31796],{"class":34},[588,43408,43409],{"start":77},[591,43410,39660],{},[18,43412,43414],{"className":20,"code":43413,"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,43415,43416,43422,43428,43438,43444,43454,43464,43474,43484,43494,43498,43509,43519,43523,43527,43531,43539,43551,43561,43577,43587,43619,43633,43643,43653,43657,43667,43681,43691,43701,43711,43717,43721,43725,43729,43733,43737,43745,43765,43769,43773,43777,43781,43785,43801,43805,43809,43817,43821,43825,43833,43837,43841,43845,43853,43857,43861,43865,43869,43877,43881,43889,43893,43901,43905,43913,43917,43925,43929,43933,43941,43945,43949,43953,43965,43989,44003,44007,44011,44015,44023,44027,44035,44039,44047,44051,44059,44063,44071,44075,44083,44087,44099,44103,44111,44115,44123,44127,44131,44135,44139,44147,44151,44167,44171,44179,44183,44187,44191,44195,44199,44203,44207,44223,44227,44239,44243,44255,44259,44271,44275,44283,44287,44295,44299,44303,44307,44313,44317,44325,44329,44345,44349,44357,44361,44377,44389,44393,44405,44409,44413,44421,44425,44429,44437,44441,44449,44453,44461,44465,44469,44511,44553,44557,44561,44577,44581,44597,44601,44605,44613,44617,44621,44633,44671,44675,44679,44687,44691,44705,44715,44721,44727,44733,44739,44743,44747,44753,44757,44761,44769,44773,44791,44795,44799,44803,44819,44823,44827,44831,44835,44839,44859,44879,44883,44887,44891,44899,44907,44911,44927,44947,44967,44971,44975,44983,44991,44995,44999,45003,45015,45019,45029,45037,45054],{"__ignoreMap":23},[28,43417,43418,43420],{"class":30,"line":31},[28,43419,536],{"class":42},[28,43421,32301],{"class":34},[28,43423,43424,43426],{"class":30,"line":77},[28,43425,536],{"class":42},[28,43427,32308],{"class":34},[28,43429,43430,43432,43434,43436],{"class":30,"line":114},[28,43431,536],{"class":42},[28,43433,32319],{"class":34},[28,43435,542],{"class":42},[28,43437,32324],{"class":34},[28,43439,43440,43442],{"class":30,"line":128},[28,43441,536],{"class":42},[28,43443,30878],{"class":34},[28,43445,43446,43448,43450,43452],{"class":30,"line":393},[28,43447,530],{"class":42},[28,43449,31895],{"class":34},[28,43451,536],{"class":42},[28,43453,32341],{"class":34},[28,43455,43456,43458,43460,43462],{"class":30,"line":409},[28,43457,530],{"class":42},[28,43459,31849],{"class":34},[28,43461,536],{"class":42},[28,43463,31854],{"class":34},[28,43465,43466,43468,43470,43472],{"class":30,"line":1711},[28,43467,530],{"class":42},[28,43469,31878],{"class":34},[28,43471,536],{"class":42},[28,43473,31883],{"class":34},[28,43475,43476,43478,43480,43482],{"class":30,"line":1802},[28,43477,536],{"class":42},[28,43479,31895],{"class":34},[28,43481,542],{"class":42},[28,43483,31900],{"class":34},[28,43485,43486,43488,43490,43492],{"class":30,"line":1808},[28,43487,536],{"class":42},[28,43489,31912],{"class":34},[28,43491,542],{"class":42},[28,43493,545],{"class":34},[28,43495,43496],{"class":30,"line":1820},[28,43497,32386],{"class":73},[28,43499,43500,43502,43504,43506],{"class":30,"line":2102},[28,43501,530],{"class":42},[28,43503,32393],{"class":34},[28,43505,536],{"class":42},[28,43507,43508],{"class":34}," GoogLeNet, Inception\n",[28,43510,43511,43513,43515,43517],{"class":30,"line":2107},[28,43512,530],{"class":42},[28,43514,31222],{"class":34},[28,43516,536],{"class":42},[28,43518,31227],{"class":34},[28,43520,43521],{"class":30,"line":2113},[28,43522,2890],{"emptyLinePlaceholder":562},[28,43524,43525],{"class":30,"line":2118},[28,43526,2890],{"emptyLinePlaceholder":562},[28,43528,43529],{"class":30,"line":2132},[28,43530,32421],{"class":73},[28,43532,43533,43535,43537],{"class":30,"line":2137},[28,43534,32426],{"class":42},[28,43536,32429],{"class":2453},[28,43538,32432],{"class":34},[28,43540,43541,43543,43545,43547,43549],{"class":30,"line":2143},[28,43542,32437],{"class":34},[28,43544,83],{"class":42},[28,43546,31934],{"class":34},[28,43548,31942],{"class":735},[28,43550,31945],{"class":34},[28,43552,43553,43555,43557,43559],{"class":30,"line":2164},[28,43554,32450],{"class":5704},[28,43556,83],{"class":42},[28,43558,31955],{"class":38},[28,43560,31945],{"class":34},[28,43562,43563,43565,43567,43569,43571,43573,43575],{"class":30,"line":2169},[28,43564,32461],{"class":5704},[28,43566,83],{"class":42},[28,43568,31972],{"class":34},[28,43570,31975],{"class":5704},[28,43572,83],{"class":42},[28,43574,35926],{"class":38},[28,43576,31983],{"class":34},[28,43578,43579,43581,43583,43585],{"class":30,"line":2183},[28,43580,32478],{"class":5704},[28,43582,83],{"class":42},[28,43584,31955],{"class":38},[28,43586,228],{"class":34},[28,43588,43589,43591,43593,43595,43597,43599,43601,43603,43605,43607,43609,43611,43613,43615,43617],{"class":30,"line":2188},[28,43590,32489],{"class":34},[28,43592,83],{"class":42},[28,43594,32494],{"class":34},[28,43596,32497],{"class":38},[28,43598,367],{"class":34},[28,43600,32502],{"class":38},[28,43602,256],{"class":42},[28,43604,7846],{"class":38},[28,43606,32509],{"class":34},[28,43608,32497],{"class":38},[28,43610,367],{"class":34},[28,43612,32516],{"class":38},[28,43614,256],{"class":42},[28,43616,7846],{"class":38},[28,43618,32523],{"class":34},[28,43620,43621,43623,43625,43627,43629,43631],{"class":30,"line":2217},[28,43622,32528],{"class":34},[28,43624,83],{"class":42},[28,43626,32533],{"class":34},[28,43628,32016],{"class":5704},[28,43630,83],{"class":42},[28,43632,32021],{"class":34},[28,43634,43635,43637,43639,43641],{"class":30,"line":2222},[28,43636,32544],{"class":5704},[28,43638,83],{"class":42},[28,43640,828],{"class":38},[28,43642,31945],{"class":34},[28,43644,43645,43647,43649,43651],{"class":30,"line":2239},[28,43646,32556],{"class":5704},[28,43648,83],{"class":42},[28,43650,31955],{"class":38},[28,43652,31945],{"class":34},[28,43654,43655],{"class":30,"line":2244},[28,43656,32567],{"class":73},[28,43658,43659,43661,43663,43665],{"class":30,"line":2249},[28,43660,32572],{"class":5704},[28,43662,83],{"class":42},[28,43664,1020],{"class":38},[28,43666,228],{"class":34},[28,43668,43669,43671,43673,43675,43677,43679],{"class":30,"line":2254},[28,43670,32583],{"class":34},[28,43672,83],{"class":42},[28,43674,32013],{"class":34},[28,43676,32016],{"class":5704},[28,43678,83],{"class":42},[28,43680,32594],{"class":34},[28,43682,43683,43685,43687,43689],{"class":30,"line":2268},[28,43684,32599],{"class":5704},[28,43686,83],{"class":42},[28,43688,828],{"class":38},[28,43690,31945],{"class":34},[28,43692,43693,43695,43697,43699],{"class":30,"line":2273},[28,43694,32610],{"class":5704},[28,43696,83],{"class":42},[28,43698,31955],{"class":38},[28,43700,31945],{"class":34},[28,43702,43703,43705,43707,43709],{"class":30,"line":3067},[28,43704,32621],{"class":5704},[28,43706,83],{"class":42},[28,43708,1020],{"class":38},[28,43710,228],{"class":34},[28,43712,43713,43715],{"class":30,"line":3081},[28,43714,4578],{"class":42},[28,43716,32634],{"class":34},[28,43718,43719],{"class":30,"line":3089},[28,43720,2890],{"emptyLinePlaceholder":562},[28,43722,43723],{"class":30,"line":3094},[28,43724,32643],{"class":73},[28,43726,43727],{"class":30,"line":3100},[28,43728,32648],{"class":73},[28,43730,43731],{"class":30,"line":3106},[28,43732,2890],{"emptyLinePlaceholder":562},[28,43734,43735],{"class":30,"line":3111},[28,43736,32657],{"class":73},[28,43738,43739,43741,43743],{"class":30,"line":8436},[28,43740,32426],{"class":42},[28,43742,32664],{"class":2453},[28,43744,32667],{"class":34},[28,43746,43747,43749,43751,43753,43755,43757,43759,43761,43763],{"class":30,"line":8460},[28,43748,31718],{"class":34},[28,43750,83],{"class":42},[28,43752,30934],{"class":34},[28,43754,31725],{"class":735},[28,43756,2194],{"class":42},[28,43758,31730],{"class":34},[28,43760,2191],{"class":42},[28,43762,32686],{"class":735},[28,43764,228],{"class":34},[28,43766,43767],{"class":30,"line":8465},[28,43768,2890],{"emptyLinePlaceholder":562},[28,43770,43771],{"class":30,"line":8471},[28,43772,2890],{"emptyLinePlaceholder":562},[28,43774,43775],{"class":30,"line":8498},[28,43776,32701],{"class":73},[28,43778,43779],{"class":30,"line":8503},[28,43780,32706],{"class":73},[28,43782,43783],{"class":30,"line":8509},[28,43784,32711],{"class":73},[28,43786,43787,43789,43791,43793,43795,43797,43799],{"class":30,"line":8521},[28,43788,32716],{"class":34},[28,43790,83],{"class":42},[28,43792,32721],{"class":34},[28,43794,32724],{"class":5704},[28,43796,83],{"class":42},[28,43798,32729],{"class":38},[28,43800,228],{"class":34},[28,43802,43803],{"class":30,"line":8533},[28,43804,2890],{"emptyLinePlaceholder":562},[28,43806,43807],{"class":30,"line":8545},[28,43808,32740],{"class":73},[28,43810,43811,43813,43815],{"class":30,"line":10202},[28,43812,32745],{"class":34},[28,43814,83],{"class":42},[28,43816,32750],{"class":34},[28,43818,43819],{"class":30,"line":10227},[28,43820,2890],{"emptyLinePlaceholder":562},[28,43822,43823],{"class":30,"line":10250},[28,43824,32759],{"class":73},[28,43826,43827,43829,43831],{"class":30,"line":10274},[28,43828,31770],{"class":34},[28,43830,83],{"class":42},[28,43832,32768],{"class":34},[28,43834,43835],{"class":30,"line":10279},[28,43836,32773],{"class":73},[28,43838,43839],{"class":30,"line":10284},[28,43840,32778],{"class":73},[28,43842,43843],{"class":30,"line":10289},[28,43844,32783],{"class":73},[28,43846,43847,43849,43851],{"class":30,"line":10298},[28,43848,32788],{"class":34},[28,43850,83],{"class":42},[28,43852,32793],{"class":34},[28,43854,43855],{"class":30,"line":10303},[28,43856,2890],{"emptyLinePlaceholder":562},[28,43858,43859],{"class":30,"line":10309},[28,43860,2890],{"emptyLinePlaceholder":562},[28,43862,43863],{"class":30,"line":10330},[28,43864,32806],{"class":73},[28,43866,43867],{"class":30,"line":10336},[28,43868,32811],{"class":73},[28,43870,43871,43873,43875],{"class":30,"line":10350},[28,43872,32816],{"class":34},[28,43874,83],{"class":42},[28,43876,32821],{"class":38},[28,43878,43879],{"class":30,"line":10356},[28,43880,32826],{"class":73},[28,43882,43883,43885,43887],{"class":30,"line":10383},[28,43884,32831],{"class":34},[28,43886,83],{"class":42},[28,43888,32836],{"class":34},[28,43890,43891],{"class":30,"line":10392},[28,43892,32841],{"class":73},[28,43894,43895,43897,43899],{"class":30,"line":10398},[28,43896,32846],{"class":34},[28,43898,83],{"class":42},[28,43900,32836],{"class":34},[28,43902,43903],{"class":30,"line":10406},[28,43904,32855],{"class":73},[28,43906,43907,43909,43911],{"class":30,"line":10411},[28,43908,32860],{"class":34},[28,43910,83],{"class":42},[28,43912,32836],{"class":34},[28,43914,43915],{"class":30,"line":17090},[28,43916,32869],{"class":73},[28,43918,43919,43921,43923],{"class":30,"line":17096},[28,43920,32874],{"class":34},[28,43922,83],{"class":42},[28,43924,32836],{"class":34},[28,43926,43927],{"class":30,"line":17119},[28,43928,2890],{"emptyLinePlaceholder":562},[28,43930,43931],{"class":30,"line":17125},[28,43932,32887],{"class":73},[28,43934,43935,43937,43939],{"class":30,"line":17148},[28,43936,32892],{"class":34},[28,43938,83],{"class":42},[28,43940,32897],{"class":34},[28,43942,43943],{"class":30,"line":17162},[28,43944,2890],{"emptyLinePlaceholder":562},[28,43946,43947],{"class":30,"line":17182},[28,43948,2890],{"emptyLinePlaceholder":562},[28,43950,43951],{"class":30,"line":17188},[28,43952,32910],{"class":73},[28,43954,43955,43957,43959,43961,43963],{"class":30,"line":17199},[28,43956,377],{"class":42},[28,43958,32917],{"class":34},[28,43960,55],{"class":42},[28,43962,364],{"class":38},[28,43964,32924],{"class":34},[28,43966,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987],{"class":30,"line":17222},[28,43968,32929],{"class":38},[28,43970,367],{"class":34},[28,43972,32934],{"class":735},[28,43974,32937],{"class":38},[28,43976,43],{"class":735},[28,43978,32937],{"class":38},[28,43980,880],{"class":735},[28,43982,32946],{"class":34},[28,43984,445],{"class":42},[28,43986,39],{"class":38},[28,43988,30980],{"class":34},[28,43990,43991,43993,43995,43997,43999,44001],{"class":30,"line":17244},[28,43992,32929],{"class":38},[28,43994,367],{"class":34},[28,43996,32961],{"class":735},[28,43998,256],{"class":42},[28,44000,225],{"class":38},[28,44002,228],{"class":34},[28,44004,44005],{"class":30,"line":17249},[28,44006,2890],{"emptyLinePlaceholder":562},[28,44008,44009],{"class":30,"line":17255},[28,44010,32976],{"class":73},[28,44012,44013],{"class":30,"line":17269},[28,44014,32981],{"class":73},[28,44016,44017,44019,44021],{"class":30,"line":17282},[28,44018,32986],{"class":34},[28,44020,83],{"class":42},[28,44022,32821],{"class":38},[28,44024,44025],{"class":30,"line":17287},[28,44026,32995],{"class":73},[28,44028,44029,44031,44033],{"class":30,"line":17301},[28,44030,33000],{"class":34},[28,44032,83],{"class":42},[28,44034,3574],{"class":38},[28,44036,44037],{"class":30,"line":17306},[28,44038,33009],{"class":73},[28,44040,44041,44043,44045],{"class":30,"line":17312},[28,44042,33014],{"class":34},[28,44044,83],{"class":42},[28,44046,32821],{"class":38},[28,44048,44049],{"class":30,"line":17317},[28,44050,33023],{"class":73},[28,44052,44053,44055,44057],{"class":30,"line":17331},[28,44054,33028],{"class":34},[28,44056,83],{"class":42},[28,44058,3574],{"class":38},[28,44060,44061],{"class":30,"line":17336},[28,44062,33037],{"class":73},[28,44064,44065,44067,44069],{"class":30,"line":17341},[28,44066,33042],{"class":34},[28,44068,83],{"class":42},[28,44070,3574],{"class":38},[28,44072,44073],{"class":30,"line":17355},[28,44074,33051],{"class":73},[28,44076,44077,44079,44081],{"class":30,"line":17367},[28,44078,33056],{"class":34},[28,44080,83],{"class":42},[28,44082,3574],{"class":38},[28,44084,44085],{"class":30,"line":17372},[28,44086,33065],{"class":73},[28,44088,44089,44091,44093,44095,44097],{"class":30,"line":17385},[28,44090,3891],{"class":42},[28,44092,32080],{"class":34},[28,44094,55],{"class":42},[28,44096,32085],{"class":38},[28,44098,33078],{"class":34},[28,44100,44101],{"class":30,"line":17390},[28,44102,33083],{"class":73},[28,44104,44105,44107,44109],{"class":30,"line":17395},[28,44106,33088],{"class":34},[28,44108,83],{"class":42},[28,44110,33093],{"class":34},[28,44112,44113],{"class":30,"line":17400},[28,44114,33098],{"class":73},[28,44116,44117,44119,44121],{"class":30,"line":17413},[28,44118,33103],{"class":34},[28,44120,83],{"class":42},[28,44122,33108],{"class":34},[28,44124,44125],{"class":30,"line":17418},[28,44126,33114],{"class":73},[28,44128,44129],{"class":30,"line":33111},[28,44130,33120],{"class":34},[28,44132,44133],{"class":30,"line":33117},[28,44134,33126],{"class":73},[28,44136,44137],{"class":30,"line":33123},[28,44138,33132],{"class":73},[28,44140,44141,44143,44145],{"class":30,"line":33129},[28,44142,33138],{"class":34},[28,44144,83],{"class":42},[28,44146,33143],{"class":34},[28,44148,44149],{"class":30,"line":33135},[28,44150,33149],{"class":73},[28,44152,44153,44155,44157,44159,44161,44163,44165],{"class":30,"line":33146},[28,44154,33155],{"class":34},[28,44156,83],{"class":42},[28,44158,33160],{"class":34},[28,44160,33163],{"class":5704},[28,44162,83],{"class":42},[28,44164,39],{"class":38},[28,44166,228],{"class":34},[28,44168,44169],{"class":30,"line":33152},[28,44170,33175],{"class":73},[28,44172,44173,44175,44177],{"class":30,"line":33172},[28,44174,33181],{"class":34},[28,44176,83],{"class":42},[28,44178,33186],{"class":34},[28,44180,44181],{"class":30,"line":33178},[28,44182,33192],{"class":73},[28,44184,44185],{"class":30,"line":33189},[28,44186,33198],{"class":34},[28,44188,44189],{"class":30,"line":33195},[28,44190,33204],{"class":73},[28,44192,44193],{"class":30,"line":33201},[28,44194,33210],{"class":34},[28,44196,44197],{"class":30,"line":33207},[28,44198,33216],{"class":73},[28,44200,44201],{"class":30,"line":33213},[28,44202,33222],{"class":34},[28,44204,44205],{"class":30,"line":33219},[28,44206,33228],{"class":73},[28,44208,44209,44211,44213,44215,44217,44219,44221],{"class":30,"line":33225},[28,44210,33234],{"class":34},[28,44212,9964],{"class":42},[28,44214,33239],{"class":34},[28,44216,256],{"class":42},[28,44218,33244],{"class":34},[28,44220,822],{"class":38},[28,44222,228],{"class":34},[28,44224,44225],{"class":30,"line":33231},[28,44226,33254],{"class":73},[28,44228,44229,44231,44233,44235,44237],{"class":30,"line":33251},[28,44230,33260],{"class":34},[28,44232,9964],{"class":42},[28,44234,33265],{"class":34},[28,44236,3439],{"class":42},[28,44238,33270],{"class":34},[28,44240,44241],{"class":30,"line":33257},[28,44242,33276],{"class":73},[28,44244,44245,44247,44249,44251,44253],{"class":30,"line":33273},[28,44246,33282],{"class":34},[28,44248,9964],{"class":42},[28,44250,33244],{"class":34},[28,44252,822],{"class":38},[28,44254,228],{"class":34},[28,44256,44257],{"class":30,"line":33279},[28,44258,33296],{"class":73},[28,44260,44261,44263,44265,44267,44269],{"class":30,"line":33293},[28,44262,3891],{"class":42},[28,44264,33304],{"class":34},[28,44266,55],{"class":42},[28,44268,32085],{"class":38},[28,44270,33311],{"class":34},[28,44272,44273],{"class":30,"line":33299},[28,44274,33317],{"class":73},[28,44276,44277,44279,44281],{"class":30,"line":33314},[28,44278,33088],{"class":34},[28,44280,83],{"class":42},[28,44282,33093],{"class":34},[28,44284,44285],{"class":30,"line":33320},[28,44286,33332],{"class":73},[28,44288,44289,44291,44293],{"class":30,"line":33329},[28,44290,33103],{"class":34},[28,44292,83],{"class":42},[28,44294,33108],{"class":34},[28,44296,44297],{"class":30,"line":33335},[28,44298,33347],{"class":73},[28,44300,44301],{"class":30,"line":33344},[28,44302,33353],{"class":34},[28,44304,44305],{"class":30,"line":33350},[28,44306,36833],{"class":73},[28,44308,44309,44311],{"class":30,"line":33356},[28,44310,33359],{"class":42},[28,44312,33362],{"class":34},[28,44314,44315],{"class":30,"line":33365},[28,44316,33368],{"class":73},[28,44318,44319,44321,44323],{"class":30,"line":33371},[28,44320,36848],{"class":34},[28,44322,83],{"class":42},[28,44324,33143],{"class":34},[28,44326,44327],{"class":30,"line":33382},[28,44328,33385],{"class":73},[28,44330,44331,44333,44335,44337,44339,44341,44343],{"class":30,"line":33388},[28,44332,36861],{"class":34},[28,44334,83],{"class":42},[28,44336,33160],{"class":34},[28,44338,33163],{"class":5704},[28,44340,83],{"class":42},[28,44342,39],{"class":38},[28,44344,228],{"class":34},[28,44346,44347],{"class":30,"line":33407},[28,44348,33410],{"class":73},[28,44350,44351,44353,44355],{"class":30,"line":33413},[28,44352,36882],{"class":34},[28,44354,83],{"class":42},[28,44356,33186],{"class":34},[28,44358,44359],{"class":30,"line":33424},[28,44360,33427],{"class":73},[28,44362,44363,44365,44367,44369,44371,44373,44375],{"class":30,"line":33430},[28,44364,36895],{"class":34},[28,44366,9964],{"class":42},[28,44368,36900],{"class":34},[28,44370,256],{"class":42},[28,44372,33244],{"class":34},[28,44374,822],{"class":38},[28,44376,228],{"class":34},[28,44378,44379,44381,44383,44385,44387],{"class":30,"line":33450},[28,44380,36913],{"class":34},[28,44382,9964],{"class":42},[28,44384,33265],{"class":34},[28,44386,3439],{"class":42},[28,44388,33270],{"class":34},[28,44390,44391],{"class":30,"line":33466},[28,44392,36926],{"class":73},[28,44394,44395,44397,44399,44401,44403],{"class":30,"line":33472},[28,44396,36931],{"class":34},[28,44398,9964],{"class":42},[28,44400,33244],{"class":34},[28,44402,822],{"class":38},[28,44404,228],{"class":34},[28,44406,44407],{"class":30,"line":33486},[28,44408,33489],{"class":73},[28,44410,44411],{"class":30,"line":33492},[28,44412,33495],{"class":73},[28,44414,44415,44417,44419],{"class":30,"line":33498},[28,44416,33501],{"class":34},[28,44418,43],{"class":42},[28,44420,33506],{"class":34},[28,44422,44423],{"class":30,"line":33509},[28,44424,33512],{"class":73},[28,44426,44427],{"class":30,"line":33515},[28,44428,33518],{"class":73},[28,44430,44431,44433,44435],{"class":30,"line":33521},[28,44432,33524],{"class":34},[28,44434,43],{"class":42},[28,44436,33506],{"class":34},[28,44438,44439],{"class":30,"line":33531},[28,44440,33534],{"class":73},[28,44442,44443,44445,44447],{"class":30,"line":33537},[28,44444,33540],{"class":34},[28,44446,43],{"class":42},[28,44448,33545],{"class":34},[28,44450,44451],{"class":30,"line":33548},[28,44452,33551],{"class":73},[28,44454,44455,44457,44459],{"class":30,"line":33554},[28,44456,33557],{"class":34},[28,44458,43],{"class":42},[28,44460,33545],{"class":34},[28,44462,44463],{"class":30,"line":33564},[28,44464,2890],{"emptyLinePlaceholder":562},[28,44466,44467],{"class":30,"line":33569},[28,44468,33572],{"class":73},[28,44470,44471,44473,44475,44477,44479,44481,44483,44485,44487,44489,44491,44493,44495,44497,44499,44501,44503,44505,44507,44509],{"class":30,"line":33575},[28,44472,32929],{"class":38},[28,44474,367],{"class":34},[28,44476,4080],{"class":735},[28,44478,32937],{"class":38},[28,44480,33586],{"class":735},[28,44482,1515],{"class":38},[28,44484,33591],{"class":42},[28,44486,1565],{"class":38},[28,44488,33596],{"class":735},[28,44490,1515],{"class":38},[28,44492,33591],{"class":42},[28,44494,1565],{"class":38},[28,44496,4080],{"class":735},[28,44498,33607],{"class":34},[28,44500,445],{"class":42},[28,44502,39],{"class":38},[28,44504,33614],{"class":34},[28,44506,445],{"class":42},[28,44508,39],{"class":38},[28,44510,33621],{"class":34},[28,44512,44513,44515,44517,44519,44521,44523,44525,44527,44529,44531,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551],{"class":30,"line":33624},[28,44514,32929],{"class":38},[28,44516,367],{"class":34},[28,44518,4080],{"class":735},[28,44520,32937],{"class":38},[28,44522,33635],{"class":735},[28,44524,1515],{"class":38},[28,44526,33591],{"class":42},[28,44528,1565],{"class":38},[28,44530,33644],{"class":735},[28,44532,1515],{"class":38},[28,44534,33591],{"class":42},[28,44536,1565],{"class":38},[28,44538,4080],{"class":735},[28,44540,33655],{"class":34},[28,44542,445],{"class":42},[28,44544,39],{"class":38},[28,44546,33662],{"class":34},[28,44548,445],{"class":42},[28,44550,39],{"class":38},[28,44552,33621],{"class":34},[28,44554,44555],{"class":30,"line":33671},[28,44556,2890],{"emptyLinePlaceholder":562},[28,44558,44559],{"class":30,"line":33676},[28,44560,33679],{"class":73},[28,44562,44563,44565,44567,44569,44571,44573,44575],{"class":30,"line":33682},[28,44564,2987],{"class":42},[28,44566,33687],{"class":34},[28,44568,445],{"class":42},[28,44570,39],{"class":38},[28,44572,1559],{"class":34},[28,44574,1579],{"class":42},[28,44576,33698],{"class":34},[28,44578,44579],{"class":30,"line":33701},[28,44580,33704],{"class":73},[28,44582,44583,44585,44587,44589,44591,44593,44595],{"class":30,"line":33707},[28,44584,33710],{"class":34},[28,44586,675],{"class":38},[28,44588,83],{"class":42},[28,44590,33717],{"class":34},[28,44592,445],{"class":42},[28,44594,39],{"class":38},[28,44596,111],{"class":34},[28,44598,44599],{"class":30,"line":33726},[28,44600,33729],{"class":73},[28,44602,44603],{"class":30,"line":33732},[28,44604,33735],{"class":73},[28,44606,44607,44609,44611],{"class":30,"line":33738},[28,44608,33741],{"class":34},[28,44610,83],{"class":42},[28,44612,32793],{"class":34},[28,44614,44615],{"class":30,"line":33748},[28,44616,2890],{"emptyLinePlaceholder":562},[28,44618,44619],{"class":30,"line":33753},[28,44620,33756],{"class":73},[28,44622,44623,44625,44627,44629,44631],{"class":30,"line":33759},[28,44624,33762],{"class":34},[28,44626,83],{"class":42},[28,44628,33767],{"class":34},[28,44630,445],{"class":42},[28,44632,33772],{"class":34},[28,44634,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653,44655,44657,44659,44661,44663,44665,44667,44669],{"class":30,"line":33775},[28,44636,32929],{"class":38},[28,44638,367],{"class":34},[28,44640,33782],{"class":735},[28,44642,1515],{"class":38},[28,44644,33787],{"class":42},[28,44646,1565],{"class":38},[28,44648,1165],{"class":735},[28,44650,1515],{"class":38},[28,44652,33787],{"class":42},[28,44654,1565],{"class":38},[28,44656,33800],{"class":735},[28,44658,33803],{"class":34},[28,44660,33806],{"class":42},[28,44662,1526],{"class":38},[28,44664,33811],{"class":34},[28,44666,954],{"class":42},[28,44668,1526],{"class":38},[28,44670,30980],{"class":34},[28,44672,44673],{"class":30,"line":33820},[28,44674,37210],{"class":73},[28,44676,44677],{"class":30,"line":33826},[28,44678,37215],{"class":73},[28,44680,44681,44683,44685],{"class":30,"line":33832},[28,44682,37220],{"class":34},[28,44684,33844],{"class":735},[28,44686,228],{"class":34},[28,44688,44689],{"class":30,"line":33838},[28,44690,33864],{"class":73},[28,44692,44693,44695,44697,44699,44701,44703],{"class":30,"line":33849},[28,44694,33870],{"class":34},[28,44696,83],{"class":42},[28,44698,33875],{"class":34},[28,44700,33878],{"class":5704},[28,44702,83],{"class":42},[28,44704,2036],{"class":34},[28,44706,44707,44709,44711,44713],{"class":30,"line":33855},[28,44708,33888],{"class":735},[28,44710,1479],{"class":34},[28,44712,33893],{"class":38},[28,44714,33896],{"class":34},[28,44716,44717,44719],{"class":30,"line":33861},[28,44718,33902],{"class":735},[28,44720,33905],{"class":34},[28,44722,44723,44725],{"class":30,"line":33867},[28,44724,33911],{"class":735},[28,44726,33914],{"class":34},[28,44728,44729,44731],{"class":30,"line":33885},[28,44730,33920],{"class":735},[28,44732,33923],{"class":34},[28,44734,44735,44737],{"class":30,"line":33899},[28,44736,33929],{"class":735},[28,44738,33932],{"class":34},[28,44740,44741],{"class":30,"line":33908},[28,44742,33938],{"class":34},[28,44744,44745],{"class":30,"line":33917},[28,44746,33944],{"class":73},[28,44748,44749,44751],{"class":30,"line":33926},[28,44750,4578],{"class":42},[28,44752,33952],{"class":34},[28,44754,44755],{"class":30,"line":33935},[28,44756,2890],{"emptyLinePlaceholder":562},[28,44758,44759],{"class":30,"line":33941},[28,44760,33963],{"class":73},[28,44762,44763,44765,44767],{"class":30,"line":33947},[28,44764,32426],{"class":42},[28,44766,33971],{"class":2453},[28,44768,33974],{"class":34},[28,44770,44771],{"class":30,"line":33955},[28,44772,33980],{"class":73},[28,44774,44775,44777,44779,44781,44783,44785,44787,44789],{"class":30,"line":33960},[28,44776,33986],{"class":34},[28,44778,32172],{"class":5704},[28,44780,83],{"class":42},[28,44782,367],{"class":34},[28,44784,1121],{"class":38},[28,44786,90],{"class":34},[28,44788,103],{"class":38},[28,44790,30980],{"class":34},[28,44792,44793],{"class":30,"line":33966},[28,44794,34006],{"class":73},[28,44796,44797],{"class":30,"line":33977},[28,44798,34012],{"class":73},[28,44800,44801],{"class":30,"line":33983},[28,44802,34018],{"class":73},[28,44804,44805,44807,44809,44811,44813,44815,44817],{"class":30,"line":34003},[28,44806,32206],{"class":34},[28,44808,39],{"class":38},[28,44810,90],{"class":34},[28,44812,93],{"class":38},[28,44814,90],{"class":34},[28,44816,39],{"class":38},[28,44818,228],{"class":34},[28,44820,44821],{"class":30,"line":34009},[28,44822,34041],{"class":73},[28,44824,44825],{"class":30,"line":34015},[28,44826,34047],{"class":73},[28,44828,44829],{"class":30,"line":34021},[28,44830,34053],{"class":73},[28,44832,44833],{"class":30,"line":34038},[28,44834,34059],{"class":73},[28,44836,44837],{"class":30,"line":34044},[28,44838,34065],{"class":73},[28,44840,44841,44843,44845,44847,44849,44851,44853,44855,44857],{"class":30,"line":34050},[28,44842,34071],{"class":34},[28,44844,34074],{"class":735},[28,44846,34077],{"class":34},[28,44848,34080],{"class":735},[28,44850,90],{"class":34},[28,44852,34085],{"class":5704},[28,44854,83],{"class":42},[28,44856,34090],{"class":735},[28,44858,228],{"class":34},[28,44860,44861,44863,44865,44867,44869,44871,44873,44875,44877],{"class":30,"line":34056},[28,44862,34071],{"class":34},[28,44864,34074],{"class":735},[28,44866,34102],{"class":34},[28,44868,34105],{"class":735},[28,44870,90],{"class":34},[28,44872,34085],{"class":5704},[28,44874,83],{"class":42},[28,44876,34114],{"class":735},[28,44878,228],{"class":34},[28,44880,44881],{"class":30,"line":34062},[28,44882,34122],{"class":73},[28,44884,44885],{"class":30,"line":34068},[28,44886,34128],{"class":34},[28,44888,44889],{"class":30,"line":34095},[28,44890,34134],{"class":73},[28,44892,44893,44895,44897],{"class":30,"line":34119},[28,44894,34140],{"class":34},[28,44896,34143],{"class":735},[28,44898,228],{"class":34},[28,44900,44901,44903,44905],{"class":30,"line":34125},[28,44902,34151],{"class":34},[28,44904,34154],{"class":735},[28,44906,228],{"class":34},[28,44908,44909],{"class":30,"line":34131},[28,44910,34162],{"class":73},[28,44912,44913,44915,44917,44919,44921,44923,44925],{"class":30,"line":34137},[28,44914,32206],{"class":34},[28,44916,39],{"class":38},[28,44918,90],{"class":34},[28,44920,93],{"class":38},[28,44922,90],{"class":34},[28,44924,93],{"class":38},[28,44926,228],{"class":34},[28,44928,44929,44931,44933,44935,44937,44939,44941,44943,44945],{"class":30,"line":34148},[28,44930,34071],{"class":34},[28,44932,34074],{"class":735},[28,44934,34189],{"class":34},[28,44936,34080],{"class":735},[28,44938,90],{"class":34},[28,44940,34085],{"class":5704},[28,44942,83],{"class":42},[28,44944,34200],{"class":735},[28,44946,228],{"class":34},[28,44948,44949,44951,44953,44955,44957,44959,44961,44963,44965],{"class":30,"line":34159},[28,44950,34071],{"class":34},[28,44952,34074],{"class":735},[28,44954,34212],{"class":34},[28,44956,34105],{"class":735},[28,44958,90],{"class":34},[28,44960,34085],{"class":5704},[28,44962,83],{"class":42},[28,44964,34223],{"class":735},[28,44966,228],{"class":34},[28,44968,44969],{"class":30,"line":34165},[28,44970,34231],{"class":73},[28,44972,44973],{"class":30,"line":34182},[28,44974,34128],{"class":34},[28,44976,44977,44979,44981],{"class":30,"line":34205},[28,44978,34140],{"class":34},[28,44980,34074],{"class":735},[28,44982,228],{"class":34},[28,44984,44985,44987,44989],{"class":30,"line":34228},[28,44986,34151],{"class":34},[28,44988,34253],{"class":735},[28,44990,228],{"class":34},[28,44992,44993],{"class":30,"line":34234},[28,44994,34261],{"class":34},[28,44996,44997],{"class":30,"line":34239},[28,44998,2890],{"emptyLinePlaceholder":562},[28,45000,45001],{"class":30,"line":34248},[28,45002,34272],{"class":73},[28,45004,45005,45007,45009,45011,45013],{"class":30,"line":34258},[28,45006,2021],{"class":42},[28,45008,31701],{"class":38},[28,45010,3439],{"class":42},[28,45012,31706],{"class":735},[28,45014,4227],{"class":34},[28,45016,45017],{"class":30,"line":34264},[28,45018,34291],{"class":73},[28,45020,45021,45024,45026],{"class":30,"line":34269},[28,45022,45023],{"class":34},"    GoogLeNet",[28,45025,83],{"class":42},[28,45027,45028],{"class":34},"GoogLeNet(Inception)\n",[28,45030,45031,45033,45035],{"class":30,"line":34275},[28,45032,34308],{"class":34},[28,45034,83],{"class":42},[28,45036,34313],{"class":34},[28,45038,45039,45041,45043,45046,45048,45050,45052],{"class":30,"line":34288},[28,45040,33870],{"class":34},[28,45042,83],{"class":42},[28,45044,45045],{"class":34},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[28,45047,34326],{"class":5704},[28,45049,83],{"class":42},[28,45051,1570],{"class":38},[28,45053,228],{"class":34},[28,45055,45056],{"class":30,"line":34294},[28,45057,34338],{"class":34},[588,45059,45060],{"start":114},[591,45061,41051],{},[18,45063,45065],{"className":20,"code":45064,"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,45066,45067,45073,45083,45093,45097,45107,45118,45122,45126,45130,45138,45154,45164,45180,45190,45204,45208,45218,45228,45238,45244,45248,45252,45260,45264,45280,45288,45292,45296,45304,45312,45316,45320,45324,45328,45334,45338,45348,45356,45364,45368,45372,45376,45384,45388,45404,45408,45412,45416,45428,45432,45444,45448,45452,45464,45468,45478,45482,45486,45498,45502,45510,45514,45518,45526,45530,45538,45542,45546,45550,45554,45558,45574,45582,45586,45590,45638,45644,45648,45658,45666,45674,45678,45682,45686,45690,45698,45702,45718,45722,45730,45738],{"__ignoreMap":23},[28,45068,45069,45071],{"class":30,"line":31},[28,45070,536],{"class":42},[28,45072,30878],{"class":34},[28,45074,45075,45077,45079,45081],{"class":30,"line":77},[28,45076,536],{"class":42},[28,45078,31895],{"class":34},[28,45080,542],{"class":42},[28,45082,31900],{"class":34},[28,45084,45085,45087,45089,45091],{"class":30,"line":114},[28,45086,530],{"class":42},[28,45088,31878],{"class":34},[28,45090,536],{"class":42},[28,45092,31883],{"class":34},[28,45094,45095],{"class":30,"line":128},[28,45096,34399],{"class":73},[28,45098,45099,45101,45103,45105],{"class":30,"line":393},[28,45100,530],{"class":42},[28,45102,31849],{"class":34},[28,45104,536],{"class":42},[28,45106,31854],{"class":34},[28,45108,45109,45111,45113,45115],{"class":30,"line":409},[28,45110,530],{"class":42},[28,45112,32393],{"class":34},[28,45114,536],{"class":42},[28,45116,45117],{"class":34}," GoogLeNet,Inception\n",[28,45119,45120],{"class":30,"line":1711},[28,45121,2890],{"emptyLinePlaceholder":562},[28,45123,45124],{"class":30,"line":1802},[28,45125,2890],{"emptyLinePlaceholder":562},[28,45127,45128],{"class":30,"line":1808},[28,45129,34428],{"class":73},[28,45131,45132,45134,45136],{"class":30,"line":1820},[28,45133,32426],{"class":42},[28,45135,34435],{"class":2453},[28,45137,32432],{"class":34},[28,45139,45140,45142,45144,45146,45148,45150,45152],{"class":30,"line":2102},[28,45141,34442],{"class":34},[28,45143,83],{"class":42},[28,45145,31934],{"class":34},[28,45147,31937],{"class":5704},[28,45149,83],{"class":42},[28,45151,31942],{"class":735},[28,45153,31945],{"class":34},[28,45155,45156,45158,45160,45162],{"class":30,"line":2107},[28,45157,34459],{"class":5704},[28,45159,83],{"class":42},[28,45161,34464],{"class":38},[28,45163,31945],{"class":34},[28,45165,45166,45168,45170,45172,45174,45176,45178],{"class":30,"line":2113},[28,45167,34471],{"class":5704},[28,45169,83],{"class":42},[28,45171,31972],{"class":34},[28,45173,31975],{"class":5704},[28,45175,83],{"class":42},[28,45177,35926],{"class":38},[28,45179,31983],{"class":34},[28,45181,45182,45184,45186,45188],{"class":30,"line":2118},[28,45183,34488],{"class":5704},[28,45185,83],{"class":42},[28,45187,31955],{"class":38},[28,45189,228],{"class":34},[28,45191,45192,45194,45196,45198,45200,45202],{"class":30,"line":2132},[28,45193,34499],{"class":34},[28,45195,83],{"class":42},[28,45197,32013],{"class":34},[28,45199,32016],{"class":5704},[28,45201,83],{"class":42},[28,45203,34510],{"class":34},[28,45205,45206],{"class":30,"line":2137},[28,45207,34515],{"class":73},[28,45209,45210,45212,45214,45216],{"class":30,"line":2143},[28,45211,34520],{"class":5704},[28,45213,83],{"class":42},[28,45215,39],{"class":38},[28,45217,31945],{"class":34},[28,45219,45220,45222,45224,45226],{"class":30,"line":2164},[28,45221,34531],{"class":5704},[28,45223,83],{"class":42},[28,45225,31955],{"class":38},[28,45227,31945],{"class":34},[28,45229,45230,45232,45234,45236],{"class":30,"line":2169},[28,45231,34542],{"class":5704},[28,45233,83],{"class":42},[28,45235,822],{"class":38},[28,45237,228],{"class":34},[28,45239,45240,45242],{"class":30,"line":2183},[28,45241,4578],{"class":42},[28,45243,34555],{"class":34},[28,45245,45246],{"class":30,"line":2188},[28,45247,2890],{"emptyLinePlaceholder":562},[28,45249,45250],{"class":30,"line":2217},[28,45251,34564],{"class":73},[28,45253,45254,45256,45258],{"class":30,"line":2222},[28,45255,32426],{"class":42},[28,45257,34571],{"class":2453},[28,45259,34574],{"class":34},[28,45261,45262],{"class":30,"line":2239},[28,45263,34579],{"class":73},[28,45265,45266,45268,45270,45272,45274,45276,45278],{"class":30,"line":2244},[28,45267,31718],{"class":34},[28,45269,83],{"class":42},[28,45271,31725],{"class":735},[28,45273,2194],{"class":42},[28,45275,31730],{"class":34},[28,45277,2191],{"class":42},[28,45279,34596],{"class":735},[28,45281,45282,45284,45286],{"class":30,"line":2249},[28,45283,31770],{"class":34},[28,45285,83],{"class":42},[28,45287,32768],{"class":34},[28,45289,45290],{"class":30,"line":2254},[28,45291,2890],{"emptyLinePlaceholder":562},[28,45293,45294],{"class":30,"line":2268},[28,45295,34613],{"class":73},[28,45297,45298,45300,45302],{"class":30,"line":2273},[28,45299,34618],{"class":34},[28,45301,83],{"class":42},[28,45303,32821],{"class":38},[28,45305,45306,45308,45310],{"class":30,"line":3067},[28,45307,34627],{"class":34},[28,45309,83],{"class":42},[28,45311,3574],{"class":38},[28,45313,45314],{"class":30,"line":3081},[28,45315,2890],{"emptyLinePlaceholder":562},[28,45317,45318],{"class":30,"line":3089},[28,45319,34640],{"class":73},[28,45321,45322],{"class":30,"line":3094},[28,45323,34645],{"class":73},[28,45325,45326],{"class":30,"line":3100},[28,45327,34650],{"class":73},[28,45329,45330,45332],{"class":30,"line":3106},[28,45331,34655],{"class":42},[28,45333,33362],{"class":34},[28,45335,45336],{"class":30,"line":3111},[28,45337,34662],{"class":73},[28,45339,45340,45342,45344,45346],{"class":30,"line":8436},[28,45341,3891],{"class":42},[28,45343,34669],{"class":34},[28,45345,55],{"class":42},[28,45347,34674],{"class":34},[28,45349,45350,45352,45354],{"class":30,"line":8460},[28,45351,34679],{"class":34},[28,45353,83],{"class":42},[28,45355,34684],{"class":34},[28,45357,45358,45360,45362],{"class":30,"line":8465},[28,45359,34689],{"class":34},[28,45361,83],{"class":42},[28,45363,34694],{"class":34},[28,45365,45366],{"class":30,"line":8471},[28,45367,34699],{"class":73},[28,45369,45370],{"class":30,"line":8498},[28,45371,33353],{"class":34},[28,45373,45374],{"class":30,"line":8503},[28,45375,34708],{"class":73},[28,45377,45378,45380,45382],{"class":30,"line":8509},[28,45379,33138],{"class":34},[28,45381,83],{"class":42},[28,45383,34717],{"class":34},[28,45385,45386],{"class":30,"line":8521},[28,45387,34722],{"class":73},[28,45389,45390,45392,45394,45396,45398,45400,45402],{"class":30,"line":8533},[28,45391,33155],{"class":34},[28,45393,83],{"class":42},[28,45395,33160],{"class":34},[28,45397,33163],{"class":5704},[28,45399,83],{"class":42},[28,45401,39],{"class":38},[28,45403,228],{"class":34},[28,45405,45406],{"class":30,"line":8545},[28,45407,34743],{"class":73},[28,45409,45410],{"class":30,"line":10202},[28,45411,34748],{"class":73},[28,45413,45414],{"class":30,"line":10227},[28,45415,34753],{"class":73},[28,45417,45418,45420,45422,45424,45426],{"class":30,"line":10250},[28,45419,34758],{"class":34},[28,45421,9964],{"class":42},[28,45423,33265],{"class":34},[28,45425,3439],{"class":42},[28,45427,34767],{"class":34},[28,45429,45430],{"class":30,"line":10274},[28,45431,34772],{"class":73},[28,45433,45434,45436,45438,45440,45442],{"class":30,"line":10279},[28,45435,34777],{"class":34},[28,45437,9964],{"class":42},[28,45439,34782],{"class":34},[28,45441,822],{"class":38},[28,45443,228],{"class":34},[28,45445,45446],{"class":30,"line":10284},[28,45447,2890],{"emptyLinePlaceholder":562},[28,45449,45450],{"class":30,"line":10289},[28,45451,34795],{"class":73},[28,45453,45454,45456,45458,45460,45462],{"class":30,"line":10298},[28,45455,34800],{"class":34},[28,45457,83],{"class":42},[28,45459,34805],{"class":34},[28,45461,43],{"class":42},[28,45463,34810],{"class":34},[28,45465,45466],{"class":30,"line":10303},[28,45467,34815],{"class":73},[28,45469,45470,45472,45474,45476],{"class":30,"line":10309},[28,45471,32929],{"class":38},[28,45473,367],{"class":34},[28,45475,34824],{"class":735},[28,45477,34827],{"class":34},[28,45479,45480],{"class":30,"line":10330},[28,45481,2890],{"emptyLinePlaceholder":562},[28,45483,45484],{"class":30,"line":10336},[28,45485,34836],{"class":73},[28,45487,45488,45490,45492,45494,45496],{"class":30,"line":10350},[28,45489,2021],{"class":42},[28,45491,31701],{"class":38},[28,45493,3439],{"class":42},[28,45495,31706],{"class":735},[28,45497,4227],{"class":34},[28,45499,45500],{"class":30,"line":10356},[28,45501,34853],{"class":73},[28,45503,45504,45506,45508],{"class":30,"line":10383},[28,45505,31770],{"class":34},[28,45507,83],{"class":42},[28,45509,45028],{"class":34},[28,45511,45512],{"class":30,"line":10392},[28,45513,34866],{"class":73},[28,45515,45516],{"class":30,"line":10398},[28,45517,34871],{"class":73},[28,45519,45520,45522,45524],{"class":30,"line":10406},[28,45521,34876],{"class":34},[28,45523,34879],{"class":735},[28,45525,30980],{"class":34},[28,45527,45528],{"class":30,"line":10411},[28,45529,34886],{"class":73},[28,45531,45532,45534,45536],{"class":30,"line":17090},[28,45533,34499],{"class":34},[28,45535,83],{"class":42},[28,45537,34895],{"class":34},[28,45539,45540],{"class":30,"line":17096},[28,45541,34900],{"class":73},[28,45543,45544],{"class":30,"line":17119},[28,45545,34905],{"class":34},[28,45547,45548],{"class":30,"line":17125},[28,45549,2890],{"emptyLinePlaceholder":562},[28,45551,45552],{"class":30,"line":17148},[28,45553,34914],{"class":73},[28,45555,45556],{"class":30,"line":17162},[28,45557,34919],{"class":73},[28,45559,45560,45562,45564,45566,45568,45570,45572],{"class":30,"line":17182},[28,45561,31718],{"class":34},[28,45563,83],{"class":42},[28,45565,31725],{"class":735},[28,45567,2194],{"class":42},[28,45569,31730],{"class":34},[28,45571,2191],{"class":42},[28,45573,34596],{"class":735},[28,45575,45576,45578,45580],{"class":30,"line":17188},[28,45577,31770],{"class":34},[28,45579,83],{"class":42},[28,45581,32768],{"class":34},[28,45583,45584],{"class":30,"line":17199},[28,45585,34948],{"class":73},[28,45587,45588],{"class":30,"line":17222},[28,45589,34953],{"class":73},[28,45591,45592,45594,45596,45598,45600,45602,45604,45606,45608,45610,45612,45614,45616,45618,45620,45622,45624,45626,45628,45630,45632,45634,45636],{"class":30,"line":17244},[28,45593,34958],{"class":34},[28,45595,83],{"class":42},[28,45597,35],{"class":34},[28,45599,34965],{"class":735},[28,45601,90],{"class":34},[28,45603,34970],{"class":735},[28,45605,90],{"class":34},[28,45607,34975],{"class":735},[28,45609,90],{"class":34},[28,45611,34980],{"class":735},[28,45613,90],{"class":34},[28,45615,34985],{"class":735},[28,45617,90],{"class":34},[28,45619,34990],{"class":735},[28,45621,90],{"class":34},[28,45623,34995],{"class":735},[28,45625,90],{"class":34},[28,45627,35000],{"class":735},[28,45629,90],{"class":34},[28,45631,35005],{"class":735},[28,45633,90],{"class":34},[28,45635,35010],{"class":735},[28,45637,111],{"class":34},[28,45639,45640,45642],{"class":30,"line":17249},[28,45641,34655],{"class":42},[28,45643,33362],{"class":34},[28,45645,45646],{"class":30,"line":17255},[28,45647,35023],{"class":73},[28,45649,45650,45652,45654,45656],{"class":30,"line":17269},[28,45651,3891],{"class":42},[28,45653,35030],{"class":34},[28,45655,55],{"class":42},[28,45657,34674],{"class":34},[28,45659,45660,45662,45664],{"class":30,"line":17282},[28,45661,33088],{"class":34},[28,45663,83],{"class":42},[28,45665,33093],{"class":34},[28,45667,45668,45670,45672],{"class":30,"line":17287},[28,45669,33103],{"class":34},[28,45671,83],{"class":42},[28,45673,33108],{"class":34},[28,45675,45676],{"class":30,"line":17301},[28,45677,2890],{"emptyLinePlaceholder":562},[28,45679,45680],{"class":30,"line":17306},[28,45681,35059],{"class":73},[28,45683,45684],{"class":30,"line":17312},[28,45685,33353],{"class":34},[28,45687,45688],{"class":30,"line":17317},[28,45689,35068],{"class":73},[28,45691,45692,45694,45696],{"class":30,"line":17331},[28,45693,33138],{"class":34},[28,45695,83],{"class":42},[28,45697,33143],{"class":34},[28,45699,45700],{"class":30,"line":17336},[28,45701,35081],{"class":73},[28,45703,45704,45706,45708,45710,45712,45714,45716],{"class":30,"line":17341},[28,45705,33155],{"class":34},[28,45707,83],{"class":42},[28,45709,33160],{"class":34},[28,45711,33163],{"class":5704},[28,45713,83],{"class":42},[28,45715,39],{"class":38},[28,45717,228],{"class":34},[28,45719,45720],{"class":30,"line":17355},[28,45721,35102],{"class":73},[28,45723,45724,45726,45728],{"class":30,"line":17367},[28,45725,35107],{"class":34},[28,45727,83],{"class":42},[28,45729,35112],{"class":34},[28,45731,45732,45734,45736],{"class":30,"line":17372},[28,45733,35117],{"class":34},[28,45735,83],{"class":42},[28,45737,35122],{"class":34},[28,45739,45740,45742,45744,45746,45748,45750,45752,45754],{"class":30,"line":17385},[28,45741,35127],{"class":38},[28,45743,367],{"class":34},[28,45745,35132],{"class":735},[28,45747,35135],{"class":34},[28,45749,35138],{"class":735},[28,45751,90],{"class":34},[28,45753,35143],{"class":735},[28,45755,35146],{"class":34},[605,45757,45759],{"id":45758},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45761,45762],{},"猫狗分类任务",[14,45764,45765],{},"划分数据集和验证集",[18,45767,45769],{"className":20,"code":45768,"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,45770,45771,45776,45783,45788,45799,45806,45810,45820,45834,45843,45847,45852,45862,45882,45886,45891,45901,45912,45925,45929,45934,45943,45953,45964,45968,45973,45983,45987,45992,45997,46002,46007,46012,46016,46026,46053,46066,46078,46105,46110,46115,46129,46134,46146,46161,46176,46184,46188,46193,46199,46211,46224,46229,46234,46239,46289,46295,46299],{"__ignoreMap":23},[28,45772,45773],{"class":30,"line":31},[28,45774,45775],{"class":73},"# 创建脚本，用于划分数据集和验证集\n",[28,45777,45778,45780],{"class":30,"line":77},[28,45779,536],{"class":42},[28,45781,45782],{"class":34}," os\n",[28,45784,45785],{"class":30,"line":114},[28,45786,45787],{"class":73},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[28,45789,45790,45792,45795,45797],{"class":30,"line":128},[28,45791,530],{"class":42},[28,45793,45794],{"class":34}," shutil ",[28,45796,536],{"class":42},[28,45798,32301],{"class":34},[28,45800,45801,45803],{"class":30,"line":393},[28,45802,536],{"class":42},[28,45804,45805],{"class":34}," random\n",[28,45807,45808],{"class":30,"line":409},[28,45809,2890],{"emptyLinePlaceholder":562},[28,45811,45812,45814,45817],{"class":30,"line":1711},[28,45813,32426],{"class":42},[28,45815,45816],{"class":2453}," mkfile",[28,45818,45819],{"class":34},"(file):\n",[28,45821,45822,45824,45826,45829,45832],{"class":30,"line":1802},[28,45823,3590],{"class":42},[28,45825,39407],{"class":42},[28,45827,45828],{"class":34}," os.path.exists(",[28,45830,45831],{"class":5704},"file",[28,45833,372],{"class":34},[28,45835,45836,45839,45841],{"class":30,"line":1808},[28,45837,45838],{"class":34},"        os.makedirs(",[28,45840,45831],{"class":5704},[28,45842,228],{"class":34},[28,45844,45845],{"class":30,"line":1820},[28,45846,2890],{"emptyLinePlaceholder":562},[28,45848,45849],{"class":30,"line":2102},[28,45850,45851],{"class":73},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[28,45853,45854,45857,45859],{"class":30,"line":2107},[28,45855,45856],{"class":34},"file_path",[28,45858,83],{"class":42},[28,45860,45861],{"class":735},"'data_cat_dog'\n",[28,45863,45864,45867,45869,45872,45874,45877,45879],{"class":30,"line":2113},[28,45865,45866],{"class":34},"flower_class",[28,45868,83],{"class":42},[28,45870,45871],{"class":34},"[cla ",[28,45873,49],{"class":42},[28,45875,45876],{"class":34}," cla ",[28,45878,55],{"class":42},[28,45880,45881],{"class":34}," os.listdir(file_path)]\n",[28,45883,45884],{"class":30,"line":2118},[28,45885,2890],{"emptyLinePlaceholder":562},[28,45887,45888],{"class":30,"line":2132},[28,45889,45890],{"class":73},"# 创建训练集train文件夹\n",[28,45892,45893,45896,45899],{"class":30,"line":2137},[28,45894,45895],{"class":34},"mkfile(",[28,45897,45898],{"class":735},"'data\u002Ftrain'",[28,45900,228],{"class":34},[28,45902,45903,45905,45907,45909],{"class":30,"line":2143},[28,45904,49],{"class":42},[28,45906,45876],{"class":34},[28,45908,55],{"class":42},[28,45910,45911],{"class":34}," flower_class:\n",[28,45913,45914,45917,45920,45922],{"class":30,"line":2164},[28,45915,45916],{"class":34},"    mkfile(",[28,45918,45919],{"class":735},"'data\u002Ftrain\u002F'",[28,45921,1104],{"class":42},[28,45923,45924],{"class":34},"cla)\n",[28,45926,45927],{"class":30,"line":2169},[28,45928,2890],{"emptyLinePlaceholder":562},[28,45930,45931],{"class":30,"line":2183},[28,45932,45933],{"class":73},"# 创建验证集val文件夹\n",[28,45935,45936,45938,45941],{"class":30,"line":2188},[28,45937,45895],{"class":34},[28,45939,45940],{"class":735},"'data\u002Ftest'",[28,45942,228],{"class":34},[28,45944,45945,45947,45949,45951],{"class":30,"line":2217},[28,45946,49],{"class":42},[28,45948,45876],{"class":34},[28,45950,55],{"class":42},[28,45952,45911],{"class":34},[28,45954,45955,45957,45960,45962],{"class":30,"line":2222},[28,45956,45916],{"class":34},[28,45958,45959],{"class":735},"'data\u002Ftest\u002F'",[28,45961,1104],{"class":42},[28,45963,45924],{"class":34},[28,45965,45966],{"class":30,"line":2239},[28,45967,2890],{"emptyLinePlaceholder":562},[28,45969,45970],{"class":30,"line":2244},[28,45971,45972],{"class":73},"# 划分比例，训练集：测试集=9：1\n",[28,45974,45975,45978,45980],{"class":30,"line":2249},[28,45976,45977],{"class":34},"split_rate",[28,45979,83],{"class":42},[28,45981,45982],{"class":38},"0.1\n",[28,45984,45985],{"class":30,"line":2254},[28,45986,2890],{"emptyLinePlaceholder":562},[28,45988,45989],{"class":30,"line":2268},[28,45990,45991],{"class":73},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[28,45993,45994],{"class":30,"line":2273},[28,45995,45996],{"class":73},"# cla_path：当前类别的原始图片路径\n",[28,45998,45999],{"class":30,"line":3067},[28,46000,46001],{"class":73},"# images：当前类别下所有图片的文件名列表\n",[28,46003,46004],{"class":30,"line":3081},[28,46005,46006],{"class":73},"# num：该类别图片总数\n",[28,46008,46009],{"class":30,"line":3089},[28,46010,46011],{"class":73},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[28,46013,46014],{"class":30,"line":3094},[28,46015,2890],{"emptyLinePlaceholder":562},[28,46017,46018,46020,46022,46024],{"class":30,"line":3100},[28,46019,49],{"class":42},[28,46021,45876],{"class":34},[28,46023,55],{"class":42},[28,46025,45911],{"class":34},[28,46027,46028,46031,46033,46036,46038,46041,46044,46046,46048,46050],{"class":30,"line":3106},[28,46029,46030],{"class":34},"    cla_path ",[28,46032,83],{"class":42},[28,46034,46035],{"class":34}," file_path ",[28,46037,1104],{"class":42},[28,46039,46040],{"class":735}," '\u002F'",[28,46042,46043],{"class":42}," +",[28,46045,45876],{"class":34},[28,46047,1104],{"class":42},[28,46049,46040],{"class":735},[28,46051,46052],{"class":73},"  # 某一类别的子目录\n",[28,46054,46055,46058,46060,46063],{"class":30,"line":3111},[28,46056,46057],{"class":34},"    images ",[28,46059,83],{"class":42},[28,46061,46062],{"class":34}," os.listdir(cla_path)  ",[28,46064,46065],{"class":73},"# iamges 列表存储了该目录下所有图像的名称\n",[28,46067,46068,46071,46073,46075],{"class":30,"line":8436},[28,46069,46070],{"class":34},"    num ",[28,46072,83],{"class":42},[28,46074,7819],{"class":38},[28,46076,46077],{"class":34},"(images)\n",[28,46079,46080,46083,46085,46088,46090,46092,46094,46097,46099,46102],{"class":30,"line":8460},[28,46081,46082],{"class":34},"    eval_index ",[28,46084,83],{"class":42},[28,46086,46087],{"class":34}," random.sample(images, ",[28,46089,1116],{"class":5704},[28,46091,83],{"class":42},[28,46093,640],{"class":38},[28,46095,46096],{"class":34},"(num ",[28,46098,256],{"class":42},[28,46100,46101],{"class":34}," split_rate))  ",[28,46103,46104],{"class":73},"# 从images列表中随机抽取 k 个图像名称\n",[28,46106,46107],{"class":30,"line":8465},[28,46108,46109],{"class":73},"    # 遍历该类别下的所有图片\n",[28,46111,46112],{"class":30,"line":8471},[28,46113,46114],{"class":73},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[28,46116,46117,46119,46122,46124,46126],{"class":30,"line":8498},[28,46118,377],{"class":42},[28,46120,46121],{"class":34}," index, image ",[28,46123,55],{"class":42},[28,46125,32085],{"class":38},[28,46127,46128],{"class":34},"(images):\n",[28,46130,46131],{"class":30,"line":8503},[28,46132,46133],{"class":73},"        # eval_index 中保存验证集val的图像名称\n",[28,46135,46136,46138,46141,46143],{"class":30,"line":8509},[28,46137,2987],{"class":42},[28,46139,46140],{"class":34}," image ",[28,46142,55],{"class":42},[28,46144,46145],{"class":34}," eval_index:\n",[28,46147,46148,46151,46153,46156,46158],{"class":30,"line":8521},[28,46149,46150],{"class":34},"            image_path ",[28,46152,83],{"class":42},[28,46154,46155],{"class":34}," cla_path ",[28,46157,1104],{"class":42},[28,46159,46160],{"class":34}," image\n",[28,46162,46163,46166,46168,46171,46173],{"class":30,"line":8533},[28,46164,46165],{"class":34},"            new_path ",[28,46167,83],{"class":42},[28,46169,46170],{"class":735}," 'data\u002Ftest\u002F'",[28,46172,46043],{"class":42},[28,46174,46175],{"class":34}," cla\n",[28,46177,46178,46181],{"class":30,"line":8545},[28,46179,46180],{"class":34},"            copy(image_path, new_path)  ",[28,46182,46183],{"class":73},"# 将选中的图像复制到新路径\n",[28,46185,46186],{"class":30,"line":10202},[28,46187,2890],{"emptyLinePlaceholder":562},[28,46189,46190],{"class":30,"line":10227},[28,46191,46192],{"class":73},"        # 其余的图像保存在训练集train中\n",[28,46194,46195,46197],{"class":30,"line":10250},[28,46196,3024],{"class":42},[28,46198,4227],{"class":34},[28,46200,46201,46203,46205,46207,46209],{"class":30,"line":10274},[28,46202,46150],{"class":34},[28,46204,83],{"class":42},[28,46206,46155],{"class":34},[28,46208,1104],{"class":42},[28,46210,46160],{"class":34},[28,46212,46213,46215,46217,46220,46222],{"class":30,"line":10279},[28,46214,46165],{"class":34},[28,46216,83],{"class":42},[28,46218,46219],{"class":735}," 'data\u002Ftrain\u002F'",[28,46221,46043],{"class":42},[28,46223,46175],{"class":34},[28,46225,46226],{"class":30,"line":10284},[28,46227,46228],{"class":34},"            copy(image_path, new_path)\n",[28,46230,46231],{"class":30,"line":10289},[28,46232,46233],{"class":73},"            # 打印进度条信息\n",[28,46235,46236],{"class":30,"line":10298},[28,46237,46238],{"class":73},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[28,46240,46241,46243,46245,46247,46250,46252,46254,46257,46259,46261,46263,46266,46269,46271,46273,46276,46279,46281,46283,46286],{"class":30,"line":10303},[28,46242,32929],{"class":38},[28,46244,367],{"class":34},[28,46246,880],{"class":735},[28,46248,46249],{"class":38},"\\r",[28,46251,35],{"class":735},[28,46253,32937],{"class":38},[28,46255,46256],{"class":735},"] processing [",[28,46258,32937],{"class":38},[28,46260,43],{"class":735},[28,46262,32937],{"class":38},[28,46264,46265],{"class":735},"]\"",[28,46267,46268],{"class":34},".format(cla, index ",[28,46270,1104],{"class":42},[28,46272,25605],{"class":38},[28,46274,46275],{"class":34},", num), ",[28,46277,46278],{"class":5704},"end",[28,46280,83],{"class":42},[28,46282,8140],{"class":735},[28,46284,46285],{"class":34},")  ",[28,46287,46288],{"class":73},"# processing bar\n",[28,46290,46291,46293],{"class":30,"line":10309},[28,46292,31780],{"class":38},[28,46294,2466],{"class":34},[28,46296,46297],{"class":30,"line":10330},[28,46298,2890],{"emptyLinePlaceholder":562},[28,46300,46301,46303,46305,46308],{"class":30,"line":10336},[28,46302,30898],{"class":38},[28,46304,367],{"class":34},[28,46306,46307],{"class":735},"\"processing done!\"",[28,46309,228],{"class":34},[14,46311,46312],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22484,46314,46316],{"id":46315},"_242模型代码","2.4.2.模型代码",[14,46318,46319],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[18,46321,46323],{"className":20,"code":46322,"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,46324,46325,46331,46341,46351,46355,46371,46379,46393,46403,46407,46437,46441,46475,46521,46525,46559,46605,46609,46613,46647,46677,46681,46689,46703,46725,46747,46765,46769,46783,46787,46791,46807,46811,46819,46833,46843,46887,46891,46919,46923,46933,46961,46965,47001,47005,47033,47037,47047,47079,47111,47139,47143,47153,47185,47217,47249,47281,47313,47341,47345,47355,47387,47419,47431,47435,47447,47451,47455,47467,47475,47495,47499,47503,47507,47511,47515,47519,47533,47541,47549,47561,47575,47583,47587,47595,47605,47615,47625,47635,47645,47651,47655,47659,47671,47691,47699],{"__ignoreMap":23},[28,46326,46327,46329],{"class":30,"line":31},[28,46328,536],{"class":42},[28,46330,30878],{"class":34},[28,46332,46333,46335,46337,46339],{"class":30,"line":77},[28,46334,530],{"class":42},[28,46336,31222],{"class":34},[28,46338,536],{"class":42},[28,46340,31227],{"class":34},[28,46342,46343,46345,46347,46349],{"class":30,"line":114},[28,46344,530],{"class":42},[28,46346,31239],{"class":34},[28,46348,536],{"class":42},[28,46350,31244],{"class":34},[28,46352,46353],{"class":30,"line":128},[28,46354,2890],{"emptyLinePlaceholder":562},[28,46356,46357,46359,46361,46363,46365,46367,46369],{"class":30,"line":393},[28,46358,15180],{"class":42},[28,46360,41970],{"class":2453},[28,46362,367],{"class":34},[28,46364,31260],{"class":2453},[28,46366,1179],{"class":34},[28,46368,31265],{"class":2453},[28,46370,372],{"class":34},[28,46372,46373,46375,46377],{"class":30,"line":409},[28,46374,31282],{"class":42},[28,46376,31285],{"class":38},[28,46378,41989],{"class":34},[28,46380,46381,46383,46385,46387,46389,46391],{"class":30,"line":1711},[28,46382,31298],{"class":38},[28,46384,41996],{"class":34},[28,46386,31304],{"class":38},[28,46388,31307],{"class":34},[28,46390,31310],{"class":38},[28,46392,2466],{"class":34},[28,46394,46395,46397,46399,46401],{"class":30,"line":1802},[28,46396,31326],{"class":38},[28,46398,35248],{"class":34},[28,46400,83],{"class":42},[28,46402,35253],{"class":34},[28,46404,46405],{"class":30,"line":1808},[28,46406,42019],{"class":73},[28,46408,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435],{"class":30,"line":1820},[28,46410,31326],{"class":38},[28,46412,42026],{"class":34},[28,46414,83],{"class":42},[28,46416,31334],{"class":34},[28,46418,31337],{"class":5704},[28,46420,83],{"class":42},[28,46422,42037],{"class":34},[28,46424,31346],{"class":5704},[28,46426,83],{"class":42},[28,46428,42044],{"class":34},[28,46430,31355],{"class":5704},[28,46432,83],{"class":42},[28,46434,39],{"class":38},[28,46436,228],{"class":34},[28,46438,46439],{"class":30,"line":2102},[28,46440,42057],{"class":73},[28,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473],{"class":30,"line":2107},[28,46444,31326],{"class":38},[28,46446,42064],{"class":34},[28,46448,83],{"class":42},[28,46450,31334],{"class":34},[28,46452,31337],{"class":5704},[28,46454,83],{"class":42},[28,46456,42037],{"class":34},[28,46458,31346],{"class":5704},[28,46460,83],{"class":42},[28,46462,42081],{"class":34},[28,46464,822],{"class":38},[28,46466,42086],{"class":34},[28,46468,31355],{"class":5704},[28,46470,83],{"class":42},[28,46472,39],{"class":38},[28,46474,228],{"class":34},[28,46476,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519],{"class":30,"line":2113},[28,46478,31326],{"class":38},[28,46480,42101],{"class":34},[28,46482,83],{"class":42},[28,46484,31334],{"class":34},[28,46486,31337],{"class":5704},[28,46488,83],{"class":42},[28,46490,42081],{"class":34},[28,46492,822],{"class":38},[28,46494,42086],{"class":34},[28,46496,31346],{"class":5704},[28,46498,83],{"class":42},[28,46500,42081],{"class":34},[28,46502,39],{"class":38},[28,46504,42086],{"class":34},[28,46506,31355],{"class":5704},[28,46508,83],{"class":42},[28,46510,98],{"class":38},[28,46512,90],{"class":34},[28,46514,31364],{"class":5704},[28,46516,83],{"class":42},[28,46518,39],{"class":38},[28,46520,228],{"class":34},[28,46522,46523],{"class":30,"line":2118},[28,46524,42146],{"class":73},[28,46526,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557],{"class":30,"line":2132},[28,46528,31326],{"class":38},[28,46530,42153],{"class":34},[28,46532,83],{"class":42},[28,46534,31334],{"class":34},[28,46536,31337],{"class":5704},[28,46538,83],{"class":42},[28,46540,42037],{"class":34},[28,46542,31346],{"class":5704},[28,46544,83],{"class":42},[28,46546,42170],{"class":34},[28,46548,822],{"class":38},[28,46550,42086],{"class":34},[28,46552,31355],{"class":5704},[28,46554,83],{"class":42},[28,46556,39],{"class":38},[28,46558,228],{"class":34},[28,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603],{"class":30,"line":2137},[28,46562,31326],{"class":38},[28,46564,42189],{"class":34},[28,46566,83],{"class":42},[28,46568,31334],{"class":34},[28,46570,31337],{"class":5704},[28,46572,83],{"class":42},[28,46574,42170],{"class":34},[28,46576,822],{"class":38},[28,46578,42086],{"class":34},[28,46580,31346],{"class":5704},[28,46582,83],{"class":42},[28,46584,42170],{"class":34},[28,46586,39],{"class":38},[28,46588,42086],{"class":34},[28,46590,31355],{"class":5704},[28,46592,83],{"class":42},[28,46594,108],{"class":38},[28,46596,90],{"class":34},[28,46598,31364],{"class":5704},[28,46600,83],{"class":42},[28,46602,93],{"class":38},[28,46604,228],{"class":34},[28,46606,46607],{"class":30,"line":2143},[28,46608,42234],{"class":73},[28,46610,46611],{"class":30,"line":2164},[28,46612,42239],{"class":73},[28,46614,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645],{"class":30,"line":2169},[28,46616,31326],{"class":38},[28,46618,42246],{"class":34},[28,46620,83],{"class":42},[28,46622,35306],{"class":34},[28,46624,31355],{"class":5704},[28,46626,83],{"class":42},[28,46628,98],{"class":38},[28,46630,90],{"class":34},[28,46632,31410],{"class":5704},[28,46634,83],{"class":42},[28,46636,39],{"class":38},[28,46638,90],{"class":34},[28,46640,31364],{"class":5704},[28,46642,83],{"class":42},[28,46644,39],{"class":38},[28,46646,228],{"class":34},[28,46648,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675],{"class":30,"line":2183},[28,46650,31326],{"class":38},[28,46652,42281],{"class":34},[28,46654,83],{"class":42},[28,46656,31334],{"class":34},[28,46658,31337],{"class":5704},[28,46660,83],{"class":42},[28,46662,42037],{"class":34},[28,46664,31346],{"class":5704},[28,46666,83],{"class":42},[28,46668,42298],{"class":34},[28,46670,31355],{"class":5704},[28,46672,83],{"class":42},[28,46674,39],{"class":38},[28,46676,228],{"class":34},[28,46678,46679],{"class":30,"line":2188},[28,46680,2890],{"emptyLinePlaceholder":562},[28,46682,46683,46685,46687],{"class":30,"line":2217},[28,46684,31282],{"class":42},[28,46686,31574],{"class":2453},[28,46688,31577],{"class":34},[28,46690,46691,46693,46695,46697,46699,46701],{"class":30,"line":2222},[28,46692,42323],{"class":34},[28,46694,83],{"class":42},[28,46696,31304],{"class":38},[28,46698,35661],{"class":34},[28,46700,31304],{"class":38},[28,46702,42334],{"class":34},[28,46704,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723],{"class":30,"line":2239},[28,46706,7573],{"class":34},[28,46708,83],{"class":42},[28,46710,31304],{"class":38},[28,46712,35661],{"class":34},[28,46714,31304],{"class":38},[28,46716,42349],{"class":34},[28,46718,31304],{"class":38},[28,46720,35661],{"class":34},[28,46722,31304],{"class":38},[28,46724,42358],{"class":34},[28,46726,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745],{"class":30,"line":2244},[28,46728,42363],{"class":34},[28,46730,83],{"class":42},[28,46732,31304],{"class":38},[28,46734,35661],{"class":34},[28,46736,31304],{"class":38},[28,46738,42374],{"class":34},[28,46740,31304],{"class":38},[28,46742,35661],{"class":34},[28,46744,31304],{"class":38},[28,46746,42383],{"class":34},[28,46748,46749,46751,46753,46755,46757,46759,46761,46763],{"class":30,"line":2249},[28,46750,42388],{"class":34},[28,46752,83],{"class":42},[28,46754,31304],{"class":38},[28,46756,35661],{"class":34},[28,46758,31304],{"class":38},[28,46760,42399],{"class":34},[28,46762,31304],{"class":38},[28,46764,42404],{"class":34},[28,46766,46767],{"class":30,"line":2254},[28,46768,42409],{"class":73},[28,46770,46771,46773,46775,46777,46779,46781],{"class":30,"line":2268},[28,46772,15238],{"class":42},[28,46774,42416],{"class":34},[28,46776,33163],{"class":5704},[28,46778,83],{"class":42},[28,46780,39],{"class":38},[28,46782,228],{"class":34},[28,46784,46785],{"class":30,"line":2273},[28,46786,2890],{"emptyLinePlaceholder":562},[28,46788,46789],{"class":30,"line":3067},[28,46790,42437],{"class":73},[28,46792,46793,46795,46797,46799,46801,46803,46805],{"class":30,"line":3081},[28,46794,15180],{"class":42},[28,46796,42444],{"class":2453},[28,46798,367],{"class":34},[28,46800,31260],{"class":2453},[28,46802,1179],{"class":34},[28,46804,31265],{"class":2453},[28,46806,372],{"class":34},[28,46808,46809],{"class":30,"line":3089},[28,46810,42459],{"class":73},[28,46812,46813,46815,46817],{"class":30,"line":3094},[28,46814,31282],{"class":42},[28,46816,31285],{"class":38},[28,46818,42468],{"class":34},[28,46820,46821,46823,46825,46827,46829,46831],{"class":30,"line":3100},[28,46822,31298],{"class":38},[28,46824,42475],{"class":34},[28,46826,31304],{"class":38},[28,46828,31307],{"class":34},[28,46830,31310],{"class":38},[28,46832,2466],{"class":34},[28,46834,46835,46837,46839,46841],{"class":30,"line":3106},[28,46836,31326],{"class":38},[28,46838,42490],{"class":34},[28,46840,83],{"class":42},[28,46842,38486],{"class":34},[28,46844,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885],{"class":30,"line":3111},[28,46846,38491],{"class":34},[28,46848,31337],{"class":5704},[28,46850,83],{"class":42},[28,46852,98],{"class":38},[28,46854,90],{"class":34},[28,46856,31346],{"class":5704},[28,46858,83],{"class":42},[28,46860,834],{"class":38},[28,46862,90],{"class":34},[28,46864,31355],{"class":5704},[28,46866,83],{"class":42},[28,46868,995],{"class":38},[28,46870,90],{"class":34},[28,46872,31410],{"class":5704},[28,46874,83],{"class":42},[28,46876,93],{"class":38},[28,46878,90],{"class":34},[28,46880,31364],{"class":5704},[28,46882,83],{"class":42},[28,46884,98],{"class":38},[28,46886,38524],{"class":34},[28,46888,46889],{"class":30,"line":8436},[28,46890,38529],{"class":34},[28,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917],{"class":30,"line":8460},[28,46894,38574],{"class":34},[28,46896,31355],{"class":5704},[28,46898,83],{"class":42},[28,46900,98],{"class":38},[28,46902,90],{"class":34},[28,46904,31410],{"class":5704},[28,46906,83],{"class":42},[28,46908,93],{"class":38},[28,46910,90],{"class":34},[28,46912,31364],{"class":5704},[28,46914,83],{"class":42},[28,46916,39],{"class":38},[28,46918,228],{"class":34},[28,46920,46921],{"class":30,"line":8465},[28,46922,38603],{"class":34},[28,46924,46925,46927,46929,46931],{"class":30,"line":8471},[28,46926,31326],{"class":38},[28,46928,42581],{"class":34},[28,46930,83],{"class":42},[28,46932,38486],{"class":34},[28,46934,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959],{"class":30,"line":8498},[28,46936,38491],{"class":34},[28,46938,31337],{"class":5704},[28,46940,83],{"class":42},[28,46942,834],{"class":38},[28,46944,90],{"class":34},[28,46946,31346],{"class":5704},[28,46948,83],{"class":42},[28,46950,834],{"class":38},[28,46952,90],{"class":34},[28,46954,31355],{"class":5704},[28,46956,83],{"class":42},[28,46958,39],{"class":38},[28,46960,38524],{"class":34},[28,46962,46963],{"class":30,"line":8503},[28,46964,38529],{"class":34},[28,46966,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999],{"class":30,"line":8509},[28,46968,38491],{"class":34},[28,46970,31337],{"class":5704},[28,46972,83],{"class":42},[28,46974,834],{"class":38},[28,46976,90],{"class":34},[28,46978,31346],{"class":5704},[28,46980,83],{"class":42},[28,46982,42636],{"class":38},[28,46984,90],{"class":34},[28,46986,31355],{"class":5704},[28,46988,83],{"class":42},[28,46990,98],{"class":38},[28,46992,90],{"class":34},[28,46994,31364],{"class":5704},[28,46996,83],{"class":42},[28,46998,39],{"class":38},[28,47000,38524],{"class":34},[28,47002,47003],{"class":30,"line":8521},[28,47004,38529],{"class":34},[28,47006,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031],{"class":30,"line":8533},[28,47008,38574],{"class":34},[28,47010,31355],{"class":5704},[28,47012,83],{"class":42},[28,47014,98],{"class":38},[28,47016,90],{"class":34},[28,47018,31410],{"class":5704},[28,47020,83],{"class":42},[28,47022,93],{"class":38},[28,47024,90],{"class":34},[28,47026,31364],{"class":5704},[28,47028,83],{"class":42},[28,47030,39],{"class":38},[28,47032,228],{"class":34},[28,47034,47035],{"class":30,"line":8545},[28,47036,38603],{"class":34},[28,47038,47039,47041,47043,47045],{"class":30,"line":10202},[28,47040,31326],{"class":38},[28,47042,42697],{"class":34},[28,47044,83],{"class":42},[28,47046,38486],{"class":34},[28,47048,47049,47051,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077],{"class":30,"line":10227},[28,47050,42706],{"class":34},[28,47052,42636],{"class":38},[28,47054,90],{"class":34},[28,47056,834],{"class":38},[28,47058,42715],{"class":34},[28,47060,840],{"class":38},[28,47062,90],{"class":34},[28,47064,32549],{"class":38},[28,47066,42724],{"class":34},[28,47068,1221],{"class":38},[28,47070,90],{"class":34},[28,47072,828],{"class":38},[28,47074,42733],{"class":34},[28,47076,828],{"class":38},[28,47078,38524],{"class":34},[28,47080,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109],{"class":30,"line":10250},[28,47082,42706],{"class":34},[28,47084,35347],{"class":38},[28,47086,90],{"class":34},[28,47088,32549],{"class":38},[28,47090,42715],{"class":34},[28,47092,32549],{"class":38},[28,47094,90],{"class":34},[28,47096,42636],{"class":38},[28,47098,42724],{"class":34},[28,47100,828],{"class":38},[28,47102,90],{"class":34},[28,47104,840],{"class":38},[28,47106,42733],{"class":34},[28,47108,834],{"class":38},[28,47110,38524],{"class":34},[28,47112,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137],{"class":30,"line":10274},[28,47114,38574],{"class":34},[28,47116,31355],{"class":5704},[28,47118,83],{"class":42},[28,47120,98],{"class":38},[28,47122,90],{"class":34},[28,47124,31410],{"class":5704},[28,47126,83],{"class":42},[28,47128,93],{"class":38},[28,47130,90],{"class":34},[28,47132,31364],{"class":5704},[28,47134,83],{"class":42},[28,47136,39],{"class":38},[28,47138,228],{"class":34},[28,47140,47141],{"class":30,"line":10279},[28,47142,38603],{"class":34},[28,47144,47145,47147,47149,47151],{"class":30,"line":10284},[28,47146,31326],{"class":38},[28,47148,42808],{"class":34},[28,47150,83],{"class":42},[28,47152,38486],{"class":34},[28,47154,47155,47157,47159,47161,47163,47165,47167,47169,47171,47173,47175,47177,47179,47181,47183],{"class":30,"line":10289},[28,47156,42706],{"class":34},[28,47158,42819],{"class":38},[28,47160,90],{"class":34},[28,47162,42636],{"class":38},[28,47164,42715],{"class":34},[28,47166,840],{"class":38},[28,47168,90],{"class":34},[28,47170,42832],{"class":38},[28,47172,42724],{"class":34},[28,47174,1221],{"class":38},[28,47176,90],{"class":34},[28,47178,1227],{"class":38},[28,47180,42733],{"class":34},[28,47182,834],{"class":38},[28,47184,38524],{"class":34},[28,47186,47187,47189,47191,47193,47195,47197,47199,47201,47203,47205,47207,47209,47211,47213,47215],{"class":30,"line":10298},[28,47188,42706],{"class":34},[28,47190,38934],{"class":38},[28,47192,90],{"class":34},[28,47194,21534],{"class":38},[28,47196,42715],{"class":34},[28,47198,1238],{"class":38},[28,47200,90],{"class":34},[28,47202,31980],{"class":38},[28,47204,42724],{"class":34},[28,47206,1420],{"class":38},[28,47208,90],{"class":34},[28,47210,834],{"class":38},[28,47212,42733],{"class":34},[28,47214,834],{"class":38},[28,47216,38524],{"class":34},[28,47218,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247],{"class":30,"line":10303},[28,47220,42706],{"class":34},[28,47222,38934],{"class":38},[28,47224,90],{"class":34},[28,47226,32549],{"class":38},[28,47228,42715],{"class":34},[28,47230,32549],{"class":38},[28,47232,90],{"class":34},[28,47234,35347],{"class":38},[28,47236,42724],{"class":34},[28,47238,1420],{"class":38},[28,47240,90],{"class":34},[28,47242,834],{"class":38},[28,47244,42733],{"class":34},[28,47246,834],{"class":38},[28,47248,38524],{"class":34},[28,47250,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277,47279],{"class":30,"line":10309},[28,47252,42706],{"class":34},[28,47254,38934],{"class":38},[28,47256,90],{"class":34},[28,47258,1238],{"class":38},[28,47260,42715],{"class":34},[28,47262,32549],{"class":38},[28,47264,90],{"class":34},[28,47266,42929],{"class":38},[28,47268,42724],{"class":34},[28,47270,828],{"class":38},[28,47272,90],{"class":34},[28,47274,834],{"class":38},[28,47276,42733],{"class":34},[28,47278,834],{"class":38},[28,47280,38524],{"class":34},[28,47282,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307,47309,47311],{"class":30,"line":10330},[28,47284,42706],{"class":34},[28,47286,42950],{"class":38},[28,47288,90],{"class":34},[28,47290,35347],{"class":38},[28,47292,42715],{"class":34},[28,47294,21534],{"class":38},[28,47296,90],{"class":34},[28,47298,42963],{"class":38},[28,47300,42724],{"class":34},[28,47302,828],{"class":38},[28,47304,90],{"class":34},[28,47306,32549],{"class":38},[28,47308,42733],{"class":34},[28,47310,32549],{"class":38},[28,47312,38524],{"class":34},[28,47314,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339],{"class":30,"line":10336},[28,47316,38574],{"class":34},[28,47318,31355],{"class":5704},[28,47320,83],{"class":42},[28,47322,98],{"class":38},[28,47324,90],{"class":34},[28,47326,31410],{"class":5704},[28,47328,83],{"class":42},[28,47330,93],{"class":38},[28,47332,90],{"class":34},[28,47334,31364],{"class":5704},[28,47336,83],{"class":42},[28,47338,39],{"class":38},[28,47340,228],{"class":34},[28,47342,47343],{"class":30,"line":10350},[28,47344,38603],{"class":34},[28,47346,47347,47349,47351,47353],{"class":30,"line":10356},[28,47348,31326],{"class":38},[28,47350,43016],{"class":34},[28,47352,83],{"class":42},[28,47354,38486],{"class":34},[28,47356,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385],{"class":30,"line":10383},[28,47358,42706],{"class":34},[28,47360,43027],{"class":38},[28,47362,90],{"class":34},[28,47364,35347],{"class":38},[28,47366,42715],{"class":34},[28,47368,21534],{"class":38},[28,47370,90],{"class":34},[28,47372,42963],{"class":38},[28,47374,42724],{"class":34},[28,47376,828],{"class":38},[28,47378,90],{"class":34},[28,47380,32549],{"class":38},[28,47382,42733],{"class":34},[28,47384,32549],{"class":38},[28,47386,38524],{"class":34},[28,47388,47389,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417],{"class":30,"line":10392},[28,47390,42706],{"class":34},[28,47392,43027],{"class":38},[28,47394,90],{"class":34},[28,47396,35417],{"class":38},[28,47398,42715],{"class":34},[28,47400,42636],{"class":38},[28,47402,90],{"class":34},[28,47404,35417],{"class":38},[28,47406,42724],{"class":34},[28,47408,1227],{"class":38},[28,47410,90],{"class":34},[28,47412,32549],{"class":38},[28,47414,42733],{"class":34},[28,47416,32549],{"class":38},[28,47418,38524],{"class":34},[28,47420,47421,47423,47425,47427,47429],{"class":30,"line":10398},[28,47422,43090],{"class":34},[28,47424,39],{"class":38},[28,47426,90],{"class":34},[28,47428,39],{"class":38},[28,47430,43099],{"class":34},[28,47432,47433],{"class":30,"line":10406},[28,47434,39267],{"class":34},[28,47436,47437,47439,47441,47443,47445],{"class":30,"line":10411},[28,47438,39272],{"class":34},[28,47440,43110],{"class":38},[28,47442,90],{"class":34},[28,47444,93],{"class":38},[28,47446,228],{"class":34},[28,47448,47449],{"class":30,"line":17090},[28,47450,38603],{"class":34},[28,47452,47453],{"class":30,"line":17096},[28,47454,43125],{"class":73},[28,47456,47457,47459,47461,47463,47465],{"class":30,"line":17119},[28,47458,3891],{"class":42},[28,47460,39345],{"class":34},[28,47462,55],{"class":42},[28,47464,39350],{"class":38},[28,47466,39353],{"class":34},[28,47468,47469,47471,47473],{"class":30,"line":17125},[28,47470,5130],{"class":42},[28,47472,39365],{"class":38},[28,47474,39368],{"class":34},[28,47476,47477,47479,47481,47483,47485,47487,47489,47491,47493],{"class":30,"line":17148},[28,47478,39378],{"class":34},[28,47480,43152],{"class":5704},[28,47482,83],{"class":42},[28,47484,43157],{"class":735},[28,47486,90],{"class":34},[28,47488,39381],{"class":5704},[28,47490,83],{"class":42},[28,47492,39386],{"class":735},[28,47494,228],{"class":34},[28,47496,47497],{"class":30,"line":17162},[28,47498,43172],{"class":73},[28,47500,47501],{"class":30,"line":17182},[28,47502,43177],{"class":73},[28,47504,47505],{"class":30,"line":17188},[28,47506,43182],{"class":73},[28,47508,47509],{"class":30,"line":17199},[28,47510,43187],{"class":73},[28,47512,47513],{"class":30,"line":17222},[28,47514,43192],{"class":73},[28,47516,47517],{"class":30,"line":17244},[28,47518,43197],{"class":73},[28,47520,47521,47523,47525,47527,47529,47531],{"class":30,"line":17249},[28,47522,39398],{"class":42},[28,47524,39401],{"class":34},[28,47526,39404],{"class":42},[28,47528,39407],{"class":42},[28,47530,39410],{"class":38},[28,47532,4227],{"class":34},[28,47534,47535,47537,47539],{"class":30,"line":17255},[28,47536,39422],{"class":34},[28,47538,822],{"class":38},[28,47540,228],{"class":34},[28,47542,47543,47545,47547],{"class":30,"line":17269},[28,47544,43224],{"class":42},[28,47546,39365],{"class":38},[28,47548,39441],{"class":34},[28,47550,47551,47553,47555,47557,47559],{"class":30,"line":17282},[28,47552,43233],{"class":34},[28,47554,822],{"class":38},[28,47556,90],{"class":34},[28,47558,39463],{"class":38},[28,47560,228],{"class":34},[28,47562,47563,47565,47567,47569,47571,47573],{"class":30,"line":17287},[28,47564,43246],{"class":42},[28,47566,39401],{"class":34},[28,47568,39404],{"class":42},[28,47570,39407],{"class":42},[28,47572,39410],{"class":38},[28,47574,4227],{"class":34},[28,47576,47577,47579,47581],{"class":30,"line":17301},[28,47578,43261],{"class":34},[28,47580,822],{"class":38},[28,47582,228],{"class":34},[28,47584,47585],{"class":30,"line":17306},[28,47586,35642],{"class":73},[28,47588,47589,47591,47593],{"class":30,"line":17312},[28,47590,31282],{"class":42},[28,47592,31574],{"class":2453},[28,47594,31577],{"class":34},[28,47596,47597,47599,47601,47603],{"class":30,"line":17317},[28,47598,31582],{"class":34},[28,47600,83],{"class":42},[28,47602,31304],{"class":38},[28,47604,43288],{"class":34},[28,47606,47607,47609,47611,47613],{"class":30,"line":17331},[28,47608,31582],{"class":34},[28,47610,83],{"class":42},[28,47612,31304],{"class":38},[28,47614,43299],{"class":34},[28,47616,47617,47619,47621,47623],{"class":30,"line":17336},[28,47618,31582],{"class":34},[28,47620,83],{"class":42},[28,47622,31304],{"class":38},[28,47624,43310],{"class":34},[28,47626,47627,47629,47631,47633],{"class":30,"line":17341},[28,47628,31582],{"class":34},[28,47630,83],{"class":42},[28,47632,31304],{"class":38},[28,47634,43321],{"class":34},[28,47636,47637,47639,47641,47643],{"class":30,"line":17355},[28,47638,31582],{"class":34},[28,47640,83],{"class":42},[28,47642,31304],{"class":38},[28,47644,43332],{"class":34},[28,47646,47647,47649],{"class":30,"line":17367},[28,47648,15238],{"class":42},[28,47650,31690],{"class":34},[28,47652,47653],{"class":30,"line":17372},[28,47654,2890],{"emptyLinePlaceholder":562},[28,47656,47657],{"class":30,"line":17385},[28,47658,43347],{"class":73},[28,47660,47661,47663,47665,47667,47669],{"class":30,"line":17390},[28,47662,2021],{"class":42},[28,47664,31701],{"class":38},[28,47666,3439],{"class":42},[28,47668,31706],{"class":735},[28,47670,4227],{"class":34},[28,47672,47673,47675,47677,47679,47681,47683,47685,47687,47689],{"class":30,"line":17395},[28,47674,31718],{"class":34},[28,47676,83],{"class":42},[28,47678,30934],{"class":34},[28,47680,31725],{"class":735},[28,47682,2194],{"class":42},[28,47684,31730],{"class":34},[28,47686,2191],{"class":42},[28,47688,30959],{"class":735},[28,47690,228],{"class":34},[28,47692,47693,47695,47697],{"class":30,"line":17400},[28,47694,31770],{"class":34},[28,47696,83],{"class":42},[28,47698,43388],{"class":34},[28,47700,47701,47703,47705,47707,47709,47711,47713,47715],{"class":30,"line":17413},[28,47702,31780],{"class":38},[28,47704,31783],{"class":34},[28,47706,39],{"class":38},[28,47708,90],{"class":34},[28,47710,31980],{"class":38},[28,47712,90],{"class":34},[28,47714,31980],{"class":38},[28,47716,31796],{"class":34},[22484,47718,47720],{"id":47719},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47722,47723],{},"计算图片的均值与方差，用于训练中归一化处理操作",[18,47725,47727],{"className":20,"code":47726,"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,47728,47729,47734,47747,47752,47758,47763,47773,47777,47782,47792,47796,47801,47811,47828,47832,47837,47849,47861,47892,47901,47911,47921,47925,47930,47945,47949,47954,47959,47964,47974,47979,48004,48008,48013,48028,48032,48045,48049,48054,48059,48064,48069,48074,48084,48094,48117,48125,48133,48141,48145,48157,48161,48166,48170,48174,48181,48201,48225,48232,48246,48251,48256,48260,48274,48278,48290],{"__ignoreMap":23},[28,47730,47731],{"class":30,"line":31},[28,47732,47733],{"class":73},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[28,47735,47736,47738,47741,47744],{"class":30,"line":77},[28,47737,530],{"class":42},[28,47739,47740],{"class":38}," PIL",[28,47742,47743],{"class":42}," import",[28,47745,47746],{"class":34}," Image\n",[28,47748,47749],{"class":30,"line":114},[28,47750,47751],{"class":73},"# os 用来处理文件夹和文件路径\n",[28,47753,47754,47756],{"class":30,"line":128},[28,47755,536],{"class":42},[28,47757,45782],{"class":34},[28,47759,47760],{"class":30,"line":393},[28,47761,47762],{"class":73},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[28,47764,47765,47767,47769,47771],{"class":30,"line":409},[28,47766,536],{"class":42},[28,47768,31861],{"class":34},[28,47770,542],{"class":42},[28,47772,31866],{"class":34},[28,47774,47775],{"class":30,"line":1711},[28,47776,2890],{"emptyLinePlaceholder":562},[28,47778,47779],{"class":30,"line":1802},[28,47780,47781],{"class":73},"# 文件夹路径，包含所有图片文件\n",[28,47783,47784,47787,47789],{"class":30,"line":1808},[28,47785,47786],{"class":34},"folder_path ",[28,47788,83],{"class":42},[28,47790,47791],{"class":735}," 'data_cat_dog'\n",[28,47793,47794],{"class":30,"line":1820},[28,47795,2890],{"emptyLinePlaceholder":562},[28,47797,47798],{"class":30,"line":2102},[28,47799,47800],{"class":73},"# 初始化累积变量\n",[28,47802,47803,47806,47808],{"class":30,"line":2107},[28,47804,47805],{"class":34},"total_pixels ",[28,47807,83],{"class":42},[28,47809,47810],{"class":38}," 0\n",[28,47812,47813,47816,47818,47821,47823,47825],{"class":30,"line":2113},[28,47814,47815],{"class":34},"sum_normalized_pixel_values ",[28,47817,83],{"class":42},[28,47819,47820],{"class":34}," np.zeros(",[28,47822,98],{"class":38},[28,47824,46285],{"class":34},[28,47826,47827],{"class":73},"# 如果是RGB图像，需要三个通道的均值和方差\n",[28,47829,47830],{"class":30,"line":2118},[28,47831,2890],{"emptyLinePlaceholder":562},[28,47833,47834],{"class":30,"line":2132},[28,47835,47836],{"class":73},"# 遍历文件夹中的图片文件\n",[28,47838,47839,47841,47844,47846],{"class":30,"line":2137},[28,47840,49],{"class":42},[28,47842,47843],{"class":34}," root, dirs, files ",[28,47845,55],{"class":42},[28,47847,47848],{"class":34}," os.walk(folder_path):\n",[28,47850,47851,47853,47856,47858],{"class":30,"line":2143},[28,47852,377],{"class":42},[28,47854,47855],{"class":34}," filename ",[28,47857,55],{"class":42},[28,47859,47860],{"class":34}," files:\n",[28,47862,47863,47865,47868,47871,47873,47876,47878,47881,47883,47886,47889],{"class":30,"line":2164},[28,47864,2987],{"class":42},[28,47866,47867],{"class":34}," filename.endswith((",[28,47869,47870],{"class":735},"'.jpg'",[28,47872,12921],{"class":34},[28,47874,47875],{"class":735},"'.jpeg'",[28,47877,12921],{"class":34},[28,47879,47880],{"class":735},"'.png'",[28,47882,12921],{"class":34},[28,47884,47885],{"class":735},"'.bmp'",[28,47887,47888],{"class":34},")):  ",[28,47890,47891],{"class":73},"# 可根据实际情况添加其他格式\n",[28,47893,47894,47896,47898],{"class":30,"line":2169},[28,47895,46150],{"class":34},[28,47897,83],{"class":42},[28,47899,47900],{"class":34}," os.path.join(root, filename)\n",[28,47902,47903,47906,47908],{"class":30,"line":2183},[28,47904,47905],{"class":34},"            image ",[28,47907,83],{"class":42},[28,47909,47910],{"class":34}," Image.open(image_path)\n",[28,47912,47913,47916,47918],{"class":30,"line":2188},[28,47914,47915],{"class":34},"            image_array ",[28,47917,83],{"class":42},[28,47919,47920],{"class":34}," np.array(image)\n",[28,47922,47923],{"class":30,"line":2217},[28,47924,2890],{"emptyLinePlaceholder":562},[28,47926,47927],{"class":30,"line":2222},[28,47928,47929],{"class":73},"            # 归一化像素值到0-1之间\n",[28,47931,47932,47935,47937,47940,47942],{"class":30,"line":2239},[28,47933,47934],{"class":34},"            normalized_image_array ",[28,47936,83],{"class":42},[28,47938,47939],{"class":34}," image_array ",[28,47941,43],{"class":42},[28,47943,47944],{"class":38}," 255.0\n",[28,47946,47947],{"class":30,"line":2244},[28,47948,2890],{"emptyLinePlaceholder":562},[28,47950,47951],{"class":30,"line":2249},[28,47952,47953],{"class":73},"            # print(image_path)\n",[28,47955,47956],{"class":30,"line":2254},[28,47957,47958],{"class":73},"            # print(normalized_image_array.shape)\n",[28,47960,47961],{"class":30,"line":2268},[28,47962,47963],{"class":73},"            # 累积归一化后的像素值和像素数量\n",[28,47965,47966,47969,47971],{"class":30,"line":2273},[28,47967,47968],{"class":34},"            total_pixels ",[28,47970,9964],{"class":42},[28,47972,47973],{"class":34}," normalized_image_array.size\n",[28,47975,47976],{"class":30,"line":3067},[28,47977,47978],{"class":73},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[28,47980,47981,47984,47986,47989,47992,47994,47996,47998,48000,48002],{"class":30,"line":3081},[28,47982,47983],{"class":34},"            sum_normalized_pixel_values ",[28,47985,9964],{"class":42},[28,47987,47988],{"class":34}," np.sum(normalized_image_array, ",[28,47990,47991],{"class":5704},"axis",[28,47993,83],{"class":42},[28,47995,367],{"class":34},[28,47997,822],{"class":38},[28,47999,12921],{"class":34},[28,48001,39],{"class":38},[28,48003,30980],{"class":34},[28,48005,48006],{"class":30,"line":3089},[28,48007,2890],{"emptyLinePlaceholder":562},[28,48009,48010],{"class":30,"line":3094},[28,48011,48012],{"class":73},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[28,48014,48015,48018,48020,48023,48025],{"class":30,"line":3100},[28,48016,48017],{"class":34},"mean ",[28,48019,83],{"class":42},[28,48021,48022],{"class":34}," sum_normalized_pixel_values ",[28,48024,43],{"class":42},[28,48026,48027],{"class":34}," total_pixels\n",[28,48029,48030],{"class":30,"line":3106},[28,48031,2890],{"emptyLinePlaceholder":562},[28,48033,48034,48037,48039,48041,48043],{"class":30,"line":3111},[28,48035,48036],{"class":34},"sum_squared_diff ",[28,48038,83],{"class":42},[28,48040,47820],{"class":34},[28,48042,98],{"class":38},[28,48044,228],{"class":34},[28,48046,48047],{"class":30,"line":8436},[28,48048,2890],{"emptyLinePlaceholder":562},[28,48050,48051],{"class":30,"line":8460},[28,48052,48053],{"class":73},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[28,48055,48056],{"class":30,"line":8465},[28,48057,48058],{"class":73},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[28,48060,48061],{"class":30,"line":8471},[28,48062,48063],{"class":73},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[28,48065,48066],{"class":30,"line":8498},[28,48067,48068],{"class":73},"# Image.open(image_path)：打开图片\n",[28,48070,48071],{"class":30,"line":8503},[28,48072,48073],{"class":73},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[28,48075,48076,48078,48080,48082],{"class":30,"line":8509},[28,48077,49],{"class":42},[28,48079,47843],{"class":34},[28,48081,55],{"class":42},[28,48083,47848],{"class":34},[28,48085,48086,48088,48090,48092],{"class":30,"line":8521},[28,48087,377],{"class":42},[28,48089,47855],{"class":34},[28,48091,55],{"class":42},[28,48093,47860],{"class":34},[28,48095,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":30,"line":8533},[28,48097,2987],{"class":42},[28,48099,47867],{"class":34},[28,48101,47870],{"class":735},[28,48103,12921],{"class":34},[28,48105,47875],{"class":735},[28,48107,12921],{"class":34},[28,48109,47880],{"class":735},[28,48111,12921],{"class":34},[28,48113,47885],{"class":735},[28,48115,48116],{"class":34},")):\n",[28,48118,48119,48121,48123],{"class":30,"line":8545},[28,48120,46150],{"class":34},[28,48122,83],{"class":42},[28,48124,47900],{"class":34},[28,48126,48127,48129,48131],{"class":30,"line":10202},[28,48128,47905],{"class":34},[28,48130,83],{"class":42},[28,48132,47910],{"class":34},[28,48134,48135,48137,48139],{"class":30,"line":10227},[28,48136,47915],{"class":34},[28,48138,83],{"class":42},[28,48140,47920],{"class":34},[28,48142,48143],{"class":30,"line":10250},[28,48144,47929],{"class":73},[28,48146,48147,48149,48151,48153,48155],{"class":30,"line":10274},[28,48148,47934],{"class":34},[28,48150,83],{"class":42},[28,48152,47939],{"class":34},[28,48154,43],{"class":42},[28,48156,47944],{"class":38},[28,48158,48159],{"class":30,"line":10279},[28,48160,47958],{"class":73},[28,48162,48163],{"class":30,"line":10284},[28,48164,48165],{"class":73},"            # print(mean.shape)\n",[28,48167,48168],{"class":30,"line":10289},[28,48169,47953],{"class":73},[28,48171,48172],{"class":30,"line":10298},[28,48173,2890],{"emptyLinePlaceholder":562},[28,48175,48176,48179],{"class":30,"line":10303},[28,48177,48178],{"class":42},"            try",[28,48180,4227],{"class":34},[28,48182,48183,48186,48188,48191,48193,48196,48198],{"class":30,"line":10309},[28,48184,48185],{"class":34},"                diff ",[28,48187,83],{"class":42},[28,48189,48190],{"class":34}," (normalized_image_array ",[28,48192,445],{"class":42},[28,48194,48195],{"class":34}," mean) ",[28,48197,11147],{"class":42},[28,48199,48200],{"class":38}," 2\n",[28,48202,48203,48206,48208,48211,48213,48215,48217,48219,48221,48223],{"class":30,"line":10330},[28,48204,48205],{"class":34},"                sum_squared_diff ",[28,48207,9964],{"class":42},[28,48209,48210],{"class":34}," np.sum(diff, ",[28,48212,47991],{"class":5704},[28,48214,83],{"class":42},[28,48216,367],{"class":34},[28,48218,822],{"class":38},[28,48220,12921],{"class":34},[28,48222,39],{"class":38},[28,48224,30980],{"class":34},[28,48226,48227,48230],{"class":30,"line":10336},[28,48228,48229],{"class":42},"            except",[28,48231,4227],{"class":34},[28,48233,48234,48237,48239,48241,48244],{"class":30,"line":10350},[28,48235,48236],{"class":38},"                print",[28,48238,367],{"class":34},[28,48240,686],{"class":42},[28,48242,48243],{"class":735},"\"捕获到自定义异常\"",[28,48245,228],{"class":34},[28,48247,48248],{"class":30,"line":10356},[28,48249,48250],{"class":73},"            # diff = (normalized_image_array - mean) ** 2\n",[28,48252,48253],{"class":30,"line":10383},[28,48254,48255],{"class":73},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[28,48257,48258],{"class":30,"line":10392},[28,48259,2890],{"emptyLinePlaceholder":562},[28,48261,48262,48265,48267,48270,48272],{"class":30,"line":10398},[28,48263,48264],{"class":34},"variance ",[28,48266,83],{"class":42},[28,48268,48269],{"class":34}," sum_squared_diff ",[28,48271,43],{"class":42},[28,48273,48027],{"class":34},[28,48275,48276],{"class":30,"line":10406},[28,48277,2890],{"emptyLinePlaceholder":562},[28,48279,48280,48282,48284,48287],{"class":30,"line":10411},[28,48281,30898],{"class":38},[28,48283,367],{"class":34},[28,48285,48286],{"class":735},"\"Mean:\"",[28,48288,48289],{"class":34},", mean)\n",[28,48291,48292,48294,48296,48299],{"class":30,"line":17090},[28,48293,30898],{"class":38},[28,48295,367],{"class":34},[28,48297,48298],{"class":735},"\"Variance:\"",[28,48300,48301],{"class":34},", variance)\n",[18,48303,48305],{"className":20,"code":48304,"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,48306,48307,48313,48319,48329,48335,48345,48359,48369,48379,48389,48393,48403,48413,48417,48421,48429,48434,48439,48458,48462,48467,48472,48477,48482,48523,48528,48538,48543,48556,48561,48566,48571,48576,48581,48585,48590,48595,48617,48621,48653,48667,48677,48687,48691,48701,48715,48725,48735,48745,48751,48755,48759,48763,48767,48771,48779,48799,48803,48807,48811,48815,48831,48835,48839,48847,48851,48855,48863,48867,48871,48875,48883,48887,48891,48895,48903,48907,48915,48919,48927,48931,48939,48943,48951,48955,48959,48967,48971,48975,48987,49011,49025,49029,49033,49037,49045,49049,49057,49061,49069,49073,49081,49085,49093,49097,49105,49109,49121,49125,49133,49137,49145,49149,49153,49157,49161,49169,49173,49189,49193,49201,49205,49209,49213,49217,49221,49225,49229,49245,49249,49261,49265,49277,49281,49293,49297,49305,49309,49317,49321,49325,49329,49335,49339,49347,49351,49367,49371,49379,49383,49399,49411,49415,49427,49431,49435,49443,49447,49451,49459,49463,49471,49475,49483,49487,49491,49533,49575,49579,49583,49599,49603,49619,49623,49627,49635,49639,49643,49655,49693,49697,49701,49709,49713,49727,49737,49743,49749,49755,49761,49765,49769,49775,49779,49783,49791,49795,49813,49817,49821,49825,49841,49845,49849,49853,49857,49861,49881,49901,49905,49909,49913,49921,49929,49933,49949,49969,49989,49993,49998,50007,50016,50021,50026,50031,50044,50049,50058,50067,50084],{"__ignoreMap":23},[28,48308,48309,48311],{"class":30,"line":31},[28,48310,536],{"class":42},[28,48312,32301],{"class":34},[28,48314,48315,48317],{"class":30,"line":77},[28,48316,536],{"class":42},[28,48318,32308],{"class":34},[28,48320,48321,48323,48325,48327],{"class":30,"line":114},[28,48322,536],{"class":42},[28,48324,32319],{"class":34},[28,48326,542],{"class":42},[28,48328,32324],{"class":34},[28,48330,48331,48333],{"class":30,"line":128},[28,48332,536],{"class":42},[28,48334,30878],{"class":34},[28,48336,48337,48339,48341,48343],{"class":30,"line":393},[28,48338,530],{"class":42},[28,48340,31895],{"class":34},[28,48342,536],{"class":42},[28,48344,32341],{"class":34},[28,48346,48347,48349,48351,48353,48356],{"class":30,"line":409},[28,48348,530],{"class":42},[28,48350,31849],{"class":34},[28,48352,536],{"class":42},[28,48354,48355],{"class":34}," ImageFolder ",[28,48357,48358],{"class":73},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[28,48360,48361,48363,48365,48367],{"class":30,"line":1711},[28,48362,530],{"class":42},[28,48364,31878],{"class":34},[28,48366,536],{"class":42},[28,48368,31883],{"class":34},[28,48370,48371,48373,48375,48377],{"class":30,"line":1802},[28,48372,536],{"class":42},[28,48374,31895],{"class":34},[28,48376,542],{"class":42},[28,48378,31900],{"class":34},[28,48380,48381,48383,48385,48387],{"class":30,"line":1808},[28,48382,536],{"class":42},[28,48384,31912],{"class":34},[28,48386,542],{"class":42},[28,48388,545],{"class":34},[28,48390,48391],{"class":30,"line":1820},[28,48392,32386],{"class":73},[28,48394,48395,48397,48399,48401],{"class":30,"line":2102},[28,48396,530],{"class":42},[28,48398,32393],{"class":34},[28,48400,536],{"class":42},[28,48402,43508],{"class":34},[28,48404,48405,48407,48409,48411],{"class":30,"line":2107},[28,48406,530],{"class":42},[28,48408,31222],{"class":34},[28,48410,536],{"class":42},[28,48412,31227],{"class":34},[28,48414,48415],{"class":30,"line":2113},[28,48416,2890],{"emptyLinePlaceholder":562},[28,48418,48419],{"class":30,"line":2118},[28,48420,32421],{"class":73},[28,48422,48423,48425,48427],{"class":30,"line":2132},[28,48424,32426],{"class":42},[28,48426,32429],{"class":2453},[28,48428,32432],{"class":34},[28,48430,48431],{"class":30,"line":2137},[28,48432,48433],{"class":73},"    # 导入自己的数据集，并进行数据处理\n",[28,48435,48436],{"class":30,"line":2143},[28,48437,48438],{"class":73},"    # 定义数据集的路径\n",[28,48440,48441,48444,48446,48448,48450,48452,48456],{"class":30,"line":2164},[28,48442,48443],{"class":38},"    ROOT_PATH",[28,48445,83],{"class":42},[28,48447,1290],{"class":42},[28,48449,880],{"class":735},[28,48451,1179],{"class":38},[28,48453,48455],{"class":48454},"sA_wV","\u002Fdata\u002Ftrain",[28,48457,25620],{"class":735},[28,48459,48460],{"class":30,"line":2169},[28,48461,2890],{"emptyLinePlaceholder":562},[28,48463,48464],{"class":30,"line":2183},[28,48465,48466],{"class":73},"    # 定义归一化方法\n",[28,48468,48469],{"class":30,"line":2188},[28,48470,48471],{"class":73},"    # 这里需要先计算一下数据集的均值和方差\n",[28,48473,48474],{"class":30,"line":2217},[28,48475,48476],{"class":73},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[28,48478,48479],{"class":30,"line":2222},[28,48480,48481],{"class":73},"    # 第一个参数是均值，第二个参数是方差\n",[28,48483,48484,48487,48489,48492,48495,48497,48500,48502,48505,48508,48511,48513,48516,48518,48521],{"class":30,"line":2239},[28,48485,48486],{"class":34},"    normalize",[28,48488,83],{"class":42},[28,48490,48491],{"class":34},"transforms.Normalize([",[28,48493,48494],{"class":38},"0.162",[28,48496,90],{"class":34},[28,48498,48499],{"class":38},"0.151",[28,48501,90],{"class":34},[28,48503,48504],{"class":38},"0.138",[28,48506,48507],{"class":34},"],[",[28,48509,48510],{"class":38},"0.058",[28,48512,90],{"class":34},[28,48514,48515],{"class":38},"0.052",[28,48517,90],{"class":34},[28,48519,48520],{"class":38},"0.048",[28,48522,5145],{"class":34},[28,48524,48525],{"class":30,"line":2244},[28,48526,48527],{"class":73},"    # 定义数据集处理方法变量\n",[28,48529,48530,48533,48535],{"class":30,"line":2249},[28,48531,48532],{"class":34},"    train_transform",[28,48534,83],{"class":42},[28,48536,48537],{"class":34},"transforms.Compose([\n",[28,48539,48540],{"class":30,"line":2254},[28,48541,48542],{"class":73},"        # 调整图像大小为224*224\n",[28,48544,48545,48548,48550,48552,48554],{"class":30,"line":2268},[28,48546,48547],{"class":34},"        transforms.Resize((",[28,48549,31980],{"class":38},[28,48551,90],{"class":34},[28,48553,31980],{"class":38},[28,48555,43099],{"class":34},[28,48557,48558],{"class":30,"line":2273},[28,48559,48560],{"class":73},"        # 将图像转换为张量\n",[28,48562,48563],{"class":30,"line":3067},[28,48564,48565],{"class":34},"        transforms.ToTensor(),\n",[28,48567,48568],{"class":30,"line":3081},[28,48569,48570],{"class":34},"        normalize])\n",[28,48572,48573],{"class":30,"line":3089},[28,48574,48575],{"class":73},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[28,48577,48578],{"class":30,"line":3094},[28,48579,48580],{"class":73},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[28,48582,48583],{"class":30,"line":3100},[28,48584,2890],{"emptyLinePlaceholder":562},[28,48586,48587],{"class":30,"line":3106},[28,48588,48589],{"class":73},"    # 加载数据集\n",[28,48591,48592],{"class":30,"line":3111},[28,48593,48594],{"class":73},"    # 传入数据集路径与处理方法\n",[28,48596,48597,48599,48601,48604,48607,48609,48612,48614],{"class":30,"line":8436},[28,48598,32437],{"class":34},[28,48600,83],{"class":42},[28,48602,48603],{"class":34},"ImageFolder(",[28,48605,48606],{"class":38},"ROOT_PATH",[28,48608,90],{"class":34},[28,48610,48611],{"class":5704},"transform",[28,48613,83],{"class":42},[28,48615,48616],{"class":34},"train_transform)\n",[28,48618,48619],{"class":30,"line":8460},[28,48620,2890],{"emptyLinePlaceholder":562},[28,48622,48623,48625,48627,48629,48631,48633,48635,48637,48639,48641,48643,48645,48647,48649,48651],{"class":30,"line":8465},[28,48624,32489],{"class":34},[28,48626,83],{"class":42},[28,48628,32494],{"class":34},[28,48630,32497],{"class":38},[28,48632,367],{"class":34},[28,48634,32502],{"class":38},[28,48636,256],{"class":42},[28,48638,7846],{"class":38},[28,48640,32509],{"class":34},[28,48642,32497],{"class":38},[28,48644,367],{"class":34},[28,48646,32516],{"class":38},[28,48648,256],{"class":42},[28,48650,7846],{"class":38},[28,48652,32523],{"class":34},[28,48654,48655,48657,48659,48661,48663,48665],{"class":30,"line":8471},[28,48656,32528],{"class":34},[28,48658,83],{"class":42},[28,48660,32533],{"class":34},[28,48662,32016],{"class":5704},[28,48664,83],{"class":42},[28,48666,32021],{"class":34},[28,48668,48669,48671,48673,48675],{"class":30,"line":8498},[28,48670,32544],{"class":5704},[28,48672,83],{"class":42},[28,48674,828],{"class":38},[28,48676,31945],{"class":34},[28,48678,48679,48681,48683,48685],{"class":30,"line":8503},[28,48680,32556],{"class":5704},[28,48682,83],{"class":42},[28,48684,31955],{"class":38},[28,48686,31945],{"class":34},[28,48688,48689],{"class":30,"line":8509},[28,48690,32567],{"class":73},[28,48692,48693,48695,48697,48699],{"class":30,"line":8521},[28,48694,32572],{"class":5704},[28,48696,83],{"class":42},[28,48698,1020],{"class":38},[28,48700,228],{"class":34},[28,48702,48703,48705,48707,48709,48711,48713],{"class":30,"line":8533},[28,48704,32583],{"class":34},[28,48706,83],{"class":42},[28,48708,32013],{"class":34},[28,48710,32016],{"class":5704},[28,48712,83],{"class":42},[28,48714,32594],{"class":34},[28,48716,48717,48719,48721,48723],{"class":30,"line":8545},[28,48718,32599],{"class":5704},[28,48720,83],{"class":42},[28,48722,828],{"class":38},[28,48724,31945],{"class":34},[28,48726,48727,48729,48731,48733],{"class":30,"line":10202},[28,48728,32610],{"class":5704},[28,48730,83],{"class":42},[28,48732,31955],{"class":38},[28,48734,31945],{"class":34},[28,48736,48737,48739,48741,48743],{"class":30,"line":10227},[28,48738,32621],{"class":5704},[28,48740,83],{"class":42},[28,48742,1020],{"class":38},[28,48744,228],{"class":34},[28,48746,48747,48749],{"class":30,"line":10250},[28,48748,4578],{"class":42},[28,48750,32634],{"class":34},[28,48752,48753],{"class":30,"line":10274},[28,48754,2890],{"emptyLinePlaceholder":562},[28,48756,48757],{"class":30,"line":10279},[28,48758,32643],{"class":73},[28,48760,48761],{"class":30,"line":10284},[28,48762,32648],{"class":73},[28,48764,48765],{"class":30,"line":10289},[28,48766,2890],{"emptyLinePlaceholder":562},[28,48768,48769],{"class":30,"line":10298},[28,48770,32657],{"class":73},[28,48772,48773,48775,48777],{"class":30,"line":10303},[28,48774,32426],{"class":42},[28,48776,32664],{"class":2453},[28,48778,32667],{"class":34},[28,48780,48781,48783,48785,48787,48789,48791,48793,48795,48797],{"class":30,"line":10309},[28,48782,31718],{"class":34},[28,48784,83],{"class":42},[28,48786,30934],{"class":34},[28,48788,31725],{"class":735},[28,48790,2194],{"class":42},[28,48792,31730],{"class":34},[28,48794,2191],{"class":42},[28,48796,32686],{"class":735},[28,48798,228],{"class":34},[28,48800,48801],{"class":30,"line":10330},[28,48802,2890],{"emptyLinePlaceholder":562},[28,48804,48805],{"class":30,"line":10336},[28,48806,32701],{"class":73},[28,48808,48809],{"class":30,"line":10350},[28,48810,32706],{"class":73},[28,48812,48813],{"class":30,"line":10356},[28,48814,32711],{"class":73},[28,48816,48817,48819,48821,48823,48825,48827,48829],{"class":30,"line":10383},[28,48818,32716],{"class":34},[28,48820,83],{"class":42},[28,48822,32721],{"class":34},[28,48824,32724],{"class":5704},[28,48826,83],{"class":42},[28,48828,32729],{"class":38},[28,48830,228],{"class":34},[28,48832,48833],{"class":30,"line":10392},[28,48834,2890],{"emptyLinePlaceholder":562},[28,48836,48837],{"class":30,"line":10398},[28,48838,32740],{"class":73},[28,48840,48841,48843,48845],{"class":30,"line":10406},[28,48842,32745],{"class":34},[28,48844,83],{"class":42},[28,48846,32750],{"class":34},[28,48848,48849],{"class":30,"line":10411},[28,48850,2890],{"emptyLinePlaceholder":562},[28,48852,48853],{"class":30,"line":17090},[28,48854,32759],{"class":73},[28,48856,48857,48859,48861],{"class":30,"line":17096},[28,48858,31770],{"class":34},[28,48860,83],{"class":42},[28,48862,32768],{"class":34},[28,48864,48865],{"class":30,"line":17119},[28,48866,32773],{"class":73},[28,48868,48869],{"class":30,"line":17125},[28,48870,32778],{"class":73},[28,48872,48873],{"class":30,"line":17148},[28,48874,32783],{"class":73},[28,48876,48877,48879,48881],{"class":30,"line":17162},[28,48878,32788],{"class":34},[28,48880,83],{"class":42},[28,48882,32793],{"class":34},[28,48884,48885],{"class":30,"line":17182},[28,48886,2890],{"emptyLinePlaceholder":562},[28,48888,48889],{"class":30,"line":17188},[28,48890,32806],{"class":73},[28,48892,48893],{"class":30,"line":17199},[28,48894,32811],{"class":73},[28,48896,48897,48899,48901],{"class":30,"line":17222},[28,48898,32816],{"class":34},[28,48900,83],{"class":42},[28,48902,32821],{"class":38},[28,48904,48905],{"class":30,"line":17244},[28,48906,32826],{"class":73},[28,48908,48909,48911,48913],{"class":30,"line":17249},[28,48910,32831],{"class":34},[28,48912,83],{"class":42},[28,48914,32836],{"class":34},[28,48916,48917],{"class":30,"line":17255},[28,48918,32841],{"class":73},[28,48920,48921,48923,48925],{"class":30,"line":17269},[28,48922,32846],{"class":34},[28,48924,83],{"class":42},[28,48926,32836],{"class":34},[28,48928,48929],{"class":30,"line":17282},[28,48930,32855],{"class":73},[28,48932,48933,48935,48937],{"class":30,"line":17287},[28,48934,32860],{"class":34},[28,48936,83],{"class":42},[28,48938,32836],{"class":34},[28,48940,48941],{"class":30,"line":17301},[28,48942,32869],{"class":73},[28,48944,48945,48947,48949],{"class":30,"line":17306},[28,48946,32874],{"class":34},[28,48948,83],{"class":42},[28,48950,32836],{"class":34},[28,48952,48953],{"class":30,"line":17312},[28,48954,2890],{"emptyLinePlaceholder":562},[28,48956,48957],{"class":30,"line":17317},[28,48958,32887],{"class":73},[28,48960,48961,48963,48965],{"class":30,"line":17331},[28,48962,32892],{"class":34},[28,48964,83],{"class":42},[28,48966,32897],{"class":34},[28,48968,48969],{"class":30,"line":17336},[28,48970,2890],{"emptyLinePlaceholder":562},[28,48972,48973],{"class":30,"line":17341},[28,48974,32910],{"class":73},[28,48976,48977,48979,48981,48983,48985],{"class":30,"line":17355},[28,48978,377],{"class":42},[28,48980,32917],{"class":34},[28,48982,55],{"class":42},[28,48984,364],{"class":38},[28,48986,32924],{"class":34},[28,48988,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009],{"class":30,"line":17367},[28,48990,32929],{"class":38},[28,48992,367],{"class":34},[28,48994,32934],{"class":735},[28,48996,32937],{"class":38},[28,48998,43],{"class":735},[28,49000,32937],{"class":38},[28,49002,880],{"class":735},[28,49004,32946],{"class":34},[28,49006,445],{"class":42},[28,49008,39],{"class":38},[28,49010,30980],{"class":34},[28,49012,49013,49015,49017,49019,49021,49023],{"class":30,"line":17372},[28,49014,32929],{"class":38},[28,49016,367],{"class":34},[28,49018,32961],{"class":735},[28,49020,256],{"class":42},[28,49022,225],{"class":38},[28,49024,228],{"class":34},[28,49026,49027],{"class":30,"line":17385},[28,49028,2890],{"emptyLinePlaceholder":562},[28,49030,49031],{"class":30,"line":17390},[28,49032,32976],{"class":73},[28,49034,49035],{"class":30,"line":17395},[28,49036,32981],{"class":73},[28,49038,49039,49041,49043],{"class":30,"line":17400},[28,49040,32986],{"class":34},[28,49042,83],{"class":42},[28,49044,32821],{"class":38},[28,49046,49047],{"class":30,"line":17413},[28,49048,32995],{"class":73},[28,49050,49051,49053,49055],{"class":30,"line":17418},[28,49052,33000],{"class":34},[28,49054,83],{"class":42},[28,49056,3574],{"class":38},[28,49058,49059],{"class":30,"line":33111},[28,49060,33009],{"class":73},[28,49062,49063,49065,49067],{"class":30,"line":33117},[28,49064,33014],{"class":34},[28,49066,83],{"class":42},[28,49068,32821],{"class":38},[28,49070,49071],{"class":30,"line":33123},[28,49072,33023],{"class":73},[28,49074,49075,49077,49079],{"class":30,"line":33129},[28,49076,33028],{"class":34},[28,49078,83],{"class":42},[28,49080,3574],{"class":38},[28,49082,49083],{"class":30,"line":33135},[28,49084,33037],{"class":73},[28,49086,49087,49089,49091],{"class":30,"line":33146},[28,49088,33042],{"class":34},[28,49090,83],{"class":42},[28,49092,3574],{"class":38},[28,49094,49095],{"class":30,"line":33152},[28,49096,33051],{"class":73},[28,49098,49099,49101,49103],{"class":30,"line":33172},[28,49100,33056],{"class":34},[28,49102,83],{"class":42},[28,49104,3574],{"class":38},[28,49106,49107],{"class":30,"line":33178},[28,49108,33065],{"class":73},[28,49110,49111,49113,49115,49117,49119],{"class":30,"line":33189},[28,49112,3891],{"class":42},[28,49114,32080],{"class":34},[28,49116,55],{"class":42},[28,49118,32085],{"class":38},[28,49120,33078],{"class":34},[28,49122,49123],{"class":30,"line":33195},[28,49124,33083],{"class":73},[28,49126,49127,49129,49131],{"class":30,"line":33201},[28,49128,33088],{"class":34},[28,49130,83],{"class":42},[28,49132,33093],{"class":34},[28,49134,49135],{"class":30,"line":33207},[28,49136,33098],{"class":73},[28,49138,49139,49141,49143],{"class":30,"line":33213},[28,49140,33103],{"class":34},[28,49142,83],{"class":42},[28,49144,33108],{"class":34},[28,49146,49147],{"class":30,"line":33219},[28,49148,33114],{"class":73},[28,49150,49151],{"class":30,"line":33225},[28,49152,33120],{"class":34},[28,49154,49155],{"class":30,"line":33231},[28,49156,33126],{"class":73},[28,49158,49159],{"class":30,"line":33251},[28,49160,33132],{"class":73},[28,49162,49163,49165,49167],{"class":30,"line":33257},[28,49164,33138],{"class":34},[28,49166,83],{"class":42},[28,49168,33143],{"class":34},[28,49170,49171],{"class":30,"line":33273},[28,49172,33149],{"class":73},[28,49174,49175,49177,49179,49181,49183,49185,49187],{"class":30,"line":33279},[28,49176,33155],{"class":34},[28,49178,83],{"class":42},[28,49180,33160],{"class":34},[28,49182,33163],{"class":5704},[28,49184,83],{"class":42},[28,49186,39],{"class":38},[28,49188,228],{"class":34},[28,49190,49191],{"class":30,"line":33293},[28,49192,33175],{"class":73},[28,49194,49195,49197,49199],{"class":30,"line":33299},[28,49196,33181],{"class":34},[28,49198,83],{"class":42},[28,49200,33186],{"class":34},[28,49202,49203],{"class":30,"line":33314},[28,49204,33192],{"class":73},[28,49206,49207],{"class":30,"line":33320},[28,49208,33198],{"class":34},[28,49210,49211],{"class":30,"line":33329},[28,49212,33204],{"class":73},[28,49214,49215],{"class":30,"line":33335},[28,49216,33210],{"class":34},[28,49218,49219],{"class":30,"line":33344},[28,49220,33216],{"class":73},[28,49222,49223],{"class":30,"line":33350},[28,49224,33222],{"class":34},[28,49226,49227],{"class":30,"line":33356},[28,49228,33228],{"class":73},[28,49230,49231,49233,49235,49237,49239,49241,49243],{"class":30,"line":33365},[28,49232,33234],{"class":34},[28,49234,9964],{"class":42},[28,49236,33239],{"class":34},[28,49238,256],{"class":42},[28,49240,33244],{"class":34},[28,49242,822],{"class":38},[28,49244,228],{"class":34},[28,49246,49247],{"class":30,"line":33371},[28,49248,33254],{"class":73},[28,49250,49251,49253,49255,49257,49259],{"class":30,"line":33382},[28,49252,33260],{"class":34},[28,49254,9964],{"class":42},[28,49256,33265],{"class":34},[28,49258,3439],{"class":42},[28,49260,33270],{"class":34},[28,49262,49263],{"class":30,"line":33388},[28,49264,33276],{"class":73},[28,49266,49267,49269,49271,49273,49275],{"class":30,"line":33407},[28,49268,33282],{"class":34},[28,49270,9964],{"class":42},[28,49272,33244],{"class":34},[28,49274,822],{"class":38},[28,49276,228],{"class":34},[28,49278,49279],{"class":30,"line":33413},[28,49280,33296],{"class":73},[28,49282,49283,49285,49287,49289,49291],{"class":30,"line":33424},[28,49284,3891],{"class":42},[28,49286,33304],{"class":34},[28,49288,55],{"class":42},[28,49290,32085],{"class":38},[28,49292,33311],{"class":34},[28,49294,49295],{"class":30,"line":33430},[28,49296,33317],{"class":73},[28,49298,49299,49301,49303],{"class":30,"line":33450},[28,49300,33088],{"class":34},[28,49302,83],{"class":42},[28,49304,33093],{"class":34},[28,49306,49307],{"class":30,"line":33466},[28,49308,33332],{"class":73},[28,49310,49311,49313,49315],{"class":30,"line":33472},[28,49312,33103],{"class":34},[28,49314,83],{"class":42},[28,49316,33108],{"class":34},[28,49318,49319],{"class":30,"line":33486},[28,49320,33347],{"class":73},[28,49322,49323],{"class":30,"line":33492},[28,49324,33353],{"class":34},[28,49326,49327],{"class":30,"line":33498},[28,49328,36833],{"class":73},[28,49330,49331,49333],{"class":30,"line":33509},[28,49332,33359],{"class":42},[28,49334,33362],{"class":34},[28,49336,49337],{"class":30,"line":33515},[28,49338,33368],{"class":73},[28,49340,49341,49343,49345],{"class":30,"line":33521},[28,49342,36848],{"class":34},[28,49344,83],{"class":42},[28,49346,33143],{"class":34},[28,49348,49349],{"class":30,"line":33531},[28,49350,33385],{"class":73},[28,49352,49353,49355,49357,49359,49361,49363,49365],{"class":30,"line":33537},[28,49354,36861],{"class":34},[28,49356,83],{"class":42},[28,49358,33160],{"class":34},[28,49360,33163],{"class":5704},[28,49362,83],{"class":42},[28,49364,39],{"class":38},[28,49366,228],{"class":34},[28,49368,49369],{"class":30,"line":33548},[28,49370,33410],{"class":73},[28,49372,49373,49375,49377],{"class":30,"line":33554},[28,49374,36882],{"class":34},[28,49376,83],{"class":42},[28,49378,33186],{"class":34},[28,49380,49381],{"class":30,"line":33564},[28,49382,33427],{"class":73},[28,49384,49385,49387,49389,49391,49393,49395,49397],{"class":30,"line":33569},[28,49386,36895],{"class":34},[28,49388,9964],{"class":42},[28,49390,36900],{"class":34},[28,49392,256],{"class":42},[28,49394,33244],{"class":34},[28,49396,822],{"class":38},[28,49398,228],{"class":34},[28,49400,49401,49403,49405,49407,49409],{"class":30,"line":33575},[28,49402,36913],{"class":34},[28,49404,9964],{"class":42},[28,49406,33265],{"class":34},[28,49408,3439],{"class":42},[28,49410,33270],{"class":34},[28,49412,49413],{"class":30,"line":33624},[28,49414,36926],{"class":73},[28,49416,49417,49419,49421,49423,49425],{"class":30,"line":33671},[28,49418,36931],{"class":34},[28,49420,9964],{"class":42},[28,49422,33244],{"class":34},[28,49424,822],{"class":38},[28,49426,228],{"class":34},[28,49428,49429],{"class":30,"line":33676},[28,49430,33489],{"class":73},[28,49432,49433],{"class":30,"line":33682},[28,49434,33495],{"class":73},[28,49436,49437,49439,49441],{"class":30,"line":33701},[28,49438,33501],{"class":34},[28,49440,43],{"class":42},[28,49442,33506],{"class":34},[28,49444,49445],{"class":30,"line":33707},[28,49446,33512],{"class":73},[28,49448,49449],{"class":30,"line":33726},[28,49450,33518],{"class":73},[28,49452,49453,49455,49457],{"class":30,"line":33732},[28,49454,33524],{"class":34},[28,49456,43],{"class":42},[28,49458,33506],{"class":34},[28,49460,49461],{"class":30,"line":33738},[28,49462,33534],{"class":73},[28,49464,49465,49467,49469],{"class":30,"line":33748},[28,49466,33540],{"class":34},[28,49468,43],{"class":42},[28,49470,33545],{"class":34},[28,49472,49473],{"class":30,"line":33753},[28,49474,33551],{"class":73},[28,49476,49477,49479,49481],{"class":30,"line":33759},[28,49478,33557],{"class":34},[28,49480,43],{"class":42},[28,49482,33545],{"class":34},[28,49484,49485],{"class":30,"line":33775},[28,49486,2890],{"emptyLinePlaceholder":562},[28,49488,49489],{"class":30,"line":33820},[28,49490,33572],{"class":73},[28,49492,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511,49513,49515,49517,49519,49521,49523,49525,49527,49529,49531],{"class":30,"line":33826},[28,49494,32929],{"class":38},[28,49496,367],{"class":34},[28,49498,4080],{"class":735},[28,49500,32937],{"class":38},[28,49502,33586],{"class":735},[28,49504,1515],{"class":38},[28,49506,33591],{"class":42},[28,49508,1565],{"class":38},[28,49510,33596],{"class":735},[28,49512,1515],{"class":38},[28,49514,33591],{"class":42},[28,49516,1565],{"class":38},[28,49518,4080],{"class":735},[28,49520,33607],{"class":34},[28,49522,445],{"class":42},[28,49524,39],{"class":38},[28,49526,33614],{"class":34},[28,49528,445],{"class":42},[28,49530,39],{"class":38},[28,49532,33621],{"class":34},[28,49534,49535,49537,49539,49541,49543,49545,49547,49549,49551,49553,49555,49557,49559,49561,49563,49565,49567,49569,49571,49573],{"class":30,"line":33832},[28,49536,32929],{"class":38},[28,49538,367],{"class":34},[28,49540,4080],{"class":735},[28,49542,32937],{"class":38},[28,49544,33635],{"class":735},[28,49546,1515],{"class":38},[28,49548,33591],{"class":42},[28,49550,1565],{"class":38},[28,49552,33644],{"class":735},[28,49554,1515],{"class":38},[28,49556,33591],{"class":42},[28,49558,1565],{"class":38},[28,49560,4080],{"class":735},[28,49562,33655],{"class":34},[28,49564,445],{"class":42},[28,49566,39],{"class":38},[28,49568,33662],{"class":34},[28,49570,445],{"class":42},[28,49572,39],{"class":38},[28,49574,33621],{"class":34},[28,49576,49577],{"class":30,"line":33838},[28,49578,2890],{"emptyLinePlaceholder":562},[28,49580,49581],{"class":30,"line":33849},[28,49582,33679],{"class":73},[28,49584,49585,49587,49589,49591,49593,49595,49597],{"class":30,"line":33855},[28,49586,2987],{"class":42},[28,49588,33687],{"class":34},[28,49590,445],{"class":42},[28,49592,39],{"class":38},[28,49594,1559],{"class":34},[28,49596,1579],{"class":42},[28,49598,33698],{"class":34},[28,49600,49601],{"class":30,"line":33861},[28,49602,33704],{"class":73},[28,49604,49605,49607,49609,49611,49613,49615,49617],{"class":30,"line":33867},[28,49606,33710],{"class":34},[28,49608,675],{"class":38},[28,49610,83],{"class":42},[28,49612,33717],{"class":34},[28,49614,445],{"class":42},[28,49616,39],{"class":38},[28,49618,111],{"class":34},[28,49620,49621],{"class":30,"line":33885},[28,49622,33729],{"class":73},[28,49624,49625],{"class":30,"line":33899},[28,49626,33735],{"class":73},[28,49628,49629,49631,49633],{"class":30,"line":33908},[28,49630,33741],{"class":34},[28,49632,83],{"class":42},[28,49634,32793],{"class":34},[28,49636,49637],{"class":30,"line":33917},[28,49638,2890],{"emptyLinePlaceholder":562},[28,49640,49641],{"class":30,"line":33926},[28,49642,33756],{"class":73},[28,49644,49645,49647,49649,49651,49653],{"class":30,"line":33935},[28,49646,33762],{"class":34},[28,49648,83],{"class":42},[28,49650,33767],{"class":34},[28,49652,445],{"class":42},[28,49654,33772],{"class":34},[28,49656,49657,49659,49661,49663,49665,49667,49669,49671,49673,49675,49677,49679,49681,49683,49685,49687,49689,49691],{"class":30,"line":33941},[28,49658,32929],{"class":38},[28,49660,367],{"class":34},[28,49662,33782],{"class":735},[28,49664,1515],{"class":38},[28,49666,33787],{"class":42},[28,49668,1565],{"class":38},[28,49670,1165],{"class":735},[28,49672,1515],{"class":38},[28,49674,33787],{"class":42},[28,49676,1565],{"class":38},[28,49678,33800],{"class":735},[28,49680,33803],{"class":34},[28,49682,33806],{"class":42},[28,49684,1526],{"class":38},[28,49686,33811],{"class":34},[28,49688,954],{"class":42},[28,49690,1526],{"class":38},[28,49692,30980],{"class":34},[28,49694,49695],{"class":30,"line":33947},[28,49696,37210],{"class":73},[28,49698,49699],{"class":30,"line":33955},[28,49700,37215],{"class":73},[28,49702,49703,49705,49707],{"class":30,"line":33960},[28,49704,37220],{"class":34},[28,49706,33844],{"class":735},[28,49708,228],{"class":34},[28,49710,49711],{"class":30,"line":33966},[28,49712,33864],{"class":73},[28,49714,49715,49717,49719,49721,49723,49725],{"class":30,"line":33977},[28,49716,33870],{"class":34},[28,49718,83],{"class":42},[28,49720,33875],{"class":34},[28,49722,33878],{"class":5704},[28,49724,83],{"class":42},[28,49726,2036],{"class":34},[28,49728,49729,49731,49733,49735],{"class":30,"line":33983},[28,49730,33888],{"class":735},[28,49732,1479],{"class":34},[28,49734,33893],{"class":38},[28,49736,33896],{"class":34},[28,49738,49739,49741],{"class":30,"line":34003},[28,49740,33902],{"class":735},[28,49742,33905],{"class":34},[28,49744,49745,49747],{"class":30,"line":34009},[28,49746,33911],{"class":735},[28,49748,33914],{"class":34},[28,49750,49751,49753],{"class":30,"line":34015},[28,49752,33920],{"class":735},[28,49754,33923],{"class":34},[28,49756,49757,49759],{"class":30,"line":34021},[28,49758,33929],{"class":735},[28,49760,33932],{"class":34},[28,49762,49763],{"class":30,"line":34038},[28,49764,33938],{"class":34},[28,49766,49767],{"class":30,"line":34044},[28,49768,33944],{"class":73},[28,49770,49771,49773],{"class":30,"line":34050},[28,49772,4578],{"class":42},[28,49774,33952],{"class":34},[28,49776,49777],{"class":30,"line":34056},[28,49778,2890],{"emptyLinePlaceholder":562},[28,49780,49781],{"class":30,"line":34062},[28,49782,33963],{"class":73},[28,49784,49785,49787,49789],{"class":30,"line":34068},[28,49786,32426],{"class":42},[28,49788,33971],{"class":2453},[28,49790,33974],{"class":34},[28,49792,49793],{"class":30,"line":34095},[28,49794,33980],{"class":73},[28,49796,49797,49799,49801,49803,49805,49807,49809,49811],{"class":30,"line":34119},[28,49798,33986],{"class":34},[28,49800,32172],{"class":5704},[28,49802,83],{"class":42},[28,49804,367],{"class":34},[28,49806,1121],{"class":38},[28,49808,90],{"class":34},[28,49810,103],{"class":38},[28,49812,30980],{"class":34},[28,49814,49815],{"class":30,"line":34125},[28,49816,34006],{"class":73},[28,49818,49819],{"class":30,"line":34131},[28,49820,34012],{"class":73},[28,49822,49823],{"class":30,"line":34137},[28,49824,34018],{"class":73},[28,49826,49827,49829,49831,49833,49835,49837,49839],{"class":30,"line":34148},[28,49828,32206],{"class":34},[28,49830,39],{"class":38},[28,49832,90],{"class":34},[28,49834,93],{"class":38},[28,49836,90],{"class":34},[28,49838,39],{"class":38},[28,49840,228],{"class":34},[28,49842,49843],{"class":30,"line":34159},[28,49844,34041],{"class":73},[28,49846,49847],{"class":30,"line":34165},[28,49848,34047],{"class":73},[28,49850,49851],{"class":30,"line":34182},[28,49852,34053],{"class":73},[28,49854,49855],{"class":30,"line":34205},[28,49856,34059],{"class":73},[28,49858,49859],{"class":30,"line":34228},[28,49860,34065],{"class":73},[28,49862,49863,49865,49867,49869,49871,49873,49875,49877,49879],{"class":30,"line":34234},[28,49864,34071],{"class":34},[28,49866,34074],{"class":735},[28,49868,34077],{"class":34},[28,49870,34080],{"class":735},[28,49872,90],{"class":34},[28,49874,34085],{"class":5704},[28,49876,83],{"class":42},[28,49878,34090],{"class":735},[28,49880,228],{"class":34},[28,49882,49883,49885,49887,49889,49891,49893,49895,49897,49899],{"class":30,"line":34239},[28,49884,34071],{"class":34},[28,49886,34074],{"class":735},[28,49888,34102],{"class":34},[28,49890,34105],{"class":735},[28,49892,90],{"class":34},[28,49894,34085],{"class":5704},[28,49896,83],{"class":42},[28,49898,34114],{"class":735},[28,49900,228],{"class":34},[28,49902,49903],{"class":30,"line":34248},[28,49904,34122],{"class":73},[28,49906,49907],{"class":30,"line":34258},[28,49908,34128],{"class":34},[28,49910,49911],{"class":30,"line":34264},[28,49912,34134],{"class":73},[28,49914,49915,49917,49919],{"class":30,"line":34269},[28,49916,34140],{"class":34},[28,49918,34143],{"class":735},[28,49920,228],{"class":34},[28,49922,49923,49925,49927],{"class":30,"line":34275},[28,49924,34151],{"class":34},[28,49926,34154],{"class":735},[28,49928,228],{"class":34},[28,49930,49931],{"class":30,"line":34288},[28,49932,34162],{"class":73},[28,49934,49935,49937,49939,49941,49943,49945,49947],{"class":30,"line":34294},[28,49936,32206],{"class":34},[28,49938,39],{"class":38},[28,49940,90],{"class":34},[28,49942,93],{"class":38},[28,49944,90],{"class":34},[28,49946,93],{"class":38},[28,49948,228],{"class":34},[28,49950,49951,49953,49955,49957,49959,49961,49963,49965,49967],{"class":30,"line":34305},[28,49952,34071],{"class":34},[28,49954,34074],{"class":735},[28,49956,34189],{"class":34},[28,49958,34080],{"class":735},[28,49960,90],{"class":34},[28,49962,34085],{"class":5704},[28,49964,83],{"class":42},[28,49966,34200],{"class":735},[28,49968,228],{"class":34},[28,49970,49971,49973,49975,49977,49979,49981,49983,49985,49987],{"class":30,"line":34316},[28,49972,34071],{"class":34},[28,49974,34074],{"class":735},[28,49976,34212],{"class":34},[28,49978,34105],{"class":735},[28,49980,90],{"class":34},[28,49982,34085],{"class":5704},[28,49984,83],{"class":42},[28,49986,34223],{"class":735},[28,49988,228],{"class":34},[28,49990,49991],{"class":30,"line":34335},[28,49992,34231],{"class":73},[28,49994,49996],{"class":30,"line":49995},219,[28,49997,34128],{"class":34},[28,49999,50001,50003,50005],{"class":30,"line":50000},220,[28,50002,34140],{"class":34},[28,50004,34074],{"class":735},[28,50006,228],{"class":34},[28,50008,50010,50012,50014],{"class":30,"line":50009},221,[28,50011,34151],{"class":34},[28,50013,34253],{"class":735},[28,50015,228],{"class":34},[28,50017,50019],{"class":30,"line":50018},222,[28,50020,34261],{"class":34},[28,50022,50024],{"class":30,"line":50023},223,[28,50025,2890],{"emptyLinePlaceholder":562},[28,50027,50029],{"class":30,"line":50028},224,[28,50030,34272],{"class":73},[28,50032,50034,50036,50038,50040,50042],{"class":30,"line":50033},225,[28,50035,2021],{"class":42},[28,50037,31701],{"class":38},[28,50039,3439],{"class":42},[28,50041,31706],{"class":735},[28,50043,4227],{"class":34},[28,50045,50047],{"class":30,"line":50046},226,[28,50048,34291],{"class":73},[28,50050,50052,50054,50056],{"class":30,"line":50051},227,[28,50053,45023],{"class":34},[28,50055,83],{"class":42},[28,50057,45028],{"class":34},[28,50059,50061,50063,50065],{"class":30,"line":50060},228,[28,50062,34308],{"class":34},[28,50064,83],{"class":42},[28,50066,34313],{"class":34},[28,50068,50070,50072,50074,50076,50078,50080,50082],{"class":30,"line":50069},229,[28,50071,33870],{"class":34},[28,50073,83],{"class":42},[28,50075,45045],{"class":34},[28,50077,34326],{"class":5704},[28,50079,83],{"class":42},[28,50081,1526],{"class":38},[28,50083,228],{"class":34},[28,50085,50087],{"class":30,"line":50086},230,[28,50088,34338],{"class":34},[22484,50090,50092],{"id":50091},"_242测试代码","2.4.2.测试代码",[14,50094,50095],{},"使用测试集进行测试与推理",[18,50097,50099],{"className":20,"code":50098,"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,50100,50101,50107,50117,50127,50138,50148,50152,50156,50164,50169,50173,50190,50194,50198,50202,50206,50210,50242,50246,50254,50258,50270,50274,50278,50282,50286,50290,50294,50298,50302,50320,50334,50338,50348,50358,50368,50374,50378,50382,50390,50394,50410,50418,50422,50426,50434,50442,50446,50450,50454,50458,50464,50468,50478,50486,50494,50498,50502,50506,50514,50518,50534,50538,50542,50546,50558,50562,50574,50578,50582,50594,50598,50608,50612,50616,50628,50632,50640,50644,50648,50656,50660,50668,50672,50676,50680,50684,50688,50704,50712,50716,50720,50738,50744,50748,50758,50766,50774,50778,50782,50786,50790,50798,50802,50818,50822,50830,50838],{"__ignoreMap":23},[28,50102,50103,50105],{"class":30,"line":31},[28,50104,536],{"class":42},[28,50106,30878],{"class":34},[28,50108,50109,50111,50113,50115],{"class":30,"line":77},[28,50110,536],{"class":42},[28,50112,31895],{"class":34},[28,50114,542],{"class":42},[28,50116,31900],{"class":34},[28,50118,50119,50121,50123,50125],{"class":30,"line":114},[28,50120,530],{"class":42},[28,50122,31878],{"class":34},[28,50124,536],{"class":42},[28,50126,31883],{"class":34},[28,50128,50129,50131,50133,50135],{"class":30,"line":128},[28,50130,530],{"class":42},[28,50132,31849],{"class":34},[28,50134,536],{"class":42},[28,50136,50137],{"class":34}," ImageFolder\n",[28,50139,50140,50142,50144,50146],{"class":30,"line":393},[28,50141,530],{"class":42},[28,50143,32393],{"class":34},[28,50145,536],{"class":42},[28,50147,45117],{"class":34},[28,50149,50150],{"class":30,"line":409},[28,50151,2890],{"emptyLinePlaceholder":562},[28,50153,50154],{"class":30,"line":1711},[28,50155,34428],{"class":73},[28,50157,50158,50160,50162],{"class":30,"line":1802},[28,50159,32426],{"class":42},[28,50161,34435],{"class":2453},[28,50163,32432],{"class":34},[28,50165,50166],{"class":30,"line":1808},[28,50167,50168],{"class":73},"   # 导入自己的数据集，并进行数据处理\n",[28,50170,50171],{"class":30,"line":1820},[28,50172,48438],{"class":73},[28,50174,50175,50177,50179,50181,50183,50185,50188],{"class":30,"line":2102},[28,50176,48443],{"class":38},[28,50178,83],{"class":42},[28,50180,1290],{"class":42},[28,50182,880],{"class":735},[28,50184,1179],{"class":38},[28,50186,50187],{"class":48454},"\u002Fdata\u002Ftest",[28,50189,25620],{"class":735},[28,50191,50192],{"class":30,"line":2107},[28,50193,2890],{"emptyLinePlaceholder":562},[28,50195,50196],{"class":30,"line":2113},[28,50197,48466],{"class":73},[28,50199,50200],{"class":30,"line":2118},[28,50201,48471],{"class":73},[28,50203,50204],{"class":30,"line":2132},[28,50205,48476],{"class":73},[28,50207,50208],{"class":30,"line":2137},[28,50209,48481],{"class":73},[28,50211,50212,50214,50216,50218,50220,50222,50224,50226,50228,50230,50232,50234,50236,50238,50240],{"class":30,"line":2143},[28,50213,48486],{"class":34},[28,50215,83],{"class":42},[28,50217,48491],{"class":34},[28,50219,48494],{"class":38},[28,50221,90],{"class":34},[28,50223,48499],{"class":38},[28,50225,90],{"class":34},[28,50227,48504],{"class":38},[28,50229,48507],{"class":34},[28,50231,48510],{"class":38},[28,50233,90],{"class":34},[28,50235,48515],{"class":38},[28,50237,90],{"class":34},[28,50239,48520],{"class":38},[28,50241,5145],{"class":34},[28,50243,50244],{"class":30,"line":2164},[28,50245,48527],{"class":73},[28,50247,50248,50250,50252],{"class":30,"line":2169},[28,50249,48532],{"class":34},[28,50251,83],{"class":42},[28,50253,48537],{"class":34},[28,50255,50256],{"class":30,"line":2183},[28,50257,48542],{"class":73},[28,50259,50260,50262,50264,50266,50268],{"class":30,"line":2188},[28,50261,48547],{"class":34},[28,50263,31980],{"class":38},[28,50265,90],{"class":34},[28,50267,31980],{"class":38},[28,50269,43099],{"class":34},[28,50271,50272],{"class":30,"line":2217},[28,50273,48560],{"class":73},[28,50275,50276],{"class":30,"line":2222},[28,50277,48565],{"class":34},[28,50279,50280],{"class":30,"line":2239},[28,50281,48570],{"class":34},[28,50283,50284],{"class":30,"line":2244},[28,50285,48575],{"class":73},[28,50287,50288],{"class":30,"line":2249},[28,50289,48580],{"class":73},[28,50291,50292],{"class":30,"line":2254},[28,50293,2890],{"emptyLinePlaceholder":562},[28,50295,50296],{"class":30,"line":2268},[28,50297,48589],{"class":73},[28,50299,50300],{"class":30,"line":2273},[28,50301,48594],{"class":73},[28,50303,50304,50306,50308,50310,50312,50314,50316,50318],{"class":30,"line":3067},[28,50305,34442],{"class":34},[28,50307,83],{"class":42},[28,50309,48603],{"class":34},[28,50311,48606],{"class":38},[28,50313,90],{"class":34},[28,50315,48611],{"class":5704},[28,50317,83],{"class":42},[28,50319,48616],{"class":34},[28,50321,50322,50324,50326,50328,50330,50332],{"class":30,"line":3081},[28,50323,34499],{"class":34},[28,50325,83],{"class":42},[28,50327,32013],{"class":34},[28,50329,32016],{"class":5704},[28,50331,83],{"class":42},[28,50333,34510],{"class":34},[28,50335,50336],{"class":30,"line":3089},[28,50337,34515],{"class":73},[28,50339,50340,50342,50344,50346],{"class":30,"line":3094},[28,50341,34520],{"class":5704},[28,50343,83],{"class":42},[28,50345,39],{"class":38},[28,50347,31945],{"class":34},[28,50349,50350,50352,50354,50356],{"class":30,"line":3100},[28,50351,34531],{"class":5704},[28,50353,83],{"class":42},[28,50355,31955],{"class":38},[28,50357,31945],{"class":34},[28,50359,50360,50362,50364,50366],{"class":30,"line":3106},[28,50361,34542],{"class":5704},[28,50363,83],{"class":42},[28,50365,822],{"class":38},[28,50367,228],{"class":34},[28,50369,50370,50372],{"class":30,"line":3111},[28,50371,4578],{"class":42},[28,50373,34555],{"class":34},[28,50375,50376],{"class":30,"line":8436},[28,50377,2890],{"emptyLinePlaceholder":562},[28,50379,50380],{"class":30,"line":8460},[28,50381,34564],{"class":73},[28,50383,50384,50386,50388],{"class":30,"line":8465},[28,50385,32426],{"class":42},[28,50387,34571],{"class":2453},[28,50389,34574],{"class":34},[28,50391,50392],{"class":30,"line":8471},[28,50393,34579],{"class":73},[28,50395,50396,50398,50400,50402,50404,50406,50408],{"class":30,"line":8498},[28,50397,31718],{"class":34},[28,50399,83],{"class":42},[28,50401,31725],{"class":735},[28,50403,2194],{"class":42},[28,50405,31730],{"class":34},[28,50407,2191],{"class":42},[28,50409,34596],{"class":735},[28,50411,50412,50414,50416],{"class":30,"line":8503},[28,50413,31770],{"class":34},[28,50415,83],{"class":42},[28,50417,32768],{"class":34},[28,50419,50420],{"class":30,"line":8509},[28,50421,2890],{"emptyLinePlaceholder":562},[28,50423,50424],{"class":30,"line":8521},[28,50425,34613],{"class":73},[28,50427,50428,50430,50432],{"class":30,"line":8533},[28,50429,34618],{"class":34},[28,50431,83],{"class":42},[28,50433,32821],{"class":38},[28,50435,50436,50438,50440],{"class":30,"line":8545},[28,50437,34627],{"class":34},[28,50439,83],{"class":42},[28,50441,3574],{"class":38},[28,50443,50444],{"class":30,"line":10202},[28,50445,2890],{"emptyLinePlaceholder":562},[28,50447,50448],{"class":30,"line":10227},[28,50449,34640],{"class":73},[28,50451,50452],{"class":30,"line":10250},[28,50453,34645],{"class":73},[28,50455,50456],{"class":30,"line":10274},[28,50457,34650],{"class":73},[28,50459,50460,50462],{"class":30,"line":10279},[28,50461,34655],{"class":42},[28,50463,33362],{"class":34},[28,50465,50466],{"class":30,"line":10284},[28,50467,34662],{"class":73},[28,50469,50470,50472,50474,50476],{"class":30,"line":10289},[28,50471,3891],{"class":42},[28,50473,34669],{"class":34},[28,50475,55],{"class":42},[28,50477,34674],{"class":34},[28,50479,50480,50482,50484],{"class":30,"line":10298},[28,50481,34679],{"class":34},[28,50483,83],{"class":42},[28,50485,34684],{"class":34},[28,50487,50488,50490,50492],{"class":30,"line":10303},[28,50489,34689],{"class":34},[28,50491,83],{"class":42},[28,50493,34694],{"class":34},[28,50495,50496],{"class":30,"line":10309},[28,50497,34699],{"class":73},[28,50499,50500],{"class":30,"line":10330},[28,50501,33353],{"class":34},[28,50503,50504],{"class":30,"line":10336},[28,50505,34708],{"class":73},[28,50507,50508,50510,50512],{"class":30,"line":10350},[28,50509,33138],{"class":34},[28,50511,83],{"class":42},[28,50513,34717],{"class":34},[28,50515,50516],{"class":30,"line":10356},[28,50517,34722],{"class":73},[28,50519,50520,50522,50524,50526,50528,50530,50532],{"class":30,"line":10383},[28,50521,33155],{"class":34},[28,50523,83],{"class":42},[28,50525,33160],{"class":34},[28,50527,33163],{"class":5704},[28,50529,83],{"class":42},[28,50531,39],{"class":38},[28,50533,228],{"class":34},[28,50535,50536],{"class":30,"line":10392},[28,50537,34743],{"class":73},[28,50539,50540],{"class":30,"line":10398},[28,50541,34748],{"class":73},[28,50543,50544],{"class":30,"line":10406},[28,50545,34753],{"class":73},[28,50547,50548,50550,50552,50554,50556],{"class":30,"line":10411},[28,50549,34758],{"class":34},[28,50551,9964],{"class":42},[28,50553,33265],{"class":34},[28,50555,3439],{"class":42},[28,50557,34767],{"class":34},[28,50559,50560],{"class":30,"line":17090},[28,50561,34772],{"class":73},[28,50563,50564,50566,50568,50570,50572],{"class":30,"line":17096},[28,50565,34777],{"class":34},[28,50567,9964],{"class":42},[28,50569,34782],{"class":34},[28,50571,822],{"class":38},[28,50573,228],{"class":34},[28,50575,50576],{"class":30,"line":17119},[28,50577,2890],{"emptyLinePlaceholder":562},[28,50579,50580],{"class":30,"line":17125},[28,50581,34795],{"class":73},[28,50583,50584,50586,50588,50590,50592],{"class":30,"line":17148},[28,50585,34800],{"class":34},[28,50587,83],{"class":42},[28,50589,34805],{"class":34},[28,50591,43],{"class":42},[28,50593,34810],{"class":34},[28,50595,50596],{"class":30,"line":17162},[28,50597,34815],{"class":73},[28,50599,50600,50602,50604,50606],{"class":30,"line":17182},[28,50601,32929],{"class":38},[28,50603,367],{"class":34},[28,50605,34824],{"class":735},[28,50607,34827],{"class":34},[28,50609,50610],{"class":30,"line":17188},[28,50611,2890],{"emptyLinePlaceholder":562},[28,50613,50614],{"class":30,"line":17199},[28,50615,34836],{"class":73},[28,50617,50618,50620,50622,50624,50626],{"class":30,"line":17222},[28,50619,2021],{"class":42},[28,50621,31701],{"class":38},[28,50623,3439],{"class":42},[28,50625,31706],{"class":735},[28,50627,4227],{"class":34},[28,50629,50630],{"class":30,"line":17244},[28,50631,34853],{"class":73},[28,50633,50634,50636,50638],{"class":30,"line":17249},[28,50635,31770],{"class":34},[28,50637,83],{"class":42},[28,50639,45028],{"class":34},[28,50641,50642],{"class":30,"line":17255},[28,50643,34866],{"class":73},[28,50645,50646],{"class":30,"line":17269},[28,50647,34871],{"class":73},[28,50649,50650,50652,50654],{"class":30,"line":17282},[28,50651,34876],{"class":34},[28,50653,34879],{"class":735},[28,50655,30980],{"class":34},[28,50657,50658],{"class":30,"line":17287},[28,50659,34886],{"class":73},[28,50661,50662,50664,50666],{"class":30,"line":17301},[28,50663,34499],{"class":34},[28,50665,83],{"class":42},[28,50667,34895],{"class":34},[28,50669,50670],{"class":30,"line":17306},[28,50671,34900],{"class":73},[28,50673,50674],{"class":30,"line":17312},[28,50675,34905],{"class":34},[28,50677,50678],{"class":30,"line":17317},[28,50679,2890],{"emptyLinePlaceholder":562},[28,50681,50682],{"class":30,"line":17331},[28,50683,34914],{"class":73},[28,50685,50686],{"class":30,"line":17336},[28,50687,34919],{"class":73},[28,50689,50690,50692,50694,50696,50698,50700,50702],{"class":30,"line":17341},[28,50691,31718],{"class":34},[28,50693,83],{"class":42},[28,50695,31725],{"class":735},[28,50697,2194],{"class":42},[28,50699,31730],{"class":34},[28,50701,2191],{"class":42},[28,50703,34596],{"class":735},[28,50705,50706,50708,50710],{"class":30,"line":17355},[28,50707,31770],{"class":34},[28,50709,83],{"class":42},[28,50711,32768],{"class":34},[28,50713,50714],{"class":30,"line":17367},[28,50715,34948],{"class":73},[28,50717,50718],{"class":30,"line":17372},[28,50719,34953],{"class":73},[28,50721,50722,50724,50726,50728,50731,50733,50736],{"class":30,"line":17385},[28,50723,34958],{"class":34},[28,50725,83],{"class":42},[28,50727,35],{"class":34},[28,50729,50730],{"class":735},"'猫'",[28,50732,90],{"class":34},[28,50734,50735],{"class":735},"'狗'",[28,50737,111],{"class":34},[28,50739,50740,50742],{"class":30,"line":17390},[28,50741,34655],{"class":42},[28,50743,33362],{"class":34},[28,50745,50746],{"class":30,"line":17395},[28,50747,35023],{"class":73},[28,50749,50750,50752,50754,50756],{"class":30,"line":17400},[28,50751,3891],{"class":42},[28,50753,35030],{"class":34},[28,50755,55],{"class":42},[28,50757,34674],{"class":34},[28,50759,50760,50762,50764],{"class":30,"line":17413},[28,50761,33088],{"class":34},[28,50763,83],{"class":42},[28,50765,33093],{"class":34},[28,50767,50768,50770,50772],{"class":30,"line":17418},[28,50769,33103],{"class":34},[28,50771,83],{"class":42},[28,50773,33108],{"class":34},[28,50775,50776],{"class":30,"line":33111},[28,50777,2890],{"emptyLinePlaceholder":562},[28,50779,50780],{"class":30,"line":33117},[28,50781,35059],{"class":73},[28,50783,50784],{"class":30,"line":33123},[28,50785,33353],{"class":34},[28,50787,50788],{"class":30,"line":33129},[28,50789,35068],{"class":73},[28,50791,50792,50794,50796],{"class":30,"line":33135},[28,50793,33138],{"class":34},[28,50795,83],{"class":42},[28,50797,33143],{"class":34},[28,50799,50800],{"class":30,"line":33146},[28,50801,35081],{"class":73},[28,50803,50804,50806,50808,50810,50812,50814,50816],{"class":30,"line":33152},[28,50805,33155],{"class":34},[28,50807,83],{"class":42},[28,50809,33160],{"class":34},[28,50811,33163],{"class":5704},[28,50813,83],{"class":42},[28,50815,39],{"class":38},[28,50817,228],{"class":34},[28,50819,50820],{"class":30,"line":33172},[28,50821,35102],{"class":73},[28,50823,50824,50826,50828],{"class":30,"line":33178},[28,50825,35107],{"class":34},[28,50827,83],{"class":42},[28,50829,35112],{"class":34},[28,50831,50832,50834,50836],{"class":30,"line":33189},[28,50833,35117],{"class":34},[28,50835,83],{"class":42},[28,50837,35122],{"class":34},[28,50839,50840,50842,50844,50846,50848,50850,50852,50854],{"class":30,"line":33195},[28,50841,35127],{"class":38},[28,50843,367],{"class":34},[28,50845,35132],{"class":735},[28,50847,35135],{"class":34},[28,50849,35138],{"class":735},[28,50851,90],{"class":34},[28,50853,35143],{"class":735},[28,50855,35146],{"class":34},[547,50857,50858],{},"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":77,"depth":77,"links":50860},[50861,50862,50863,50864],{"id":31074,"depth":114,"text":31075},{"id":38316,"depth":114,"text":38317},{"id":41749,"depth":114,"text":41750},{"id":45758,"depth":114,"text":45759},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31066,"description":559},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50871,"title":50872,"body":50873,"description":559,"extension":560,"meta":50880,"navigation":562,"path":50881,"seo":50882,"stem":50883,"__hash__":50884},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50874,"toc":50878},[50875],[10,50876,50872],{"id":50877},"_3yolo模型学习",{"title":23,"searchDepth":77,"depth":77,"links":50879},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50872,"description":559},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50886,"title":50887,"body":50888,"description":50895,"extension":560,"meta":50896,"navigation":562,"path":50898,"seo":50899,"stem":50900,"__hash__":50901},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50889,"toc":50893},[50890],[14,50891,50892],{},"yolo模型还未补充",{"title":23,"searchDepth":77,"depth":77,"links":50894},[],"深度学习学习",{"category":50897},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50887,"description":50895},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50903,"title":50904,"body":50905,"description":559,"extension":560,"meta":50930,"navigation":562,"path":50931,"seo":50932,"stem":50933,"__hash__":50934},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50906,"toc":50928},[50907,50910,50913,50918,50925],[10,50908,50904],{"id":50909},"_1工具",[14,50911,50912],{},"提示错误插件：有问题会提前报错",[14,50914,50915],{},[420,50916],{"alt":23,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50919,50920],{},[80,50921,50924],{"href":50922,"rel":50923},"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",[24351],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50926,50927],{},"alt键加上下箭头可以实现语句的移动",{"title":23,"searchDepth":77,"depth":77,"links":50929},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50904,"description":559},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50936,"title":50937,"body":50938,"description":559,"extension":560,"meta":53802,"navigation":562,"path":53803,"seo":53804,"stem":53805,"__hash__":53806},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50939,"toc":53753},[50940,50943,50947,50951,50956,50959,50964,50968,50975,50980,50987,50992,50999,51004,51008,51013,51016,51020,51025,51029,51034,51037,51040,51043,51046,51049,51052,51055,51058,51063,51068,51073,51077,51080,51083,51087,51092,51095,51103,51108,51125,51133,51138,51143,51148,51153,51158,51161,51166,51171,51175,51184,51189,51194,51198,51203,51206,51210,51215,51223,51228,51233,51236,51241,51246,51251,51254,51257,51260,51265,51270,51273,51278,51281,51286,51289,51292,51295,51300,51303,51306,51321,51326,51331,51336,51339,51342,51345,51359,51362,51367,51372,51375,51378,51381,51384,51387,51390,51393,51397,51401,51406,51410,51413,51418,51423,51426,51431,51434,51438,51443,51446,51449,51452,51455,51458,51461,51464,51467,51470,51474,51479,51484,51489,51492,51495,51499,51504,51507,51511,51514,51517,51522,51525,51528,51532,51536,51539,51544,51549,51552,51581,51586,51591,51596,51601,51605,51610,51614,51619,51622,51626,51630,51635,51639,51644,51649,51653,51658,51661,51663,51666,51671,51675,51680,51684,51688,51693,51698,51703,51708,51712,51717,51722,51727,51730,51733,51738,51741,51746,51751,51756,51761,51765,52572,52576,52919,52924,52927,52930,52933,52936,52939,52942,52945,52948,52950,52953,52955,52958,52962,52967,52970,52973,52976,52980,52985,52990,53010,53013,53017,53022,53027,53044,53048,53077,53081,53103,53105,53144,53152,53158,53162,53165,53168,53173,53178,53181,53184,53187,53192,53197,53200,53203,53206,53209,53212,53215,53218,53221,53224,53227,53230,53232,53235,53238,53241,53244,53247,53250,53253,53256,53260,53265,53268,53273,53276,53279,53282,53285,53288,53291,53294,53296,53299,53302,53305,53308,53311,53314,53318,53321,53330,53333,53338,53341,53346,53349,53352,53355,53358,53361,53364,53367,53371,53375,53378,53381,53386,53391,53396,53400,53405,53410,53413,53416,53419,53422,53425,53430,53433,53438,53440,53445,53448,53452,53457,53460,53463,53468,53472,53475,53480,53483,53486,53515,53520,53523,53526,53529,53532,53535,53539,53542,53628,53632,53635,53640,53645,53652,53655,53658,53661,53664,53667,53672,53677,53680,53683,53686,53689,53692,53695,53698,53701,53704,53706,53709,53713,53718,53723,53728,53731,53736,53741,53744,53747,53750],[10,50941,50937],{"id":50942},"_2基础语法",[60,50944,50946],{"id":50945},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[605,50948,50950],{"id":50949},"_211-js组成","2.1.1 js组成",[588,50952,50953],{},[591,50954,50955],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50957,50958],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[588,50960,50961],{"start":77},[591,50962,50963],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[605,50965,50967],{"id":50966},"_212-js书写位置","2.1.2 js书写位置",[588,50969,50970],{},[591,50971,50972],{},[780,50973,50974],{},"内部 JavaScript",[14,50976,50977],{},[420,50978],{"alt":23,"src":50979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[588,50981,50982],{"start":77},[591,50983,50984],{},[780,50985,50986],{},"外部 JavaScript",[14,50988,50989],{},[420,50990],{"alt":23,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[588,50993,50994],{"start":114},[591,50995,50996],{},[780,50997,50998],{},"内联 JavaScript",[14,51000,51001],{},[420,51002],{"alt":23,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[605,51005,51007],{"id":51006},"_213-javascript注释","2.1.3 JavaScript注释",[14,51009,51010],{},[420,51011],{"alt":23,"src":51012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,51014,51015],{},"alt+shift+a一定要记住！",[605,51017,51019],{"id":51018},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51021,51022],{},[420,51023],{"alt":23,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[605,51026,51028],{"id":51027},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[588,51030,51031],{},[591,51032,51033],{},"输出语法：",[14,51035,51036],{},"①document.write('要出的内容')",[14,51038,51039],{},"向body内输出内容；",[14,51041,51042],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51044,51045],{},"②alert('要出的内容')",[14,51047,51048],{},"页面弹出警告对话框",[14,51050,51051],{},"③console.log('控制台打印')",[14,51053,51054],{},"控制台输出语法，程序员调试使用",[14,51056,51057],{},"输入log就行，自动生成：",[14,51059,51060],{},[420,51061],{"alt":23,"src":51062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[588,51064,51065],{"start":77},[591,51066,51067],{},"输入语法：",[14,51069,51070],{},[420,51071],{"alt":23,"src":51072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[605,51074,51076],{"id":51075},"_2116-字面量","21.1.6 字面量",[14,51078,51079],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51081,51082],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[60,51084,51086],{"id":51085},"_22-变量","2.2 变量",[588,51088,51089],{},[591,51090,51091],{},"变量声明",[14,51093,51094],{},"let 变量名",[1626,51096,51097,51100],{},[591,51098,51099],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[591,51101,51102],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[588,51104,51105],{"start":77},[591,51106,51107],{},"变量赋值",[18,51109,51113],{"className":51110,"code":51111,"language":51112,"meta":23,"style":23},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[25,51114,51115,51120],{"__ignoreMap":23},[28,51116,51117],{"class":30,"line":31},[28,51118,51119],{"class":34},"let age\n",[28,51121,51122],{"class":30,"line":77},[28,51123,51124],{"class":34},"age=18\n",[588,51126,51127,51130],{"start":114},[591,51128,51129],{},"连这些（变量的初始化）：let age=18",[591,51131,51132],{},"更新变量",[14,51134,51135],{},[420,51136],{"alt":23,"src":51137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[588,51139,51140],{"start":393},[591,51141,51142],{},"声明多个变量",[14,51144,51145],{},[420,51146],{"alt":23,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[588,51149,51150],{"start":409},[591,51151,51152],{},"变量命名规则与规范",[14,51154,51155],{},[420,51156],{"alt":23,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51159,51160],{},"遵守小驼峰！",[588,51162,51163],{"start":1711},[591,51164,51165],{},"变量拓展-let和var的区别",[14,51167,51168],{},[420,51169],{"alt":23,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[60,51172,51174],{"id":51173},"_23-数组","2.3 数组",[18,51176,51178],{"className":51110,"code":51177,"language":51112,"meta":23,"style":23},"let arr = []\n",[25,51179,51180],{"__ignoreMap":23},[28,51181,51182],{"class":30,"line":31},[28,51183,51177],{"class":34},[14,51185,51186],{},[420,51187],{"alt":23,"src":51188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51190,51191],{},[420,51192],{"alt":23,"src":51193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[60,51195,51197],{"id":51196},"_24-常量","2.4 常量",[14,51199,51200],{},[420,51201],{"alt":23,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51204,51205],{},"const — 类似于 let ，但是变量的值无法被修改",[60,51207,51209],{"id":51208},"_25-数据类型","2.5 数据类型",[14,51211,51212],{},[420,51213],{"alt":23,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[588,51216,51217,51220],{},[591,51218,51219],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[591,51221,51222],{},"算数运算符：",[14,51224,51225],{},[420,51226],{"alt":23,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[588,51229,51230],{"start":114},[591,51231,51232],{},"数字类型（Number）",[14,51234,51235],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51237,51238],{},[420,51239],{"alt":23,"src":51240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[588,51242,51243],{"start":128},[591,51244,51245],{},"字符串类型（string）",[14,51247,51248],{},[420,51249],{"alt":23,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51252,51253],{},"反引号也是可以使用的",[14,51255,51256],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51258,51259],{},"例如：document.write(\"我今年\"+age+\"岁\")",[588,51261,51262],{"start":393},[591,51263,51264],{},"模板字符串",[14,51266,51267],{},[420,51268],{"alt":23,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51271,51272],{},"类似于python的字符串格式化",[588,51274,51275],{"start":409},[591,51276,51277],{},"布尔类型",[14,51279,51280],{},"true 和 false",[588,51282,51283],{"start":1711},[591,51284,51285],{},"未定义类型（underfined）",[14,51287,51288],{},"表示没有赋值",[14,51290,51291],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51293,51294],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[588,51296,51297],{"start":1802},[591,51298,51299],{},"null（空类型）",[14,51301,51302],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51304,51305],{},"赋值了，但是内容为空",[18,51307,51309],{"className":51110,"code":51308,"language":51112,"meta":23,"style":23},"typeof null\n输出的是'object'，是一个对象数据类型\n",[25,51310,51311,51316],{"__ignoreMap":23},[28,51312,51313],{"class":30,"line":31},[28,51314,51315],{"class":34},"typeof null\n",[28,51317,51318],{"class":30,"line":77},[28,51319,51320],{"class":34},"输出的是'object'，是一个对象数据类型\n",[588,51322,51323],{"start":1808},[591,51324,51325],{},"控制台检测数据类型",[14,51327,51328],{},[420,51329],{"alt":23,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[588,51332,51333],{"start":1820},[591,51334,51335],{},"类型转换",[14,51337,51338],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51340,51341],{},"转换方式：隐式转换和显示转换",[14,51343,51344],{},"①隐式转换",[1626,51346,51347,51350,51353,51356],{},[591,51348,51349],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[591,51351,51352],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[591,51354,51355],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[591,51357,51358],{},"任何数据和字符串相加结果都是字符串",[14,51360,51361],{},"②显示转换",[14,51363,51364],{},[420,51365],{"alt":23,"src":51366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51368,51369],{},[420,51370],{"alt":23,"src":51371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51373,51374],{},"在输入的时候要用好隐式转换，简单写起来",[14,51376,51377],{},"let num = +prompt(’请输入数字：‘)",[14,51379,51380],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51382,51383],{},"console.log(parseInt('12.333px'))",[14,51385,51386],{},"输出为：12",[14,51388,51389],{},"console.log(parseInt('a'a'a12.333px'))",[14,51391,51392],{},"输出：NaN",[60,51394,51396],{"id":51395},"_26-运算符","2.6 运算符",[605,51398,51400],{"id":51399},"_261-赋值运算符","2.6.1 赋值运算符",[14,51402,51403],{},[420,51404],{"alt":23,"src":51405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[605,51407,51409],{"id":51408},"_262-一元运算符","2.6.2 一元运算符",[14,51411,51412],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51414,51415],{},[420,51416],{"alt":23,"src":51417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51419,51420],{},[420,51421],{"alt":23,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51424,51425],{},"两者的区别：",[14,51427,51428],{},[420,51429],{"alt":23,"src":51430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51432,51433],{},"前置先自加；后置后加，代码执行完之后再加",[605,51435,51437],{"id":51436},"_263-比较运算符","2.6.3 比较运算符",[14,51439,51440],{},[420,51441],{"alt":23,"src":51442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51444,51445],{},"比较运算符也有隐式转换",[14,51447,51448],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51450,51451],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51453,51454],{},"要使用三等，开发的时候",[14,51456,51457],{},"NaN不等于任何人，包括它自己",[14,51459,51460],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51462,51463],{},"7\u002F10=0.7",[14,51465,51466],{},"最后：0.5+0.2=0.7",[14,51468,51469],{},"字符串比较，比较的是字符对应的ASCII码",[605,51471,51473],{"id":51472},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51475,51476],{},[420,51477],{"alt":23,"src":51478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51480,51481],{},[420,51482],{"alt":23,"src":51483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51485,51486],{},[420,51487],{"alt":23,"src":51488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51490,51491],{},"上述题目选D",[14,51493,51494],{},"与真2假1；或真1假2",[605,51496,51498],{"id":51497},"_265-运算符优先级","2.6.5 运算符优先级",[14,51500,51501],{},[420,51502],{"alt":23,"src":51503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51505,51506],{},"先算逻辑与，后算逻辑或",[60,51508,51510],{"id":51509},"_27-语句","2.7 语句",[14,51512,51513],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51515,51516],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51518,51519],{},[420,51520],{"alt":23,"src":51521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51523,51524],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51526,51527],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[605,51529,51531],{"id":51530},"_271-分支语句","2.7.1 分支语句",[22484,51533,51535],{"id":51534},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51537,51538],{},"if语句单行简单的话，可以不写{}，写在一行就行",[588,51540,51541],{},[591,51542,51543],{},"单分支语句",[14,51545,51546],{},[420,51547],{"alt":23,"src":51548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51550,51551],{},"除了0，所有数字都为真",[18,51553,51555],{"className":51110,"code":51554,"language":51112,"meta":23,"style":23},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[25,51556,51557,51562,51567,51572,51576],{"__ignoreMap":23},[28,51558,51559],{"class":30,"line":31},[28,51560,51561],{"class":34},"if（0) {\n",[28,51563,51564],{"class":30,"line":77},[28,51565,51566],{"class":34},"    let a=1\n",[28,51568,51569],{"class":30,"line":114},[28,51570,51571],{"class":34},"    alert(typeof a)\n",[28,51573,51574],{"class":30,"line":128},[28,51575,2055],{"class":34},[28,51577,51578],{"class":30,"line":393},[28,51579,51580],{"class":34},"不输出，括号为假\n",[588,51582,51583],{"start":77},[591,51584,51585],{},"双分支语句",[14,51587,51588],{},[420,51589],{"alt":23,"src":51590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[588,51592,51593],{"start":114},[591,51594,51595],{},"多分支语句",[14,51597,51598],{},[420,51599],{"alt":23,"src":51600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22484,51602,51604],{"id":51603},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51606,51607],{},[420,51608],{"alt":23,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22484,51611,51613],{"id":51612},"_2713-switch语句","2.7.1.3 switch语句",[14,51615,51616],{},[420,51617],{"alt":23,"src":51618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51620,51621],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[605,51623,51625],{"id":51624},"_272-循环语句","2.7.2 循环语句",[22484,51627,51629],{"id":51628},"_2721-断点演示","2.7.2.1 断点演示",[14,51631,51632],{},[420,51633],{"alt":23,"src":51634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22484,51636,51638],{"id":51637},"_2722-while循环","2.7.2.2 while循环",[14,51640,51641],{},[420,51642],{"alt":23,"src":51643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51645,51646],{},[420,51647],{"alt":23,"src":51648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22484,51650,51652],{"id":51651},"_2723-for循环","2.7.2.3 for循环",[14,51654,51655],{},[420,51656],{"alt":23,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51659,51660],{},"for(;;) {",[14,51662,1565],{},[14,51664,51665],{},"表示无限循环",[14,51667,51668],{},[420,51669],{"alt":23,"src":51670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22484,51672,51674],{"id":51673},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51676,51677],{},[420,51678],{"alt":23,"src":51679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[60,51681,51683],{"id":51682},"_28-数组","2.8 数组",[605,51685,51687],{"id":51686},"_281-基础认识","2.8.1 基础认识",[14,51689,51690],{},[420,51691],{"alt":23,"src":51692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51694,51695],{},[420,51696],{"alt":23,"src":51697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51699,51700],{},[420,51701],{"alt":23,"src":51702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51704,51705],{},[420,51706],{"alt":23,"src":51707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[605,51709,51711],{"id":51710},"_282-操作数组","2.8.2 操作数组",[14,51713,51714],{},[420,51715],{"alt":23,"src":51716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[588,51718,51719],{},[591,51720,51721],{},"添加元素",[14,51723,51724],{},[420,51725],{"alt":23,"src":51726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51728,51729],{},"console.log(arr.push('green'))",[14,51731,51732],{},"输出结果：为新数组的长度",[14,51734,51735],{},[420,51736],{"alt":23,"src":51737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51739,51740],{},"push用的非常多，一定要记住",[588,51742,51743],{},[591,51744,51745],{},"删除元素",[14,51747,51748],{},[420,51749],{"alt":23,"src":51750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51752,51753],{},[420,51754],{"alt":23,"src":51755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51757,51758],{},[420,51759],{"alt":23,"src":51760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[605,51762,51764],{"id":51763},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[18,51766,51768],{"className":51110,"code":51767,"language":51112,"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,51769,51770,51785,51801,51805,51814,51832,51856,51878,51892,51900,51907,51919,51930,51934,51938,51945,51957,51972,51985,52004,52021,52036,52048,52060,52072,52076,52080,52091,52101,52113,52125,52137,52148,52152,52156,52168,52172,52186,52190,52194,52205,52219,52231,52245,52249,52258,52267,52271,52280,52284,52293,52298,52303,52316,52344,52349,52354,52379,52384,52388,52393,52398,52413,52417,52422,52452,52464,52480,52496,52510,52515,52522,52526,52531,52544,52552,52560,52564],{"__ignoreMap":23},[28,51771,51772,51775,51779,51782],{"class":30,"line":31},[28,51773,51774],{"class":34},"\u003C!",[28,51776,51778],{"class":51777},"s9eBZ","DOCTYPE",[28,51780,51781],{"class":2453}," html",[28,51783,51784],{"class":34},">\n",[28,51786,51787,51789,51791,51794,51796,51799],{"class":30,"line":77},[28,51788,1529],{"class":34},[28,51790,51112],{"class":51777},[28,51792,51793],{"class":2453}," lang",[28,51795,83],{"class":34},[28,51797,51798],{"class":735},"\"en\"",[28,51800,51784],{"class":34},[28,51802,51803],{"class":30,"line":114},[28,51804,2890],{"emptyLinePlaceholder":562},[28,51806,51807,51809,51812],{"class":30,"line":128},[28,51808,1529],{"class":34},[28,51810,51811],{"class":51777},"head",[28,51813,51784],{"class":34},[28,51815,51816,51819,51822,51825,51827,51830],{"class":30,"line":393},[28,51817,51818],{"class":34},"    \u003C",[28,51820,51821],{"class":51777},"meta",[28,51823,51824],{"class":2453}," charset",[28,51826,83],{"class":34},[28,51828,51829],{"class":735},"\"UTF-8\"",[28,51831,51784],{"class":34},[28,51833,51834,51836,51838,51841,51843,51846,51849,51851,51854],{"class":30,"line":409},[28,51835,51818],{"class":34},[28,51837,51821],{"class":51777},[28,51839,51840],{"class":2453}," http-equiv",[28,51842,83],{"class":34},[28,51844,51845],{"class":735},"\"X-UA-Compatible\"",[28,51847,51848],{"class":2453}," content",[28,51850,83],{"class":34},[28,51852,51853],{"class":735},"\"IE=edge\"",[28,51855,51784],{"class":34},[28,51857,51858,51860,51862,51864,51866,51869,51871,51873,51876],{"class":30,"line":1711},[28,51859,51818],{"class":34},[28,51861,51821],{"class":51777},[28,51863,15406],{"class":2453},[28,51865,83],{"class":34},[28,51867,51868],{"class":735},"\"viewport\"",[28,51870,51848],{"class":2453},[28,51872,83],{"class":34},[28,51874,51875],{"class":735},"\"width=device-width, initial-scale=1.0\"",[28,51877,51784],{"class":34},[28,51879,51880,51882,51885,51888,51890],{"class":30,"line":1802},[28,51881,51818],{"class":34},[28,51883,51884],{"class":51777},"title",[28,51886,51887],{"class":34},">Document\u003C\u002F",[28,51889,51884],{"class":51777},[28,51891,51784],{"class":34},[28,51893,51894,51896,51898],{"class":30,"line":1808},[28,51895,51818],{"class":34},[28,51897,547],{"class":51777},[28,51899,51784],{"class":34},[28,51901,51902,51905],{"class":30,"line":1820},[28,51903,51904],{"class":51777},"        *",[28,51906,16058],{"class":34},[28,51908,51909,51912,51915,51917],{"class":30,"line":2102},[28,51910,51911],{"class":38},"            margin",[28,51913,51914],{"class":34},": ",[28,51916,822],{"class":38},[28,51918,1781],{"class":34},[28,51920,51921,51924,51926,51928],{"class":30,"line":2107},[28,51922,51923],{"class":38},"            padding",[28,51925,51914],{"class":34},[28,51927,822],{"class":38},[28,51929,1781],{"class":34},[28,51931,51932],{"class":30,"line":2113},[28,51933,3019],{"class":34},[28,51935,51936],{"class":30,"line":2118},[28,51937,2890],{"emptyLinePlaceholder":562},[28,51939,51940,51943],{"class":30,"line":2132},[28,51941,51942],{"class":2453},"        .box",[28,51944,16058],{"class":34},[28,51946,51947,51950,51952,51955],{"class":30,"line":2137},[28,51948,51949],{"class":38},"            display",[28,51951,51914],{"class":34},[28,51953,51954],{"class":38},"flex",[28,51956,1781],{"class":34},[28,51958,51959,51962,51964,51967,51970],{"class":30,"line":2143},[28,51960,51961],{"class":38},"            width",[28,51963,51914],{"class":34},[28,51965,51966],{"class":38},"700",[28,51968,51969],{"class":42},"px",[28,51971,1781],{"class":34},[28,51973,51974,51977,51979,51981,51983],{"class":30,"line":2164},[28,51975,51976],{"class":38},"            height",[28,51978,51914],{"class":34},[28,51980,4461],{"class":38},[28,51982,51969],{"class":42},[28,51984,1781],{"class":34},[28,51986,51987,51990,51992,51994,51996,51999,52002],{"class":30,"line":2169},[28,51988,51989],{"class":38},"            border-left",[28,51991,51914],{"class":34},[28,51993,39],{"class":38},[28,51995,51969],{"class":42},[28,51997,51998],{"class":38}," solid",[28,52000,52001],{"class":38}," pink",[28,52003,1781],{"class":34},[28,52005,52006,52009,52011,52013,52015,52017,52019],{"class":30,"line":2183},[28,52007,52008],{"class":38},"            border-bottom",[28,52010,51914],{"class":34},[28,52012,39],{"class":38},[28,52014,51969],{"class":42},[28,52016,51998],{"class":38},[28,52018,52001],{"class":38},[28,52020,1781],{"class":34},[28,52022,52023,52025,52027,52029,52031,52034],{"class":30,"line":2188},[28,52024,51911],{"class":38},[28,52026,51914],{"class":34},[28,52028,1276],{"class":38},[28,52030,51969],{"class":42},[28,52032,52033],{"class":38}," auto",[28,52035,1781],{"class":34},[28,52037,52038,52041,52043,52046],{"class":30,"line":2217},[28,52039,52040],{"class":38},"            justify-content",[28,52042,51914],{"class":34},[28,52044,52045],{"class":38},"space-around",[28,52047,1781],{"class":34},[28,52049,52050,52053,52055,52058],{"class":30,"line":2222},[28,52051,52052],{"class":38},"            align-items",[28,52054,51914],{"class":34},[28,52056,52057],{"class":38},"flex-end",[28,52059,1781],{"class":34},[28,52061,52062,52065,52067,52070],{"class":30,"line":2239},[28,52063,52064],{"class":38},"            text-align",[28,52066,51914],{"class":34},[28,52068,52069],{"class":38},"center",[28,52071,1781],{"class":34},[28,52073,52074],{"class":30,"line":2244},[28,52075,3019],{"class":34},[28,52077,52078],{"class":30,"line":2249},[28,52079,2890],{"emptyLinePlaceholder":562},[28,52081,52082,52084,52086,52089],{"class":30,"line":2254},[28,52083,51942],{"class":2453},[28,52085,1579],{"class":42},[28,52087,52088],{"class":51777},"div",[28,52090,16058],{"class":34},[28,52092,52093,52095,52097,52099],{"class":30,"line":2268},[28,52094,51949],{"class":38},[28,52096,51914],{"class":34},[28,52098,51954],{"class":38},[28,52100,1781],{"class":34},[28,52102,52103,52105,52107,52109,52111],{"class":30,"line":2273},[28,52104,51961],{"class":38},[28,52106,51914],{"class":34},[28,52108,1276],{"class":38},[28,52110,51969],{"class":42},[28,52112,1781],{"class":34},[28,52114,52115,52118,52120,52123],{"class":30,"line":3067},[28,52116,52117],{"class":38},"            background-color",[28,52119,51914],{"class":34},[28,52121,52122],{"class":38},"pink",[28,52124,1781],{"class":34},[28,52126,52127,52130,52132,52135],{"class":30,"line":3081},[28,52128,52129],{"class":38},"            flex-direction",[28,52131,51914],{"class":34},[28,52133,52134],{"class":38},"column",[28,52136,1781],{"class":34},[28,52138,52139,52141,52143,52146],{"class":30,"line":3089},[28,52140,52040],{"class":38},[28,52142,51914],{"class":34},[28,52144,52145],{"class":38},"space-between",[28,52147,1781],{"class":34},[28,52149,52150],{"class":30,"line":3094},[28,52151,3019],{"class":34},[28,52153,52154],{"class":30,"line":3100},[28,52155,2890],{"emptyLinePlaceholder":562},[28,52157,52158,52160,52163,52166],{"class":30,"line":3106},[28,52159,51942],{"class":2453},[28,52161,52162],{"class":51777}," div",[28,52164,52165],{"class":51777}," span",[28,52167,16058],{"class":34},[28,52169,52170],{"class":30,"line":3111},[28,52171,2890],{"emptyLinePlaceholder":562},[28,52173,52174,52177,52179,52182,52184],{"class":30,"line":8436},[28,52175,52176],{"class":38},"            margin-top",[28,52178,51914],{"class":34},[28,52180,52181],{"class":38},"-20",[28,52183,51969],{"class":42},[28,52185,1781],{"class":34},[28,52187,52188],{"class":30,"line":8460},[28,52189,3019],{"class":34},[28,52191,52192],{"class":30,"line":8465},[28,52193,2890],{"emptyLinePlaceholder":562},[28,52195,52196,52198,52200,52203],{"class":30,"line":8471},[28,52197,51942],{"class":2453},[28,52199,52162],{"class":51777},[28,52201,52202],{"class":51777}," h4",[28,52204,16058],{"class":34},[28,52206,52207,52210,52212,52215,52217],{"class":30,"line":8498},[28,52208,52209],{"class":38},"            margin-bottom",[28,52211,51914],{"class":34},[28,52213,52214],{"class":38},"-35",[28,52216,51969],{"class":42},[28,52218,1781],{"class":34},[28,52220,52221,52223,52225,52227,52229],{"class":30,"line":8503},[28,52222,51961],{"class":38},[28,52224,51914],{"class":34},[28,52226,982],{"class":38},[28,52228,51969],{"class":42},[28,52230,1781],{"class":34},[28,52232,52233,52236,52238,52241,52243],{"class":30,"line":8509},[28,52234,52235],{"class":38},"            margin-left",[28,52237,51914],{"class":34},[28,52239,52240],{"class":38},"-10",[28,52242,51969],{"class":42},[28,52244,1781],{"class":34},[28,52246,52247],{"class":30,"line":8521},[28,52248,3019],{"class":34},[28,52250,52251,52254,52256],{"class":30,"line":8533},[28,52252,52253],{"class":34},"    \u003C\u002F",[28,52255,547],{"class":51777},[28,52257,51784],{"class":34},[28,52259,52260,52263,52265],{"class":30,"line":8545},[28,52261,52262],{"class":34},"\u003C\u002F",[28,52264,51811],{"class":51777},[28,52266,51784],{"class":34},[28,52268,52269],{"class":30,"line":10202},[28,52270,2890],{"emptyLinePlaceholder":562},[28,52272,52273,52275,52278],{"class":30,"line":10227},[28,52274,1529],{"class":34},[28,52276,52277],{"class":51777},"body",[28,52279,51784],{"class":34},[28,52281,52282],{"class":30,"line":10250},[28,52283,2890],{"emptyLinePlaceholder":562},[28,52285,52286,52288,52291],{"class":30,"line":10274},[28,52287,51818],{"class":34},[28,52289,52290],{"class":51777},"script",[28,52292,51784],{"class":34},[28,52294,52295],{"class":30,"line":10279},[28,52296,52297],{"class":73},"        \u002F\u002F 1. 四次弹框效果\n",[28,52299,52300],{"class":30,"line":10284},[28,52301,52302],{"class":73},"        \u002F\u002F 声明一个新的数组\n",[28,52304,52305,52308,52311,52313],{"class":30,"line":10289},[28,52306,52307],{"class":42},"        let",[28,52309,52310],{"class":34}," arr ",[28,52312,83],{"class":42},[28,52314,52315],{"class":34}," []\n",[28,52317,52318,52320,52322,52325,52327,52329,52331,52333,52335,52338,52340,52342],{"class":30,"line":10298},[28,52319,3891],{"class":42},[28,52321,2148],{"class":34},[28,52323,52324],{"class":42},"let",[28,52326,52],{"class":34},[28,52328,83],{"class":42},[28,52330,25605],{"class":38},[28,52332,9932],{"class":34},[28,52334,2078],{"class":42},[28,52336,52337],{"class":38}," 4",[28,52339,3702],{"class":34},[28,52341,2782],{"class":42},[28,52343,12928],{"class":34},[28,52345,52346],{"class":30,"line":10303},[28,52347,52348],{"class":73},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[28,52350,52351],{"class":30,"line":10309},[28,52352,52353],{"class":73},"            \u002F\u002F arr.push(num)\n",[28,52355,52356,52359,52362,52364,52367,52369,52372,52374,52377],{"class":30,"line":10330},[28,52357,52358],{"class":34},"            arr.",[28,52360,52361],{"class":2453},"push",[28,52363,367],{"class":34},[28,52365,52366],{"class":2453},"prompt",[28,52368,367],{"class":34},[28,52370,52371],{"class":735},"`请输入第${",[28,52373,1066],{"class":34},[28,52375,52376],{"class":735},"}季度的数据:`",[28,52378,30980],{"class":34},[28,52380,52381],{"class":30,"line":10336},[28,52382,52383],{"class":73},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[28,52385,52386],{"class":30,"line":10350},[28,52387,3019],{"class":34},[28,52389,52390],{"class":30,"line":10356},[28,52391,52392],{"class":73},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[28,52394,52395],{"class":30,"line":10383},[28,52396,52397],{"class":73},"        \u002F\u002F 盒子开头\n",[28,52399,52400,52403,52406,52408,52411],{"class":30,"line":10392},[28,52401,52402],{"class":34},"        document.",[28,52404,52405],{"class":2453},"write",[28,52407,367],{"class":34},[28,52409,52410],{"class":735},"` \u003Cdiv class=\"box\">`",[28,52412,228],{"class":34},[28,52414,52415],{"class":30,"line":10398},[28,52416,2890],{"emptyLinePlaceholder":562},[28,52418,52419],{"class":30,"line":10406},[28,52420,52421],{"class":73},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[28,52423,52424,52426,52428,52430,52432,52434,52436,52438,52440,52443,52446,52448,52450],{"class":30,"line":10411},[28,52425,3891],{"class":42},[28,52427,2148],{"class":34},[28,52429,52324],{"class":42},[28,52431,52],{"class":34},[28,52433,83],{"class":42},[28,52435,4581],{"class":38},[28,52437,9932],{"class":34},[28,52439,1529],{"class":42},[28,52441,52442],{"class":34}," arr.",[28,52444,52445],{"class":38},"length",[28,52447,3702],{"class":34},[28,52449,2782],{"class":42},[28,52451,12928],{"class":34},[28,52453,52454,52457,52459,52461],{"class":30,"line":17090},[28,52455,52456],{"class":34},"            document.",[28,52458,52405],{"class":2453},[28,52460,367],{"class":34},[28,52462,52463],{"class":735},"`\n",[28,52465,52466,52469,52471,52473,52475,52477],{"class":30,"line":17096},[28,52467,52468],{"class":735},"              \u003Cdiv style=\"height: ${",[28,52470,4368],{"class":34},[28,52472,35],{"class":735},[28,52474,1066],{"class":34},[28,52476,1559],{"class":735},[28,52478,52479],{"class":735},"}px;\">\n",[28,52481,52482,52485,52487,52489,52491,52493],{"class":30,"line":17119},[28,52483,52484],{"class":735},"                \u003Cspan>${",[28,52486,4368],{"class":34},[28,52488,35],{"class":735},[28,52490,1066],{"class":34},[28,52492,1559],{"class":735},[28,52494,52495],{"class":735},"}\u003C\u002Fspan>\n",[28,52497,52498,52501,52503,52505,52507],{"class":30,"line":17125},[28,52499,52500],{"class":735},"                \u003Ch4>第${",[28,52502,1066],{"class":34},[28,52504,46043],{"class":42},[28,52506,25605],{"class":38},[28,52508,52509],{"class":735},"}季度\u003C\u002Fh4>\n",[28,52511,52512],{"class":30,"line":17148},[28,52513,52514],{"class":735},"              \u003C\u002Fdiv>          \n",[28,52516,52517,52520],{"class":30,"line":17162},[28,52518,52519],{"class":735},"            `",[28,52521,228],{"class":34},[28,52523,52524],{"class":30,"line":17182},[28,52525,3019],{"class":34},[28,52527,52528],{"class":30,"line":17188},[28,52529,52530],{"class":73},"        \u002F\u002F 盒子结尾\n",[28,52532,52533,52535,52537,52539,52542],{"class":30,"line":17199},[28,52534,52402],{"class":34},[28,52536,52405],{"class":2453},[28,52538,367],{"class":34},[28,52540,52541],{"class":735},"` \u003C\u002Fdiv>`",[28,52543,228],{"class":34},[28,52545,52546,52548,52550],{"class":30,"line":17222},[28,52547,52253],{"class":34},[28,52549,52290],{"class":51777},[28,52551,51784],{"class":34},[28,52553,52554,52556,52558],{"class":30,"line":17244},[28,52555,52262],{"class":34},[28,52557,52277],{"class":51777},[28,52559,51784],{"class":34},[28,52561,52562],{"class":30,"line":17249},[28,52563,2890],{"emptyLinePlaceholder":562},[28,52565,52566,52568,52570],{"class":30,"line":17255},[28,52567,52262],{"class":34},[28,52569,51112],{"class":51777},[28,52571,51784],{"class":34},[605,52573,52575],{"id":52574},"_284-冒泡排序","2.8.4 冒泡排序",[18,52577,52579],{"className":51110,"code":52578,"language":51112,"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,52580,52581,52591,52605,52609,52617,52632,52652,52664,52672,52676,52684,52692,52724,52757,52794,52799,52818,52823,52836,52851,52867,52871,52876,52880,52890,52899,52907,52911],{"__ignoreMap":23},[28,52582,52583,52585,52587,52589],{"class":30,"line":31},[28,52584,51774],{"class":34},[28,52586,51778],{"class":51777},[28,52588,51781],{"class":2453},[28,52590,51784],{"class":34},[28,52592,52593,52595,52597,52599,52601,52603],{"class":30,"line":77},[28,52594,1529],{"class":34},[28,52596,51112],{"class":51777},[28,52598,51793],{"class":2453},[28,52600,83],{"class":34},[28,52602,51798],{"class":735},[28,52604,51784],{"class":34},[28,52606,52607],{"class":30,"line":114},[28,52608,2890],{"emptyLinePlaceholder":562},[28,52610,52611,52613,52615],{"class":30,"line":128},[28,52612,1529],{"class":34},[28,52614,51811],{"class":51777},[28,52616,51784],{"class":34},[28,52618,52619,52622,52624,52626,52628,52630],{"class":30,"line":393},[28,52620,52621],{"class":34},"  \u003C",[28,52623,51821],{"class":51777},[28,52625,51824],{"class":2453},[28,52627,83],{"class":34},[28,52629,51829],{"class":735},[28,52631,51784],{"class":34},[28,52633,52634,52636,52638,52640,52642,52644,52646,52648,52650],{"class":30,"line":409},[28,52635,52621],{"class":34},[28,52637,51821],{"class":51777},[28,52639,15406],{"class":2453},[28,52641,83],{"class":34},[28,52643,51868],{"class":735},[28,52645,51848],{"class":2453},[28,52647,83],{"class":34},[28,52649,51875],{"class":735},[28,52651,51784],{"class":34},[28,52653,52654,52656,52658,52660,52662],{"class":30,"line":1711},[28,52655,52621],{"class":34},[28,52657,51884],{"class":51777},[28,52659,51887],{"class":34},[28,52661,51884],{"class":51777},[28,52663,51784],{"class":34},[28,52665,52666,52668,52670],{"class":30,"line":1802},[28,52667,52262],{"class":34},[28,52669,51811],{"class":51777},[28,52671,51784],{"class":34},[28,52673,52674],{"class":30,"line":1808},[28,52675,2890],{"emptyLinePlaceholder":562},[28,52677,52678,52680,52682],{"class":30,"line":1820},[28,52679,1529],{"class":34},[28,52681,52277],{"class":51777},[28,52683,51784],{"class":34},[28,52685,52686,52688,52690],{"class":30,"line":2102},[28,52687,52621],{"class":34},[28,52689,52290],{"class":51777},[28,52691,51784],{"class":34},[28,52693,52694,52697,52699,52701,52704,52706,52708,52710,52712,52714,52716,52718,52720,52722],{"class":30,"line":2107},[28,52695,52696],{"class":42},"    let",[28,52698,52310],{"class":34},[28,52700,83],{"class":42},[28,52702,52703],{"class":34}," [",[28,52705,108],{"class":38},[28,52707,12921],{"class":34},[28,52709,103],{"class":38},[28,52711,12921],{"class":34},[28,52713,98],{"class":38},[28,52715,12921],{"class":34},[28,52717,93],{"class":38},[28,52719,12921],{"class":34},[28,52721,39],{"class":38},[28,52723,111],{"class":34},[28,52725,52726,52728,52730,52732,52734,52736,52738,52740,52742,52744,52746,52749,52751,52753,52755],{"class":30,"line":2113},[28,52727,377],{"class":42},[28,52729,2148],{"class":34},[28,52731,52324],{"class":42},[28,52733,52],{"class":34},[28,52735,83],{"class":42},[28,52737,4581],{"class":38},[28,52739,9932],{"class":34},[28,52741,1529],{"class":42},[28,52743,52442],{"class":34},[28,52745,52445],{"class":38},[28,52747,52748],{"class":42}," -",[28,52750,25605],{"class":38},[28,52752,3702],{"class":34},[28,52754,2782],{"class":42},[28,52756,12928],{"class":34},[28,52758,52759,52762,52764,52766,52768,52770,52772,52774,52776,52778,52780,52782,52784,52786,52788,52790,52792],{"class":30,"line":2118},[28,52760,52761],{"class":42},"      for",[28,52763,2148],{"class":34},[28,52765,52324],{"class":42},[28,52767,380],{"class":34},[28,52769,83],{"class":42},[28,52771,4581],{"class":38},[28,52773,9993],{"class":34},[28,52775,1529],{"class":42},[28,52777,52442],{"class":34},[28,52779,52445],{"class":38},[28,52781,52748],{"class":42},[28,52783,52],{"class":34},[28,52785,445],{"class":42},[28,52787,25605],{"class":38},[28,52789,10000],{"class":34},[28,52791,2782],{"class":42},[28,52793,12928],{"class":34},[28,52795,52796],{"class":30,"line":2132},[28,52797,52798],{"class":73},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[28,52800,52801,52803,52806,52808,52811,52813,52815],{"class":30,"line":2137},[28,52802,2987],{"class":42},[28,52804,52805],{"class":34}," (arr[j] ",[28,52807,1579],{"class":42},[28,52809,52810],{"class":34}," arr[j ",[28,52812,1104],{"class":42},[28,52814,25605],{"class":38},[28,52816,52817],{"class":34},"]) {\n",[28,52819,52820],{"class":30,"line":2143},[28,52821,52822],{"class":73},"          \u002F\u002F 交换两个变量\n",[28,52824,52825,52828,52831,52833],{"class":30,"line":2164},[28,52826,52827],{"class":42},"          let",[28,52829,52830],{"class":34}," tmp ",[28,52832,83],{"class":42},[28,52834,52835],{"class":34}," arr[j]\n",[28,52837,52838,52841,52843,52845,52847,52849],{"class":30,"line":2169},[28,52839,52840],{"class":34},"          arr[j] ",[28,52842,83],{"class":42},[28,52844,52810],{"class":34},[28,52846,1104],{"class":42},[28,52848,25605],{"class":38},[28,52850,111],{"class":34},[28,52852,52853,52856,52858,52860,52862,52864],{"class":30,"line":2183},[28,52854,52855],{"class":34},"          arr[j ",[28,52857,1104],{"class":42},[28,52859,25605],{"class":38},[28,52861,4931],{"class":34},[28,52863,83],{"class":42},[28,52865,52866],{"class":34}," tmp\n",[28,52868,52869],{"class":30,"line":2188},[28,52870,3019],{"class":34},[28,52872,52873],{"class":30,"line":2217},[28,52874,52875],{"class":34},"      }\n",[28,52877,52878],{"class":30,"line":2222},[28,52879,2677],{"class":34},[28,52881,52882,52885,52887],{"class":30,"line":2239},[28,52883,52884],{"class":34},"    document.",[28,52886,52405],{"class":2453},[28,52888,52889],{"class":34},"(arr)\n",[28,52891,52892,52895,52897],{"class":30,"line":2244},[28,52893,52894],{"class":34},"  \u003C\u002F",[28,52896,52290],{"class":51777},[28,52898,51784],{"class":34},[28,52900,52901,52903,52905],{"class":30,"line":2249},[28,52902,52262],{"class":34},[28,52904,52277],{"class":51777},[28,52906,51784],{"class":34},[28,52908,52909],{"class":30,"line":2254},[28,52910,2890],{"emptyLinePlaceholder":562},[28,52912,52913,52915,52917],{"class":30,"line":2268},[28,52914,52262],{"class":34},[28,52916,51112],{"class":51777},[28,52918,51784],{"class":34},[14,52920,52921],{},[420,52922],{"alt":23,"src":52923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52925,52926],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52928,52929],{},"let arr = [4, 2, 5, 1, 3]",[14,52931,52932],{},"\u002F\u002F 1.升序排列写法",[14,52934,52935],{},"arr.sort(function (a, b) {",[14,52937,52938],{},"return a - b",[14,52940,52941],{},"})",[14,52943,52944],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52946,52947],{},"\u002F\u002F 降序排列写法",[14,52949,52935],{},[14,52951,52952],{},"return b - a",[14,52954,52941],{},[14,52956,52957],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[60,52959,52961],{"id":52960},"_29-函数","2.9 函数",[14,52963,52964],{},[420,52965],{"alt":23,"src":52966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52968,52969],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52971,52972],{},"函数的声明用function",[14,52974,52975],{},"函数里边可以嵌套函数",[605,52977,52979],{"id":52978},"_291-函数传参","2.9.1 函数传参",[14,52981,52982],{},[420,52983],{"alt":23,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52986,52987],{},[420,52988],{"alt":23,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1626,52991,52992,52995,52998,53001,53004,53007],{},[591,52993,52994],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[591,52996,52997],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[591,52999,53000],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[591,53002,53003],{},"开发中尽量保持形参和实参个数一致",[591,53005,53006],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[591,53008,53009],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,53011,53012],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[605,53014,53016],{"id":53015},"_292-函数的返回值","2.9.2 函数的返回值",[14,53018,53019],{},[420,53020],{"alt":23,"src":53021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53023,53024],{},[420,53025],{"alt":23,"src":53026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1626,53028,53029,53032,53035,53038,53041],{},[591,53030,53031],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[591,53033,53034],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[591,53036,53037],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[591,53039,53040],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[591,53042,53043],{},"断点调试:进入函数内部看执行过程F11",[605,53045,53047],{"id":53046},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[18,53049,53051],{"className":51110,"code":53050,"language":51112,"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,53052,53053,53058,53063,53067,53072],{"__ignoreMap":23},[28,53054,53055],{"class":30,"line":31},[28,53056,53057],{"class":34},"    function fn(a, b) {\n",[28,53059,53060],{"class":30,"line":77},[28,53061,53062],{"class":34},"      console.log(a + b);\n",[28,53064,53065],{"class":30,"line":114},[28,53066,2677],{"class":34},[28,53068,53069],{"class":30,"line":128},[28,53070,53071],{"class":34},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[28,53073,53074],{"class":30,"line":393},[28,53075,53076],{"class":34},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[605,53078,53080],{"id":53079},"_294-作用域","2.9.4 作用域",[1626,53082,53083,53089,53094,53097,53100],{},[591,53084,53085,53086],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[780,53087,53088],{},"作用域",[591,53090,53091],{},[780,53092,53093],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[591,53095,53096],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[591,53098,53099],{},"函数内部可以直接所使用全局变量",[591,53101,53102],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53104,15119],{},[18,53106,53108],{"className":51110,"code":53107,"language":51112,"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,53109,53110,53115,53120,53124,53129,53134,53139],{"__ignoreMap":23},[28,53111,53112],{"class":30,"line":31},[28,53113,53114],{"class":34},"    function fun() {\n",[28,53116,53117],{"class":30,"line":77},[28,53118,53119],{"class":34},"      num = 10\n",[28,53121,53122],{"class":30,"line":114},[28,53123,2677],{"class":34},[28,53125,53126],{"class":30,"line":128},[28,53127,53128],{"class":34},"    fun()\n",[28,53130,53131],{"class":30,"line":393},[28,53132,53133],{"class":34},"    console.log(num)\n",[28,53135,53136],{"class":30,"line":409},[28,53137,53138],{"class":34},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[28,53140,53141],{"class":30,"line":1711},[28,53142,53143],{"class":34},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1626,53145,53146,53149],{},[591,53147,53148],{},"函数内部的形参可以看做是局部变量",[591,53150,53151],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53153,53154,53155],{},"变量访问原则： ",[780,53156,53157],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[605,53159,53161],{"id":53160},"_295-匿名函数","2.9.5 匿名函数",[14,53163,53164],{},"函数可以分为具名函数和匿名函数",[14,53166,53167],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[588,53169,53170],{},[591,53171,53172],{},"函数表达式",[14,53174,53175],{},[420,53176],{"alt":23,"src":53177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53179,53180],{},"里边也可以写参数",[14,53182,53183],{},"具名函数调用位置可以随意调整；",[14,53185,53186],{},"匿名函数函数表达式形式只能在声明后才可以使用",[588,53188,53189],{"start":77},[591,53190,53191],{},"立即执行函数",[14,53193,53194],{},[420,53195],{"alt":23,"src":53196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53198,53199],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53201,53202],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53204,53205],{},"(function () {})();",[14,53207,53208],{},"不要落下最后的;",[14,53210,53211],{},"立即执行函数必须要加;",[14,53213,53214],{},"分号写前写后都没问题",[14,53216,53217],{},"写前：",[14,53219,53220],{},"(function() {})()",[14,53222,53223],{},";(function () {})();",[14,53225,53226],{},"写后:",[14,53228,53229],{},"(function() {})();",[14,53231,53205],{},[14,53233,53234],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53236,53237],{},"还有一种写法：",[14,53239,53240],{},"(function(){}());",[14,53242,53243],{},"或者:",[14,53245,53246],{},"!function(){}();",[14,53248,53249],{},"立即执行函数有时候也是可以加名字的：",[14,53251,53252],{},"(function flexible(window,document) {}(window,document));",[14,53254,53255],{},"省一些调用方法",[605,53257,53259],{"id":53258},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53261,53262],{},[420,53263],{"alt":23,"src":53264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53266,53267],{},"这样就不用非得给x,y初始化了",[14,53269,53270],{},[420,53271],{"alt":23,"src":53272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53274,53275],{},"代码执行时先看左边",[14,53277,53278],{},"例如：console.log(false && 3+5)",[14,53280,53281],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53283,53284],{},"&&都是真时，就返回最后一个真值",[14,53286,53287],{},"console.log(11 && 22)",[14,53289,53290],{},"输出22",[14,53292,53293],{},"逻辑与：遇真则真",[14,53295,15119],{},[14,53297,53298],{},"let age=1",[14,53300,53301],{},"console.log(11 || age++)",[14,53303,53304],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53306,53307],{},"console.log(11 || 22)",[14,53309,53310],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53312,53313],{},"||如果都是假的话，就取最后一个假的值了",[605,53315,53317],{"id":53316},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53319,53320],{},"显示转换：",[14,53322,53323,53326,53327],{},[780,53324,53325],{},"记忆","： ",[780,53328,53329],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53331,53332],{},"空字符串为假，其他字符串全为真",[14,53334,53335],{},[420,53336],{"alt":23,"src":53337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53339,53340],{},"隐式转换：",[14,53342,53343],{},[420,53344],{"alt":23,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53347,53348],{},"隐式转换:",[14,53350,53351],{},"null+3=3",[14,53353,53354],{},"undefined+3=NaN",[14,53356,53357],{},"null==undefined 输出true,他两个都当0看",[14,53359,53360],{},"null===undefined 输出false",[14,53362,53363],{},"undefined做任何操作都是NaN",[14,53365,53366],{},"NaN不等于NaN，NaN表示计算错误",[60,53368,53370],{"id":53369},"_210-对象","2.10 对象",[605,53372,53374],{"id":53373},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53376,53377],{},"对象也是一种数据类型，里边的数据是无序的",[14,53379,53380],{},"对象由属性和方法组成",[14,53382,53383],{},[420,53384],{"alt":23,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53387,53388],{},[420,53389],{"alt":23,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53392,53393],{},[420,53394],{"alt":23,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[605,53397,53399],{"id":53398},"_2102-对象属性","2.10.2 对象属性",[14,53401,53402],{},[420,53403],{"alt":23,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[588,53406,53407],{},[591,53408,53409],{},"查询对象",[14,53411,53412],{},"对象名.属性 goods.uname",[14,53414,53415],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53417,53418],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53420,53421],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53423,53424],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[588,53426,53427],{"start":77},[591,53428,53429],{},"重新赋值",[14,53431,53432],{},"对象名.属性=新值",[588,53434,53435],{"start":114},[591,53436,53437],{},"增加新数据",[14,53439,53432],{},[588,53441,53442],{"start":128},[591,53443,53444],{},"删除对象中的属性",[14,53446,53447],{},"delete 对象名.属性",[605,53449,53451],{"id":53450},"_2103-对象方法","2.10.3 对象方法",[14,53453,53454],{},[420,53455],{"alt":23,"src":53456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53458,53459],{},"后边跟的是匿名函数",[14,53461,53462],{},"对象外面的叫函数；对象内部的叫方法",[14,53464,53465],{},[420,53466],{"alt":23,"src":53467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[605,53469,53471],{"id":53470},"_2104-遍历对象","2.10.4 遍历对象",[14,53473,53474],{},"理解为加括号的python字典遍历",[14,53476,53477],{},[420,53478],{"alt":23,"src":53479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53481,53482],{},"k是字符串类型",[14,53484,53485],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[18,53487,53489],{"className":51110,"code":53488,"language":51112,"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,53490,53491,53496,53501,53506,53511],{"__ignoreMap":23},[28,53492,53493],{"class":30,"line":31},[28,53494,53495],{"class":34},"   let arr = [1, 2, 3]\n",[28,53497,53498],{"class":30,"line":77},[28,53499,53500],{"class":34},"    for (let k in arr) {\n",[28,53502,53503],{"class":30,"line":114},[28,53504,53505],{"class":34},"      console.log(k)\n",[28,53507,53508],{"class":30,"line":128},[28,53509,53510],{"class":34},"      console.log(arr[k])\n",[28,53512,53513],{"class":30,"line":393},[28,53514,2677],{"class":34},[14,53516,53517],{},[420,53518],{"alt":23,"src":53519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53521,53522],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53524,53525],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53527,53528],{},"for in 得到的k是属性名",[52290,53530,53531],{},"\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,53533,53534],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[605,53536,53538],{"id":53537},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53540,53541],{},"数组中放对象信息",[18,53543,53547],{"className":53544,"code":53545,"language":53546,"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,53548,53549,53557,53562,53567,53572,53577,53582,53587,53592,53597,53602,53607,53612,53616,53620],{"__ignoreMap":23},[28,53550,53551,53553,53555],{"class":30,"line":31},[28,53552,1529],{"class":34},[28,53554,52290],{"class":51777},[28,53556,51784],{"class":34},[28,53558,53559],{"class":30,"line":77},[28,53560,53561],{"class":34},"    let students = [\n",[28,53563,53564],{"class":30,"line":114},[28,53565,53566],{"class":34},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[28,53568,53569],{"class":30,"line":128},[28,53570,53571],{"class":34},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[28,53573,53574],{"class":30,"line":393},[28,53575,53576],{"class":34},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[28,53578,53579],{"class":30,"line":409},[28,53580,53581],{"class":34},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[28,53583,53584],{"class":30,"line":1711},[28,53585,53586],{"class":34},"    ]\n",[28,53588,53589],{"class":30,"line":1802},[28,53590,53591],{"class":34},"    for (let i = 0; i \u003C students.length; i++) {\n",[28,53593,53594],{"class":30,"line":1808},[28,53595,53596],{"class":34},"      for (let k in students[i]) {\n",[28,53598,53599],{"class":30,"line":1820},[28,53600,53601],{"class":34},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[28,53603,53604],{"class":30,"line":2102},[28,53605,53606],{"class":34},"        \u002F\u002F输出每个人的名字：\n",[28,53608,53609],{"class":30,"line":2107},[28,53610,53611],{"class":34},"        \u002F\u002Fconsole.log(students[i].name)\n",[28,53613,53614],{"class":30,"line":2113},[28,53615,52875],{"class":34},[28,53617,53618],{"class":30,"line":2118},[28,53619,2677],{"class":34},[28,53621,53622,53624,53626],{"class":30,"line":2132},[28,53623,52894],{"class":34},[28,53625,52290],{"class":51777},[28,53627,51784],{"class":34},[605,53629,53631],{"id":53630},"_2106-内置对象","2.10.6 内置对象",[14,53633,53634],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[588,53636,53637],{},[591,53638,53639],{},"数学对象Math",[14,53641,53642],{},[420,53643],{"alt":23,"src":53644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53646,53647],{},[80,53648,53651],{"href":53649,"rel":53650},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24351],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53653,53654],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53656,53657],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53659,53660],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53662,53663],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53665,53666],{},"null属于对象数据类型",[588,53668,53669],{"start":77},[591,53670,53671],{},"生成任意范围随机数",[14,53673,53674],{},[420,53675],{"alt":23,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53678,53679],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53681,53682],{},"乘以几就取不到几",[14,53684,53685],{},"取数组中的随机元素：",[14,53687,53688],{},"let arr = ['red', 'green', 'blue']",[14,53690,53691],{},"let random = Math.floor(Math.random() * arr.length)",[14,53693,53694],{},"console.log(arr[random])",[14,53696,53697],{},"这个函数得到的是全闭区间",[14,53699,53700],{},"function getRandom(N, M) {",[14,53702,53703],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53705,1565],{},[14,53707,53708],{},"console.log(getRandom(4, 8))",[605,53710,53712],{"id":53711},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53714,53715],{},[420,53716],{"alt":23,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53719,53720],{},[420,53721],{"alt":23,"src":53722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53724,53725],{},[420,53726],{"alt":23,"src":53727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53729,53730],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53732,53733],{},[420,53734],{"alt":23,"src":53735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53737,53738],{},[420,53739],{"alt":23,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53742,53743],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53745,53746],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53748,53749],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[547,53751,53752],{},"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":77,"depth":77,"links":53754},[53755,53763,53764,53765,53766,53767,53774,53778,53784,53793],{"id":50945,"depth":77,"text":50946,"children":53756},[53757,53758,53759,53760,53761,53762],{"id":50949,"depth":114,"text":50950},{"id":50966,"depth":114,"text":50967},{"id":51006,"depth":114,"text":51007},{"id":51018,"depth":114,"text":51019},{"id":51027,"depth":114,"text":51028},{"id":51075,"depth":114,"text":51076},{"id":51085,"depth":77,"text":51086},{"id":51173,"depth":77,"text":51174},{"id":51196,"depth":77,"text":51197},{"id":51208,"depth":77,"text":51209},{"id":51395,"depth":77,"text":51396,"children":53768},[53769,53770,53771,53772,53773],{"id":51399,"depth":114,"text":51400},{"id":51408,"depth":114,"text":51409},{"id":51436,"depth":114,"text":51437},{"id":51472,"depth":114,"text":51473},{"id":51497,"depth":114,"text":51498},{"id":51509,"depth":77,"text":51510,"children":53775},[53776,53777],{"id":51530,"depth":114,"text":51531},{"id":51624,"depth":114,"text":51625},{"id":51682,"depth":77,"text":51683,"children":53779},[53780,53781,53782,53783],{"id":51686,"depth":114,"text":51687},{"id":51710,"depth":114,"text":51711},{"id":51763,"depth":114,"text":51764},{"id":52574,"depth":114,"text":52575},{"id":52960,"depth":77,"text":52961,"children":53785},[53786,53787,53788,53789,53790,53791,53792],{"id":52978,"depth":114,"text":52979},{"id":53015,"depth":114,"text":53016},{"id":53046,"depth":114,"text":53047},{"id":53079,"depth":114,"text":53080},{"id":53160,"depth":114,"text":53161},{"id":53258,"depth":114,"text":53259},{"id":53316,"depth":114,"text":53317},{"id":53369,"depth":77,"text":53370,"children":53794},[53795,53796,53797,53798,53799,53800,53801],{"id":53373,"depth":114,"text":53374},{"id":53398,"depth":114,"text":53399},{"id":53450,"depth":114,"text":53451},{"id":53470,"depth":114,"text":53471},{"id":53537,"depth":114,"text":53538},{"id":53630,"depth":114,"text":53631},{"id":53711,"depth":114,"text":53712},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50937,"description":559},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53808,"title":53809,"body":53810,"description":559,"extension":560,"meta":77150,"navigation":562,"path":77151,"seo":77152,"stem":77153,"__hash__":77154},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53811,"toc":77090},[53812,53815,53818,53821,53826,53829,53832,53835,53839,53843,53849,53854,53862,53869,53872,53876,53881,53886,53891,53894,53897,53908,53911,53915,53918,53921,53926,53931,53936,53939,53942,54034,54037,54042,54045,54050,54053,54056,54061,54064,54069,54073,54076,54090,54094,54099,54102,54105,54109,54114,54117,54121,54125,54130,54134,54139,54142,54145,54148,54151,54154,54157,54162,54167,54195,54198,54201,54204,54209,54212,54215,54218,54221,54225,54254,54258,54263,54268,54271,54274,54277,54282,54397,54402,54407,54568,54573,54576,54580,54585,54590,54593,54596,54599,54602,54605,54608,54611,54614,54617,54620,54623,54626,54629,54632,54634,54637,54640,54643,54648,54652,55049,55052,55058,55062,55067,56349,56354,56357,56360,56363,56368,57564,57568,57574,57579,57582,57587,57592,57596,57600,57605,57608,57613,57616,57619,57623,58531,58534,58538,58759,58762,58765,58768,58994,58997,59221,59224,59228,59233,59236,59239,59467,59470,59503,59506,59510,59515,59519,59522,59525,59528,59531,59534,59537,59540,59545,60825,60829,60832,61925,61929,61932,61935,61938,61941,61945,61948,61951,61953,61961,63442,63446,63449,63452,63455,63664,63667,63671,63675,63680,63685,63688,63691,63696,63700,63705,63708,63817,63821,63826,63831,63834,63837,63841,63846,63851,63856,63859,63862,63873,63876,63881,63886,63889,63892,63965,63969,63974,63977,63979,63990,63994,63999,65325,65328,65331,65334,65336,65339,65342,65345,65348,65351,65354,65357,65360,65363,65366,65369,65372,65374,65376,65379,65383,66477,66480,66483,66499,66513,66516,66521,66527,66532,66536,66540,66545,66549,66554,66996,67001,67004,67008,67013,67016,67019,67023,67028,67032,67037,67042,67046,67051,67056,67059,67064,67069,67073,67078,67083,67187,67190,67194,67199,67565,67568,67571,67574,67577,67580,67583,67586,67589,68885,68889,68894,68899,68902,68905,68908,68911,68913,68918,68923,68926,68930,68935,68940,68945,68948,68951,68954,68957,68960,68965,68968,68972,68977,68982,68986,68991,68994,68999,69002,69005,69008,69011,69014,69019,69022,69025,69028,69031,69035,69040,69043,69047,69052,69055,69058,69062,69091,69094,69098,69102,69107,69111,69116,69119,69122,69125,69128,69131,69134,69137,69140,69143,69146,69149,69152,69155,69158,69162,69167,69172,69175,69179,69183,69188,69191,69195,69198,69201,69206,69211,69216,69221,69226,69229,69232,69237,69242,69246,69251,69254,69259,69262,69265,69268,69271,69276,69279,69288,69292,69297,69300,69303,69307,69310,69315,69319,69322,69328,69334,69338,69364,69367,70928,70931,71427,71430,71435,71440,71445,71449,71454,71459,71464,71468,71473,71476,71479,71482,71485,71489,71492,71497,71500,71505,71509,71514,71517,71522,71527,71532,71535,71538,71543,71548,71551,71554,71558,71561,71566,71569,71574,71577,71582,71587,71592,71595,71600,71665,71668,71679,71683,71688,71860,71864,71869,71872,71875,71878,71882,71893,71897,71900,71905,71910,71913,71916,71919,71922,71925,71927,71930,71933,71936,71941,71944,71949,71952,71956,71959,71962,71976,71980,71983,72038,72043,72046,72049,72054,72057,72061,72066,72196,72200,72205,72210,72291,72296,72300,72303,72308,72313,72319,72322,72325,72328,72332,72337,72340,72351,72355,72372,75419,75423,75426,75429,75432,75453,75457,75460,75468,75471,75476,75479,75482,75487,75492,75496,75517,75521,75526,75529,75532,75535,75538,75542,75547,75550,75554,75559,75562,75567,75570,75575,75578,75583,76786,76790,76795,76798,76803,77087],[10,53813,53809],{"id":53814},"_3web-apis",[14,53816,53817],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53819,53820],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53822,53823],{},[420,53824],{"alt":23,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53827,53828],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53830,53831],{},"建议数组和对象使用 const 来声明",[14,53833,53834],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[60,53836,53838],{"id":53837},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[605,53840,53842],{"id":53841},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53844,53845,53848],{},[25,53846,53847],{},"document"," = HTML 文件解析后的对象化表示；",[14,53850,53851,53853],{},[25,53852,53847],{}," ≠ HTML 文件本身",[14,53855,53856,53861],{},[780,53857,53858],{},[25,53859,53860],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53863,53864,53868],{},[780,53865,53866],{},[25,53867,53847],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53870,53871],{},"document实际上为window.document的简写",[605,53873,53875],{"id":53874},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53877,53878],{},[420,53879],{"alt":23,"src":53880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53882,53883],{},[420,53884],{"alt":23,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53887,53888],{},[420,53889],{"alt":23,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53892,53893],{},"console.dir()",[14,53895,53896],{},"dir用来打印对象",[1626,53898,53899,53902,53905],{},[591,53900,53901],{},"任何一个标签，都是一个对象",[591,53903,53904],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[591,53906,53907],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53909,53910],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[605,53912,53914],{"id":53913},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53916,53917],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53919,53920],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53922,53923],{},[780,53924,53925],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[588,53927,53928],{},[591,53929,53930],{},"利用CSS选择器来获取标签元素",[14,53932,53933],{},[420,53934],{"alt":23,"src":53935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53937,53938],{},"里边的选择器必须必须加引号！！！",[14,53940,53941],{},"只选择第一个元素",[18,53943,53945],{"className":53544,"code":53944,"language":53546,"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,53946,53947,53955,53976,53995,54003,54008,54013,54018,54026],{"__ignoreMap":23},[28,53948,53949,53951,53953],{"class":30,"line":31},[28,53950,1529],{"class":34},[28,53952,52277],{"class":51777},[28,53954,51784],{"class":34},[28,53956,53957,53959,53961,53964,53966,53969,53972,53974],{"class":30,"line":77},[28,53958,52621],{"class":34},[28,53960,52088],{"class":51777},[28,53962,53963],{"class":2453}," class",[28,53965,83],{"class":34},[28,53967,53968],{"class":735},"\"box\"",[28,53970,53971],{"class":34},">123\u003C\u002F",[28,53973,52088],{"class":51777},[28,53975,51784],{"class":34},[28,53977,53978,53980,53982,53984,53986,53988,53991,53993],{"class":30,"line":114},[28,53979,52621],{"class":34},[28,53981,52088],{"class":51777},[28,53983,53963],{"class":2453},[28,53985,83],{"class":34},[28,53987,53968],{"class":735},[28,53989,53990],{"class":34},">456\u003C\u002F",[28,53992,52088],{"class":51777},[28,53994,51784],{"class":34},[28,53996,53997,53999,54001],{"class":30,"line":128},[28,53998,52621],{"class":34},[28,54000,52290],{"class":51777},[28,54002,51784],{"class":34},[28,54004,54005],{"class":30,"line":393},[28,54006,54007],{"class":34},"    \u002F\u002F 1.获取匹配的第一个元素\n",[28,54009,54010],{"class":30,"line":409},[28,54011,54012],{"class":34},"    const box = document.querySelector('div')\n",[28,54014,54015],{"class":30,"line":1711},[28,54016,54017],{"class":34},"    console.dir(box)\n",[28,54019,54020,54022,54024],{"class":30,"line":1802},[28,54021,52894],{"class":34},[28,54023,52290],{"class":51777},[28,54025,51784],{"class":34},[28,54027,54028,54030,54032],{"class":30,"line":1808},[28,54029,52262],{"class":34},[28,54031,52277],{"class":51777},[28,54033,51784],{"class":34},[14,54035,54036],{},"只选123，不选456",[14,54038,54039],{},[420,54040],{"alt":23,"src":54041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54043,54044],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54046,54047],{},[420,54048],{"alt":23,"src":54049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54051,54052],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54054,54055],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[588,54057,54058],{"start":77},[591,54059,54060],{},"其他方法来获取标签元素",[14,54062,54063],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54065,54066],{},[420,54067],{"alt":23,"src":54068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[605,54070,54072],{"id":54071},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54074,54075],{},"设置修改DOM元素内容有两种方式：",[1626,54077,54078,54081,54084,54087],{},[591,54079,54080],{},"元素.innerText=''",[591,54082,54083],{},"元素.innerHTML=''",[591,54085,54086],{},"不写字符串输出数字也是可以的",[591,54088,54089],{},"元素.innerHtml=1",[22484,54091,54093],{"id":54092},"_3131-innertext","3.1.3.1 innerText",[14,54095,54096],{},[420,54097],{"alt":23,"src":54098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54100,54101],{},"思路：实现了修改盒子中的内容！",[14,54103,54104],{},"它只显示纯文本，不解析标签",[22484,54106,54108],{"id":54107},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54110,54111],{},[420,54112],{"alt":23,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54115,54116],{},"相比于innerText，他的强大之处在于可以解析标签",[605,54118,54120],{"id":54119},"_314-操作元素属性","3.1.4 操作元素属性",[22484,54122,54124],{"id":54123},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54126,54127],{},[420,54128],{"alt":23,"src":54129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22484,54131,54133],{"id":54132},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54135,54136],{},[420,54137],{"alt":23,"src":54138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54140,54141],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54143,54144],{},"div.style.backgroundColor = 'hotpink'",[14,54146,54147],{},"如果按照css的写法，-表示减，就会出错",[14,54149,54150],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54152,54153],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54155,54156],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54158,54159],{},[420,54160],{"alt":23,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54163,54164],{},[420,54165],{"alt":23,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[588,54168,54169,54172,54175,54178,54181,54184],{},[591,54170,54171],{},"className这个方式就是修改很多样式的时候来使用的！",[591,54173,54174],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[591,54176,54177],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[591,54179,54180],{},"className为属性名，如果还用class的话就导致与关键字冲突",[591,54182,54183],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[591,54185,54186,54187,54192],{},"解析标签的时候就变为了",[52088,54188],{"className":54189},[54190,54191],"nav","box",[54193,54194],"br",{},[14,54196,54197],{},"例子：",[52088,54199],{"className":54200},[54190],[52290,54202,54203],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54205,54206],{},[420,54207],{"alt":23,"src":54208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54210,54211],{},"追加和删除类名用classList",[14,54213,54214],{},"常用于类似于开关的操作",[14,54216,54217],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54219,54220],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22484,54222,54224],{"id":54223},"_3143-牢记点","3.1.4.3 牢记点",[588,54226,54227,54230,54233,54236,54239,54242,54245,54248,54251],{},[591,54228,54229],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[591,54231,54232],{},"使用style属性操作css时不要忘记引号",[591,54234,54235],{},"使用className或者classList时也不要忘记引号",[591,54237,54238],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[591,54240,54241],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[591,54243,54244],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[591,54246,54247],{},"若： let arr=['1','2',3] arr[0]=1",[591,54249,54250],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[591,54252,54253],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[605,54255,54257],{"id":54256},"_315-操作表单元素","3.1.5 操作表单元素",[588,54259,54260],{},[591,54261,54262],{},"天生的属性",[14,54264,54265],{},[420,54266],{"alt":23,"src":54267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54269,54270],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54272,54273],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54275,54276],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54278,54279],{},[420,54280],{"alt":23,"src":54281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[18,54283,54285],{"className":51110,"code":54284,"language":51112,"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,54286,54287,54292,54324,54329,54334,54339,54344,54348,54353,54358,54375,54387,54392],{"__ignoreMap":23},[28,54288,54289],{"class":30,"line":31},[28,54290,54291],{"class":34},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[28,54293,54294,54296,54299,54302,54304,54307,54309,54311,54313,54315,54317,54319,54322],{"class":30,"line":77},[28,54295,1529],{"class":34},[28,54297,54298],{"class":51777},"input",[28,54300,54301],{"class":2453}," type",[28,54303,83],{"class":34},[28,54305,54306],{"class":735},"\"checkbox\"",[28,54308,15406],{"class":2453},[28,54310,83],{"class":34},[28,54312,8140],{"class":735},[28,54314,15445],{"class":2453},[28,54316,83],{"class":34},[28,54318,8140],{"class":735},[28,54320,54321],{"class":2453}," checked",[28,54323,51784],{"class":34},[28,54325,54326],{"class":30,"line":114},[28,54327,54328],{"class":34},"不选的话：\n",[28,54330,54331],{"class":30,"line":128},[28,54332,54333],{"class":34},"const input = document.querySelector('input')\n",[28,54335,54336],{"class":30,"line":393},[28,54337,54338],{"class":34},"input.checked=false\n",[28,54340,54341],{"class":30,"line":409},[28,54342,54343],{"class":34},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[28,54345,54346],{"class":30,"line":1711},[28,54347,2890],{"emptyLinePlaceholder":562},[28,54349,54350],{"class":30,"line":1802},[28,54351,54352],{"class":34},"禁用按钮：\n",[28,54354,54355],{"class":30,"line":1808},[28,54356,54357],{"class":34},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[28,54359,54360,54362,54365,54368,54371,54373],{"class":30,"line":1820},[28,54361,1529],{"class":34},[28,54363,54364],{"class":51777},"button",[28,54366,54367],{"class":2453}," disabled",[28,54369,54370],{"class":34},">点击\u003C\u002F",[28,54372,54364],{"class":51777},[28,54374,51784],{"class":34},[28,54376,54377,54379,54381,54383,54385],{"class":30,"line":2102},[28,54378,1529],{"class":34},[28,54380,54364],{"class":51777},[28,54382,54370],{"class":34},[28,54384,54364],{"class":51777},[28,54386,51784],{"class":34},[28,54388,54389],{"class":30,"line":2107},[28,54390,54391],{"class":34},"const bt = document.querySelector('button')\n",[28,54393,54394],{"class":30,"line":2113},[28,54395,54396],{"class":34},"bt.disabled = false\n",[588,54398,54399],{"start":77},[591,54400,54401],{},"自定义属性",[14,54403,54404],{},[420,54405],{"alt":23,"src":54406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[18,54408,54410],{"className":53544,"code":54409,"language":53546,"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,54411,54412,54420,54448,54467,54486,54505,54524,54532,54537,54542,54547,54552,54560],{"__ignoreMap":23},[28,54413,54414,54416,54418],{"class":30,"line":31},[28,54415,1529],{"class":34},[28,54417,52277],{"class":51777},[28,54419,51784],{"class":34},[28,54421,54422,54424,54426,54429,54431,54433,54436,54438,54441,54444,54446],{"class":30,"line":77},[28,54423,52621],{"class":34},[28,54425,52088],{"class":51777},[28,54427,54428],{"class":2453}," data-id",[28,54430,83],{"class":34},[28,54432,4166],{"class":735},[28,54434,54435],{"class":2453}," data-spm",[28,54437,83],{"class":34},[28,54439,54440],{"class":735},"\"我不知道\"",[28,54442,54443],{"class":34},">1\u003C\u002F",[28,54445,52088],{"class":51777},[28,54447,51784],{"class":34},[28,54449,54450,54452,54454,54456,54458,54460,54463,54465],{"class":30,"line":114},[28,54451,52621],{"class":34},[28,54453,52088],{"class":51777},[28,54455,54428],{"class":2453},[28,54457,83],{"class":34},[28,54459,4189],{"class":735},[28,54461,54462],{"class":34},">2\u003C\u002F",[28,54464,52088],{"class":51777},[28,54466,51784],{"class":34},[28,54468,54469,54471,54473,54475,54477,54479,54482,54484],{"class":30,"line":128},[28,54470,52621],{"class":34},[28,54472,52088],{"class":51777},[28,54474,54428],{"class":2453},[28,54476,83],{"class":34},[28,54478,4202],{"class":735},[28,54480,54481],{"class":34},">3\u003C\u002F",[28,54483,52088],{"class":51777},[28,54485,51784],{"class":34},[28,54487,54488,54490,54492,54494,54496,54498,54501,54503],{"class":30,"line":393},[28,54489,52621],{"class":34},[28,54491,52088],{"class":51777},[28,54493,54428],{"class":2453},[28,54495,83],{"class":34},[28,54497,4215],{"class":735},[28,54499,54500],{"class":34},">4\u003C\u002F",[28,54502,52088],{"class":51777},[28,54504,51784],{"class":34},[28,54506,54507,54509,54511,54513,54515,54517,54520,54522],{"class":30,"line":409},[28,54508,52621],{"class":34},[28,54510,52088],{"class":51777},[28,54512,54428],{"class":2453},[28,54514,83],{"class":34},[28,54516,4236],{"class":735},[28,54518,54519],{"class":34},">5\u003C\u002F",[28,54521,52088],{"class":51777},[28,54523,51784],{"class":34},[28,54525,54526,54528,54530],{"class":30,"line":1711},[28,54527,52621],{"class":34},[28,54529,52290],{"class":51777},[28,54531,51784],{"class":34},[28,54533,54534],{"class":30,"line":1802},[28,54535,54536],{"class":34},"    const one = document.querySelector('div')\n",[28,54538,54539],{"class":30,"line":1808},[28,54540,54541],{"class":34},"    console.log(one.dataset)\n",[28,54543,54544],{"class":30,"line":1820},[28,54545,54546],{"class":34},"    console.log(one.dataset.id)\n",[28,54548,54549],{"class":30,"line":2102},[28,54550,54551],{"class":34},"    console.log(one.dataset.spm)\n",[28,54553,54554,54556,54558],{"class":30,"line":2107},[28,54555,52894],{"class":34},[28,54557,52290],{"class":51777},[28,54559,51784],{"class":34},[28,54561,54562,54564,54566],{"class":30,"line":2113},[28,54563,52262],{"class":34},[28,54565,52277],{"class":51777},[28,54567,51784],{"class":34},[14,54569,54570],{},[420,54571],{"alt":23,"src":54572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54574,54575],{},"document.querySelector选择的是第一个对象（元素）",[605,54577,54579],{"id":54578},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54581,54582],{},[420,54583],{"alt":23,"src":54584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54586,54587],{},[420,54588],{"alt":23,"src":54589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54591,54592],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52290,54594,54595],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54597,54598],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52290,54600,54601],{},"\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,54603,54604],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54606,54607],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54609,54610],{},"单位为毫秒！！！",[14,54612,54613],{},"可以搭配匿名函数来用！！！",[14,54615,54616],{},"setInterval(function () {",[14,54618,54619],{},"alert('两秒执行一次')",[14,54621,54622],{},"}, 2000)",[14,54624,54625],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54627,54628],{},"function fn() {",[14,54630,54631],{},"document.write(1)",[14,54633,1565],{},[14,54635,54636],{},"setInterval(fn, 1000)",[14,54638,54639],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54641,54642],{},"setInterval('fn()', 1000)",[14,54644,54645],{},[420,54646],{"alt":23,"src":54647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22484,54649,54651],{"id":54650},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[18,54653,54655],{"className":51110,"code":54654,"language":51112,"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,54656,54657,54667,54681,54685,54693,54707,54727,54739,54747,54751,54759,54796,54801,54806,54811,54819,54827,54849,54857,54862,54884,54889,54894,54905,54910,54930,54938,54953,54968,54979,54984,54994,55004,55008,55017,55021,55029,55037,55041],{"__ignoreMap":23},[28,54658,54659,54661,54663,54665],{"class":30,"line":31},[28,54660,51774],{"class":34},[28,54662,51778],{"class":51777},[28,54664,51781],{"class":2453},[28,54666,51784],{"class":34},[28,54668,54669,54671,54673,54675,54677,54679],{"class":30,"line":77},[28,54670,1529],{"class":34},[28,54672,51112],{"class":51777},[28,54674,51793],{"class":2453},[28,54676,83],{"class":34},[28,54678,51798],{"class":735},[28,54680,51784],{"class":34},[28,54682,54683],{"class":30,"line":114},[28,54684,2890],{"emptyLinePlaceholder":562},[28,54686,54687,54689,54691],{"class":30,"line":128},[28,54688,1529],{"class":34},[28,54690,51811],{"class":51777},[28,54692,51784],{"class":34},[28,54694,54695,54697,54699,54701,54703,54705],{"class":30,"line":393},[28,54696,52621],{"class":34},[28,54698,51821],{"class":51777},[28,54700,51824],{"class":2453},[28,54702,83],{"class":34},[28,54704,51829],{"class":735},[28,54706,51784],{"class":34},[28,54708,54709,54711,54713,54715,54717,54719,54721,54723,54725],{"class":30,"line":409},[28,54710,52621],{"class":34},[28,54712,51821],{"class":51777},[28,54714,15406],{"class":2453},[28,54716,83],{"class":34},[28,54718,51868],{"class":735},[28,54720,51848],{"class":2453},[28,54722,83],{"class":34},[28,54724,51875],{"class":735},[28,54726,51784],{"class":34},[28,54728,54729,54731,54733,54735,54737],{"class":30,"line":1711},[28,54730,52621],{"class":34},[28,54732,51884],{"class":51777},[28,54734,51887],{"class":34},[28,54736,51884],{"class":51777},[28,54738,51784],{"class":34},[28,54740,54741,54743,54745],{"class":30,"line":1802},[28,54742,52262],{"class":34},[28,54744,51811],{"class":51777},[28,54746,51784],{"class":34},[28,54748,54749],{"class":30,"line":1808},[28,54750,2890],{"emptyLinePlaceholder":562},[28,54752,54753,54755,54757],{"class":30,"line":1820},[28,54754,1529],{"class":34},[28,54756,52277],{"class":51777},[28,54758,51784],{"class":34},[28,54760,54761,54763,54766,54768,54770,54772,54774,54776,54778,54781,54783,54786,54789,54791,54794],{"class":30,"line":2102},[28,54762,52621],{"class":34},[28,54764,54765],{"class":51777},"textarea",[28,54767,15406],{"class":2453},[28,54769,83],{"class":34},[28,54771,8140],{"class":735},[28,54773,15445],{"class":2453},[28,54775,83],{"class":34},[28,54777,8140],{"class":735},[28,54779,54780],{"class":2453}," cols",[28,54782,83],{"class":34},[28,54784,54785],{"class":735},"\"30\"",[28,54787,54788],{"class":2453}," rows",[28,54790,83],{"class":34},[28,54792,54793],{"class":735},"\"10\"",[28,54795,51784],{"class":34},[28,54797,54798],{"class":30,"line":2107},[28,54799,54800],{"class":34},"        用户注册协议\n",[28,54802,54803],{"class":30,"line":2113},[28,54804,54805],{"class":34},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[28,54807,54808],{"class":30,"line":2118},[28,54809,54810],{"class":34},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[28,54812,54813,54815,54817],{"class":30,"line":2132},[28,54814,52253],{"class":34},[28,54816,54765],{"class":51777},[28,54818,51784],{"class":34},[28,54820,54821,54823,54825],{"class":30,"line":2137},[28,54822,52621],{"class":34},[28,54824,54193],{"class":51777},[28,54826,51784],{"class":34},[28,54828,54829,54831,54833,54835,54837,54840,54842,54845,54847],{"class":30,"line":2143},[28,54830,52621],{"class":34},[28,54832,54364],{"class":51777},[28,54834,53963],{"class":2453},[28,54836,83],{"class":34},[28,54838,54839],{"class":735},"\"btn\"",[28,54841,54367],{"class":2453},[28,54843,54844],{"class":34},">我已经阅读用户协议(5)\u003C\u002F",[28,54846,54364],{"class":51777},[28,54848,51784],{"class":34},[28,54850,54851,54853,54855],{"class":30,"line":2164},[28,54852,52621],{"class":34},[28,54854,52290],{"class":51777},[28,54856,51784],{"class":34},[28,54858,54859],{"class":30,"line":2169},[28,54860,54861],{"class":73},"    \u002F\u002F 1. 获取元素\n",[28,54863,54864,54866,54869,54871,54874,54877,54879,54882],{"class":30,"line":2183},[28,54865,11707],{"class":42},[28,54867,54868],{"class":38}," btn",[28,54870,14050],{"class":42},[28,54872,54873],{"class":34}," document.",[28,54875,54876],{"class":2453},"querySelector",[28,54878,367],{"class":34},[28,54880,54881],{"class":735},"'.btn'",[28,54883,228],{"class":34},[28,54885,54886],{"class":30,"line":2188},[28,54887,54888],{"class":73},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[28,54890,54891],{"class":30,"line":2217},[28,54892,54893],{"class":73},"    \u002F\u002F 2. 倒计时\n",[28,54895,54896,54898,54900,54902],{"class":30,"line":2222},[28,54897,52696],{"class":42},[28,54899,52],{"class":34},[28,54901,83],{"class":42},[28,54903,54904],{"class":38}," 5\n",[28,54906,54907],{"class":30,"line":2239},[28,54908,54909],{"class":73},"    \u002F\u002F 2.1 开启定时器\n",[28,54911,54912,54914,54917,54919,54922,54924,54927],{"class":30,"line":2244},[28,54913,52696],{"class":42},[28,54915,54916],{"class":34}," n ",[28,54918,83],{"class":42},[28,54920,54921],{"class":2453}," setInterval",[28,54923,367],{"class":34},[28,54925,54926],{"class":42},"function",[28,54928,54929],{"class":34}," () {\n",[28,54931,54932,54935],{"class":30,"line":2249},[28,54933,54934],{"class":34},"      i",[28,54936,54937],{"class":42},"--\n",[28,54939,54940,54943,54945,54948,54950],{"class":30,"line":2254},[28,54941,54942],{"class":34},"      btn.innerHTML ",[28,54944,83],{"class":42},[28,54946,54947],{"class":735}," `我已经阅读用户协议(${",[28,54949,1066],{"class":34},[28,54951,54952],{"class":735},"})`\n",[28,54954,54955,54958,54961,54964,54966],{"class":30,"line":2268},[28,54956,54957],{"class":42},"      if",[28,54959,54960],{"class":34}," (i ",[28,54962,54963],{"class":42},"===",[28,54965,4581],{"class":38},[28,54967,12928],{"class":34},[28,54969,54970,54973,54976],{"class":30,"line":2273},[28,54971,54972],{"class":2453},"        clearInterval",[28,54974,54975],{"class":34},"(n)  ",[28,54977,54978],{"class":73},"\u002F\u002F 关闭定时器\n",[28,54980,54981],{"class":30,"line":3067},[28,54982,54983],{"class":73},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[28,54985,54986,54989,54991],{"class":30,"line":3081},[28,54987,54988],{"class":34},"        btn.disabled ",[28,54990,83],{"class":42},[28,54992,54993],{"class":38}," false\n",[28,54995,54996,54999,55001],{"class":30,"line":3089},[28,54997,54998],{"class":34},"        btn.innerHTML ",[28,55000,83],{"class":42},[28,55002,55003],{"class":735}," '同意'\n",[28,55005,55006],{"class":30,"line":3094},[28,55007,52875],{"class":34},[28,55009,55010,55013,55015],{"class":30,"line":3100},[28,55011,55012],{"class":34},"    }, ",[28,55014,6898],{"class":38},[28,55016,228],{"class":34},[28,55018,55019],{"class":30,"line":3106},[28,55020,2890],{"emptyLinePlaceholder":562},[28,55022,55023,55025,55027],{"class":30,"line":3111},[28,55024,52894],{"class":34},[28,55026,52290],{"class":51777},[28,55028,51784],{"class":34},[28,55030,55031,55033,55035],{"class":30,"line":8436},[28,55032,52262],{"class":34},[28,55034,52277],{"class":51777},[28,55036,51784],{"class":34},[28,55038,55039],{"class":30,"line":8460},[28,55040,2890],{"emptyLinePlaceholder":562},[28,55042,55043,55045,55047],{"class":30,"line":8465},[28,55044,52262],{"class":34},[28,55046,51112],{"class":51777},[28,55048,51784],{"class":34},[14,55050,55051],{},"不要一直想着用死循环,避免死循环",[14,55053,55054,55057],{},[25,55055,55056],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22484,55059,55061],{"id":55060},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[588,55063,55064],{},[591,55065,55066],{},"法1",[18,55068,55070],{"className":51110,"code":55069,"language":51112,"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,55071,55072,55082,55096,55100,55108,55122,55142,55154,55162,55168,55179,55190,55194,55198,55205,55217,55221,55225,55232,55244,55258,55271,55285,55289,55293,55300,55311,55322,55333,55345,55357,55369,55373,55377,55385,55395,55408,55420,55433,55437,55441,55448,55458,55470,55482,55493,55504,55514,55526,55538,55542,55546,55555,55567,55579,55607,55620,55624,55628,55635,55646,55650,55658,55666,55670,55678,55692,55707,55731,55739,55754,55767,55775,55796,55808,55820,55832,55844,55856,55868,55880,55889,55897,55905,55913,55925,55948,55967,55986,56005,56024,56043,56062,56082,56086,56106,56125,56145,56166,56177,56194,56204,56214,56224,56229,56234,56239,56244,56269,56282,56286,56309,56313,56321,56329,56337,56341],{"__ignoreMap":23},[28,55073,55074,55076,55078,55080],{"class":30,"line":31},[28,55075,51774],{"class":34},[28,55077,51778],{"class":51777},[28,55079,51781],{"class":2453},[28,55081,51784],{"class":34},[28,55083,55084,55086,55088,55090,55092,55094],{"class":30,"line":77},[28,55085,1529],{"class":34},[28,55087,51112],{"class":51777},[28,55089,51793],{"class":2453},[28,55091,83],{"class":34},[28,55093,51798],{"class":735},[28,55095,51784],{"class":34},[28,55097,55098],{"class":30,"line":114},[28,55099,2890],{"emptyLinePlaceholder":562},[28,55101,55102,55104,55106],{"class":30,"line":128},[28,55103,1529],{"class":34},[28,55105,51811],{"class":51777},[28,55107,51784],{"class":34},[28,55109,55110,55112,55114,55116,55118,55120],{"class":30,"line":393},[28,55111,52621],{"class":34},[28,55113,51821],{"class":51777},[28,55115,51824],{"class":2453},[28,55117,83],{"class":34},[28,55119,51829],{"class":735},[28,55121,51784],{"class":34},[28,55123,55124,55126,55128,55130,55132,55134,55136,55138,55140],{"class":30,"line":409},[28,55125,52621],{"class":34},[28,55127,51821],{"class":51777},[28,55129,15406],{"class":2453},[28,55131,83],{"class":34},[28,55133,51868],{"class":735},[28,55135,51848],{"class":2453},[28,55137,83],{"class":34},[28,55139,51875],{"class":735},[28,55141,51784],{"class":34},[28,55143,55144,55146,55148,55150,55152],{"class":30,"line":1711},[28,55145,52621],{"class":34},[28,55147,51884],{"class":51777},[28,55149,51887],{"class":34},[28,55151,51884],{"class":51777},[28,55153,51784],{"class":34},[28,55155,55156,55158,55160],{"class":30,"line":1802},[28,55157,52621],{"class":34},[28,55159,547],{"class":51777},[28,55161,51784],{"class":34},[28,55163,55164,55166],{"class":30,"line":1808},[28,55165,6891],{"class":51777},[28,55167,16058],{"class":34},[28,55169,55170,55173,55175,55177],{"class":30,"line":1820},[28,55171,55172],{"class":38},"      padding",[28,55174,51914],{"class":34},[28,55176,822],{"class":38},[28,55178,1781],{"class":34},[28,55180,55181,55184,55186,55188],{"class":30,"line":2102},[28,55182,55183],{"class":38},"      margin",[28,55185,51914],{"class":34},[28,55187,822],{"class":38},[28,55189,1781],{"class":34},[28,55191,55192],{"class":30,"line":2107},[28,55193,2677],{"class":34},[28,55195,55196],{"class":30,"line":2113},[28,55197,2890],{"emptyLinePlaceholder":562},[28,55199,55200,55203],{"class":30,"line":2118},[28,55201,55202],{"class":51777},"    li",[28,55204,16058],{"class":34},[28,55206,55207,55210,55212,55215],{"class":30,"line":2132},[28,55208,55209],{"class":38},"      list-style",[28,55211,51914],{"class":34},[28,55213,55214],{"class":38},"none",[28,55216,1781],{"class":34},[28,55218,55219],{"class":30,"line":2137},[28,55220,2677],{"class":34},[28,55222,55223],{"class":30,"line":2143},[28,55224,2890],{"emptyLinePlaceholder":562},[28,55226,55227,55230],{"class":30,"line":2164},[28,55228,55229],{"class":2453},"    .box",[28,55231,16058],{"class":34},[28,55233,55234,55237,55239,55242],{"class":30,"line":2169},[28,55235,55236],{"class":38},"      position",[28,55238,51914],{"class":34},[28,55240,55241],{"class":38},"relative",[28,55243,1781],{"class":34},[28,55245,55246,55249,55251,55254,55256],{"class":30,"line":2183},[28,55247,55248],{"class":38},"      width",[28,55250,51914],{"class":34},[28,55252,55253],{"class":38},"976",[28,55255,51969],{"class":42},[28,55257,1781],{"class":34},[28,55259,55260,55263,55265,55267,55269],{"class":30,"line":2188},[28,55261,55262],{"class":38},"      height",[28,55264,51914],{"class":34},[28,55266,2029],{"class":38},[28,55268,51969],{"class":42},[28,55270,1781],{"class":34},[28,55272,55273,55275,55277,55279,55281,55283],{"class":30,"line":2217},[28,55274,55183],{"class":38},[28,55276,51914],{"class":34},[28,55278,938],{"class":38},[28,55280,51969],{"class":42},[28,55282,52033],{"class":38},[28,55284,1781],{"class":34},[28,55286,55287],{"class":30,"line":2222},[28,55288,2677],{"class":34},[28,55290,55291],{"class":30,"line":2239},[28,55292,2890],{"emptyLinePlaceholder":562},[28,55294,55295,55298],{"class":30,"line":2244},[28,55296,55297],{"class":2453},"    .slider-footer",[28,55299,16058],{"class":34},[28,55301,55302,55304,55306,55309],{"class":30,"line":2249},[28,55303,55236],{"class":38},[28,55305,51914],{"class":34},[28,55307,55308],{"class":38},"absolute",[28,55310,1781],{"class":34},[28,55312,55313,55316,55318,55320],{"class":30,"line":2254},[28,55314,55315],{"class":38},"      left",[28,55317,51914],{"class":34},[28,55319,822],{"class":38},[28,55321,1781],{"class":34},[28,55323,55324,55327,55329,55331],{"class":30,"line":2268},[28,55325,55326],{"class":38},"      bottom",[28,55328,51914],{"class":34},[28,55330,822],{"class":38},[28,55332,1781],{"class":34},[28,55334,55335,55337,55339,55341,55343],{"class":30,"line":2273},[28,55336,55248],{"class":38},[28,55338,51914],{"class":34},[28,55340,938],{"class":38},[28,55342,954],{"class":42},[28,55344,1781],{"class":34},[28,55346,55347,55349,55351,55353,55355],{"class":30,"line":3067},[28,55348,55262],{"class":38},[28,55350,51914],{"class":34},[28,55352,1196],{"class":38},[28,55354,954],{"class":42},[28,55356,1781],{"class":34},[28,55358,55359,55362,55364,55367],{"class":30,"line":3081},[28,55360,55361],{"class":38},"      background-color",[28,55363,51914],{"class":34},[28,55365,55366],{"class":38},"skyblue",[28,55368,1781],{"class":34},[28,55370,55371],{"class":30,"line":3089},[28,55372,2677],{"class":34},[28,55374,55375],{"class":30,"line":3094},[28,55376,2890],{"emptyLinePlaceholder":562},[28,55378,55379,55381,55383],{"class":30,"line":3100},[28,55380,55297],{"class":2453},[28,55382,7313],{"class":51777},[28,55384,16058],{"class":34},[28,55386,55387,55389,55391,55393],{"class":30,"line":3106},[28,55388,55236],{"class":38},[28,55390,51914],{"class":34},[28,55392,55308],{"class":38},[28,55394,1781],{"class":34},[28,55396,55397,55400,55402,55404,55406],{"class":30,"line":3111},[28,55398,55399],{"class":38},"      font-size",[28,55401,51914],{"class":34},[28,55403,1520],{"class":38},[28,55405,51969],{"class":42},[28,55407,1781],{"class":34},[28,55409,55410,55412,55414,55416,55418],{"class":30,"line":8436},[28,55411,55315],{"class":38},[28,55413,51914],{"class":34},[28,55415,1320],{"class":38},[28,55417,51969],{"class":42},[28,55419,1781],{"class":34},[28,55421,55422,55425,55427,55429,55431],{"class":30,"line":8460},[28,55423,55424],{"class":38},"      top",[28,55426,51914],{"class":34},[28,55428,108],{"class":38},[28,55430,51969],{"class":42},[28,55432,1781],{"class":34},[28,55434,55435],{"class":30,"line":8465},[28,55436,2677],{"class":34},[28,55438,55439],{"class":30,"line":8471},[28,55440,2890],{"emptyLinePlaceholder":562},[28,55442,55443,55446],{"class":30,"line":8498},[28,55444,55445],{"class":51777},"    ul",[28,55447,16058],{"class":34},[28,55449,55450,55452,55454,55456],{"class":30,"line":8503},[28,55451,55236],{"class":38},[28,55453,51914],{"class":34},[28,55455,55308],{"class":38},[28,55457,1781],{"class":34},[28,55459,55460,55462,55464,55466,55468],{"class":30,"line":8509},[28,55461,55424],{"class":38},[28,55463,51914],{"class":34},[28,55465,1401],{"class":38},[28,55467,51969],{"class":42},[28,55469,1781],{"class":34},[28,55471,55472,55474,55476,55478,55480],{"class":30,"line":8521},[28,55473,55315],{"class":38},[28,55475,51914],{"class":34},[28,55477,1320],{"class":38},[28,55479,51969],{"class":42},[28,55481,1781],{"class":34},[28,55483,55484,55487,55489,55491],{"class":30,"line":8533},[28,55485,55486],{"class":38},"      display",[28,55488,51914],{"class":34},[28,55490,51954],{"class":38},[28,55492,1781],{"class":34},[28,55494,55495,55498,55500,55502],{"class":30,"line":8545},[28,55496,55497],{"class":38},"      justify-content",[28,55499,51914],{"class":34},[28,55501,52145],{"class":38},[28,55503,1781],{"class":34},[28,55505,55506,55508,55510,55512],{"class":30,"line":10202},[28,55507,55236],{"class":38},[28,55509,51914],{"class":34},[28,55511,55308],{"class":38},[28,55513,1781],{"class":34},[28,55515,55516,55518,55520,55522,55524],{"class":30,"line":10227},[28,55517,55248],{"class":38},[28,55519,51914],{"class":34},[28,55521,4480],{"class":38},[28,55523,51969],{"class":42},[28,55525,1781],{"class":34},[28,55527,55528,55530,55532,55534,55536],{"class":30,"line":10250},[28,55529,55262],{"class":38},[28,55531,51914],{"class":34},[28,55533,1320],{"class":38},[28,55535,51969],{"class":42},[28,55537,1781],{"class":34},[28,55539,55540],{"class":30,"line":10274},[28,55541,2677],{"class":34},[28,55543,55544],{"class":30,"line":10279},[28,55545,2890],{"emptyLinePlaceholder":562},[28,55547,55548,55550,55553],{"class":30,"line":10284},[28,55549,55445],{"class":51777},[28,55551,55552],{"class":51777}," li",[28,55554,16058],{"class":34},[28,55556,55557,55559,55561,55563,55565],{"class":30,"line":10289},[28,55558,55248],{"class":38},[28,55560,51914],{"class":34},[28,55562,1320],{"class":38},[28,55564,51969],{"class":42},[28,55566,1781],{"class":34},[28,55568,55569,55571,55573,55575,55577],{"class":30,"line":10298},[28,55570,55262],{"class":38},[28,55572,51914],{"class":34},[28,55574,1320],{"class":38},[28,55576,51969],{"class":42},[28,55578,1781],{"class":34},[28,55580,55581,55583,55585,55588,55590,55592,55594,55596,55598,55600,55602,55605],{"class":30,"line":10303},[28,55582,55361],{"class":38},[28,55584,51914],{"class":34},[28,55586,55587],{"class":38},"rgba",[28,55589,367],{"class":34},[28,55591,822],{"class":38},[28,55593,12921],{"class":34},[28,55595,822],{"class":38},[28,55597,12921],{"class":34},[28,55599,822],{"class":38},[28,55601,12921],{"class":34},[28,55603,55604],{"class":38},".4",[28,55606,3209],{"class":34},[28,55608,55609,55612,55614,55616,55618],{"class":30,"line":10309},[28,55610,55611],{"class":38},"      border-radius",[28,55613,51914],{"class":34},[28,55615,225],{"class":38},[28,55617,51969],{"class":42},[28,55619,1781],{"class":34},[28,55621,55622],{"class":30,"line":10330},[28,55623,2677],{"class":34},[28,55625,55626],{"class":30,"line":10336},[28,55627,2890],{"emptyLinePlaceholder":562},[28,55629,55630,55633],{"class":30,"line":10350},[28,55631,55632],{"class":2453},"    .activate",[28,55634,16058],{"class":34},[28,55636,55637,55639,55641,55644],{"class":30,"line":10356},[28,55638,55361],{"class":38},[28,55640,51914],{"class":34},[28,55642,55643],{"class":38},"#f7f7f7",[28,55645,1781],{"class":34},[28,55647,55648],{"class":30,"line":10383},[28,55649,2677],{"class":34},[28,55651,55652,55654,55656],{"class":30,"line":10392},[28,55653,52894],{"class":34},[28,55655,547],{"class":51777},[28,55657,51784],{"class":34},[28,55659,55660,55662,55664],{"class":30,"line":10398},[28,55661,52262],{"class":34},[28,55663,51811],{"class":51777},[28,55665,51784],{"class":34},[28,55667,55668],{"class":30,"line":10406},[28,55669,2890],{"emptyLinePlaceholder":562},[28,55671,55672,55674,55676],{"class":30,"line":10411},[28,55673,1529],{"class":34},[28,55675,52277],{"class":51777},[28,55677,51784],{"class":34},[28,55679,55680,55682,55684,55686,55688,55690],{"class":30,"line":17090},[28,55681,52621],{"class":34},[28,55683,52088],{"class":51777},[28,55685,53963],{"class":2453},[28,55687,83],{"class":34},[28,55689,53968],{"class":735},[28,55691,51784],{"class":34},[28,55693,55694,55696,55698,55700,55702,55705],{"class":30,"line":17096},[28,55695,51818],{"class":34},[28,55697,52088],{"class":51777},[28,55699,53963],{"class":2453},[28,55701,83],{"class":34},[28,55703,55704],{"class":735},"\"slider-wrapper\"",[28,55706,51784],{"class":34},[28,55708,55709,55712,55714,55717,55719,55722,55725,55727,55729],{"class":30,"line":17119},[28,55710,55711],{"class":34},"      \u003C",[28,55713,420],{"class":51777},[28,55715,55716],{"class":2453}," src",[28,55718,83],{"class":34},[28,55720,55721],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,55723,55724],{"class":2453}," alt",[28,55726,83],{"class":34},[28,55728,8140],{"class":735},[28,55730,51784],{"class":34},[28,55732,55733,55735,55737],{"class":30,"line":17125},[28,55734,52253],{"class":34},[28,55736,52088],{"class":51777},[28,55738,51784],{"class":34},[28,55740,55741,55743,55745,55747,55749,55752],{"class":30,"line":17148},[28,55742,51818],{"class":34},[28,55744,52088],{"class":51777},[28,55746,53963],{"class":2453},[28,55748,83],{"class":34},[28,55750,55751],{"class":735},"\"slider-footer\"",[28,55753,51784],{"class":34},[28,55755,55756,55758,55760,55763,55765],{"class":30,"line":17162},[28,55757,55711],{"class":34},[28,55759,14],{"class":51777},[28,55761,55762],{"class":34},">对人类来说会不会太超前了?\u003C\u002F",[28,55764,14],{"class":51777},[28,55766,51784],{"class":34},[28,55768,55769,55771,55773],{"class":30,"line":17182},[28,55770,55711],{"class":34},[28,55772,1626],{"class":51777},[28,55774,51784],{"class":34},[28,55776,55777,55780,55782,55784,55786,55789,55792,55794],{"class":30,"line":17188},[28,55778,55779],{"class":34},"        \u003C",[28,55781,591],{"class":51777},[28,55783,53963],{"class":2453},[28,55785,83],{"class":34},[28,55787,55788],{"class":735},"\"activate\"",[28,55790,55791],{"class":34},">\u003C\u002F",[28,55793,591],{"class":51777},[28,55795,51784],{"class":34},[28,55797,55798,55800,55802,55804,55806],{"class":30,"line":17199},[28,55799,55779],{"class":34},[28,55801,591],{"class":51777},[28,55803,55791],{"class":34},[28,55805,591],{"class":51777},[28,55807,51784],{"class":34},[28,55809,55810,55812,55814,55816,55818],{"class":30,"line":17222},[28,55811,55779],{"class":34},[28,55813,591],{"class":51777},[28,55815,55791],{"class":34},[28,55817,591],{"class":51777},[28,55819,51784],{"class":34},[28,55821,55822,55824,55826,55828,55830],{"class":30,"line":17244},[28,55823,55779],{"class":34},[28,55825,591],{"class":51777},[28,55827,55791],{"class":34},[28,55829,591],{"class":51777},[28,55831,51784],{"class":34},[28,55833,55834,55836,55838,55840,55842],{"class":30,"line":17249},[28,55835,55779],{"class":34},[28,55837,591],{"class":51777},[28,55839,55791],{"class":34},[28,55841,591],{"class":51777},[28,55843,51784],{"class":34},[28,55845,55846,55848,55850,55852,55854],{"class":30,"line":17255},[28,55847,55779],{"class":34},[28,55849,591],{"class":51777},[28,55851,55791],{"class":34},[28,55853,591],{"class":51777},[28,55855,51784],{"class":34},[28,55857,55858,55860,55862,55864,55866],{"class":30,"line":17269},[28,55859,55779],{"class":34},[28,55861,591],{"class":51777},[28,55863,55791],{"class":34},[28,55865,591],{"class":51777},[28,55867,51784],{"class":34},[28,55869,55870,55872,55874,55876,55878],{"class":30,"line":17282},[28,55871,55779],{"class":34},[28,55873,591],{"class":51777},[28,55875,55791],{"class":34},[28,55877,591],{"class":51777},[28,55879,51784],{"class":34},[28,55881,55882,55885,55887],{"class":30,"line":17287},[28,55883,55884],{"class":34},"      \u003C\u002F",[28,55886,1626],{"class":51777},[28,55888,51784],{"class":34},[28,55890,55891,55893,55895],{"class":30,"line":17301},[28,55892,52253],{"class":34},[28,55894,52088],{"class":51777},[28,55896,51784],{"class":34},[28,55898,55899,55901,55903],{"class":30,"line":17306},[28,55900,52894],{"class":34},[28,55902,52088],{"class":51777},[28,55904,51784],{"class":34},[28,55906,55907,55909,55911],{"class":30,"line":17312},[28,55908,52621],{"class":34},[28,55910,52290],{"class":51777},[28,55912,51784],{"class":34},[28,55914,55915,55917,55920,55922],{"class":30,"line":17317},[28,55916,11707],{"class":42},[28,55918,55919],{"class":38}," arrImage",[28,55921,14050],{"class":42},[28,55923,55924],{"class":34}," [\n",[28,55926,55927,55930,55933,55936,55939,55942,55945],{"class":30,"line":17331},[28,55928,55929],{"class":34},"      { url: ",[28,55931,55932],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[28,55934,55935],{"class":34},", title: ",[28,55937,55938],{"class":735},"'对人类来说会不会太超前了?'",[28,55940,55941],{"class":34},", color: ",[28,55943,55944],{"class":735},"'rgba(100,67,68)'",[28,55946,55947],{"class":34}," },\n",[28,55949,55950,55952,55955,55957,55960,55962,55965],{"class":30,"line":17336},[28,55951,55929],{"class":34},[28,55953,55954],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[28,55956,55935],{"class":34},[28,55958,55959],{"class":735},"'开启剑与雪的黑暗传说!'",[28,55961,55941],{"class":34},[28,55963,55964],{"class":735},"'rgba(43,35,26)'",[28,55966,55947],{"class":34},[28,55968,55969,55971,55974,55976,55979,55981,55984],{"class":30,"line":17341},[28,55970,55929],{"class":34},[28,55972,55973],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[28,55975,55935],{"class":34},[28,55977,55978],{"class":735},"'真正的jo厨出现了!'",[28,55980,55941],{"class":34},[28,55982,55983],{"class":735},"'rgba(36,31,33)'",[28,55985,55947],{"class":34},[28,55987,55988,55990,55993,55995,55998,56000,56003],{"class":30,"line":17355},[28,55989,55929],{"class":34},[28,55991,55992],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[28,55994,55935],{"class":34},[28,55996,55997],{"class":735},"'李玉刚:让世界通过b站看到东方大国文化'",[28,55999,55941],{"class":34},[28,56001,56002],{"class":735},"'rgba(139,98,66)'",[28,56004,55947],{"class":34},[28,56006,56007,56009,56012,56014,56017,56019,56022],{"class":30,"line":17367},[28,56008,55929],{"class":34},[28,56010,56011],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[28,56013,55935],{"class":34},[28,56015,56016],{"class":735},"'快来分享你的寒假日常吧'",[28,56018,55941],{"class":34},[28,56020,56021],{"class":735},"'rgba(67,90,92)'",[28,56023,55947],{"class":34},[28,56025,56026,56028,56031,56033,56036,56038,56041],{"class":30,"line":17372},[28,56027,55929],{"class":34},[28,56029,56030],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[28,56032,55935],{"class":34},[28,56034,56035],{"class":735},"'哔哩哔哩小年YEAR'",[28,56037,55941],{"class":34},[28,56039,56040],{"class":735},"'rgba(166,131,143)'",[28,56042,55947],{"class":34},[28,56044,56045,56047,56050,56052,56055,56057,56060],{"class":30,"line":17385},[28,56046,55929],{"class":34},[28,56048,56049],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[28,56051,55935],{"class":34},[28,56053,56054],{"class":735},"'一站式解决你的电脑配置问题'",[28,56056,55941],{"class":34},[28,56058,56059],{"class":735},"'rgba(53,29,25)'",[28,56061,55947],{"class":34},[28,56063,56064,56066,56069,56071,56074,56076,56079],{"class":30,"line":17390},[28,56065,55929],{"class":34},[28,56067,56068],{"class":735},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[28,56070,55935],{"class":34},[28,56072,56073],{"class":735},"'谁不想和小猫咪贴贴呢?'",[28,56075,55941],{"class":34},[28,56077,56078],{"class":735},"'rgba(99,72,114)'",[28,56080,56081],{"class":34}," }\n",[28,56083,56084],{"class":30,"line":17395},[28,56085,53586],{"class":34},[28,56087,56088,56090,56093,56095,56097,56099,56101,56104],{"class":30,"line":17400},[28,56089,11707],{"class":42},[28,56091,56092],{"class":38}," img",[28,56094,14050],{"class":42},[28,56096,54873],{"class":34},[28,56098,54876],{"class":2453},[28,56100,367],{"class":34},[28,56102,56103],{"class":735},"'.slider-wrapper img'",[28,56105,228],{"class":34},[28,56107,56108,56110,56112,56114,56116,56118,56120,56123],{"class":30,"line":17413},[28,56109,11707],{"class":42},[28,56111,7313],{"class":38},[28,56113,14050],{"class":42},[28,56115,54873],{"class":34},[28,56117,54876],{"class":2453},[28,56119,367],{"class":34},[28,56121,56122],{"class":735},"'.slider-footer p'",[28,56124,228],{"class":34},[28,56126,56127,56129,56132,56134,56136,56138,56140,56143],{"class":30,"line":17418},[28,56128,11707],{"class":42},[28,56130,56131],{"class":38}," color",[28,56133,14050],{"class":42},[28,56135,54873],{"class":34},[28,56137,54876],{"class":2453},[28,56139,367],{"class":34},[28,56141,56142],{"class":735},"'.slider-footer'",[28,56144,228],{"class":34},[28,56146,56147,56149,56152,56154,56156,56159,56161,56164],{"class":30,"line":33111},[28,56148,11707],{"class":42},[28,56150,56151],{"class":38}," lis",[28,56153,14050],{"class":42},[28,56155,54873],{"class":34},[28,56157,56158],{"class":2453},"querySelectorAll",[28,56160,367],{"class":34},[28,56162,56163],{"class":735},"'.slider-footer ul li'",[28,56165,228],{"class":34},[28,56167,56168,56170,56172,56174],{"class":30,"line":33117},[28,56169,52696],{"class":42},[28,56171,52],{"class":34},[28,56173,83],{"class":42},[28,56175,56176],{"class":38}," 1\n",[28,56178,56179,56181,56184,56186,56188,56190,56192],{"class":30,"line":33123},[28,56180,52696],{"class":42},[28,56182,56183],{"class":34}," timer ",[28,56185,83],{"class":42},[28,56187,54921],{"class":2453},[28,56189,367],{"class":34},[28,56191,54926],{"class":42},[28,56193,54929],{"class":34},[28,56195,56196,56199,56201],{"class":30,"line":33129},[28,56197,56198],{"class":34},"      img.src ",[28,56200,83],{"class":42},[28,56202,56203],{"class":34}," arrImage[i].url\n",[28,56205,56206,56209,56211],{"class":30,"line":33135},[28,56207,56208],{"class":34},"      p.innerHTML ",[28,56210,83],{"class":42},[28,56212,56213],{"class":34}," arrImage[i].title\n",[28,56215,56216,56219,56221],{"class":30,"line":33146},[28,56217,56218],{"class":34},"      color.style.backgroundColor ",[28,56220,83],{"class":42},[28,56222,56223],{"class":34}," arrImage[i].color\n",[28,56225,56226],{"class":30,"line":33152},[28,56227,56228],{"class":73},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[28,56230,56231],{"class":30,"line":33172},[28,56232,56233],{"class":73},"      \u002F\u002F li.classList.add('activate')\n",[28,56235,56236],{"class":30,"line":33178},[28,56237,56238],{"class":73},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[28,56240,56241],{"class":30,"line":33189},[28,56242,56243],{"class":73},"      \u002F\u002F lis[i].classList.remove('activate')\n",[28,56245,56246,56249,56251,56253,56256,56259,56262,56264,56267],{"class":30,"line":33195},[28,56247,56248],{"class":34},"      document.",[28,56250,54876],{"class":2453},[28,56252,367],{"class":34},[28,56254,56255],{"class":735},"'.activate'",[28,56257,56258],{"class":34},")?.classList.",[28,56260,56261],{"class":2453},"toggle",[28,56263,367],{"class":34},[28,56265,56266],{"class":735},"'activate'",[28,56268,228],{"class":34},[28,56270,56271,56274,56276,56278,56280],{"class":30,"line":33201},[28,56272,56273],{"class":34},"      lis[i].classList.",[28,56275,5822],{"class":2453},[28,56277,367],{"class":34},[28,56279,56266],{"class":735},[28,56281,228],{"class":34},[28,56283,56284],{"class":30,"line":33207},[28,56285,2890],{"emptyLinePlaceholder":562},[28,56287,56288,56291,56293,56295,56297,56299,56301,56303,56306],{"class":30,"line":33213},[28,56289,56290],{"class":34},"      i ",[28,56292,83],{"class":42},[28,56294,54960],{"class":34},[28,56296,1104],{"class":42},[28,56298,25605],{"class":38},[28,56300,14200],{"class":34},[28,56302,954],{"class":42},[28,56304,56305],{"class":34}," arrImage.",[28,56307,56308],{"class":38},"length\n",[28,56310,56311],{"class":30,"line":33219},[28,56312,2890],{"emptyLinePlaceholder":562},[28,56314,56315,56317,56319],{"class":30,"line":33225},[28,56316,55012],{"class":34},[28,56318,6898],{"class":38},[28,56320,228],{"class":34},[28,56322,56323,56325,56327],{"class":30,"line":33231},[28,56324,52894],{"class":34},[28,56326,52290],{"class":51777},[28,56328,51784],{"class":34},[28,56330,56331,56333,56335],{"class":30,"line":33251},[28,56332,52262],{"class":34},[28,56334,52277],{"class":51777},[28,56336,51784],{"class":34},[28,56338,56339],{"class":30,"line":33257},[28,56340,2890],{"emptyLinePlaceholder":562},[28,56342,56343,56345,56347],{"class":30,"line":33273},[28,56344,52262],{"class":34},[28,56346,51112],{"class":51777},[28,56348,51784],{"class":34},[14,56350,56351],{},[420,56352],{"alt":23,"src":56353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56355,56356],{},"?.就是短路保护,确保输出正常进行",[14,56358,56359],{},"不要忘记取余%,有时候可以用",[14,56361,56362],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[588,56364,56365],{"start":77},[591,56366,56367],{},"法2",[18,56369,56371],{"className":51110,"code":56370,"language":51112,"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,56372,56373,56383,56397,56401,56409,56423,56443,56455,56463,56469,56479,56489,56493,56497,56503,56513,56517,56521,56527,56537,56549,56561,56575,56579,56583,56589,56599,56609,56619,56631,56643,56653,56657,56661,56669,56679,56691,56703,56715,56719,56723,56729,56739,56751,56763,56773,56783,56793,56805,56817,56821,56825,56833,56845,56857,56883,56895,56899,56903,56909,56919,56923,56931,56939,56943,56951,56965,56979,56999,57007,57021,57033,57041,57059,57071,57083,57095,57107,57119,57131,57143,57151,57159,57167,57175,57186,57202,57218,57234,57250,57266,57282,57298,57314,57318,57323,57341,57359,57369,57374,57379,57390,57396,57411,57420,57424,57429,57438,57443,57452,57457,57462,57467,57490,57520,57524,57532,57536,57544,57552,57556],{"__ignoreMap":23},[28,56374,56375,56377,56379,56381],{"class":30,"line":31},[28,56376,51774],{"class":34},[28,56378,51778],{"class":51777},[28,56380,51781],{"class":2453},[28,56382,51784],{"class":34},[28,56384,56385,56387,56389,56391,56393,56395],{"class":30,"line":77},[28,56386,1529],{"class":34},[28,56388,51112],{"class":51777},[28,56390,51793],{"class":2453},[28,56392,83],{"class":34},[28,56394,51798],{"class":735},[28,56396,51784],{"class":34},[28,56398,56399],{"class":30,"line":114},[28,56400,2890],{"emptyLinePlaceholder":562},[28,56402,56403,56405,56407],{"class":30,"line":128},[28,56404,1529],{"class":34},[28,56406,51811],{"class":51777},[28,56408,51784],{"class":34},[28,56410,56411,56413,56415,56417,56419,56421],{"class":30,"line":393},[28,56412,52621],{"class":34},[28,56414,51821],{"class":51777},[28,56416,51824],{"class":2453},[28,56418,83],{"class":34},[28,56420,51829],{"class":735},[28,56422,51784],{"class":34},[28,56424,56425,56427,56429,56431,56433,56435,56437,56439,56441],{"class":30,"line":409},[28,56426,52621],{"class":34},[28,56428,51821],{"class":51777},[28,56430,15406],{"class":2453},[28,56432,83],{"class":34},[28,56434,51868],{"class":735},[28,56436,51848],{"class":2453},[28,56438,83],{"class":34},[28,56440,51875],{"class":735},[28,56442,51784],{"class":34},[28,56444,56445,56447,56449,56451,56453],{"class":30,"line":1711},[28,56446,52621],{"class":34},[28,56448,51884],{"class":51777},[28,56450,51887],{"class":34},[28,56452,51884],{"class":51777},[28,56454,51784],{"class":34},[28,56456,56457,56459,56461],{"class":30,"line":1802},[28,56458,52621],{"class":34},[28,56460,547],{"class":51777},[28,56462,51784],{"class":34},[28,56464,56465,56467],{"class":30,"line":1808},[28,56466,6891],{"class":51777},[28,56468,16058],{"class":34},[28,56470,56471,56473,56475,56477],{"class":30,"line":1820},[28,56472,55172],{"class":38},[28,56474,51914],{"class":34},[28,56476,822],{"class":38},[28,56478,1781],{"class":34},[28,56480,56481,56483,56485,56487],{"class":30,"line":2102},[28,56482,55183],{"class":38},[28,56484,51914],{"class":34},[28,56486,822],{"class":38},[28,56488,1781],{"class":34},[28,56490,56491],{"class":30,"line":2107},[28,56492,2677],{"class":34},[28,56494,56495],{"class":30,"line":2113},[28,56496,2890],{"emptyLinePlaceholder":562},[28,56498,56499,56501],{"class":30,"line":2118},[28,56500,55202],{"class":51777},[28,56502,16058],{"class":34},[28,56504,56505,56507,56509,56511],{"class":30,"line":2132},[28,56506,55209],{"class":38},[28,56508,51914],{"class":34},[28,56510,55214],{"class":38},[28,56512,1781],{"class":34},[28,56514,56515],{"class":30,"line":2137},[28,56516,2677],{"class":34},[28,56518,56519],{"class":30,"line":2143},[28,56520,2890],{"emptyLinePlaceholder":562},[28,56522,56523,56525],{"class":30,"line":2164},[28,56524,55229],{"class":2453},[28,56526,16058],{"class":34},[28,56528,56529,56531,56533,56535],{"class":30,"line":2169},[28,56530,55236],{"class":38},[28,56532,51914],{"class":34},[28,56534,55241],{"class":38},[28,56536,1781],{"class":34},[28,56538,56539,56541,56543,56545,56547],{"class":30,"line":2183},[28,56540,55248],{"class":38},[28,56542,51914],{"class":34},[28,56544,55253],{"class":38},[28,56546,51969],{"class":42},[28,56548,1781],{"class":34},[28,56550,56551,56553,56555,56557,56559],{"class":30,"line":2188},[28,56552,55262],{"class":38},[28,56554,51914],{"class":34},[28,56556,2029],{"class":38},[28,56558,51969],{"class":42},[28,56560,1781],{"class":34},[28,56562,56563,56565,56567,56569,56571,56573],{"class":30,"line":2217},[28,56564,55183],{"class":38},[28,56566,51914],{"class":34},[28,56568,938],{"class":38},[28,56570,51969],{"class":42},[28,56572,52033],{"class":38},[28,56574,1781],{"class":34},[28,56576,56577],{"class":30,"line":2222},[28,56578,2677],{"class":34},[28,56580,56581],{"class":30,"line":2239},[28,56582,2890],{"emptyLinePlaceholder":562},[28,56584,56585,56587],{"class":30,"line":2244},[28,56586,55297],{"class":2453},[28,56588,16058],{"class":34},[28,56590,56591,56593,56595,56597],{"class":30,"line":2249},[28,56592,55236],{"class":38},[28,56594,51914],{"class":34},[28,56596,55308],{"class":38},[28,56598,1781],{"class":34},[28,56600,56601,56603,56605,56607],{"class":30,"line":2254},[28,56602,55315],{"class":38},[28,56604,51914],{"class":34},[28,56606,822],{"class":38},[28,56608,1781],{"class":34},[28,56610,56611,56613,56615,56617],{"class":30,"line":2268},[28,56612,55326],{"class":38},[28,56614,51914],{"class":34},[28,56616,822],{"class":38},[28,56618,1781],{"class":34},[28,56620,56621,56623,56625,56627,56629],{"class":30,"line":2273},[28,56622,55248],{"class":38},[28,56624,51914],{"class":34},[28,56626,938],{"class":38},[28,56628,954],{"class":42},[28,56630,1781],{"class":34},[28,56632,56633,56635,56637,56639,56641],{"class":30,"line":3067},[28,56634,55262],{"class":38},[28,56636,51914],{"class":34},[28,56638,1196],{"class":38},[28,56640,954],{"class":42},[28,56642,1781],{"class":34},[28,56644,56645,56647,56649,56651],{"class":30,"line":3081},[28,56646,55361],{"class":38},[28,56648,51914],{"class":34},[28,56650,55366],{"class":38},[28,56652,1781],{"class":34},[28,56654,56655],{"class":30,"line":3089},[28,56656,2677],{"class":34},[28,56658,56659],{"class":30,"line":3094},[28,56660,2890],{"emptyLinePlaceholder":562},[28,56662,56663,56665,56667],{"class":30,"line":3100},[28,56664,55297],{"class":2453},[28,56666,7313],{"class":51777},[28,56668,16058],{"class":34},[28,56670,56671,56673,56675,56677],{"class":30,"line":3106},[28,56672,55236],{"class":38},[28,56674,51914],{"class":34},[28,56676,55308],{"class":38},[28,56678,1781],{"class":34},[28,56680,56681,56683,56685,56687,56689],{"class":30,"line":3111},[28,56682,55399],{"class":38},[28,56684,51914],{"class":34},[28,56686,1520],{"class":38},[28,56688,51969],{"class":42},[28,56690,1781],{"class":34},[28,56692,56693,56695,56697,56699,56701],{"class":30,"line":8436},[28,56694,55315],{"class":38},[28,56696,51914],{"class":34},[28,56698,1320],{"class":38},[28,56700,51969],{"class":42},[28,56702,1781],{"class":34},[28,56704,56705,56707,56709,56711,56713],{"class":30,"line":8460},[28,56706,55424],{"class":38},[28,56708,51914],{"class":34},[28,56710,108],{"class":38},[28,56712,51969],{"class":42},[28,56714,1781],{"class":34},[28,56716,56717],{"class":30,"line":8465},[28,56718,2677],{"class":34},[28,56720,56721],{"class":30,"line":8471},[28,56722,2890],{"emptyLinePlaceholder":562},[28,56724,56725,56727],{"class":30,"line":8498},[28,56726,55445],{"class":51777},[28,56728,16058],{"class":34},[28,56730,56731,56733,56735,56737],{"class":30,"line":8503},[28,56732,55236],{"class":38},[28,56734,51914],{"class":34},[28,56736,55308],{"class":38},[28,56738,1781],{"class":34},[28,56740,56741,56743,56745,56747,56749],{"class":30,"line":8509},[28,56742,55424],{"class":38},[28,56744,51914],{"class":34},[28,56746,1401],{"class":38},[28,56748,51969],{"class":42},[28,56750,1781],{"class":34},[28,56752,56753,56755,56757,56759,56761],{"class":30,"line":8521},[28,56754,55315],{"class":38},[28,56756,51914],{"class":34},[28,56758,1320],{"class":38},[28,56760,51969],{"class":42},[28,56762,1781],{"class":34},[28,56764,56765,56767,56769,56771],{"class":30,"line":8533},[28,56766,55486],{"class":38},[28,56768,51914],{"class":34},[28,56770,51954],{"class":38},[28,56772,1781],{"class":34},[28,56774,56775,56777,56779,56781],{"class":30,"line":8545},[28,56776,55497],{"class":38},[28,56778,51914],{"class":34},[28,56780,52145],{"class":38},[28,56782,1781],{"class":34},[28,56784,56785,56787,56789,56791],{"class":30,"line":10202},[28,56786,55236],{"class":38},[28,56788,51914],{"class":34},[28,56790,55308],{"class":38},[28,56792,1781],{"class":34},[28,56794,56795,56797,56799,56801,56803],{"class":30,"line":10227},[28,56796,55248],{"class":38},[28,56798,51914],{"class":34},[28,56800,4480],{"class":38},[28,56802,51969],{"class":42},[28,56804,1781],{"class":34},[28,56806,56807,56809,56811,56813,56815],{"class":30,"line":10250},[28,56808,55262],{"class":38},[28,56810,51914],{"class":34},[28,56812,1320],{"class":38},[28,56814,51969],{"class":42},[28,56816,1781],{"class":34},[28,56818,56819],{"class":30,"line":10274},[28,56820,2677],{"class":34},[28,56822,56823],{"class":30,"line":10279},[28,56824,2890],{"emptyLinePlaceholder":562},[28,56826,56827,56829,56831],{"class":30,"line":10284},[28,56828,55445],{"class":51777},[28,56830,55552],{"class":51777},[28,56832,16058],{"class":34},[28,56834,56835,56837,56839,56841,56843],{"class":30,"line":10289},[28,56836,55248],{"class":38},[28,56838,51914],{"class":34},[28,56840,1320],{"class":38},[28,56842,51969],{"class":42},[28,56844,1781],{"class":34},[28,56846,56847,56849,56851,56853,56855],{"class":30,"line":10298},[28,56848,55262],{"class":38},[28,56850,51914],{"class":34},[28,56852,1320],{"class":38},[28,56854,51969],{"class":42},[28,56856,1781],{"class":34},[28,56858,56859,56861,56863,56865,56867,56869,56871,56873,56875,56877,56879,56881],{"class":30,"line":10303},[28,56860,55361],{"class":38},[28,56862,51914],{"class":34},[28,56864,55587],{"class":38},[28,56866,367],{"class":34},[28,56868,822],{"class":38},[28,56870,12921],{"class":34},[28,56872,822],{"class":38},[28,56874,12921],{"class":34},[28,56876,822],{"class":38},[28,56878,12921],{"class":34},[28,56880,55604],{"class":38},[28,56882,3209],{"class":34},[28,56884,56885,56887,56889,56891,56893],{"class":30,"line":10309},[28,56886,55611],{"class":38},[28,56888,51914],{"class":34},[28,56890,225],{"class":38},[28,56892,51969],{"class":42},[28,56894,1781],{"class":34},[28,56896,56897],{"class":30,"line":10330},[28,56898,2677],{"class":34},[28,56900,56901],{"class":30,"line":10336},[28,56902,2890],{"emptyLinePlaceholder":562},[28,56904,56905,56907],{"class":30,"line":10350},[28,56906,55632],{"class":2453},[28,56908,16058],{"class":34},[28,56910,56911,56913,56915,56917],{"class":30,"line":10356},[28,56912,55361],{"class":38},[28,56914,51914],{"class":34},[28,56916,55643],{"class":38},[28,56918,1781],{"class":34},[28,56920,56921],{"class":30,"line":10383},[28,56922,2677],{"class":34},[28,56924,56925,56927,56929],{"class":30,"line":10392},[28,56926,52894],{"class":34},[28,56928,547],{"class":51777},[28,56930,51784],{"class":34},[28,56932,56933,56935,56937],{"class":30,"line":10398},[28,56934,52262],{"class":34},[28,56936,51811],{"class":51777},[28,56938,51784],{"class":34},[28,56940,56941],{"class":30,"line":10406},[28,56942,2890],{"emptyLinePlaceholder":562},[28,56944,56945,56947,56949],{"class":30,"line":10411},[28,56946,1529],{"class":34},[28,56948,52277],{"class":51777},[28,56950,51784],{"class":34},[28,56952,56953,56955,56957,56959,56961,56963],{"class":30,"line":17090},[28,56954,52621],{"class":34},[28,56956,52088],{"class":51777},[28,56958,53963],{"class":2453},[28,56960,83],{"class":34},[28,56962,53968],{"class":735},[28,56964,51784],{"class":34},[28,56966,56967,56969,56971,56973,56975,56977],{"class":30,"line":17096},[28,56968,51818],{"class":34},[28,56970,52088],{"class":51777},[28,56972,53963],{"class":2453},[28,56974,83],{"class":34},[28,56976,55704],{"class":735},[28,56978,51784],{"class":34},[28,56980,56981,56983,56985,56987,56989,56991,56993,56995,56997],{"class":30,"line":17119},[28,56982,55711],{"class":34},[28,56984,420],{"class":51777},[28,56986,55716],{"class":2453},[28,56988,83],{"class":34},[28,56990,55721],{"class":735},[28,56992,55724],{"class":2453},[28,56994,83],{"class":34},[28,56996,8140],{"class":735},[28,56998,51784],{"class":34},[28,57000,57001,57003,57005],{"class":30,"line":17125},[28,57002,52253],{"class":34},[28,57004,52088],{"class":51777},[28,57006,51784],{"class":34},[28,57008,57009,57011,57013,57015,57017,57019],{"class":30,"line":17148},[28,57010,51818],{"class":34},[28,57012,52088],{"class":51777},[28,57014,53963],{"class":2453},[28,57016,83],{"class":34},[28,57018,55751],{"class":735},[28,57020,51784],{"class":34},[28,57022,57023,57025,57027,57029,57031],{"class":30,"line":17162},[28,57024,55711],{"class":34},[28,57026,14],{"class":51777},[28,57028,55762],{"class":34},[28,57030,14],{"class":51777},[28,57032,51784],{"class":34},[28,57034,57035,57037,57039],{"class":30,"line":17182},[28,57036,55711],{"class":34},[28,57038,1626],{"class":51777},[28,57040,51784],{"class":34},[28,57042,57043,57045,57047,57049,57051,57053,57055,57057],{"class":30,"line":17188},[28,57044,55779],{"class":34},[28,57046,591],{"class":51777},[28,57048,53963],{"class":2453},[28,57050,83],{"class":34},[28,57052,55788],{"class":735},[28,57054,55791],{"class":34},[28,57056,591],{"class":51777},[28,57058,51784],{"class":34},[28,57060,57061,57063,57065,57067,57069],{"class":30,"line":17199},[28,57062,55779],{"class":34},[28,57064,591],{"class":51777},[28,57066,55791],{"class":34},[28,57068,591],{"class":51777},[28,57070,51784],{"class":34},[28,57072,57073,57075,57077,57079,57081],{"class":30,"line":17222},[28,57074,55779],{"class":34},[28,57076,591],{"class":51777},[28,57078,55791],{"class":34},[28,57080,591],{"class":51777},[28,57082,51784],{"class":34},[28,57084,57085,57087,57089,57091,57093],{"class":30,"line":17244},[28,57086,55779],{"class":34},[28,57088,591],{"class":51777},[28,57090,55791],{"class":34},[28,57092,591],{"class":51777},[28,57094,51784],{"class":34},[28,57096,57097,57099,57101,57103,57105],{"class":30,"line":17249},[28,57098,55779],{"class":34},[28,57100,591],{"class":51777},[28,57102,55791],{"class":34},[28,57104,591],{"class":51777},[28,57106,51784],{"class":34},[28,57108,57109,57111,57113,57115,57117],{"class":30,"line":17255},[28,57110,55779],{"class":34},[28,57112,591],{"class":51777},[28,57114,55791],{"class":34},[28,57116,591],{"class":51777},[28,57118,51784],{"class":34},[28,57120,57121,57123,57125,57127,57129],{"class":30,"line":17269},[28,57122,55779],{"class":34},[28,57124,591],{"class":51777},[28,57126,55791],{"class":34},[28,57128,591],{"class":51777},[28,57130,51784],{"class":34},[28,57132,57133,57135,57137,57139,57141],{"class":30,"line":17282},[28,57134,55779],{"class":34},[28,57136,591],{"class":51777},[28,57138,55791],{"class":34},[28,57140,591],{"class":51777},[28,57142,51784],{"class":34},[28,57144,57145,57147,57149],{"class":30,"line":17287},[28,57146,55884],{"class":34},[28,57148,1626],{"class":51777},[28,57150,51784],{"class":34},[28,57152,57153,57155,57157],{"class":30,"line":17301},[28,57154,52253],{"class":34},[28,57156,52088],{"class":51777},[28,57158,51784],{"class":34},[28,57160,57161,57163,57165],{"class":30,"line":17306},[28,57162,52894],{"class":34},[28,57164,52088],{"class":51777},[28,57166,51784],{"class":34},[28,57168,57169,57171,57173],{"class":30,"line":17312},[28,57170,52621],{"class":34},[28,57172,52290],{"class":51777},[28,57174,51784],{"class":34},[28,57176,57177,57179,57182,57184],{"class":30,"line":17317},[28,57178,11707],{"class":42},[28,57180,57181],{"class":38}," sliderData",[28,57183,14050],{"class":42},[28,57185,55924],{"class":34},[28,57187,57188,57190,57192,57194,57196,57198,57200],{"class":30,"line":17331},[28,57189,55929],{"class":34},[28,57191,55932],{"class":735},[28,57193,55935],{"class":34},[28,57195,55938],{"class":735},[28,57197,55941],{"class":34},[28,57199,55944],{"class":735},[28,57201,55947],{"class":34},[28,57203,57204,57206,57208,57210,57212,57214,57216],{"class":30,"line":17336},[28,57205,55929],{"class":34},[28,57207,55954],{"class":735},[28,57209,55935],{"class":34},[28,57211,55959],{"class":735},[28,57213,55941],{"class":34},[28,57215,55964],{"class":735},[28,57217,55947],{"class":34},[28,57219,57220,57222,57224,57226,57228,57230,57232],{"class":30,"line":17341},[28,57221,55929],{"class":34},[28,57223,55973],{"class":735},[28,57225,55935],{"class":34},[28,57227,55978],{"class":735},[28,57229,55941],{"class":34},[28,57231,55983],{"class":735},[28,57233,55947],{"class":34},[28,57235,57236,57238,57240,57242,57244,57246,57248],{"class":30,"line":17355},[28,57237,55929],{"class":34},[28,57239,55992],{"class":735},[28,57241,55935],{"class":34},[28,57243,55997],{"class":735},[28,57245,55941],{"class":34},[28,57247,56002],{"class":735},[28,57249,55947],{"class":34},[28,57251,57252,57254,57256,57258,57260,57262,57264],{"class":30,"line":17367},[28,57253,55929],{"class":34},[28,57255,56011],{"class":735},[28,57257,55935],{"class":34},[28,57259,56016],{"class":735},[28,57261,55941],{"class":34},[28,57263,56021],{"class":735},[28,57265,55947],{"class":34},[28,57267,57268,57270,57272,57274,57276,57278,57280],{"class":30,"line":17372},[28,57269,55929],{"class":34},[28,57271,56030],{"class":735},[28,57273,55935],{"class":34},[28,57275,56035],{"class":735},[28,57277,55941],{"class":34},[28,57279,56040],{"class":735},[28,57281,55947],{"class":34},[28,57283,57284,57286,57288,57290,57292,57294,57296],{"class":30,"line":17385},[28,57285,55929],{"class":34},[28,57287,56049],{"class":735},[28,57289,55935],{"class":34},[28,57291,56054],{"class":735},[28,57293,55941],{"class":34},[28,57295,56059],{"class":735},[28,57297,55947],{"class":34},[28,57299,57300,57302,57304,57306,57308,57310,57312],{"class":30,"line":17390},[28,57301,55929],{"class":34},[28,57303,56068],{"class":735},[28,57305,55935],{"class":34},[28,57307,56073],{"class":735},[28,57309,55941],{"class":34},[28,57311,56078],{"class":735},[28,57313,56081],{"class":34},[28,57315,57316],{"class":30,"line":17395},[28,57317,53586],{"class":34},[28,57319,57320],{"class":30,"line":17400},[28,57321,57322],{"class":73},"    \u002F\u002F 1.获取元素\n",[28,57324,57325,57327,57329,57331,57333,57335,57337,57339],{"class":30,"line":17413},[28,57326,11707],{"class":42},[28,57328,56092],{"class":38},[28,57330,14050],{"class":42},[28,57332,54873],{"class":34},[28,57334,54876],{"class":2453},[28,57336,367],{"class":34},[28,57338,56103],{"class":735},[28,57340,228],{"class":34},[28,57342,57343,57345,57347,57349,57351,57353,57355,57357],{"class":30,"line":17418},[28,57344,11707],{"class":42},[28,57346,7313],{"class":38},[28,57348,14050],{"class":42},[28,57350,54873],{"class":34},[28,57352,54876],{"class":2453},[28,57354,367],{"class":34},[28,57356,56122],{"class":735},[28,57358,228],{"class":34},[28,57360,57361,57363,57365,57367],{"class":30,"line":33111},[28,57362,52696],{"class":42},[28,57364,52],{"class":34},[28,57366,83],{"class":42},[28,57368,47810],{"class":38},[28,57370,57371],{"class":30,"line":33117},[28,57372,57373],{"class":73},"    \u002F\u002F 2.开启定时器\n",[28,57375,57376],{"class":30,"line":33123},[28,57377,57378],{"class":73},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[28,57380,57381,57384,57386,57388],{"class":30,"line":33129},[28,57382,57383],{"class":2453},"    setInterval",[28,57385,367],{"class":34},[28,57387,54926],{"class":42},[28,57389,54929],{"class":34},[28,57391,57392,57394],{"class":30,"line":33135},[28,57393,54934],{"class":34},[28,57395,3192],{"class":42},[28,57397,57398,57400,57402,57404,57407,57409],{"class":30,"line":33146},[28,57399,54957],{"class":42},[28,57401,54960],{"class":34},[28,57403,2200],{"class":42},[28,57405,57406],{"class":34}," sliderData.",[28,57408,52445],{"class":38},[28,57410,12928],{"class":34},[28,57412,57413,57416,57418],{"class":30,"line":33152},[28,57414,57415],{"class":34},"        i ",[28,57417,83],{"class":42},[28,57419,47810],{"class":38},[28,57421,57422],{"class":30,"line":33172},[28,57423,52875],{"class":34},[28,57425,57426],{"class":30,"line":33178},[28,57427,57428],{"class":73},"      \u002F\u002F 更换图片路径\n",[28,57430,57431,57433,57435],{"class":30,"line":33189},[28,57432,56198],{"class":34},[28,57434,83],{"class":42},[28,57436,57437],{"class":34}," sliderData[i].url\n",[28,57439,57440],{"class":30,"line":33195},[28,57441,57442],{"class":73},"      \u002F\u002F 把文字写到p里面\n",[28,57444,57445,57447,57449],{"class":30,"line":33201},[28,57446,56208],{"class":34},[28,57448,83],{"class":42},[28,57450,57451],{"class":34}," sliderData[i].title\n",[28,57453,57454],{"class":30,"line":33207},[28,57455,57456],{"class":73},"      \u002F\u002F 小圆点\n",[28,57458,57459],{"class":30,"line":33213},[28,57460,57461],{"class":73},"      \u002F\u002F 先删除以前的active\n",[28,57463,57464],{"class":30,"line":33219},[28,57465,57466],{"class":73},"      \u002F\u002F 只让当前li添加active\n",[28,57468,57469,57471,57473,57475,57478,57481,57484,57486,57488],{"class":30,"line":33225},[28,57470,56248],{"class":34},[28,57472,54876],{"class":2453},[28,57474,367],{"class":34},[28,57476,57477],{"class":735},"'.slider-footer .activate'",[28,57479,57480],{"class":34},").classList.",[28,57482,57483],{"class":2453},"remove",[28,57485,367],{"class":34},[28,57487,56266],{"class":735},[28,57489,228],{"class":34},[28,57491,57492,57494,57496,57498,57501,57503,57505,57507,57510,57512,57514,57516,57518],{"class":30,"line":33231},[28,57493,56248],{"class":34},[28,57495,54876],{"class":2453},[28,57497,367],{"class":34},[28,57499,57500],{"class":735},"`.slider-footer ul li:nth-child(${",[28,57502,1066],{"class":34},[28,57504,46043],{"class":42},[28,57506,25605],{"class":38},[28,57508,57509],{"class":735},"})`",[28,57511,57480],{"class":34},[28,57513,5822],{"class":2453},[28,57515,367],{"class":34},[28,57517,56266],{"class":735},[28,57519,228],{"class":34},[28,57521,57522],{"class":30,"line":33251},[28,57523,2890],{"emptyLinePlaceholder":562},[28,57525,57526,57528,57530],{"class":30,"line":33257},[28,57527,55012],{"class":34},[28,57529,6898],{"class":38},[28,57531,228],{"class":34},[28,57533,57534],{"class":30,"line":33273},[28,57535,2890],{"emptyLinePlaceholder":562},[28,57537,57538,57540,57542],{"class":30,"line":33279},[28,57539,52894],{"class":34},[28,57541,52290],{"class":51777},[28,57543,51784],{"class":34},[28,57545,57546,57548,57550],{"class":30,"line":33293},[28,57547,52262],{"class":34},[28,57549,52277],{"class":51777},[28,57551,51784],{"class":34},[28,57553,57554],{"class":30,"line":33299},[28,57555,2890],{"emptyLinePlaceholder":562},[28,57557,57558,57560,57562],{"class":30,"line":33314},[28,57559,52262],{"class":34},[28,57561,51112],{"class":51777},[28,57563,51784],{"class":34},[605,57565,57567],{"id":57566},"_317-重要知识点","3.1.7 重要知识点",[14,57569,57570,57571],{},"浏览器在渲染文本时， ",[780,57572,57573],{},"没有空格或换行符就没有“断行点”",[14,57575,57576],{},[420,57577],{"alt":23,"src":57578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57580,57581],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57583,57584],{},[420,57585],{"alt":23,"src":57586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57588,57589],{},[420,57590],{"alt":23,"src":57591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[60,57593,57595],{"id":57594},"_32-dom事件基础","3.2 DOM事件基础",[605,57597,57599],{"id":57598},"_321-事件监听","3.2.1 事件监听",[14,57601,57602],{},[420,57603],{"alt":23,"src":57604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57606,57607],{},"事件监听有响应的发生",[14,57609,57610],{},[420,57611],{"alt":23,"src":57612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57614,57615],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57617,57618],{},"对于有名函数,要执行的函数名后边不要加()",[605,57620,57622],{"id":57621},"_322-随机点名案例","3.2.2 随机点名案例",[18,57624,57626],{"className":51110,"code":57625,"language":51112,"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,57627,57628,57638,57652,57656,57664,57678,57698,57710,57718,57724,57734,57744,57748,57752,57759,57770,57774,57778,57784,57796,57810,57820,57832,57845,57849,57853,57860,57864,57877,57889,57901,57905,57909,57913,57920,57930,57934,57938,57947,57959,57971,57986,57990,57998,58006,58010,58018,58031,58045,58058,58078,58086,58101,58121,58141,58149,58153,58161,58166,58202,58222,58227,58246,58251,58262,58267,58278,58283,58302,58317,58322,58348,58358,58367,58372,58388,58393,58398,58403,58418,58422,58426,58431,58450,58467,58475,58480,58495,58499,58503,58511,58519,58523],{"__ignoreMap":23},[28,57629,57630,57632,57634,57636],{"class":30,"line":31},[28,57631,51774],{"class":34},[28,57633,51778],{"class":51777},[28,57635,51781],{"class":2453},[28,57637,51784],{"class":34},[28,57639,57640,57642,57644,57646,57648,57650],{"class":30,"line":77},[28,57641,1529],{"class":34},[28,57643,51112],{"class":51777},[28,57645,51793],{"class":2453},[28,57647,83],{"class":34},[28,57649,51798],{"class":735},[28,57651,51784],{"class":34},[28,57653,57654],{"class":30,"line":114},[28,57655,2890],{"emptyLinePlaceholder":562},[28,57657,57658,57660,57662],{"class":30,"line":128},[28,57659,1529],{"class":34},[28,57661,51811],{"class":51777},[28,57663,51784],{"class":34},[28,57665,57666,57668,57670,57672,57674,57676],{"class":30,"line":393},[28,57667,52621],{"class":34},[28,57669,51821],{"class":51777},[28,57671,51824],{"class":2453},[28,57673,83],{"class":34},[28,57675,51829],{"class":735},[28,57677,51784],{"class":34},[28,57679,57680,57682,57684,57686,57688,57690,57692,57694,57696],{"class":30,"line":409},[28,57681,52621],{"class":34},[28,57683,51821],{"class":51777},[28,57685,15406],{"class":2453},[28,57687,83],{"class":34},[28,57689,51868],{"class":735},[28,57691,51848],{"class":2453},[28,57693,83],{"class":34},[28,57695,51875],{"class":735},[28,57697,51784],{"class":34},[28,57699,57700,57702,57704,57706,57708],{"class":30,"line":1711},[28,57701,52621],{"class":34},[28,57703,51884],{"class":51777},[28,57705,51887],{"class":34},[28,57707,51884],{"class":51777},[28,57709,51784],{"class":34},[28,57711,57712,57714,57716],{"class":30,"line":1802},[28,57713,52621],{"class":34},[28,57715,547],{"class":51777},[28,57717,51784],{"class":34},[28,57719,57720,57722],{"class":30,"line":1808},[28,57721,6891],{"class":51777},[28,57723,16058],{"class":34},[28,57725,57726,57728,57730,57732],{"class":30,"line":1820},[28,57727,55183],{"class":38},[28,57729,51914],{"class":34},[28,57731,822],{"class":38},[28,57733,1781],{"class":34},[28,57735,57736,57738,57740,57742],{"class":30,"line":2102},[28,57737,55172],{"class":38},[28,57739,51914],{"class":34},[28,57741,822],{"class":38},[28,57743,1781],{"class":34},[28,57745,57746],{"class":30,"line":2107},[28,57747,2677],{"class":34},[28,57749,57750],{"class":30,"line":2113},[28,57751,2890],{"emptyLinePlaceholder":562},[28,57753,57754,57757],{"class":30,"line":2118},[28,57755,57756],{"class":51777},"    h2",[28,57758,16058],{"class":34},[28,57760,57761,57764,57766,57768],{"class":30,"line":2132},[28,57762,57763],{"class":38},"      text-align",[28,57765,51914],{"class":34},[28,57767,52069],{"class":38},[28,57769,1781],{"class":34},[28,57771,57772],{"class":30,"line":2137},[28,57773,2677],{"class":34},[28,57775,57776],{"class":30,"line":2143},[28,57777,2890],{"emptyLinePlaceholder":562},[28,57779,57780,57782],{"class":30,"line":2164},[28,57781,55229],{"class":2453},[28,57783,16058],{"class":34},[28,57785,57786,57788,57790,57792,57794],{"class":30,"line":2169},[28,57787,55248],{"class":38},[28,57789,51914],{"class":34},[28,57791,2029],{"class":38},[28,57793,51969],{"class":42},[28,57795,1781],{"class":34},[28,57797,57798,57800,57802,57804,57806,57808],{"class":30,"line":2183},[28,57799,55183],{"class":38},[28,57801,51914],{"class":34},[28,57803,1276],{"class":38},[28,57805,51969],{"class":42},[28,57807,52033],{"class":38},[28,57809,1781],{"class":34},[28,57811,57812,57814,57816,57818],{"class":30,"line":2188},[28,57813,55486],{"class":38},[28,57815,51914],{"class":34},[28,57817,51954],{"class":38},[28,57819,1781],{"class":34},[28,57821,57822,57824,57826,57828,57830],{"class":30,"line":2217},[28,57823,55399],{"class":38},[28,57825,51914],{"class":34},[28,57827,1445],{"class":38},[28,57829,51969],{"class":42},[28,57831,1781],{"class":34},[28,57833,57834,57837,57839,57841,57843],{"class":30,"line":2222},[28,57835,57836],{"class":38},"      line-height",[28,57838,51914],{"class":34},[28,57840,1026],{"class":38},[28,57842,51969],{"class":42},[28,57844,1781],{"class":34},[28,57846,57847],{"class":30,"line":2239},[28,57848,2677],{"class":34},[28,57850,57851],{"class":30,"line":2244},[28,57852,2890],{"emptyLinePlaceholder":562},[28,57854,57855,57858],{"class":30,"line":2249},[28,57856,57857],{"class":2453},"    .qs",[28,57859,16058],{"class":34},[28,57861,57862],{"class":30,"line":2254},[28,57863,2890],{"emptyLinePlaceholder":562},[28,57865,57866,57868,57870,57873,57875],{"class":30,"line":2268},[28,57867,55248],{"class":38},[28,57869,51914],{"class":34},[28,57871,57872],{"class":38},"450",[28,57874,51969],{"class":42},[28,57876,1781],{"class":34},[28,57878,57879,57881,57883,57885,57887],{"class":30,"line":2273},[28,57880,55262],{"class":38},[28,57882,51914],{"class":34},[28,57884,1026],{"class":38},[28,57886,51969],{"class":42},[28,57888,1781],{"class":34},[28,57890,57891,57894,57896,57899],{"class":30,"line":3067},[28,57892,57893],{"class":38},"      color",[28,57895,51914],{"class":34},[28,57897,57898],{"class":38},"red",[28,57900,1781],{"class":34},[28,57902,57903],{"class":30,"line":3081},[28,57904,2890],{"emptyLinePlaceholder":562},[28,57906,57907],{"class":30,"line":3089},[28,57908,2677],{"class":34},[28,57910,57911],{"class":30,"line":3094},[28,57912,2890],{"emptyLinePlaceholder":562},[28,57914,57915,57918],{"class":30,"line":3100},[28,57916,57917],{"class":2453},"    .btns",[28,57919,16058],{"class":34},[28,57921,57922,57924,57926,57928],{"class":30,"line":3106},[28,57923,57763],{"class":38},[28,57925,51914],{"class":34},[28,57927,52069],{"class":38},[28,57929,1781],{"class":34},[28,57931,57932],{"class":30,"line":3111},[28,57933,2677],{"class":34},[28,57935,57936],{"class":30,"line":8436},[28,57937,2890],{"emptyLinePlaceholder":562},[28,57939,57940,57942,57945],{"class":30,"line":8460},[28,57941,57917],{"class":2453},[28,57943,57944],{"class":51777}," button",[28,57946,16058],{"class":34},[28,57948,57949,57951,57953,57955,57957],{"class":30,"line":8465},[28,57950,55248],{"class":38},[28,57952,51914],{"class":34},[28,57954,1437],{"class":38},[28,57956,51969],{"class":42},[28,57958,1781],{"class":34},[28,57960,57961,57963,57965,57967,57969],{"class":30,"line":8471},[28,57962,55262],{"class":38},[28,57964,51914],{"class":34},[28,57966,901],{"class":38},[28,57968,51969],{"class":42},[28,57970,1781],{"class":34},[28,57972,57973,57975,57977,57979,57982,57984],{"class":30,"line":8498},[28,57974,55183],{"class":38},[28,57976,51914],{"class":34},[28,57978,822],{"class":38},[28,57980,57981],{"class":38}," 50",[28,57983,51969],{"class":42},[28,57985,1781],{"class":34},[28,57987,57988],{"class":30,"line":8503},[28,57989,2677],{"class":34},[28,57991,57992,57994,57996],{"class":30,"line":8509},[28,57993,52894],{"class":34},[28,57995,547],{"class":51777},[28,57997,51784],{"class":34},[28,57999,58000,58002,58004],{"class":30,"line":8521},[28,58001,52262],{"class":34},[28,58003,51811],{"class":51777},[28,58005,51784],{"class":34},[28,58007,58008],{"class":30,"line":8533},[28,58009,2890],{"emptyLinePlaceholder":562},[28,58011,58012,58014,58016],{"class":30,"line":8545},[28,58013,1529],{"class":34},[28,58015,52277],{"class":51777},[28,58017,51784],{"class":34},[28,58019,58020,58022,58024,58027,58029],{"class":30,"line":10202},[28,58021,52621],{"class":34},[28,58023,60],{"class":51777},[28,58025,58026],{"class":34},">随机点名\u003C\u002F",[28,58028,60],{"class":51777},[28,58030,51784],{"class":34},[28,58032,58033,58035,58037,58039,58041,58043],{"class":30,"line":10227},[28,58034,52621],{"class":34},[28,58036,52088],{"class":51777},[28,58038,53963],{"class":2453},[28,58040,83],{"class":34},[28,58042,53968],{"class":735},[28,58044,51784],{"class":34},[28,58046,58047,58049,58051,58054,58056],{"class":30,"line":10250},[28,58048,51818],{"class":34},[28,58050,28],{"class":51777},[28,58052,58053],{"class":34},">名字是：\u003C\u002F",[28,58055,28],{"class":51777},[28,58057,51784],{"class":34},[28,58059,58060,58062,58064,58066,58068,58071,58074,58076],{"class":30,"line":10274},[28,58061,51818],{"class":34},[28,58063,52088],{"class":51777},[28,58065,53963],{"class":2453},[28,58067,83],{"class":34},[28,58069,58070],{"class":735},"\"qs\"",[28,58072,58073],{"class":34},">这里显示姓名\u003C\u002F",[28,58075,52088],{"class":51777},[28,58077,51784],{"class":34},[28,58079,58080,58082,58084],{"class":30,"line":10279},[28,58081,52894],{"class":34},[28,58083,52088],{"class":51777},[28,58085,51784],{"class":34},[28,58087,58088,58090,58092,58094,58096,58099],{"class":30,"line":10284},[28,58089,52621],{"class":34},[28,58091,52088],{"class":51777},[28,58093,53963],{"class":2453},[28,58095,83],{"class":34},[28,58097,58098],{"class":735},"\"btns\"",[28,58100,51784],{"class":34},[28,58102,58103,58105,58107,58109,58111,58114,58117,58119],{"class":30,"line":10289},[28,58104,51818],{"class":34},[28,58106,54364],{"class":51777},[28,58108,53963],{"class":2453},[28,58110,83],{"class":34},[28,58112,58113],{"class":735},"\"start\"",[28,58115,58116],{"class":34},">开始\u003C\u002F",[28,58118,54364],{"class":51777},[28,58120,51784],{"class":34},[28,58122,58123,58125,58127,58129,58131,58134,58137,58139],{"class":30,"line":10298},[28,58124,51818],{"class":34},[28,58126,54364],{"class":51777},[28,58128,53963],{"class":2453},[28,58130,83],{"class":34},[28,58132,58133],{"class":735},"\"end\"",[28,58135,58136],{"class":34},">结束\u003C\u002F",[28,58138,54364],{"class":51777},[28,58140,51784],{"class":34},[28,58142,58143,58145,58147],{"class":30,"line":10303},[28,58144,52894],{"class":34},[28,58146,52088],{"class":51777},[28,58148,51784],{"class":34},[28,58150,58151],{"class":30,"line":10309},[28,58152,2890],{"emptyLinePlaceholder":562},[28,58154,58155,58157,58159],{"class":30,"line":10330},[28,58156,52621],{"class":34},[28,58158,52290],{"class":51777},[28,58160,51784],{"class":34},[28,58162,58163],{"class":30,"line":10336},[28,58164,58165],{"class":73},"    \u002F\u002F 数据数组\n",[28,58167,58168,58170,58173,58175,58177,58180,58182,58185,58187,58190,58192,58195,58197,58200],{"class":30,"line":10350},[28,58169,11707],{"class":42},[28,58171,58172],{"class":38}," arr",[28,58174,14050],{"class":42},[28,58176,52703],{"class":34},[28,58178,58179],{"class":735},"'马超'",[28,58181,12921],{"class":34},[28,58183,58184],{"class":735},"'黄忠'",[28,58186,12921],{"class":34},[28,58188,58189],{"class":735},"'赵云'",[28,58191,12921],{"class":34},[28,58193,58194],{"class":735},"'关羽'",[28,58196,12921],{"class":34},[28,58198,58199],{"class":735},"'张飞'",[28,58201,111],{"class":34},[28,58203,58204,58206,58209,58211,58213,58215,58217,58220],{"class":30,"line":10356},[28,58205,11707],{"class":42},[28,58207,58208],{"class":38}," qs",[28,58210,14050],{"class":42},[28,58212,54873],{"class":34},[28,58214,54876],{"class":2453},[28,58216,367],{"class":34},[28,58218,58219],{"class":735},"'.qs'",[28,58221,228],{"class":34},[28,58223,58224],{"class":30,"line":10383},[28,58225,58226],{"class":73},"    \u002F\u002F 1.业务1.开始按钮模块\n",[28,58228,58229,58231,58233,58235,58237,58239,58241,58244],{"class":30,"line":10392},[28,58230,11707],{"class":42},[28,58232,4672],{"class":38},[28,58234,14050],{"class":42},[28,58236,54873],{"class":34},[28,58238,54876],{"class":2453},[28,58240,367],{"class":34},[28,58242,58243],{"class":735},"'.start'",[28,58245,228],{"class":34},[28,58247,58248],{"class":30,"line":10398},[28,58249,58250],{"class":73},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[28,58252,58253,58255,58258,58260],{"class":30,"line":10406},[28,58254,52696],{"class":42},[28,58256,58257],{"class":34}," timerId ",[28,58259,83],{"class":42},[28,58261,47810],{"class":38},[28,58263,58264],{"class":30,"line":10411},[28,58265,58266],{"class":73},"    \u002F\u002F 随机号要全局变量\n",[28,58268,58269,58271,58274,58276],{"class":30,"line":17090},[28,58270,52696],{"class":42},[28,58272,58273],{"class":34}," random ",[28,58275,83],{"class":42},[28,58277,47810],{"class":38},[28,58279,58280],{"class":30,"line":17096},[28,58281,58282],{"class":73},"    \u002F\u002F 1.1 添加点击事件\n",[28,58284,58285,58288,58291,58293,58296,58298,58300],{"class":30,"line":17119},[28,58286,58287],{"class":34},"    start.",[28,58289,58290],{"class":2453},"addEventListener",[28,58292,367],{"class":34},[28,58294,58295],{"class":735},"'click'",[28,58297,12921],{"class":34},[28,58299,54926],{"class":42},[28,58301,54929],{"class":34},[28,58303,58304,58307,58309,58311,58313,58315],{"class":30,"line":17125},[28,58305,58306],{"class":34},"      timerId ",[28,58308,83],{"class":42},[28,58310,54921],{"class":2453},[28,58312,367],{"class":34},[28,58314,54926],{"class":42},[28,58316,54929],{"class":34},[28,58318,58319],{"class":30,"line":17148},[28,58320,58321],{"class":73},"        \u002F\u002F 随机数\n",[28,58323,58324,58327,58329,58332,58335,58338,58340,58342,58344,58346],{"class":30,"line":17162},[28,58325,58326],{"class":34},"        random ",[28,58328,83],{"class":42},[28,58330,58331],{"class":2453}," parseInt",[28,58333,58334],{"class":34},"(Math.",[28,58336,58337],{"class":2453},"random",[28,58339,13536],{"class":34},[28,58341,256],{"class":42},[28,58343,52442],{"class":34},[28,58345,52445],{"class":38},[28,58347,228],{"class":34},[28,58349,58350,58353,58355],{"class":30,"line":17182},[28,58351,58352],{"class":34},"        qs.innerHTML ",[28,58354,83],{"class":42},[28,58356,58357],{"class":34}," arr[random]\n",[28,58359,58360,58363,58365],{"class":30,"line":17188},[28,58361,58362],{"class":34},"      }, ",[28,58364,901],{"class":38},[28,58366,228],{"class":34},[28,58368,58369],{"class":30,"line":17199},[28,58370,58371],{"class":73},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[28,58373,58374,58376,58379,58381,58384,58386],{"class":30,"line":17222},[28,58375,54957],{"class":42},[28,58377,58378],{"class":34}," (arr.",[28,58380,52445],{"class":38},[28,58382,58383],{"class":42}," ===",[28,58385,25605],{"class":38},[28,58387,12928],{"class":34},[28,58389,58390],{"class":30,"line":17244},[28,58391,58392],{"class":73},"        \u002F\u002F start.disabled = true\n",[28,58394,58395],{"class":30,"line":17249},[28,58396,58397],{"class":73},"        \u002F\u002F end.disabled = true\n",[28,58399,58400],{"class":30,"line":17255},[28,58401,58402],{"class":73},"        \u002F\u002F 可以合起来写\n",[28,58404,58405,58408,58410,58413,58415],{"class":30,"line":17269},[28,58406,58407],{"class":34},"        start.disabled ",[28,58409,83],{"class":42},[28,58411,58412],{"class":34}," end.disabled ",[28,58414,83],{"class":42},[28,58416,58417],{"class":38}," true\n",[28,58419,58420],{"class":30,"line":17282},[28,58421,52875],{"class":34},[28,58423,58424],{"class":30,"line":17287},[28,58425,33938],{"class":34},[28,58427,58428],{"class":30,"line":17301},[28,58429,58430],{"class":73},"    \u002F\u002F 1.2 关闭按钮模块\n",[28,58432,58433,58435,58437,58439,58441,58443,58445,58448],{"class":30,"line":17306},[28,58434,11707],{"class":42},[28,58436,4688],{"class":38},[28,58438,14050],{"class":42},[28,58440,54873],{"class":34},[28,58442,54876],{"class":2453},[28,58444,367],{"class":34},[28,58446,58447],{"class":735},"'.end'",[28,58449,228],{"class":34},[28,58451,58452,58455,58457,58459,58461,58463,58465],{"class":30,"line":17312},[28,58453,58454],{"class":34},"    end.",[28,58456,58290],{"class":2453},[28,58458,367],{"class":34},[28,58460,58295],{"class":735},[28,58462,12921],{"class":34},[28,58464,54926],{"class":42},[28,58466,54929],{"class":34},[28,58468,58469,58472],{"class":30,"line":17317},[28,58470,58471],{"class":2453},"      clearInterval",[28,58473,58474],{"class":34},"(timerId)\n",[28,58476,58477],{"class":30,"line":17331},[28,58478,58479],{"class":73},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[28,58481,58482,58485,58488,58491,58493],{"class":30,"line":17336},[28,58483,58484],{"class":34},"      arr.",[28,58486,58487],{"class":2453},"splice",[28,58489,58490],{"class":34},"(random, ",[28,58492,39],{"class":38},[28,58494,228],{"class":34},[28,58496,58497],{"class":30,"line":17341},[28,58498,33938],{"class":34},[28,58500,58501],{"class":30,"line":17355},[28,58502,2890],{"emptyLinePlaceholder":562},[28,58504,58505,58507,58509],{"class":30,"line":17367},[28,58506,52894],{"class":34},[28,58508,52290],{"class":51777},[28,58510,51784],{"class":34},[28,58512,58513,58515,58517],{"class":30,"line":17372},[28,58514,52262],{"class":34},[28,58516,52277],{"class":51777},[28,58518,51784],{"class":34},[28,58520,58521],{"class":30,"line":17385},[28,58522,2890],{"emptyLinePlaceholder":562},[28,58524,58525,58527,58529],{"class":30,"line":17390},[28,58526,52262],{"class":34},[28,58528,51112],{"class":51777},[28,58530,51784],{"class":34},[14,58532,58533],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[605,58535,58537],{"id":58536},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[18,58539,58541],{"className":51110,"code":58540,"language":51112,"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,58542,58543,58553,58567,58571,58579,58593,58613,58625,58633,58637,58645,58657,58665,58684,58701,58717,58727,58731,58739,58747,58751],{"__ignoreMap":23},[28,58544,58545,58547,58549,58551],{"class":30,"line":31},[28,58546,51774],{"class":34},[28,58548,51778],{"class":51777},[28,58550,51781],{"class":2453},[28,58552,51784],{"class":34},[28,58554,58555,58557,58559,58561,58563,58565],{"class":30,"line":77},[28,58556,1529],{"class":34},[28,58558,51112],{"class":51777},[28,58560,51793],{"class":2453},[28,58562,83],{"class":34},[28,58564,51798],{"class":735},[28,58566,51784],{"class":34},[28,58568,58569],{"class":30,"line":114},[28,58570,2890],{"emptyLinePlaceholder":562},[28,58572,58573,58575,58577],{"class":30,"line":128},[28,58574,1529],{"class":34},[28,58576,51811],{"class":51777},[28,58578,51784],{"class":34},[28,58580,58581,58583,58585,58587,58589,58591],{"class":30,"line":393},[28,58582,52621],{"class":34},[28,58584,51821],{"class":51777},[28,58586,51824],{"class":2453},[28,58588,83],{"class":34},[28,58590,51829],{"class":735},[28,58592,51784],{"class":34},[28,58594,58595,58597,58599,58601,58603,58605,58607,58609,58611],{"class":30,"line":409},[28,58596,52621],{"class":34},[28,58598,51821],{"class":51777},[28,58600,15406],{"class":2453},[28,58602,83],{"class":34},[28,58604,51868],{"class":735},[28,58606,51848],{"class":2453},[28,58608,83],{"class":34},[28,58610,51875],{"class":735},[28,58612,51784],{"class":34},[28,58614,58615,58617,58619,58621,58623],{"class":30,"line":1711},[28,58616,52621],{"class":34},[28,58618,51884],{"class":51777},[28,58620,51887],{"class":34},[28,58622,51884],{"class":51777},[28,58624,51784],{"class":34},[28,58626,58627,58629,58631],{"class":30,"line":1802},[28,58628,52262],{"class":34},[28,58630,51811],{"class":51777},[28,58632,51784],{"class":34},[28,58634,58635],{"class":30,"line":1808},[28,58636,2890],{"emptyLinePlaceholder":562},[28,58638,58639,58641,58643],{"class":30,"line":1820},[28,58640,1529],{"class":34},[28,58642,52277],{"class":51777},[28,58644,51784],{"class":34},[28,58646,58647,58649,58651,58653,58655],{"class":30,"line":2102},[28,58648,52621],{"class":34},[28,58650,54364],{"class":51777},[28,58652,54370],{"class":34},[28,58654,54364],{"class":51777},[28,58656,51784],{"class":34},[28,58658,58659,58661,58663],{"class":30,"line":2107},[28,58660,52621],{"class":34},[28,58662,52290],{"class":51777},[28,58664,51784],{"class":34},[28,58666,58667,58669,58671,58673,58675,58677,58679,58682],{"class":30,"line":2113},[28,58668,11707],{"class":42},[28,58670,54868],{"class":38},[28,58672,14050],{"class":42},[28,58674,54873],{"class":34},[28,58676,54876],{"class":2453},[28,58678,367],{"class":34},[28,58680,58681],{"class":735},"'button'",[28,58683,228],{"class":34},[28,58685,58686,58689,58691,58693,58695,58697,58699],{"class":30,"line":2118},[28,58687,58688],{"class":34},"    btn.",[28,58690,58290],{"class":2453},[28,58692,367],{"class":34},[28,58694,58295],{"class":735},[28,58696,12921],{"class":34},[28,58698,54926],{"class":42},[28,58700,54929],{"class":34},[28,58702,58703,58706,58708,58710,58713,58715],{"class":30,"line":2132},[28,58704,58705],{"class":42},"      const",[28,58707,2730],{"class":38},[28,58709,14050],{"class":42},[28,58711,58712],{"class":34}," Math.",[28,58714,58337],{"class":2453},[28,58716,2466],{"class":34},[28,58718,58719,58722,58725],{"class":30,"line":2137},[28,58720,58721],{"class":34},"      console.",[28,58723,58724],{"class":2453},"log",[28,58726,649],{"class":34},[28,58728,58729],{"class":30,"line":2143},[28,58730,33938],{"class":34},[28,58732,58733,58735,58737],{"class":30,"line":2164},[28,58734,52894],{"class":34},[28,58736,52290],{"class":51777},[28,58738,51784],{"class":34},[28,58740,58741,58743,58745],{"class":30,"line":2169},[28,58742,52262],{"class":34},[28,58744,52277],{"class":51777},[28,58746,51784],{"class":34},[28,58748,58749],{"class":30,"line":2183},[28,58750,2890],{"emptyLinePlaceholder":562},[28,58752,58753,58755,58757],{"class":30,"line":2188},[28,58754,52262],{"class":34},[28,58756,51112],{"class":51777},[28,58758,51784],{"class":34},[14,58760,58761],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58763,58764],{},"常量不可以重新赋值",[14,58766,58767],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[18,58769,58771],{"className":51110,"code":58770,"language":51112,"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,58772,58773,58783,58797,58801,58809,58823,58843,58855,58863,58867,58875,58887,58895,58906,58924,58940,58954,58962,58966,58974,58982,58986],{"__ignoreMap":23},[28,58774,58775,58777,58779,58781],{"class":30,"line":31},[28,58776,51774],{"class":34},[28,58778,51778],{"class":51777},[28,58780,51781],{"class":2453},[28,58782,51784],{"class":34},[28,58784,58785,58787,58789,58791,58793,58795],{"class":30,"line":77},[28,58786,1529],{"class":34},[28,58788,51112],{"class":51777},[28,58790,51793],{"class":2453},[28,58792,83],{"class":34},[28,58794,51798],{"class":735},[28,58796,51784],{"class":34},[28,58798,58799],{"class":30,"line":114},[28,58800,2890],{"emptyLinePlaceholder":562},[28,58802,58803,58805,58807],{"class":30,"line":128},[28,58804,1529],{"class":34},[28,58806,51811],{"class":51777},[28,58808,51784],{"class":34},[28,58810,58811,58813,58815,58817,58819,58821],{"class":30,"line":393},[28,58812,52621],{"class":34},[28,58814,51821],{"class":51777},[28,58816,51824],{"class":2453},[28,58818,83],{"class":34},[28,58820,51829],{"class":735},[28,58822,51784],{"class":34},[28,58824,58825,58827,58829,58831,58833,58835,58837,58839,58841],{"class":30,"line":409},[28,58826,52621],{"class":34},[28,58828,51821],{"class":51777},[28,58830,15406],{"class":2453},[28,58832,83],{"class":34},[28,58834,51868],{"class":735},[28,58836,51848],{"class":2453},[28,58838,83],{"class":34},[28,58840,51875],{"class":735},[28,58842,51784],{"class":34},[28,58844,58845,58847,58849,58851,58853],{"class":30,"line":1711},[28,58846,52621],{"class":34},[28,58848,51884],{"class":51777},[28,58850,51887],{"class":34},[28,58852,51884],{"class":51777},[28,58854,51784],{"class":34},[28,58856,58857,58859,58861],{"class":30,"line":1802},[28,58858,52262],{"class":34},[28,58860,51811],{"class":51777},[28,58862,51784],{"class":34},[28,58864,58865],{"class":30,"line":1808},[28,58866,2890],{"emptyLinePlaceholder":562},[28,58868,58869,58871,58873],{"class":30,"line":1820},[28,58870,1529],{"class":34},[28,58872,52277],{"class":51777},[28,58874,51784],{"class":34},[28,58876,58877,58879,58881,58883,58885],{"class":30,"line":2102},[28,58878,52621],{"class":34},[28,58880,54364],{"class":51777},[28,58882,54370],{"class":34},[28,58884,54364],{"class":51777},[28,58886,51784],{"class":34},[28,58888,58889,58891,58893],{"class":30,"line":2107},[28,58890,52621],{"class":34},[28,58892,52290],{"class":51777},[28,58894,51784],{"class":34},[28,58896,58897,58899,58901,58903],{"class":30,"line":2113},[28,58898,11707],{"class":42},[28,58900,2730],{"class":38},[28,58902,14050],{"class":42},[28,58904,58905],{"class":38}," 10\n",[28,58907,58908,58910,58912,58914,58916,58918,58920,58922],{"class":30,"line":2118},[28,58909,11707],{"class":42},[28,58911,54868],{"class":38},[28,58913,14050],{"class":42},[28,58915,54873],{"class":34},[28,58917,54876],{"class":2453},[28,58919,367],{"class":34},[28,58921,58681],{"class":735},[28,58923,228],{"class":34},[28,58925,58926,58928,58930,58932,58934,58936,58938],{"class":30,"line":2132},[28,58927,58688],{"class":34},[28,58929,58290],{"class":2453},[28,58931,367],{"class":34},[28,58933,58295],{"class":735},[28,58935,12921],{"class":34},[28,58937,54926],{"class":42},[28,58939,54929],{"class":34},[28,58941,58942,58944,58946,58948,58950,58952],{"class":30,"line":2137},[28,58943,58705],{"class":42},[28,58945,2730],{"class":38},[28,58947,14050],{"class":42},[28,58949,58712],{"class":34},[28,58951,58337],{"class":2453},[28,58953,2466],{"class":34},[28,58955,58956,58958,58960],{"class":30,"line":2143},[28,58957,58721],{"class":34},[28,58959,58724],{"class":2453},[28,58961,649],{"class":34},[28,58963,58964],{"class":30,"line":2164},[28,58965,33938],{"class":34},[28,58967,58968,58970,58972],{"class":30,"line":2169},[28,58969,52894],{"class":34},[28,58971,52290],{"class":51777},[28,58973,51784],{"class":34},[28,58975,58976,58978,58980],{"class":30,"line":2183},[28,58977,52262],{"class":34},[28,58979,52277],{"class":51777},[28,58981,51784],{"class":34},[28,58983,58984],{"class":30,"line":2188},[28,58985,2890],{"emptyLinePlaceholder":562},[28,58987,58988,58990,58992],{"class":30,"line":2217},[28,58989,52262],{"class":34},[28,58991,51112],{"class":51777},[28,58993,51784],{"class":34},[14,58995,58996],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[18,58998,59000],{"className":51110,"code":58999,"language":51112,"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,59001,59002,59012,59026,59030,59038,59052,59072,59084,59092,59096,59104,59116,59124,59134,59152,59168,59181,59189,59193,59201,59209,59213],{"__ignoreMap":23},[28,59003,59004,59006,59008,59010],{"class":30,"line":31},[28,59005,51774],{"class":34},[28,59007,51778],{"class":51777},[28,59009,51781],{"class":2453},[28,59011,51784],{"class":34},[28,59013,59014,59016,59018,59020,59022,59024],{"class":30,"line":77},[28,59015,1529],{"class":34},[28,59017,51112],{"class":51777},[28,59019,51793],{"class":2453},[28,59021,83],{"class":34},[28,59023,51798],{"class":735},[28,59025,51784],{"class":34},[28,59027,59028],{"class":30,"line":114},[28,59029,2890],{"emptyLinePlaceholder":562},[28,59031,59032,59034,59036],{"class":30,"line":128},[28,59033,1529],{"class":34},[28,59035,51811],{"class":51777},[28,59037,51784],{"class":34},[28,59039,59040,59042,59044,59046,59048,59050],{"class":30,"line":393},[28,59041,52621],{"class":34},[28,59043,51821],{"class":51777},[28,59045,51824],{"class":2453},[28,59047,83],{"class":34},[28,59049,51829],{"class":735},[28,59051,51784],{"class":34},[28,59053,59054,59056,59058,59060,59062,59064,59066,59068,59070],{"class":30,"line":409},[28,59055,52621],{"class":34},[28,59057,51821],{"class":51777},[28,59059,15406],{"class":2453},[28,59061,83],{"class":34},[28,59063,51868],{"class":735},[28,59065,51848],{"class":2453},[28,59067,83],{"class":34},[28,59069,51875],{"class":735},[28,59071,51784],{"class":34},[28,59073,59074,59076,59078,59080,59082],{"class":30,"line":1711},[28,59075,52621],{"class":34},[28,59077,51884],{"class":51777},[28,59079,51887],{"class":34},[28,59081,51884],{"class":51777},[28,59083,51784],{"class":34},[28,59085,59086,59088,59090],{"class":30,"line":1802},[28,59087,52262],{"class":34},[28,59089,51811],{"class":51777},[28,59091,51784],{"class":34},[28,59093,59094],{"class":30,"line":1808},[28,59095,2890],{"emptyLinePlaceholder":562},[28,59097,59098,59100,59102],{"class":30,"line":1820},[28,59099,1529],{"class":34},[28,59101,52277],{"class":51777},[28,59103,51784],{"class":34},[28,59105,59106,59108,59110,59112,59114],{"class":30,"line":2102},[28,59107,52621],{"class":34},[28,59109,54364],{"class":51777},[28,59111,54370],{"class":34},[28,59113,54364],{"class":51777},[28,59115,51784],{"class":34},[28,59117,59118,59120,59122],{"class":30,"line":2107},[28,59119,52621],{"class":34},[28,59121,52290],{"class":51777},[28,59123,51784],{"class":34},[28,59125,59126,59128,59130,59132],{"class":30,"line":2113},[28,59127,11707],{"class":42},[28,59129,2730],{"class":38},[28,59131,14050],{"class":42},[28,59133,58905],{"class":38},[28,59135,59136,59138,59140,59142,59144,59146,59148,59150],{"class":30,"line":2118},[28,59137,11707],{"class":42},[28,59139,54868],{"class":38},[28,59141,14050],{"class":42},[28,59143,54873],{"class":34},[28,59145,54876],{"class":2453},[28,59147,367],{"class":34},[28,59149,58681],{"class":735},[28,59151,228],{"class":34},[28,59153,59154,59156,59158,59160,59162,59164,59166],{"class":30,"line":2132},[28,59155,58688],{"class":34},[28,59157,58290],{"class":2453},[28,59159,367],{"class":34},[28,59161,58295],{"class":735},[28,59163,12921],{"class":34},[28,59165,54926],{"class":42},[28,59167,54929],{"class":34},[28,59169,59170,59173,59175,59177,59179],{"class":30,"line":2137},[28,59171,59172],{"class":34},"      num ",[28,59174,83],{"class":42},[28,59176,58712],{"class":34},[28,59178,58337],{"class":2453},[28,59180,2466],{"class":34},[28,59182,59183,59185,59187],{"class":30,"line":2143},[28,59184,58721],{"class":34},[28,59186,58724],{"class":2453},[28,59188,649],{"class":34},[28,59190,59191],{"class":30,"line":2164},[28,59192,33938],{"class":34},[28,59194,59195,59197,59199],{"class":30,"line":2169},[28,59196,52894],{"class":34},[28,59198,52290],{"class":51777},[28,59200,51784],{"class":34},[28,59202,59203,59205,59207],{"class":30,"line":2183},[28,59204,52262],{"class":34},[28,59206,52277],{"class":51777},[28,59208,51784],{"class":34},[28,59210,59211],{"class":30,"line":2188},[28,59212,2890],{"emptyLinePlaceholder":562},[28,59214,59215,59217,59219],{"class":30,"line":2217},[28,59216,52262],{"class":34},[28,59218,51112],{"class":51777},[28,59220,51784],{"class":34},[14,59222,59223],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[605,59225,59227],{"id":59226},"_324-事件监听版本","3.2.4 事件监听版本",[14,59229,59230],{},[420,59231],{"alt":23,"src":59232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59234,59235],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59237,59238],{},"这种方式会覆盖前边的事件监听:",[18,59240,59242],{"className":51110,"code":59241,"language":51112,"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,59243,59244,59254,59268,59272,59280,59294,59314,59326,59334,59338,59346,59358,59366,59384,59398,59409,59413,59425,59435,59439,59447,59455,59459],{"__ignoreMap":23},[28,59245,59246,59248,59250,59252],{"class":30,"line":31},[28,59247,51774],{"class":34},[28,59249,51778],{"class":51777},[28,59251,51781],{"class":2453},[28,59253,51784],{"class":34},[28,59255,59256,59258,59260,59262,59264,59266],{"class":30,"line":77},[28,59257,1529],{"class":34},[28,59259,51112],{"class":51777},[28,59261,51793],{"class":2453},[28,59263,83],{"class":34},[28,59265,51798],{"class":735},[28,59267,51784],{"class":34},[28,59269,59270],{"class":30,"line":114},[28,59271,2890],{"emptyLinePlaceholder":562},[28,59273,59274,59276,59278],{"class":30,"line":128},[28,59275,1529],{"class":34},[28,59277,51811],{"class":51777},[28,59279,51784],{"class":34},[28,59281,59282,59284,59286,59288,59290,59292],{"class":30,"line":393},[28,59283,52621],{"class":34},[28,59285,51821],{"class":51777},[28,59287,51824],{"class":2453},[28,59289,83],{"class":34},[28,59291,51829],{"class":735},[28,59293,51784],{"class":34},[28,59295,59296,59298,59300,59302,59304,59306,59308,59310,59312],{"class":30,"line":409},[28,59297,52621],{"class":34},[28,59299,51821],{"class":51777},[28,59301,15406],{"class":2453},[28,59303,83],{"class":34},[28,59305,51868],{"class":735},[28,59307,51848],{"class":2453},[28,59309,83],{"class":34},[28,59311,51875],{"class":735},[28,59313,51784],{"class":34},[28,59315,59316,59318,59320,59322,59324],{"class":30,"line":1711},[28,59317,52621],{"class":34},[28,59319,51884],{"class":51777},[28,59321,51887],{"class":34},[28,59323,51884],{"class":51777},[28,59325,51784],{"class":34},[28,59327,59328,59330,59332],{"class":30,"line":1802},[28,59329,52262],{"class":34},[28,59331,51811],{"class":51777},[28,59333,51784],{"class":34},[28,59335,59336],{"class":30,"line":1808},[28,59337,2890],{"emptyLinePlaceholder":562},[28,59339,59340,59342,59344],{"class":30,"line":1820},[28,59341,1529],{"class":34},[28,59343,52277],{"class":51777},[28,59345,51784],{"class":34},[28,59347,59348,59350,59352,59354,59356],{"class":30,"line":2102},[28,59349,52621],{"class":34},[28,59351,54364],{"class":51777},[28,59353,54370],{"class":34},[28,59355,54364],{"class":51777},[28,59357,51784],{"class":34},[28,59359,59360,59362,59364],{"class":30,"line":2107},[28,59361,52621],{"class":34},[28,59363,52290],{"class":51777},[28,59365,51784],{"class":34},[28,59367,59368,59370,59372,59374,59376,59378,59380,59382],{"class":30,"line":2113},[28,59369,11707],{"class":42},[28,59371,54868],{"class":38},[28,59373,14050],{"class":42},[28,59375,54873],{"class":34},[28,59377,54876],{"class":2453},[28,59379,367],{"class":34},[28,59381,58681],{"class":735},[28,59383,228],{"class":34},[28,59385,59386,59388,59391,59393,59396],{"class":30,"line":2118},[28,59387,58688],{"class":34},[28,59389,59390],{"class":2453},"onclick",[28,59392,14050],{"class":42},[28,59394,59395],{"class":42}," function",[28,59397,54929],{"class":34},[28,59399,59400,59403,59405,59407],{"class":30,"line":2132},[28,59401,59402],{"class":2453},"      alert",[28,59404,367],{"class":34},[28,59406,1095],{"class":38},[28,59408,228],{"class":34},[28,59410,59411],{"class":30,"line":2137},[28,59412,2677],{"class":34},[28,59414,59415,59417,59419,59421,59423],{"class":30,"line":2143},[28,59416,58688],{"class":34},[28,59418,59390],{"class":2453},[28,59420,14050],{"class":42},[28,59422,59395],{"class":42},[28,59424,54929],{"class":34},[28,59426,59427,59429,59431,59433],{"class":30,"line":2164},[28,59428,59402],{"class":2453},[28,59430,367],{"class":34},[28,59432,1370],{"class":38},[28,59434,228],{"class":34},[28,59436,59437],{"class":30,"line":2169},[28,59438,2677],{"class":34},[28,59440,59441,59443,59445],{"class":30,"line":2183},[28,59442,52894],{"class":34},[28,59444,52290],{"class":51777},[28,59446,51784],{"class":34},[28,59448,59449,59451,59453],{"class":30,"line":2188},[28,59450,52262],{"class":34},[28,59452,52277],{"class":51777},[28,59454,51784],{"class":34},[28,59456,59457],{"class":30,"line":2217},[28,59458,2890],{"emptyLinePlaceholder":562},[28,59460,59461,59463,59465],{"class":30,"line":2222},[28,59462,52262],{"class":34},[28,59464,51112],{"class":51777},[28,59466,51784],{"class":34},[14,59468,59469],{},"只要点击就输出结果为22,前边11被覆盖了",[18,59471,59473],{"className":51110,"code":59472,"language":51112,"meta":23,"style":23},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[25,59474,59475,59480,59485,59489,59494,59499],{"__ignoreMap":23},[28,59476,59477],{"class":30,"line":31},[28,59478,59479],{"class":34},"  btn.addEventListener('click', function () {\n",[28,59481,59482],{"class":30,"line":77},[28,59483,59484],{"class":34},"      alert(11)\n",[28,59486,59487],{"class":30,"line":114},[28,59488,33938],{"class":34},[28,59490,59491],{"class":30,"line":128},[28,59492,59493],{"class":34},"    btn.addEventListener('click', function () {\n",[28,59495,59496],{"class":30,"line":393},[28,59497,59498],{"class":34},"      alert(22)\n",[28,59500,59501],{"class":30,"line":409},[28,59502,33938],{"class":34},[14,59504,59505],{},"点击第一次输出11,第二次点击为22",[605,59507,59509],{"id":59508},"_325-事件类型","3.2.5 事件类型",[14,59511,59512],{},[420,59513],{"alt":23,"src":59514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22484,59516,59518],{"id":59517},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59520,59521],{},"补充知识:",[14,59523,59524],{},"轮播图自动播放模块,可以使用",[14,59526,59527],{},"let timerId = setInterval(function () {",[14,59529,59530],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59532,59533],{},"用js方法模拟进行点击事件,click必须加()",[14,59535,59536],{},"next.click()",[14,59538,59539],{},"}, 1000)",[14,59541,59542],{},[420,59543],{"alt":23,"src":59544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[18,59546,59548],{"className":53544,"code":59547,"language":53546,"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,59549,59550,59554,59564,59578,59582,59590,59605,59625,59645,59658,59666,59671,59676,59680,59684,59689,59694,59699,59704,59708,59712,59717,59722,59727,59731,59735,59740,59744,59749,59754,59758,59762,59767,59772,59777,59782,59787,59791,59795,59800,59805,59810,59815,59820,59824,59828,59833,59838,59843,59848,59853,59858,59863,59868,59873,59878,59882,59886,59891,59896,59900,59904,59909,59914,59918,59923,59928,59932,59936,59941,59945,59950,59955,59959,59964,59968,59972,59977,59982,59987,59992,59997,60002,60007,60011,60015,60019,60024,60029,60034,60039,60043,60051,60059,60063,60071,60086,60100,60121,60129,60143,60156,60171,60190,60202,60214,60226,60238,60250,60262,60274,60282,60297,60321,60345,60353,60361,60369,60377,60382,60387,60392,60397,60402,60407,60412,60417,60422,60427,60431,60436,60441,60446,60451,60456,60461,60466,60471,60476,60480,60485,60490,60495,60500,60505,60510,60515,60520,60525,60530,60535,60540,60544,60548,60553,60558,60563,60567,60572,60577,60582,60587,60592,60596,60601,60605,60609,60613,60617,60621,60625,60630,60635,60640,60645,60650,60655,60660,60665,60670,60674,60678,60683,60688,60693,60698,60703,60707,60712,60717,60722,60727,60732,60737,60741,60745,60750,60754,60759,60763,60768,60773,60778,60783,60788,60793,60797,60805,60813,60817],{"__ignoreMap":23},[28,59551,59552],{"class":30,"line":31},[28,59553,2890],{"emptyLinePlaceholder":562},[28,59555,59556,59558,59560,59562],{"class":30,"line":77},[28,59557,51774],{"class":34},[28,59559,51778],{"class":42},[28,59561,51781],{"class":38},[28,59563,51784],{"class":34},[28,59565,59566,59568,59570,59572,59574,59576],{"class":30,"line":114},[28,59567,1529],{"class":34},[28,59569,51112],{"class":51777},[28,59571,51793],{"class":2453},[28,59573,83],{"class":34},[28,59575,51798],{"class":735},[28,59577,51784],{"class":34},[28,59579,59580],{"class":30,"line":128},[28,59581,2890],{"emptyLinePlaceholder":562},[28,59583,59584,59586,59588],{"class":30,"line":393},[28,59585,1529],{"class":34},[28,59587,51811],{"class":51777},[28,59589,51784],{"class":34},[28,59591,59592,59594,59596,59598,59600,59602],{"class":30,"line":409},[28,59593,52621],{"class":34},[28,59595,51821],{"class":51777},[28,59597,51824],{"class":2453},[28,59599,83],{"class":34},[28,59601,51829],{"class":735},[28,59603,59604],{"class":34}," \u002F>\n",[28,59606,59607,59609,59611,59613,59615,59617,59619,59621,59623],{"class":30,"line":1711},[28,59608,52621],{"class":34},[28,59610,51821],{"class":51777},[28,59612,51840],{"class":2453},[28,59614,83],{"class":34},[28,59616,51845],{"class":735},[28,59618,51848],{"class":2453},[28,59620,83],{"class":34},[28,59622,51853],{"class":735},[28,59624,59604],{"class":34},[28,59626,59627,59629,59631,59633,59635,59637,59639,59641,59643],{"class":30,"line":1802},[28,59628,52621],{"class":34},[28,59630,51821],{"class":51777},[28,59632,15406],{"class":2453},[28,59634,83],{"class":34},[28,59636,51868],{"class":735},[28,59638,51848],{"class":2453},[28,59640,83],{"class":34},[28,59642,51875],{"class":735},[28,59644,59604],{"class":34},[28,59646,59647,59649,59651,59654,59656],{"class":30,"line":1808},[28,59648,52621],{"class":34},[28,59650,51884],{"class":51777},[28,59652,59653],{"class":34},">轮播图点击切换\u003C\u002F",[28,59655,51884],{"class":51777},[28,59657,51784],{"class":34},[28,59659,59660,59662,59664],{"class":30,"line":1820},[28,59661,52621],{"class":34},[28,59663,547],{"class":51777},[28,59665,51784],{"class":34},[28,59667,59668],{"class":30,"line":2102},[28,59669,59670],{"class":34},"    * {\n",[28,59672,59673],{"class":30,"line":2107},[28,59674,59675],{"class":34},"      box-sizing: border-box;\n",[28,59677,59678],{"class":30,"line":2113},[28,59679,2677],{"class":34},[28,59681,59682],{"class":30,"line":2118},[28,59683,2890],{"emptyLinePlaceholder":562},[28,59685,59686],{"class":30,"line":2132},[28,59687,59688],{"class":34},"    .slider {\n",[28,59690,59691],{"class":30,"line":2137},[28,59692,59693],{"class":34},"      width: 560px;\n",[28,59695,59696],{"class":30,"line":2143},[28,59697,59698],{"class":34},"      height: 400px;\n",[28,59700,59701],{"class":30,"line":2164},[28,59702,59703],{"class":34},"      overflow: hidden;\n",[28,59705,59706],{"class":30,"line":2169},[28,59707,2677],{"class":34},[28,59709,59710],{"class":30,"line":2183},[28,59711,2890],{"emptyLinePlaceholder":562},[28,59713,59714],{"class":30,"line":2188},[28,59715,59716],{"class":34},"    .slider-wrapper {\n",[28,59718,59719],{"class":30,"line":2217},[28,59720,59721],{"class":34},"      width: 100%;\n",[28,59723,59724],{"class":30,"line":2222},[28,59725,59726],{"class":34},"      height: 320px;\n",[28,59728,59729],{"class":30,"line":2239},[28,59730,2677],{"class":34},[28,59732,59733],{"class":30,"line":2244},[28,59734,2890],{"emptyLinePlaceholder":562},[28,59736,59737],{"class":30,"line":2249},[28,59738,59739],{"class":34},"    .slider-wrapper img {\n",[28,59741,59742],{"class":30,"line":2254},[28,59743,59721],{"class":34},[28,59745,59746],{"class":30,"line":2268},[28,59747,59748],{"class":34},"      height: 100%;\n",[28,59750,59751],{"class":30,"line":2273},[28,59752,59753],{"class":34},"      display: block;\n",[28,59755,59756],{"class":30,"line":3067},[28,59757,2677],{"class":34},[28,59759,59760],{"class":30,"line":3081},[28,59761,2890],{"emptyLinePlaceholder":562},[28,59763,59764],{"class":30,"line":3089},[28,59765,59766],{"class":34},"    .slider-footer {\n",[28,59768,59769],{"class":30,"line":3094},[28,59770,59771],{"class":34},"      height: 80px;\n",[28,59773,59774],{"class":30,"line":3100},[28,59775,59776],{"class":34},"      background-color: rgb(100, 67, 68);\n",[28,59778,59779],{"class":30,"line":3106},[28,59780,59781],{"class":34},"      padding: 12px 12px 0 12px;\n",[28,59783,59784],{"class":30,"line":3111},[28,59785,59786],{"class":34},"      position: relative;\n",[28,59788,59789],{"class":30,"line":8436},[28,59790,2677],{"class":34},[28,59792,59793],{"class":30,"line":8460},[28,59794,2890],{"emptyLinePlaceholder":562},[28,59796,59797],{"class":30,"line":8465},[28,59798,59799],{"class":34},"    .slider-footer .toggle {\n",[28,59801,59802],{"class":30,"line":8471},[28,59803,59804],{"class":34},"      position: absolute;\n",[28,59806,59807],{"class":30,"line":8498},[28,59808,59809],{"class":34},"      right: 0;\n",[28,59811,59812],{"class":30,"line":8503},[28,59813,59814],{"class":34},"      top: 12px;\n",[28,59816,59817],{"class":30,"line":8509},[28,59818,59819],{"class":34},"      display: flex;\n",[28,59821,59822],{"class":30,"line":8521},[28,59823,2677],{"class":34},[28,59825,59826],{"class":30,"line":8533},[28,59827,2890],{"emptyLinePlaceholder":562},[28,59829,59830],{"class":30,"line":8545},[28,59831,59832],{"class":34},"    .slider-footer .toggle button {\n",[28,59834,59835],{"class":30,"line":10202},[28,59836,59837],{"class":34},"      margin-right: 12px;\n",[28,59839,59840],{"class":30,"line":10227},[28,59841,59842],{"class":34},"      width: 28px;\n",[28,59844,59845],{"class":30,"line":10250},[28,59846,59847],{"class":34},"      height: 28px;\n",[28,59849,59850],{"class":30,"line":10274},[28,59851,59852],{"class":34},"      appearance: none;\n",[28,59854,59855],{"class":30,"line":10279},[28,59856,59857],{"class":34},"      border: none;\n",[28,59859,59860],{"class":30,"line":10284},[28,59861,59862],{"class":34},"      background: rgba(255, 255, 255, 0.1);\n",[28,59864,59865],{"class":30,"line":10289},[28,59866,59867],{"class":34},"      color: #fff;\n",[28,59869,59870],{"class":30,"line":10298},[28,59871,59872],{"class":34},"      border-radius: 4px;\n",[28,59874,59875],{"class":30,"line":10303},[28,59876,59877],{"class":34},"      cursor: pointer;\n",[28,59879,59880],{"class":30,"line":10309},[28,59881,2677],{"class":34},[28,59883,59884],{"class":30,"line":10330},[28,59885,2890],{"emptyLinePlaceholder":562},[28,59887,59888],{"class":30,"line":10336},[28,59889,59890],{"class":34},"    .slider-footer .toggle button:hover {\n",[28,59892,59893],{"class":30,"line":10350},[28,59894,59895],{"class":34},"      background: rgba(255, 255, 255, 0.2);\n",[28,59897,59898],{"class":30,"line":10356},[28,59899,2677],{"class":34},[28,59901,59902],{"class":30,"line":10383},[28,59903,2890],{"emptyLinePlaceholder":562},[28,59905,59906],{"class":30,"line":10392},[28,59907,59908],{"class":34},"    .slider-footer p {\n",[28,59910,59911],{"class":30,"line":10398},[28,59912,59913],{"class":34},"      margin: 0;\n",[28,59915,59916],{"class":30,"line":10406},[28,59917,59867],{"class":34},[28,59919,59920],{"class":30,"line":10411},[28,59921,59922],{"class":34},"      font-size: 18px;\n",[28,59924,59925],{"class":30,"line":17090},[28,59926,59927],{"class":34},"      margin-bottom: 10px;\n",[28,59929,59930],{"class":30,"line":17096},[28,59931,2677],{"class":34},[28,59933,59934],{"class":30,"line":17119},[28,59935,2890],{"emptyLinePlaceholder":562},[28,59937,59938],{"class":30,"line":17125},[28,59939,59940],{"class":34},"    .slider-indicator {\n",[28,59942,59943],{"class":30,"line":17148},[28,59944,59913],{"class":34},[28,59946,59947],{"class":30,"line":17162},[28,59948,59949],{"class":34},"      padding: 0;\n",[28,59951,59952],{"class":30,"line":17182},[28,59953,59954],{"class":34},"      list-style: none;\n",[28,59956,59957],{"class":30,"line":17188},[28,59958,59819],{"class":34},[28,59960,59961],{"class":30,"line":17199},[28,59962,59963],{"class":34},"      align-items: center;\n",[28,59965,59966],{"class":30,"line":17222},[28,59967,2677],{"class":34},[28,59969,59970],{"class":30,"line":17244},[28,59971,2890],{"emptyLinePlaceholder":562},[28,59973,59974],{"class":30,"line":17249},[28,59975,59976],{"class":34},"    .slider-indicator li {\n",[28,59978,59979],{"class":30,"line":17255},[28,59980,59981],{"class":34},"      width: 8px;\n",[28,59983,59984],{"class":30,"line":17269},[28,59985,59986],{"class":34},"      height: 8px;\n",[28,59988,59989],{"class":30,"line":17282},[28,59990,59991],{"class":34},"      margin: 4px;\n",[28,59993,59994],{"class":30,"line":17287},[28,59995,59996],{"class":34},"      border-radius: 50%;\n",[28,59998,59999],{"class":30,"line":17301},[28,60000,60001],{"class":34},"      background: #fff;\n",[28,60003,60004],{"class":30,"line":17306},[28,60005,60006],{"class":34},"      opacity: 0.4;\n",[28,60008,60009],{"class":30,"line":17312},[28,60010,59877],{"class":34},[28,60012,60013],{"class":30,"line":17317},[28,60014,2677],{"class":34},[28,60016,60017],{"class":30,"line":17331},[28,60018,2890],{"emptyLinePlaceholder":562},[28,60020,60021],{"class":30,"line":17336},[28,60022,60023],{"class":34},"    .slider-indicator li.active {\n",[28,60025,60026],{"class":30,"line":17341},[28,60027,60028],{"class":34},"      width: 12px;\n",[28,60030,60031],{"class":30,"line":17355},[28,60032,60033],{"class":34},"      height: 12px;\n",[28,60035,60036],{"class":30,"line":17367},[28,60037,60038],{"class":34},"      opacity: 1;\n",[28,60040,60041],{"class":30,"line":17372},[28,60042,2677],{"class":34},[28,60044,60045,60047,60049],{"class":30,"line":17385},[28,60046,52894],{"class":34},[28,60048,547],{"class":51777},[28,60050,51784],{"class":34},[28,60052,60053,60055,60057],{"class":30,"line":17390},[28,60054,52262],{"class":34},[28,60056,51811],{"class":51777},[28,60058,51784],{"class":34},[28,60060,60061],{"class":30,"line":17395},[28,60062,2890],{"emptyLinePlaceholder":562},[28,60064,60065,60067,60069],{"class":30,"line":17400},[28,60066,1529],{"class":34},[28,60068,52277],{"class":51777},[28,60070,51784],{"class":34},[28,60072,60073,60075,60077,60079,60081,60084],{"class":30,"line":17413},[28,60074,52621],{"class":34},[28,60076,52088],{"class":51777},[28,60078,53963],{"class":2453},[28,60080,83],{"class":34},[28,60082,60083],{"class":735},"\"slider\"",[28,60085,51784],{"class":34},[28,60087,60088,60090,60092,60094,60096,60098],{"class":30,"line":17418},[28,60089,51818],{"class":34},[28,60091,52088],{"class":51777},[28,60093,53963],{"class":2453},[28,60095,83],{"class":34},[28,60097,55704],{"class":735},[28,60099,51784],{"class":34},[28,60101,60102,60104,60106,60108,60110,60113,60115,60117,60119],{"class":30,"line":33111},[28,60103,55711],{"class":34},[28,60105,420],{"class":51777},[28,60107,55716],{"class":2453},[28,60109,83],{"class":34},[28,60111,60112],{"class":735},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,60114,55724],{"class":2453},[28,60116,83],{"class":34},[28,60118,8140],{"class":735},[28,60120,59604],{"class":34},[28,60122,60123,60125,60127],{"class":30,"line":33117},[28,60124,52253],{"class":34},[28,60126,52088],{"class":51777},[28,60128,51784],{"class":34},[28,60130,60131,60133,60135,60137,60139,60141],{"class":30,"line":33123},[28,60132,51818],{"class":34},[28,60134,52088],{"class":51777},[28,60136,53963],{"class":2453},[28,60138,83],{"class":34},[28,60140,55751],{"class":735},[28,60142,51784],{"class":34},[28,60144,60145,60147,60149,60152,60154],{"class":30,"line":33129},[28,60146,55711],{"class":34},[28,60148,14],{"class":51777},[28,60150,60151],{"class":34},">对人类来说会不会太超前了？\u003C\u002F",[28,60153,14],{"class":51777},[28,60155,51784],{"class":34},[28,60157,60158,60160,60162,60164,60166,60169],{"class":30,"line":33135},[28,60159,55711],{"class":34},[28,60161,1626],{"class":51777},[28,60163,53963],{"class":2453},[28,60165,83],{"class":34},[28,60167,60168],{"class":735},"\"slider-indicator\"",[28,60170,51784],{"class":34},[28,60172,60173,60175,60177,60179,60181,60184,60186,60188],{"class":30,"line":33146},[28,60174,55779],{"class":34},[28,60176,591],{"class":51777},[28,60178,53963],{"class":2453},[28,60180,83],{"class":34},[28,60182,60183],{"class":735},"\"active\"",[28,60185,55791],{"class":34},[28,60187,591],{"class":51777},[28,60189,51784],{"class":34},[28,60191,60192,60194,60196,60198,60200],{"class":30,"line":33152},[28,60193,55779],{"class":34},[28,60195,591],{"class":51777},[28,60197,55791],{"class":34},[28,60199,591],{"class":51777},[28,60201,51784],{"class":34},[28,60203,60204,60206,60208,60210,60212],{"class":30,"line":33172},[28,60205,55779],{"class":34},[28,60207,591],{"class":51777},[28,60209,55791],{"class":34},[28,60211,591],{"class":51777},[28,60213,51784],{"class":34},[28,60215,60216,60218,60220,60222,60224],{"class":30,"line":33178},[28,60217,55779],{"class":34},[28,60219,591],{"class":51777},[28,60221,55791],{"class":34},[28,60223,591],{"class":51777},[28,60225,51784],{"class":34},[28,60227,60228,60230,60232,60234,60236],{"class":30,"line":33189},[28,60229,55779],{"class":34},[28,60231,591],{"class":51777},[28,60233,55791],{"class":34},[28,60235,591],{"class":51777},[28,60237,51784],{"class":34},[28,60239,60240,60242,60244,60246,60248],{"class":30,"line":33195},[28,60241,55779],{"class":34},[28,60243,591],{"class":51777},[28,60245,55791],{"class":34},[28,60247,591],{"class":51777},[28,60249,51784],{"class":34},[28,60251,60252,60254,60256,60258,60260],{"class":30,"line":33201},[28,60253,55779],{"class":34},[28,60255,591],{"class":51777},[28,60257,55791],{"class":34},[28,60259,591],{"class":51777},[28,60261,51784],{"class":34},[28,60263,60264,60266,60268,60270,60272],{"class":30,"line":33207},[28,60265,55779],{"class":34},[28,60267,591],{"class":51777},[28,60269,55791],{"class":34},[28,60271,591],{"class":51777},[28,60273,51784],{"class":34},[28,60275,60276,60278,60280],{"class":30,"line":33213},[28,60277,55884],{"class":34},[28,60279,1626],{"class":51777},[28,60281,51784],{"class":34},[28,60283,60284,60286,60288,60290,60292,60295],{"class":30,"line":33219},[28,60285,55711],{"class":34},[28,60287,52088],{"class":51777},[28,60289,53963],{"class":2453},[28,60291,83],{"class":34},[28,60293,60294],{"class":735},"\"toggle\"",[28,60296,51784],{"class":34},[28,60298,60299,60301,60303,60305,60307,60310,60312,60315,60317,60319],{"class":30,"line":33225},[28,60300,55779],{"class":34},[28,60302,54364],{"class":51777},[28,60304,53963],{"class":2453},[28,60306,83],{"class":34},[28,60308,60309],{"class":735},"\"prev\"",[28,60311,1579],{"class":34},[28,60313,60314],{"class":38},"&lt;",[28,60316,52262],{"class":34},[28,60318,54364],{"class":51777},[28,60320,51784],{"class":34},[28,60322,60323,60325,60327,60329,60331,60334,60336,60339,60341,60343],{"class":30,"line":33231},[28,60324,55779],{"class":34},[28,60326,54364],{"class":51777},[28,60328,53963],{"class":2453},[28,60330,83],{"class":34},[28,60332,60333],{"class":735},"\"next\"",[28,60335,1579],{"class":34},[28,60337,60338],{"class":38},"&gt;",[28,60340,52262],{"class":34},[28,60342,54364],{"class":51777},[28,60344,51784],{"class":34},[28,60346,60347,60349,60351],{"class":30,"line":33251},[28,60348,55884],{"class":34},[28,60350,52088],{"class":51777},[28,60352,51784],{"class":34},[28,60354,60355,60357,60359],{"class":30,"line":33257},[28,60356,52253],{"class":34},[28,60358,52088],{"class":51777},[28,60360,51784],{"class":34},[28,60362,60363,60365,60367],{"class":30,"line":33273},[28,60364,52894],{"class":34},[28,60366,52088],{"class":51777},[28,60368,51784],{"class":34},[28,60370,60371,60373,60375],{"class":30,"line":33279},[28,60372,52621],{"class":34},[28,60374,52290],{"class":51777},[28,60376,51784],{"class":34},[28,60378,60379],{"class":30,"line":33293},[28,60380,60381],{"class":34},"    \u002F\u002F 1. 初始数据\n",[28,60383,60384],{"class":30,"line":33299},[28,60385,60386],{"class":34},"    const data = [\n",[28,60388,60389],{"class":30,"line":33314},[28,60390,60391],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[28,60393,60394],{"class":30,"line":33320},[28,60395,60396],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[28,60398,60399],{"class":30,"line":33329},[28,60400,60401],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[28,60403,60404],{"class":30,"line":33335},[28,60405,60406],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[28,60408,60409],{"class":30,"line":33344},[28,60410,60411],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[28,60413,60414],{"class":30,"line":33350},[28,60415,60416],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[28,60418,60419],{"class":30,"line":33356},[28,60420,60421],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[28,60423,60424],{"class":30,"line":33365},[28,60425,60426],{"class":34},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[28,60428,60429],{"class":30,"line":33371},[28,60430,53586],{"class":34},[28,60432,60433],{"class":30,"line":33382},[28,60434,60435],{"class":34},"    \u002F\u002F 获取元素\n",[28,60437,60438],{"class":30,"line":33388},[28,60439,60440],{"class":34},"    const img = document.querySelector('.slider-wrapper img')\n",[28,60442,60443],{"class":30,"line":33407},[28,60444,60445],{"class":34},"    const p = document.querySelector('.slider-footer p')\n",[28,60447,60448],{"class":30,"line":33413},[28,60449,60450],{"class":34},"    const footer = document.querySelector('.slider-footer')\n",[28,60452,60453],{"class":30,"line":33424},[28,60454,60455],{"class":34},"    \u002F\u002F 1. 右按钮业务\n",[28,60457,60458],{"class":30,"line":33430},[28,60459,60460],{"class":34},"    \u002F\u002F 1.1 获取右侧按钮 \n",[28,60462,60463],{"class":30,"line":33450},[28,60464,60465],{"class":34},"    const next = document.querySelector('.next')\n",[28,60467,60468],{"class":30,"line":33466},[28,60469,60470],{"class":34},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[28,60472,60473],{"class":30,"line":33472},[28,60474,60475],{"class":34},"    \u002F\u002F 1.2 注册点击事件\n",[28,60477,60478],{"class":30,"line":33486},[28,60479,2890],{"emptyLinePlaceholder":562},[28,60481,60482],{"class":30,"line":33492},[28,60483,60484],{"class":34},"    next.addEventListener('click', function () {\n",[28,60486,60487],{"class":30,"line":33498},[28,60488,60489],{"class":34},"      \u002F\u002F console.log(11)\n",[28,60491,60492],{"class":30,"line":33509},[28,60493,60494],{"class":34},"      i++\n",[28,60496,60497],{"class":30,"line":33515},[28,60498,60499],{"class":34},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[28,60501,60502],{"class":30,"line":33521},[28,60503,60504],{"class":34},"      \u002F\u002F if (i >= 8) {\n",[28,60506,60507],{"class":30,"line":33531},[28,60508,60509],{"class":34},"      \u002F\u002F   i = 0\n",[28,60511,60512],{"class":30,"line":33537},[28,60513,60514],{"class":34},"      \u002F\u002F }\n",[28,60516,60517],{"class":30,"line":33548},[28,60518,60519],{"class":34},"      i = i >= data.length ? 0 : i\n",[28,60521,60522],{"class":30,"line":33554},[28,60523,60524],{"class":34},"      \u002F\u002F 1.3 得到对应的对象\n",[28,60526,60527],{"class":30,"line":33564},[28,60528,60529],{"class":34},"      \u002F\u002F console.log(data[i])\n",[28,60531,60532],{"class":30,"line":33569},[28,60533,60534],{"class":34},"      \u002F\u002F 调用函数\n",[28,60536,60537],{"class":30,"line":33575},[28,60538,60539],{"class":34},"      toggle()\n",[28,60541,60542],{"class":30,"line":33624},[28,60543,33938],{"class":34},[28,60545,60546],{"class":30,"line":33671},[28,60547,2890],{"emptyLinePlaceholder":562},[28,60549,60550],{"class":30,"line":33676},[28,60551,60552],{"class":34},"    \u002F\u002F 2. 左侧按钮业务\n",[28,60554,60555],{"class":30,"line":33682},[28,60556,60557],{"class":34},"    \u002F\u002F 2.1 获取左侧按钮 \n",[28,60559,60560],{"class":30,"line":33701},[28,60561,60562],{"class":34},"    const prev = document.querySelector('.prev')\n",[28,60564,60565],{"class":30,"line":33707},[28,60566,60475],{"class":34},[28,60568,60569],{"class":30,"line":33726},[28,60570,60571],{"class":34},"    prev.addEventListener('click', function () {\n",[28,60573,60574],{"class":30,"line":33732},[28,60575,60576],{"class":34},"      i--\n",[28,60578,60579],{"class":30,"line":33738},[28,60580,60581],{"class":34},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[28,60583,60584],{"class":30,"line":33748},[28,60585,60586],{"class":34},"      \u002F\u002F if (i \u003C 0) {\n",[28,60588,60589],{"class":30,"line":33753},[28,60590,60591],{"class":34},"      \u002F\u002F   i = 7\n",[28,60593,60594],{"class":30,"line":33759},[28,60595,60514],{"class":34},[28,60597,60598],{"class":30,"line":33775},[28,60599,60600],{"class":34},"      i = i \u003C 0 ? data.length - 1 : i\n",[28,60602,60603],{"class":30,"line":33820},[28,60604,60524],{"class":34},[28,60606,60607],{"class":30,"line":33826},[28,60608,60529],{"class":34},[28,60610,60611],{"class":30,"line":33832},[28,60612,60534],{"class":34},[28,60614,60615],{"class":30,"line":33838},[28,60616,60539],{"class":34},[28,60618,60619],{"class":30,"line":33849},[28,60620,33938],{"class":34},[28,60622,60623],{"class":30,"line":33855},[28,60624,2890],{"emptyLinePlaceholder":562},[28,60626,60627],{"class":30,"line":33861},[28,60628,60629],{"class":34},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[28,60631,60632],{"class":30,"line":33867},[28,60633,60634],{"class":34},"    function toggle() {\n",[28,60636,60637],{"class":30,"line":33885},[28,60638,60639],{"class":34},"      \u002F\u002F 1.4 渲染对应的数据\n",[28,60641,60642],{"class":30,"line":33899},[28,60643,60644],{"class":34},"      img.src = data[i].url\n",[28,60646,60647],{"class":30,"line":33908},[28,60648,60649],{"class":34},"      p.innerHTML = data[i].title\n",[28,60651,60652],{"class":30,"line":33917},[28,60653,60654],{"class":34},"      footer.style.backgroundColor = data[i].color\n",[28,60656,60657],{"class":30,"line":33926},[28,60658,60659],{"class":34},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[28,60661,60662],{"class":30,"line":33935},[28,60663,60664],{"class":34},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[28,60666,60667],{"class":30,"line":33941},[28,60668,60669],{"class":34},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[28,60671,60672],{"class":30,"line":33947},[28,60673,2677],{"class":34},[28,60675,60676],{"class":30,"line":33955},[28,60677,2890],{"emptyLinePlaceholder":562},[28,60679,60680],{"class":30,"line":33960},[28,60681,60682],{"class":34},"    \u002F\u002F 3. 自动播放模块\n",[28,60684,60685],{"class":30,"line":33966},[28,60686,60687],{"class":34},"    let timerId = setInterval(function () {\n",[28,60689,60690],{"class":30,"line":33977},[28,60691,60692],{"class":34},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60694,60695],{"class":30,"line":33983},[28,60696,60697],{"class":34},"      next.click()\n",[28,60699,60700],{"class":30,"line":34003},[28,60701,60702],{"class":34},"    }, 1000)\n",[28,60704,60705],{"class":30,"line":34009},[28,60706,2890],{"emptyLinePlaceholder":562},[28,60708,60709],{"class":30,"line":34015},[28,60710,60711],{"class":34},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[28,60713,60714],{"class":30,"line":34021},[28,60715,60716],{"class":34},"    const slider = document.querySelector('.slider')\n",[28,60718,60719],{"class":30,"line":34038},[28,60720,60721],{"class":34},"    \u002F\u002F 注册事件\n",[28,60723,60724],{"class":30,"line":34044},[28,60725,60726],{"class":34},"    slider.addEventListener('mouseenter', function () {\n",[28,60728,60729],{"class":30,"line":34050},[28,60730,60731],{"class":34},"      \u002F\u002F 停止定时器\n",[28,60733,60734],{"class":30,"line":34056},[28,60735,60736],{"class":34},"      clearInterval(timerId)\n",[28,60738,60739],{"class":30,"line":34062},[28,60740,33938],{"class":34},[28,60742,60743],{"class":30,"line":34068},[28,60744,2890],{"emptyLinePlaceholder":562},[28,60746,60747],{"class":30,"line":34095},[28,60748,60749],{"class":34},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[28,60751,60752],{"class":30,"line":34119},[28,60753,60721],{"class":34},[28,60755,60756],{"class":30,"line":34125},[28,60757,60758],{"class":34},"    slider.addEventListener('mouseleave', function () {\n",[28,60760,60761],{"class":30,"line":34131},[28,60762,60731],{"class":34},[28,60764,60765],{"class":30,"line":34137},[28,60766,60767],{"class":34},"      if (timerId) clearInterval(timerId)\n",[28,60769,60770],{"class":30,"line":34148},[28,60771,60772],{"class":34},"      \u002F\u002F 开启定时器\n",[28,60774,60775],{"class":30,"line":34159},[28,60776,60777],{"class":34},"      timerId = setInterval(function () {\n",[28,60779,60780],{"class":30,"line":34165},[28,60781,60782],{"class":34},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60784,60785],{"class":30,"line":34182},[28,60786,60787],{"class":34},"        next.click()\n",[28,60789,60790],{"class":30,"line":34205},[28,60791,60792],{"class":34},"      }, 1000)\n",[28,60794,60795],{"class":30,"line":34228},[28,60796,33938],{"class":34},[28,60798,60799,60801,60803],{"class":30,"line":34234},[28,60800,52894],{"class":34},[28,60802,52290],{"class":51777},[28,60804,51784],{"class":34},[28,60806,60807,60809,60811],{"class":30,"line":34239},[28,60808,52262],{"class":34},[28,60810,52277],{"class":51777},[28,60812,51784],{"class":34},[28,60814,60815],{"class":30,"line":34248},[28,60816,2890],{"emptyLinePlaceholder":562},[28,60818,60819,60821,60823],{"class":30,"line":34258},[28,60820,52262],{"class":34},[28,60822,51112],{"class":51777},[28,60824,51784],{"class":34},[22484,60826,60828],{"id":60827},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60830,60831],{},"小米搜索框案例：",[18,60833,60835],{"className":51110,"code":60834,"language":51112,"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,60836,60837,60847,60861,60865,60873,60887,60907,60927,60939,60947,60953,60963,60973,60985,60989,60993,61000,61004,61015,61019,61023,61030,61041,61054,61068,61072,61076,61085,61097,61109,61123,61136,61149,61167,61178,61182,61186,61195,61212,61216,61220,61227,61237,61247,61258,61271,61283,61299,61310,61322,61326,61330,61338,61349,61366,61378,61390,61401,61405,61409,61420,61431,61435,61443,61447,61455,61459,61467,61482,61505,61520,61551,61578,61605,61632,61659,61686,61713,61722,61730,61738,61743,61763,61783,61788,61793,61811,61816,61826,61831,61845,61850,61855,61872,61881,61893,61897,61905,61913,61917],{"__ignoreMap":23},[28,60838,60839,60841,60843,60845],{"class":30,"line":31},[28,60840,51774],{"class":34},[28,60842,51778],{"class":51777},[28,60844,51781],{"class":2453},[28,60846,51784],{"class":34},[28,60848,60849,60851,60853,60855,60857,60859],{"class":30,"line":77},[28,60850,1529],{"class":34},[28,60852,51112],{"class":51777},[28,60854,51793],{"class":2453},[28,60856,83],{"class":34},[28,60858,51798],{"class":735},[28,60860,51784],{"class":34},[28,60862,60863],{"class":30,"line":114},[28,60864,2890],{"emptyLinePlaceholder":562},[28,60866,60867,60869,60871],{"class":30,"line":128},[28,60868,1529],{"class":34},[28,60870,51811],{"class":51777},[28,60872,51784],{"class":34},[28,60874,60875,60877,60879,60881,60883,60885],{"class":30,"line":393},[28,60876,51818],{"class":34},[28,60878,51821],{"class":51777},[28,60880,51824],{"class":2453},[28,60882,83],{"class":34},[28,60884,51829],{"class":735},[28,60886,51784],{"class":34},[28,60888,60889,60891,60893,60895,60897,60899,60901,60903,60905],{"class":30,"line":409},[28,60890,51818],{"class":34},[28,60892,51821],{"class":51777},[28,60894,51840],{"class":2453},[28,60896,83],{"class":34},[28,60898,51845],{"class":735},[28,60900,51848],{"class":2453},[28,60902,83],{"class":34},[28,60904,51853],{"class":735},[28,60906,51784],{"class":34},[28,60908,60909,60911,60913,60915,60917,60919,60921,60923,60925],{"class":30,"line":1711},[28,60910,51818],{"class":34},[28,60912,51821],{"class":51777},[28,60914,15406],{"class":2453},[28,60916,83],{"class":34},[28,60918,51868],{"class":735},[28,60920,51848],{"class":2453},[28,60922,83],{"class":34},[28,60924,51875],{"class":735},[28,60926,51784],{"class":34},[28,60928,60929,60931,60933,60935,60937],{"class":30,"line":1802},[28,60930,51818],{"class":34},[28,60932,51884],{"class":51777},[28,60934,51887],{"class":34},[28,60936,51884],{"class":51777},[28,60938,51784],{"class":34},[28,60940,60941,60943,60945],{"class":30,"line":1808},[28,60942,51818],{"class":34},[28,60944,547],{"class":51777},[28,60946,51784],{"class":34},[28,60948,60949,60951],{"class":30,"line":1820},[28,60950,51904],{"class":51777},[28,60952,16058],{"class":34},[28,60954,60955,60957,60959,60961],{"class":30,"line":2102},[28,60956,51911],{"class":38},[28,60958,51914],{"class":34},[28,60960,822],{"class":38},[28,60962,1781],{"class":34},[28,60964,60965,60967,60969,60971],{"class":30,"line":2107},[28,60966,51923],{"class":38},[28,60968,51914],{"class":34},[28,60970,822],{"class":38},[28,60972,1781],{"class":34},[28,60974,60975,60978,60980,60983],{"class":30,"line":2113},[28,60976,60977],{"class":38},"            box-sizing",[28,60979,51914],{"class":34},[28,60981,60982],{"class":38},"border-box",[28,60984,1781],{"class":34},[28,60986,60987],{"class":30,"line":2118},[28,60988,3019],{"class":34},[28,60990,60991],{"class":30,"line":2132},[28,60992,2890],{"emptyLinePlaceholder":562},[28,60994,60995,60998],{"class":30,"line":2137},[28,60996,60997],{"class":51777},"        ul",[28,60999,16058],{"class":34},[28,61001,61002],{"class":30,"line":2143},[28,61003,2890],{"emptyLinePlaceholder":562},[28,61005,61006,61009,61011,61013],{"class":30,"line":2164},[28,61007,61008],{"class":38},"            list-style",[28,61010,51914],{"class":34},[28,61012,55214],{"class":38},[28,61014,1781],{"class":34},[28,61016,61017],{"class":30,"line":2169},[28,61018,3019],{"class":34},[28,61020,61021],{"class":30,"line":2183},[28,61022,2890],{"emptyLinePlaceholder":562},[28,61024,61025,61028],{"class":30,"line":2188},[28,61026,61027],{"class":2453},"        .mi",[28,61029,16058],{"class":34},[28,61031,61032,61035,61037,61039],{"class":30,"line":2217},[28,61033,61034],{"class":38},"            position",[28,61036,51914],{"class":34},[28,61038,55241],{"class":38},[28,61040,1781],{"class":34},[28,61042,61043,61045,61047,61050,61052],{"class":30,"line":2222},[28,61044,51961],{"class":38},[28,61046,51914],{"class":34},[28,61048,61049],{"class":38},"223",[28,61051,51969],{"class":42},[28,61053,1781],{"class":34},[28,61055,61056,61058,61060,61062,61064,61066],{"class":30,"line":2239},[28,61057,51911],{"class":38},[28,61059,51914],{"class":34},[28,61061,938],{"class":38},[28,61063,51969],{"class":42},[28,61065,52033],{"class":38},[28,61067,1781],{"class":34},[28,61069,61070],{"class":30,"line":2244},[28,61071,3019],{"class":34},[28,61073,61074],{"class":30,"line":2249},[28,61075,2890],{"emptyLinePlaceholder":562},[28,61077,61078,61080,61083],{"class":30,"line":2254},[28,61079,61027],{"class":2453},[28,61081,61082],{"class":51777}," input",[28,61084,16058],{"class":34},[28,61086,61087,61089,61091,61093,61095],{"class":30,"line":2268},[28,61088,51961],{"class":38},[28,61090,51914],{"class":34},[28,61092,61049],{"class":38},[28,61094,51969],{"class":42},[28,61096,1781],{"class":34},[28,61098,61099,61101,61103,61105,61107],{"class":30,"line":2273},[28,61100,51976],{"class":38},[28,61102,51914],{"class":34},[28,61104,1227],{"class":38},[28,61106,51969],{"class":42},[28,61108,1781],{"class":34},[28,61110,61111,61113,61115,61117,61119,61121],{"class":30,"line":3067},[28,61112,51923],{"class":38},[28,61114,51914],{"class":34},[28,61116,822],{"class":38},[28,61118,2528],{"class":38},[28,61120,51969],{"class":42},[28,61122,1781],{"class":34},[28,61124,61125,61128,61130,61132,61134],{"class":30,"line":3081},[28,61126,61127],{"class":38},"            font-size",[28,61129,51914],{"class":34},[28,61131,1170],{"class":38},[28,61133,51969],{"class":42},[28,61135,1781],{"class":34},[28,61137,61138,61141,61143,61145,61147],{"class":30,"line":3089},[28,61139,61140],{"class":38},"            line-height",[28,61142,51914],{"class":34},[28,61144,1227],{"class":38},[28,61146,51969],{"class":42},[28,61148,1781],{"class":34},[28,61150,61151,61154,61156,61158,61160,61162,61165],{"class":30,"line":3094},[28,61152,61153],{"class":38},"            border",[28,61155,51914],{"class":34},[28,61157,39],{"class":38},[28,61159,51969],{"class":42},[28,61161,51998],{"class":38},[28,61163,61164],{"class":38}," #e0e0e0",[28,61166,1781],{"class":34},[28,61168,61169,61172,61174,61176],{"class":30,"line":3100},[28,61170,61171],{"class":38},"            outline",[28,61173,51914],{"class":34},[28,61175,55214],{"class":38},[28,61177,1781],{"class":34},[28,61179,61180],{"class":30,"line":3106},[28,61181,3019],{"class":34},[28,61183,61184],{"class":30,"line":3111},[28,61185,2890],{"emptyLinePlaceholder":562},[28,61187,61188,61190,61193],{"class":30,"line":8436},[28,61189,61027],{"class":2453},[28,61191,61192],{"class":2453}," .search",[28,61194,16058],{"class":34},[28,61196,61197,61199,61201,61203,61205,61207,61210],{"class":30,"line":8460},[28,61198,61153],{"class":38},[28,61200,51914],{"class":34},[28,61202,39],{"class":38},[28,61204,51969],{"class":42},[28,61206,51998],{"class":38},[28,61208,61209],{"class":38}," #ff6700",[28,61211,1781],{"class":34},[28,61213,61214],{"class":30,"line":8465},[28,61215,3019],{"class":34},[28,61217,61218],{"class":30,"line":8471},[28,61219,2890],{"emptyLinePlaceholder":562},[28,61221,61222,61225],{"class":30,"line":8498},[28,61223,61224],{"class":2453},"        .result-list",[28,61226,16058],{"class":34},[28,61228,61229,61231,61233,61235],{"class":30,"line":8503},[28,61230,51949],{"class":38},[28,61232,51914],{"class":34},[28,61234,55214],{"class":38},[28,61236,1781],{"class":34},[28,61238,61239,61241,61243,61245],{"class":30,"line":8509},[28,61240,61034],{"class":38},[28,61242,51914],{"class":34},[28,61244,55308],{"class":38},[28,61246,1781],{"class":34},[28,61248,61249,61252,61254,61256],{"class":30,"line":8521},[28,61250,61251],{"class":38},"            left",[28,61253,51914],{"class":34},[28,61255,822],{"class":38},[28,61257,1781],{"class":34},[28,61259,61260,61263,61265,61267,61269],{"class":30,"line":8533},[28,61261,61262],{"class":38},"            top",[28,61264,51914],{"class":34},[28,61266,1227],{"class":38},[28,61268,51969],{"class":42},[28,61270,1781],{"class":34},[28,61272,61273,61275,61277,61279,61281],{"class":30,"line":8545},[28,61274,51961],{"class":38},[28,61276,51914],{"class":34},[28,61278,61049],{"class":38},[28,61280,51969],{"class":42},[28,61282,1781],{"class":34},[28,61284,61285,61287,61289,61291,61293,61295,61297],{"class":30,"line":10202},[28,61286,61153],{"class":38},[28,61288,51914],{"class":34},[28,61290,39],{"class":38},[28,61292,51969],{"class":42},[28,61294,51998],{"class":38},[28,61296,61209],{"class":38},[28,61298,1781],{"class":34},[28,61300,61301,61304,61306,61308],{"class":30,"line":10227},[28,61302,61303],{"class":38},"            border-top",[28,61305,51914],{"class":34},[28,61307,822],{"class":38},[28,61309,1781],{"class":34},[28,61311,61312,61315,61317,61320],{"class":30,"line":10250},[28,61313,61314],{"class":38},"            background",[28,61316,51914],{"class":34},[28,61318,61319],{"class":38},"#fff",[28,61321,1781],{"class":34},[28,61323,61324],{"class":30,"line":10274},[28,61325,3019],{"class":34},[28,61327,61328],{"class":30,"line":10279},[28,61329,2890],{"emptyLinePlaceholder":562},[28,61331,61332,61334,61336],{"class":30,"line":10284},[28,61333,61224],{"class":2453},[28,61335,1889],{"class":51777},[28,61337,16058],{"class":34},[28,61339,61340,61342,61344,61347],{"class":30,"line":10289},[28,61341,51949],{"class":38},[28,61343,51914],{"class":34},[28,61345,61346],{"class":38},"block",[28,61348,1781],{"class":34},[28,61350,61351,61353,61355,61357,61359,61362,61364],{"class":30,"line":10298},[28,61352,51923],{"class":38},[28,61354,51914],{"class":34},[28,61356,970],{"class":38},[28,61358,51969],{"class":42},[28,61360,61361],{"class":38}," 15",[28,61363,51969],{"class":42},[28,61365,1781],{"class":34},[28,61367,61368,61370,61372,61374,61376],{"class":30,"line":10303},[28,61369,61127],{"class":38},[28,61371,51914],{"class":34},[28,61373,1121],{"class":38},[28,61375,51969],{"class":42},[28,61377,1781],{"class":34},[28,61379,61380,61383,61385,61388],{"class":30,"line":10309},[28,61381,61382],{"class":38},"            color",[28,61384,51914],{"class":34},[28,61386,61387],{"class":38},"#424242",[28,61389,1781],{"class":34},[28,61391,61392,61395,61397,61399],{"class":30,"line":10330},[28,61393,61394],{"class":38},"            text-decoration",[28,61396,51914],{"class":34},[28,61398,55214],{"class":38},[28,61400,1781],{"class":34},[28,61402,61403],{"class":30,"line":10336},[28,61404,3019],{"class":34},[28,61406,61407],{"class":30,"line":10350},[28,61408,2890],{"emptyLinePlaceholder":562},[28,61410,61411,61413,61415,61418],{"class":30,"line":10356},[28,61412,61224],{"class":2453},[28,61414,1889],{"class":51777},[28,61416,61417],{"class":2453},":hover",[28,61419,16058],{"class":34},[28,61421,61422,61424,61426,61429],{"class":30,"line":10383},[28,61423,52117],{"class":38},[28,61425,51914],{"class":34},[28,61427,61428],{"class":38},"#eee",[28,61430,1781],{"class":34},[28,61432,61433],{"class":30,"line":10392},[28,61434,3019],{"class":34},[28,61436,61437,61439,61441],{"class":30,"line":10398},[28,61438,52253],{"class":34},[28,61440,547],{"class":51777},[28,61442,51784],{"class":34},[28,61444,61445],{"class":30,"line":10406},[28,61446,2890],{"emptyLinePlaceholder":562},[28,61448,61449,61451,61453],{"class":30,"line":10411},[28,61450,52262],{"class":34},[28,61452,51811],{"class":51777},[28,61454,51784],{"class":34},[28,61456,61457],{"class":30,"line":17090},[28,61458,2890],{"emptyLinePlaceholder":562},[28,61460,61461,61463,61465],{"class":30,"line":17096},[28,61462,1529],{"class":34},[28,61464,52277],{"class":51777},[28,61466,51784],{"class":34},[28,61468,61469,61471,61473,61475,61477,61480],{"class":30,"line":17119},[28,61470,51818],{"class":34},[28,61472,52088],{"class":51777},[28,61474,53963],{"class":2453},[28,61476,83],{"class":34},[28,61478,61479],{"class":735},"\"mi\"",[28,61481,51784],{"class":34},[28,61483,61484,61486,61488,61490,61492,61495,61498,61500,61503],{"class":30,"line":17125},[28,61485,55779],{"class":34},[28,61487,54298],{"class":51777},[28,61489,54301],{"class":2453},[28,61491,83],{"class":34},[28,61493,61494],{"class":735},"\"search\"",[28,61496,61497],{"class":2453}," placeholder",[28,61499,83],{"class":34},[28,61501,61502],{"class":735},"\"小米笔记本\"",[28,61504,51784],{"class":34},[28,61506,61507,61509,61511,61513,61515,61518],{"class":30,"line":17148},[28,61508,55779],{"class":34},[28,61510,1626],{"class":51777},[28,61512,53963],{"class":2453},[28,61514,83],{"class":34},[28,61516,61517],{"class":735},"\"result-list\"",[28,61519,51784],{"class":34},[28,61521,61522,61525,61527,61530,61532,61535,61537,61540,61543,61545,61547,61549],{"class":30,"line":17162},[28,61523,61524],{"class":34},"            \u003C",[28,61526,591],{"class":51777},[28,61528,61529],{"class":34},">\u003C",[28,61531,80],{"class":51777},[28,61533,61534],{"class":2453}," href",[28,61536,83],{"class":34},[28,61538,61539],{"class":735},"\"#\"",[28,61541,61542],{"class":34},">全部商品\u003C\u002F",[28,61544,80],{"class":51777},[28,61546,55791],{"class":34},[28,61548,591],{"class":51777},[28,61550,51784],{"class":34},[28,61552,61553,61555,61557,61559,61561,61563,61565,61567,61570,61572,61574,61576],{"class":30,"line":17182},[28,61554,61524],{"class":34},[28,61556,591],{"class":51777},[28,61558,61529],{"class":34},[28,61560,80],{"class":51777},[28,61562,61534],{"class":2453},[28,61564,83],{"class":34},[28,61566,61539],{"class":735},[28,61568,61569],{"class":34},">小米11\u003C\u002F",[28,61571,80],{"class":51777},[28,61573,55791],{"class":34},[28,61575,591],{"class":51777},[28,61577,51784],{"class":34},[28,61579,61580,61582,61584,61586,61588,61590,61592,61594,61597,61599,61601,61603],{"class":30,"line":17188},[28,61581,61524],{"class":34},[28,61583,591],{"class":51777},[28,61585,61529],{"class":34},[28,61587,80],{"class":51777},[28,61589,61534],{"class":2453},[28,61591,83],{"class":34},[28,61593,61539],{"class":735},[28,61595,61596],{"class":34},">小米10S\u003C\u002F",[28,61598,80],{"class":51777},[28,61600,55791],{"class":34},[28,61602,591],{"class":51777},[28,61604,51784],{"class":34},[28,61606,61607,61609,61611,61613,61615,61617,61619,61621,61624,61626,61628,61630],{"class":30,"line":17199},[28,61608,61524],{"class":34},[28,61610,591],{"class":51777},[28,61612,61529],{"class":34},[28,61614,80],{"class":51777},[28,61616,61534],{"class":2453},[28,61618,83],{"class":34},[28,61620,61539],{"class":735},[28,61622,61623],{"class":34},">小米笔记本\u003C\u002F",[28,61625,80],{"class":51777},[28,61627,55791],{"class":34},[28,61629,591],{"class":51777},[28,61631,51784],{"class":34},[28,61633,61634,61636,61638,61640,61642,61644,61646,61648,61651,61653,61655,61657],{"class":30,"line":17222},[28,61635,61524],{"class":34},[28,61637,591],{"class":51777},[28,61639,61529],{"class":34},[28,61641,80],{"class":51777},[28,61643,61534],{"class":2453},[28,61645,83],{"class":34},[28,61647,61539],{"class":735},[28,61649,61650],{"class":34},">小米手机\u003C\u002F",[28,61652,80],{"class":51777},[28,61654,55791],{"class":34},[28,61656,591],{"class":51777},[28,61658,51784],{"class":34},[28,61660,61661,61663,61665,61667,61669,61671,61673,61675,61678,61680,61682,61684],{"class":30,"line":17244},[28,61662,61524],{"class":34},[28,61664,591],{"class":51777},[28,61666,61529],{"class":34},[28,61668,80],{"class":51777},[28,61670,61534],{"class":2453},[28,61672,83],{"class":34},[28,61674,61539],{"class":735},[28,61676,61677],{"class":34},">黑鲨4\u003C\u002F",[28,61679,80],{"class":51777},[28,61681,55791],{"class":34},[28,61683,591],{"class":51777},[28,61685,51784],{"class":34},[28,61687,61688,61690,61692,61694,61696,61698,61700,61702,61705,61707,61709,61711],{"class":30,"line":17249},[28,61689,61524],{"class":34},[28,61691,591],{"class":51777},[28,61693,61529],{"class":34},[28,61695,80],{"class":51777},[28,61697,61534],{"class":2453},[28,61699,83],{"class":34},[28,61701,61539],{"class":735},[28,61703,61704],{"class":34},">空调\u003C\u002F",[28,61706,80],{"class":51777},[28,61708,55791],{"class":34},[28,61710,591],{"class":51777},[28,61712,51784],{"class":34},[28,61714,61715,61718,61720],{"class":30,"line":17255},[28,61716,61717],{"class":34},"        \u003C\u002F",[28,61719,1626],{"class":51777},[28,61721,51784],{"class":34},[28,61723,61724,61726,61728],{"class":30,"line":17269},[28,61725,52253],{"class":34},[28,61727,52088],{"class":51777},[28,61729,51784],{"class":34},[28,61731,61732,61734,61736],{"class":30,"line":17282},[28,61733,51818],{"class":34},[28,61735,52290],{"class":51777},[28,61737,51784],{"class":34},[28,61739,61740],{"class":30,"line":17287},[28,61741,61742],{"class":73},"        \u002F\u002F 1. 获取元素\n",[28,61744,61745,61748,61750,61752,61754,61756,61758,61761],{"class":30,"line":17301},[28,61746,61747],{"class":42},"        const",[28,61749,61082],{"class":38},[28,61751,14050],{"class":42},[28,61753,54873],{"class":34},[28,61755,54876],{"class":2453},[28,61757,367],{"class":34},[28,61759,61760],{"class":735},"'[type=search]'",[28,61762,228],{"class":34},[28,61764,61765,61767,61770,61772,61774,61776,61778,61781],{"class":30,"line":17306},[28,61766,61747],{"class":42},[28,61768,61769],{"class":38}," ul",[28,61771,14050],{"class":42},[28,61773,54873],{"class":34},[28,61775,54876],{"class":2453},[28,61777,367],{"class":34},[28,61779,61780],{"class":735},"'.result-list'",[28,61782,228],{"class":34},[28,61784,61785],{"class":30,"line":17312},[28,61786,61787],{"class":73},"        \u002F\u002F console.log(input)\n",[28,61789,61790],{"class":30,"line":17317},[28,61791,61792],{"class":73},"        \u002F\u002F 2. 监听事件 获得焦点\n",[28,61794,61795,61798,61800,61802,61805,61807,61809],{"class":30,"line":17331},[28,61796,61797],{"class":34},"        input.",[28,61799,58290],{"class":2453},[28,61801,367],{"class":34},[28,61803,61804],{"class":735},"'focus'",[28,61806,12921],{"class":34},[28,61808,54926],{"class":42},[28,61810,54929],{"class":34},[28,61812,61813],{"class":30,"line":17336},[28,61814,61815],{"class":73},"            \u002F\u002F ul显示\n",[28,61817,61818,61821,61823],{"class":30,"line":17341},[28,61819,61820],{"class":34},"            ul.style.display ",[28,61822,83],{"class":42},[28,61824,61825],{"class":735}," 'block'\n",[28,61827,61828],{"class":30,"line":17355},[28,61829,61830],{"class":73},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[28,61832,61833,61836,61838,61840,61843],{"class":30,"line":17367},[28,61834,61835],{"class":34},"            input.classList.",[28,61837,5822],{"class":2453},[28,61839,367],{"class":34},[28,61841,61842],{"class":735},"'search'",[28,61844,228],{"class":34},[28,61846,61847],{"class":30,"line":17372},[28,61848,61849],{"class":34},"        })\n",[28,61851,61852],{"class":30,"line":17385},[28,61853,61854],{"class":73},"        \u002F\u002F 3. 监听事件 失去焦点\n",[28,61856,61857,61859,61861,61863,61866,61868,61870],{"class":30,"line":17390},[28,61858,61797],{"class":34},[28,61860,58290],{"class":2453},[28,61862,367],{"class":34},[28,61864,61865],{"class":735},"'blur'",[28,61867,12921],{"class":34},[28,61869,54926],{"class":42},[28,61871,54929],{"class":34},[28,61873,61874,61876,61878],{"class":30,"line":17395},[28,61875,61820],{"class":34},[28,61877,83],{"class":42},[28,61879,61880],{"class":735}," 'none'\n",[28,61882,61883,61885,61887,61889,61891],{"class":30,"line":17400},[28,61884,61835],{"class":34},[28,61886,57483],{"class":2453},[28,61888,367],{"class":34},[28,61890,61842],{"class":735},[28,61892,228],{"class":34},[28,61894,61895],{"class":30,"line":17413},[28,61896,61849],{"class":34},[28,61898,61899,61901,61903],{"class":30,"line":17418},[28,61900,52253],{"class":34},[28,61902,52290],{"class":51777},[28,61904,51784],{"class":34},[28,61906,61907,61909,61911],{"class":30,"line":33111},[28,61908,52262],{"class":34},[28,61910,52277],{"class":51777},[28,61912,51784],{"class":34},[28,61914,61915],{"class":30,"line":33117},[28,61916,2890],{"emptyLinePlaceholder":562},[28,61918,61919,61921,61923],{"class":30,"line":33123},[28,61920,52262],{"class":34},[28,61922,51112],{"class":51777},[28,61924,51784],{"class":34},[22484,61926,61928],{"id":61927},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61930,61931],{},"评论字数统计案例",[14,61933,61934],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61936,61937],{},"牢记focus伪类选择器",[51821,61939],{"charSet":61940},"UTF-8",[51821,61942],{"name":61943,"content":61944},"viewport","width=device-width, initial-scale=1.0",[51884,61946,61947],{},"Document",[547,61949,61950],{},"\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",[54298,61952],{"type":5675},[1626,61954,61955,61958],{},[591,61956,61957],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[591,61959,61960],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[18,61962,61964],{"className":51110,"code":61963,"language":51112,"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,61965,61966,61976,61990,61994,62002,62016,62036,62056,62069,62077,62084,62097,62111,62121,62131,62135,62139,62146,62158,62170,62182,62194,62223,62236,62240,62244,62253,62264,62276,62287,62298,62310,62321,62333,62349,62361,62365,62369,62380,62391,62401,62413,62417,62421,62429,62440,62450,62461,62473,62486,62498,62510,62514,62518,62527,62539,62550,62563,62574,62588,62592,62596,62603,62615,62627,62637,62641,62645,62654,62666,62676,62680,62684,62695,62705,62724,62737,62741,62745,62755,62765,62769,62773,62784,62795,62807,62819,62823,62827,62838,62849,62863,62867,62871,62882,62892,62904,62908,62916,62924,62928,62936,62951,62970,63010,63023,63031,63045,63065,63073,63088,63111,63129,63144,63164,63184,63204,63212,63220,63228,63236,63256,63276,63281,63298,63307,63311,63316,63332,63340,63344,63349,63366,63371,63396,63400,63404,63409,63414,63422,63430,63434],{"__ignoreMap":23},[28,61967,61968,61970,61972,61974],{"class":30,"line":31},[28,61969,51774],{"class":34},[28,61971,51778],{"class":51777},[28,61973,51781],{"class":2453},[28,61975,51784],{"class":34},[28,61977,61978,61980,61982,61984,61986,61988],{"class":30,"line":77},[28,61979,1529],{"class":34},[28,61981,51112],{"class":51777},[28,61983,51793],{"class":2453},[28,61985,83],{"class":34},[28,61987,51798],{"class":735},[28,61989,51784],{"class":34},[28,61991,61992],{"class":30,"line":114},[28,61993,2890],{"emptyLinePlaceholder":562},[28,61995,61996,61998,62000],{"class":30,"line":128},[28,61997,1529],{"class":34},[28,61999,51811],{"class":51777},[28,62001,51784],{"class":34},[28,62003,62004,62006,62008,62010,62012,62014],{"class":30,"line":393},[28,62005,52621],{"class":34},[28,62007,51821],{"class":51777},[28,62009,51824],{"class":2453},[28,62011,83],{"class":34},[28,62013,51829],{"class":735},[28,62015,51784],{"class":34},[28,62017,62018,62020,62022,62024,62026,62028,62030,62032,62034],{"class":30,"line":409},[28,62019,52621],{"class":34},[28,62021,51821],{"class":51777},[28,62023,51840],{"class":2453},[28,62025,83],{"class":34},[28,62027,51845],{"class":735},[28,62029,51848],{"class":2453},[28,62031,83],{"class":34},[28,62033,51853],{"class":735},[28,62035,51784],{"class":34},[28,62037,62038,62040,62042,62044,62046,62048,62050,62052,62054],{"class":30,"line":1711},[28,62039,52621],{"class":34},[28,62041,51821],{"class":51777},[28,62043,15406],{"class":2453},[28,62045,83],{"class":34},[28,62047,51868],{"class":735},[28,62049,51848],{"class":2453},[28,62051,83],{"class":34},[28,62053,51875],{"class":735},[28,62055,51784],{"class":34},[28,62057,62058,62060,62062,62065,62067],{"class":30,"line":1802},[28,62059,52621],{"class":34},[28,62061,51884],{"class":51777},[28,62063,62064],{"class":34},">评论回车发布\u003C\u002F",[28,62066,51884],{"class":51777},[28,62068,51784],{"class":34},[28,62070,62071,62073,62075],{"class":30,"line":1808},[28,62072,52621],{"class":34},[28,62074,547],{"class":51777},[28,62076,51784],{"class":34},[28,62078,62079,62082],{"class":30,"line":1820},[28,62080,62081],{"class":2453},"    .wrapper",[28,62083,16058],{"class":34},[28,62085,62086,62089,62091,62093,62095],{"class":30,"line":2102},[28,62087,62088],{"class":38},"      min-width",[28,62090,51914],{"class":34},[28,62092,4475],{"class":38},[28,62094,51969],{"class":42},[28,62096,1781],{"class":34},[28,62098,62099,62102,62104,62107,62109],{"class":30,"line":2107},[28,62100,62101],{"class":38},"      max-width",[28,62103,51914],{"class":34},[28,62105,62106],{"class":38},"800",[28,62108,51969],{"class":42},[28,62110,1781],{"class":34},[28,62112,62113,62115,62117,62119],{"class":30,"line":2113},[28,62114,55486],{"class":38},[28,62116,51914],{"class":34},[28,62118,51954],{"class":38},[28,62120,1781],{"class":34},[28,62122,62123,62125,62127,62129],{"class":30,"line":2118},[28,62124,55497],{"class":38},[28,62126,51914],{"class":34},[28,62128,52057],{"class":38},[28,62130,1781],{"class":34},[28,62132,62133],{"class":30,"line":2132},[28,62134,2677],{"class":34},[28,62136,62137],{"class":30,"line":2137},[28,62138,2890],{"emptyLinePlaceholder":562},[28,62140,62141,62144],{"class":30,"line":2143},[28,62142,62143],{"class":2453},"    .avatar",[28,62145,16058],{"class":34},[28,62147,62148,62150,62152,62154,62156],{"class":30,"line":2164},[28,62149,55248],{"class":38},[28,62151,51914],{"class":34},[28,62153,1227],{"class":38},[28,62155,51969],{"class":42},[28,62157,1781],{"class":34},[28,62159,62160,62162,62164,62166,62168],{"class":30,"line":2169},[28,62161,55262],{"class":38},[28,62163,51914],{"class":34},[28,62165,1227],{"class":38},[28,62167,51969],{"class":42},[28,62169,1781],{"class":34},[28,62171,62172,62174,62176,62178,62180],{"class":30,"line":2183},[28,62173,55611],{"class":38},[28,62175,51914],{"class":34},[28,62177,1276],{"class":38},[28,62179,954],{"class":42},[28,62181,1781],{"class":34},[28,62183,62184,62187,62189,62192],{"class":30,"line":2188},[28,62185,62186],{"class":38},"      overflow",[28,62188,51914],{"class":34},[28,62190,62191],{"class":38},"hidden",[28,62193,1781],{"class":34},[28,62195,62196,62199,62201,62204,62206,62209,62211,62214,62216,62218,62221],{"class":30,"line":2217},[28,62197,62198],{"class":38},"      background",[28,62200,51914],{"class":34},[28,62202,62203],{"class":38},"url",[28,62205,367],{"class":34},[28,62207,62208],{"class":5704},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[28,62210,14200],{"class":34},[28,62212,62213],{"class":38},"no-repeat",[28,62215,17630],{"class":38},[28,62217,25465],{"class":34},[28,62219,62220],{"class":38},"cover",[28,62222,1781],{"class":34},[28,62224,62225,62228,62230,62232,62234],{"class":30,"line":2222},[28,62226,62227],{"class":38},"      margin-right",[28,62229,51914],{"class":34},[28,62231,1320],{"class":38},[28,62233,51969],{"class":42},[28,62235,1781],{"class":34},[28,62237,62238],{"class":30,"line":2239},[28,62239,2677],{"class":34},[28,62241,62242],{"class":30,"line":2244},[28,62243,2890],{"emptyLinePlaceholder":562},[28,62245,62246,62248,62251],{"class":30,"line":2249},[28,62247,62081],{"class":2453},[28,62249,62250],{"class":51777}," textarea",[28,62252,16058],{"class":34},[28,62254,62255,62258,62260,62262],{"class":30,"line":2254},[28,62256,62257],{"class":38},"      outline",[28,62259,51914],{"class":34},[28,62261,55214],{"class":38},[28,62263,1781],{"class":34},[28,62265,62266,62269,62271,62274],{"class":30,"line":2268},[28,62267,62268],{"class":38},"      border-color",[28,62270,51914],{"class":34},[28,62272,62273],{"class":38},"transparent",[28,62275,1781],{"class":34},[28,62277,62278,62281,62283,62285],{"class":30,"line":2273},[28,62279,62280],{"class":38},"      resize",[28,62282,51914],{"class":34},[28,62284,55214],{"class":38},[28,62286,1781],{"class":34},[28,62288,62289,62291,62293,62296],{"class":30,"line":3067},[28,62290,62198],{"class":38},[28,62292,51914],{"class":34},[28,62294,62295],{"class":38},"#f5f5f5",[28,62297,1781],{"class":34},[28,62299,62300,62302,62304,62306,62308],{"class":30,"line":3081},[28,62301,55611],{"class":38},[28,62303,51914],{"class":34},[28,62305,103],{"class":38},[28,62307,51969],{"class":42},[28,62309,1781],{"class":34},[28,62311,62312,62315,62317,62319],{"class":30,"line":3089},[28,62313,62314],{"class":38},"      flex",[28,62316,51914],{"class":34},[28,62318,39],{"class":38},[28,62320,1781],{"class":34},[28,62322,62323,62325,62327,62329,62331],{"class":30,"line":3094},[28,62324,55172],{"class":38},[28,62326,51914],{"class":34},[28,62328,225],{"class":38},[28,62330,51969],{"class":42},[28,62332,1781],{"class":34},[28,62334,62335,62338,62340,62342,62345,62347],{"class":30,"line":3100},[28,62336,62337],{"class":38},"      transition",[28,62339,51914],{"class":34},[28,62341,28607],{"class":38},[28,62343,62344],{"class":38}," 0.5",[28,62346,1315],{"class":42},[28,62348,1781],{"class":34},[28,62350,62351,62353,62355,62357,62359],{"class":30,"line":3106},[28,62352,55262],{"class":38},[28,62354,51914],{"class":34},[28,62356,1570],{"class":38},[28,62358,51969],{"class":42},[28,62360,1781],{"class":34},[28,62362,62363],{"class":30,"line":3111},[28,62364,2677],{"class":34},[28,62366,62367],{"class":30,"line":8436},[28,62368,2890],{"emptyLinePlaceholder":562},[28,62370,62371,62373,62375,62378],{"class":30,"line":8460},[28,62372,62081],{"class":2453},[28,62374,62250],{"class":51777},[28,62376,62377],{"class":2453},":focus",[28,62379,16058],{"class":34},[28,62381,62382,62384,62386,62389],{"class":30,"line":8465},[28,62383,62268],{"class":38},[28,62385,51914],{"class":34},[28,62387,62388],{"class":38},"#e4e4e4",[28,62390,1781],{"class":34},[28,62392,62393,62395,62397,62399],{"class":30,"line":8471},[28,62394,62198],{"class":38},[28,62396,51914],{"class":34},[28,62398,61319],{"class":38},[28,62400,1781],{"class":34},[28,62402,62403,62405,62407,62409,62411],{"class":30,"line":8498},[28,62404,55262],{"class":38},[28,62406,51914],{"class":34},[28,62408,1276],{"class":38},[28,62410,51969],{"class":42},[28,62412,1781],{"class":34},[28,62414,62415],{"class":30,"line":8503},[28,62416,2677],{"class":34},[28,62418,62419],{"class":30,"line":8509},[28,62420,2890],{"emptyLinePlaceholder":562},[28,62422,62423,62425,62427],{"class":30,"line":8521},[28,62424,62081],{"class":2453},[28,62426,57944],{"class":51777},[28,62428,16058],{"class":34},[28,62430,62431,62433,62435,62438],{"class":30,"line":8533},[28,62432,62198],{"class":38},[28,62434,51914],{"class":34},[28,62436,62437],{"class":38},"#00aeec",[28,62439,1781],{"class":34},[28,62441,62442,62444,62446,62448],{"class":30,"line":8545},[28,62443,57893],{"class":38},[28,62445,51914],{"class":34},[28,62447,61319],{"class":38},[28,62449,1781],{"class":34},[28,62451,62452,62455,62457,62459],{"class":30,"line":10202},[28,62453,62454],{"class":38},"      border",[28,62456,51914],{"class":34},[28,62458,55214],{"class":38},[28,62460,1781],{"class":34},[28,62462,62463,62465,62467,62469,62471],{"class":30,"line":10227},[28,62464,55611],{"class":38},[28,62466,51914],{"class":34},[28,62468,103],{"class":38},[28,62470,51969],{"class":42},[28,62472,1781],{"class":34},[28,62474,62475,62478,62480,62482,62484],{"class":30,"line":10250},[28,62476,62477],{"class":38},"      margin-left",[28,62479,51914],{"class":34},[28,62481,225],{"class":38},[28,62483,51969],{"class":42},[28,62485,1781],{"class":34},[28,62487,62488,62490,62492,62494,62496],{"class":30,"line":10274},[28,62489,55248],{"class":38},[28,62491,51914],{"class":34},[28,62493,982],{"class":38},[28,62495,51969],{"class":42},[28,62497,1781],{"class":34},[28,62499,62500,62503,62505,62508],{"class":30,"line":10279},[28,62501,62502],{"class":38},"      cursor",[28,62504,51914],{"class":34},[28,62506,62507],{"class":38},"pointer",[28,62509,1781],{"class":34},[28,62511,62512],{"class":30,"line":10284},[28,62513,2677],{"class":34},[28,62515,62516],{"class":30,"line":10289},[28,62517,2890],{"emptyLinePlaceholder":562},[28,62519,62520,62522,62525],{"class":30,"line":10298},[28,62521,62081],{"class":2453},[28,62523,62524],{"class":2453}," .total",[28,62526,16058],{"class":34},[28,62528,62529,62531,62533,62535,62537],{"class":30,"line":10303},[28,62530,62227],{"class":38},[28,62532,51914],{"class":34},[28,62534,1232],{"class":38},[28,62536,51969],{"class":42},[28,62538,1781],{"class":34},[28,62540,62541,62543,62545,62548],{"class":30,"line":10309},[28,62542,57893],{"class":38},[28,62544,51914],{"class":34},[28,62546,62547],{"class":38},"#999",[28,62549,1781],{"class":34},[28,62551,62552,62555,62557,62559,62561],{"class":30,"line":10330},[28,62553,62554],{"class":38},"      margin-top",[28,62556,51914],{"class":34},[28,62558,108],{"class":38},[28,62560,51969],{"class":42},[28,62562,1781],{"class":34},[28,62564,62565,62568,62570,62572],{"class":30,"line":10336},[28,62566,62567],{"class":38},"      opacity",[28,62569,51914],{"class":34},[28,62571,822],{"class":38},[28,62573,1781],{"class":34},[28,62575,62576,62578,62580,62582,62584,62586],{"class":30,"line":10350},[28,62577,62337],{"class":38},[28,62579,51914],{"class":34},[28,62581,28607],{"class":38},[28,62583,62344],{"class":38},[28,62585,1315],{"class":42},[28,62587,1781],{"class":34},[28,62589,62590],{"class":30,"line":10356},[28,62591,2677],{"class":34},[28,62593,62594],{"class":30,"line":10383},[28,62595,2890],{"emptyLinePlaceholder":562},[28,62597,62598,62601],{"class":30,"line":10392},[28,62599,62600],{"class":2453},"    .list",[28,62602,16058],{"class":34},[28,62604,62605,62607,62609,62611,62613],{"class":30,"line":10398},[28,62606,62088],{"class":38},[28,62608,51914],{"class":34},[28,62610,4475],{"class":38},[28,62612,51969],{"class":42},[28,62614,1781],{"class":34},[28,62616,62617,62619,62621,62623,62625],{"class":30,"line":10406},[28,62618,62101],{"class":38},[28,62620,51914],{"class":34},[28,62622,62106],{"class":38},[28,62624,51969],{"class":42},[28,62626,1781],{"class":34},[28,62628,62629,62631,62633,62635],{"class":30,"line":10411},[28,62630,55486],{"class":38},[28,62632,51914],{"class":34},[28,62634,51954],{"class":38},[28,62636,1781],{"class":34},[28,62638,62639],{"class":30,"line":17090},[28,62640,2677],{"class":34},[28,62642,62643],{"class":30,"line":17096},[28,62644,2890],{"emptyLinePlaceholder":562},[28,62646,62647,62649,62652],{"class":30,"line":17119},[28,62648,62600],{"class":2453},[28,62650,62651],{"class":2453}," .item",[28,62653,16058],{"class":34},[28,62655,62656,62658,62660,62662,62664],{"class":30,"line":17125},[28,62657,55248],{"class":38},[28,62659,51914],{"class":34},[28,62661,938],{"class":38},[28,62663,954],{"class":42},[28,62665,1781],{"class":34},[28,62667,62668,62670,62672,62674],{"class":30,"line":17148},[28,62669,55486],{"class":38},[28,62671,51914],{"class":34},[28,62673,51954],{"class":38},[28,62675,1781],{"class":34},[28,62677,62678],{"class":30,"line":17162},[28,62679,2677],{"class":34},[28,62681,62682],{"class":30,"line":17182},[28,62683,2890],{"emptyLinePlaceholder":562},[28,62685,62686,62688,62690,62693],{"class":30,"line":17188},[28,62687,62600],{"class":2453},[28,62689,62651],{"class":2453},[28,62691,62692],{"class":2453}," .info",[28,62694,16058],{"class":34},[28,62696,62697,62699,62701,62703],{"class":30,"line":17199},[28,62698,62314],{"class":38},[28,62700,51914],{"class":34},[28,62702,39],{"class":38},[28,62704,1781],{"class":34},[28,62706,62707,62710,62712,62714,62716,62719,62722],{"class":30,"line":17222},[28,62708,62709],{"class":38},"      border-bottom",[28,62711,51914],{"class":34},[28,62713,39],{"class":38},[28,62715,51969],{"class":42},[28,62717,62718],{"class":38}," dashed",[28,62720,62721],{"class":38}," #e4e4e4",[28,62723,1781],{"class":34},[28,62725,62726,62729,62731,62733,62735],{"class":30,"line":17244},[28,62727,62728],{"class":38},"      padding-bottom",[28,62730,51914],{"class":34},[28,62732,225],{"class":38},[28,62734,51969],{"class":42},[28,62736,1781],{"class":34},[28,62738,62739],{"class":30,"line":17249},[28,62740,2677],{"class":34},[28,62742,62743],{"class":30,"line":17255},[28,62744,2890],{"emptyLinePlaceholder":562},[28,62746,62747,62749,62751,62753],{"class":30,"line":17269},[28,62748,62600],{"class":2453},[28,62750,62651],{"class":2453},[28,62752,7313],{"class":51777},[28,62754,16058],{"class":34},[28,62756,62757,62759,62761,62763],{"class":30,"line":17282},[28,62758,55183],{"class":38},[28,62760,51914],{"class":34},[28,62762,822],{"class":38},[28,62764,1781],{"class":34},[28,62766,62767],{"class":30,"line":17287},[28,62768,2677],{"class":34},[28,62770,62771],{"class":30,"line":17301},[28,62772,2890],{"emptyLinePlaceholder":562},[28,62774,62775,62777,62779,62782],{"class":30,"line":17306},[28,62776,62600],{"class":2453},[28,62778,62651],{"class":2453},[28,62780,62781],{"class":2453}," .name",[28,62783,16058],{"class":34},[28,62785,62786,62788,62790,62793],{"class":30,"line":17312},[28,62787,57893],{"class":38},[28,62789,51914],{"class":34},[28,62791,62792],{"class":38},"#FB7299",[28,62794,1781],{"class":34},[28,62796,62797,62799,62801,62803,62805],{"class":30,"line":17317},[28,62798,55399],{"class":38},[28,62800,51914],{"class":34},[28,62802,1170],{"class":38},[28,62804,51969],{"class":42},[28,62806,1781],{"class":34},[28,62808,62809,62812,62814,62817],{"class":30,"line":17331},[28,62810,62811],{"class":38},"      font-weight",[28,62813,51914],{"class":34},[28,62815,62816],{"class":38},"bold",[28,62818,1781],{"class":34},[28,62820,62821],{"class":30,"line":17336},[28,62822,2677],{"class":34},[28,62824,62825],{"class":30,"line":17341},[28,62826,2890],{"emptyLinePlaceholder":562},[28,62828,62829,62831,62833,62836],{"class":30,"line":17355},[28,62830,62600],{"class":2453},[28,62832,62651],{"class":2453},[28,62834,62835],{"class":2453}," .text",[28,62837,16058],{"class":34},[28,62839,62840,62842,62844,62847],{"class":30,"line":17367},[28,62841,57893],{"class":38},[28,62843,51914],{"class":34},[28,62845,62846],{"class":38},"#333",[28,62848,1781],{"class":34},[28,62850,62851,62853,62855,62857,62859,62861],{"class":30,"line":17372},[28,62852,55172],{"class":38},[28,62854,51914],{"class":34},[28,62856,225],{"class":38},[28,62858,51969],{"class":42},[28,62860,4581],{"class":38},[28,62862,1781],{"class":34},[28,62864,62865],{"class":30,"line":17385},[28,62866,2677],{"class":34},[28,62868,62869],{"class":30,"line":17390},[28,62870,2890],{"emptyLinePlaceholder":562},[28,62872,62873,62875,62877,62880],{"class":30,"line":17395},[28,62874,62600],{"class":2453},[28,62876,62651],{"class":2453},[28,62878,62879],{"class":2453}," .time",[28,62881,16058],{"class":34},[28,62883,62884,62886,62888,62890],{"class":30,"line":17400},[28,62885,57893],{"class":38},[28,62887,51914],{"class":34},[28,62889,62547],{"class":38},[28,62891,1781],{"class":34},[28,62893,62894,62896,62898,62900,62902],{"class":30,"line":17413},[28,62895,55399],{"class":38},[28,62897,51914],{"class":34},[28,62899,1121],{"class":38},[28,62901,51969],{"class":42},[28,62903,1781],{"class":34},[28,62905,62906],{"class":30,"line":17418},[28,62907,2677],{"class":34},[28,62909,62910,62912,62914],{"class":30,"line":33111},[28,62911,52894],{"class":34},[28,62913,547],{"class":51777},[28,62915,51784],{"class":34},[28,62917,62918,62920,62922],{"class":30,"line":33117},[28,62919,52262],{"class":34},[28,62921,51811],{"class":51777},[28,62923,51784],{"class":34},[28,62925,62926],{"class":30,"line":33123},[28,62927,2890],{"emptyLinePlaceholder":562},[28,62929,62930,62932,62934],{"class":30,"line":33129},[28,62931,1529],{"class":34},[28,62933,52277],{"class":51777},[28,62935,51784],{"class":34},[28,62937,62938,62940,62942,62944,62946,62949],{"class":30,"line":33135},[28,62939,52621],{"class":34},[28,62941,52088],{"class":51777},[28,62943,53963],{"class":2453},[28,62945,83],{"class":34},[28,62947,62948],{"class":735},"\"wrapper\"",[28,62950,51784],{"class":34},[28,62952,62953,62955,62957,62959,62961,62964,62966,62968],{"class":30,"line":33146},[28,62954,51818],{"class":34},[28,62956,1066],{"class":51777},[28,62958,53963],{"class":2453},[28,62960,83],{"class":34},[28,62962,62963],{"class":735},"\"avatar\"",[28,62965,55791],{"class":34},[28,62967,1066],{"class":51777},[28,62969,51784],{"class":34},[28,62971,62972,62974,62976,62978,62980,62983,62985,62987,62990,62992,62994,62996,62999,63001,63004,63006,63008],{"class":30,"line":33152},[28,62973,51818],{"class":34},[28,62975,54765],{"class":51777},[28,62977,15445],{"class":2453},[28,62979,83],{"class":34},[28,62981,62982],{"class":735},"\"tx\"",[28,62984,61497],{"class":2453},[28,62986,83],{"class":34},[28,62988,62989],{"class":735},"\"发一条友善的评论\"",[28,62991,54788],{"class":2453},[28,62993,83],{"class":34},[28,62995,4189],{"class":735},[28,62997,62998],{"class":2453}," maxlength",[28,63000,83],{"class":34},[28,63002,63003],{"class":735},"\"200\"",[28,63005,55791],{"class":34},[28,63007,54765],{"class":51777},[28,63009,51784],{"class":34},[28,63011,63012,63014,63016,63019,63021],{"class":30,"line":33172},[28,63013,51818],{"class":34},[28,63015,54364],{"class":51777},[28,63017,63018],{"class":34},">发布\u003C\u002F",[28,63020,54364],{"class":51777},[28,63022,51784],{"class":34},[28,63024,63025,63027,63029],{"class":30,"line":33178},[28,63026,52894],{"class":34},[28,63028,52088],{"class":51777},[28,63030,51784],{"class":34},[28,63032,63033,63035,63037,63039,63041,63043],{"class":30,"line":33189},[28,63034,52621],{"class":34},[28,63036,52088],{"class":51777},[28,63038,53963],{"class":2453},[28,63040,83],{"class":34},[28,63042,62948],{"class":735},[28,63044,51784],{"class":34},[28,63046,63047,63049,63051,63053,63055,63058,63061,63063],{"class":30,"line":33195},[28,63048,51818],{"class":34},[28,63050,28],{"class":51777},[28,63052,53963],{"class":2453},[28,63054,83],{"class":34},[28,63056,63057],{"class":735},"\"total\"",[28,63059,63060],{"class":34},">0\u002F200字\u003C\u002F",[28,63062,28],{"class":51777},[28,63064,51784],{"class":34},[28,63066,63067,63069,63071],{"class":30,"line":33201},[28,63068,52894],{"class":34},[28,63070,52088],{"class":51777},[28,63072,51784],{"class":34},[28,63074,63075,63077,63079,63081,63083,63086],{"class":30,"line":33207},[28,63076,52621],{"class":34},[28,63078,52088],{"class":51777},[28,63080,53963],{"class":2453},[28,63082,83],{"class":34},[28,63084,63085],{"class":735},"\"list\"",[28,63087,51784],{"class":34},[28,63089,63090,63092,63094,63096,63098,63101,63104,63106,63109],{"class":30,"line":33213},[28,63091,51818],{"class":34},[28,63093,52088],{"class":51777},[28,63095,53963],{"class":2453},[28,63097,83],{"class":34},[28,63099,63100],{"class":735},"\"item\"",[28,63102,63103],{"class":2453}," style",[28,63105,83],{"class":34},[28,63107,63108],{"class":735},"\"display: none;\"",[28,63110,51784],{"class":34},[28,63112,63113,63115,63117,63119,63121,63123,63125,63127],{"class":30,"line":33219},[28,63114,55711],{"class":34},[28,63116,1066],{"class":51777},[28,63118,53963],{"class":2453},[28,63120,83],{"class":34},[28,63122,62963],{"class":735},[28,63124,55791],{"class":34},[28,63126,1066],{"class":51777},[28,63128,51784],{"class":34},[28,63130,63131,63133,63135,63137,63139,63142],{"class":30,"line":33225},[28,63132,55711],{"class":34},[28,63134,52088],{"class":51777},[28,63136,53963],{"class":2453},[28,63138,83],{"class":34},[28,63140,63141],{"class":735},"\"info\"",[28,63143,51784],{"class":34},[28,63145,63146,63148,63150,63152,63154,63157,63160,63162],{"class":30,"line":33231},[28,63147,55779],{"class":34},[28,63149,14],{"class":51777},[28,63151,53963],{"class":2453},[28,63153,83],{"class":34},[28,63155,63156],{"class":735},"\"name\"",[28,63158,63159],{"class":34},">清风徐来\u003C\u002F",[28,63161,14],{"class":51777},[28,63163,51784],{"class":34},[28,63165,63166,63168,63170,63172,63174,63177,63180,63182],{"class":30,"line":33251},[28,63167,55779],{"class":34},[28,63169,14],{"class":51777},[28,63171,53963],{"class":2453},[28,63173,83],{"class":34},[28,63175,63176],{"class":735},"\"text\"",[28,63178,63179],{"class":34},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[28,63181,14],{"class":51777},[28,63183,51784],{"class":34},[28,63185,63186,63188,63190,63192,63194,63197,63200,63202],{"class":30,"line":33257},[28,63187,55779],{"class":34},[28,63189,14],{"class":51777},[28,63191,53963],{"class":2453},[28,63193,83],{"class":34},[28,63195,63196],{"class":735},"\"time\"",[28,63198,63199],{"class":34},">2022-10-10 20:29:21\u003C\u002F",[28,63201,14],{"class":51777},[28,63203,51784],{"class":34},[28,63205,63206,63208,63210],{"class":30,"line":33273},[28,63207,55884],{"class":34},[28,63209,52088],{"class":51777},[28,63211,51784],{"class":34},[28,63213,63214,63216,63218],{"class":30,"line":33279},[28,63215,52253],{"class":34},[28,63217,52088],{"class":51777},[28,63219,51784],{"class":34},[28,63221,63222,63224,63226],{"class":30,"line":33293},[28,63223,52894],{"class":34},[28,63225,52088],{"class":51777},[28,63227,51784],{"class":34},[28,63229,63230,63232,63234],{"class":30,"line":33299},[28,63231,52621],{"class":34},[28,63233,52290],{"class":51777},[28,63235,51784],{"class":34},[28,63237,63238,63240,63243,63245,63247,63249,63251,63254],{"class":30,"line":33314},[28,63239,11707],{"class":42},[28,63241,63242],{"class":38}," tx",[28,63244,14050],{"class":42},[28,63246,54873],{"class":34},[28,63248,54876],{"class":2453},[28,63250,367],{"class":34},[28,63252,63253],{"class":735},"'#tx'",[28,63255,228],{"class":34},[28,63257,63258,63260,63263,63265,63267,63269,63271,63274],{"class":30,"line":33320},[28,63259,11707],{"class":42},[28,63261,63262],{"class":38}," total",[28,63264,14050],{"class":42},[28,63266,54873],{"class":34},[28,63268,54876],{"class":2453},[28,63270,367],{"class":34},[28,63272,63273],{"class":735},"'.total'",[28,63275,228],{"class":34},[28,63277,63278],{"class":30,"line":33329},[28,63279,63280],{"class":73},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[28,63282,63283,63286,63288,63290,63292,63294,63296],{"class":30,"line":33335},[28,63284,63285],{"class":34},"    tx.",[28,63287,58290],{"class":2453},[28,63289,367],{"class":34},[28,63291,61804],{"class":735},[28,63293,12921],{"class":34},[28,63295,54926],{"class":42},[28,63297,54929],{"class":34},[28,63299,63300,63303,63305],{"class":30,"line":33344},[28,63301,63302],{"class":34},"      total.style.opacity ",[28,63304,83],{"class":42},[28,63306,56176],{"class":38},[28,63308,63309],{"class":30,"line":33350},[28,63310,33938],{"class":34},[28,63312,63313],{"class":30,"line":33356},[28,63314,63315],{"class":73},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[28,63317,63318,63320,63322,63324,63326,63328,63330],{"class":30,"line":33365},[28,63319,63285],{"class":34},[28,63321,58290],{"class":2453},[28,63323,367],{"class":34},[28,63325,61865],{"class":735},[28,63327,12921],{"class":34},[28,63329,54926],{"class":42},[28,63331,54929],{"class":34},[28,63333,63334,63336,63338],{"class":30,"line":33371},[28,63335,63302],{"class":34},[28,63337,83],{"class":42},[28,63339,47810],{"class":38},[28,63341,63342],{"class":30,"line":33382},[28,63343,33938],{"class":34},[28,63345,63346],{"class":30,"line":33388},[28,63347,63348],{"class":73},"    \u002F\u002F 3. 检测用户输入\n",[28,63350,63351,63353,63355,63357,63360,63362,63364],{"class":30,"line":33407},[28,63352,63285],{"class":34},[28,63354,58290],{"class":2453},[28,63356,367],{"class":34},[28,63358,63359],{"class":735},"'input'",[28,63361,12921],{"class":34},[28,63363,54926],{"class":42},[28,63365,54929],{"class":34},[28,63367,63368],{"class":30,"line":33413},[28,63369,63370],{"class":73},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[28,63372,63373,63376,63378,63381,63384,63386,63389,63391,63393],{"class":30,"line":33424},[28,63374,63375],{"class":34},"      total.innerHTML ",[28,63377,83],{"class":42},[28,63379,63380],{"class":735}," `${",[28,63382,63383],{"class":34},"tx",[28,63385,1179],{"class":735},[28,63387,63388],{"class":34},"value",[28,63390,1179],{"class":735},[28,63392,52445],{"class":38},[28,63394,63395],{"class":735},"}\u002F200字`\n",[28,63397,63398],{"class":30,"line":33430},[28,63399,33938],{"class":34},[28,63401,63402],{"class":30,"line":33450},[28,63403,2890],{"emptyLinePlaceholder":562},[28,63405,63406],{"class":30,"line":33466},[28,63407,63408],{"class":73},"    \u002F\u002F const str = 'andy'\n",[28,63410,63411],{"class":30,"line":33472},[28,63412,63413],{"class":73},"    \u002F\u002F console.log(str.length)\n",[28,63415,63416,63418,63420],{"class":30,"line":33486},[28,63417,52894],{"class":34},[28,63419,52290],{"class":51777},[28,63421,51784],{"class":34},[28,63423,63424,63426,63428],{"class":30,"line":33492},[28,63425,52262],{"class":34},[28,63427,52277],{"class":51777},[28,63429,51784],{"class":34},[28,63431,63432],{"class":30,"line":33498},[28,63433,2890],{"emptyLinePlaceholder":562},[28,63435,63436,63438,63440],{"class":30,"line":33509},[28,63437,52262],{"class":34},[28,63439,51112],{"class":51777},[28,63441,51784],{"class":34},[22484,63443,63445],{"id":63444},"_3254-change事件","3.2.5.4 change事件",[14,63447,63448],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63450,63451],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63453,63454],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[18,63456,63458],{"className":51110,"code":63457,"language":51112,"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,63459,63460,63470,63484,63488,63496,63510,63530,63542,63550,63554,63562,63576,63584,63602,63620,63632,63636,63644,63652,63656],{"__ignoreMap":23},[28,63461,63462,63464,63466,63468],{"class":30,"line":31},[28,63463,51774],{"class":34},[28,63465,51778],{"class":51777},[28,63467,51781],{"class":2453},[28,63469,51784],{"class":34},[28,63471,63472,63474,63476,63478,63480,63482],{"class":30,"line":77},[28,63473,1529],{"class":34},[28,63475,51112],{"class":51777},[28,63477,51793],{"class":2453},[28,63479,83],{"class":34},[28,63481,51798],{"class":735},[28,63483,51784],{"class":34},[28,63485,63486],{"class":30,"line":114},[28,63487,2890],{"emptyLinePlaceholder":562},[28,63489,63490,63492,63494],{"class":30,"line":128},[28,63491,1529],{"class":34},[28,63493,51811],{"class":51777},[28,63495,51784],{"class":34},[28,63497,63498,63500,63502,63504,63506,63508],{"class":30,"line":393},[28,63499,52621],{"class":34},[28,63501,51821],{"class":51777},[28,63503,51824],{"class":2453},[28,63505,83],{"class":34},[28,63507,51829],{"class":735},[28,63509,51784],{"class":34},[28,63511,63512,63514,63516,63518,63520,63522,63524,63526,63528],{"class":30,"line":409},[28,63513,52621],{"class":34},[28,63515,51821],{"class":51777},[28,63517,15406],{"class":2453},[28,63519,83],{"class":34},[28,63521,51868],{"class":735},[28,63523,51848],{"class":2453},[28,63525,83],{"class":34},[28,63527,51875],{"class":735},[28,63529,51784],{"class":34},[28,63531,63532,63534,63536,63538,63540],{"class":30,"line":1711},[28,63533,52621],{"class":34},[28,63535,51884],{"class":51777},[28,63537,51887],{"class":34},[28,63539,51884],{"class":51777},[28,63541,51784],{"class":34},[28,63543,63544,63546,63548],{"class":30,"line":1802},[28,63545,52262],{"class":34},[28,63547,51811],{"class":51777},[28,63549,51784],{"class":34},[28,63551,63552],{"class":30,"line":1808},[28,63553,2890],{"emptyLinePlaceholder":562},[28,63555,63556,63558,63560],{"class":30,"line":1820},[28,63557,1529],{"class":34},[28,63559,52277],{"class":51777},[28,63561,51784],{"class":34},[28,63563,63564,63566,63568,63570,63572,63574],{"class":30,"line":2102},[28,63565,52621],{"class":34},[28,63567,54298],{"class":51777},[28,63569,54301],{"class":2453},[28,63571,83],{"class":34},[28,63573,63176],{"class":735},[28,63575,51784],{"class":34},[28,63577,63578,63580,63582],{"class":30,"line":2107},[28,63579,52621],{"class":34},[28,63581,52290],{"class":51777},[28,63583,51784],{"class":34},[28,63585,63586,63588,63590,63592,63594,63596,63598,63600],{"class":30,"line":2113},[28,63587,11707],{"class":42},[28,63589,61082],{"class":38},[28,63591,14050],{"class":42},[28,63593,54873],{"class":34},[28,63595,54876],{"class":2453},[28,63597,367],{"class":34},[28,63599,63359],{"class":735},[28,63601,228],{"class":34},[28,63603,63604,63607,63609,63611,63614,63616,63618],{"class":30,"line":2118},[28,63605,63606],{"class":34},"    input.",[28,63608,58290],{"class":2453},[28,63610,367],{"class":34},[28,63612,63613],{"class":735},"'change'",[28,63615,12921],{"class":34},[28,63617,54926],{"class":42},[28,63619,54929],{"class":34},[28,63621,63622,63624,63626,63628,63630],{"class":30,"line":2132},[28,63623,58721],{"class":34},[28,63625,58724],{"class":2453},[28,63627,367],{"class":34},[28,63629,1213],{"class":38},[28,63631,228],{"class":34},[28,63633,63634],{"class":30,"line":2137},[28,63635,33938],{"class":34},[28,63637,63638,63640,63642],{"class":30,"line":2143},[28,63639,52894],{"class":34},[28,63641,52290],{"class":51777},[28,63643,51784],{"class":34},[28,63645,63646,63648,63650],{"class":30,"line":2164},[28,63647,52262],{"class":34},[28,63649,52277],{"class":51777},[28,63651,51784],{"class":34},[28,63653,63654],{"class":30,"line":2169},[28,63655,2890],{"emptyLinePlaceholder":562},[28,63657,63658,63660,63662],{"class":30,"line":2183},[28,63659,52262],{"class":34},[28,63661,51112],{"class":51777},[28,63663,51784],{"class":34},[14,63665,63666],{},"总结：内容发生改变才回去触发",[605,63668,63670],{"id":63669},"_326-事件对象","3.2.6 事件对象",[22484,63672,63674],{"id":63673},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63676,63677],{},[420,63678],{"alt":23,"src":63679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63681,63682],{},[420,63683],{"alt":23,"src":63684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63686,63687],{},"点击一次，就输出了事件对象，它是个对象",[14,63689,63690],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63692,63693],{},[420,63694],{"alt":23,"src":63695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22484,63697,63699],{"id":63698},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63701,63702],{},[420,63703],{"alt":23,"src":63704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63706,63707],{},"实现按特殊字符才是实现打印输出效果：",[18,63709,63711],{"className":53544,"code":63710,"language":53546,"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,63712,63713,63721,63726,63740,63748,63753,63758,63763,63768,63773,63778,63783,63788,63793,63797,63801,63809],{"__ignoreMap":23},[28,63714,63715,63717,63719],{"class":30,"line":31},[28,63716,1529],{"class":34},[28,63718,52277],{"class":51777},[28,63720,51784],{"class":34},[28,63722,63723],{"class":30,"line":77},[28,63724,63725],{"class":73},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[28,63727,63728,63730,63732,63734,63736,63738],{"class":30,"line":114},[28,63729,52621],{"class":34},[28,63731,54298],{"class":51777},[28,63733,54301],{"class":2453},[28,63735,83],{"class":34},[28,63737,63176],{"class":735},[28,63739,51784],{"class":34},[28,63741,63742,63744,63746],{"class":30,"line":128},[28,63743,52621],{"class":34},[28,63745,52290],{"class":51777},[28,63747,51784],{"class":34},[28,63749,63750],{"class":30,"line":393},[28,63751,63752],{"class":34},"    \u002F\u002F const btn = document.querySelector('button')\n",[28,63754,63755],{"class":30,"line":409},[28,63756,63757],{"class":34},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[28,63759,63760],{"class":30,"line":1711},[28,63761,63762],{"class":34},"    \u002F\u002F   console.log(e);\n",[28,63764,63765],{"class":30,"line":1802},[28,63766,63767],{"class":34},"    \u002F\u002F })\n",[28,63769,63770],{"class":30,"line":1808},[28,63771,63772],{"class":34},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[28,63774,63775],{"class":30,"line":1820},[28,63776,63777],{"class":34},"    const input = document.querySelector('input')\n",[28,63779,63780],{"class":30,"line":2102},[28,63781,63782],{"class":34},"    input.addEventListener('keyup', function (e) {\n",[28,63784,63785],{"class":30,"line":2107},[28,63786,63787],{"class":34},"      if (e.key === 'Enter') {\n",[28,63789,63790],{"class":30,"line":2113},[28,63791,63792],{"class":34},"        console.log('我按下了回车键')\n",[28,63794,63795],{"class":30,"line":2118},[28,63796,52875],{"class":34},[28,63798,63799],{"class":30,"line":2132},[28,63800,33938],{"class":34},[28,63802,63803,63805,63807],{"class":30,"line":2137},[28,63804,52894],{"class":34},[28,63806,52290],{"class":51777},[28,63808,51784],{"class":34},[28,63810,63811,63813,63815],{"class":30,"line":2143},[28,63812,52262],{"class":34},[28,63814,52277],{"class":51777},[28,63816,51784],{"class":34},[22484,63818,63820],{"id":63819},"_3263-trim方法","3.2.6.3 trim方法",[14,63822,63823],{},[420,63824],{"alt":23,"src":63825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63827,63828],{},[420,63829],{"alt":23,"src":63830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63832,63833],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63835,63836],{},"str.trim()",[605,63838,63840],{"id":63839},"_327-环境对象","3.2.7 环境对象",[14,63842,63843],{},[420,63844],{"alt":23,"src":63845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63847,63848],{},[420,63849],{"alt":23,"src":63850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63852,63853],{},[420,63854],{"alt":23,"src":63855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63857,63858],{},"实际函数调用是window.fn()",[14,63860,63861],{},"普通函数里面this指向的是window",[1626,63863,63864,63867,63870],{},[591,63865,63866],{},"在普通函数下，this指向的是window",[591,63868,63869],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[591,63871,63872],{},"箭头函数没有this",[14,63874,63875],{},"粗略记法就是：谁调用，this就指向谁",[14,63877,63878],{},[420,63879],{"alt":23,"src":63880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63882,63883],{},[420,63884],{"alt":23,"src":63885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63887,63888],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63890,63891],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[18,63893,63895],{"className":53544,"code":63894,"language":53546,"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,63896,63897,63905,63917,63925,63930,63935,63940,63945,63949,63957],{"__ignoreMap":23},[28,63898,63899,63901,63903],{"class":30,"line":31},[28,63900,1529],{"class":34},[28,63902,52277],{"class":51777},[28,63904,51784],{"class":34},[28,63906,63907,63909,63911,63913,63915],{"class":30,"line":77},[28,63908,52621],{"class":34},[28,63910,54364],{"class":51777},[28,63912,54370],{"class":34},[28,63914,54364],{"class":51777},[28,63916,51784],{"class":34},[28,63918,63919,63921,63923],{"class":30,"line":114},[28,63920,52621],{"class":34},[28,63922,52290],{"class":51777},[28,63924,51784],{"class":34},[28,63926,63927],{"class":30,"line":128},[28,63928,63929],{"class":34},"    const button = document.querySelector('button')\n",[28,63931,63932],{"class":30,"line":393},[28,63933,63934],{"class":34},"    button.addEventListener('click', function () {\n",[28,63936,63937],{"class":30,"line":409},[28,63938,63939],{"class":34},"      \u002F\u002F console.log(this);\n",[28,63941,63942],{"class":30,"line":1711},[28,63943,63944],{"class":34},"      this.style.color = 'pink'\n",[28,63946,63947],{"class":30,"line":1802},[28,63948,33938],{"class":34},[28,63950,63951,63953,63955],{"class":30,"line":1808},[28,63952,52894],{"class":34},[28,63954,52290],{"class":51777},[28,63956,51784],{"class":34},[28,63958,63959,63961,63963],{"class":30,"line":1820},[28,63960,52262],{"class":34},[28,63962,52277],{"class":51777},[28,63964,51784],{"class":34},[605,63966,63968],{"id":63967},"_328-回调函数","3.2.8 回调函数",[14,63970,63971],{},[420,63972],{"alt":23,"src":63973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63975,63976],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63978,11818],{},[1626,63980,63981,63984,63987],{},[591,63982,63983],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[591,63985,63986],{},"回调函数本质还是函数，只不过把它当成参数使用",[591,63988,63989],{},"使用匿名函数做为回调函数比较常见",[605,63991,63993],{"id":63992},"_329-tab栏切换","3.2.9 tab栏切换",[14,63995,63996],{},[420,63997],{"alt":23,"src":63998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[18,64000,64002],{"className":51110,"code":64001,"language":51112,"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,64003,64004,64014,64028,64032,64040,64054,64074,64094,64107,64115,64121,64131,64141,64145,64149,64156,64169,64182,64194,64210,64214,64218,64225,64237,64249,64261,64271,64281,64285,64289,64298,64310,64321,64333,64337,64341,64349,64359,64369,64379,64383,64387,64397,64411,64423,64427,64431,64443,64454,64471,64481,64485,64489,64504,64515,64525,64529,64533,64540,64555,64559,64563,64571,64581,64585,64589,64598,64608,64612,64620,64628,64632,64640,64655,64670,64683,64691,64725,64752,64779,64806,64833,64841,64849,64864,64901,64936,64971,65006,65041,65049,65057,65065,65070,65075,65095,65100,65129,65134,65139,65157,65162,65167,65172,65194,65199,65215,65219,65224,65229,65250,65255,65284,65288,65293,65297,65305,65313,65317],{"__ignoreMap":23},[28,64005,64006,64008,64010,64012],{"class":30,"line":31},[28,64007,51774],{"class":34},[28,64009,51778],{"class":51777},[28,64011,51781],{"class":2453},[28,64013,51784],{"class":34},[28,64015,64016,64018,64020,64022,64024,64026],{"class":30,"line":77},[28,64017,1529],{"class":34},[28,64019,51112],{"class":51777},[28,64021,51793],{"class":2453},[28,64023,83],{"class":34},[28,64025,51798],{"class":735},[28,64027,51784],{"class":34},[28,64029,64030],{"class":30,"line":114},[28,64031,2890],{"emptyLinePlaceholder":562},[28,64033,64034,64036,64038],{"class":30,"line":128},[28,64035,1529],{"class":34},[28,64037,51811],{"class":51777},[28,64039,51784],{"class":34},[28,64041,64042,64044,64046,64048,64050,64052],{"class":30,"line":393},[28,64043,52621],{"class":34},[28,64045,51821],{"class":51777},[28,64047,51824],{"class":2453},[28,64049,83],{"class":34},[28,64051,51829],{"class":735},[28,64053,59604],{"class":34},[28,64055,64056,64058,64060,64062,64064,64066,64068,64070,64072],{"class":30,"line":409},[28,64057,52621],{"class":34},[28,64059,51821],{"class":51777},[28,64061,51840],{"class":2453},[28,64063,83],{"class":34},[28,64065,51845],{"class":735},[28,64067,51848],{"class":2453},[28,64069,83],{"class":34},[28,64071,51853],{"class":735},[28,64073,59604],{"class":34},[28,64075,64076,64078,64080,64082,64084,64086,64088,64090,64092],{"class":30,"line":1711},[28,64077,52621],{"class":34},[28,64079,51821],{"class":51777},[28,64081,15406],{"class":2453},[28,64083,83],{"class":34},[28,64085,51868],{"class":735},[28,64087,51848],{"class":2453},[28,64089,83],{"class":34},[28,64091,51875],{"class":735},[28,64093,59604],{"class":34},[28,64095,64096,64098,64100,64103,64105],{"class":30,"line":1802},[28,64097,52621],{"class":34},[28,64099,51884],{"class":51777},[28,64101,64102],{"class":34},">tab栏切换\u003C\u002F",[28,64104,51884],{"class":51777},[28,64106,51784],{"class":34},[28,64108,64109,64111,64113],{"class":30,"line":1808},[28,64110,52621],{"class":34},[28,64112,547],{"class":51777},[28,64114,51784],{"class":34},[28,64116,64117,64119],{"class":30,"line":1820},[28,64118,6891],{"class":51777},[28,64120,16058],{"class":34},[28,64122,64123,64125,64127,64129],{"class":30,"line":2102},[28,64124,55183],{"class":38},[28,64126,51914],{"class":34},[28,64128,822],{"class":38},[28,64130,1781],{"class":34},[28,64132,64133,64135,64137,64139],{"class":30,"line":2107},[28,64134,55172],{"class":38},[28,64136,51914],{"class":34},[28,64138,822],{"class":38},[28,64140,1781],{"class":34},[28,64142,64143],{"class":30,"line":2113},[28,64144,2677],{"class":34},[28,64146,64147],{"class":30,"line":2118},[28,64148,2890],{"emptyLinePlaceholder":562},[28,64150,64151,64154],{"class":30,"line":2132},[28,64152,64153],{"class":2453},"    .tab",[28,64155,16058],{"class":34},[28,64157,64158,64160,64162,64165,64167],{"class":30,"line":2137},[28,64159,55248],{"class":38},[28,64161,51914],{"class":34},[28,64163,64164],{"class":38},"590",[28,64166,51969],{"class":42},[28,64168,1781],{"class":34},[28,64170,64171,64173,64175,64178,64180],{"class":30,"line":2143},[28,64172,55262],{"class":38},[28,64174,51914],{"class":34},[28,64176,64177],{"class":38},"340",[28,64179,51969],{"class":42},[28,64181,1781],{"class":34},[28,64183,64184,64186,64188,64190,64192],{"class":30,"line":2164},[28,64185,55183],{"class":38},[28,64187,51914],{"class":34},[28,64189,1320],{"class":38},[28,64191,51969],{"class":42},[28,64193,1781],{"class":34},[28,64195,64196,64198,64200,64202,64204,64206,64208],{"class":30,"line":2169},[28,64197,62454],{"class":38},[28,64199,51914],{"class":34},[28,64201,39],{"class":38},[28,64203,51969],{"class":42},[28,64205,51998],{"class":38},[28,64207,62721],{"class":38},[28,64209,1781],{"class":34},[28,64211,64212],{"class":30,"line":2183},[28,64213,2677],{"class":34},[28,64215,64216],{"class":30,"line":2188},[28,64217,2890],{"emptyLinePlaceholder":562},[28,64219,64220,64223],{"class":30,"line":2217},[28,64221,64222],{"class":2453},"    .tab-nav",[28,64224,16058],{"class":34},[28,64226,64227,64229,64231,64233,64235],{"class":30,"line":2222},[28,64228,55248],{"class":38},[28,64230,51914],{"class":34},[28,64232,938],{"class":38},[28,64234,954],{"class":42},[28,64236,1781],{"class":34},[28,64238,64239,64241,64243,64245,64247],{"class":30,"line":2239},[28,64240,55262],{"class":38},[28,64242,51914],{"class":34},[28,64244,1526],{"class":38},[28,64246,51969],{"class":42},[28,64248,1781],{"class":34},[28,64250,64251,64253,64255,64257,64259],{"class":30,"line":2244},[28,64252,57836],{"class":38},[28,64254,51914],{"class":34},[28,64256,1526],{"class":38},[28,64258,51969],{"class":42},[28,64260,1781],{"class":34},[28,64262,64263,64265,64267,64269],{"class":30,"line":2249},[28,64264,55486],{"class":38},[28,64266,51914],{"class":34},[28,64268,51954],{"class":38},[28,64270,1781],{"class":34},[28,64272,64273,64275,64277,64279],{"class":30,"line":2254},[28,64274,55497],{"class":38},[28,64276,51914],{"class":34},[28,64278,52145],{"class":38},[28,64280,1781],{"class":34},[28,64282,64283],{"class":30,"line":2268},[28,64284,2677],{"class":34},[28,64286,64287],{"class":30,"line":2273},[28,64288,2890],{"emptyLinePlaceholder":562},[28,64290,64291,64293,64296],{"class":30,"line":3067},[28,64292,64222],{"class":2453},[28,64294,64295],{"class":51777}," h3",[28,64297,16058],{"class":34},[28,64299,64300,64302,64304,64306,64308],{"class":30,"line":3081},[28,64301,55399],{"class":38},[28,64303,51914],{"class":34},[28,64305,1420],{"class":38},[28,64307,51969],{"class":42},[28,64309,1781],{"class":34},[28,64311,64312,64314,64316,64319],{"class":30,"line":3089},[28,64313,62811],{"class":38},[28,64315,51914],{"class":34},[28,64317,64318],{"class":38},"normal",[28,64320,1781],{"class":34},[28,64322,64323,64325,64327,64329,64331],{"class":30,"line":3094},[28,64324,62477],{"class":38},[28,64326,51914],{"class":34},[28,64328,1320],{"class":38},[28,64330,51969],{"class":42},[28,64332,1781],{"class":34},[28,64334,64335],{"class":30,"line":3100},[28,64336,2677],{"class":34},[28,64338,64339],{"class":30,"line":3106},[28,64340,2890],{"emptyLinePlaceholder":562},[28,64342,64343,64345,64347],{"class":30,"line":3111},[28,64344,64222],{"class":2453},[28,64346,61769],{"class":51777},[28,64348,16058],{"class":34},[28,64350,64351,64353,64355,64357],{"class":30,"line":8436},[28,64352,55209],{"class":38},[28,64354,51914],{"class":34},[28,64356,55214],{"class":38},[28,64358,1781],{"class":34},[28,64360,64361,64363,64365,64367],{"class":30,"line":8460},[28,64362,55486],{"class":38},[28,64364,51914],{"class":34},[28,64366,51954],{"class":38},[28,64368,1781],{"class":34},[28,64370,64371,64373,64375,64377],{"class":30,"line":8465},[28,64372,55497],{"class":38},[28,64374,51914],{"class":34},[28,64376,52057],{"class":38},[28,64378,1781],{"class":34},[28,64380,64381],{"class":30,"line":8471},[28,64382,2677],{"class":34},[28,64384,64385],{"class":30,"line":8498},[28,64386,2890],{"emptyLinePlaceholder":562},[28,64388,64389,64391,64393,64395],{"class":30,"line":8503},[28,64390,64222],{"class":2453},[28,64392,61769],{"class":51777},[28,64394,55552],{"class":51777},[28,64396,16058],{"class":34},[28,64398,64399,64401,64403,64405,64407,64409],{"class":30,"line":8509},[28,64400,55183],{"class":38},[28,64402,51914],{"class":34},[28,64404,822],{"class":38},[28,64406,9438],{"class":38},[28,64408,51969],{"class":42},[28,64410,1781],{"class":34},[28,64412,64413,64415,64417,64419,64421],{"class":30,"line":8521},[28,64414,55399],{"class":38},[28,64416,51914],{"class":34},[28,64418,1170],{"class":38},[28,64420,51969],{"class":42},[28,64422,1781],{"class":34},[28,64424,64425],{"class":30,"line":8533},[28,64426,2677],{"class":34},[28,64428,64429],{"class":30,"line":8545},[28,64430,2890],{"emptyLinePlaceholder":562},[28,64432,64433,64435,64437,64439,64441],{"class":30,"line":10202},[28,64434,64222],{"class":2453},[28,64436,61769],{"class":51777},[28,64438,55552],{"class":51777},[28,64440,1889],{"class":51777},[28,64442,16058],{"class":34},[28,64444,64445,64448,64450,64452],{"class":30,"line":10227},[28,64446,64447],{"class":38},"      text-decoration",[28,64449,51914],{"class":34},[28,64451,55214],{"class":38},[28,64453,1781],{"class":34},[28,64455,64456,64458,64460,64462,64464,64466,64469],{"class":30,"line":10250},[28,64457,62709],{"class":38},[28,64459,51914],{"class":34},[28,64461,93],{"class":38},[28,64463,51969],{"class":42},[28,64465,51998],{"class":38},[28,64467,64468],{"class":38}," transparent",[28,64470,1781],{"class":34},[28,64472,64473,64475,64477,64479],{"class":30,"line":10274},[28,64474,57893],{"class":38},[28,64476,51914],{"class":34},[28,64478,62846],{"class":38},[28,64480,1781],{"class":34},[28,64482,64483],{"class":30,"line":10279},[28,64484,2677],{"class":34},[28,64486,64487],{"class":30,"line":10284},[28,64488,2890],{"emptyLinePlaceholder":562},[28,64490,64491,64493,64495,64497,64499,64502],{"class":30,"line":10289},[28,64492,64222],{"class":2453},[28,64494,61769],{"class":51777},[28,64496,55552],{"class":51777},[28,64498,1889],{"class":51777},[28,64500,64501],{"class":2453},".active",[28,64503,16058],{"class":34},[28,64505,64506,64508,64510,64513],{"class":30,"line":10298},[28,64507,62268],{"class":38},[28,64509,51914],{"class":34},[28,64511,64512],{"class":38},"#e1251b",[28,64514,1781],{"class":34},[28,64516,64517,64519,64521,64523],{"class":30,"line":10303},[28,64518,57893],{"class":38},[28,64520,51914],{"class":34},[28,64522,64512],{"class":38},[28,64524,1781],{"class":34},[28,64526,64527],{"class":30,"line":10309},[28,64528,2677],{"class":34},[28,64530,64531],{"class":30,"line":10330},[28,64532,2890],{"emptyLinePlaceholder":562},[28,64534,64535,64538],{"class":30,"line":10336},[28,64536,64537],{"class":2453},"    .tab-content",[28,64539,16058],{"class":34},[28,64541,64542,64544,64546,64548,64551,64553],{"class":30,"line":10350},[28,64543,55172],{"class":38},[28,64545,51914],{"class":34},[28,64547,822],{"class":38},[28,64549,64550],{"class":38}," 16",[28,64552,51969],{"class":42},[28,64554,1781],{"class":34},[28,64556,64557],{"class":30,"line":10356},[28,64558,2677],{"class":34},[28,64560,64561],{"class":30,"line":10383},[28,64562,2890],{"emptyLinePlaceholder":562},[28,64564,64565,64567,64569],{"class":30,"line":10392},[28,64566,64537],{"class":2453},[28,64568,62651],{"class":2453},[28,64570,16058],{"class":34},[28,64572,64573,64575,64577,64579],{"class":30,"line":10398},[28,64574,55486],{"class":38},[28,64576,51914],{"class":34},[28,64578,55214],{"class":38},[28,64580,1781],{"class":34},[28,64582,64583],{"class":30,"line":10406},[28,64584,2677],{"class":34},[28,64586,64587],{"class":30,"line":10411},[28,64588,2890],{"emptyLinePlaceholder":562},[28,64590,64591,64593,64596],{"class":30,"line":17090},[28,64592,64537],{"class":2453},[28,64594,64595],{"class":2453}," .item.active",[28,64597,16058],{"class":34},[28,64599,64600,64602,64604,64606],{"class":30,"line":17096},[28,64601,55486],{"class":38},[28,64603,51914],{"class":34},[28,64605,61346],{"class":38},[28,64607,1781],{"class":34},[28,64609,64610],{"class":30,"line":17119},[28,64611,2677],{"class":34},[28,64613,64614,64616,64618],{"class":30,"line":17125},[28,64615,52894],{"class":34},[28,64617,547],{"class":51777},[28,64619,51784],{"class":34},[28,64621,64622,64624,64626],{"class":30,"line":17148},[28,64623,52262],{"class":34},[28,64625,51811],{"class":51777},[28,64627,51784],{"class":34},[28,64629,64630],{"class":30,"line":17162},[28,64631,2890],{"emptyLinePlaceholder":562},[28,64633,64634,64636,64638],{"class":30,"line":17182},[28,64635,1529],{"class":34},[28,64637,52277],{"class":51777},[28,64639,51784],{"class":34},[28,64641,64642,64644,64646,64648,64650,64653],{"class":30,"line":17188},[28,64643,52621],{"class":34},[28,64645,52088],{"class":51777},[28,64647,53963],{"class":2453},[28,64649,83],{"class":34},[28,64651,64652],{"class":735},"\"tab\"",[28,64654,51784],{"class":34},[28,64656,64657,64659,64661,64663,64665,64668],{"class":30,"line":17199},[28,64658,51818],{"class":34},[28,64660,52088],{"class":51777},[28,64662,53963],{"class":2453},[28,64664,83],{"class":34},[28,64666,64667],{"class":735},"\"tab-nav\"",[28,64669,51784],{"class":34},[28,64671,64672,64674,64676,64679,64681],{"class":30,"line":17222},[28,64673,55711],{"class":34},[28,64675,605],{"class":51777},[28,64677,64678],{"class":34},">每日特价\u003C\u002F",[28,64680,605],{"class":51777},[28,64682,51784],{"class":34},[28,64684,64685,64687,64689],{"class":30,"line":17244},[28,64686,55711],{"class":34},[28,64688,1626],{"class":51777},[28,64690,51784],{"class":34},[28,64692,64693,64695,64697,64699,64701,64703,64705,64707,64709,64711,64714,64717,64719,64721,64723],{"class":30,"line":17249},[28,64694,55779],{"class":34},[28,64696,591],{"class":51777},[28,64698,61529],{"class":34},[28,64700,80],{"class":51777},[28,64702,53963],{"class":2453},[28,64704,83],{"class":34},[28,64706,60183],{"class":735},[28,64708,61534],{"class":2453},[28,64710,83],{"class":34},[28,64712,64713],{"class":735},"\"javascript:;\"",[28,64715,64716],{"class":34},">精选\u003C\u002F",[28,64718,80],{"class":51777},[28,64720,55791],{"class":34},[28,64722,591],{"class":51777},[28,64724,51784],{"class":34},[28,64726,64727,64729,64731,64733,64735,64737,64739,64741,64744,64746,64748,64750],{"class":30,"line":17255},[28,64728,55779],{"class":34},[28,64730,591],{"class":51777},[28,64732,61529],{"class":34},[28,64734,80],{"class":51777},[28,64736,61534],{"class":2453},[28,64738,83],{"class":34},[28,64740,64713],{"class":735},[28,64742,64743],{"class":34},">美食\u003C\u002F",[28,64745,80],{"class":51777},[28,64747,55791],{"class":34},[28,64749,591],{"class":51777},[28,64751,51784],{"class":34},[28,64753,64754,64756,64758,64760,64762,64764,64766,64768,64771,64773,64775,64777],{"class":30,"line":17269},[28,64755,55779],{"class":34},[28,64757,591],{"class":51777},[28,64759,61529],{"class":34},[28,64761,80],{"class":51777},[28,64763,61534],{"class":2453},[28,64765,83],{"class":34},[28,64767,64713],{"class":735},[28,64769,64770],{"class":34},">百货\u003C\u002F",[28,64772,80],{"class":51777},[28,64774,55791],{"class":34},[28,64776,591],{"class":51777},[28,64778,51784],{"class":34},[28,64780,64781,64783,64785,64787,64789,64791,64793,64795,64798,64800,64802,64804],{"class":30,"line":17282},[28,64782,55779],{"class":34},[28,64784,591],{"class":51777},[28,64786,61529],{"class":34},[28,64788,80],{"class":51777},[28,64790,61534],{"class":2453},[28,64792,83],{"class":34},[28,64794,64713],{"class":735},[28,64796,64797],{"class":34},">个护\u003C\u002F",[28,64799,80],{"class":51777},[28,64801,55791],{"class":34},[28,64803,591],{"class":51777},[28,64805,51784],{"class":34},[28,64807,64808,64810,64812,64814,64816,64818,64820,64822,64825,64827,64829,64831],{"class":30,"line":17287},[28,64809,55779],{"class":34},[28,64811,591],{"class":51777},[28,64813,61529],{"class":34},[28,64815,80],{"class":51777},[28,64817,61534],{"class":2453},[28,64819,83],{"class":34},[28,64821,64713],{"class":735},[28,64823,64824],{"class":34},">预告\u003C\u002F",[28,64826,80],{"class":51777},[28,64828,55791],{"class":34},[28,64830,591],{"class":51777},[28,64832,51784],{"class":34},[28,64834,64835,64837,64839],{"class":30,"line":17301},[28,64836,55884],{"class":34},[28,64838,1626],{"class":51777},[28,64840,51784],{"class":34},[28,64842,64843,64845,64847],{"class":30,"line":17306},[28,64844,52253],{"class":34},[28,64846,52088],{"class":51777},[28,64848,51784],{"class":34},[28,64850,64851,64853,64855,64857,64859,64862],{"class":30,"line":17312},[28,64852,51818],{"class":34},[28,64854,52088],{"class":51777},[28,64856,53963],{"class":2453},[28,64858,83],{"class":34},[28,64860,64861],{"class":735},"\"tab-content\"",[28,64863,51784],{"class":34},[28,64865,64866,64868,64870,64872,64874,64877,64879,64881,64883,64885,64888,64890,64892,64894,64897,64899],{"class":30,"line":17317},[28,64867,55711],{"class":34},[28,64869,52088],{"class":51777},[28,64871,53963],{"class":2453},[28,64873,83],{"class":34},[28,64875,64876],{"class":735},"\"item active\"",[28,64878,61529],{"class":34},[28,64880,420],{"class":51777},[28,64882,55716],{"class":2453},[28,64884,83],{"class":34},[28,64886,64887],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[28,64889,55724],{"class":2453},[28,64891,83],{"class":34},[28,64893,8140],{"class":735},[28,64895,64896],{"class":34}," \u002F>\u003C\u002F",[28,64898,52088],{"class":51777},[28,64900,51784],{"class":34},[28,64902,64903,64905,64907,64909,64911,64913,64915,64917,64919,64921,64924,64926,64928,64930,64932,64934],{"class":30,"line":17331},[28,64904,55711],{"class":34},[28,64906,52088],{"class":51777},[28,64908,53963],{"class":2453},[28,64910,83],{"class":34},[28,64912,63100],{"class":735},[28,64914,61529],{"class":34},[28,64916,420],{"class":51777},[28,64918,55716],{"class":2453},[28,64920,83],{"class":34},[28,64922,64923],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[28,64925,55724],{"class":2453},[28,64927,83],{"class":34},[28,64929,8140],{"class":735},[28,64931,64896],{"class":34},[28,64933,52088],{"class":51777},[28,64935,51784],{"class":34},[28,64937,64938,64940,64942,64944,64946,64948,64950,64952,64954,64956,64959,64961,64963,64965,64967,64969],{"class":30,"line":17336},[28,64939,55711],{"class":34},[28,64941,52088],{"class":51777},[28,64943,53963],{"class":2453},[28,64945,83],{"class":34},[28,64947,63100],{"class":735},[28,64949,61529],{"class":34},[28,64951,420],{"class":51777},[28,64953,55716],{"class":2453},[28,64955,83],{"class":34},[28,64957,64958],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[28,64960,55724],{"class":2453},[28,64962,83],{"class":34},[28,64964,8140],{"class":735},[28,64966,64896],{"class":34},[28,64968,52088],{"class":51777},[28,64970,51784],{"class":34},[28,64972,64973,64975,64977,64979,64981,64983,64985,64987,64989,64991,64994,64996,64998,65000,65002,65004],{"class":30,"line":17341},[28,64974,55711],{"class":34},[28,64976,52088],{"class":51777},[28,64978,53963],{"class":2453},[28,64980,83],{"class":34},[28,64982,63100],{"class":735},[28,64984,61529],{"class":34},[28,64986,420],{"class":51777},[28,64988,55716],{"class":2453},[28,64990,83],{"class":34},[28,64992,64993],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[28,64995,55724],{"class":2453},[28,64997,83],{"class":34},[28,64999,8140],{"class":735},[28,65001,64896],{"class":34},[28,65003,52088],{"class":51777},[28,65005,51784],{"class":34},[28,65007,65008,65010,65012,65014,65016,65018,65020,65022,65024,65026,65029,65031,65033,65035,65037,65039],{"class":30,"line":17355},[28,65009,55711],{"class":34},[28,65011,52088],{"class":51777},[28,65013,53963],{"class":2453},[28,65015,83],{"class":34},[28,65017,63100],{"class":735},[28,65019,61529],{"class":34},[28,65021,420],{"class":51777},[28,65023,55716],{"class":2453},[28,65025,83],{"class":34},[28,65027,65028],{"class":735},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[28,65030,55724],{"class":2453},[28,65032,83],{"class":34},[28,65034,8140],{"class":735},[28,65036,64896],{"class":34},[28,65038,52088],{"class":51777},[28,65040,51784],{"class":34},[28,65042,65043,65045,65047],{"class":30,"line":17367},[28,65044,52253],{"class":34},[28,65046,52088],{"class":51777},[28,65048,51784],{"class":34},[28,65050,65051,65053,65055],{"class":30,"line":17372},[28,65052,52894],{"class":34},[28,65054,52088],{"class":51777},[28,65056,51784],{"class":34},[28,65058,65059,65061,65063],{"class":30,"line":17385},[28,65060,52621],{"class":34},[28,65062,52290],{"class":51777},[28,65064,51784],{"class":34},[28,65066,65067],{"class":30,"line":17390},[28,65068,65069],{"class":73},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[28,65071,65072],{"class":30,"line":17395},[28,65073,65074],{"class":73},"    \u002F\u002F 1.1 获取 a 元素 \n",[28,65076,65077,65079,65082,65084,65086,65088,65090,65093],{"class":30,"line":17400},[28,65078,11707],{"class":42},[28,65080,65081],{"class":38}," as",[28,65083,14050],{"class":42},[28,65085,54873],{"class":34},[28,65087,56158],{"class":2453},[28,65089,367],{"class":34},[28,65091,65092],{"class":735},"'.tab-nav a'",[28,65094,228],{"class":34},[28,65096,65097],{"class":30,"line":17413},[28,65098,65099],{"class":73},"    \u002F\u002F console.log(as) \n",[28,65101,65102,65104,65106,65108,65110,65112,65114,65116,65118,65121,65123,65125,65127],{"class":30,"line":17418},[28,65103,377],{"class":42},[28,65105,2148],{"class":34},[28,65107,52324],{"class":42},[28,65109,52],{"class":34},[28,65111,83],{"class":42},[28,65113,4581],{"class":38},[28,65115,9932],{"class":34},[28,65117,1529],{"class":42},[28,65119,65120],{"class":34}," as.",[28,65122,52445],{"class":38},[28,65124,3702],{"class":34},[28,65126,2782],{"class":42},[28,65128,12928],{"class":34},[28,65130,65131],{"class":30,"line":33111},[28,65132,65133],{"class":73},"      \u002F\u002F console.log(as[i])\n",[28,65135,65136],{"class":30,"line":33117},[28,65137,65138],{"class":73},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[28,65140,65141,65144,65146,65148,65151,65153,65155],{"class":30,"line":33123},[28,65142,65143],{"class":34},"      as[i].",[28,65145,58290],{"class":2453},[28,65147,367],{"class":34},[28,65149,65150],{"class":735},"'mouseenter'",[28,65152,12921],{"class":34},[28,65154,54926],{"class":42},[28,65156,54929],{"class":34},[28,65158,65159],{"class":30,"line":33129},[28,65160,65161],{"class":73},"        \u002F\u002F console.log('鼠标经过')\n",[28,65163,65164],{"class":30,"line":33135},[28,65165,65166],{"class":73},"        \u002F\u002F 排他思想  \n",[28,65168,65169],{"class":30,"line":33146},[28,65170,65171],{"class":73},"        \u002F\u002F 干掉别人 移除类active\n",[28,65173,65174,65176,65178,65180,65183,65185,65187,65189,65192],{"class":30,"line":33152},[28,65175,52402],{"class":34},[28,65177,54876],{"class":2453},[28,65179,367],{"class":34},[28,65181,65182],{"class":735},"'.tab-nav .active'",[28,65184,57480],{"class":34},[28,65186,57483],{"class":2453},[28,65188,367],{"class":34},[28,65190,65191],{"class":735},"'active'",[28,65193,228],{"class":34},[28,65195,65196],{"class":30,"line":33172},[28,65197,65198],{"class":73},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[28,65200,65201,65204,65207,65209,65211,65213],{"class":30,"line":33178},[28,65202,65203],{"class":38},"        this",[28,65205,65206],{"class":34},".classList.",[28,65208,5822],{"class":2453},[28,65210,367],{"class":34},[28,65212,65191],{"class":735},[28,65214,228],{"class":34},[28,65216,65217],{"class":30,"line":33189},[28,65218,2890],{"emptyLinePlaceholder":562},[28,65220,65221],{"class":30,"line":33195},[28,65222,65223],{"class":73},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[28,65225,65226],{"class":30,"line":33201},[28,65227,65228],{"class":73},"        \u002F\u002F 干掉别人\n",[28,65230,65231,65233,65235,65237,65240,65242,65244,65246,65248],{"class":30,"line":33207},[28,65232,52402],{"class":34},[28,65234,54876],{"class":2453},[28,65236,367],{"class":34},[28,65238,65239],{"class":735},"'.tab-content .active'",[28,65241,57480],{"class":34},[28,65243,57483],{"class":2453},[28,65245,367],{"class":34},[28,65247,65191],{"class":735},[28,65249,228],{"class":34},[28,65251,65252],{"class":30,"line":33213},[28,65253,65254],{"class":73},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[28,65256,65257,65259,65261,65263,65266,65268,65270,65272,65274,65276,65278,65280,65282],{"class":30,"line":33219},[28,65258,52402],{"class":34},[28,65260,54876],{"class":2453},[28,65262,367],{"class":34},[28,65264,65265],{"class":735},"`.tab-content .item:nth-child(${",[28,65267,1066],{"class":34},[28,65269,46043],{"class":42},[28,65271,25605],{"class":38},[28,65273,57509],{"class":735},[28,65275,57480],{"class":34},[28,65277,5822],{"class":2453},[28,65279,367],{"class":34},[28,65281,65191],{"class":735},[28,65283,228],{"class":34},[28,65285,65286],{"class":30,"line":33225},[28,65287,2890],{"emptyLinePlaceholder":562},[28,65289,65290],{"class":30,"line":33231},[28,65291,65292],{"class":34},"      })\n",[28,65294,65295],{"class":30,"line":33251},[28,65296,2677],{"class":34},[28,65298,65299,65301,65303],{"class":30,"line":33257},[28,65300,52894],{"class":34},[28,65302,52290],{"class":51777},[28,65304,51784],{"class":34},[28,65306,65307,65309,65311],{"class":30,"line":33273},[28,65308,52262],{"class":34},[28,65310,52277],{"class":51777},[28,65312,51784],{"class":34},[28,65314,65315],{"class":30,"line":33279},[28,65316,2890],{"emptyLinePlaceholder":562},[28,65318,65319,65321,65323],{"class":30,"line":33293},[28,65320,52262],{"class":34},[28,65322,51112],{"class":51777},[28,65324,51784],{"class":34},[14,65326,65327],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65329,65330],{},"在监听事件中，this指向的就是他的调用者",[14,65332,65333],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65335,54197],{},[14,65337,65338],{},"(function () {",[14,65340,65341],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65343,65344],{},"list.addEventListener('click', function (e) {",[14,65346,65347],{},"if (e.target.tagName === 'A') {",[14,65349,65350],{},"\u002F\u002F 排他思想",[14,65352,65353],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65355,65356],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65358,65359],{},"\u002F\u002F console.log(old);",[14,65361,65362],{},"\u002F\u002F 判断",[14,65364,65365],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65367,65368],{},"if (old) old.classList.remove('active')",[14,65370,65371],{},"e.target.classList.add('active')",[14,65373,1565],{},[14,65375,52941],{},[14,65377,65378],{},"})();",[605,65380,65382],{"id":65381},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[18,65384,65386],{"className":51110,"code":65385,"language":51112,"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,65387,65388,65398,65402,65410,65414,65428,65442,65454,65462,65468,65478,65488,65492,65496,65503,65515,65526,65543,65556,65570,65580,65584,65588,65595,65606,65624,65634,65646,65650,65654,65661,65678,65689,65701,65705,65709,65716,65728,65732,65740,65748,65752,65760,65768,65776,65791,65835,65843,65856,65869,65882,65890,65898,65906,65934,65942,65954,65967,65980,65988,65996,66004,66030,66038,66051,66063,66076,66084,66092,66100,66126,66134,66147,66159,66172,66180,66188,66196,66201,66221,66226,66246,66251,66268,66273,66281,66286,66315,66328,66332,66336,66341,66345,66373,66378,66395,66400,66405,66410,66415,66441,66445,66449,66457,66465,66469],{"__ignoreMap":23},[28,65389,65390,65392,65394,65396],{"class":30,"line":31},[28,65391,51774],{"class":34},[28,65393,51778],{"class":51777},[28,65395,51781],{"class":2453},[28,65397,51784],{"class":34},[28,65399,65400],{"class":30,"line":77},[28,65401,2890],{"emptyLinePlaceholder":562},[28,65403,65404,65406,65408],{"class":30,"line":114},[28,65405,1529],{"class":34},[28,65407,51112],{"class":51777},[28,65409,51784],{"class":34},[28,65411,65412],{"class":30,"line":128},[28,65413,2890],{"emptyLinePlaceholder":562},[28,65415,65416,65418,65420,65422,65424,65426],{"class":30,"line":393},[28,65417,1529],{"class":34},[28,65419,51811],{"class":51777},[28,65421,51793],{"class":2453},[28,65423,83],{"class":34},[28,65425,51798],{"class":735},[28,65427,51784],{"class":34},[28,65429,65430,65432,65434,65436,65438,65440],{"class":30,"line":409},[28,65431,52621],{"class":34},[28,65433,51821],{"class":51777},[28,65435,51824],{"class":2453},[28,65437,83],{"class":34},[28,65439,51829],{"class":735},[28,65441,51784],{"class":34},[28,65443,65444,65446,65448,65450,65452],{"class":30,"line":1711},[28,65445,52621],{"class":34},[28,65447,51884],{"class":51777},[28,65449,55791],{"class":34},[28,65451,51884],{"class":51777},[28,65453,51784],{"class":34},[28,65455,65456,65458,65460],{"class":30,"line":1802},[28,65457,52621],{"class":34},[28,65459,547],{"class":51777},[28,65461,51784],{"class":34},[28,65463,65464,65466],{"class":30,"line":1808},[28,65465,6891],{"class":51777},[28,65467,16058],{"class":34},[28,65469,65470,65472,65474,65476],{"class":30,"line":1820},[28,65471,55183],{"class":38},[28,65473,51914],{"class":34},[28,65475,822],{"class":38},[28,65477,1781],{"class":34},[28,65479,65480,65482,65484,65486],{"class":30,"line":2102},[28,65481,55172],{"class":38},[28,65483,51914],{"class":34},[28,65485,822],{"class":38},[28,65487,1781],{"class":34},[28,65489,65490],{"class":30,"line":2107},[28,65491,2677],{"class":34},[28,65493,65494],{"class":30,"line":2113},[28,65495,2890],{"emptyLinePlaceholder":562},[28,65497,65498,65501],{"class":30,"line":2118},[28,65499,65500],{"class":51777},"    table",[28,65502,16058],{"class":34},[28,65504,65505,65508,65510,65513],{"class":30,"line":2132},[28,65506,65507],{"class":38},"      border-collapse",[28,65509,51914],{"class":34},[28,65511,65512],{"class":38},"collapse",[28,65514,1781],{"class":34},[28,65516,65517,65520,65522,65524],{"class":30,"line":2137},[28,65518,65519],{"class":38},"      border-spacing",[28,65521,51914],{"class":34},[28,65523,822],{"class":38},[28,65525,1781],{"class":34},[28,65527,65528,65530,65532,65534,65536,65538,65541],{"class":30,"line":2143},[28,65529,62454],{"class":38},[28,65531,51914],{"class":34},[28,65533,39],{"class":38},[28,65535,51969],{"class":42},[28,65537,51998],{"class":38},[28,65539,65540],{"class":38}," #c0c0c0",[28,65542,1781],{"class":34},[28,65544,65545,65547,65549,65552,65554],{"class":30,"line":2164},[28,65546,55248],{"class":38},[28,65548,51914],{"class":34},[28,65550,65551],{"class":38},"500",[28,65553,51969],{"class":42},[28,65555,1781],{"class":34},[28,65557,65558,65560,65562,65564,65566,65568],{"class":30,"line":2169},[28,65559,55183],{"class":38},[28,65561,51914],{"class":34},[28,65563,938],{"class":38},[28,65565,51969],{"class":42},[28,65567,52033],{"class":38},[28,65569,1781],{"class":34},[28,65571,65572,65574,65576,65578],{"class":30,"line":2183},[28,65573,57763],{"class":38},[28,65575,51914],{"class":34},[28,65577,52069],{"class":38},[28,65579,1781],{"class":34},[28,65581,65582],{"class":30,"line":2188},[28,65583,2677],{"class":34},[28,65585,65586],{"class":30,"line":2217},[28,65587,2890],{"emptyLinePlaceholder":562},[28,65589,65590,65593],{"class":30,"line":2222},[28,65591,65592],{"class":51777},"    th",[28,65594,16058],{"class":34},[28,65596,65597,65599,65601,65604],{"class":30,"line":2239},[28,65598,55361],{"class":38},[28,65600,51914],{"class":34},[28,65602,65603],{"class":38},"#09c",[28,65605,1781],{"class":34},[28,65607,65608,65611,65613,65615,65617,65619,65622],{"class":30,"line":2244},[28,65609,65610],{"class":38},"      font",[28,65612,51914],{"class":34},[28,65614,62816],{"class":38},[28,65616,64550],{"class":38},[28,65618,51969],{"class":42},[28,65620,65621],{"class":735}," \"微软雅黑\"",[28,65623,1781],{"class":34},[28,65625,65626,65628,65630,65632],{"class":30,"line":2249},[28,65627,57893],{"class":38},[28,65629,51914],{"class":34},[28,65631,61319],{"class":38},[28,65633,1781],{"class":34},[28,65635,65636,65638,65640,65642,65644],{"class":30,"line":2254},[28,65637,55262],{"class":38},[28,65639,51914],{"class":34},[28,65641,1420],{"class":38},[28,65643,51969],{"class":42},[28,65645,1781],{"class":34},[28,65647,65648],{"class":30,"line":2268},[28,65649,2677],{"class":34},[28,65651,65652],{"class":30,"line":2273},[28,65653,2890],{"emptyLinePlaceholder":562},[28,65655,65656,65659],{"class":30,"line":3067},[28,65657,65658],{"class":51777},"    td",[28,65660,16058],{"class":34},[28,65662,65663,65665,65667,65669,65671,65673,65676],{"class":30,"line":3081},[28,65664,62454],{"class":38},[28,65666,51914],{"class":34},[28,65668,39],{"class":38},[28,65670,51969],{"class":42},[28,65672,51998],{"class":38},[28,65674,65675],{"class":38}," #d0d0d0",[28,65677,1781],{"class":34},[28,65679,65680,65682,65684,65687],{"class":30,"line":3089},[28,65681,57893],{"class":38},[28,65683,51914],{"class":34},[28,65685,65686],{"class":38},"#404060",[28,65688,1781],{"class":34},[28,65690,65691,65693,65695,65697,65699],{"class":30,"line":3094},[28,65692,55172],{"class":38},[28,65694,51914],{"class":34},[28,65696,225],{"class":38},[28,65698,51969],{"class":42},[28,65700,1781],{"class":34},[28,65702,65703],{"class":30,"line":3100},[28,65704,2677],{"class":34},[28,65706,65707],{"class":30,"line":3106},[28,65708,2890],{"emptyLinePlaceholder":562},[28,65710,65711,65714],{"class":30,"line":3111},[28,65712,65713],{"class":2453},"    .allCheck",[28,65715,16058],{"class":34},[28,65717,65718,65720,65722,65724,65726],{"class":30,"line":8436},[28,65719,55248],{"class":38},[28,65721,51914],{"class":34},[28,65723,1232],{"class":38},[28,65725,51969],{"class":42},[28,65727,1781],{"class":34},[28,65729,65730],{"class":30,"line":8460},[28,65731,2677],{"class":34},[28,65733,65734,65736,65738],{"class":30,"line":8465},[28,65735,52894],{"class":34},[28,65737,547],{"class":51777},[28,65739,51784],{"class":34},[28,65741,65742,65744,65746],{"class":30,"line":8471},[28,65743,52262],{"class":34},[28,65745,51811],{"class":51777},[28,65747,51784],{"class":34},[28,65749,65750],{"class":30,"line":8498},[28,65751,2890],{"emptyLinePlaceholder":562},[28,65753,65754,65756,65758],{"class":30,"line":8503},[28,65755,1529],{"class":34},[28,65757,52277],{"class":51777},[28,65759,51784],{"class":34},[28,65761,65762,65764,65766],{"class":30,"line":8509},[28,65763,52621],{"class":34},[28,65765,768],{"class":51777},[28,65767,51784],{"class":34},[28,65769,65770,65772,65774],{"class":30,"line":8521},[28,65771,51818],{"class":34},[28,65773,774],{"class":51777},[28,65775,51784],{"class":34},[28,65777,65778,65780,65782,65784,65786,65789],{"class":30,"line":8533},[28,65779,55711],{"class":34},[28,65781,777],{"class":51777},[28,65783,53963],{"class":2453},[28,65785,83],{"class":34},[28,65787,65788],{"class":735},"\"allCheck\"",[28,65790,51784],{"class":34},[28,65792,65793,65795,65797,65799,65801,65803,65805,65807,65809,65811,65813,65816,65819,65821,65823,65825,65828,65831,65833],{"class":30,"line":8545},[28,65794,55779],{"class":34},[28,65796,54298],{"class":51777},[28,65798,54301],{"class":2453},[28,65800,83],{"class":34},[28,65802,54306],{"class":735},[28,65804,15406],{"class":2453},[28,65806,83],{"class":34},[28,65808,8140],{"class":735},[28,65810,15445],{"class":2453},[28,65812,83],{"class":34},[28,65814,65815],{"class":735},"\"checkAll\"",[28,65817,65818],{"class":34},"> \u003C",[28,65820,28],{"class":51777},[28,65822,53963],{"class":2453},[28,65824,83],{"class":34},[28,65826,65827],{"class":735},"\"all\"",[28,65829,65830],{"class":34},">全选\u003C\u002F",[28,65832,28],{"class":51777},[28,65834,51784],{"class":34},[28,65836,65837,65839,65841],{"class":30,"line":10202},[28,65838,55884],{"class":34},[28,65840,777],{"class":51777},[28,65842,51784],{"class":34},[28,65844,65845,65847,65849,65852,65854],{"class":30,"line":10227},[28,65846,55711],{"class":34},[28,65848,777],{"class":51777},[28,65850,65851],{"class":34},">商品\u003C\u002F",[28,65853,777],{"class":51777},[28,65855,51784],{"class":34},[28,65857,65858,65860,65862,65865,65867],{"class":30,"line":10250},[28,65859,55711],{"class":34},[28,65861,777],{"class":51777},[28,65863,65864],{"class":34},">商家\u003C\u002F",[28,65866,777],{"class":51777},[28,65868,51784],{"class":34},[28,65870,65871,65873,65875,65878,65880],{"class":30,"line":10274},[28,65872,55711],{"class":34},[28,65874,777],{"class":51777},[28,65876,65877],{"class":34},">价格\u003C\u002F",[28,65879,777],{"class":51777},[28,65881,51784],{"class":34},[28,65883,65884,65886,65888],{"class":30,"line":10279},[28,65885,52253],{"class":34},[28,65887,774],{"class":51777},[28,65889,51784],{"class":34},[28,65891,65892,65894,65896],{"class":30,"line":10284},[28,65893,51818],{"class":34},[28,65895,774],{"class":51777},[28,65897,51784],{"class":34},[28,65899,65900,65902,65904],{"class":30,"line":10289},[28,65901,55711],{"class":34},[28,65903,820],{"class":51777},[28,65905,51784],{"class":34},[28,65907,65908,65910,65912,65914,65916,65918,65920,65922,65925,65927,65929,65932],{"class":30,"line":10298},[28,65909,55779],{"class":34},[28,65911,54298],{"class":51777},[28,65913,54301],{"class":2453},[28,65915,83],{"class":34},[28,65917,54306],{"class":735},[28,65919,15406],{"class":2453},[28,65921,83],{"class":34},[28,65923,65924],{"class":735},"\"check\"",[28,65926,53963],{"class":2453},[28,65928,83],{"class":34},[28,65930,65931],{"class":735},"\"ck\"",[28,65933,51784],{"class":34},[28,65935,65936,65938,65940],{"class":30,"line":10303},[28,65937,55884],{"class":34},[28,65939,820],{"class":51777},[28,65941,51784],{"class":34},[28,65943,65944,65946,65948,65950,65952],{"class":30,"line":10309},[28,65945,55711],{"class":34},[28,65947,820],{"class":51777},[28,65949,61650],{"class":34},[28,65951,820],{"class":51777},[28,65953,51784],{"class":34},[28,65955,65956,65958,65960,65963,65965],{"class":30,"line":10330},[28,65957,55711],{"class":34},[28,65959,820],{"class":51777},[28,65961,65962],{"class":34},">小米\u003C\u002F",[28,65964,820],{"class":51777},[28,65966,51784],{"class":34},[28,65968,65969,65971,65973,65976,65978],{"class":30,"line":10336},[28,65970,55711],{"class":34},[28,65972,820],{"class":51777},[28,65974,65975],{"class":34},">￥1999\u003C\u002F",[28,65977,820],{"class":51777},[28,65979,51784],{"class":34},[28,65981,65982,65984,65986],{"class":30,"line":10350},[28,65983,52253],{"class":34},[28,65985,774],{"class":51777},[28,65987,51784],{"class":34},[28,65989,65990,65992,65994],{"class":30,"line":10356},[28,65991,51818],{"class":34},[28,65993,774],{"class":51777},[28,65995,51784],{"class":34},[28,65997,65998,66000,66002],{"class":30,"line":10383},[28,65999,55711],{"class":34},[28,66001,820],{"class":51777},[28,66003,51784],{"class":34},[28,66005,66006,66008,66010,66012,66014,66016,66018,66020,66022,66024,66026,66028],{"class":30,"line":10392},[28,66007,55779],{"class":34},[28,66009,54298],{"class":51777},[28,66011,54301],{"class":2453},[28,66013,83],{"class":34},[28,66015,54306],{"class":735},[28,66017,15406],{"class":2453},[28,66019,83],{"class":34},[28,66021,65924],{"class":735},[28,66023,53963],{"class":2453},[28,66025,83],{"class":34},[28,66027,65931],{"class":735},[28,66029,51784],{"class":34},[28,66031,66032,66034,66036],{"class":30,"line":10398},[28,66033,55884],{"class":34},[28,66035,820],{"class":51777},[28,66037,51784],{"class":34},[28,66039,66040,66042,66044,66047,66049],{"class":30,"line":10406},[28,66041,55711],{"class":34},[28,66043,820],{"class":51777},[28,66045,66046],{"class":34},">小米净水器\u003C\u002F",[28,66048,820],{"class":51777},[28,66050,51784],{"class":34},[28,66052,66053,66055,66057,66059,66061],{"class":30,"line":10411},[28,66054,55711],{"class":34},[28,66056,820],{"class":51777},[28,66058,65962],{"class":34},[28,66060,820],{"class":51777},[28,66062,51784],{"class":34},[28,66064,66065,66067,66069,66072,66074],{"class":30,"line":17090},[28,66066,55711],{"class":34},[28,66068,820],{"class":51777},[28,66070,66071],{"class":34},">￥4999\u003C\u002F",[28,66073,820],{"class":51777},[28,66075,51784],{"class":34},[28,66077,66078,66080,66082],{"class":30,"line":17096},[28,66079,52253],{"class":34},[28,66081,774],{"class":51777},[28,66083,51784],{"class":34},[28,66085,66086,66088,66090],{"class":30,"line":17119},[28,66087,51818],{"class":34},[28,66089,774],{"class":51777},[28,66091,51784],{"class":34},[28,66093,66094,66096,66098],{"class":30,"line":17125},[28,66095,55711],{"class":34},[28,66097,820],{"class":51777},[28,66099,51784],{"class":34},[28,66101,66102,66104,66106,66108,66110,66112,66114,66116,66118,66120,66122,66124],{"class":30,"line":17148},[28,66103,55779],{"class":34},[28,66105,54298],{"class":51777},[28,66107,54301],{"class":2453},[28,66109,83],{"class":34},[28,66111,54306],{"class":735},[28,66113,15406],{"class":2453},[28,66115,83],{"class":34},[28,66117,65924],{"class":735},[28,66119,53963],{"class":2453},[28,66121,83],{"class":34},[28,66123,65931],{"class":735},[28,66125,51784],{"class":34},[28,66127,66128,66130,66132],{"class":30,"line":17162},[28,66129,55884],{"class":34},[28,66131,820],{"class":51777},[28,66133,51784],{"class":34},[28,66135,66136,66138,66140,66143,66145],{"class":30,"line":17182},[28,66137,55711],{"class":34},[28,66139,820],{"class":51777},[28,66141,66142],{"class":34},">小米电视\u003C\u002F",[28,66144,820],{"class":51777},[28,66146,51784],{"class":34},[28,66148,66149,66151,66153,66155,66157],{"class":30,"line":17188},[28,66150,55711],{"class":34},[28,66152,820],{"class":51777},[28,66154,65962],{"class":34},[28,66156,820],{"class":51777},[28,66158,51784],{"class":34},[28,66160,66161,66163,66165,66168,66170],{"class":30,"line":17199},[28,66162,55711],{"class":34},[28,66164,820],{"class":51777},[28,66166,66167],{"class":34},">￥5999\u003C\u002F",[28,66169,820],{"class":51777},[28,66171,51784],{"class":34},[28,66173,66174,66176,66178],{"class":30,"line":17222},[28,66175,52253],{"class":34},[28,66177,774],{"class":51777},[28,66179,51784],{"class":34},[28,66181,66182,66184,66186],{"class":30,"line":17244},[28,66183,52894],{"class":34},[28,66185,768],{"class":51777},[28,66187,51784],{"class":34},[28,66189,66190,66192,66194],{"class":30,"line":17249},[28,66191,52621],{"class":34},[28,66193,52290],{"class":51777},[28,66195,51784],{"class":34},[28,66197,66198],{"class":30,"line":17255},[28,66199,66200],{"class":73},"    \u002F\u002F 1. 获取大复选框\n",[28,66202,66203,66205,66208,66210,66212,66214,66216,66219],{"class":30,"line":17269},[28,66204,11707],{"class":42},[28,66206,66207],{"class":38}," checkAll",[28,66209,14050],{"class":42},[28,66211,54873],{"class":34},[28,66213,54876],{"class":2453},[28,66215,367],{"class":34},[28,66217,66218],{"class":735},"'#checkAll'",[28,66220,228],{"class":34},[28,66222,66223],{"class":30,"line":17282},[28,66224,66225],{"class":73},"    \u002F\u002F 2. 获取所有的小复选框\n",[28,66227,66228,66230,66233,66235,66237,66239,66241,66244],{"class":30,"line":17287},[28,66229,11707],{"class":42},[28,66231,66232],{"class":38}," cks",[28,66234,14050],{"class":42},[28,66236,54873],{"class":34},[28,66238,56158],{"class":2453},[28,66240,367],{"class":34},[28,66242,66243],{"class":735},"'.ck'",[28,66245,228],{"class":34},[28,66247,66248],{"class":30,"line":17301},[28,66249,66250],{"class":73},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[28,66252,66253,66256,66258,66260,66262,66264,66266],{"class":30,"line":17306},[28,66254,66255],{"class":34},"    checkAll.",[28,66257,58290],{"class":2453},[28,66259,367],{"class":34},[28,66261,58295],{"class":735},[28,66263,12921],{"class":34},[28,66265,54926],{"class":42},[28,66267,54929],{"class":34},[28,66269,66270],{"class":30,"line":17312},[28,66271,66272],{"class":73},"      \u002F\u002F 得到当前大复选框的选中状态\n",[28,66274,66275,66278],{"class":30,"line":17317},[28,66276,66277],{"class":73},"      \u002F\u002F console.log(checkAll.checked)",[28,66279,66280],{"class":73},"  \u002F\u002F 得到 是 true 或者是 false\n",[28,66282,66283],{"class":30,"line":17331},[28,66284,66285],{"class":73},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[28,66287,66288,66290,66292,66294,66296,66298,66300,66302,66304,66307,66309,66311,66313],{"class":30,"line":17336},[28,66289,52761],{"class":42},[28,66291,2148],{"class":34},[28,66293,52324],{"class":42},[28,66295,52],{"class":34},[28,66297,83],{"class":42},[28,66299,4581],{"class":38},[28,66301,9932],{"class":34},[28,66303,1529],{"class":42},[28,66305,66306],{"class":34}," cks.",[28,66308,52445],{"class":38},[28,66310,3702],{"class":34},[28,66312,2782],{"class":42},[28,66314,12928],{"class":34},[28,66316,66317,66320,66322,66325],{"class":30,"line":17341},[28,66318,66319],{"class":34},"        cks[i].checked ",[28,66321,83],{"class":42},[28,66323,66324],{"class":38}," this",[28,66326,66327],{"class":34},".checked\n",[28,66329,66330],{"class":30,"line":17355},[28,66331,52875],{"class":34},[28,66333,66334],{"class":30,"line":17367},[28,66335,33938],{"class":34},[28,66337,66338],{"class":30,"line":17372},[28,66339,66340],{"class":73},"    \u002F\u002F 5. 小复选框控制大复选框\n",[28,66342,66343],{"class":30,"line":17385},[28,66344,2890],{"emptyLinePlaceholder":562},[28,66346,66347,66349,66351,66353,66355,66357,66359,66361,66363,66365,66367,66369,66371],{"class":30,"line":17390},[28,66348,377],{"class":42},[28,66350,2148],{"class":34},[28,66352,52324],{"class":42},[28,66354,52],{"class":34},[28,66356,83],{"class":42},[28,66358,4581],{"class":38},[28,66360,9932],{"class":34},[28,66362,1529],{"class":42},[28,66364,66306],{"class":34},[28,66366,52445],{"class":38},[28,66368,3702],{"class":34},[28,66370,2782],{"class":42},[28,66372,12928],{"class":34},[28,66374,66375],{"class":30,"line":17395},[28,66376,66377],{"class":73},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[28,66379,66380,66383,66385,66387,66389,66391,66393],{"class":30,"line":17400},[28,66381,66382],{"class":34},"      cks[i].",[28,66384,58290],{"class":2453},[28,66386,367],{"class":34},[28,66388,58295],{"class":735},[28,66390,12921],{"class":34},[28,66392,54926],{"class":42},[28,66394,54929],{"class":34},[28,66396,66397],{"class":30,"line":17413},[28,66398,66399],{"class":73},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[28,66401,66402],{"class":30,"line":17418},[28,66403,66404],{"class":73},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[28,66406,66407],{"class":30,"line":33111},[28,66408,66409],{"class":73},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[28,66411,66412],{"class":30,"line":33117},[28,66413,66414],{"class":73},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[28,66416,66417,66420,66422,66424,66426,66428,66431,66433,66435,66437,66439],{"class":30,"line":33123},[28,66418,66419],{"class":34},"        checkAll.checked ",[28,66421,83],{"class":42},[28,66423,54873],{"class":34},[28,66425,56158],{"class":2453},[28,66427,367],{"class":34},[28,66429,66430],{"class":735},"'.ck:checked'",[28,66432,31307],{"class":34},[28,66434,52445],{"class":38},[28,66436,58383],{"class":42},[28,66438,66306],{"class":34},[28,66440,56308],{"class":38},[28,66442,66443],{"class":30,"line":33129},[28,66444,65292],{"class":34},[28,66446,66447],{"class":30,"line":33135},[28,66448,2677],{"class":34},[28,66450,66451,66453,66455],{"class":30,"line":33146},[28,66452,52894],{"class":34},[28,66454,52290],{"class":51777},[28,66456,51784],{"class":34},[28,66458,66459,66461,66463],{"class":30,"line":33152},[28,66460,52262],{"class":34},[28,66462,52277],{"class":51777},[28,66464,51784],{"class":34},[28,66466,66467],{"class":30,"line":33172},[28,66468,2890],{"emptyLinePlaceholder":562},[28,66470,66471,66473,66475],{"class":30,"line":33178},[28,66472,52262],{"class":34},[28,66474,51112],{"class":51777},[28,66476,51784],{"class":34},[14,66478,66479],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66481,66482],{},"用好之间比较得到的布尔值！！！",[14,66484,66485,66486,66489,66490,2148,66493,43,66495,66498],{},"在 JS 里访问的时候，",[25,66487,66488],{},"checkbox.checked"," 是一个 ",[780,66491,66492],{},"布尔值",[25,66494,1853],{},[25,66496,66497],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66500,66501,66502,66505,66506],{},"HTML 的 ",[25,66503,66504],{},"checked=\"checked\""," 只是 ",[780,66507,66508,66509,66512],{},"初始值；JS 的 ",[25,66510,66511],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66514,66515],{},"：checked是一个伪类选择器",[14,66517,66518],{},[420,66519],{"alt":23,"src":66520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66522,66523,66526],{},[66524,66525],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66528,66529],{},[420,66530],{"alt":23,"src":66531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[60,66533,66535],{"id":66534},"_33-dom事件进阶","3.3 DOM事件进阶",[605,66537,66539],{"id":66538},"_331-事件流","3.3.1 事件流",[14,66541,66542],{},[420,66543],{"alt":23,"src":66544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22484,66546,66548],{"id":66547},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66550,66551],{},[420,66552],{"alt":23,"src":66553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[18,66555,66557],{"className":51110,"code":66556,"language":51112,"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,66558,66559,66569,66583,66587,66595,66609,66629,66641,66649,66656,66668,66680,66690,66694,66698,66705,66717,66729,66739,66743,66751,66759,66763,66771,66786,66805,66813,66821,66841,66861,66877,66888,66896,66913,66924,66932,66949,66960,66968,66976,66984,66988],{"__ignoreMap":23},[28,66560,66561,66563,66565,66567],{"class":30,"line":31},[28,66562,51774],{"class":34},[28,66564,51778],{"class":51777},[28,66566,51781],{"class":2453},[28,66568,51784],{"class":34},[28,66570,66571,66573,66575,66577,66579,66581],{"class":30,"line":77},[28,66572,1529],{"class":34},[28,66574,51112],{"class":51777},[28,66576,51793],{"class":2453},[28,66578,83],{"class":34},[28,66580,51798],{"class":735},[28,66582,51784],{"class":34},[28,66584,66585],{"class":30,"line":114},[28,66586,2890],{"emptyLinePlaceholder":562},[28,66588,66589,66591,66593],{"class":30,"line":128},[28,66590,1529],{"class":34},[28,66592,51811],{"class":51777},[28,66594,51784],{"class":34},[28,66596,66597,66599,66601,66603,66605,66607],{"class":30,"line":393},[28,66598,52621],{"class":34},[28,66600,51821],{"class":51777},[28,66602,51824],{"class":2453},[28,66604,83],{"class":34},[28,66606,51829],{"class":735},[28,66608,51784],{"class":34},[28,66610,66611,66613,66615,66617,66619,66621,66623,66625,66627],{"class":30,"line":409},[28,66612,52621],{"class":34},[28,66614,51821],{"class":51777},[28,66616,15406],{"class":2453},[28,66618,83],{"class":34},[28,66620,51868],{"class":735},[28,66622,51848],{"class":2453},[28,66624,83],{"class":34},[28,66626,51875],{"class":735},[28,66628,51784],{"class":34},[28,66630,66631,66633,66635,66637,66639],{"class":30,"line":1711},[28,66632,52621],{"class":34},[28,66634,51884],{"class":51777},[28,66636,51887],{"class":34},[28,66638,51884],{"class":51777},[28,66640,51784],{"class":34},[28,66642,66643,66645,66647],{"class":30,"line":1802},[28,66644,52621],{"class":34},[28,66646,547],{"class":51777},[28,66648,51784],{"class":34},[28,66650,66651,66654],{"class":30,"line":1808},[28,66652,66653],{"class":2453},"    .father",[28,66655,16058],{"class":34},[28,66657,66658,66660,66662,66664,66666],{"class":30,"line":1820},[28,66659,55248],{"class":38},[28,66661,51914],{"class":34},[28,66663,65551],{"class":38},[28,66665,51969],{"class":42},[28,66667,1781],{"class":34},[28,66669,66670,66672,66674,66676,66678],{"class":30,"line":2102},[28,66671,55262],{"class":38},[28,66673,51914],{"class":34},[28,66675,65551],{"class":38},[28,66677,51969],{"class":42},[28,66679,1781],{"class":34},[28,66681,66682,66684,66686,66688],{"class":30,"line":2107},[28,66683,55361],{"class":38},[28,66685,51914],{"class":34},[28,66687,52122],{"class":38},[28,66689,1781],{"class":34},[28,66691,66692],{"class":30,"line":2113},[28,66693,2677],{"class":34},[28,66695,66696],{"class":30,"line":2118},[28,66697,2890],{"emptyLinePlaceholder":562},[28,66699,66700,66703],{"class":30,"line":2132},[28,66701,66702],{"class":2453},"    .son",[28,66704,16058],{"class":34},[28,66706,66707,66709,66711,66713,66715],{"class":30,"line":2137},[28,66708,55248],{"class":38},[28,66710,51914],{"class":34},[28,66712,2212],{"class":38},[28,66714,51969],{"class":42},[28,66716,1781],{"class":34},[28,66718,66719,66721,66723,66725,66727],{"class":30,"line":2143},[28,66720,55262],{"class":38},[28,66722,51914],{"class":34},[28,66724,2212],{"class":38},[28,66726,51969],{"class":42},[28,66728,1781],{"class":34},[28,66730,66731,66733,66735,66737],{"class":30,"line":2164},[28,66732,55361],{"class":38},[28,66734,51914],{"class":34},[28,66736,55366],{"class":38},[28,66738,1781],{"class":34},[28,66740,66741],{"class":30,"line":2169},[28,66742,2677],{"class":34},[28,66744,66745,66747,66749],{"class":30,"line":2183},[28,66746,52894],{"class":34},[28,66748,547],{"class":51777},[28,66750,51784],{"class":34},[28,66752,66753,66755,66757],{"class":30,"line":2188},[28,66754,52262],{"class":34},[28,66756,51811],{"class":51777},[28,66758,51784],{"class":34},[28,66760,66761],{"class":30,"line":2217},[28,66762,2890],{"emptyLinePlaceholder":562},[28,66764,66765,66767,66769],{"class":30,"line":2222},[28,66766,1529],{"class":34},[28,66768,52277],{"class":51777},[28,66770,51784],{"class":34},[28,66772,66773,66775,66777,66779,66781,66784],{"class":30,"line":2239},[28,66774,52621],{"class":34},[28,66776,52088],{"class":51777},[28,66778,53963],{"class":2453},[28,66780,83],{"class":34},[28,66782,66783],{"class":735},"\"father\"",[28,66785,51784],{"class":34},[28,66787,66788,66790,66792,66794,66796,66799,66801,66803],{"class":30,"line":2244},[28,66789,51818],{"class":34},[28,66791,52088],{"class":51777},[28,66793,53963],{"class":2453},[28,66795,83],{"class":34},[28,66797,66798],{"class":735},"\"son\"",[28,66800,55791],{"class":34},[28,66802,52088],{"class":51777},[28,66804,51784],{"class":34},[28,66806,66807,66809,66811],{"class":30,"line":2249},[28,66808,52894],{"class":34},[28,66810,52088],{"class":51777},[28,66812,51784],{"class":34},[28,66814,66815,66817,66819],{"class":30,"line":2254},[28,66816,52621],{"class":34},[28,66818,52290],{"class":51777},[28,66820,51784],{"class":34},[28,66822,66823,66825,66828,66830,66832,66834,66836,66839],{"class":30,"line":2268},[28,66824,11707],{"class":42},[28,66826,66827],{"class":38}," fa",[28,66829,14050],{"class":42},[28,66831,54873],{"class":34},[28,66833,54876],{"class":2453},[28,66835,367],{"class":34},[28,66837,66838],{"class":735},"'.father'",[28,66840,228],{"class":34},[28,66842,66843,66845,66848,66850,66852,66854,66856,66859],{"class":30,"line":2273},[28,66844,11707],{"class":42},[28,66846,66847],{"class":38}," son",[28,66849,14050],{"class":42},[28,66851,54873],{"class":34},[28,66853,54876],{"class":2453},[28,66855,367],{"class":34},[28,66857,66858],{"class":735},"'.son'",[28,66860,228],{"class":34},[28,66862,66863,66865,66867,66869,66871,66873,66875],{"class":30,"line":3067},[28,66864,52884],{"class":34},[28,66866,58290],{"class":2453},[28,66868,367],{"class":34},[28,66870,58295],{"class":735},[28,66872,12921],{"class":34},[28,66874,54926],{"class":42},[28,66876,54929],{"class":34},[28,66878,66879,66881,66883,66886],{"class":30,"line":3081},[28,66880,59402],{"class":2453},[28,66882,367],{"class":34},[28,66884,66885],{"class":735},"'woshiu1'",[28,66887,228],{"class":34},[28,66889,66890,66892,66894],{"class":30,"line":3089},[28,66891,55012],{"class":34},[28,66893,1853],{"class":38},[28,66895,228],{"class":34},[28,66897,66898,66901,66903,66905,66907,66909,66911],{"class":30,"line":3094},[28,66899,66900],{"class":34},"    fa.",[28,66902,58290],{"class":2453},[28,66904,367],{"class":34},[28,66906,58295],{"class":735},[28,66908,12921],{"class":34},[28,66910,54926],{"class":42},[28,66912,54929],{"class":34},[28,66914,66915,66917,66919,66922],{"class":30,"line":3100},[28,66916,59402],{"class":2453},[28,66918,367],{"class":34},[28,66920,66921],{"class":735},"'1'",[28,66923,228],{"class":34},[28,66925,66926,66928,66930],{"class":30,"line":3106},[28,66927,55012],{"class":34},[28,66929,1853],{"class":38},[28,66931,228],{"class":34},[28,66933,66934,66937,66939,66941,66943,66945,66947],{"class":30,"line":3111},[28,66935,66936],{"class":34},"    son.",[28,66938,58290],{"class":2453},[28,66940,367],{"class":34},[28,66942,58295],{"class":735},[28,66944,12921],{"class":34},[28,66946,54926],{"class":42},[28,66948,54929],{"class":34},[28,66950,66951,66953,66955,66958],{"class":30,"line":8436},[28,66952,59402],{"class":2453},[28,66954,367],{"class":34},[28,66956,66957],{"class":735},"'2'",[28,66959,228],{"class":34},[28,66961,66962,66964,66966],{"class":30,"line":8460},[28,66963,55012],{"class":34},[28,66965,1853],{"class":38},[28,66967,228],{"class":34},[28,66969,66970,66972,66974],{"class":30,"line":8465},[28,66971,52894],{"class":34},[28,66973,52290],{"class":51777},[28,66975,51784],{"class":34},[28,66977,66978,66980,66982],{"class":30,"line":8471},[28,66979,52262],{"class":34},[28,66981,52277],{"class":51777},[28,66983,51784],{"class":34},[28,66985,66986],{"class":30,"line":8498},[28,66987,2890],{"emptyLinePlaceholder":562},[28,66989,66990,66992,66994],{"class":30,"line":8503},[28,66991,52262],{"class":34},[28,66993,51112],{"class":51777},[28,66995,51784],{"class":34},[14,66997,66998],{},[420,66999],{"alt":23,"src":67000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,67002,67003],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22484,67005,67007],{"id":67006},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,67009,67010],{},[420,67011],{"alt":23,"src":67012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,67014,67015],{},"反着来",[14,67017,67018],{},"注意是同名事件，比如都是‘click’",[22484,67020,67022],{"id":67021},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67024,67025],{},[420,67026],{"alt":23,"src":67027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22484,67029,67031],{"id":67030},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67033,67034],{},[420,67035],{"alt":23,"src":67036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67038,67039],{},[420,67040],{"alt":23,"src":67041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22484,67043,67045],{"id":67044},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[588,67047,67048],{},[591,67049,67050],{},"事件类型的区别",[14,67052,67053],{},[420,67054],{"alt":23,"src":67055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67057,67058],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[588,67060,67061],{"start":77},[591,67062,67063],{},"注册事件的区别",[14,67065,67066],{},[420,67067],{"alt":23,"src":67068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22484,67070,67072],{"id":67071},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67074,67075],{},[420,67076],{"alt":23,"src":67077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67079,67080],{},[420,67081],{"alt":23,"src":67082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[18,67084,67086],{"className":53544,"code":67085,"language":53546,"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,67087,67088,67096,67113,67136,67144,67149,67154,67159,67163,67171,67179],{"__ignoreMap":23},[28,67089,67090,67092,67094],{"class":30,"line":31},[28,67091,1529],{"class":34},[28,67093,52277],{"class":51777},[28,67095,51784],{"class":34},[28,67097,67098,67100,67103,67106,67108,67111],{"class":30,"line":77},[28,67099,52621],{"class":34},[28,67101,67102],{"class":51777},"form",[28,67104,67105],{"class":2453}," action",[28,67107,83],{"class":34},[28,67109,67110],{"class":735},"\"http:\u002F\u002Fwww.itcast.cn\"",[28,67112,51784],{"class":34},[28,67114,67115,67117,67119,67121,67123,67126,67129,67131,67134],{"class":30,"line":114},[28,67116,51818],{"class":34},[28,67118,54298],{"class":51777},[28,67120,54301],{"class":2453},[28,67122,83],{"class":34},[28,67124,67125],{"class":735},"\"submit\"",[28,67127,67128],{"class":2453}," value",[28,67130,83],{"class":34},[28,67132,67133],{"class":735},"\"免费注册\"",[28,67135,51784],{"class":34},[28,67137,67138,67140,67142],{"class":30,"line":128},[28,67139,51818],{"class":34},[28,67141,52290],{"class":51777},[28,67143,51784],{"class":34},[28,67145,67146],{"class":30,"line":393},[28,67147,67148],{"class":34},"      const form = document.querySelector('form')\n",[28,67150,67151],{"class":30,"line":409},[28,67152,67153],{"class":34},"      form.addEventListener('submit', function (e) {\n",[28,67155,67156],{"class":30,"line":1711},[28,67157,67158],{"class":34},"        e.preventDefault()\n",[28,67160,67161],{"class":30,"line":1802},[28,67162,65292],{"class":34},[28,67164,67165,67167,67169],{"class":30,"line":1808},[28,67166,52253],{"class":34},[28,67168,52290],{"class":51777},[28,67170,51784],{"class":34},[28,67172,67173,67175,67177],{"class":30,"line":1820},[28,67174,52894],{"class":34},[28,67176,67102],{"class":51777},[28,67178,51784],{"class":34},[28,67180,67181,67183,67185],{"class":30,"line":2102},[28,67182,52262],{"class":34},[28,67184,52277],{"class":51777},[28,67186,51784],{"class":34},[14,67188,67189],{},"点击不在跳转！！！",[605,67191,67193],{"id":67192},"_332-事件委托","3.3.2 事件委托",[14,67195,67196],{},[420,67197],{"alt":23,"src":67198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[18,67200,67202],{"className":51110,"code":67201,"language":51112,"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,67203,67204,67214,67228,67232,67240,67254,67274,67286,67294,67298,67306,67314,67326,67338,67350,67362,67374,67387,67395,67403,67408,67427,67448,67453,67458,67463,67468,67477,67481,67491,67495,67500,67505,67519,67529,67533,67537,67545,67553,67557],{"__ignoreMap":23},[28,67205,67206,67208,67210,67212],{"class":30,"line":31},[28,67207,51774],{"class":34},[28,67209,51778],{"class":51777},[28,67211,51781],{"class":2453},[28,67213,51784],{"class":34},[28,67215,67216,67218,67220,67222,67224,67226],{"class":30,"line":77},[28,67217,1529],{"class":34},[28,67219,51112],{"class":51777},[28,67221,51793],{"class":2453},[28,67223,83],{"class":34},[28,67225,51798],{"class":735},[28,67227,51784],{"class":34},[28,67229,67230],{"class":30,"line":114},[28,67231,2890],{"emptyLinePlaceholder":562},[28,67233,67234,67236,67238],{"class":30,"line":128},[28,67235,1529],{"class":34},[28,67237,51811],{"class":51777},[28,67239,51784],{"class":34},[28,67241,67242,67244,67246,67248,67250,67252],{"class":30,"line":393},[28,67243,52621],{"class":34},[28,67245,51821],{"class":51777},[28,67247,51824],{"class":2453},[28,67249,83],{"class":34},[28,67251,51829],{"class":735},[28,67253,51784],{"class":34},[28,67255,67256,67258,67260,67262,67264,67266,67268,67270,67272],{"class":30,"line":409},[28,67257,52621],{"class":34},[28,67259,51821],{"class":51777},[28,67261,15406],{"class":2453},[28,67263,83],{"class":34},[28,67265,51868],{"class":735},[28,67267,51848],{"class":2453},[28,67269,83],{"class":34},[28,67271,51875],{"class":735},[28,67273,51784],{"class":34},[28,67275,67276,67278,67280,67282,67284],{"class":30,"line":1711},[28,67277,52621],{"class":34},[28,67279,51884],{"class":51777},[28,67281,51887],{"class":34},[28,67283,51884],{"class":51777},[28,67285,51784],{"class":34},[28,67287,67288,67290,67292],{"class":30,"line":1802},[28,67289,52262],{"class":34},[28,67291,51811],{"class":51777},[28,67293,51784],{"class":34},[28,67295,67296],{"class":30,"line":1808},[28,67297,2890],{"emptyLinePlaceholder":562},[28,67299,67300,67302,67304],{"class":30,"line":1820},[28,67301,1529],{"class":34},[28,67303,52277],{"class":51777},[28,67305,51784],{"class":34},[28,67307,67308,67310,67312],{"class":30,"line":2102},[28,67309,52621],{"class":34},[28,67311,1626],{"class":51777},[28,67313,51784],{"class":34},[28,67315,67316,67318,67320,67322,67324],{"class":30,"line":2107},[28,67317,51818],{"class":34},[28,67319,591],{"class":51777},[28,67321,54443],{"class":34},[28,67323,591],{"class":51777},[28,67325,51784],{"class":34},[28,67327,67328,67330,67332,67334,67336],{"class":30,"line":2113},[28,67329,51818],{"class":34},[28,67331,591],{"class":51777},[28,67333,54462],{"class":34},[28,67335,591],{"class":51777},[28,67337,51784],{"class":34},[28,67339,67340,67342,67344,67346,67348],{"class":30,"line":2118},[28,67341,51818],{"class":34},[28,67343,591],{"class":51777},[28,67345,54481],{"class":34},[28,67347,591],{"class":51777},[28,67349,51784],{"class":34},[28,67351,67352,67354,67356,67358,67360],{"class":30,"line":2132},[28,67353,51818],{"class":34},[28,67355,591],{"class":51777},[28,67357,54500],{"class":34},[28,67359,591],{"class":51777},[28,67361,51784],{"class":34},[28,67363,67364,67366,67368,67370,67372],{"class":30,"line":2137},[28,67365,51818],{"class":34},[28,67367,591],{"class":51777},[28,67369,54519],{"class":34},[28,67371,591],{"class":51777},[28,67373,51784],{"class":34},[28,67375,67376,67378,67380,67383,67385],{"class":30,"line":2143},[28,67377,51818],{"class":34},[28,67379,14],{"class":51777},[28,67381,67382],{"class":34},">我不需要变色\u003C\u002F",[28,67384,14],{"class":51777},[28,67386,51784],{"class":34},[28,67388,67389,67391,67393],{"class":30,"line":2164},[28,67390,52894],{"class":34},[28,67392,1626],{"class":51777},[28,67394,51784],{"class":34},[28,67396,67397,67399,67401],{"class":30,"line":2169},[28,67398,52621],{"class":34},[28,67400,52290],{"class":51777},[28,67402,51784],{"class":34},[28,67404,67405],{"class":30,"line":2183},[28,67406,67407],{"class":73},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[28,67409,67410,67412,67414,67416,67418,67420,67422,67425],{"class":30,"line":2188},[28,67411,11707],{"class":42},[28,67413,61769],{"class":38},[28,67415,14050],{"class":42},[28,67417,54873],{"class":34},[28,67419,54876],{"class":2453},[28,67421,367],{"class":34},[28,67423,67424],{"class":735},"'ul'",[28,67426,228],{"class":34},[28,67428,67429,67432,67434,67436,67438,67440,67442,67444,67446],{"class":30,"line":2217},[28,67430,67431],{"class":34},"    ul.",[28,67433,58290],{"class":2453},[28,67435,367],{"class":34},[28,67437,58295],{"class":735},[28,67439,12921],{"class":34},[28,67441,54926],{"class":42},[28,67443,2148],{"class":34},[28,67445,706],{"class":5704},[28,67447,12928],{"class":34},[28,67449,67450],{"class":30,"line":2222},[28,67451,67452],{"class":73},"      \u002F\u002F alert(1)\n",[28,67454,67455],{"class":30,"line":2239},[28,67456,67457],{"class":73},"      \u002F\u002F e.target就是我们点击的对象\n",[28,67459,67460],{"class":30,"line":2244},[28,67461,67462],{"class":73},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[28,67464,67465],{"class":30,"line":2249},[28,67466,67467],{"class":73},"      \u002F\u002F e.target.style.color = 'red'\n",[28,67469,67470,67472,67474],{"class":30,"line":2254},[28,67471,58721],{"class":34},[28,67473,58724],{"class":2453},[28,67475,67476],{"class":34},"(e)\n",[28,67478,67479],{"class":30,"line":2268},[28,67480,2890],{"emptyLinePlaceholder":562},[28,67482,67483,67485,67488],{"class":30,"line":2273},[28,67484,58721],{"class":34},[28,67486,67487],{"class":2453},"dir",[28,67489,67490],{"class":34},"(e.target)\n",[28,67492,67493],{"class":30,"line":3067},[28,67494,2890],{"emptyLinePlaceholder":562},[28,67496,67497],{"class":30,"line":3081},[28,67498,67499],{"class":73},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[28,67501,67502],{"class":30,"line":3089},[28,67503,67504],{"class":73},"      \u002F\u002F 通过tagName来进行判断\n",[28,67506,67507,67509,67512,67514,67517],{"class":30,"line":3094},[28,67508,54957],{"class":42},[28,67510,67511],{"class":34}," (e.target.tagName ",[28,67513,54963],{"class":42},[28,67515,67516],{"class":735}," 'LI'",[28,67518,12928],{"class":34},[28,67520,67521,67524,67526],{"class":30,"line":3100},[28,67522,67523],{"class":34},"        e.target.style.color ",[28,67525,83],{"class":42},[28,67527,67528],{"class":735}," 'red'\n",[28,67530,67531],{"class":30,"line":3106},[28,67532,52875],{"class":34},[28,67534,67535],{"class":30,"line":3111},[28,67536,33938],{"class":34},[28,67538,67539,67541,67543],{"class":30,"line":8436},[28,67540,52894],{"class":34},[28,67542,52290],{"class":51777},[28,67544,51784],{"class":34},[28,67546,67547,67549,67551],{"class":30,"line":8460},[28,67548,52262],{"class":34},[28,67550,52277],{"class":51777},[28,67552,51784],{"class":34},[28,67554,67555],{"class":30,"line":8465},[28,67556,2890],{"emptyLinePlaceholder":562},[28,67558,67559,67561,67563],{"class":30,"line":8471},[28,67560,52262],{"class":34},[28,67562,51112],{"class":51777},[28,67564,51784],{"class":34},[14,67566,67567],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67569,67570],{},"if(e.target.ragName==='P') {}",[14,67572,67573],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67575,67576],{},"通过事件委托的方式实现tab栏切换改造：",[14,67578,67579],{},"一定要记住自定义属性！！！！！！",[14,67581,67582],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67584,67585],{},"id是自定义的属性名",[14,67587,67588],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[18,67590,67592],{"className":51110,"code":67591,"language":51112,"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,67593,67594,67604,67618,67622,67630,67644,67664,67684,67696,67704,67710,67720,67730,67734,67738,67744,67756,67768,67780,67796,67800,67804,67810,67822,67834,67846,67856,67866,67870,67874,67882,67894,67904,67916,67920,67924,67932,67942,67952,67962,67966,67970,67980,67994,68006,68010,68014,68026,68036,68052,68062,68066,68070,68084,68094,68104,68108,68112,68118,68132,68136,68140,68148,68158,68162,68166,68175,68185,68189,68197,68205,68209,68217,68231,68245,68257,68265,68304,68336,68368,68400,68432,68440,68448,68462,68496,68530,68564,68598,68632,68640,68648,68656,68661,68666,68685,68690,68710,68718,68723,68736,68757,68770,68774,68779,68784,68797,68817,68845,68849,68853,68857,68865,68873,68877],{"__ignoreMap":23},[28,67595,67596,67598,67600,67602],{"class":30,"line":31},[28,67597,51774],{"class":34},[28,67599,51778],{"class":51777},[28,67601,51781],{"class":2453},[28,67603,51784],{"class":34},[28,67605,67606,67608,67610,67612,67614,67616],{"class":30,"line":77},[28,67607,1529],{"class":34},[28,67609,51112],{"class":51777},[28,67611,51793],{"class":2453},[28,67613,83],{"class":34},[28,67615,51798],{"class":735},[28,67617,51784],{"class":34},[28,67619,67620],{"class":30,"line":114},[28,67621,2890],{"emptyLinePlaceholder":562},[28,67623,67624,67626,67628],{"class":30,"line":128},[28,67625,1529],{"class":34},[28,67627,51811],{"class":51777},[28,67629,51784],{"class":34},[28,67631,67632,67634,67636,67638,67640,67642],{"class":30,"line":393},[28,67633,52621],{"class":34},[28,67635,51821],{"class":51777},[28,67637,51824],{"class":2453},[28,67639,83],{"class":34},[28,67641,51829],{"class":735},[28,67643,59604],{"class":34},[28,67645,67646,67648,67650,67652,67654,67656,67658,67660,67662],{"class":30,"line":409},[28,67647,52621],{"class":34},[28,67649,51821],{"class":51777},[28,67651,51840],{"class":2453},[28,67653,83],{"class":34},[28,67655,51845],{"class":735},[28,67657,51848],{"class":2453},[28,67659,83],{"class":34},[28,67661,51853],{"class":735},[28,67663,59604],{"class":34},[28,67665,67666,67668,67670,67672,67674,67676,67678,67680,67682],{"class":30,"line":1711},[28,67667,52621],{"class":34},[28,67669,51821],{"class":51777},[28,67671,15406],{"class":2453},[28,67673,83],{"class":34},[28,67675,51868],{"class":735},[28,67677,51848],{"class":2453},[28,67679,83],{"class":34},[28,67681,51875],{"class":735},[28,67683,59604],{"class":34},[28,67685,67686,67688,67690,67692,67694],{"class":30,"line":1802},[28,67687,52621],{"class":34},[28,67689,51884],{"class":51777},[28,67691,64102],{"class":34},[28,67693,51884],{"class":51777},[28,67695,51784],{"class":34},[28,67697,67698,67700,67702],{"class":30,"line":1808},[28,67699,52621],{"class":34},[28,67701,547],{"class":51777},[28,67703,51784],{"class":34},[28,67705,67706,67708],{"class":30,"line":1820},[28,67707,6891],{"class":51777},[28,67709,16058],{"class":34},[28,67711,67712,67714,67716,67718],{"class":30,"line":2102},[28,67713,55183],{"class":38},[28,67715,51914],{"class":34},[28,67717,822],{"class":38},[28,67719,1781],{"class":34},[28,67721,67722,67724,67726,67728],{"class":30,"line":2107},[28,67723,55172],{"class":38},[28,67725,51914],{"class":34},[28,67727,822],{"class":38},[28,67729,1781],{"class":34},[28,67731,67732],{"class":30,"line":2113},[28,67733,2677],{"class":34},[28,67735,67736],{"class":30,"line":2118},[28,67737,2890],{"emptyLinePlaceholder":562},[28,67739,67740,67742],{"class":30,"line":2132},[28,67741,64153],{"class":2453},[28,67743,16058],{"class":34},[28,67745,67746,67748,67750,67752,67754],{"class":30,"line":2137},[28,67747,55248],{"class":38},[28,67749,51914],{"class":34},[28,67751,64164],{"class":38},[28,67753,51969],{"class":42},[28,67755,1781],{"class":34},[28,67757,67758,67760,67762,67764,67766],{"class":30,"line":2143},[28,67759,55262],{"class":38},[28,67761,51914],{"class":34},[28,67763,64177],{"class":38},[28,67765,51969],{"class":42},[28,67767,1781],{"class":34},[28,67769,67770,67772,67774,67776,67778],{"class":30,"line":2164},[28,67771,55183],{"class":38},[28,67773,51914],{"class":34},[28,67775,1320],{"class":38},[28,67777,51969],{"class":42},[28,67779,1781],{"class":34},[28,67781,67782,67784,67786,67788,67790,67792,67794],{"class":30,"line":2169},[28,67783,62454],{"class":38},[28,67785,51914],{"class":34},[28,67787,39],{"class":38},[28,67789,51969],{"class":42},[28,67791,51998],{"class":38},[28,67793,62721],{"class":38},[28,67795,1781],{"class":34},[28,67797,67798],{"class":30,"line":2183},[28,67799,2677],{"class":34},[28,67801,67802],{"class":30,"line":2188},[28,67803,2890],{"emptyLinePlaceholder":562},[28,67805,67806,67808],{"class":30,"line":2217},[28,67807,64222],{"class":2453},[28,67809,16058],{"class":34},[28,67811,67812,67814,67816,67818,67820],{"class":30,"line":2222},[28,67813,55248],{"class":38},[28,67815,51914],{"class":34},[28,67817,938],{"class":38},[28,67819,954],{"class":42},[28,67821,1781],{"class":34},[28,67823,67824,67826,67828,67830,67832],{"class":30,"line":2239},[28,67825,55262],{"class":38},[28,67827,51914],{"class":34},[28,67829,1526],{"class":38},[28,67831,51969],{"class":42},[28,67833,1781],{"class":34},[28,67835,67836,67838,67840,67842,67844],{"class":30,"line":2244},[28,67837,57836],{"class":38},[28,67839,51914],{"class":34},[28,67841,1526],{"class":38},[28,67843,51969],{"class":42},[28,67845,1781],{"class":34},[28,67847,67848,67850,67852,67854],{"class":30,"line":2249},[28,67849,55486],{"class":38},[28,67851,51914],{"class":34},[28,67853,51954],{"class":38},[28,67855,1781],{"class":34},[28,67857,67858,67860,67862,67864],{"class":30,"line":2254},[28,67859,55497],{"class":38},[28,67861,51914],{"class":34},[28,67863,52145],{"class":38},[28,67865,1781],{"class":34},[28,67867,67868],{"class":30,"line":2268},[28,67869,2677],{"class":34},[28,67871,67872],{"class":30,"line":2273},[28,67873,2890],{"emptyLinePlaceholder":562},[28,67875,67876,67878,67880],{"class":30,"line":3067},[28,67877,64222],{"class":2453},[28,67879,64295],{"class":51777},[28,67881,16058],{"class":34},[28,67883,67884,67886,67888,67890,67892],{"class":30,"line":3081},[28,67885,55399],{"class":38},[28,67887,51914],{"class":34},[28,67889,1420],{"class":38},[28,67891,51969],{"class":42},[28,67893,1781],{"class":34},[28,67895,67896,67898,67900,67902],{"class":30,"line":3089},[28,67897,62811],{"class":38},[28,67899,51914],{"class":34},[28,67901,64318],{"class":38},[28,67903,1781],{"class":34},[28,67905,67906,67908,67910,67912,67914],{"class":30,"line":3094},[28,67907,62477],{"class":38},[28,67909,51914],{"class":34},[28,67911,1320],{"class":38},[28,67913,51969],{"class":42},[28,67915,1781],{"class":34},[28,67917,67918],{"class":30,"line":3100},[28,67919,2677],{"class":34},[28,67921,67922],{"class":30,"line":3106},[28,67923,2890],{"emptyLinePlaceholder":562},[28,67925,67926,67928,67930],{"class":30,"line":3111},[28,67927,64222],{"class":2453},[28,67929,61769],{"class":51777},[28,67931,16058],{"class":34},[28,67933,67934,67936,67938,67940],{"class":30,"line":8436},[28,67935,55209],{"class":38},[28,67937,51914],{"class":34},[28,67939,55214],{"class":38},[28,67941,1781],{"class":34},[28,67943,67944,67946,67948,67950],{"class":30,"line":8460},[28,67945,55486],{"class":38},[28,67947,51914],{"class":34},[28,67949,51954],{"class":38},[28,67951,1781],{"class":34},[28,67953,67954,67956,67958,67960],{"class":30,"line":8465},[28,67955,55497],{"class":38},[28,67957,51914],{"class":34},[28,67959,52057],{"class":38},[28,67961,1781],{"class":34},[28,67963,67964],{"class":30,"line":8471},[28,67965,2677],{"class":34},[28,67967,67968],{"class":30,"line":8498},[28,67969,2890],{"emptyLinePlaceholder":562},[28,67971,67972,67974,67976,67978],{"class":30,"line":8503},[28,67973,64222],{"class":2453},[28,67975,61769],{"class":51777},[28,67977,55552],{"class":51777},[28,67979,16058],{"class":34},[28,67981,67982,67984,67986,67988,67990,67992],{"class":30,"line":8509},[28,67983,55183],{"class":38},[28,67985,51914],{"class":34},[28,67987,822],{"class":38},[28,67989,9438],{"class":38},[28,67991,51969],{"class":42},[28,67993,1781],{"class":34},[28,67995,67996,67998,68000,68002,68004],{"class":30,"line":8521},[28,67997,55399],{"class":38},[28,67999,51914],{"class":34},[28,68001,1170],{"class":38},[28,68003,51969],{"class":42},[28,68005,1781],{"class":34},[28,68007,68008],{"class":30,"line":8533},[28,68009,2677],{"class":34},[28,68011,68012],{"class":30,"line":8545},[28,68013,2890],{"emptyLinePlaceholder":562},[28,68015,68016,68018,68020,68022,68024],{"class":30,"line":10202},[28,68017,64222],{"class":2453},[28,68019,61769],{"class":51777},[28,68021,55552],{"class":51777},[28,68023,1889],{"class":51777},[28,68025,16058],{"class":34},[28,68027,68028,68030,68032,68034],{"class":30,"line":10227},[28,68029,64447],{"class":38},[28,68031,51914],{"class":34},[28,68033,55214],{"class":38},[28,68035,1781],{"class":34},[28,68037,68038,68040,68042,68044,68046,68048,68050],{"class":30,"line":10250},[28,68039,62709],{"class":38},[28,68041,51914],{"class":34},[28,68043,93],{"class":38},[28,68045,51969],{"class":42},[28,68047,51998],{"class":38},[28,68049,64468],{"class":38},[28,68051,1781],{"class":34},[28,68053,68054,68056,68058,68060],{"class":30,"line":10274},[28,68055,57893],{"class":38},[28,68057,51914],{"class":34},[28,68059,62846],{"class":38},[28,68061,1781],{"class":34},[28,68063,68064],{"class":30,"line":10279},[28,68065,2677],{"class":34},[28,68067,68068],{"class":30,"line":10284},[28,68069,2890],{"emptyLinePlaceholder":562},[28,68071,68072,68074,68076,68078,68080,68082],{"class":30,"line":10289},[28,68073,64222],{"class":2453},[28,68075,61769],{"class":51777},[28,68077,55552],{"class":51777},[28,68079,1889],{"class":51777},[28,68081,64501],{"class":2453},[28,68083,16058],{"class":34},[28,68085,68086,68088,68090,68092],{"class":30,"line":10298},[28,68087,62268],{"class":38},[28,68089,51914],{"class":34},[28,68091,64512],{"class":38},[28,68093,1781],{"class":34},[28,68095,68096,68098,68100,68102],{"class":30,"line":10303},[28,68097,57893],{"class":38},[28,68099,51914],{"class":34},[28,68101,64512],{"class":38},[28,68103,1781],{"class":34},[28,68105,68106],{"class":30,"line":10309},[28,68107,2677],{"class":34},[28,68109,68110],{"class":30,"line":10330},[28,68111,2890],{"emptyLinePlaceholder":562},[28,68113,68114,68116],{"class":30,"line":10336},[28,68115,64537],{"class":2453},[28,68117,16058],{"class":34},[28,68119,68120,68122,68124,68126,68128,68130],{"class":30,"line":10350},[28,68121,55172],{"class":38},[28,68123,51914],{"class":34},[28,68125,822],{"class":38},[28,68127,64550],{"class":38},[28,68129,51969],{"class":42},[28,68131,1781],{"class":34},[28,68133,68134],{"class":30,"line":10356},[28,68135,2677],{"class":34},[28,68137,68138],{"class":30,"line":10383},[28,68139,2890],{"emptyLinePlaceholder":562},[28,68141,68142,68144,68146],{"class":30,"line":10392},[28,68143,64537],{"class":2453},[28,68145,62651],{"class":2453},[28,68147,16058],{"class":34},[28,68149,68150,68152,68154,68156],{"class":30,"line":10398},[28,68151,55486],{"class":38},[28,68153,51914],{"class":34},[28,68155,55214],{"class":38},[28,68157,1781],{"class":34},[28,68159,68160],{"class":30,"line":10406},[28,68161,2677],{"class":34},[28,68163,68164],{"class":30,"line":10411},[28,68165,2890],{"emptyLinePlaceholder":562},[28,68167,68168,68170,68173],{"class":30,"line":17090},[28,68169,64537],{"class":2453},[28,68171,68172],{"class":2453}," .active",[28,68174,16058],{"class":34},[28,68176,68177,68179,68181,68183],{"class":30,"line":17096},[28,68178,55486],{"class":38},[28,68180,51914],{"class":34},[28,68182,61346],{"class":38},[28,68184,1781],{"class":34},[28,68186,68187],{"class":30,"line":17119},[28,68188,2677],{"class":34},[28,68190,68191,68193,68195],{"class":30,"line":17125},[28,68192,52894],{"class":34},[28,68194,547],{"class":51777},[28,68196,51784],{"class":34},[28,68198,68199,68201,68203],{"class":30,"line":17148},[28,68200,52262],{"class":34},[28,68202,51811],{"class":51777},[28,68204,51784],{"class":34},[28,68206,68207],{"class":30,"line":17162},[28,68208,2890],{"emptyLinePlaceholder":562},[28,68210,68211,68213,68215],{"class":30,"line":17182},[28,68212,1529],{"class":34},[28,68214,52277],{"class":51777},[28,68216,51784],{"class":34},[28,68218,68219,68221,68223,68225,68227,68229],{"class":30,"line":17188},[28,68220,52621],{"class":34},[28,68222,52088],{"class":51777},[28,68224,53963],{"class":2453},[28,68226,83],{"class":34},[28,68228,64652],{"class":735},[28,68230,51784],{"class":34},[28,68232,68233,68235,68237,68239,68241,68243],{"class":30,"line":17199},[28,68234,51818],{"class":34},[28,68236,52088],{"class":51777},[28,68238,53963],{"class":2453},[28,68240,83],{"class":34},[28,68242,64667],{"class":735},[28,68244,51784],{"class":34},[28,68246,68247,68249,68251,68253,68255],{"class":30,"line":17222},[28,68248,55711],{"class":34},[28,68250,605],{"class":51777},[28,68252,64678],{"class":34},[28,68254,605],{"class":51777},[28,68256,51784],{"class":34},[28,68258,68259,68261,68263],{"class":30,"line":17244},[28,68260,55711],{"class":34},[28,68262,1626],{"class":51777},[28,68264,51784],{"class":34},[28,68266,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68294,68296,68298,68300,68302],{"class":30,"line":17249},[28,68268,55779],{"class":34},[28,68270,591],{"class":51777},[28,68272,61529],{"class":34},[28,68274,80],{"class":51777},[28,68276,53963],{"class":2453},[28,68278,83],{"class":34},[28,68280,60183],{"class":735},[28,68282,61534],{"class":2453},[28,68284,83],{"class":34},[28,68286,64713],{"class":735},[28,68288,54428],{"class":2453},[28,68290,83],{"class":34},[28,68292,68293],{"class":735},"\"0\"",[28,68295,64716],{"class":34},[28,68297,80],{"class":51777},[28,68299,55791],{"class":34},[28,68301,591],{"class":51777},[28,68303,51784],{"class":34},[28,68305,68306,68308,68310,68312,68314,68316,68318,68320,68322,68324,68326,68328,68330,68332,68334],{"class":30,"line":17255},[28,68307,55779],{"class":34},[28,68309,591],{"class":51777},[28,68311,61529],{"class":34},[28,68313,80],{"class":51777},[28,68315,61534],{"class":2453},[28,68317,83],{"class":34},[28,68319,64713],{"class":735},[28,68321,54428],{"class":2453},[28,68323,83],{"class":34},[28,68325,4166],{"class":735},[28,68327,64743],{"class":34},[28,68329,80],{"class":51777},[28,68331,55791],{"class":34},[28,68333,591],{"class":51777},[28,68335,51784],{"class":34},[28,68337,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356,68358,68360,68362,68364,68366],{"class":30,"line":17269},[28,68339,55779],{"class":34},[28,68341,591],{"class":51777},[28,68343,61529],{"class":34},[28,68345,80],{"class":51777},[28,68347,61534],{"class":2453},[28,68349,83],{"class":34},[28,68351,64713],{"class":735},[28,68353,54428],{"class":2453},[28,68355,83],{"class":34},[28,68357,4189],{"class":735},[28,68359,64770],{"class":34},[28,68361,80],{"class":51777},[28,68363,55791],{"class":34},[28,68365,591],{"class":51777},[28,68367,51784],{"class":34},[28,68369,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388,68390,68392,68394,68396,68398],{"class":30,"line":17282},[28,68371,55779],{"class":34},[28,68373,591],{"class":51777},[28,68375,61529],{"class":34},[28,68377,80],{"class":51777},[28,68379,61534],{"class":2453},[28,68381,83],{"class":34},[28,68383,64713],{"class":735},[28,68385,54428],{"class":2453},[28,68387,83],{"class":34},[28,68389,4202],{"class":735},[28,68391,64797],{"class":34},[28,68393,80],{"class":51777},[28,68395,55791],{"class":34},[28,68397,591],{"class":51777},[28,68399,51784],{"class":34},[28,68401,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422,68424,68426,68428,68430],{"class":30,"line":17287},[28,68403,55779],{"class":34},[28,68405,591],{"class":51777},[28,68407,61529],{"class":34},[28,68409,80],{"class":51777},[28,68411,61534],{"class":2453},[28,68413,83],{"class":34},[28,68415,64713],{"class":735},[28,68417,54428],{"class":2453},[28,68419,83],{"class":34},[28,68421,4215],{"class":735},[28,68423,64824],{"class":34},[28,68425,80],{"class":51777},[28,68427,55791],{"class":34},[28,68429,591],{"class":51777},[28,68431,51784],{"class":34},[28,68433,68434,68436,68438],{"class":30,"line":17301},[28,68435,55884],{"class":34},[28,68437,1626],{"class":51777},[28,68439,51784],{"class":34},[28,68441,68442,68444,68446],{"class":30,"line":17306},[28,68443,52253],{"class":34},[28,68445,52088],{"class":51777},[28,68447,51784],{"class":34},[28,68449,68450,68452,68454,68456,68458,68460],{"class":30,"line":17312},[28,68451,51818],{"class":34},[28,68453,52088],{"class":51777},[28,68455,53963],{"class":2453},[28,68457,83],{"class":34},[28,68459,64861],{"class":735},[28,68461,51784],{"class":34},[28,68463,68464,68466,68468,68470,68472,68474,68476,68478,68480,68482,68484,68486,68488,68490,68492,68494],{"class":30,"line":17317},[28,68465,55711],{"class":34},[28,68467,52088],{"class":51777},[28,68469,53963],{"class":2453},[28,68471,83],{"class":34},[28,68473,64876],{"class":735},[28,68475,61529],{"class":34},[28,68477,420],{"class":51777},[28,68479,55716],{"class":2453},[28,68481,83],{"class":34},[28,68483,64887],{"class":735},[28,68485,55724],{"class":2453},[28,68487,83],{"class":34},[28,68489,8140],{"class":735},[28,68491,64896],{"class":34},[28,68493,52088],{"class":51777},[28,68495,51784],{"class":34},[28,68497,68498,68500,68502,68504,68506,68508,68510,68512,68514,68516,68518,68520,68522,68524,68526,68528],{"class":30,"line":17331},[28,68499,55711],{"class":34},[28,68501,52088],{"class":51777},[28,68503,53963],{"class":2453},[28,68505,83],{"class":34},[28,68507,63100],{"class":735},[28,68509,61529],{"class":34},[28,68511,420],{"class":51777},[28,68513,55716],{"class":2453},[28,68515,83],{"class":34},[28,68517,64923],{"class":735},[28,68519,55724],{"class":2453},[28,68521,83],{"class":34},[28,68523,8140],{"class":735},[28,68525,64896],{"class":34},[28,68527,52088],{"class":51777},[28,68529,51784],{"class":34},[28,68531,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550,68552,68554,68556,68558,68560,68562],{"class":30,"line":17336},[28,68533,55711],{"class":34},[28,68535,52088],{"class":51777},[28,68537,53963],{"class":2453},[28,68539,83],{"class":34},[28,68541,63100],{"class":735},[28,68543,61529],{"class":34},[28,68545,420],{"class":51777},[28,68547,55716],{"class":2453},[28,68549,83],{"class":34},[28,68551,64958],{"class":735},[28,68553,55724],{"class":2453},[28,68555,83],{"class":34},[28,68557,8140],{"class":735},[28,68559,64896],{"class":34},[28,68561,52088],{"class":51777},[28,68563,51784],{"class":34},[28,68565,68566,68568,68570,68572,68574,68576,68578,68580,68582,68584,68586,68588,68590,68592,68594,68596],{"class":30,"line":17341},[28,68567,55711],{"class":34},[28,68569,52088],{"class":51777},[28,68571,53963],{"class":2453},[28,68573,83],{"class":34},[28,68575,63100],{"class":735},[28,68577,61529],{"class":34},[28,68579,420],{"class":51777},[28,68581,55716],{"class":2453},[28,68583,83],{"class":34},[28,68585,64993],{"class":735},[28,68587,55724],{"class":2453},[28,68589,83],{"class":34},[28,68591,8140],{"class":735},[28,68593,64896],{"class":34},[28,68595,52088],{"class":51777},[28,68597,51784],{"class":34},[28,68599,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618,68620,68622,68624,68626,68628,68630],{"class":30,"line":17355},[28,68601,55711],{"class":34},[28,68603,52088],{"class":51777},[28,68605,53963],{"class":2453},[28,68607,83],{"class":34},[28,68609,63100],{"class":735},[28,68611,61529],{"class":34},[28,68613,420],{"class":51777},[28,68615,55716],{"class":2453},[28,68617,83],{"class":34},[28,68619,65028],{"class":735},[28,68621,55724],{"class":2453},[28,68623,83],{"class":34},[28,68625,8140],{"class":735},[28,68627,64896],{"class":34},[28,68629,52088],{"class":51777},[28,68631,51784],{"class":34},[28,68633,68634,68636,68638],{"class":30,"line":17367},[28,68635,52253],{"class":34},[28,68637,52088],{"class":51777},[28,68639,51784],{"class":34},[28,68641,68642,68644,68646],{"class":30,"line":17372},[28,68643,52894],{"class":34},[28,68645,52088],{"class":51777},[28,68647,51784],{"class":34},[28,68649,68650,68652,68654],{"class":30,"line":17385},[28,68651,52621],{"class":34},[28,68653,52290],{"class":51777},[28,68655,51784],{"class":34},[28,68657,68658],{"class":30,"line":17390},[28,68659,68660],{"class":73},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[28,68662,68663],{"class":30,"line":17395},[28,68664,68665],{"class":73},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[28,68667,68668,68670,68672,68674,68676,68678,68680,68683],{"class":30,"line":17400},[28,68669,11707],{"class":42},[28,68671,61769],{"class":38},[28,68673,14050],{"class":42},[28,68675,54873],{"class":34},[28,68677,54876],{"class":2453},[28,68679,367],{"class":34},[28,68681,68682],{"class":735},"'.tab-nav ul'",[28,68684,228],{"class":34},[28,68686,68687],{"class":30,"line":17413},[28,68688,68689],{"class":73},"    \u002F\u002F 2.添加事件\n",[28,68691,68692,68694,68696,68698,68700,68702,68704,68706,68708],{"class":30,"line":17418},[28,68693,67431],{"class":34},[28,68695,58290],{"class":2453},[28,68697,367],{"class":34},[28,68699,58295],{"class":735},[28,68701,12921],{"class":34},[28,68703,54926],{"class":42},[28,68705,2148],{"class":34},[28,68707,706],{"class":5704},[28,68709,12928],{"class":34},[28,68711,68712,68714,68716],{"class":30,"line":33111},[28,68713,58721],{"class":34},[28,68715,67487],{"class":2453},[28,68717,67490],{"class":34},[28,68719,68720],{"class":30,"line":33117},[28,68721,68722],{"class":73},"      \u002F\u002Fe.targer是我们点击的对象\n",[28,68724,68725,68727,68729,68731,68734],{"class":30,"line":33123},[28,68726,54957],{"class":42},[28,68728,67511],{"class":34},[28,68730,54963],{"class":42},[28,68732,68733],{"class":735}," 'A'",[28,68735,12928],{"class":34},[28,68737,68738,68740,68742,68744,68747,68749,68751,68753,68755],{"class":30,"line":33129},[28,68739,52402],{"class":34},[28,68741,54876],{"class":2453},[28,68743,367],{"class":34},[28,68745,68746],{"class":735},"'.active'",[28,68748,57480],{"class":34},[28,68750,57483],{"class":2453},[28,68752,367],{"class":34},[28,68754,65191],{"class":735},[28,68756,228],{"class":34},[28,68758,68759,68762,68764,68766,68768],{"class":30,"line":33135},[28,68760,68761],{"class":34},"        e.target.classList.",[28,68763,5822],{"class":2453},[28,68765,367],{"class":34},[28,68767,65191],{"class":735},[28,68769,228],{"class":34},[28,68771,68772],{"class":30,"line":33146},[28,68773,2890],{"emptyLinePlaceholder":562},[28,68775,68776],{"class":30,"line":33152},[28,68777,68778],{"class":73},"        \u002F\u002F 下面大盒子模块\n",[28,68780,68781],{"class":30,"line":33172},[28,68782,68783],{"class":73},"        \u002F\u002F console.log(e.target.dataset.id)\n",[28,68785,68786,68788,68790,68792,68794],{"class":30,"line":33178},[28,68787,61747],{"class":42},[28,68789,3521],{"class":38},[28,68791,14050],{"class":42},[28,68793,46043],{"class":42},[28,68795,68796],{"class":34},"e.target.dataset.id\n",[28,68798,68799,68801,68803,68805,68807,68809,68811,68813,68815],{"class":30,"line":33189},[28,68800,52402],{"class":34},[28,68802,54876],{"class":2453},[28,68804,367],{"class":34},[28,68806,65239],{"class":735},[28,68808,57480],{"class":34},[28,68810,57483],{"class":2453},[28,68812,367],{"class":34},[28,68814,65191],{"class":735},[28,68816,228],{"class":34},[28,68818,68819,68821,68823,68825,68827,68829,68831,68833,68835,68837,68839,68841,68843],{"class":30,"line":33195},[28,68820,52402],{"class":34},[28,68822,54876],{"class":2453},[28,68824,367],{"class":34},[28,68826,65265],{"class":735},[28,68828,1066],{"class":34},[28,68830,46043],{"class":42},[28,68832,25605],{"class":38},[28,68834,57509],{"class":735},[28,68836,57480],{"class":34},[28,68838,5822],{"class":2453},[28,68840,367],{"class":34},[28,68842,65191],{"class":735},[28,68844,228],{"class":34},[28,68846,68847],{"class":30,"line":33201},[28,68848,2890],{"emptyLinePlaceholder":562},[28,68850,68851],{"class":30,"line":33207},[28,68852,52875],{"class":34},[28,68854,68855],{"class":30,"line":33213},[28,68856,33938],{"class":34},[28,68858,68859,68861,68863],{"class":30,"line":33219},[28,68860,52894],{"class":34},[28,68862,52290],{"class":51777},[28,68864,51784],{"class":34},[28,68866,68867,68869,68871],{"class":30,"line":33225},[28,68868,52262],{"class":34},[28,68870,52277],{"class":51777},[28,68872,51784],{"class":34},[28,68874,68875],{"class":30,"line":33231},[28,68876,2890],{"emptyLinePlaceholder":562},[28,68878,68879,68881,68883],{"class":30,"line":33251},[28,68880,52262],{"class":34},[28,68882,51112],{"class":51777},[28,68884,51784],{"class":34},[605,68886,68888],{"id":68887},"_333-页面加载事件","3.3.3 页面加载事件",[588,68890,68891],{},[591,68892,68893],{},"load",[14,68895,68896],{},[420,68897],{"alt":23,"src":68898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68900,68901],{},"window代表整个窗口，比document还要大",[14,68903,68904],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68906,68907],{},"img.addEventListener('load', function () {",[14,68909,68910],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68912,52941],{},[588,68914,68915],{"start":77},[591,68916,68917],{},"DOMContentLoaded",[14,68919,68920],{},[420,68921],{"alt":23,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68924,68925],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[605,68927,68929],{"id":68928},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68931,68932],{},[420,68933],{"alt":23,"src":68934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68936,68937],{},[420,68938],{"alt":23,"src":68939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68941,68942],{},[420,68943],{"alt":23,"src":68944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68946,68947],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68949,68950],{},"获得的是数字型数据，不带单位",[14,68952,68953],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68955,68956],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68958,68959],{},"它是通过document.documentElement来获取",[14,68961,68962],{},[420,68963],{"alt":23,"src":68964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68966,68967],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[605,68969,68971],{"id":68970},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68973,68974],{},[420,68975],{"alt":23,"src":68976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68978,68979],{},[420,68980],{"alt":23,"src":68981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[605,68983,68985],{"id":68984},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68987,68988],{},[420,68989],{"alt":23,"src":68990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68992,68993],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68995,68996],{},[420,68997],{"alt":23,"src":68998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,69000,69001],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,69003,69004],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,69006,69007],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,69009,69010],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,69012,69013],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,69015,69016],{},[420,69017],{"alt":23,"src":69018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69020,69021],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69023,69024],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69026,69027],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69029,69030],{},"e.pageX-box.getBoundingClientRect()",[605,69032,69034],{"id":69033},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69036,69037],{},[420,69038],{"alt":23,"src":69039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69041,69042],{},"这个是相对于视口来说的，它是个方法，不是属性值",[605,69044,69046],{"id":69045},"_338-总结","3.3.8 总结",[14,69048,69049],{},[420,69050],{"alt":23,"src":69051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69053,69054],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69056,69057],{},"修改盒子的宽高只能通过width和height来实现",[605,69059,69061],{"id":69060},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[18,69063,69065],{"className":51110,"code":69064,"language":51112,"meta":23,"style":23},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[25,69066,69067,69072,69077,69082,69087],{"__ignoreMap":23},[28,69068,69069],{"class":30,"line":31},[28,69070,69071],{"class":34},"\u002F* 页面滑动 *\u002F\n",[28,69073,69074],{"class":30,"line":77},[28,69075,69076],{"class":34},"html {\n",[28,69078,69079],{"class":30,"line":114},[28,69080,69081],{"class":34},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[28,69083,69084],{"class":30,"line":128},[28,69085,69086],{"class":34},"  scroll-behavior: smooth;\n",[28,69088,69089],{"class":30,"line":393},[28,69090,2055],{"class":34},[14,69092,69093],{},"默认是auto",[605,69095,69097],{"id":69096},"_3310-日期对象","3.3.10 日期对象",[22484,69099,69101],{"id":69100},"_33101-实例化","3.3.10.1 实例化",[14,69103,69104],{},[420,69105],{"alt":23,"src":69106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22484,69108,69110],{"id":69109},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69112,69113],{},[420,69114],{"alt":23,"src":69115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69117,69118],{},"月份+1",[14,69120,69121],{},"老外认为第一天为0，星期天",[14,69123,69124],{},"方法使用的时候必须要跟括号",[14,69126,69127],{},"快速获得日期",[14,69129,69130],{},"\u002F\u002F 得到年月日",[14,69132,69133],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69135,69136],{},"\u002F\u002F 得到当地日期",[14,69138,69139],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69141,69142],{},"\u002F\u002F 得到当地时间",[14,69144,69145],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69147,69148],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69150,69151],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52290,69153,69154],{},"\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,69156,69157],{},"学会去封装函数！",[22484,69159,69161],{"id":69160},"_33103-时间戳","3.3.10.3 时间戳",[14,69163,69164],{},[420,69165],{"alt":23,"src":69166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69168,69169],{},[420,69170],{"alt":23,"src":69171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69173,69174],{},"三种方法记住一个就可以",[605,69176,69178],{"id":69177},"_3311-节点操作","3.3.11 节点操作",[22484,69180,69182],{"id":69181},"_33111-dom节点","3.3.11.1 DOM节点",[14,69184,69185],{},[420,69186],{"alt":23,"src":69187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69189,69190],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22484,69192,69194],{"id":69193},"_33112-查找节点","3.3.11.2 查找节点",[14,69196,69197],{},"前边的document.querySelector()是获取的元素",[14,69199,69200],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69202,69203],{},[420,69204],{"alt":23,"src":69205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[588,69207,69208],{},[591,69209,69210],{},"父节点",[14,69212,69213],{},[420,69214],{"alt":23,"src":69215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[588,69217,69218],{"start":77},[591,69219,69220],{},"子节点",[14,69222,69223],{},[420,69224],{"alt":23,"src":69225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69227,69228],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69230,69231],{},"children获得的是伪数组，是亲儿子",[588,69233,69234],{"start":114},[591,69235,69236],{},"兄弟节点",[14,69238,69239],{},[420,69240],{"alt":23,"src":69241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22484,69243,69245],{"id":69244},"_33113-增加节点","3.3.11.3 增加节点",[14,69247,69248],{},[420,69249],{"alt":23,"src":69250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69252,69253],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69255,69256],{},[420,69257],{"alt":23,"src":69258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69260,69261],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69263,69264],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69266,69267],{},"例：",[52290,69269,69270],{},"\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,69272,69273],{},[420,69274],{"alt":23,"src":69275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69277,69278],{},"false只克隆标签，里边的内容不会克隆过来",[18,69280,69282],{"className":51110,"code":69281,"language":51112,"meta":23,"style":23},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[25,69283,69284],{"__ignoreMap":23},[28,69285,69286],{"class":30,"line":31},[28,69287,69281],{"class":34},[22484,69289,69291],{"id":69290},"_33114-删除节点","3.3.11.4 删除节点",[14,69293,69294],{},[420,69295],{"alt":23,"src":69296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69298,69299],{},"父亲删儿子",[14,69301,69302],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[605,69304,69306],{"id":69305},"_3312-m端事件","3.3.12 M端事件",[14,69308,69309],{},"M端就是移动端",[14,69311,69312],{},[420,69313],{"alt":23,"src":69314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[605,69316,69318],{"id":69317},"_3313-插件","3.3.13 插件",[14,69320,69321],{},"要熟悉官网！！！",[14,69323,69324],{},[80,69325,69326],{"href":69326,"rel":69327},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24351],[14,69329,69330],{},[80,69331,69332],{"href":69332,"rel":69333},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24351],[605,69335,69337],{"id":69336},"_3314-学生信息表","3.3.14 学生信息表",[588,69339,69340,69343,69346,69349,69352,69355,69358,69361],{},[591,69341,69342],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[591,69344,69345],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[591,69347,69348],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[591,69350,69351],{},"用好表单元素自带的属性，value,name等",[591,69353,69354],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[591,69356,69357],{},"不要忘记事件对象",[591,69359,69360],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[591,69362,69363],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69365,69366],{},"结构：",[18,69368,69370],{"className":51110,"code":69369,"language":51112,"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,69371,69372,69382,69396,69400,69408,69422,69442,69463,69476,69500,69508,69512,69520,69533,69554,69582,69610,69615,69637,69657,69676,69684,69712,69734,69754,69774,69794,69814,69834,69842,69862,69870,69874,69887,69895,69903,69911,69924,69937,69950,69963,69976,69989,70002,70010,70018,70026,70031,70036,70041,70046,70051,70056,70061,70066,70071,70076,70081,70086,70091,70099,70107,70115,70119,70139,70158,70178,70198,70218,70238,70242,70247,70267,70272,70282,70287,70292,70312,70334,70339,70349,70353,70357,70362,70367,70396,70410,70425,70429,70433,70437,70442,70453,70466,70471,70476,70481,70486,70491,70495,70500,70505,70514,70519,70524,70536,70541,70548,70552,70557,70567,70572,70582,70587,70615,70636,70646,70666,70684,70701,70718,70735,70752,70756,70766,70771,70776,70781,70792,70796,70800,70804,70809,70814,70835,70847,70852,70857,70862,70876,70881,70888,70892,70896,70904,70908,70916,70920],{"__ignoreMap":23},[28,69373,69374,69376,69378,69380],{"class":30,"line":31},[28,69375,51774],{"class":34},[28,69377,51778],{"class":51777},[28,69379,51781],{"class":2453},[28,69381,51784],{"class":34},[28,69383,69384,69386,69388,69390,69392,69394],{"class":30,"line":77},[28,69385,1529],{"class":34},[28,69387,51112],{"class":51777},[28,69389,51793],{"class":2453},[28,69391,83],{"class":34},[28,69393,51798],{"class":735},[28,69395,51784],{"class":34},[28,69397,69398],{"class":30,"line":114},[28,69399,2890],{"emptyLinePlaceholder":562},[28,69401,69402,69404,69406],{"class":30,"line":128},[28,69403,1529],{"class":34},[28,69405,51811],{"class":51777},[28,69407,51784],{"class":34},[28,69409,69410,69412,69414,69416,69418,69420],{"class":30,"line":393},[28,69411,52621],{"class":34},[28,69413,51821],{"class":51777},[28,69415,51824],{"class":2453},[28,69417,83],{"class":34},[28,69419,51829],{"class":735},[28,69421,59604],{"class":34},[28,69423,69424,69426,69428,69430,69432,69434,69436,69438,69440],{"class":30,"line":409},[28,69425,52621],{"class":34},[28,69427,51821],{"class":51777},[28,69429,15406],{"class":2453},[28,69431,83],{"class":34},[28,69433,51868],{"class":735},[28,69435,51848],{"class":2453},[28,69437,83],{"class":34},[28,69439,51875],{"class":735},[28,69441,59604],{"class":34},[28,69443,69444,69446,69448,69450,69452,69454,69456,69458,69461],{"class":30,"line":1711},[28,69445,52621],{"class":34},[28,69447,51821],{"class":51777},[28,69449,51840],{"class":2453},[28,69451,83],{"class":34},[28,69453,51845],{"class":735},[28,69455,51848],{"class":2453},[28,69457,83],{"class":34},[28,69459,69460],{"class":735},"\"ie=edge\"",[28,69462,59604],{"class":34},[28,69464,69465,69467,69469,69472,69474],{"class":30,"line":1802},[28,69466,52621],{"class":34},[28,69468,51884],{"class":51777},[28,69470,69471],{"class":34},">学生信息管理\u003C\u002F",[28,69473,51884],{"class":51777},[28,69475,51784],{"class":34},[28,69477,69478,69480,69483,69486,69488,69491,69493,69495,69498],{"class":30,"line":1808},[28,69479,52621],{"class":34},[28,69481,69482],{"class":51777},"link",[28,69484,69485],{"class":2453}," rel",[28,69487,83],{"class":34},[28,69489,69490],{"class":735},"\"stylesheet\"",[28,69492,61534],{"class":2453},[28,69494,83],{"class":34},[28,69496,69497],{"class":735},"\"css\u002Findex.css\"",[28,69499,59604],{"class":34},[28,69501,69502,69504,69506],{"class":30,"line":1820},[28,69503,52262],{"class":34},[28,69505,51811],{"class":51777},[28,69507,51784],{"class":34},[28,69509,69510],{"class":30,"line":2102},[28,69511,2890],{"emptyLinePlaceholder":562},[28,69513,69514,69516,69518],{"class":30,"line":2107},[28,69515,1529],{"class":34},[28,69517,52277],{"class":51777},[28,69519,51784],{"class":34},[28,69521,69522,69524,69526,69529,69531],{"class":30,"line":2113},[28,69523,52621],{"class":34},[28,69525,10],{"class":51777},[28,69527,69528],{"class":34},">新增学员\u003C\u002F",[28,69530,10],{"class":51777},[28,69532,51784],{"class":34},[28,69534,69535,69537,69539,69541,69543,69545,69548,69550,69552],{"class":30,"line":2118},[28,69536,52621],{"class":34},[28,69538,67102],{"class":51777},[28,69540,53963],{"class":2453},[28,69542,83],{"class":34},[28,69544,63141],{"class":735},[28,69546,69547],{"class":2453}," autocomplete",[28,69549,83],{"class":34},[28,69551,32255],{"class":735},[28,69553,51784],{"class":34},[28,69555,69556,69559,69561,69563,69565,69567,69569,69571,69574,69576,69578,69580],{"class":30,"line":2132},[28,69557,69558],{"class":34},"    姓名：\u003C",[28,69560,54298],{"class":51777},[28,69562,54301],{"class":2453},[28,69564,83],{"class":34},[28,69566,63176],{"class":735},[28,69568,53963],{"class":2453},[28,69570,83],{"class":34},[28,69572,69573],{"class":735},"\"uname\"",[28,69575,15406],{"class":2453},[28,69577,83],{"class":34},[28,69579,69573],{"class":735},[28,69581,59604],{"class":34},[28,69583,69584,69587,69589,69591,69593,69595,69597,69599,69602,69604,69606,69608],{"class":30,"line":2137},[28,69585,69586],{"class":34},"    年龄：\u003C",[28,69588,54298],{"class":51777},[28,69590,54301],{"class":2453},[28,69592,83],{"class":34},[28,69594,63176],{"class":735},[28,69596,53963],{"class":2453},[28,69598,83],{"class":34},[28,69600,69601],{"class":735},"\"age\"",[28,69603,15406],{"class":2453},[28,69605,83],{"class":34},[28,69607,69601],{"class":735},[28,69609,59604],{"class":34},[28,69611,69612],{"class":30,"line":2143},[28,69613,69614],{"class":34},"    性别:\n",[28,69616,69617,69619,69622,69624,69626,69629,69631,69633,69635],{"class":30,"line":2164},[28,69618,51818],{"class":34},[28,69620,69621],{"class":51777},"select",[28,69623,15406],{"class":2453},[28,69625,83],{"class":34},[28,69627,69628],{"class":735},"\"gender\"",[28,69630,53963],{"class":2453},[28,69632,83],{"class":34},[28,69634,69628],{"class":735},[28,69636,51784],{"class":34},[28,69638,69639,69641,69644,69646,69648,69650,69653,69655],{"class":30,"line":2169},[28,69640,55711],{"class":34},[28,69642,69643],{"class":51777},"option",[28,69645,67128],{"class":2453},[28,69647,83],{"class":34},[28,69649,10447],{"class":735},[28,69651,69652],{"class":34},">男\u003C\u002F",[28,69654,69643],{"class":51777},[28,69656,51784],{"class":34},[28,69658,69659,69661,69663,69665,69667,69669,69672,69674],{"class":30,"line":2183},[28,69660,55711],{"class":34},[28,69662,69643],{"class":51777},[28,69664,67128],{"class":2453},[28,69666,83],{"class":34},[28,69668,10516],{"class":735},[28,69670,69671],{"class":34},">女\u003C\u002F",[28,69673,69643],{"class":51777},[28,69675,51784],{"class":34},[28,69677,69678,69680,69682],{"class":30,"line":2188},[28,69679,52253],{"class":34},[28,69681,69621],{"class":51777},[28,69683,51784],{"class":34},[28,69685,69686,69689,69691,69693,69695,69697,69699,69701,69704,69706,69708,69710],{"class":30,"line":2217},[28,69687,69688],{"class":34},"    薪资：\u003C",[28,69690,54298],{"class":51777},[28,69692,54301],{"class":2453},[28,69694,83],{"class":34},[28,69696,63176],{"class":735},[28,69698,53963],{"class":2453},[28,69700,83],{"class":34},[28,69702,69703],{"class":735},"\"salary\"",[28,69705,15406],{"class":2453},[28,69707,83],{"class":34},[28,69709,69703],{"class":735},[28,69711,59604],{"class":34},[28,69713,69714,69717,69719,69721,69723,69726,69728,69730,69732],{"class":30,"line":2222},[28,69715,69716],{"class":34},"    就业城市：\u003C",[28,69718,69621],{"class":51777},[28,69720,15406],{"class":2453},[28,69722,83],{"class":34},[28,69724,69725],{"class":735},"\"city\"",[28,69727,53963],{"class":2453},[28,69729,83],{"class":34},[28,69731,69725],{"class":735},[28,69733,51784],{"class":34},[28,69735,69736,69738,69740,69742,69744,69747,69750,69752],{"class":30,"line":2239},[28,69737,55711],{"class":34},[28,69739,69643],{"class":51777},[28,69741,67128],{"class":2453},[28,69743,83],{"class":34},[28,69745,69746],{"class":735},"\"北京\"",[28,69748,69749],{"class":34},">北京\u003C\u002F",[28,69751,69643],{"class":51777},[28,69753,51784],{"class":34},[28,69755,69756,69758,69760,69762,69764,69767,69770,69772],{"class":30,"line":2244},[28,69757,55711],{"class":34},[28,69759,69643],{"class":51777},[28,69761,67128],{"class":2453},[28,69763,83],{"class":34},[28,69765,69766],{"class":735},"\"上海\"",[28,69768,69769],{"class":34},">上海\u003C\u002F",[28,69771,69643],{"class":51777},[28,69773,51784],{"class":34},[28,69775,69776,69778,69780,69782,69784,69787,69790,69792],{"class":30,"line":2249},[28,69777,55711],{"class":34},[28,69779,69643],{"class":51777},[28,69781,67128],{"class":2453},[28,69783,83],{"class":34},[28,69785,69786],{"class":735},"\"广州\"",[28,69788,69789],{"class":34},">广州\u003C\u002F",[28,69791,69643],{"class":51777},[28,69793,51784],{"class":34},[28,69795,69796,69798,69800,69802,69804,69807,69810,69812],{"class":30,"line":2254},[28,69797,55711],{"class":34},[28,69799,69643],{"class":51777},[28,69801,67128],{"class":2453},[28,69803,83],{"class":34},[28,69805,69806],{"class":735},"\"深圳\"",[28,69808,69809],{"class":34},">深圳\u003C\u002F",[28,69811,69643],{"class":51777},[28,69813,51784],{"class":34},[28,69815,69816,69818,69820,69822,69824,69827,69830,69832],{"class":30,"line":2268},[28,69817,55711],{"class":34},[28,69819,69643],{"class":51777},[28,69821,67128],{"class":2453},[28,69823,83],{"class":34},[28,69825,69826],{"class":735},"\"曹县\"",[28,69828,69829],{"class":34},">曹县\u003C\u002F",[28,69831,69643],{"class":51777},[28,69833,51784],{"class":34},[28,69835,69836,69838,69840],{"class":30,"line":2273},[28,69837,52253],{"class":34},[28,69839,69621],{"class":51777},[28,69841,51784],{"class":34},[28,69843,69844,69846,69848,69850,69852,69855,69858,69860],{"class":30,"line":3067},[28,69845,51818],{"class":34},[28,69847,54364],{"class":51777},[28,69849,53963],{"class":2453},[28,69851,83],{"class":34},[28,69853,69854],{"class":735},"\"add\"",[28,69856,69857],{"class":34},">录入\u003C\u002F",[28,69859,54364],{"class":51777},[28,69861,51784],{"class":34},[28,69863,69864,69866,69868],{"class":30,"line":3081},[28,69865,52894],{"class":34},[28,69867,67102],{"class":51777},[28,69869,51784],{"class":34},[28,69871,69872],{"class":30,"line":3089},[28,69873,2890],{"emptyLinePlaceholder":562},[28,69875,69876,69878,69880,69883,69885],{"class":30,"line":3094},[28,69877,52621],{"class":34},[28,69879,10],{"class":51777},[28,69881,69882],{"class":34},">就业榜\u003C\u002F",[28,69884,10],{"class":51777},[28,69886,51784],{"class":34},[28,69888,69889,69891,69893],{"class":30,"line":3100},[28,69890,52621],{"class":34},[28,69892,768],{"class":51777},[28,69894,51784],{"class":34},[28,69896,69897,69899,69901],{"class":30,"line":3106},[28,69898,51818],{"class":34},[28,69900,771],{"class":51777},[28,69902,51784],{"class":34},[28,69904,69905,69907,69909],{"class":30,"line":3111},[28,69906,55711],{"class":34},[28,69908,774],{"class":51777},[28,69910,51784],{"class":34},[28,69912,69913,69915,69917,69920,69922],{"class":30,"line":8436},[28,69914,55779],{"class":34},[28,69916,777],{"class":51777},[28,69918,69919],{"class":34},">序号\u003C\u002F",[28,69921,777],{"class":51777},[28,69923,51784],{"class":34},[28,69925,69926,69928,69930,69933,69935],{"class":30,"line":8460},[28,69927,55779],{"class":34},[28,69929,777],{"class":51777},[28,69931,69932],{"class":34},">姓名\u003C\u002F",[28,69934,777],{"class":51777},[28,69936,51784],{"class":34},[28,69938,69939,69941,69943,69946,69948],{"class":30,"line":8465},[28,69940,55779],{"class":34},[28,69942,777],{"class":51777},[28,69944,69945],{"class":34},">年龄\u003C\u002F",[28,69947,777],{"class":51777},[28,69949,51784],{"class":34},[28,69951,69952,69954,69956,69959,69961],{"class":30,"line":8471},[28,69953,55779],{"class":34},[28,69955,777],{"class":51777},[28,69957,69958],{"class":34},">性别\u003C\u002F",[28,69960,777],{"class":51777},[28,69962,51784],{"class":34},[28,69964,69965,69967,69969,69972,69974],{"class":30,"line":8498},[28,69966,55779],{"class":34},[28,69968,777],{"class":51777},[28,69970,69971],{"class":34},">薪资\u003C\u002F",[28,69973,777],{"class":51777},[28,69975,51784],{"class":34},[28,69977,69978,69980,69982,69985,69987],{"class":30,"line":8503},[28,69979,55779],{"class":34},[28,69981,777],{"class":51777},[28,69983,69984],{"class":34},">就业城市\u003C\u002F",[28,69986,777],{"class":51777},[28,69988,51784],{"class":34},[28,69990,69991,69993,69995,69998,70000],{"class":30,"line":8509},[28,69992,55779],{"class":34},[28,69994,777],{"class":51777},[28,69996,69997],{"class":34},">操作\u003C\u002F",[28,69999,777],{"class":51777},[28,70001,51784],{"class":34},[28,70003,70004,70006,70008],{"class":30,"line":8521},[28,70005,55884],{"class":34},[28,70007,774],{"class":51777},[28,70009,51784],{"class":34},[28,70011,70012,70014,70016],{"class":30,"line":8533},[28,70013,52253],{"class":34},[28,70015,771],{"class":51777},[28,70017,51784],{"class":34},[28,70019,70020,70022,70024],{"class":30,"line":8545},[28,70021,51818],{"class":34},[28,70023,815],{"class":51777},[28,70025,51784],{"class":34},[28,70027,70028],{"class":30,"line":10202},[28,70029,70030],{"class":73},"      \u003C!-- \n",[28,70032,70033],{"class":30,"line":10227},[28,70034,70035],{"class":73},"        \u003Ctr>\n",[28,70037,70038],{"class":30,"line":10250},[28,70039,70040],{"class":73},"          \u003Ctd>1001\u003C\u002Ftd>\n",[28,70042,70043],{"class":30,"line":10274},[28,70044,70045],{"class":73},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[28,70047,70048],{"class":30,"line":10279},[28,70049,70050],{"class":73},"          \u003Ctd>19\u003C\u002Ftd>\n",[28,70052,70053],{"class":30,"line":10284},[28,70054,70055],{"class":73},"          \u003Ctd>男\u003C\u002Ftd>\n",[28,70057,70058],{"class":30,"line":10289},[28,70059,70060],{"class":73},"          \u003Ctd>15000\u003C\u002Ftd>\n",[28,70062,70063],{"class":30,"line":10298},[28,70064,70065],{"class":73},"          \u003Ctd>上海\u003C\u002Ftd>\n",[28,70067,70068],{"class":30,"line":10303},[28,70069,70070],{"class":73},"          \u003Ctd>\n",[28,70072,70073],{"class":30,"line":10309},[28,70074,70075],{"class":73},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[28,70077,70078],{"class":30,"line":10330},[28,70079,70080],{"class":73},"          \u003C\u002Ftd>\n",[28,70082,70083],{"class":30,"line":10336},[28,70084,70085],{"class":73},"        \u003C\u002Ftr> \n",[28,70087,70088],{"class":30,"line":10350},[28,70089,70090],{"class":73},"        -->\n",[28,70092,70093,70095,70097],{"class":30,"line":10356},[28,70094,52253],{"class":34},[28,70096,815],{"class":51777},[28,70098,51784],{"class":34},[28,70100,70101,70103,70105],{"class":30,"line":10383},[28,70102,52894],{"class":34},[28,70104,768],{"class":51777},[28,70106,51784],{"class":34},[28,70108,70109,70111,70113],{"class":30,"line":10392},[28,70110,52621],{"class":34},[28,70112,52290],{"class":51777},[28,70114,51784],{"class":34},[28,70116,70117],{"class":30,"line":10398},[28,70118,60435],{"class":73},[28,70120,70121,70123,70126,70128,70130,70132,70134,70137],{"class":30,"line":10406},[28,70122,11707],{"class":42},[28,70124,70125],{"class":38}," uname",[28,70127,14050],{"class":42},[28,70129,54873],{"class":34},[28,70131,54876],{"class":2453},[28,70133,367],{"class":34},[28,70135,70136],{"class":735},"'.uname'",[28,70138,228],{"class":34},[28,70140,70141,70143,70145,70147,70149,70151,70153,70156],{"class":30,"line":10411},[28,70142,11707],{"class":42},[28,70144,16175],{"class":38},[28,70146,14050],{"class":42},[28,70148,54873],{"class":34},[28,70150,54876],{"class":2453},[28,70152,367],{"class":34},[28,70154,70155],{"class":735},"'.age'",[28,70157,228],{"class":34},[28,70159,70160,70162,70165,70167,70169,70171,70173,70176],{"class":30,"line":17090},[28,70161,11707],{"class":42},[28,70163,70164],{"class":38}," gender",[28,70166,14050],{"class":42},[28,70168,54873],{"class":34},[28,70170,54876],{"class":2453},[28,70172,367],{"class":34},[28,70174,70175],{"class":735},"'.gender'",[28,70177,228],{"class":34},[28,70179,70180,70182,70185,70187,70189,70191,70193,70196],{"class":30,"line":17096},[28,70181,11707],{"class":42},[28,70183,70184],{"class":38}," salary",[28,70186,14050],{"class":42},[28,70188,54873],{"class":34},[28,70190,54876],{"class":2453},[28,70192,367],{"class":34},[28,70194,70195],{"class":735},"'.salary'",[28,70197,228],{"class":34},[28,70199,70200,70202,70205,70207,70209,70211,70213,70216],{"class":30,"line":17119},[28,70201,11707],{"class":42},[28,70203,70204],{"class":38}," city",[28,70206,14050],{"class":42},[28,70208,54873],{"class":34},[28,70210,54876],{"class":2453},[28,70212,367],{"class":34},[28,70214,70215],{"class":735},"'.city'",[28,70217,228],{"class":34},[28,70219,70220,70222,70225,70227,70229,70231,70233,70236],{"class":30,"line":17125},[28,70221,11707],{"class":42},[28,70223,70224],{"class":38}," tbody",[28,70226,14050],{"class":42},[28,70228,54873],{"class":34},[28,70230,54876],{"class":2453},[28,70232,367],{"class":34},[28,70234,70235],{"class":735},"'tbody'",[28,70237,228],{"class":34},[28,70239,70240],{"class":30,"line":17148},[28,70241,2890],{"emptyLinePlaceholder":562},[28,70243,70244],{"class":30,"line":17162},[28,70245,70246],{"class":73},"    \u002F\u002F 获取所有带有name属性的元素\n",[28,70248,70249,70251,70254,70256,70258,70260,70262,70265],{"class":30,"line":17182},[28,70250,11707],{"class":42},[28,70252,70253],{"class":38}," items",[28,70255,14050],{"class":42},[28,70257,54873],{"class":34},[28,70259,56158],{"class":2453},[28,70261,367],{"class":34},[28,70263,70264],{"class":735},"'[name]'",[28,70266,228],{"class":34},[28,70268,70269],{"class":30,"line":17188},[28,70270,70271],{"class":73},"    \u002F\u002F 声明一个空的数组\n",[28,70273,70274,70276,70278,70280],{"class":30,"line":17199},[28,70275,11707],{"class":42},[28,70277,58172],{"class":38},[28,70279,14050],{"class":42},[28,70281,52315],{"class":34},[28,70283,70284],{"class":30,"line":17222},[28,70285,70286],{"class":73},"    \u002F\u002F 1.录入模块\n",[28,70288,70289],{"class":30,"line":17244},[28,70290,70291],{"class":73},"    \u002F\u002F 1.1这是一个表单提交事件\n",[28,70293,70294,70296,70299,70301,70303,70305,70307,70310],{"class":30,"line":17249},[28,70295,11707],{"class":42},[28,70297,70298],{"class":38}," info",[28,70300,14050],{"class":42},[28,70302,54873],{"class":34},[28,70304,54876],{"class":2453},[28,70306,367],{"class":34},[28,70308,70309],{"class":735},"'.info'",[28,70311,228],{"class":34},[28,70313,70314,70317,70319,70321,70324,70326,70328,70330,70332],{"class":30,"line":17255},[28,70315,70316],{"class":34},"    info.",[28,70318,58290],{"class":2453},[28,70320,367],{"class":34},[28,70322,70323],{"class":735},"'submit'",[28,70325,12921],{"class":34},[28,70327,54926],{"class":42},[28,70329,2148],{"class":34},[28,70331,706],{"class":5704},[28,70333,12928],{"class":34},[28,70335,70336],{"class":30,"line":17269},[28,70337,70338],{"class":73},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[28,70340,70341,70344,70347],{"class":30,"line":17282},[28,70342,70343],{"class":34},"      e.",[28,70345,70346],{"class":2453},"preventDefault",[28,70348,2466],{"class":34},[28,70350,70351],{"class":30,"line":17287},[28,70352,60489],{"class":73},[28,70354,70355],{"class":30,"line":17301},[28,70356,2890],{"emptyLinePlaceholder":562},[28,70358,70359],{"class":30,"line":17306},[28,70360,70361],{"class":73},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[28,70363,70364],{"class":30,"line":17312},[28,70365,70366],{"class":73},"      \u002F\u002F 先遍历循环\n",[28,70368,70369,70371,70373,70375,70377,70379,70381,70383,70385,70388,70390,70392,70394],{"class":30,"line":17317},[28,70370,52761],{"class":42},[28,70372,2148],{"class":34},[28,70374,52324],{"class":42},[28,70376,52],{"class":34},[28,70378,83],{"class":42},[28,70380,4581],{"class":38},[28,70382,9932],{"class":34},[28,70384,1529],{"class":42},[28,70386,70387],{"class":34}," items.",[28,70389,52445],{"class":38},[28,70391,3702],{"class":34},[28,70393,2782],{"class":42},[28,70395,12928],{"class":34},[28,70397,70398,70400,70403,70405,70408],{"class":30,"line":17331},[28,70399,2987],{"class":42},[28,70401,70402],{"class":34}," (items[i].value ",[28,70404,54963],{"class":42},[28,70406,70407],{"class":735}," ''",[28,70409,12928],{"class":34},[28,70411,70412,70415,70418,70420,70423],{"class":30,"line":17336},[28,70413,70414],{"class":42},"          return",[28,70416,70417],{"class":2453}," alert",[28,70419,367],{"class":34},[28,70421,70422],{"class":735},"'输入内容不能为空'",[28,70424,228],{"class":34},[28,70426,70427],{"class":30,"line":17341},[28,70428,3019],{"class":34},[28,70430,70431],{"class":30,"line":17355},[28,70432,52875],{"class":34},[28,70434,70435],{"class":30,"line":17367},[28,70436,2890],{"emptyLinePlaceholder":562},[28,70438,70439],{"class":30,"line":17372},[28,70440,70441],{"class":73},"      \u002F\u002F 创建新的对象\n",[28,70443,70444,70446,70449,70451],{"class":30,"line":17385},[28,70445,58705],{"class":42},[28,70447,70448],{"class":38}," obj",[28,70450,14050],{"class":42},[28,70452,16058],{"class":34},[28,70454,70455,70458,70460,70462,70464],{"class":30,"line":17390},[28,70456,70457],{"class":34},"        stuID: arr.",[28,70459,52445],{"class":38},[28,70461,46043],{"class":42},[28,70463,25605],{"class":38},[28,70465,31945],{"class":34},[28,70467,70468],{"class":30,"line":17395},[28,70469,70470],{"class":34},"        uname: uname.value,\n",[28,70472,70473],{"class":30,"line":17400},[28,70474,70475],{"class":34},"        age: age.value,\n",[28,70477,70478],{"class":30,"line":17413},[28,70479,70480],{"class":34},"        gender: gender.value,\n",[28,70482,70483],{"class":30,"line":17418},[28,70484,70485],{"class":34},"        salary: salary.value,\n",[28,70487,70488],{"class":30,"line":33111},[28,70489,70490],{"class":34},"        city: city.value\n",[28,70492,70493],{"class":30,"line":33117},[28,70494,52875],{"class":34},[28,70496,70497],{"class":30,"line":33123},[28,70498,70499],{"class":73},"      \u002F\u002F console.log(obj);\n",[28,70501,70502],{"class":30,"line":33129},[28,70503,70504],{"class":73},"      \u002F\u002F 追加到数组里面\n",[28,70506,70507,70509,70511],{"class":30,"line":33135},[28,70508,58484],{"class":34},[28,70510,52361],{"class":2453},[28,70512,70513],{"class":34},"(obj)\n",[28,70515,70516],{"class":30,"line":33146},[28,70517,70518],{"class":73},"      \u002F\u002F console.log(arr);\n",[28,70520,70521],{"class":30,"line":33152},[28,70522,70523],{"class":73},"      \u002F\u002F 清空表单  reset重置表单\n",[28,70525,70526,70529,70531,70534],{"class":30,"line":33172},[28,70527,70528],{"class":38},"      this",[28,70530,1179],{"class":34},[28,70532,70533],{"class":2453},"reset",[28,70535,2466],{"class":34},[28,70537,70538],{"class":30,"line":33178},[28,70539,70540],{"class":73},"      \u002F\u002F 调用渲染函数\n",[28,70542,70543,70546],{"class":30,"line":33189},[28,70544,70545],{"class":2453},"      render",[28,70547,2466],{"class":34},[28,70549,70550],{"class":30,"line":33195},[28,70551,33938],{"class":34},[28,70553,70554],{"class":30,"line":33201},[28,70555,70556],{"class":73},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[28,70558,70559,70562,70565],{"class":30,"line":33207},[28,70560,70561],{"class":42},"    function",[28,70563,70564],{"class":2453}," render",[28,70566,11339],{"class":34},[28,70568,70569],{"class":30,"line":33213},[28,70570,70571],{"class":73},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[28,70573,70574,70577,70579],{"class":30,"line":33219},[28,70575,70576],{"class":34},"      tbody.innerHTML ",[28,70578,83],{"class":42},[28,70580,70581],{"class":735}," ''\n",[28,70583,70584],{"class":30,"line":33225},[28,70585,70586],{"class":73},"      \u002F\u002F 遍历数组\n",[28,70588,70589,70591,70593,70595,70597,70599,70601,70603,70605,70607,70609,70611,70613],{"class":30,"line":33231},[28,70590,52761],{"class":42},[28,70592,2148],{"class":34},[28,70594,52324],{"class":42},[28,70596,52],{"class":34},[28,70598,83],{"class":42},[28,70600,4581],{"class":38},[28,70602,9932],{"class":34},[28,70604,1529],{"class":42},[28,70606,52442],{"class":34},[28,70608,52445],{"class":38},[28,70610,3702],{"class":34},[28,70612,2782],{"class":42},[28,70614,12928],{"class":34},[28,70616,70617,70619,70622,70624,70626,70629,70631,70634],{"class":30,"line":33251},[28,70618,61747],{"class":42},[28,70620,70621],{"class":38}," tr",[28,70623,14050],{"class":42},[28,70625,54873],{"class":34},[28,70627,70628],{"class":2453},"createElement",[28,70630,367],{"class":34},[28,70632,70633],{"class":735},"'tr'",[28,70635,228],{"class":34},[28,70637,70638,70641,70643],{"class":30,"line":33257},[28,70639,70640],{"class":34},"        tr.innerHTML ",[28,70642,83],{"class":42},[28,70644,70645],{"class":735}," `\n",[28,70647,70648,70651,70653,70655,70657,70660,70663],{"class":30,"line":33273},[28,70649,70650],{"class":735},"        \u003Ctd>${",[28,70652,4368],{"class":34},[28,70654,35],{"class":735},[28,70656,1066],{"class":34},[28,70658,70659],{"class":735},"].",[28,70661,70662],{"class":34},"stuID",[28,70664,70665],{"class":735},"}\u003C\u002Ftd>\n",[28,70667,70668,70671,70673,70675,70677,70679,70682],{"class":30,"line":33279},[28,70669,70670],{"class":735},"          \u003Ctd>${",[28,70672,4368],{"class":34},[28,70674,35],{"class":735},[28,70676,1066],{"class":34},[28,70678,70659],{"class":735},[28,70680,70681],{"class":34},"uname",[28,70683,70665],{"class":735},[28,70685,70686,70688,70690,70692,70694,70696,70699],{"class":30,"line":33293},[28,70687,70670],{"class":735},[28,70689,4368],{"class":34},[28,70691,35],{"class":735},[28,70693,1066],{"class":34},[28,70695,70659],{"class":735},[28,70697,70698],{"class":34},"age",[28,70700,70665],{"class":735},[28,70702,70703,70705,70707,70709,70711,70713,70716],{"class":30,"line":33299},[28,70704,70670],{"class":735},[28,70706,4368],{"class":34},[28,70708,35],{"class":735},[28,70710,1066],{"class":34},[28,70712,70659],{"class":735},[28,70714,70715],{"class":34},"gender",[28,70717,70665],{"class":735},[28,70719,70720,70722,70724,70726,70728,70730,70733],{"class":30,"line":33314},[28,70721,70670],{"class":735},[28,70723,4368],{"class":34},[28,70725,35],{"class":735},[28,70727,1066],{"class":34},[28,70729,70659],{"class":735},[28,70731,70732],{"class":34},"salary",[28,70734,70665],{"class":735},[28,70736,70737,70739,70741,70743,70745,70747,70750],{"class":30,"line":33320},[28,70738,70670],{"class":735},[28,70740,4368],{"class":34},[28,70742,35],{"class":735},[28,70744,1066],{"class":34},[28,70746,70659],{"class":735},[28,70748,70749],{"class":34},"city",[28,70751,70665],{"class":735},[28,70753,70754],{"class":30,"line":33329},[28,70755,70070],{"class":735},[28,70757,70758,70761,70763],{"class":30,"line":33335},[28,70759,70760],{"class":735},"            \u003Ca href=\"javascript:\" data-id=${",[28,70762,1066],{"class":34},[28,70764,70765],{"class":735},"}>删除\u003C\u002Fa>\n",[28,70767,70768],{"class":30,"line":33344},[28,70769,70770],{"class":735},"          \u003C\u002Ftd> \n",[28,70772,70773],{"class":30,"line":33350},[28,70774,70775],{"class":735},"          `\n",[28,70777,70778],{"class":30,"line":33356},[28,70779,70780],{"class":73},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[28,70782,70783,70786,70789],{"class":30,"line":33365},[28,70784,70785],{"class":34},"        tbody.",[28,70787,70788],{"class":2453},"appendChild",[28,70790,70791],{"class":34},"(tr)\n",[28,70793,70794],{"class":30,"line":33371},[28,70795,52875],{"class":34},[28,70797,70798],{"class":30,"line":33382},[28,70799,2677],{"class":34},[28,70801,70802],{"class":30,"line":33388},[28,70803,2890],{"emptyLinePlaceholder":562},[28,70805,70806],{"class":30,"line":33407},[28,70807,70808],{"class":73},"    \u002F\u002F 3.删除委托\n",[28,70810,70811],{"class":30,"line":33413},[28,70812,70813],{"class":73},"    \u002F\u002F 3.1 事件委托 tbody\n",[28,70815,70816,70819,70821,70823,70825,70827,70829,70831,70833],{"class":30,"line":33424},[28,70817,70818],{"class":34},"    tbody.",[28,70820,58290],{"class":2453},[28,70822,367],{"class":34},[28,70824,58295],{"class":735},[28,70826,12921],{"class":34},[28,70828,54926],{"class":42},[28,70830,2148],{"class":34},[28,70832,706],{"class":5704},[28,70834,12928],{"class":34},[28,70836,70837,70839,70841,70843,70845],{"class":30,"line":33430},[28,70838,54957],{"class":42},[28,70840,67511],{"class":34},[28,70842,54963],{"class":42},[28,70844,68733],{"class":735},[28,70846,12928],{"class":34},[28,70848,70849],{"class":30,"line":33450},[28,70850,70851],{"class":73},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[28,70853,70854],{"class":30,"line":33466},[28,70855,70856],{"class":73},"        \u002F\u002F console.log(e.target.dataset.id);\n",[28,70858,70859],{"class":30,"line":33472},[28,70860,70861],{"class":73},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[28,70863,70864,70867,70869,70872,70874],{"class":30,"line":33486},[28,70865,70866],{"class":34},"        arr.",[28,70868,58487],{"class":2453},[28,70870,70871],{"class":34},"(e.target.dataset.id, ",[28,70873,39],{"class":38},[28,70875,228],{"class":34},[28,70877,70878],{"class":30,"line":33492},[28,70879,70880],{"class":73},"        \u002F\u002F 重新渲染一次\n",[28,70882,70883,70886],{"class":30,"line":33498},[28,70884,70885],{"class":2453},"        render",[28,70887,2466],{"class":34},[28,70889,70890],{"class":30,"line":33509},[28,70891,52875],{"class":34},[28,70893,70894],{"class":30,"line":33515},[28,70895,33938],{"class":34},[28,70897,70898,70900,70902],{"class":30,"line":33521},[28,70899,52894],{"class":34},[28,70901,52290],{"class":51777},[28,70903,51784],{"class":34},[28,70905,70906],{"class":30,"line":33531},[28,70907,2890],{"emptyLinePlaceholder":562},[28,70909,70910,70912,70914],{"class":30,"line":33537},[28,70911,52262],{"class":34},[28,70913,52277],{"class":51777},[28,70915,51784],{"class":34},[28,70917,70918],{"class":30,"line":33548},[28,70919,2890],{"emptyLinePlaceholder":562},[28,70921,70922,70924,70926],{"class":30,"line":33554},[28,70923,52262],{"class":34},[28,70925,51112],{"class":51777},[28,70927,51784],{"class":34},[14,70929,70930],{},"样式：",[18,70932,70936],{"className":70933,"code":70934,"language":70935,"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,70937,70938,70943,70953,70962,70966,70970,70975,70985,70990,70994,70999,71009,71014,71023,71027,71031,71036,71041,71051,71061,71066,71070,71075,71084,71094,71099,71109,71119,71123,71128,71136,71140,71145,71150,71155,71163,71172,71176,71181,71190,71194,71199,71208,71212,71217,71226,71235,71243,71247,71252,71261,71271,71280,71290,71296,71305,71315,71325,71329,71334,71343,71351,71361,71369,71378,71387,71397,71405,71409,71414,71423],{"__ignoreMap":23},[28,70939,70940],{"class":30,"line":31},[28,70941,70942],{"class":34},"* {\n",[28,70944,70945,70948,70950],{"class":30,"line":77},[28,70946,70947],{"class":51777},"  margin",[28,70949,51914],{"class":34},[28,70951,70952],{"class":735},"0;\n",[28,70954,70955,70958,70960],{"class":30,"line":114},[28,70956,70957],{"class":735},"  padding",[28,70959,51914],{"class":34},[28,70961,70952],{"class":735},[28,70963,70964],{"class":30,"line":128},[28,70965,2055],{"class":34},[28,70967,70968],{"class":30,"line":393},[28,70969,2890],{"emptyLinePlaceholder":562},[28,70971,70972],{"class":30,"line":409},[28,70973,70974],{"class":735},"a {\n",[28,70976,70977,70980,70982],{"class":30,"line":1711},[28,70978,70979],{"class":51777},"  text-decoration",[28,70981,51914],{"class":34},[28,70983,70984],{"class":735},"none;\n",[28,70986,70987],{"class":30,"line":1802},[28,70988,70989],{"class":735},"  color:#721c24;\n",[28,70991,70992],{"class":30,"line":1808},[28,70993,2055],{"class":34},[28,70995,70996],{"class":30,"line":1820},[28,70997,70998],{"class":735},"h1 {\n",[28,71000,71001,71004,71006],{"class":30,"line":2102},[28,71002,71003],{"class":51777},"  text-align",[28,71005,51914],{"class":34},[28,71007,71008],{"class":735},"center;\n",[28,71010,71011],{"class":30,"line":2107},[28,71012,71013],{"class":735},"  color:#333;\n",[28,71015,71016,71018,71020],{"class":30,"line":2113},[28,71017,70947],{"class":51777},[28,71019,51914],{"class":34},[28,71021,71022],{"class":735},"20px 0;\n",[28,71024,71025],{"class":30,"line":2118},[28,71026,3164],{"class":34},[28,71028,71029],{"class":30,"line":2132},[28,71030,2055],{"class":34},[28,71032,71033],{"class":30,"line":2137},[28,71034,71035],{"class":735},"table {\n",[28,71037,71038],{"class":30,"line":2143},[28,71039,71040],{"class":735},"  margin:0 auto;\n",[28,71042,71043,71046,71048],{"class":30,"line":2164},[28,71044,71045],{"class":51777},"  width",[28,71047,51914],{"class":34},[28,71049,71050],{"class":735},"800px;\n",[28,71052,71053,71056,71058],{"class":30,"line":2169},[28,71054,71055],{"class":51777},"  border-collapse",[28,71057,51914],{"class":34},[28,71059,71060],{"class":735},"collapse;\n",[28,71062,71063],{"class":30,"line":2183},[28,71064,71065],{"class":735},"  color:#004085;\n",[28,71067,71068],{"class":30,"line":2188},[28,71069,2055],{"class":34},[28,71071,71072],{"class":30,"line":2217},[28,71073,71074],{"class":735},"th {\n",[28,71076,71077,71079,71081],{"class":30,"line":2222},[28,71078,70957],{"class":51777},[28,71080,51914],{"class":34},[28,71082,71083],{"class":735},"10px;\n",[28,71085,71086,71089,71091],{"class":30,"line":2239},[28,71087,71088],{"class":51777},"  background",[28,71090,51914],{"class":34},[28,71092,71093],{"class":73},"#cfe5ff;\n",[28,71095,71096],{"class":30,"line":2244},[28,71097,71098],{"class":34},"  \n",[28,71100,71101,71104,71106],{"class":30,"line":2249},[28,71102,71103],{"class":51777},"  font-size",[28,71105,51914],{"class":34},[28,71107,71108],{"class":735},"20px;\n",[28,71110,71111,71114,71116],{"class":30,"line":2254},[28,71112,71113],{"class":51777},"  font-weight",[28,71115,51914],{"class":34},[28,71117,71118],{"class":735},"400;\n",[28,71120,71121],{"class":30,"line":2268},[28,71122,2055],{"class":34},[28,71124,71125],{"class":30,"line":2273},[28,71126,71127],{"class":735},"td,th {\n",[28,71129,71130,71133],{"class":30,"line":3067},[28,71131,71132],{"class":735},"  border:1px solid",[28,71134,71135],{"class":73}," #b8daff;\n",[28,71137,71138],{"class":30,"line":3081},[28,71139,2055],{"class":34},[28,71141,71142],{"class":30,"line":3089},[28,71143,71144],{"class":735},"td {\n",[28,71146,71147],{"class":30,"line":3094},[28,71148,71149],{"class":735},"  padding:10px;\n",[28,71151,71152],{"class":30,"line":3100},[28,71153,71154],{"class":735},"  color:#666;\n",[28,71156,71157,71159,71161],{"class":30,"line":3106},[28,71158,71003],{"class":51777},[28,71160,51914],{"class":34},[28,71162,71008],{"class":735},[28,71164,71165,71167,71169],{"class":30,"line":3111},[28,71166,71103],{"class":51777},[28,71168,51914],{"class":34},[28,71170,71171],{"class":735},"16px;\n",[28,71173,71174],{"class":30,"line":8436},[28,71175,2055],{"class":34},[28,71177,71178],{"class":30,"line":8460},[28,71179,71180],{"class":735},"tbody tr {\n",[28,71182,71183,71185,71187],{"class":30,"line":8465},[28,71184,71088],{"class":51777},[28,71186,51914],{"class":34},[28,71188,71189],{"class":73},"#fff;\n",[28,71191,71192],{"class":30,"line":8471},[28,71193,2055],{"class":34},[28,71195,71196],{"class":30,"line":8498},[28,71197,71198],{"class":735},"tbody tr:hover {\n",[28,71200,71201,71203,71205],{"class":30,"line":8503},[28,71202,71088],{"class":51777},[28,71204,51914],{"class":34},[28,71206,71207],{"class":73},"#e1ecf8;\n",[28,71209,71210],{"class":30,"line":8509},[28,71211,2055],{"class":34},[28,71213,71214],{"class":30,"line":8521},[28,71215,71216],{"class":735},".info {\n",[28,71218,71219,71221,71223],{"class":30,"line":8533},[28,71220,71045],{"class":51777},[28,71222,51914],{"class":34},[28,71224,71225],{"class":735},"900px;\n",[28,71227,71228,71230,71232],{"class":30,"line":8545},[28,71229,70947],{"class":51777},[28,71231,51914],{"class":34},[28,71233,71234],{"class":735},"50px auto;\n",[28,71236,71237,71239,71241],{"class":30,"line":10202},[28,71238,71003],{"class":51777},[28,71240,51914],{"class":34},[28,71242,71008],{"class":735},[28,71244,71245],{"class":30,"line":10227},[28,71246,2055],{"class":34},[28,71248,71249],{"class":30,"line":10250},[28,71250,71251],{"class":735},".info  input, .info select {\n",[28,71253,71254,71256,71258],{"class":30,"line":10274},[28,71255,71045],{"class":51777},[28,71257,51914],{"class":34},[28,71259,71260],{"class":735},"80px;\n",[28,71262,71263,71266,71268],{"class":30,"line":10279},[28,71264,71265],{"class":51777},"  height",[28,71267,51914],{"class":34},[28,71269,71270],{"class":735},"27px;\n",[28,71272,71273,71276,71278],{"class":30,"line":10284},[28,71274,71275],{"class":51777},"  outline",[28,71277,51914],{"class":34},[28,71279,70984],{"class":735},[28,71281,71282,71285,71287],{"class":30,"line":10289},[28,71283,71284],{"class":51777},"  border-radius",[28,71286,51914],{"class":34},[28,71288,71289],{"class":735},"5px;\n",[28,71291,71292,71294],{"class":30,"line":10298},[28,71293,71132],{"class":735},[28,71295,71135],{"class":73},[28,71297,71298,71301,71303],{"class":30,"line":10303},[28,71299,71300],{"class":51777},"  padding-left",[28,71302,51914],{"class":34},[28,71304,71289],{"class":735},[28,71306,71307,71310,71312],{"class":30,"line":10309},[28,71308,71309],{"class":51777},"  box-sizing",[28,71311,51914],{"class":34},[28,71313,71314],{"class":735},"border-box;\n",[28,71316,71317,71320,71322],{"class":30,"line":10330},[28,71318,71319],{"class":51777},"  margin-right",[28,71321,51914],{"class":34},[28,71323,71324],{"class":735},"15px;\n",[28,71326,71327],{"class":30,"line":10336},[28,71328,2055],{"class":34},[28,71330,71331],{"class":30,"line":10350},[28,71332,71333],{"class":735},".info button {\n",[28,71335,71336,71338,71340],{"class":30,"line":10356},[28,71337,71045],{"class":51777},[28,71339,51914],{"class":34},[28,71341,71342],{"class":735},"60px;\n",[28,71344,71345,71347,71349],{"class":30,"line":10383},[28,71346,71265],{"class":51777},[28,71348,51914],{"class":34},[28,71350,71270],{"class":735},[28,71352,71353,71356,71358],{"class":30,"line":10392},[28,71354,71355],{"class":51777},"  background-color",[28,71357,51914],{"class":34},[28,71359,71360],{"class":73},"#004085;\n",[28,71362,71363,71365,71367],{"class":30,"line":10398},[28,71364,71275],{"class":51777},[28,71366,51914],{"class":34},[28,71368,70984],{"class":735},[28,71370,71371,71374,71376],{"class":30,"line":10406},[28,71372,71373],{"class":51777},"  border",[28,71375,51914],{"class":34},[28,71377,70952],{"class":735},[28,71379,71380,71383,71385],{"class":30,"line":10411},[28,71381,71382],{"class":51777},"  color",[28,71384,51914],{"class":34},[28,71386,71189],{"class":73},[28,71388,71389,71392,71394],{"class":30,"line":17090},[28,71390,71391],{"class":51777},"  cursor",[28,71393,51914],{"class":34},[28,71395,71396],{"class":735},"pointer;\n",[28,71398,71399,71401,71403],{"class":30,"line":17096},[28,71400,71284],{"class":51777},[28,71402,51914],{"class":34},[28,71404,71289],{"class":735},[28,71406,71407],{"class":30,"line":17119},[28,71408,2055],{"class":34},[28,71410,71411],{"class":30,"line":17125},[28,71412,71413],{"class":735},".info .age {\n",[28,71415,71416,71418,71420],{"class":30,"line":17148},[28,71417,71045],{"class":51777},[28,71419,51914],{"class":34},[28,71421,71422],{"class":735},"50px;\n",[28,71424,71425],{"class":30,"line":17162},[28,71426,2055],{"class":34},[14,71428,71429],{},"思路：",[14,71431,71432],{},[420,71433],{"alt":23,"src":71434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71436,71437],{},[420,71438],{"alt":23,"src":71439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71441,71442],{},[420,71443],{"alt":23,"src":71444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[605,71446,71448],{"id":71447},"_3315-重绘回流","3.3.15 重绘回流",[14,71450,71451],{},[420,71452],{"alt":23,"src":71453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71455,71456],{},[420,71457],{"alt":23,"src":71458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71460,71461],{},[420,71462],{"alt":23,"src":71463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[60,71465,71467],{"id":71466},"_34-bom","3.4 BOM",[14,71469,71470],{},[420,71471],{"alt":23,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71474,71475],{},"平时写的document省略了window而已，实际上是window.document",[14,71477,71478],{},"函数也是这样，调用的时候实际为window.fn()",[14,71480,71481],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71483,71484],{},"window大部分情况下可以省略",[605,71486,71488],{"id":71487},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71490,71491],{},"只执行一次",[14,71493,71494],{},[420,71495],{"alt":23,"src":71496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71498,71499],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71501,71502],{},[420,71503],{"alt":23,"src":71504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[605,71506,71508],{"id":71507},"_342-js执行机制","3.4.2 JS执行机制",[14,71510,71511],{},[420,71512],{"alt":23,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71515,71516],{},"两个的结果都是1111 3333 2222",[14,71518,71519],{},[420,71520],{"alt":23,"src":71521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71523,71524],{},[420,71525],{"alt":23,"src":71526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71528,71529],{},[420,71530],{"alt":23,"src":71531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71533,71534],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71536,71537],{},"工作流程：",[14,71539,71540],{},[420,71541],{"alt":23,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71544,71545],{},[420,71546],{"alt":23,"src":71547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71549,71550],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71552,71553],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[605,71555,71557],{"id":71556},"_343-location对象","3.4.3 location对象",[14,71559,71560],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71562,71563],{},[420,71564],{"alt":23,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71567,71568],{},"href可以跳转页面",[588,71570,71571],{},[591,71572,71573],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71575,71576],{},"search得到提交信息之后网站后边的地址",[14,71578,71579],{},[420,71580],{"alt":23,"src":71581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71583,71584],{},[420,71585],{"alt":23,"src":71586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[588,71588,71589],{"start":77},[591,71590,71591],{},"hash:这个获取单页面应用#后边的地址",[14,71593,71594],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71596,71597],{},[420,71598],{"alt":23,"src":71599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[18,71601,71603],{"className":53544,"code":71602,"language":53546,"meta":23,"style":23},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[25,71604,71605,71625,71645],{"__ignoreMap":23},[28,71606,71607,71609,71611,71613,71615,71618,71621,71623],{"class":30,"line":31},[28,71608,52621],{"class":34},[28,71610,80],{"class":51777},[28,71612,61534],{"class":2453},[28,71614,83],{"class":34},[28,71616,71617],{"class":735},"\"#\u002Fmy\"",[28,71619,71620],{"class":34},">我的\u003C\u002F",[28,71622,80],{"class":51777},[28,71624,51784],{"class":34},[28,71626,71627,71629,71631,71633,71635,71638,71641,71643],{"class":30,"line":77},[28,71628,52621],{"class":34},[28,71630,80],{"class":51777},[28,71632,61534],{"class":2453},[28,71634,83],{"class":34},[28,71636,71637],{"class":735},"\"#\u002Ffriend\"",[28,71639,71640],{"class":34},">关注\u003C\u002F",[28,71642,80],{"class":51777},[28,71644,51784],{"class":34},[28,71646,71647,71649,71651,71653,71655,71658,71661,71663],{"class":30,"line":114},[28,71648,52621],{"class":34},[28,71650,80],{"class":51777},[28,71652,61534],{"class":2453},[28,71654,83],{"class":34},[28,71656,71657],{"class":735},"\"#\u002Fdownload\"",[28,71659,71660],{"class":34},">下载\u003C\u002F",[28,71662,80],{"class":51777},[28,71664,51784],{"class":34},[14,71666,71667],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[588,71669,71670],{"start":114},[591,71671,71672,71673,71675,71676,71678],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54193,71674],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54193,71677],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[605,71680,71682],{"id":71681},"_345-navigator对象","3.4.5 navigator对象",[14,71684,71685],{},[420,71686],{"alt":23,"src":71687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[18,71689,71693],{"className":71690,"code":71691,"language":71692,"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,71694,71695,71700,71711,71723,71728,71779,71820,71825,71838,71850,71855],{"__ignoreMap":23},[28,71696,71697],{"class":30,"line":31},[28,71698,71699],{"class":73},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[28,71701,71702,71704,71706,71708],{"class":30,"line":77},[28,71703,856],{"class":42},[28,71705,367],{"class":34},[28,71707,54926],{"class":42},[28,71709,71710],{"class":34}," () { \n",[28,71712,71713,71715,71718,71720],{"class":30,"line":114},[28,71714,7280],{"class":42},[28,71716,71717],{"class":38}," userAgent",[28,71719,14050],{"class":42},[28,71721,71722],{"class":34}," navigator.userAgent \n",[28,71724,71725],{"class":30,"line":128},[28,71726,71727],{"class":73},"\u002F\u002F 验证是否为Android或iPhone \n",[28,71729,71730,71732,71735,71737,71740,71743,71745,71747,71750,71752,71755,71759,71761,71763,71765,71768,71770,71772,71774,71776],{"class":30,"line":393},[28,71731,7280],{"class":42},[28,71733,71734],{"class":38}," android",[28,71736,14050],{"class":42},[28,71738,71739],{"class":34}," userAgent.",[28,71741,71742],{"class":2453},"match",[28,71744,367],{"class":34},[28,71746,43],{"class":735},[28,71748,71749],{"class":48454},"(Android);",[28,71751,1605],{"class":42},[28,71753,71754],{"class":38},"[\\s",[28,71756,71758],{"class":71757},"snhLl","\\\u002F",[28,71760,1559],{"class":38},[28,71762,1104],{"class":42},[28,71764,367],{"class":48454},[28,71766,71767],{"class":38},"[\\d.]",[28,71769,1104],{"class":42},[28,71771,1054],{"class":48454},[28,71773,1605],{"class":42},[28,71775,43],{"class":735},[28,71777,71778],{"class":34},") \n",[28,71780,71781,71783,71786,71788,71790,71792,71794,71796,71799,71802,71805,71807,71809,71812,71814,71816,71818],{"class":30,"line":409},[28,71782,7280],{"class":42},[28,71784,71785],{"class":38}," iphone",[28,71787,14050],{"class":42},[28,71789,71739],{"class":34},[28,71791,71742],{"class":2453},[28,71793,367],{"class":34},[28,71795,43],{"class":735},[28,71797,71798],{"class":48454},"(iPhone",[28,71800,71801],{"class":38},"\\s",[28,71803,71804],{"class":48454},"OS)",[28,71806,71801],{"class":38},[28,71808,367],{"class":48454},[28,71810,71811],{"class":38},"[\\d_]",[28,71813,1104],{"class":42},[28,71815,1054],{"class":48454},[28,71817,43],{"class":735},[28,71819,71778],{"class":34},[28,71821,71822],{"class":30,"line":1711},[28,71823,71824],{"class":73},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[28,71826,71827,71829,71832,71835],{"class":30,"line":1802},[28,71828,2021],{"class":42},[28,71830,71831],{"class":34}," (android ",[28,71833,71834],{"class":42},"||",[28,71836,71837],{"class":34}," iphone) { \n",[28,71839,71840,71843,71845,71848],{"class":30,"line":1808},[28,71841,71842],{"class":34},"location.href ",[28,71844,83],{"class":42},[28,71846,71847],{"class":735}," 'http:\u002F\u002Fm.itcast.cn'",[28,71849,3164],{"class":34},[28,71851,71852],{"class":30,"line":1820},[28,71853,71854],{"class":34},"} \n",[28,71856,71857],{"class":30,"line":2102},[28,71858,71859],{"class":34},"})()\n",[605,71861,71863],{"id":71862},"_346-histroy对象","3.4.6 histroy对象",[14,71865,71866],{},[420,71867],{"alt":23,"src":71868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71870,71871],{},"浏览器地址的前进与后退!!!",[14,71873,71874],{},"history.back() 等效于 history.go(-1)",[14,71876,71877],{},"history.forward() 等效于 history.go(1)",[60,71879,71881],{"id":71880},"_35-本地存储","3.5 本地存储",[588,71883,71884,71887,71890],{},[591,71885,71886],{},"数据存储在用户浏览器中",[591,71888,71889],{},"设置、读取方便、甚至页面刷新不丢失数据",[591,71891,71892],{},"容量较大，sessionStorage和localStorage约 5M 左右",[605,71894,71896],{"id":71895},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71898,71899],{},"只能存储字符串",[14,71901,71902],{},[420,71903],{"alt":23,"src":71904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71906,71907],{},[420,71908],{"alt":23,"src":71909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71911,71912],{},"键值对要加引号,不然就会当变量来看了",[14,71914,71915],{},"localStorage.setItem('uname', 'pink')",[14,71917,71918],{},"刷新之后信息不再丢失",[14,71920,71921],{},"操作key,value会跟着变",[14,71923,71924],{},"删除只删除键就可以,即名字",[14,71926,71915],{},[14,71928,71929],{},"改:",[14,71931,71932],{},"localStorage.setItem('uname','red')",[14,71934,71935],{},"有这个键就是改,没有这个键就是改",[14,71937,71938],{},[420,71939],{"alt":23,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71942,71943],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71945,71946],{},[420,71947],{"alt":23,"src":71948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71950,71951],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[605,71953,71955],{"id":71954},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71957,71958],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71960,71961],{},"特性:",[588,71963,71964,71967,71970,71973],{},[591,71965,71966],{},"生命周期为关闭浏览器窗口",[591,71968,71969],{},"在同一个窗口(页面)下数据可以共享",[591,71971,71972],{},"以键值对的形式存储使用",[591,71974,71975],{},"用法跟localStorage 基本相同",[605,71977,71979],{"id":71978},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71981,71982],{},"本地只能存储字符串,无法直接存储复杂数据类型",[18,71984,71986],{"className":53544,"code":71985,"language":53546,"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,71987,71988,71996,72001,72006,72011,72016,72020,72025,72030],{"__ignoreMap":23},[28,71989,71990,71992,71994],{"class":30,"line":31},[28,71991,1529],{"class":34},[28,71993,52290],{"class":51777},[28,71995,51784],{"class":34},[28,71997,71998],{"class":30,"line":77},[28,71999,72000],{"class":34},"    const obj = {\n",[28,72002,72003],{"class":30,"line":114},[28,72004,72005],{"class":34},"      uname: 'pink老师',\n",[28,72007,72008],{"class":30,"line":128},[28,72009,72010],{"class":34},"      age: 18,\n",[28,72012,72013],{"class":30,"line":393},[28,72014,72015],{"class":34},"      gender: '女'\n",[28,72017,72018],{"class":30,"line":409},[28,72019,2677],{"class":34},[28,72021,72022],{"class":30,"line":1711},[28,72023,72024],{"class":34},"    \u002F\u002F 存储复杂数据类型\n",[28,72026,72027],{"class":30,"line":1802},[28,72028,72029],{"class":34},"    localStorage.setItem('obj', obj)\n",[28,72031,72032,72034,72036],{"class":30,"line":1808},[28,72033,52894],{"class":34},[28,72035,52290],{"class":51777},[28,72037,51784],{"class":34},[14,72039,72040],{},[420,72041],{"alt":23,"src":72042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72044,72045],{},"如果获取一下数据:",[14,72047,72048],{},"log(localStorage.getItem('obj'))",[14,72050,72051],{},[420,72052],{"alt":23,"src":72053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72055,72056],{},"发现直接存对象是使用不了的!!!",[22484,72058,72060],{"id":72059},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72062,72063],{},[420,72064],{"alt":23,"src":72065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[18,72067,72069],{"className":51110,"code":72068,"language":51112,"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,72070,72071,72079,72089,72099,72108,72116,72120,72124,72150,72169,72177,72181,72186,72191],{"__ignoreMap":23},[28,72072,72073,72075,72077],{"class":30,"line":31},[28,72074,1529],{"class":34},[28,72076,52290],{"class":51777},[28,72078,51784],{"class":34},[28,72080,72081,72083,72085,72087],{"class":30,"line":77},[28,72082,11707],{"class":42},[28,72084,70448],{"class":38},[28,72086,14050],{"class":42},[28,72088,16058],{"class":34},[28,72090,72091,72094,72097],{"class":30,"line":114},[28,72092,72093],{"class":34},"      uname: ",[28,72095,72096],{"class":735},"'pink老师'",[28,72098,31945],{"class":34},[28,72100,72101,72104,72106],{"class":30,"line":128},[28,72102,72103],{"class":34},"      age: ",[28,72105,1270],{"class":38},[28,72107,31945],{"class":34},[28,72109,72110,72113],{"class":30,"line":393},[28,72111,72112],{"class":34},"      gender: ",[28,72114,72115],{"class":735},"'女'\n",[28,72117,72118],{"class":30,"line":409},[28,72119,2677],{"class":34},[28,72121,72122],{"class":30,"line":1711},[28,72123,72024],{"class":73},[28,72125,72126,72129,72132,72134,72137,72139,72142,72144,72147],{"class":30,"line":1802},[28,72127,72128],{"class":34},"  localStorage.",[28,72130,72131],{"class":2453},"setItem",[28,72133,367],{"class":34},[28,72135,72136],{"class":735},"'obj'",[28,72138,12921],{"class":34},[28,72140,72141],{"class":38},"JSON",[28,72143,1179],{"class":34},[28,72145,72146],{"class":2453},"stringify",[28,72148,72149],{"class":34},"(obj))\n",[28,72151,72152,72155,72157,72160,72163,72165,72167],{"class":30,"line":1808},[28,72153,72154],{"class":34},"  console.",[28,72156,58724],{"class":2453},[28,72158,72159],{"class":34},"(localStorage.",[28,72161,72162],{"class":2453},"getItem",[28,72164,367],{"class":34},[28,72166,72136],{"class":735},[28,72168,30980],{"class":34},[28,72170,72171,72173,72175],{"class":30,"line":1820},[28,72172,52894],{"class":34},[28,72174,52290],{"class":51777},[28,72176,51784],{"class":34},[28,72178,72179],{"class":30,"line":2102},[28,72180,71098],{"class":34},[28,72182,72183],{"class":30,"line":2107},[28,72184,72185],{"class":34},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[28,72187,72188],{"class":30,"line":2113},[28,72189,72190],{"class":34},"  类型是字符串的\n",[28,72192,72193],{"class":30,"line":2118},[28,72194,72195],{"class":34},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22484,72197,72199],{"id":72198},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72201,72202],{},[420,72203],{"alt":23,"src":72204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72206,72207],{},[420,72208],{"alt":23,"src":72209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[18,72211,72213],{"className":53544,"code":72212,"language":53546,"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,72214,72215,72223,72227,72231,72235,72239,72243,72248,72253,72258,72263,72268,72273,72278,72283],{"__ignoreMap":23},[28,72216,72217,72219,72221],{"class":30,"line":31},[28,72218,52621],{"class":34},[28,72220,52290],{"class":51777},[28,72222,51784],{"class":34},[28,72224,72225],{"class":30,"line":77},[28,72226,72000],{"class":34},[28,72228,72229],{"class":30,"line":114},[28,72230,72005],{"class":34},[28,72232,72233],{"class":30,"line":128},[28,72234,72010],{"class":34},[28,72236,72237],{"class":30,"line":393},[28,72238,72015],{"class":34},[28,72240,72241],{"class":30,"line":409},[28,72242,2677],{"class":34},[28,72244,72245],{"class":30,"line":1711},[28,72246,72247],{"class":34},"    \u002F\u002F 1.存储复杂数据类型\n",[28,72249,72250],{"class":30,"line":1802},[28,72251,72252],{"class":34},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[28,72254,72255],{"class":30,"line":1808},[28,72256,72257],{"class":34},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[28,72259,72260],{"class":30,"line":1820},[28,72261,72262],{"class":34},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[28,72264,72265],{"class":30,"line":2102},[28,72266,72267],{"class":34},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[28,72269,72270],{"class":30,"line":2107},[28,72271,72272],{"class":34},"    \u002F\u002F 取\n",[28,72274,72275],{"class":30,"line":2113},[28,72276,72277],{"class":34},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[28,72279,72280],{"class":30,"line":2118},[28,72281,72282],{"class":34},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[28,72284,72285,72287,72289],{"class":30,"line":2132},[28,72286,52894],{"class":34},[28,72288,52290],{"class":51777},[28,72290,51784],{"class":34},[14,72292,72293],{},[420,72294],{"alt":23,"src":72295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[605,72297,72299],{"id":72298},"_356-数组map方法","3.5.6 数组map方法",[14,72301,72302],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72304,72305],{},[420,72306],{"alt":23,"src":72307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72309,72310],{},[420,72311],{"alt":23,"src":72312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72314,72315,72318],{},[780,72316,72317],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72320,72321],{},"map有返回值，但是forEach没有返回值",[14,72323,72324],{},"map是个方法。用的时候要加 ()",[14,72326,72327],{},"map返回的是一个数组",[605,72329,72331],{"id":72330},"_357-数组中join方法","3.5.7 数组中join方法",[14,72333,72334],{},[420,72335],{"alt":23,"src":72336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72338,72339],{},"类似于python中拼接字符串一样！",[588,72341,72342,72345,72348],{},[591,72343,72344],{},"小括号为空则逗号分开",[591,72346,72347],{},"小括号为空字符串 ''，则元素之间没有分隔符",[591,72349,72350],{},"小括号用啥符号就用进行分割",[605,72352,72354],{"id":72353},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[588,72356,72357,72360,72363,72366,72369],{},[591,72358,72359],{},"记住本地时间获取快速方式：new Date().toDateString()",[591,72361,72362],{},"尽量减少DOM操作，用好map+join的渲染方式",[591,72364,72365],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[591,72367,72368],{},"return可以实现函数的结束",[591,72370,72371],{},"禁止跳转是 preventDefault() 不要忘记",[18,72373,72375],{"className":51110,"code":72374,"language":51112,"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,72376,72377,72387,72401,72405,72413,72427,72447,72459,72467,72473,72483,72493,72497,72501,72507,72517,72529,72533,72537,72544,72556,72570,72580,72584,72588,72595,72602,72609,72621,72633,72643,72655,72659,72663,72670,72677,72689,72701,72711,72723,72753,72757,72761,72768,72780,72792,72816,72826,72836,72840,72844,72852,72863,72875,72887,72899,72916,72928,72940,72944,72948,72955,72967,72979,72991,73002,73020,73033,73045,73069,73080,73084,73088,73096,73106,73110,73114,73120,73132,73143,73153,73157,73161,73167,73189,73193,73197,73203,73209,73221,73231,73243,73273,73286,73303,73307,73311,73322,73344,73354,73358,73362,73375,73385,73397,73409,73421,73433,73443,73453,73463,73474,73487,73491,73499,73507,73511,73519,73532,73552,73585,73618,73651,73677,73695,73713,73721,73747,73765,73783,73801,73819,73837,73845,73853,73871,73879,73908,73916,73924,73932,73945,73957,73969,73981,73993,74005,74018,74030,74038,74046,74054,74059,74064,74068,74072,74076,74080,74084,74088,74093,74098,74103,74108,74116,74124,74132,74137,74142,74147,74152,74157,74162,74167,74172,74177,74182,74187,74192,74197,74202,74206,74211,74216,74226,74235,74239,74244,74253,74269,74311,74351,74390,74455,74463,74467,74472,74490,74498,74503,74508,74538,74544,74549,74562,74574,74586,74598,74610,74622,74634,74638,74648,74652,74657,74662,74666,74675,74679,74684,74689,74708,74713,74733,74737,74742,74746,74751,74769,74787,74805,74824,74843,74862,74867,74873,74894,74900,74909,74915,74921,74927,74954,74967,74972,74982,74988,74994,75000,75006,75011,75017,75023,75029,75035,75068,75073,75078,75083,75088,75094,75100,75106,75117,75122,75128,75135,75149,75155,75179,75184,75189,75195,75201,75222,75228,75241,75247,75253,75259,75265,75270,75276,75282,75288,75306,75320,75326,75334,75340,75362,75367,75372,75377,75382,75387,75396,75405,75410],{"__ignoreMap":23},[28,72378,72379,72381,72383,72385],{"class":30,"line":31},[28,72380,51774],{"class":34},[28,72382,51778],{"class":51777},[28,72384,51781],{"class":2453},[28,72386,51784],{"class":34},[28,72388,72389,72391,72393,72395,72397,72399],{"class":30,"line":77},[28,72390,1529],{"class":34},[28,72392,51112],{"class":51777},[28,72394,51793],{"class":2453},[28,72396,83],{"class":34},[28,72398,51798],{"class":735},[28,72400,51784],{"class":34},[28,72402,72403],{"class":30,"line":114},[28,72404,2890],{"emptyLinePlaceholder":562},[28,72406,72407,72409,72411],{"class":30,"line":128},[28,72408,1529],{"class":34},[28,72410,51811],{"class":51777},[28,72412,51784],{"class":34},[28,72414,72415,72417,72419,72421,72423,72425],{"class":30,"line":393},[28,72416,52621],{"class":34},[28,72418,51821],{"class":51777},[28,72420,51824],{"class":2453},[28,72422,83],{"class":34},[28,72424,51829],{"class":735},[28,72426,51784],{"class":34},[28,72428,72429,72431,72433,72435,72437,72439,72441,72443,72445],{"class":30,"line":409},[28,72430,52621],{"class":34},[28,72432,51821],{"class":51777},[28,72434,15406],{"class":2453},[28,72436,83],{"class":34},[28,72438,51868],{"class":735},[28,72440,51848],{"class":2453},[28,72442,83],{"class":34},[28,72444,51875],{"class":735},[28,72446,51784],{"class":34},[28,72448,72449,72451,72453,72455,72457],{"class":30,"line":1711},[28,72450,52621],{"class":34},[28,72452,51884],{"class":51777},[28,72454,51887],{"class":34},[28,72456,51884],{"class":51777},[28,72458,51784],{"class":34},[28,72460,72461,72463,72465],{"class":30,"line":1802},[28,72462,52621],{"class":34},[28,72464,547],{"class":51777},[28,72466,51784],{"class":34},[28,72468,72469,72471],{"class":30,"line":1808},[28,72470,6891],{"class":51777},[28,72472,16058],{"class":34},[28,72474,72475,72477,72479,72481],{"class":30,"line":1820},[28,72476,55172],{"class":38},[28,72478,51914],{"class":34},[28,72480,822],{"class":38},[28,72482,1781],{"class":34},[28,72484,72485,72487,72489,72491],{"class":30,"line":2102},[28,72486,55183],{"class":38},[28,72488,51914],{"class":34},[28,72490,822],{"class":38},[28,72492,1781],{"class":34},[28,72494,72495],{"class":30,"line":2107},[28,72496,2677],{"class":34},[28,72498,72499],{"class":30,"line":2113},[28,72500,2890],{"emptyLinePlaceholder":562},[28,72502,72503,72505],{"class":30,"line":2118},[28,72504,57756],{"class":51777},[28,72506,16058],{"class":34},[28,72508,72509,72511,72513,72515],{"class":30,"line":2132},[28,72510,57763],{"class":38},[28,72512,51914],{"class":34},[28,72514,52069],{"class":38},[28,72516,1781],{"class":34},[28,72518,72519,72521,72523,72525,72527],{"class":30,"line":2137},[28,72520,62554],{"class":38},[28,72522,51914],{"class":34},[28,72524,1320],{"class":38},[28,72526,51969],{"class":42},[28,72528,1781],{"class":34},[28,72530,72531],{"class":30,"line":2143},[28,72532,2677],{"class":34},[28,72534,72535],{"class":30,"line":2164},[28,72536,2890],{"emptyLinePlaceholder":562},[28,72538,72539,72542],{"class":30,"line":2169},[28,72540,72541],{"class":2453},"    .info",[28,72543,16058],{"class":34},[28,72545,72546,72548,72550,72552,72554],{"class":30,"line":2183},[28,72547,55248],{"class":38},[28,72549,51914],{"class":34},[28,72551,51966],{"class":38},[28,72553,51969],{"class":42},[28,72555,1781],{"class":34},[28,72557,72558,72560,72562,72564,72566,72568],{"class":30,"line":2188},[28,72559,55183],{"class":38},[28,72561,51914],{"class":34},[28,72563,225],{"class":38},[28,72565,51969],{"class":42},[28,72567,52033],{"class":38},[28,72569,1781],{"class":34},[28,72571,72572,72574,72576,72578],{"class":30,"line":2217},[28,72573,57763],{"class":38},[28,72575,51914],{"class":34},[28,72577,52069],{"class":38},[28,72579,1781],{"class":34},[28,72581,72582],{"class":30,"line":2222},[28,72583,2677],{"class":34},[28,72585,72586],{"class":30,"line":2239},[28,72587,2890],{"emptyLinePlaceholder":562},[28,72589,72590,72593],{"class":30,"line":2244},[28,72591,72592],{"class":2453},"    .uname",[28,72594,31945],{"class":34},[28,72596,72597,72600],{"class":30,"line":2249},[28,72598,72599],{"class":2453},"    .age",[28,72601,31945],{"class":34},[28,72603,72604,72607],{"class":30,"line":2254},[28,72605,72606],{"class":2453},"    .salary",[28,72608,16058],{"class":34},[28,72610,72611,72613,72615,72617,72619],{"class":30,"line":2268},[28,72612,55248],{"class":38},[28,72614,51914],{"class":34},[28,72616,938],{"class":38},[28,72618,51969],{"class":42},[28,72620,1781],{"class":34},[28,72622,72623,72625,72627,72629,72631],{"class":30,"line":2273},[28,72624,55262],{"class":38},[28,72626,51914],{"class":34},[28,72628,1320],{"class":38},[28,72630,51969],{"class":42},[28,72632,1781],{"class":34},[28,72634,72635,72637,72639,72641],{"class":30,"line":3067},[28,72636,62257],{"class":38},[28,72638,51914],{"class":34},[28,72640,55214],{"class":38},[28,72642,1781],{"class":34},[28,72644,72645,72647,72649,72651,72653],{"class":30,"line":3081},[28,72646,62227],{"class":38},[28,72648,51914],{"class":34},[28,72650,1196],{"class":38},[28,72652,51969],{"class":42},[28,72654,1781],{"class":34},[28,72656,72657],{"class":30,"line":3089},[28,72658,2677],{"class":34},[28,72660,72661],{"class":30,"line":3094},[28,72662,2890],{"emptyLinePlaceholder":562},[28,72664,72665,72668],{"class":30,"line":3100},[28,72666,72667],{"class":2453},"    .gender",[28,72669,31945],{"class":34},[28,72671,72672,72675],{"class":30,"line":3106},[28,72673,72674],{"class":2453},"    .city",[28,72676,16058],{"class":34},[28,72678,72679,72681,72683,72685,72687],{"class":30,"line":3111},[28,72680,55248],{"class":38},[28,72682,51914],{"class":34},[28,72684,938],{"class":38},[28,72686,51969],{"class":42},[28,72688,1781],{"class":34},[28,72690,72691,72693,72695,72697,72699],{"class":30,"line":8436},[28,72692,55262],{"class":38},[28,72694,51914],{"class":34},[28,72696,1445],{"class":38},[28,72698,51969],{"class":42},[28,72700,1781],{"class":34},[28,72702,72703,72705,72707,72709],{"class":30,"line":8460},[28,72704,62257],{"class":38},[28,72706,51914],{"class":34},[28,72708,55214],{"class":38},[28,72710,1781],{"class":34},[28,72712,72713,72715,72717,72719,72721],{"class":30,"line":8465},[28,72714,62227],{"class":38},[28,72716,51914],{"class":34},[28,72718,1196],{"class":38},[28,72720,51969],{"class":42},[28,72722,1781],{"class":34},[28,72724,72725,72727,72729,72731,72733,72735,72738,72740,72742,72744,72747,72749,72751],{"class":30,"line":8471},[28,72726,62454],{"class":38},[28,72728,51914],{"class":34},[28,72730,39],{"class":38},[28,72732,51969],{"class":42},[28,72734,51998],{"class":38},[28,72736,72737],{"class":38}," rgb",[28,72739,367],{"class":34},[28,72741,2212],{"class":38},[28,72743,12921],{"class":34},[28,72745,72746],{"class":38},"197",[28,72748,12921],{"class":34},[28,72750,72746],{"class":38},[28,72752,3209],{"class":34},[28,72754,72755],{"class":30,"line":8498},[28,72756,2677],{"class":34},[28,72758,72759],{"class":30,"line":8503},[28,72760,2890],{"emptyLinePlaceholder":562},[28,72762,72763,72766],{"class":30,"line":8509},[28,72764,72765],{"class":51777},"    button",[28,72767,16058],{"class":34},[28,72769,72770,72772,72774,72776,72778],{"class":30,"line":8521},[28,72771,55262],{"class":38},[28,72773,51914],{"class":34},[28,72775,1445],{"class":38},[28,72777,51969],{"class":42},[28,72779,1781],{"class":34},[28,72781,72782,72784,72786,72788,72790],{"class":30,"line":8533},[28,72783,55248],{"class":38},[28,72785,51914],{"class":34},[28,72787,1107],{"class":38},[28,72789,51969],{"class":42},[28,72791,1781],{"class":34},[28,72793,72794,72796,72798,72801,72803,72805,72807,72810,72812,72814],{"class":30,"line":8545},[28,72795,55361],{"class":38},[28,72797,51914],{"class":34},[28,72799,72800],{"class":38},"rgb",[28,72802,367],{"class":34},[28,72804,1588],{"class":38},[28,72806,12921],{"class":34},[28,72808,72809],{"class":38},"187",[28,72811,12921],{"class":34},[28,72813,926],{"class":38},[28,72815,3209],{"class":34},[28,72817,72818,72820,72822,72824],{"class":30,"line":10202},[28,72819,57893],{"class":38},[28,72821,51914],{"class":34},[28,72823,61319],{"class":38},[28,72825,1781],{"class":34},[28,72827,72828,72830,72832,72834],{"class":30,"line":10227},[28,72829,62454],{"class":38},[28,72831,51914],{"class":34},[28,72833,822],{"class":38},[28,72835,1781],{"class":34},[28,72837,72838],{"class":30,"line":10250},[28,72839,2677],{"class":34},[28,72841,72842],{"class":30,"line":10274},[28,72843,2890],{"emptyLinePlaceholder":562},[28,72845,72846,72848,72850],{"class":30,"line":10279},[28,72847,72765],{"class":51777},[28,72849,52165],{"class":51777},[28,72851,16058],{"class":34},[28,72853,72854,72856,72858,72861],{"class":30,"line":10284},[28,72855,55486],{"class":38},[28,72857,51914],{"class":34},[28,72859,72860],{"class":38},"inline-block",[28,72862,1781],{"class":34},[28,72864,72865,72867,72869,72871,72873],{"class":30,"line":10289},[28,72866,55248],{"class":38},[28,72868,51914],{"class":34},[28,72870,225],{"class":38},[28,72872,51969],{"class":42},[28,72874,1781],{"class":34},[28,72876,72877,72879,72881,72883,72885],{"class":30,"line":10298},[28,72878,55262],{"class":38},[28,72880,51914],{"class":34},[28,72882,225],{"class":38},[28,72884,51969],{"class":42},[28,72886,1781],{"class":34},[28,72888,72889,72891,72893,72895,72897],{"class":30,"line":10303},[28,72890,57836],{"class":38},[28,72892,51914],{"class":34},[28,72894,1095],{"class":38},[28,72896,51969],{"class":42},[28,72898,1781],{"class":34},[28,72900,72901,72903,72905,72907,72909,72911,72914],{"class":30,"line":10309},[28,72902,62454],{"class":38},[28,72904,51914],{"class":34},[28,72906,39],{"class":38},[28,72908,51969],{"class":42},[28,72910,51998],{"class":38},[28,72912,72913],{"class":38}," #fff",[28,72915,1781],{"class":34},[28,72917,72918,72920,72922,72924,72926],{"class":30,"line":10330},[28,72919,55611],{"class":38},[28,72921,51914],{"class":34},[28,72923,108],{"class":38},[28,72925,51969],{"class":42},[28,72927,1781],{"class":34},[28,72929,72930,72932,72934,72936,72938],{"class":30,"line":10336},[28,72931,62227],{"class":38},[28,72933,51914],{"class":34},[28,72935,39],{"class":38},[28,72937,51969],{"class":42},[28,72939,1781],{"class":34},[28,72941,72942],{"class":30,"line":10350},[28,72943,2677],{"class":34},[28,72945,72946],{"class":30,"line":10356},[28,72947,2890],{"emptyLinePlaceholder":562},[28,72949,72950,72953],{"class":30,"line":10383},[28,72951,72952],{"class":2453},"    .total",[28,72954,16058],{"class":34},[28,72956,72957,72959,72961,72963,72965],{"class":30,"line":10392},[28,72958,55248],{"class":38},[28,72960,51914],{"class":34},[28,72962,62106],{"class":38},[28,72964,51969],{"class":42},[28,72966,1781],{"class":34},[28,72968,72969,72971,72973,72975,72977],{"class":30,"line":10398},[28,72970,55262],{"class":38},[28,72972,51914],{"class":34},[28,72974,1026],{"class":38},[28,72976,51969],{"class":42},[28,72978,1781],{"class":34},[28,72980,72981,72983,72985,72987,72989],{"class":30,"line":10406},[28,72982,57836],{"class":38},[28,72984,51914],{"class":34},[28,72986,1026],{"class":38},[28,72988,51969],{"class":42},[28,72990,1781],{"class":34},[28,72992,72993,72995,72997,73000],{"class":30,"line":10411},[28,72994,57763],{"class":38},[28,72996,51914],{"class":34},[28,72998,72999],{"class":38},"right",[28,73001,1781],{"class":34},[28,73003,73004,73006,73008,73010,73012,73014,73016,73018],{"class":30,"line":17090},[28,73005,55183],{"class":38},[28,73007,51914],{"class":34},[28,73009,1026],{"class":38},[28,73011,51969],{"class":42},[28,73013,52033],{"class":38},[28,73015,2528],{"class":38},[28,73017,51969],{"class":42},[28,73019,1781],{"class":34},[28,73021,73022,73025,73027,73029,73031],{"class":30,"line":17096},[28,73023,73024],{"class":38},"      padding-right",[28,73026,51914],{"class":34},[28,73028,225],{"class":38},[28,73030,51969],{"class":42},[28,73032,1781],{"class":34},[28,73034,73035,73037,73039,73041,73043],{"class":30,"line":17119},[28,73036,55399],{"class":38},[28,73038,51914],{"class":34},[28,73040,317],{"class":38},[28,73042,51969],{"class":42},[28,73044,1781],{"class":34},[28,73046,73047,73049,73051,73053,73055,73058,73060,73063,73065,73067],{"class":30,"line":17125},[28,73048,55361],{"class":38},[28,73050,51914],{"class":34},[28,73052,72800],{"class":38},[28,73054,367],{"class":34},[28,73056,73057],{"class":38},"237",[28,73059,12921],{"class":34},[28,73061,73062],{"class":38},"235",[28,73064,12921],{"class":34},[28,73066,73062],{"class":38},[28,73068,3209],{"class":34},[28,73070,73071,73074,73076,73078],{"class":30,"line":17148},[28,73072,73073],{"class":38},"      box-sizing",[28,73075,51914],{"class":34},[28,73077,60982],{"class":38},[28,73079,1781],{"class":34},[28,73081,73082],{"class":30,"line":17162},[28,73083,2677],{"class":34},[28,73085,73086],{"class":30,"line":17182},[28,73087,2890],{"emptyLinePlaceholder":562},[28,73089,73090,73092,73094],{"class":30,"line":17188},[28,73091,72952],{"class":2453},[28,73093,52165],{"class":51777},[28,73095,16058],{"class":34},[28,73097,73098,73100,73102,73104],{"class":30,"line":17199},[28,73099,57893],{"class":38},[28,73101,51914],{"class":34},[28,73103,57898],{"class":38},[28,73105,1781],{"class":34},[28,73107,73108],{"class":30,"line":17222},[28,73109,2677],{"class":34},[28,73111,73112],{"class":30,"line":17244},[28,73113,2890],{"emptyLinePlaceholder":562},[28,73115,73116,73118],{"class":30,"line":17249},[28,73117,65500],{"class":51777},[28,73119,16058],{"class":34},[28,73121,73122,73124,73126,73128,73130],{"class":30,"line":17255},[28,73123,55248],{"class":38},[28,73125,51914],{"class":34},[28,73127,62106],{"class":38},[28,73129,51969],{"class":42},[28,73131,1781],{"class":34},[28,73133,73134,73136,73138,73141],{"class":30,"line":17269},[28,73135,55183],{"class":38},[28,73137,51914],{"class":34},[28,73139,73140],{"class":38},"auto",[28,73142,1781],{"class":34},[28,73144,73145,73147,73149,73151],{"class":30,"line":17282},[28,73146,65507],{"class":38},[28,73148,51914],{"class":34},[28,73150,65512],{"class":38},[28,73152,1781],{"class":34},[28,73154,73155],{"class":30,"line":17287},[28,73156,2677],{"class":34},[28,73158,73159],{"class":30,"line":17301},[28,73160,2890],{"emptyLinePlaceholder":562},[28,73162,73163,73165],{"class":30,"line":17306},[28,73164,65592],{"class":51777},[28,73166,16058],{"class":34},[28,73168,73169,73171,73173,73175,73177,73179,73181,73183,73185,73187],{"class":30,"line":17312},[28,73170,55361],{"class":38},[28,73172,51914],{"class":34},[28,73174,72800],{"class":38},[28,73176,367],{"class":34},[28,73178,73057],{"class":38},[28,73180,12921],{"class":34},[28,73182,73062],{"class":38},[28,73184,12921],{"class":34},[28,73186,73062],{"class":38},[28,73188,3209],{"class":34},[28,73190,73191],{"class":30,"line":17317},[28,73192,2677],{"class":34},[28,73194,73195],{"class":30,"line":17331},[28,73196,2890],{"emptyLinePlaceholder":562},[28,73198,73199,73201],{"class":30,"line":17336},[28,73200,65592],{"class":51777},[28,73202,31945],{"class":34},[28,73204,73205,73207],{"class":30,"line":17341},[28,73206,65658],{"class":51777},[28,73208,16058],{"class":34},[28,73210,73211,73213,73215,73217,73219],{"class":30,"line":17355},[28,73212,55262],{"class":38},[28,73214,51914],{"class":34},[28,73216,901],{"class":38},[28,73218,51969],{"class":42},[28,73220,1781],{"class":34},[28,73222,73223,73225,73227,73229],{"class":30,"line":17367},[28,73224,57763],{"class":38},[28,73226,51914],{"class":34},[28,73228,24222],{"class":38},[28,73230,1781],{"class":34},[28,73232,73233,73235,73237,73239,73241],{"class":30,"line":17372},[28,73234,55399],{"class":38},[28,73236,51914],{"class":34},[28,73238,1170],{"class":38},[28,73240,51969],{"class":42},[28,73242,1781],{"class":34},[28,73244,73245,73247,73249,73251,73253,73255,73257,73259,73262,73264,73267,73269,73271],{"class":30,"line":17385},[28,73246,62454],{"class":38},[28,73248,51914],{"class":34},[28,73250,39],{"class":38},[28,73252,51969],{"class":42},[28,73254,51998],{"class":38},[28,73256,72737],{"class":38},[28,73258,367],{"class":34},[28,73260,73261],{"class":38},"228",[28,73263,12921],{"class":34},[28,73265,73266],{"class":38},"225",[28,73268,12921],{"class":34},[28,73270,73266],{"class":38},[28,73272,3209],{"class":34},[28,73274,73275,73278,73280,73282,73284],{"class":30,"line":17390},[28,73276,73277],{"class":38},"      padding-left",[28,73279,51914],{"class":34},[28,73281,108],{"class":38},[28,73283,51969],{"class":42},[28,73285,1781],{"class":34},[28,73287,73288,73290,73292,73294,73297,73299,73301],{"class":30,"line":17395},[28,73289,62337],{"class":38},[28,73291,51914],{"class":34},[28,73293,28607],{"class":38},[28,73295,73296],{"class":38}," linear",[28,73298,62344],{"class":38},[28,73300,1315],{"class":42},[28,73302,1781],{"class":34},[28,73304,73305],{"class":30,"line":17400},[28,73306,2677],{"class":34},[28,73308,73309],{"class":30,"line":17413},[28,73310,2890],{"emptyLinePlaceholder":562},[28,73312,73313,73316,73318,73320],{"class":30,"line":17418},[28,73314,73315],{"class":51777},"    tbody",[28,73317,70621],{"class":51777},[28,73319,61417],{"class":2453},[28,73321,16058],{"class":34},[28,73323,73324,73326,73328,73330,73332,73334,73336,73338,73340,73342],{"class":30,"line":33111},[28,73325,55361],{"class":38},[28,73327,51914],{"class":34},[28,73329,72800],{"class":38},[28,73331,367],{"class":34},[28,73333,73057],{"class":38},[28,73335,12921],{"class":34},[28,73337,73062],{"class":38},[28,73339,12921],{"class":34},[28,73341,73062],{"class":38},[28,73343,3209],{"class":34},[28,73345,73346,73348,73350,73352],{"class":30,"line":33117},[28,73347,62502],{"class":38},[28,73349,51914],{"class":34},[28,73351,62507],{"class":38},[28,73353,1781],{"class":34},[28,73355,73356],{"class":30,"line":33123},[28,73357,2677],{"class":34},[28,73359,73360],{"class":30,"line":33129},[28,73361,2890],{"emptyLinePlaceholder":562},[28,73363,73364,73366,73368,73371,73373],{"class":30,"line":33135},[28,73365,73315],{"class":51777},[28,73367,70621],{"class":51777},[28,73369,73370],{"class":51777}," td",[28,73372,1889],{"class":51777},[28,73374,16058],{"class":34},[28,73376,73377,73379,73381,73383],{"class":30,"line":33146},[28,73378,55486],{"class":38},[28,73380,51914],{"class":34},[28,73382,61346],{"class":38},[28,73384,1781],{"class":34},[28,73386,73387,73389,73391,73393,73395],{"class":30,"line":33152},[28,73388,55248],{"class":38},[28,73390,51914],{"class":34},[28,73392,1526],{"class":38},[28,73394,51969],{"class":42},[28,73396,1781],{"class":34},[28,73398,73399,73401,73403,73405,73407],{"class":30,"line":33172},[28,73400,55262],{"class":38},[28,73402,51914],{"class":34},[28,73404,1445],{"class":38},[28,73406,51969],{"class":42},[28,73408,1781],{"class":34},[28,73410,73411,73413,73415,73417,73419],{"class":30,"line":33178},[28,73412,57836],{"class":38},[28,73414,51914],{"class":34},[28,73416,1445],{"class":38},[28,73418,51969],{"class":42},[28,73420,1781],{"class":34},[28,73422,73423,73425,73427,73429,73431],{"class":30,"line":33189},[28,73424,62554],{"class":38},[28,73426,51914],{"class":34},[28,73428,93],{"class":38},[28,73430,51969],{"class":42},[28,73432,1781],{"class":34},[28,73434,73435,73437,73439,73441],{"class":30,"line":33195},[28,73436,57893],{"class":38},[28,73438,51914],{"class":34},[28,73440,61319],{"class":38},[28,73442,1781],{"class":34},[28,73444,73445,73447,73449,73451],{"class":30,"line":33201},[28,73446,57763],{"class":38},[28,73448,51914],{"class":34},[28,73450,52069],{"class":38},[28,73452,1781],{"class":34},[28,73454,73455,73457,73459,73461],{"class":30,"line":33207},[28,73456,64447],{"class":38},[28,73458,51914],{"class":34},[28,73460,55214],{"class":38},[28,73462,1781],{"class":34},[28,73464,73465,73467,73469,73472],{"class":30,"line":33213},[28,73466,55361],{"class":38},[28,73468,51914],{"class":34},[28,73470,73471],{"class":38},"orange",[28,73473,1781],{"class":34},[28,73475,73476,73478,73480,73483,73485],{"class":30,"line":33219},[28,73477,55611],{"class":38},[28,73479,51914],{"class":34},[28,73481,73482],{"class":38},"12.5",[28,73484,51969],{"class":42},[28,73486,1781],{"class":34},[28,73488,73489],{"class":30,"line":33225},[28,73490,2677],{"class":34},[28,73492,73493,73495,73497],{"class":30,"line":33231},[28,73494,52894],{"class":34},[28,73496,547],{"class":51777},[28,73498,51784],{"class":34},[28,73500,73501,73503,73505],{"class":30,"line":33251},[28,73502,52262],{"class":34},[28,73504,51811],{"class":51777},[28,73506,51784],{"class":34},[28,73508,73509],{"class":30,"line":33257},[28,73510,2890],{"emptyLinePlaceholder":562},[28,73512,73513,73515,73517],{"class":30,"line":33273},[28,73514,1529],{"class":34},[28,73516,52277],{"class":51777},[28,73518,51784],{"class":34},[28,73520,73521,73523,73525,73528,73530],{"class":30,"line":33279},[28,73522,52621],{"class":34},[28,73524,60],{"class":51777},[28,73526,73527],{"class":34},">学生就业统计表\u003C\u002F",[28,73529,60],{"class":51777},[28,73531,51784],{"class":34},[28,73533,73534,73536,73538,73540,73542,73544,73546,73548,73550],{"class":30,"line":33293},[28,73535,52621],{"class":34},[28,73537,67102],{"class":51777},[28,73539,53963],{"class":2453},[28,73541,83],{"class":34},[28,73543,63141],{"class":735},[28,73545,69547],{"class":2453},[28,73547,83],{"class":34},[28,73549,32255],{"class":735},[28,73551,51784],{"class":34},[28,73553,73554,73556,73558,73560,73562,73564,73566,73568,73570,73572,73574,73577,73579,73581,73583],{"class":30,"line":33299},[28,73555,51818],{"class":34},[28,73557,54298],{"class":51777},[28,73559,54301],{"class":2453},[28,73561,83],{"class":34},[28,73563,63176],{"class":735},[28,73565,15406],{"class":2453},[28,73567,83],{"class":34},[28,73569,69573],{"class":735},[28,73571,61497],{"class":2453},[28,73573,83],{"class":34},[28,73575,73576],{"class":735},"\"姓名\"",[28,73578,53963],{"class":2453},[28,73580,83],{"class":34},[28,73582,69573],{"class":735},[28,73584,51784],{"class":34},[28,73586,73587,73589,73591,73593,73595,73597,73599,73601,73603,73605,73607,73610,73612,73614,73616],{"class":30,"line":33314},[28,73588,51818],{"class":34},[28,73590,54298],{"class":51777},[28,73592,54301],{"class":2453},[28,73594,83],{"class":34},[28,73596,63176],{"class":735},[28,73598,15406],{"class":2453},[28,73600,83],{"class":34},[28,73602,69601],{"class":735},[28,73604,61497],{"class":2453},[28,73606,83],{"class":34},[28,73608,73609],{"class":735},"\"年龄\"",[28,73611,53963],{"class":2453},[28,73613,83],{"class":34},[28,73615,69601],{"class":735},[28,73617,51784],{"class":34},[28,73619,73620,73622,73624,73626,73628,73630,73632,73634,73636,73638,73640,73643,73645,73647,73649],{"class":30,"line":33320},[28,73621,51818],{"class":34},[28,73623,54298],{"class":51777},[28,73625,54301],{"class":2453},[28,73627,83],{"class":34},[28,73629,63176],{"class":735},[28,73631,15406],{"class":2453},[28,73633,83],{"class":34},[28,73635,69703],{"class":735},[28,73637,61497],{"class":2453},[28,73639,83],{"class":34},[28,73641,73642],{"class":735},"\"薪资\"",[28,73644,53963],{"class":2453},[28,73646,83],{"class":34},[28,73648,69703],{"class":735},[28,73650,51784],{"class":34},[28,73652,73653,73655,73657,73659,73661,73663,73665,73667,73669,73671,73673,73675],{"class":30,"line":33329},[28,73654,51818],{"class":34},[28,73656,69621],{"class":51777},[28,73658,15406],{"class":2453},[28,73660,83],{"class":34},[28,73662,69628],{"class":735},[28,73664,15445],{"class":2453},[28,73666,83],{"class":34},[28,73668,8140],{"class":735},[28,73670,53963],{"class":2453},[28,73672,83],{"class":34},[28,73674,69628],{"class":735},[28,73676,51784],{"class":34},[28,73678,73679,73681,73683,73685,73687,73689,73691,73693],{"class":30,"line":33335},[28,73680,55711],{"class":34},[28,73682,69643],{"class":51777},[28,73684,67128],{"class":2453},[28,73686,83],{"class":34},[28,73688,10447],{"class":735},[28,73690,69652],{"class":34},[28,73692,69643],{"class":51777},[28,73694,51784],{"class":34},[28,73696,73697,73699,73701,73703,73705,73707,73709,73711],{"class":30,"line":33344},[28,73698,55711],{"class":34},[28,73700,69643],{"class":51777},[28,73702,67128],{"class":2453},[28,73704,83],{"class":34},[28,73706,10516],{"class":735},[28,73708,69671],{"class":34},[28,73710,69643],{"class":51777},[28,73712,51784],{"class":34},[28,73714,73715,73717,73719],{"class":30,"line":33350},[28,73716,52253],{"class":34},[28,73718,69621],{"class":51777},[28,73720,51784],{"class":34},[28,73722,73723,73725,73727,73729,73731,73733,73735,73737,73739,73741,73743,73745],{"class":30,"line":33356},[28,73724,51818],{"class":34},[28,73726,69621],{"class":51777},[28,73728,15406],{"class":2453},[28,73730,83],{"class":34},[28,73732,69725],{"class":735},[28,73734,15445],{"class":2453},[28,73736,83],{"class":34},[28,73738,8140],{"class":735},[28,73740,53963],{"class":2453},[28,73742,83],{"class":34},[28,73744,69725],{"class":735},[28,73746,51784],{"class":34},[28,73748,73749,73751,73753,73755,73757,73759,73761,73763],{"class":30,"line":33365},[28,73750,55711],{"class":34},[28,73752,69643],{"class":51777},[28,73754,67128],{"class":2453},[28,73756,83],{"class":34},[28,73758,69746],{"class":735},[28,73760,69749],{"class":34},[28,73762,69643],{"class":51777},[28,73764,51784],{"class":34},[28,73766,73767,73769,73771,73773,73775,73777,73779,73781],{"class":30,"line":33371},[28,73768,55711],{"class":34},[28,73770,69643],{"class":51777},[28,73772,67128],{"class":2453},[28,73774,83],{"class":34},[28,73776,69766],{"class":735},[28,73778,69769],{"class":34},[28,73780,69643],{"class":51777},[28,73782,51784],{"class":34},[28,73784,73785,73787,73789,73791,73793,73795,73797,73799],{"class":30,"line":33382},[28,73786,55711],{"class":34},[28,73788,69643],{"class":51777},[28,73790,67128],{"class":2453},[28,73792,83],{"class":34},[28,73794,69786],{"class":735},[28,73796,69789],{"class":34},[28,73798,69643],{"class":51777},[28,73800,51784],{"class":34},[28,73802,73803,73805,73807,73809,73811,73813,73815,73817],{"class":30,"line":33388},[28,73804,55711],{"class":34},[28,73806,69643],{"class":51777},[28,73808,67128],{"class":2453},[28,73810,83],{"class":34},[28,73812,69806],{"class":735},[28,73814,69809],{"class":34},[28,73816,69643],{"class":51777},[28,73818,51784],{"class":34},[28,73820,73821,73823,73825,73827,73829,73831,73833,73835],{"class":30,"line":33407},[28,73822,55711],{"class":34},[28,73824,69643],{"class":51777},[28,73826,67128],{"class":2453},[28,73828,83],{"class":34},[28,73830,69826],{"class":735},[28,73832,69829],{"class":34},[28,73834,69643],{"class":51777},[28,73836,51784],{"class":34},[28,73838,73839,73841,73843],{"class":30,"line":33413},[28,73840,52253],{"class":34},[28,73842,69621],{"class":51777},[28,73844,51784],{"class":34},[28,73846,73847,73849,73851],{"class":30,"line":33424},[28,73848,51818],{"class":34},[28,73850,54364],{"class":51777},[28,73852,51784],{"class":34},[28,73854,73855,73857,73859,73862,73864,73867,73869],{"class":30,"line":33430},[28,73856,55711],{"class":34},[28,73858,28],{"class":51777},[28,73860,73861],{"class":34},">+\u003C\u002F",[28,73863,28],{"class":51777},[28,73865,73866],{"class":34},">添加\u003C\u002F",[28,73868,54364],{"class":51777},[28,73870,51784],{"class":34},[28,73872,73873,73875,73877],{"class":30,"line":33450},[28,73874,52894],{"class":34},[28,73876,67102],{"class":51777},[28,73878,51784],{"class":34},[28,73880,73881,73883,73885,73887,73889,73891,73894,73896,73899,73901,73904,73906],{"class":30,"line":33466},[28,73882,52621],{"class":34},[28,73884,52088],{"class":51777},[28,73886,53963],{"class":2453},[28,73888,83],{"class":34},[28,73890,63057],{"class":735},[28,73892,73893],{"class":34},">共有数据 \u003C",[28,73895,28],{"class":51777},[28,73897,73898],{"class":34},">0\u003C\u002F",[28,73900,28],{"class":51777},[28,73902,73903],{"class":34},"> 条\u003C\u002F",[28,73905,52088],{"class":51777},[28,73907,51784],{"class":34},[28,73909,73910,73912,73914],{"class":30,"line":33472},[28,73911,52621],{"class":34},[28,73913,768],{"class":51777},[28,73915,51784],{"class":34},[28,73917,73918,73920,73922],{"class":30,"line":33486},[28,73919,51818],{"class":34},[28,73921,771],{"class":51777},[28,73923,51784],{"class":34},[28,73925,73926,73928,73930],{"class":30,"line":33492},[28,73927,55711],{"class":34},[28,73929,774],{"class":51777},[28,73931,51784],{"class":34},[28,73933,73934,73936,73938,73941,73943],{"class":30,"line":33498},[28,73935,55779],{"class":34},[28,73937,777],{"class":51777},[28,73939,73940],{"class":34},">ID\u003C\u002F",[28,73942,777],{"class":51777},[28,73944,51784],{"class":34},[28,73946,73947,73949,73951,73953,73955],{"class":30,"line":33509},[28,73948,55779],{"class":34},[28,73950,777],{"class":51777},[28,73952,69932],{"class":34},[28,73954,777],{"class":51777},[28,73956,51784],{"class":34},[28,73958,73959,73961,73963,73965,73967],{"class":30,"line":33515},[28,73960,55779],{"class":34},[28,73962,777],{"class":51777},[28,73964,69945],{"class":34},[28,73966,777],{"class":51777},[28,73968,51784],{"class":34},[28,73970,73971,73973,73975,73977,73979],{"class":30,"line":33521},[28,73972,55779],{"class":34},[28,73974,777],{"class":51777},[28,73976,69958],{"class":34},[28,73978,777],{"class":51777},[28,73980,51784],{"class":34},[28,73982,73983,73985,73987,73989,73991],{"class":30,"line":33531},[28,73984,55779],{"class":34},[28,73986,777],{"class":51777},[28,73988,69971],{"class":34},[28,73990,777],{"class":51777},[28,73992,51784],{"class":34},[28,73994,73995,73997,73999,74001,74003],{"class":30,"line":33537},[28,73996,55779],{"class":34},[28,73998,777],{"class":51777},[28,74000,69984],{"class":34},[28,74002,777],{"class":51777},[28,74004,51784],{"class":34},[28,74006,74007,74009,74011,74014,74016],{"class":30,"line":33548},[28,74008,55779],{"class":34},[28,74010,777],{"class":51777},[28,74012,74013],{"class":34},">录入时间\u003C\u002F",[28,74015,777],{"class":51777},[28,74017,51784],{"class":34},[28,74019,74020,74022,74024,74026,74028],{"class":30,"line":33554},[28,74021,55779],{"class":34},[28,74023,777],{"class":51777},[28,74025,69997],{"class":34},[28,74027,777],{"class":51777},[28,74029,51784],{"class":34},[28,74031,74032,74034,74036],{"class":30,"line":33564},[28,74033,55884],{"class":34},[28,74035,774],{"class":51777},[28,74037,51784],{"class":34},[28,74039,74040,74042,74044],{"class":30,"line":33569},[28,74041,52253],{"class":34},[28,74043,771],{"class":51777},[28,74045,51784],{"class":34},[28,74047,74048,74050,74052],{"class":30,"line":33575},[28,74049,51818],{"class":34},[28,74051,815],{"class":51777},[28,74053,51784],{"class":34},[28,74055,74056],{"class":30,"line":33624},[28,74057,74058],{"class":73},"      \u003C!-- \u003Ctr>\n",[28,74060,74061],{"class":30,"line":33671},[28,74062,74063],{"class":73},"        \u003Ctd>1\u003C\u002Ftd>\n",[28,74065,74066],{"class":30,"line":33676},[28,74067,74063],{"class":73},[28,74069,74070],{"class":30,"line":33682},[28,74071,74063],{"class":73},[28,74073,74074],{"class":30,"line":33701},[28,74075,74063],{"class":73},[28,74077,74078],{"class":30,"line":33707},[28,74079,74063],{"class":73},[28,74081,74082],{"class":30,"line":33726},[28,74083,74063],{"class":73},[28,74085,74086],{"class":30,"line":33732},[28,74087,74063],{"class":73},[28,74089,74090],{"class":30,"line":33738},[28,74091,74092],{"class":73},"        \u003Ctd>\n",[28,74094,74095],{"class":30,"line":33748},[28,74096,74097],{"class":73},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[28,74099,74100],{"class":30,"line":33753},[28,74101,74102],{"class":73},"        \u003C\u002Ftd>\n",[28,74104,74105],{"class":30,"line":33759},[28,74106,74107],{"class":73},"      \u003C\u002Ftr> -->\n",[28,74109,74110,74112,74114],{"class":30,"line":33775},[28,74111,52253],{"class":34},[28,74113,815],{"class":51777},[28,74115,51784],{"class":34},[28,74117,74118,74120,74122],{"class":30,"line":33820},[28,74119,52894],{"class":34},[28,74121,768],{"class":51777},[28,74123,51784],{"class":34},[28,74125,74126,74128,74130],{"class":30,"line":33826},[28,74127,52621],{"class":34},[28,74129,52290],{"class":51777},[28,74131,51784],{"class":34},[28,74133,74134],{"class":30,"line":33832},[28,74135,74136],{"class":73},"    \u002F\u002F const initData = [{\n",[28,74138,74139],{"class":30,"line":33838},[28,74140,74141],{"class":73},"    \u002F\u002F   unameId: 1,\n",[28,74143,74144],{"class":30,"line":33849},[28,74145,74146],{"class":73},"    \u002F\u002F   uname: '华晨宇',\n",[28,74148,74149],{"class":30,"line":33855},[28,74150,74151],{"class":73},"    \u002F\u002F   age: 22,\n",[28,74153,74154],{"class":30,"line":33861},[28,74155,74156],{"class":73},"    \u002F\u002F   salary: 12000,\n",[28,74158,74159],{"class":30,"line":33867},[28,74160,74161],{"class":73},"    \u002F\u002F   gender: '男',\n",[28,74163,74164],{"class":30,"line":33885},[28,74165,74166],{"class":73},"    \u002F\u002F   city: '北京',\n",[28,74168,74169],{"class":30,"line":33899},[28,74170,74171],{"class":73},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[28,74173,74174],{"class":30,"line":33908},[28,74175,74176],{"class":73},"    \u002F\u002F }]\n",[28,74178,74179],{"class":30,"line":33917},[28,74180,74181],{"class":73},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[28,74183,74184],{"class":30,"line":33926},[28,74185,74186],{"class":73},"    \u002F\u002F 1.渲染业务\n",[28,74188,74189],{"class":30,"line":33935},[28,74190,74191],{"class":73},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[28,74193,74194],{"class":30,"line":33941},[28,74195,74196],{"class":73},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[28,74198,74199],{"class":30,"line":33947},[28,74200,74201],{"class":73},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[28,74203,74204],{"class":30,"line":33955},[28,74205,2890],{"emptyLinePlaceholder":562},[28,74207,74208],{"class":30,"line":33960},[28,74209,74210],{"class":73},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[28,74212,74213],{"class":30,"line":33966},[28,74214,74215],{"class":73},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[28,74217,74218,74220,74222,74224],{"class":30,"line":33977},[28,74219,11707],{"class":42},[28,74221,58172],{"class":38},[28,74223,14050],{"class":42},[28,74225,52315],{"class":34},[28,74227,74228,74231,74233],{"class":30,"line":33983},[28,74229,74230],{"class":34},"    console.",[28,74232,58724],{"class":2453},[28,74234,52889],{"class":34},[28,74236,74237],{"class":30,"line":34003},[28,74238,2890],{"emptyLinePlaceholder":562},[28,74240,74241],{"class":30,"line":34009},[28,74242,74243],{"class":73},"    \u002F\u002F 时间函数\n",[28,74245,74246,74248,74251],{"class":30,"line":34015},[28,74247,70561],{"class":42},[28,74249,74250],{"class":2453}," getTime",[28,74252,11339],{"class":34},[28,74254,74255,74257,74260,74262,74264,74267],{"class":30,"line":34021},[28,74256,58705],{"class":42},[28,74258,74259],{"class":38}," date",[28,74261,14050],{"class":42},[28,74263,12064],{"class":42},[28,74265,74266],{"class":2453}," Date",[28,74268,2466],{"class":34},[28,74270,74271,74273,74275,74277,74280,74283,74285,74287,74289,74292,74295,74297,74299,74301,74303,74305,74307,74309],{"class":30,"line":34038},[28,74272,58705],{"class":42},[28,74274,16577],{"class":38},[28,74276,14050],{"class":42},[28,74278,74279],{"class":34}," date.",[28,74281,74282],{"class":2453},"getHours",[28,74284,13536],{"class":34},[28,74286,1529],{"class":42},[28,74288,2528],{"class":38},[28,74290,74291],{"class":42}," ?",[28,74293,74294],{"class":735}," '0'",[28,74296,46043],{"class":42},[28,74298,74279],{"class":34},[28,74300,74282],{"class":2453},[28,74302,13536],{"class":34},[28,74304,1479],{"class":42},[28,74306,74279],{"class":34},[28,74308,74282],{"class":2453},[28,74310,2466],{"class":34},[28,74312,74313,74315,74318,74320,74322,74325,74327,74329,74331,74333,74335,74337,74339,74341,74343,74345,74347,74349],{"class":30,"line":34044},[28,74314,58705],{"class":42},[28,74316,74317],{"class":38}," m",[28,74319,14050],{"class":42},[28,74321,74279],{"class":34},[28,74323,74324],{"class":2453},"getMinutes",[28,74326,13536],{"class":34},[28,74328,1529],{"class":42},[28,74330,2528],{"class":38},[28,74332,74291],{"class":42},[28,74334,74294],{"class":735},[28,74336,46043],{"class":42},[28,74338,74279],{"class":34},[28,74340,74324],{"class":2453},[28,74342,13536],{"class":34},[28,74344,1479],{"class":42},[28,74346,74279],{"class":34},[28,74348,74324],{"class":2453},[28,74350,2466],{"class":34},[28,74352,74353,74355,74357,74359,74361,74364,74366,74368,74370,74372,74374,74376,74378,74380,74382,74384,74386,74388],{"class":30,"line":34050},[28,74354,58705],{"class":42},[28,74356,8916],{"class":38},[28,74358,14050],{"class":42},[28,74360,74279],{"class":34},[28,74362,74363],{"class":2453},"getSeconds",[28,74365,13536],{"class":34},[28,74367,1529],{"class":42},[28,74369,2528],{"class":38},[28,74371,74291],{"class":42},[28,74373,74294],{"class":735},[28,74375,46043],{"class":42},[28,74377,74279],{"class":34},[28,74379,74363],{"class":2453},[28,74381,13536],{"class":34},[28,74383,1479],{"class":42},[28,74385,74279],{"class":34},[28,74387,74363],{"class":2453},[28,74389,2466],{"class":34},[28,74391,74392,74394,74397,74399,74401,74404,74406,74409,74411,74414,74416,74418,74421,74423,74425,74427,74429,74431,74433,74436,74438,74441,74443,74446,74448,74450,74452],{"class":30,"line":34056},[28,74393,58705],{"class":42},[28,74395,74396],{"class":38}," str",[28,74398,14050],{"class":42},[28,74400,63380],{"class":735},[28,74402,74403],{"class":34},"date",[28,74405,1179],{"class":735},[28,74407,74408],{"class":2453},"getFullYear",[28,74410,2917],{"class":735},[28,74412,74413],{"class":735},"}\u002F${",[28,74415,74403],{"class":34},[28,74417,1179],{"class":735},[28,74419,74420],{"class":2453},"getMonth",[28,74422,13536],{"class":735},[28,74424,1104],{"class":42},[28,74426,25605],{"class":38},[28,74428,74413],{"class":735},[28,74430,74403],{"class":34},[28,74432,1179],{"class":735},[28,74434,74435],{"class":2453},"getDate",[28,74437,2917],{"class":735},[28,74439,74440],{"class":735},"} ${",[28,74442,1040],{"class":34},[28,74444,74445],{"class":735},"}:${",[28,74447,1165],{"class":34},[28,74449,74445],{"class":735},[28,74451,1315],{"class":34},[28,74453,74454],{"class":735},"}`\n",[28,74456,74457,74460],{"class":30,"line":34062},[28,74458,74459],{"class":42},"      return",[28,74461,74462],{"class":34}," str\n",[28,74464,74465],{"class":30,"line":34068},[28,74466,2677],{"class":34},[28,74468,74469],{"class":30,"line":34095},[28,74470,74471],{"class":73},"    \u002F\u002F 渲染函数\n",[28,74473,74474,74476,74478,74480,74482,74484,74486,74488],{"class":30,"line":34119},[28,74475,11707],{"class":42},[28,74477,70224],{"class":38},[28,74479,14050],{"class":42},[28,74481,54873],{"class":34},[28,74483,54876],{"class":2453},[28,74485,367],{"class":34},[28,74487,70235],{"class":735},[28,74489,228],{"class":34},[28,74491,74492,74494,74496],{"class":30,"line":34125},[28,74493,70561],{"class":42},[28,74495,70564],{"class":2453},[28,74497,11339],{"class":34},[28,74499,74500],{"class":30,"line":34131},[28,74501,74502],{"class":73},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[28,74504,74505],{"class":30,"line":34137},[28,74506,74507],{"class":73},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[28,74509,74510,74512,74515,74517,74519,74522,74524,74526,74528,74531,74533,74536],{"class":30,"line":34148},[28,74511,58705],{"class":42},[28,74513,74514],{"class":38}," trArr",[28,74516,14050],{"class":42},[28,74518,52442],{"class":34},[28,74520,74521],{"class":2453},"map",[28,74523,367],{"class":34},[28,74525,54926],{"class":42},[28,74527,2148],{"class":34},[28,74529,74530],{"class":5704},"ele",[28,74532,12921],{"class":34},[28,74534,74535],{"class":5704},"index",[28,74537,12928],{"class":34},[28,74539,74540,74542],{"class":30,"line":34159},[28,74541,15238],{"class":42},[28,74543,70645],{"class":735},[28,74545,74546],{"class":30,"line":34165},[28,74547,74548],{"class":735},"      \u003Ctr>\n",[28,74550,74551,74553,74555,74557,74560],{"class":30,"line":34182},[28,74552,70650],{"class":735},[28,74554,74530],{"class":34},[28,74556,1179],{"class":735},[28,74558,74559],{"class":34},"unameId",[28,74561,70665],{"class":735},[28,74563,74564,74566,74568,74570,74572],{"class":30,"line":34205},[28,74565,70650],{"class":735},[28,74567,74530],{"class":34},[28,74569,1179],{"class":735},[28,74571,70681],{"class":34},[28,74573,70665],{"class":735},[28,74575,74576,74578,74580,74582,74584],{"class":30,"line":34228},[28,74577,70650],{"class":735},[28,74579,74530],{"class":34},[28,74581,1179],{"class":735},[28,74583,70698],{"class":34},[28,74585,70665],{"class":735},[28,74587,74588,74590,74592,74594,74596],{"class":30,"line":34234},[28,74589,70650],{"class":735},[28,74591,74530],{"class":34},[28,74593,1179],{"class":735},[28,74595,70715],{"class":34},[28,74597,70665],{"class":735},[28,74599,74600,74602,74604,74606,74608],{"class":30,"line":34239},[28,74601,70650],{"class":735},[28,74603,74530],{"class":34},[28,74605,1179],{"class":735},[28,74607,70732],{"class":34},[28,74609,70665],{"class":735},[28,74611,74612,74614,74616,74618,74620],{"class":30,"line":34248},[28,74613,70650],{"class":735},[28,74615,74530],{"class":34},[28,74617,1179],{"class":735},[28,74619,70749],{"class":34},[28,74621,70665],{"class":735},[28,74623,74624,74626,74628,74630,74632],{"class":30,"line":34258},[28,74625,70650],{"class":735},[28,74627,74530],{"class":34},[28,74629,1179],{"class":735},[28,74631,2877],{"class":34},[28,74633,70665],{"class":735},[28,74635,74636],{"class":30,"line":34264},[28,74637,74092],{"class":735},[28,74639,74640,74643,74645],{"class":30,"line":34269},[28,74641,74642],{"class":735},"          \u003Ca href=\"#\" data-id=\"${",[28,74644,74535],{"class":34},[28,74646,74647],{"class":735},"}\">删除\u003C\u002Fa>\n",[28,74649,74650],{"class":30,"line":34275},[28,74651,74102],{"class":735},[28,74653,74654],{"class":30,"line":34288},[28,74655,74656],{"class":735},"      \u003C\u002Ftr>\n",[28,74658,74659],{"class":30,"line":34294},[28,74660,74661],{"class":735},"  `\n",[28,74663,74664],{"class":30,"line":34305},[28,74665,65292],{"class":34},[28,74667,74668,74670,74672],{"class":30,"line":34316},[28,74669,58721],{"class":34},[28,74671,58724],{"class":2453},[28,74673,74674],{"class":34},"(trArr)\n",[28,74676,74677],{"class":30,"line":34335},[28,74678,2890],{"emptyLinePlaceholder":562},[28,74680,74681],{"class":30,"line":49995},[28,74682,74683],{"class":73},"      \u002F\u002F (2) 把数组转换为字符串join\n",[28,74685,74686],{"class":30,"line":50000},[28,74687,74688],{"class":73},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[28,74690,74691,74693,74695,74698,74701,74703,74706],{"class":30,"line":50009},[28,74692,70576],{"class":34},[28,74694,83],{"class":42},[28,74696,74697],{"class":34}," trArr.",[28,74699,74700],{"class":2453},"join",[28,74702,367],{"class":34},[28,74704,74705],{"class":735},"''",[28,74707,228],{"class":34},[28,74709,74710],{"class":30,"line":50018},[28,74711,74712],{"class":73},"      \u002F\u002F 显示共有几条\n",[28,74714,74715,74717,74719,74721,74724,74727,74729,74731],{"class":30,"line":50023},[28,74716,56248],{"class":34},[28,74718,54876],{"class":2453},[28,74720,367],{"class":34},[28,74722,74723],{"class":735},"'.total span'",[28,74725,74726],{"class":34},").innerHTML ",[28,74728,83],{"class":42},[28,74730,52442],{"class":34},[28,74732,56308],{"class":38},[28,74734,74735],{"class":30,"line":50028},[28,74736,2677],{"class":34},[28,74738,74739],{"class":30,"line":50033},[28,74740,74741],{"class":73},"    \u002F\u002F render()\n",[28,74743,74744],{"class":30,"line":50046},[28,74745,2890],{"emptyLinePlaceholder":562},[28,74747,74748],{"class":30,"line":50051},[28,74749,74750],{"class":73},"    \u002F\u002F 获取DOM对象\n",[28,74752,74753,74755,74757,74759,74761,74763,74765,74767],{"class":30,"line":50060},[28,74754,11707],{"class":42},[28,74756,70298],{"class":38},[28,74758,14050],{"class":42},[28,74760,54873],{"class":34},[28,74762,54876],{"class":2453},[28,74764,367],{"class":34},[28,74766,70309],{"class":735},[28,74768,228],{"class":34},[28,74770,74771,74773,74775,74777,74779,74781,74783,74785],{"class":30,"line":50069},[28,74772,11707],{"class":42},[28,74774,70125],{"class":38},[28,74776,14050],{"class":42},[28,74778,54873],{"class":34},[28,74780,54876],{"class":2453},[28,74782,367],{"class":34},[28,74784,70136],{"class":735},[28,74786,228],{"class":34},[28,74788,74789,74791,74793,74795,74797,74799,74801,74803],{"class":30,"line":50086},[28,74790,11707],{"class":42},[28,74792,16175],{"class":38},[28,74794,14050],{"class":42},[28,74796,54873],{"class":34},[28,74798,54876],{"class":2453},[28,74800,367],{"class":34},[28,74802,70155],{"class":735},[28,74804,228],{"class":34},[28,74806,74808,74810,74812,74814,74816,74818,74820,74822],{"class":30,"line":74807},231,[28,74809,11707],{"class":42},[28,74811,70184],{"class":38},[28,74813,14050],{"class":42},[28,74815,54873],{"class":34},[28,74817,54876],{"class":2453},[28,74819,367],{"class":34},[28,74821,70195],{"class":735},[28,74823,228],{"class":34},[28,74825,74827,74829,74831,74833,74835,74837,74839,74841],{"class":30,"line":74826},232,[28,74828,11707],{"class":42},[28,74830,70164],{"class":38},[28,74832,14050],{"class":42},[28,74834,54873],{"class":34},[28,74836,54876],{"class":2453},[28,74838,367],{"class":34},[28,74840,70175],{"class":735},[28,74842,228],{"class":34},[28,74844,74846,74848,74850,74852,74854,74856,74858,74860],{"class":30,"line":74845},233,[28,74847,11707],{"class":42},[28,74849,70204],{"class":38},[28,74851,14050],{"class":42},[28,74853,54873],{"class":34},[28,74855,54876],{"class":2453},[28,74857,367],{"class":34},[28,74859,70215],{"class":735},[28,74861,228],{"class":34},[28,74863,74865],{"class":30,"line":74864},234,[28,74866,2890],{"emptyLinePlaceholder":562},[28,74868,74870],{"class":30,"line":74869},235,[28,74871,74872],{"class":73},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[28,74874,74876,74878,74880,74882,74884,74886,74888,74890,74892],{"class":30,"line":74875},236,[28,74877,70316],{"class":34},[28,74879,58290],{"class":2453},[28,74881,367],{"class":34},[28,74883,70323],{"class":735},[28,74885,12921],{"class":34},[28,74887,54926],{"class":42},[28,74889,2148],{"class":34},[28,74891,706],{"class":5704},[28,74893,12928],{"class":34},[28,74895,74897],{"class":30,"line":74896},237,[28,74898,74899],{"class":73},"      \u002F\u002F 禁止浏览器跳转\n",[28,74901,74903,74905,74907],{"class":30,"line":74902},238,[28,74904,70343],{"class":34},[28,74906,70346],{"class":2453},[28,74908,2466],{"class":34},[28,74910,74912],{"class":30,"line":74911},239,[28,74913,74914],{"class":73},"      \u002F\u002F 非空判断\n",[28,74916,74918],{"class":30,"line":74917},240,[28,74919,74920],{"class":73},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[28,74922,74924],{"class":30,"line":74923},241,[28,74925,74926],{"class":73},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[28,74928,74930,74932,74934,74936,74939,74941,74944,74947,74949,74951],{"class":30,"line":74929},242,[28,74931,54957],{"class":42},[28,74933,2148],{"class":34},[28,74935,856],{"class":42},[28,74937,74938],{"class":34},"uname.value ",[28,74940,71834],{"class":42},[28,74942,74943],{"class":42}," !",[28,74945,74946],{"class":34},"age.value ",[28,74948,71834],{"class":42},[28,74950,74943],{"class":42},[28,74952,74953],{"class":34},"salary.value) {\n",[28,74955,74957,74959,74961,74963,74965],{"class":30,"line":74956},243,[28,74958,15238],{"class":42},[28,74960,70417],{"class":2453},[28,74962,367],{"class":34},[28,74964,70422],{"class":735},[28,74966,228],{"class":34},[28,74968,74970],{"class":30,"line":74969},244,[28,74971,52875],{"class":34},[28,74973,74975,74977,74979],{"class":30,"line":74974},245,[28,74976,58484],{"class":34},[28,74978,52361],{"class":2453},[28,74980,74981],{"class":34},"({\n",[28,74983,74985],{"class":30,"line":74984},246,[28,74986,74987],{"class":73},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[28,74989,74991],{"class":30,"line":74990},247,[28,74992,74993],{"class":73},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[28,74995,74997],{"class":30,"line":74996},248,[28,74998,74999],{"class":73},"        \u002F\u002F 对象的序号应为数组长度+1\n",[28,75001,75003],{"class":30,"line":75002},249,[28,75004,75005],{"class":73},"        \u002F\u002F unameId: arr.length + 1,\n",[28,75007,75009],{"class":30,"line":75008},250,[28,75010,2890],{"emptyLinePlaceholder":562},[28,75012,75014],{"class":30,"line":75013},251,[28,75015,75016],{"class":73},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[28,75018,75020],{"class":30,"line":75019},252,[28,75021,75022],{"class":73},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[28,75024,75026],{"class":30,"line":75025},253,[28,75027,75028],{"class":73},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[28,75030,75032],{"class":30,"line":75031},254,[28,75033,75034],{"class":73},"        \u002F\u002F 0当假看\n",[28,75036,75038,75041,75043,75045,75048,75050,75052,75054,75057,75059,75061,75064,75066],{"class":30,"line":75037},255,[28,75039,75040],{"class":34},"        unameId: arr.",[28,75042,52445],{"class":38},[28,75044,74291],{"class":42},[28,75046,75047],{"class":34}," arr[arr.",[28,75049,52445],{"class":38},[28,75051,52748],{"class":42},[28,75053,25605],{"class":38},[28,75055,75056],{"class":34},"].unameId ",[28,75058,1104],{"class":42},[28,75060,25605],{"class":38},[28,75062,75063],{"class":42}," :",[28,75065,25605],{"class":38},[28,75067,31945],{"class":34},[28,75069,75071],{"class":30,"line":75070},256,[28,75072,70470],{"class":34},[28,75074,75076],{"class":30,"line":75075},257,[28,75077,70475],{"class":34},[28,75079,75081],{"class":30,"line":75080},258,[28,75082,70485],{"class":34},[28,75084,75086],{"class":30,"line":75085},259,[28,75087,70480],{"class":34},[28,75089,75091],{"class":30,"line":75090},260,[28,75092,75093],{"class":34},"        city: city.value,\n",[28,75095,75097],{"class":30,"line":75096},261,[28,75098,75099],{"class":73},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[28,75101,75103],{"class":30,"line":75102},262,[28,75104,75105],{"class":73},"        \u002F\u002F time: new Date().toDateString()\n",[28,75107,75109,75112,75115],{"class":30,"line":75108},263,[28,75110,75111],{"class":34},"        time: ",[28,75113,75114],{"class":2453},"getTime",[28,75116,2466],{"class":34},[28,75118,75120],{"class":30,"line":75119},264,[28,75121,65292],{"class":34},[28,75123,75125],{"class":30,"line":75124},265,[28,75126,75127],{"class":73},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[28,75129,75131,75133],{"class":30,"line":75130},266,[28,75132,70545],{"class":2453},[28,75134,2466],{"class":34},[28,75136,75138,75140,75142,75144,75146],{"class":30,"line":75137},267,[28,75139,70528],{"class":38},[28,75141,1179],{"class":34},[28,75143,70533],{"class":2453},[28,75145,13536],{"class":34},[28,75147,75148],{"class":73},"\u002F\u002F重置表单\n",[28,75150,75152],{"class":30,"line":75151},268,[28,75153,75154],{"class":73},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[28,75156,75158,75161,75163,75165,75168,75170,75172,75174,75176],{"class":30,"line":75157},269,[28,75159,75160],{"class":34},"      localStorage.",[28,75162,72131],{"class":2453},[28,75164,367],{"class":34},[28,75166,75167],{"class":735},"'data'",[28,75169,12921],{"class":34},[28,75171,72141],{"class":38},[28,75173,1179],{"class":34},[28,75175,72146],{"class":2453},[28,75177,75178],{"class":34},"(arr))\n",[28,75180,75182],{"class":30,"line":75181},270,[28,75183,33938],{"class":34},[28,75185,75187],{"class":30,"line":75186},271,[28,75188,2890],{"emptyLinePlaceholder":562},[28,75190,75192],{"class":30,"line":75191},272,[28,75193,75194],{"class":73},"    \u002F\u002F 3.删除业务\n",[28,75196,75198],{"class":30,"line":75197},273,[28,75199,75200],{"class":73},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[28,75202,75204,75206,75208,75210,75212,75214,75216,75218,75220],{"class":30,"line":75203},274,[28,75205,70818],{"class":34},[28,75207,58290],{"class":2453},[28,75209,367],{"class":34},[28,75211,58295],{"class":735},[28,75213,12921],{"class":34},[28,75215,54926],{"class":42},[28,75217,2148],{"class":34},[28,75219,706],{"class":5704},[28,75221,12928],{"class":34},[28,75223,75225],{"class":30,"line":75224},275,[28,75226,75227],{"class":73},"      \u002F\u002F 判断是否点击的是删除按钮\n",[28,75229,75231,75233,75235,75237,75239],{"class":30,"line":75230},276,[28,75232,54957],{"class":42},[28,75234,67511],{"class":34},[28,75236,54963],{"class":42},[28,75238,68733],{"class":735},[28,75240,12928],{"class":34},[28,75242,75244],{"class":30,"line":75243},277,[28,75245,75246],{"class":73},"        \u002F\u002F alert(1)\n",[28,75248,75250],{"class":30,"line":75249},278,[28,75251,75252],{"class":73},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[28,75254,75256],{"class":30,"line":75255},279,[28,75257,75258],{"class":73},"        \u002F\u002F console.log(e.target)\n",[28,75260,75262],{"class":30,"line":75261},280,[28,75263,75264],{"class":73},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[28,75266,75268],{"class":30,"line":75267},281,[28,75269,2890],{"emptyLinePlaceholder":562},[28,75271,75273],{"class":30,"line":75272},282,[28,75274,75275],{"class":73},"        \u002F\u002F 确认框，确然是否真的要删除\n",[28,75277,75279],{"class":30,"line":75278},283,[28,75280,75281],{"class":73},"        \u002F\u002F confirm()为确认框\n",[28,75283,75285],{"class":30,"line":75284},284,[28,75286,75287],{"class":73},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[28,75289,75291,75293,75295,75298,75300,75303],{"class":30,"line":75290},285,[28,75292,2987],{"class":42},[28,75294,2148],{"class":34},[28,75296,75297],{"class":2453},"confirm",[28,75299,367],{"class":34},[28,75301,75302],{"class":735},"'您确定要删除这条数据吗？'",[28,75304,75305],{"class":34},")) {\n",[28,75307,75309,75312,75314,75316,75318],{"class":30,"line":75308},286,[28,75310,75311],{"class":34},"          arr.",[28,75313,58487],{"class":2453},[28,75315,70871],{"class":34},[28,75317,39],{"class":38},[28,75319,228],{"class":34},[28,75321,75323],{"class":30,"line":75322},287,[28,75324,75325],{"class":73},"          \u002F\u002F 3.4 重新渲染页面\n",[28,75327,75329,75332],{"class":30,"line":75328},288,[28,75330,75331],{"class":2453},"          render",[28,75333,2466],{"class":34},[28,75335,75337],{"class":30,"line":75336},289,[28,75338,75339],{"class":73},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[28,75341,75343,75346,75348,75350,75352,75354,75356,75358,75360],{"class":30,"line":75342},290,[28,75344,75345],{"class":34},"          localStorage.",[28,75347,72131],{"class":2453},[28,75349,367],{"class":34},[28,75351,75167],{"class":735},[28,75353,12921],{"class":34},[28,75355,72141],{"class":38},[28,75357,1179],{"class":34},[28,75359,72146],{"class":2453},[28,75361,75178],{"class":34},[28,75363,75365],{"class":30,"line":75364},291,[28,75366,3019],{"class":34},[28,75368,75370],{"class":30,"line":75369},292,[28,75371,52875],{"class":34},[28,75373,75375],{"class":30,"line":75374},293,[28,75376,2890],{"emptyLinePlaceholder":562},[28,75378,75380],{"class":30,"line":75379},294,[28,75381,33938],{"class":34},[28,75383,75385],{"class":30,"line":75384},295,[28,75386,2890],{"emptyLinePlaceholder":562},[28,75388,75390,75392,75394],{"class":30,"line":75389},296,[28,75391,52894],{"class":34},[28,75393,52290],{"class":51777},[28,75395,51784],{"class":34},[28,75397,75399,75401,75403],{"class":30,"line":75398},297,[28,75400,52262],{"class":34},[28,75402,52277],{"class":51777},[28,75404,51784],{"class":34},[28,75406,75408],{"class":30,"line":75407},298,[28,75409,2890],{"emptyLinePlaceholder":562},[28,75411,75413,75415,75417],{"class":30,"line":75412},299,[28,75414,52262],{"class":34},[28,75416,51112],{"class":51777},[28,75418,51784],{"class":34},[60,75420,75422],{"id":75421},"_36-正则表达式","3.6 正则表达式",[14,75424,75425],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75427,75428],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75430,75431],{},"正则表达式的作用：",[1626,75433,75434,75441,75447],{},[591,75435,75436,75437,75440],{},"表单验证（ ",[780,75438,75439],{},"匹配"," ）",[591,75442,75443,75444,75440],{},"过滤敏感词（ ",[780,75445,75446],{},"替换",[591,75448,75449,75450,75440],{},"字符串中提取我们想要的部分（ ",[780,75451,75452],{},"提取",[605,75454,75456],{"id":75455},"_361-语法","3.6.1 语法",[14,75458,75459],{},"正则表达式使用步骤：",[588,75461,75462,75465],{},[591,75463,75464],{},"定义规则",[591,75466,75467],{},"查找是否匹配",[14,75469,75470],{},"正则表达式里边不需要写引号",[14,75472,75473],{},[420,75474],{"alt":23,"src":75475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75477,75478],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75480,75481],{},"reg.test(str)",[14,75483,75484],{},[420,75485],{"alt":23,"src":75486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75488,75489],{},[420,75490],{"alt":23,"src":75491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[605,75493,75495],{"id":75494},"_362-元字符","3.6.2 元字符",[588,75497,75498,75501,75504,75507,75514],{},[591,75499,75500],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[591,75502,75503],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[591,75505,75506],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[591,75508,75509,75510],{},"正则验证工具：",[80,75511,75512],{"href":75512,"rel":75513},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24351],[591,75515,75516],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22484,75518,75520],{"id":75519},"_3621-边界符","3.6.2.1 边界符",[14,75522,75523],{},[420,75524],{"alt":23,"src":75525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75527,75528],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75530,75531],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75533,75534],{},"只匹配一次",[14,75536,75537],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22484,75539,75541],{"id":75540},"_3622-量词","3.6.2.2 量词",[14,75543,75544],{},[420,75545],{"alt":23,"src":75546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75548,75549],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22484,75551,75553],{"id":75552},"_3623-元字符","3.6.2.3 元字符",[14,75555,75556],{},[420,75557],{"alt":23,"src":75558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75560,75561],{},"匹配的是a或b或c []只选一个",[14,75563,75564],{},[420,75565],{"alt":23,"src":75566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75568,75569],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75571,75572],{},[420,75573],{"alt":23,"src":75574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75576,75577],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75579,75580],{},[420,75581],{"alt":23,"src":75582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[18,75584,75586],{"className":51110,"code":75585,"language":51112,"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,75587,75588,75598,75612,75616,75624,75638,75658,75670,75678,75682,75690,75698,75703,75734,75761,75789,75793,75798,75826,75857,75862,75867,75898,75930,75962,75966,75971,76002,76032,76062,76066,76071,76102,76133,76163,76193,76197,76202,76235,76239,76244,76275,76306,76310,76315,76346,76376,76407,76411,76416,76448,76479,76510,76537,76568,76600,76633,76664,76695,76727,76758,76766,76774,76778],{"__ignoreMap":23},[28,75589,75590,75592,75594,75596],{"class":30,"line":31},[28,75591,51774],{"class":34},[28,75593,51778],{"class":51777},[28,75595,51781],{"class":2453},[28,75597,51784],{"class":34},[28,75599,75600,75602,75604,75606,75608,75610],{"class":30,"line":77},[28,75601,1529],{"class":34},[28,75603,51112],{"class":51777},[28,75605,51793],{"class":2453},[28,75607,83],{"class":34},[28,75609,51798],{"class":735},[28,75611,51784],{"class":34},[28,75613,75614],{"class":30,"line":114},[28,75615,2890],{"emptyLinePlaceholder":562},[28,75617,75618,75620,75622],{"class":30,"line":128},[28,75619,1529],{"class":34},[28,75621,51811],{"class":51777},[28,75623,51784],{"class":34},[28,75625,75626,75628,75630,75632,75634,75636],{"class":30,"line":393},[28,75627,52621],{"class":34},[28,75629,51821],{"class":51777},[28,75631,51824],{"class":2453},[28,75633,83],{"class":34},[28,75635,51829],{"class":735},[28,75637,51784],{"class":34},[28,75639,75640,75642,75644,75646,75648,75650,75652,75654,75656],{"class":30,"line":409},[28,75641,52621],{"class":34},[28,75643,51821],{"class":51777},[28,75645,15406],{"class":2453},[28,75647,83],{"class":34},[28,75649,51868],{"class":735},[28,75651,51848],{"class":2453},[28,75653,83],{"class":34},[28,75655,51875],{"class":735},[28,75657,51784],{"class":34},[28,75659,75660,75662,75664,75666,75668],{"class":30,"line":1711},[28,75661,52621],{"class":34},[28,75663,51884],{"class":51777},[28,75665,51887],{"class":34},[28,75667,51884],{"class":51777},[28,75669,51784],{"class":34},[28,75671,75672,75674,75676],{"class":30,"line":1802},[28,75673,52262],{"class":34},[28,75675,51811],{"class":51777},[28,75677,51784],{"class":34},[28,75679,75680],{"class":30,"line":1808},[28,75681,2890],{"emptyLinePlaceholder":562},[28,75683,75684,75686,75688],{"class":30,"line":1820},[28,75685,1529],{"class":34},[28,75687,52277],{"class":51777},[28,75689,51784],{"class":34},[28,75691,75692,75694,75696],{"class":30,"line":2102},[28,75693,52621],{"class":34},[28,75695,52290],{"class":51777},[28,75697,51784],{"class":34},[28,75699,75700],{"class":30,"line":2107},[28,75701,75702],{"class":73},"    \u002F\u002F 元字符中\n",[28,75704,75705,75707,75709,75711,75713,75716,75718,75720,75723,75725,75728,75731],{"class":30,"line":2113},[28,75706,74230],{"class":34},[28,75708,58724],{"class":2453},[28,75710,367],{"class":34},[28,75712,43],{"class":735},[28,75714,75715],{"class":48454},"哈",[28,75717,43],{"class":735},[28,75719,1179],{"class":34},[28,75721,75722],{"class":2453},"test",[28,75724,367],{"class":34},[28,75726,75727],{"class":735},"'哈'",[28,75729,75730],{"class":34},"))  ",[28,75732,75733],{"class":73},"\u002F\u002Ftrue\n",[28,75735,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754,75757,75759],{"class":30,"line":2118},[28,75737,74230],{"class":34},[28,75739,58724],{"class":2453},[28,75741,367],{"class":34},[28,75743,43],{"class":735},[28,75745,75715],{"class":48454},[28,75747,43],{"class":735},[28,75749,1179],{"class":34},[28,75751,75722],{"class":2453},[28,75753,367],{"class":34},[28,75755,75756],{"class":735},"'哈哈'",[28,75758,75730],{"class":34},[28,75760,75733],{"class":73},[28,75762,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75784,75787],{"class":30,"line":2132},[28,75764,74230],{"class":34},[28,75766,58724],{"class":2453},[28,75768,367],{"class":34},[28,75770,43],{"class":735},[28,75772,75715],{"class":48454},[28,75774,43],{"class":735},[28,75776,1179],{"class":34},[28,75778,75722],{"class":2453},[28,75780,367],{"class":34},[28,75782,75783],{"class":735},"'二哈'",[28,75785,75786],{"class":34},"))   ",[28,75788,75733],{"class":73},[28,75790,75791],{"class":30,"line":2137},[28,75792,2890],{"emptyLinePlaceholder":562},[28,75794,75795],{"class":30,"line":2143},[28,75796,75797],{"class":73},"    \u002F\u002F 1.边界符\n",[28,75799,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822,75824],{"class":30,"line":2164},[28,75801,74230],{"class":34},[28,75803,58724],{"class":2453},[28,75805,367],{"class":34},[28,75807,43],{"class":735},[28,75809,1585],{"class":42},[28,75811,75715],{"class":48454},[28,75813,43],{"class":735},[28,75815,1179],{"class":34},[28,75817,75722],{"class":2453},[28,75819,367],{"class":34},[28,75821,75727],{"class":735},[28,75823,75730],{"class":34},[28,75825,75733],{"class":73},[28,75827,75828,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854],{"class":30,"line":2169},[28,75829,74230],{"class":34},[28,75831,58724],{"class":2453},[28,75833,367],{"class":34},[28,75835,43],{"class":735},[28,75837,1585],{"class":42},[28,75839,75715],{"class":48454},[28,75841,929],{"class":42},[28,75843,43],{"class":735},[28,75845,1179],{"class":34},[28,75847,75722],{"class":2453},[28,75849,367],{"class":34},[28,75851,75756],{"class":735},[28,75853,75730],{"class":34},[28,75855,75856],{"class":73},"\u002F\u002Ffalse\n",[28,75858,75859],{"class":30,"line":2183},[28,75860,75861],{"class":73},"    \u002F\u002F 2.量词\n",[28,75863,75864],{"class":30,"line":2188},[28,75865,75866],{"class":73},"    \u002F\u002F 量词 * 类似于 >= 0\n",[28,75868,75869,75871,75873,75875,75877,75879,75881,75884,75886,75888,75890,75892,75894,75896],{"class":30,"line":2217},[28,75870,74230],{"class":34},[28,75872,58724],{"class":2453},[28,75874,367],{"class":34},[28,75876,43],{"class":735},[28,75878,1585],{"class":42},[28,75880,75715],{"class":48454},[28,75882,75883],{"class":42},"*$",[28,75885,43],{"class":735},[28,75887,1179],{"class":34},[28,75889,75722],{"class":2453},[28,75891,367],{"class":34},[28,75893,75756],{"class":735},[28,75895,75730],{"class":34},[28,75897,75733],{"class":73},[28,75899,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918,75920,75922,75925,75927],{"class":30,"line":2222},[28,75901,74230],{"class":34},[28,75903,58724],{"class":2453},[28,75905,367],{"class":34},[28,75907,43],{"class":735},[28,75909,1585],{"class":42},[28,75911,75715],{"class":48454},[28,75913,75883],{"class":42},[28,75915,43],{"class":735},[28,75917,1179],{"class":34},[28,75919,75722],{"class":2453},[28,75921,367],{"class":34},[28,75923,75924],{"class":735},"'二哈好傻'",[28,75926,75730],{"class":34},[28,75928,75929],{"class":73},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[28,75931,75932,75934,75936,75938,75940,75942,75944,75946,75948,75950,75952,75954,75957,75959],{"class":30,"line":2239},[28,75933,74230],{"class":34},[28,75935,58724],{"class":2453},[28,75937,367],{"class":34},[28,75939,43],{"class":735},[28,75941,1585],{"class":42},[28,75943,75715],{"class":48454},[28,75945,75883],{"class":42},[28,75947,43],{"class":735},[28,75949,1179],{"class":34},[28,75951,75722],{"class":2453},[28,75953,367],{"class":34},[28,75955,75956],{"class":735},"'哈好哈'",[28,75958,75786],{"class":34},[28,75960,75961],{"class":73},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[28,75963,75964],{"class":30,"line":2244},[28,75965,2890],{"emptyLinePlaceholder":562},[28,75967,75968],{"class":30,"line":2249},[28,75969,75970],{"class":73},"    \u002F\u002F +类似于>=1\n",[28,75972,75973,75975,75977,75979,75981,75983,75985,75988,75990,75992,75994,75996,75998,76000],{"class":30,"line":2254},[28,75974,74230],{"class":34},[28,75976,58724],{"class":2453},[28,75978,367],{"class":34},[28,75980,43],{"class":735},[28,75982,1585],{"class":42},[28,75984,75715],{"class":48454},[28,75986,75987],{"class":42},"+$",[28,75989,43],{"class":735},[28,75991,1179],{"class":34},[28,75993,75722],{"class":2453},[28,75995,367],{"class":34},[28,75997,75756],{"class":735},[28,75999,75730],{"class":34},[28,76001,75733],{"class":73},[28,76003,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76024,76026,76028,76030],{"class":30,"line":2268},[28,76005,74230],{"class":34},[28,76007,58724],{"class":2453},[28,76009,367],{"class":34},[28,76011,43],{"class":735},[28,76013,1585],{"class":42},[28,76015,75715],{"class":48454},[28,76017,75987],{"class":42},[28,76019,43],{"class":735},[28,76021,1179],{"class":34},[28,76023,75722],{"class":2453},[28,76025,367],{"class":34},[28,76027,75924],{"class":735},[28,76029,75730],{"class":34},[28,76031,75929],{"class":73},[28,76033,76034,76036,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056,76058,76060],{"class":30,"line":2273},[28,76035,74230],{"class":34},[28,76037,58724],{"class":2453},[28,76039,367],{"class":34},[28,76041,43],{"class":735},[28,76043,1585],{"class":42},[28,76045,75715],{"class":48454},[28,76047,75987],{"class":42},[28,76049,43],{"class":735},[28,76051,1179],{"class":34},[28,76053,75722],{"class":2453},[28,76055,367],{"class":34},[28,76057,75956],{"class":735},[28,76059,75786],{"class":34},[28,76061,75856],{"class":73},[28,76063,76064],{"class":30,"line":3067},[28,76065,2890],{"emptyLinePlaceholder":562},[28,76067,76068],{"class":30,"line":3081},[28,76069,76070],{"class":73},"    \u002F\u002F ?类似于0次或一次\n",[28,76072,76073,76075,76077,76079,76081,76083,76086,76088,76090,76092,76094,76096,76098,76100],{"class":30,"line":3089},[28,76074,74230],{"class":34},[28,76076,58724],{"class":2453},[28,76078,367],{"class":34},[28,76080,43],{"class":735},[28,76082,1585],{"class":42},[28,76084,76085],{"class":48454},"哈？",[28,76087,929],{"class":42},[28,76089,43],{"class":735},[28,76091,1179],{"class":34},[28,76093,75722],{"class":2453},[28,76095,367],{"class":34},[28,76097,74705],{"class":735},[28,76099,75786],{"class":34},[28,76101,75733],{"class":73},[28,76103,76104,76106,76108,76110,76112,76114,76116,76119,76121,76123,76125,76127,76129,76131],{"class":30,"line":3094},[28,76105,74230],{"class":34},[28,76107,58724],{"class":2453},[28,76109,367],{"class":34},[28,76111,43],{"class":735},[28,76113,1585],{"class":42},[28,76115,75715],{"class":48454},[28,76117,76118],{"class":42},"?$",[28,76120,43],{"class":735},[28,76122,1179],{"class":34},[28,76124,75722],{"class":2453},[28,76126,367],{"class":34},[28,76128,75756],{"class":735},[28,76130,75730],{"class":34},[28,76132,75856],{"class":73},[28,76134,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161],{"class":30,"line":3100},[28,76136,74230],{"class":34},[28,76138,58724],{"class":2453},[28,76140,367],{"class":34},[28,76142,43],{"class":735},[28,76144,1585],{"class":42},[28,76146,75715],{"class":48454},[28,76148,76118],{"class":42},[28,76150,43],{"class":735},[28,76152,1179],{"class":34},[28,76154,75722],{"class":2453},[28,76156,367],{"class":34},[28,76158,75924],{"class":735},[28,76160,75730],{"class":34},[28,76162,75929],{"class":73},[28,76164,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191],{"class":30,"line":3106},[28,76166,74230],{"class":34},[28,76168,58724],{"class":2453},[28,76170,367],{"class":34},[28,76172,43],{"class":735},[28,76174,1585],{"class":42},[28,76176,75715],{"class":48454},[28,76178,76118],{"class":42},[28,76180,43],{"class":735},[28,76182,1179],{"class":34},[28,76184,75722],{"class":2453},[28,76186,367],{"class":34},[28,76188,75956],{"class":735},[28,76190,75730],{"class":34},[28,76192,75856],{"class":73},[28,76194,76195],{"class":30,"line":3111},[28,76196,2890],{"emptyLinePlaceholder":562},[28,76198,76199],{"class":30,"line":8436},[28,76200,76201],{"class":73},"    \u002F\u002F {n}写几，就必须出现几次\n",[28,76203,76204,76206,76208,76210,76212,76214,76216,76219,76221,76223,76225,76227,76230,76233],{"class":30,"line":8460},[28,76205,74230],{"class":34},[28,76207,58724],{"class":2453},[28,76209,367],{"class":34},[28,76211,43],{"class":735},[28,76213,1585],{"class":42},[28,76215,75715],{"class":48454},[28,76217,76218],{"class":42},"{4}$",[28,76220,43],{"class":735},[28,76222,1179],{"class":34},[28,76224,75722],{"class":2453},[28,76226,367],{"class":34},[28,76228,76229],{"class":735},"'哈哈哈哈'",[28,76231,76232],{"class":34},")) ",[28,76234,75733],{"class":73},[28,76236,76237],{"class":30,"line":8465},[28,76238,2890],{"emptyLinePlaceholder":562},[28,76240,76241],{"class":30,"line":8471},[28,76242,76243],{"class":73},"    \u002F\u002F {n,}大于等于n次\n",[28,76245,76246,76248,76250,76252,76254,76256,76258,76261,76263,76265,76267,76269,76271,76273],{"class":30,"line":8498},[28,76247,74230],{"class":34},[28,76249,58724],{"class":2453},[28,76251,367],{"class":34},[28,76253,43],{"class":735},[28,76255,1585],{"class":42},[28,76257,75715],{"class":48454},[28,76259,76260],{"class":42},"{4,}$",[28,76262,43],{"class":735},[28,76264,1179],{"class":34},[28,76266,75722],{"class":2453},[28,76268,367],{"class":34},[28,76270,76229],{"class":735},[28,76272,76232],{"class":34},[28,76274,75733],{"class":73},[28,76276,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76302,76304],{"class":30,"line":8503},[28,76278,74230],{"class":34},[28,76280,58724],{"class":2453},[28,76282,367],{"class":34},[28,76284,43],{"class":735},[28,76286,1585],{"class":42},[28,76288,75715],{"class":48454},[28,76290,76260],{"class":42},[28,76292,43],{"class":735},[28,76294,1179],{"class":34},[28,76296,75722],{"class":2453},[28,76298,367],{"class":34},[28,76300,76301],{"class":735},"'哈哈哈哈哈'",[28,76303,76232],{"class":34},[28,76305,75733],{"class":73},[28,76307,76308],{"class":30,"line":8509},[28,76309,2890],{"emptyLinePlaceholder":562},[28,76311,76312],{"class":30,"line":8521},[28,76313,76314],{"class":73},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[28,76316,76317,76319,76321,76323,76325,76327,76329,76332,76334,76336,76338,76340,76342,76344],{"class":30,"line":8533},[28,76318,74230],{"class":34},[28,76320,58724],{"class":2453},[28,76322,367],{"class":34},[28,76324,43],{"class":735},[28,76326,1585],{"class":42},[28,76328,75715],{"class":48454},[28,76330,76331],{"class":42},"{4,6}$",[28,76333,43],{"class":735},[28,76335,1179],{"class":34},[28,76337,75722],{"class":2453},[28,76339,367],{"class":34},[28,76341,76229],{"class":735},[28,76343,76232],{"class":34},[28,76345,75733],{"class":73},[28,76347,76348,76350,76352,76354,76356,76358,76360,76362,76364,76366,76368,76370,76372,76374],{"class":30,"line":8545},[28,76349,74230],{"class":34},[28,76351,58724],{"class":2453},[28,76353,367],{"class":34},[28,76355,43],{"class":735},[28,76357,1585],{"class":42},[28,76359,75715],{"class":48454},[28,76361,76331],{"class":42},[28,76363,43],{"class":735},[28,76365,1179],{"class":34},[28,76367,75722],{"class":2453},[28,76369,367],{"class":34},[28,76371,76301],{"class":735},[28,76373,76232],{"class":34},[28,76375,75733],{"class":73},[28,76377,76378,76380,76382,76384,76386,76388,76390,76392,76394,76396,76398,76400,76403,76405],{"class":30,"line":10202},[28,76379,74230],{"class":34},[28,76381,58724],{"class":2453},[28,76383,367],{"class":34},[28,76385,43],{"class":735},[28,76387,1585],{"class":42},[28,76389,75715],{"class":48454},[28,76391,76331],{"class":42},[28,76393,43],{"class":735},[28,76395,1179],{"class":34},[28,76397,75722],{"class":2453},[28,76399,367],{"class":34},[28,76401,76402],{"class":735},"'哈哈哈哈哈哈哈'",[28,76404,76232],{"class":34},[28,76406,75856],{"class":73},[28,76408,76409],{"class":30,"line":10227},[28,76410,2890],{"emptyLinePlaceholder":562},[28,76412,76413],{"class":30,"line":10250},[28,76414,76415],{"class":73},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[28,76417,76418,76420,76422,76424,76426,76428,76431,76433,76435,76437,76439,76441,76444,76446],{"class":30,"line":10274},[28,76419,74230],{"class":34},[28,76421,58724],{"class":2453},[28,76423,367],{"class":34},[28,76425,43],{"class":735},[28,76427,1585],{"class":42},[28,76429,76430],{"class":38},"[abc]",[28,76432,929],{"class":42},[28,76434,43],{"class":735},[28,76436,1179],{"class":34},[28,76438,75722],{"class":2453},[28,76440,367],{"class":34},[28,76442,76443],{"class":735},"'a'",[28,76445,75730],{"class":34},[28,76447,75733],{"class":73},[28,76449,76450,76452,76454,76456,76458,76460,76462,76464,76466,76468,76470,76472,76475,76477],{"class":30,"line":10279},[28,76451,74230],{"class":34},[28,76453,58724],{"class":2453},[28,76455,367],{"class":34},[28,76457,43],{"class":735},[28,76459,1585],{"class":42},[28,76461,76430],{"class":38},[28,76463,929],{"class":42},[28,76465,43],{"class":735},[28,76467,1179],{"class":34},[28,76469,75722],{"class":2453},[28,76471,367],{"class":34},[28,76473,76474],{"class":735},"'b'",[28,76476,75730],{"class":34},[28,76478,75733],{"class":73},[28,76480,76481,76483,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76506,76508],{"class":30,"line":10284},[28,76482,74230],{"class":34},[28,76484,58724],{"class":2453},[28,76486,367],{"class":34},[28,76488,43],{"class":735},[28,76490,1585],{"class":42},[28,76492,76430],{"class":38},[28,76494,929],{"class":42},[28,76496,43],{"class":735},[28,76498,1179],{"class":34},[28,76500,75722],{"class":2453},[28,76502,367],{"class":34},[28,76504,76505],{"class":735},"'c'",[28,76507,75730],{"class":34},[28,76509,75733],{"class":73},[28,76511,76512,76514,76516,76518,76520,76522,76524,76526,76528,76530,76533,76535],{"class":30,"line":10289},[28,76513,74230],{"class":34},[28,76515,58724],{"class":2453},[28,76517,367],{"class":34},[28,76519,43],{"class":735},[28,76521,76430],{"class":38},[28,76523,43],{"class":735},[28,76525,1179],{"class":34},[28,76527,75722],{"class":2453},[28,76529,367],{"class":34},[28,76531,76532],{"class":735},"'ab'",[28,76534,75730],{"class":34},[28,76536,75733],{"class":73},[28,76538,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561,76563,76565],{"class":30,"line":10298},[28,76540,74230],{"class":34},[28,76542,58724],{"class":2453},[28,76544,367],{"class":34},[28,76546,43],{"class":735},[28,76548,1585],{"class":42},[28,76550,76430],{"class":38},[28,76552,929],{"class":42},[28,76554,43],{"class":735},[28,76556,1179],{"class":34},[28,76558,75722],{"class":2453},[28,76560,367],{"class":34},[28,76562,76532],{"class":735},[28,76564,75730],{"class":34},[28,76566,76567],{"class":73},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[28,76569,76570,76572,76574,76576,76578,76580,76582,76585,76587,76589,76591,76593,76595,76597],{"class":30,"line":10303},[28,76571,74230],{"class":34},[28,76573,58724],{"class":2453},[28,76575,367],{"class":34},[28,76577,43],{"class":735},[28,76579,1585],{"class":42},[28,76581,76430],{"class":38},[28,76583,76584],{"class":42},"{2}$",[28,76586,43],{"class":735},[28,76588,1179],{"class":34},[28,76590,75722],{"class":2453},[28,76592,367],{"class":34},[28,76594,76532],{"class":735},[28,76596,75730],{"class":34},[28,76598,76599],{"class":73},"\u002F\u002Ftrue   可以选两个\n",[28,76601,76602,76604,76606,76608,76610,76612,76615,76617,76619,76621,76623,76625,76628,76630],{"class":30,"line":10309},[28,76603,74230],{"class":34},[28,76605,58724],{"class":2453},[28,76607,367],{"class":34},[28,76609,43],{"class":735},[28,76611,1585],{"class":42},[28,76613,76614],{"class":38},"[a-z]",[28,76616,929],{"class":42},[28,76618,43],{"class":735},[28,76620,1179],{"class":34},[28,76622,75722],{"class":2453},[28,76624,367],{"class":34},[28,76626,76627],{"class":735},"'p'",[28,76629,75786],{"class":34},[28,76631,76632],{"class":73},"\u002F\u002Ftrue   依然只能选一个\n",[28,76634,76635,76637,76639,76641,76643,76645,76648,76650,76652,76654,76656,76658,76660,76662],{"class":30,"line":10330},[28,76636,74230],{"class":34},[28,76638,58724],{"class":2453},[28,76640,367],{"class":34},[28,76642,43],{"class":735},[28,76644,1585],{"class":42},[28,76646,76647],{"class":38},"[A-Z]",[28,76649,929],{"class":42},[28,76651,43],{"class":735},[28,76653,1179],{"class":34},[28,76655,75722],{"class":2453},[28,76657,367],{"class":34},[28,76659,76627],{"class":735},[28,76661,75786],{"class":34},[28,76663,75856],{"class":73},[28,76665,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76686,76688,76691,76693],{"class":30,"line":10336},[28,76667,74230],{"class":34},[28,76669,58724],{"class":2453},[28,76671,367],{"class":34},[28,76673,43],{"class":735},[28,76675,1585],{"class":42},[28,76677,76647],{"class":38},[28,76679,929],{"class":42},[28,76681,43],{"class":735},[28,76683,1179],{"class":34},[28,76685,75722],{"class":2453},[28,76687,367],{"class":34},[28,76689,76690],{"class":735},"'P'",[28,76692,75786],{"class":34},[28,76694,75733],{"class":73},[28,76696,76697,76699,76701,76703,76705,76707,76710,76712,76714,76716,76718,76720,76723,76725],{"class":30,"line":10350},[28,76698,74230],{"class":34},[28,76700,58724],{"class":2453},[28,76702,367],{"class":34},[28,76704,43],{"class":735},[28,76706,1585],{"class":42},[28,76708,76709],{"class":38},"[0-9]",[28,76711,929],{"class":42},[28,76713,43],{"class":735},[28,76715,1179],{"class":34},[28,76717,75722],{"class":2453},[28,76719,367],{"class":34},[28,76721,76722],{"class":735},"'0'",[28,76724,75786],{"class":34},[28,76726,75733],{"class":73},[28,76728,76729,76731,76733,76735,76737,76739,76742,76744,76746,76748,76750,76752,76754,76756],{"class":30,"line":10356},[28,76730,74230],{"class":34},[28,76732,58724],{"class":2453},[28,76734,367],{"class":34},[28,76736,43],{"class":735},[28,76738,1585],{"class":42},[28,76740,76741],{"class":38},"[a-zA-Z0-9]",[28,76743,929],{"class":42},[28,76745,43],{"class":735},[28,76747,1179],{"class":34},[28,76749,75722],{"class":2453},[28,76751,367],{"class":34},[28,76753,76627],{"class":735},[28,76755,75730],{"class":34},[28,76757,75733],{"class":73},[28,76759,76760,76762,76764],{"class":30,"line":10383},[28,76761,52894],{"class":34},[28,76763,52290],{"class":51777},[28,76765,51784],{"class":34},[28,76767,76768,76770,76772],{"class":30,"line":10392},[28,76769,52262],{"class":34},[28,76771,52277],{"class":51777},[28,76773,51784],{"class":34},[28,76775,76776],{"class":30,"line":10398},[28,76777,2890],{"emptyLinePlaceholder":562},[28,76779,76780,76782,76784],{"class":30,"line":10406},[28,76781,52262],{"class":34},[28,76783,51112],{"class":51777},[28,76785,51784],{"class":34},[22484,76787,76789],{"id":76788},"_3624-修饰符","3.6.2.4 修饰符",[14,76791,76792],{},[420,76793],{"alt":23,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76796,76797],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76799,76800],{},[420,76801],{"alt":23,"src":76802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[18,76804,76806],{"className":51110,"code":76805,"language":51112,"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,76807,76808,76818,76832,76840,76854,76874,76886,76894,76902,76910,76942,76973,76978,77010,77021,77054,77063,77071,77079],{"__ignoreMap":23},[28,76809,76810,76812,76814,76816],{"class":30,"line":31},[28,76811,51774],{"class":34},[28,76813,51778],{"class":51777},[28,76815,51781],{"class":2453},[28,76817,51784],{"class":34},[28,76819,76820,76822,76824,76826,76828,76830],{"class":30,"line":77},[28,76821,1529],{"class":34},[28,76823,51112],{"class":51777},[28,76825,51793],{"class":2453},[28,76827,83],{"class":34},[28,76829,51798],{"class":735},[28,76831,51784],{"class":34},[28,76833,76834,76836,76838],{"class":30,"line":114},[28,76835,1529],{"class":34},[28,76837,51811],{"class":51777},[28,76839,51784],{"class":34},[28,76841,76842,76844,76846,76848,76850,76852],{"class":30,"line":128},[28,76843,52621],{"class":34},[28,76845,51821],{"class":51777},[28,76847,51824],{"class":2453},[28,76849,83],{"class":34},[28,76851,51829],{"class":735},[28,76853,51784],{"class":34},[28,76855,76856,76858,76860,76862,76864,76866,76868,76870,76872],{"class":30,"line":393},[28,76857,52621],{"class":34},[28,76859,51821],{"class":51777},[28,76861,15406],{"class":2453},[28,76863,83],{"class":34},[28,76865,51868],{"class":735},[28,76867,51848],{"class":2453},[28,76869,83],{"class":34},[28,76871,51875],{"class":735},[28,76873,51784],{"class":34},[28,76875,76876,76878,76880,76882,76884],{"class":30,"line":409},[28,76877,52621],{"class":34},[28,76879,51884],{"class":51777},[28,76881,51887],{"class":34},[28,76883,51884],{"class":51777},[28,76885,51784],{"class":34},[28,76887,76888,76890,76892],{"class":30,"line":1711},[28,76889,52262],{"class":34},[28,76891,51811],{"class":51777},[28,76893,51784],{"class":34},[28,76895,76896,76898,76900],{"class":30,"line":1802},[28,76897,1529],{"class":34},[28,76899,52277],{"class":51777},[28,76901,51784],{"class":34},[28,76903,76904,76906,76908],{"class":30,"line":1808},[28,76905,52621],{"class":34},[28,76907,52290],{"class":51777},[28,76909,51784],{"class":34},[28,76911,76912,76914,76916,76918,76920,76922,76925,76927,76929,76931,76933,76935,76938,76940],{"class":30,"line":1820},[28,76913,74230],{"class":34},[28,76915,58724],{"class":2453},[28,76917,367],{"class":34},[28,76919,43],{"class":735},[28,76921,1585],{"class":42},[28,76923,76924],{"class":48454},"java",[28,76926,929],{"class":42},[28,76928,43],{"class":735},[28,76930,1179],{"class":34},[28,76932,75722],{"class":2453},[28,76934,367],{"class":34},[28,76936,76937],{"class":735},"'java'",[28,76939,76232],{"class":34},[28,76941,75733],{"class":73},[28,76943,76944,76946,76948,76950,76952,76954,76956,76958,76960,76962,76964,76966,76969,76971],{"class":30,"line":2102},[28,76945,74230],{"class":34},[28,76947,58724],{"class":2453},[28,76949,367],{"class":34},[28,76951,43],{"class":735},[28,76953,1585],{"class":42},[28,76955,76924],{"class":48454},[28,76957,929],{"class":42},[28,76959,43],{"class":735},[28,76961,1179],{"class":34},[28,76963,75722],{"class":2453},[28,76965,367],{"class":34},[28,76967,76968],{"class":735},"'Java'",[28,76970,76232],{"class":34},[28,76972,75856],{"class":73},[28,76974,76975],{"class":30,"line":2107},[28,76976,76977],{"class":73},"    \u002F\u002F 不区分大小写、\n",[28,76979,76980,76982,76984,76986,76988,76990,76992,76994,76996,76998,77000,77002,77004,77006,77008],{"class":30,"line":2113},[28,76981,74230],{"class":34},[28,76983,58724],{"class":2453},[28,76985,367],{"class":34},[28,76987,43],{"class":735},[28,76989,1585],{"class":42},[28,76991,76924],{"class":48454},[28,76993,929],{"class":42},[28,76995,43],{"class":735},[28,76997,1066],{"class":42},[28,76999,1179],{"class":34},[28,77001,75722],{"class":2453},[28,77003,367],{"class":34},[28,77005,76968],{"class":735},[28,77007,76232],{"class":34},[28,77009,75733],{"class":73},[28,77011,77012,77014,77016,77018],{"class":30,"line":2118},[28,77013,11707],{"class":42},[28,77015,74396],{"class":38},[28,77017,14050],{"class":42},[28,77019,77020],{"class":735}," 'java是一门编程语言，学完java工资很高'\n",[28,77022,77023,77025,77028,77030,77033,77036,77038,77040,77042,77044,77047,77049,77052],{"class":30,"line":2132},[28,77024,11707],{"class":42},[28,77026,77027],{"class":38}," result",[28,77029,14050],{"class":42},[28,77031,77032],{"class":34}," str.",[28,77034,77035],{"class":2453},"replace",[28,77037,367],{"class":34},[28,77039,43],{"class":735},[28,77041,76924],{"class":48454},[28,77043,43],{"class":735},[28,77045,77046],{"class":42},"ig",[28,77048,12921],{"class":34},[28,77050,77051],{"class":735},"'前端'",[28,77053,228],{"class":34},[28,77055,77056,77058,77060],{"class":30,"line":2137},[28,77057,74230],{"class":34},[28,77059,58724],{"class":2453},[28,77061,77062],{"class":34},"(result)\n",[28,77064,77065,77067,77069],{"class":30,"line":2143},[28,77066,52894],{"class":34},[28,77068,52290],{"class":51777},[28,77070,51784],{"class":34},[28,77072,77073,77075,77077],{"class":30,"line":2164},[28,77074,52262],{"class":34},[28,77076,52277],{"class":51777},[28,77078,51784],{"class":34},[28,77080,77081,77083,77085],{"class":30,"line":2169},[28,77082,52262],{"class":34},[28,77084,51112],{"class":51777},[28,77086,51784],{"class":34},[547,77088,77089],{},"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":77,"depth":77,"links":77091},[77092,77102,77114,77131,77138,77146],{"id":53837,"depth":77,"text":53838,"children":77093},[77094,77095,77096,77097,77098,77099,77100,77101],{"id":53841,"depth":114,"text":53842},{"id":53874,"depth":114,"text":53875},{"id":53913,"depth":114,"text":53914},{"id":54071,"depth":114,"text":54072},{"id":54119,"depth":114,"text":54120},{"id":54256,"depth":114,"text":54257},{"id":54578,"depth":114,"text":54579},{"id":57566,"depth":114,"text":57567},{"id":57594,"depth":77,"text":57595,"children":77103},[77104,77105,77106,77107,77108,77109,77110,77111,77112,77113],{"id":57598,"depth":114,"text":57599},{"id":57621,"depth":114,"text":57622},{"id":58536,"depth":114,"text":58537},{"id":59226,"depth":114,"text":59227},{"id":59508,"depth":114,"text":59509},{"id":63669,"depth":114,"text":63670},{"id":63839,"depth":114,"text":63840},{"id":63967,"depth":114,"text":63968},{"id":63992,"depth":114,"text":63993},{"id":65381,"depth":114,"text":65382},{"id":66534,"depth":77,"text":66535,"children":77115},[77116,77117,77118,77119,77120,77121,77122,77123,77124,77125,77126,77127,77128,77129,77130],{"id":66538,"depth":114,"text":66539},{"id":67192,"depth":114,"text":67193},{"id":68887,"depth":114,"text":68888},{"id":68928,"depth":114,"text":68929},{"id":68970,"depth":114,"text":68971},{"id":68984,"depth":114,"text":68985},{"id":69033,"depth":114,"text":69034},{"id":69045,"depth":114,"text":69046},{"id":69060,"depth":114,"text":69061},{"id":69096,"depth":114,"text":69097},{"id":69177,"depth":114,"text":69178},{"id":69305,"depth":114,"text":69306},{"id":69317,"depth":114,"text":69318},{"id":69336,"depth":114,"text":69337},{"id":71447,"depth":114,"text":71448},{"id":71466,"depth":77,"text":71467,"children":77132},[77133,77134,77135,77136,77137],{"id":71487,"depth":114,"text":71488},{"id":71507,"depth":114,"text":71508},{"id":71556,"depth":114,"text":71557},{"id":71681,"depth":114,"text":71682},{"id":71862,"depth":114,"text":71863},{"id":71880,"depth":77,"text":71881,"children":77139},[77140,77141,77142,77143,77144,77145],{"id":71895,"depth":114,"text":71896},{"id":71954,"depth":114,"text":71955},{"id":71978,"depth":114,"text":71979},{"id":72298,"depth":114,"text":72299},{"id":72330,"depth":114,"text":72331},{"id":72353,"depth":114,"text":72354},{"id":75421,"depth":77,"text":75422,"children":77147},[77148,77149],{"id":75455,"depth":114,"text":75456},{"id":75494,"depth":114,"text":75495},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53809,"description":559},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77156,"title":77157,"body":77158,"description":559,"extension":560,"meta":93295,"navigation":562,"path":93296,"seo":93297,"stem":93298,"__hash__":93299},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77159,"toc":93231},[77160,77163,77166,77170,77174,77179,77184,77195,77199,77204,77207,77211,77214,77219,77223,77227,77230,77235,77238,77242,77245,77253,77256,77260,77265,77270,77273,77277,77282,77287,77290,77294,77299,77302,77307,77310,77315,77318,77323,77328,77331,77334,77338,77343,77348,77351,77355,77359,77362,77365,77368,77372,77376,77381,77386,77389,77393,77398,77403,77406,77409,77412,77415,77418,77421,77424,77427,77430,77435,77439,77444,77449,77452,77455,77458,77461,77464,77467,77470,77473,77477,77481,77484,77487,77490,77495,77497,77500,77503,77506,77509,77512,77515,77518,77521,77524,77527,77530,77533,77536,77541,77546,77551,77554,77558,77561,77566,77570,77572,77583,77588,77689,77692,77695,77698,77701,77704,77707,77710,77713,77715,77718,77721,77724,77727,77730,77732,77735,77738,77741,77744,77747,77750,77752,77755,77757,77759,77762,77766,77770,77773,77776,77779,77782,77785,77788,77791,77794,77797,77802,77922,77925,77928,77933,77936,77939,77942,77945,77950,77953,77956,77959,77962,77967,77970,78070,78135,78209,78213,78216,78219,78223,78226,78240,78269,78272,78275,78278,78281,78284,78287,78290,78292,78295,78298,78301,78304,78308,78313,78317,78322,78397,78400,78583,78586,78589,78592,78595,78598,78600,78603,78606,78609,78612,78615,78618,78620,78624,78627,78632,78635,78638,78641,78644,78646,78651,78654,78657,78660,78663,78665,78670,78673,78676,78678,78680,78683,78687,78690,78693,78698,78701,78704,78707,78757,78762,78766,78771,78774,78843,78846,78855,78859,78864,78867,78870,78878,78881,78898,80700,80704,80708,80713,80716,80720,80726,80732,80884,80889,80894,80897,80900,80903,80906,80909,80912,80915,80918,80921,80924,80927,80930,80935,80939,80942,80953,80957,80962,80965,80968,80971,80974,80977,80979,80982,80985,80988,80991,80993,81010,81013,81017,81020,81025,81030,81033,81036,81040,81043,81046,81055,81058,81062,81065,81070,81075,81142,81146,81149,81152,81157,81162,81248,81253,81257,81260,81263,81278,81281,81286,81290,81295,81404,81407,81418,81568,81572,81577,81686,81690,81695,81700,81705,81708,81715,81735,81771,81935,81940,81943,81948,81955,81958,81961,81964,82023,82079,82135,82139,82144,82459,82462,82466,82469,82474,82583,82588,82592,82597,82601,82672,82676,82678,82681,82684,82722,82998,83002,83019,83085,83119,83123,83126,83131,83160,83167,83176,83181,83196,83201,83210,83213,83350,83354,83416,83420,83425,83670,83674,83679,83682,83685,83688,83691,83695,83700,85281,85285,85289,85295,85298,85303,85307,85310,85315,85318,85329,85333,85338,85342,85347,85352,85355,85360,85364,85368,85371,85376,85381,85384,85387,85390,85512,85517,85619,85622,85625,85629,85634,85806,85811,85815,85818,85823,85889,85894,85897,86028,86031,86036,86039,86042,86133,86138,86141,86144,86147,86150,86155,86160,86163,86168,86173,86178,86182,86185,86188,86193,86198,86203,86208,86262,86265,86268,86273,86276,86279,86284,86289,86294,86298,86303,86317,86322,86325,86330,86334,86339,86344,86349,86354,86359,86364,86369,86374,86377,86381,86386,86389,86392,86395,86400,86405,86408,86411,86415,86418,86421,86426,86431,86436,86441,86444,86449,86454,86515,86520,86523,86528,87769,87774,87778,87782,87787,87790,87795,87800,87803,87808,87810,87815,87819,87822,87825,87836,87840,87845,87850,87905,87910,87915,87920,88131,88136,88140,88145,88148,88150,88153,88156,88603,88608,88615,88621,88624,88627,88891,88896,88900,89165,89170,89174,89179,89184,89189,89194,89525,89528,89533,89538,89541,89545,89549,89554,89559,89564,89569,89574,89579,89583,89586,89591,89596,89599,89673,89678,89683,89688,89690,89693,90063,90068,90073,90078,90081,90084,90186,90191,90196,90299,90303,90308,90312,90316,90321,90326,90329,90334,90337,90340,90733,90738,90741,90744,90747,90750,91270,91274,91279,91284,91289,91292,91297,91300,91303,91685,91690,91692,91694,91697,91700,92212,92216,92277,92280,92283,92286,92290,92293,92298,92303,93228],[10,77161,77157],{"id":77162},"_4js进阶",[14,77164,77165],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[60,77167,77169],{"id":77168},"_41-作用域","4.1 作用域",[605,77171,77173],{"id":77172},"_411-局部作用域","4.1.1 局部作用域",[14,77175,77176],{},[420,77177],{"alt":23,"src":77178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77180,77181],{},[420,77182],{"alt":23,"src":77183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1626,77185,77186,77189,77192],{},[591,77187,77188],{},"函数作用域在函数内部",[591,77190,77191],{},"块级作用域在{}",[591,77193,77194],{},"对象的那个{}不是作用域，不是块作用域",[605,77196,77198],{"id":77197},"_412-全局作用域","4.1.2 全局作用域",[14,77200,77201],{},[420,77202],{"alt":23,"src":77203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77205,77206],{},"window.a=10不要这样写",[605,77208,77210],{"id":77209},"_413-作用域链","4.1.3 作用域链",[14,77212,77213],{},"变量查找机制",[14,77215,77216],{},[420,77217],{"alt":23,"src":77218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[60,77220,77222],{"id":77221},"_42-垃圾回收机制","4.2 垃圾回收机制",[605,77224,77226],{"id":77225},"_421-大体介绍","4.2.1 大体介绍",[14,77228,77229],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77231,77232],{},[420,77233],{"alt":23,"src":77234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77236,77237],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[605,77239,77241],{"id":77240},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77243,77244],{},"堆栈空间分配区别：",[588,77246,77247,77250],{},[591,77248,77249],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[591,77251,77252],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77254,77255],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22484,77257,77259],{"id":77258},"_4221-引用计数","4.2.2.1 引用计数",[14,77261,77262],{},[420,77263],{"alt":23,"src":77264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77266,77267],{},[420,77268],{"alt":23,"src":77269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77271,77272],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22484,77274,77276],{"id":77275},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77278,77279],{},[420,77280],{"alt":23,"src":77281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77283,77284],{},[420,77285],{"alt":23,"src":77286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77288,77289],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[60,77291,77293],{"id":77292},"_43-闭包","4.3 闭包",[14,77295,77296],{},[420,77297],{"alt":23,"src":77298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77300,77301],{},"闭包：内层函数+外层函数的变量",[14,77303,77304],{},[420,77305],{"alt":23,"src":77306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77308,77309],{},"closure就是闭包",[14,77311,77312],{},[420,77313],{"alt":23,"src":77314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77316,77317],{},"内层函数必须包含外层函数的变量才是闭包",[14,77319,77320],{},[420,77321],{"alt":23,"src":77322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77324,77325],{},[420,77326],{"alt":23,"src":77327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77329,77330],{},"闭包可能会引起内存泄漏",[14,77332,77333],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[60,77335,77337],{"id":77336},"_44-变量提升","4.4 变量提升",[14,77339,77340],{},[420,77341],{"alt":23,"src":77342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77344,77345],{},[420,77346],{"alt":23,"src":77347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77349,77350],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[60,77352,77354],{"id":77353},"_45-函数进阶","4.5 函数进阶",[605,77356,77358],{"id":77357},"_451-函数提升","4.5.1 函数提升",[14,77360,77361],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77363,77364],{},"只提升函数声明，不提升函数调用",[52290,77366,77367],{},"\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",[605,77369,77371],{"id":77370},"_452-函数参数","4.5.2 函数参数",[22484,77373,77375],{"id":77374},"_4521-动态参数","4.5.2.1 动态参数",[14,77377,77378],{},[420,77379],{"alt":23,"src":77380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77382,77383],{},[420,77384],{"alt":23,"src":77385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77387,77388],{},"箭头函数里边没有arguments",[22484,77390,77392],{"id":77391},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77394,77395],{},[420,77396],{"alt":23,"src":77397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77399,77400],{},[420,77401],{"alt":23,"src":77402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77404,77405],{},"剩余参数使用的时候不需要写...",[14,77407,77408],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77410,77411],{},"  function getSum(a,b,...arr) {",[14,77413,77414],{},"  console.log(11)",[14,77416,77417],{},"  }",[14,77419,77420],{},"  getSum(1,2,3,4)",[14,77422,77423],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77425,77426],{},"  getSum(1,2)",[14,77428,77429],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77431,77432],{},[420,77433],{"alt":23,"src":77434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22484,77436,77438],{"id":77437},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77440,77441],{},[420,77442],{"alt":23,"src":77443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77445,77446],{},[420,77447],{"alt":23,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77450,77451],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77453,77454],{},"展开运算符可以用于数组之间的合并：",[14,77456,77457],{},"const arr1 = [1, 2, 3]",[14,77459,77460],{},"const arr2 = [3, 4, 5]",[14,77462,77463],{},"const arr = [...arr1, ...arr2]",[14,77465,77466],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77468,77469],{},"剩余参数：函数参数使用，得到真数组",[14,77471,77472],{},"展开运算符：数组中使用，数组展开",[605,77474,77476],{"id":77475},"_453-箭头函数","4.5.3 箭头函数",[22484,77478,77480],{"id":77479},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77482,77483],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77485,77486],{},"它不是万能的！！！",[14,77488,77489],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77491,77492],{},[420,77493],{"alt":23,"src":77494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77496,665],{},[14,77498,77499],{},"① 只有一个形参的时候，可以省略小括号：",[14,77501,77502],{},"const fn=x=>{console.log(x)}",[14,77504,77505],{},"② 只有一行代码时可以省略大括号：",[14,77507,77508],{},"const fn=x=>console.log(11)",[14,77510,77511],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77513,77514],{},"const fn=x=>x+x",[14,77516,77517],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77519,77520],{},"⑤ 阻止表单默认提交：",[14,77522,77523],{},"const form = document.querySelector('form')",[14,77525,77526],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77528,77529],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77531,77532],{},"const fn=uname=>({uname:uname})",[14,77534,77535],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77537,77538],{},[420,77539],{"alt":23,"src":77540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77542,77543],{},[420,77544],{"alt":23,"src":77545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77547,77548],{},[420,77549],{"alt":23,"src":77550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77552,77553],{},"一定不要忘记用()，有()就理解为自带return",[22484,77555,77557],{"id":77556},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77559,77560],{},"箭头函数是没有动态参数的arguments",[14,77562,77563],{},[420,77564],{"alt":23,"src":77565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22484,77567,77569],{"id":77568},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77571,11818],{},[588,77573,77574,77577,77580],{},[591,77575,77576],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[591,77578,77579],{},"事件回调函数使用箭头函数时，this 为全局的 window",[591,77581,77582],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77584,77585],{},[420,77586],{"alt":23,"src":77587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[18,77589,77591],{"className":53544,"code":77590,"language":53546,"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,77592,77593,77601,77606,77611,77616,77621,77626,77630,77635,77639,77643,77648,77653,77658,77662,77666,77671,77676,77681],{"__ignoreMap":23},[28,77594,77595,77597,77599],{"class":30,"line":31},[28,77596,52621],{"class":34},[28,77598,52290],{"class":51777},[28,77600,51784],{"class":34},[28,77602,77603],{"class":30,"line":77},[28,77604,77605],{"class":34},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[28,77607,77608],{"class":30,"line":114},[28,77609,77610],{"class":34},"    console.log(this) \u002F\u002F指向window\n",[28,77612,77613],{"class":30,"line":128},[28,77614,77615],{"class":34},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[28,77617,77618],{"class":30,"line":393},[28,77619,77620],{"class":34},"    function fn() {\n",[28,77622,77623],{"class":30,"line":409},[28,77624,77625],{"class":34},"      console.log(this)  \u002F\u002F指向window\n",[28,77627,77628],{"class":30,"line":1711},[28,77629,2677],{"class":34},[28,77631,77632],{"class":30,"line":1802},[28,77633,77634],{"class":34},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[28,77636,77637],{"class":30,"line":1808},[28,77638,2890],{"emptyLinePlaceholder":562},[28,77640,77641],{"class":30,"line":1820},[28,77642,72000],{"class":34},[28,77644,77645],{"class":30,"line":2102},[28,77646,77647],{"class":34},"      name: 'andy',\n",[28,77649,77650],{"class":30,"line":2107},[28,77651,77652],{"class":34},"      sayHai: function () {\n",[28,77654,77655],{"class":30,"line":2113},[28,77656,77657],{"class":34},"        console.log(this)\n",[28,77659,77660],{"class":30,"line":2118},[28,77661,52875],{"class":34},[28,77663,77664],{"class":30,"line":2132},[28,77665,2677],{"class":34},[28,77667,77668],{"class":30,"line":2137},[28,77669,77670],{"class":34},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[28,77672,77673],{"class":30,"line":2143},[28,77674,77675],{"class":34},"    \u002F\u002F 2.箭头函数的this\n",[28,77677,77678],{"class":30,"line":2164},[28,77679,77680],{"class":34},"    const fn = () => console.log(this)\n",[28,77682,77683,77685,77687],{"class":30,"line":2169},[28,77684,52894],{"class":34},[28,77686,52290],{"class":51777},[28,77688,51784],{"class":34},[14,77690,77691],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77693,77694],{},"const fn = () => console.log(this)",[14,77696,77697],{},"fn() \u002F\u002F指向window",[14,77699,77700],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77702,77703],{},"①",[14,77705,77706],{},"const obj = {",[14,77708,77709],{},"uname: 'pink老师',",[14,77711,77712],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77714,1565],{},[14,77716,77717],{},"调用对象里边的函数",[14,77719,77720],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77722,77723],{},"obj.sayHai()",[14,77725,77726],{},"②",[14,77728,77729],{},"const obj1 = {",[14,77731,77709],{},[14,77733,77734],{},"sayHai: function () {",[14,77736,77737],{},"let i = 10",[14,77739,77740],{},"const count = () => {",[14,77742,77743],{},"console.log(this)",[14,77745,77746],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77748,77749],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77751,1565],{},[14,77753,77754],{},"count()",[14,77756,1565],{},[14,77758,1565],{},[14,77760,77761],{},"obj1.sayHai()",[60,77763,77765],{"id":77764},"_46-解构赋值","4.6 解构赋值",[605,77767,77769],{"id":77768},"_461-数组解构","4.6.1 数组解构",[14,77771,77772],{},"以前要是使用数组中的值的话：",[14,77774,77775],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77777,77778],{},"const arr=[100,60,80]",[14,77780,77781],{},"const max=arr[0]",[14,77783,77784],{},"const min=arr[1]",[14,77786,77787],{},"const avg=arr[2]",[14,77789,77790],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77792,77793],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77795,77796],{},"这个写法就类似于上边的那种用很多const的方法",[14,77798,77799],{},[420,77800],{"alt":23,"src":77801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[18,77803,77805],{"className":51110,"code":77804,"language":51112,"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,77806,77807,77812,77817,77822,77827,77832,77836,77840,77845,77849,77854,77859,77863,77868,77873,77884,77894,77899,77904,77909,77913,77917],{"__ignoreMap":23},[28,77808,77809],{"class":30,"line":31},[28,77810,77811],{"class":34},"①变量之间交换值:\n",[28,77813,77814],{"class":30,"line":77},[28,77815,77816],{"class":34},"let a=1\n",[28,77818,77819],{"class":30,"line":114},[28,77820,77821],{"class":34},"let b=2;\n",[28,77823,77824],{"class":30,"line":128},[28,77825,77826],{"class":34},"必须加这行代码，不然就会报错\n",[28,77828,77829],{"class":30,"line":393},[28,77830,77831],{"class":34},"[b,a]=[a,b]\n",[28,77833,77834],{"class":30,"line":409},[28,77835,2890],{"emptyLinePlaceholder":562},[28,77837,77838],{"class":30,"line":1711},[28,77839,2890],{"emptyLinePlaceholder":562},[28,77841,77842],{"class":30,"line":1802},[28,77843,77844],{"class":34},"可以写成下面的方式：\n",[28,77846,77847],{"class":30,"line":1808},[28,77848,77816],{"class":34},[28,77850,77851],{"class":30,"line":1820},[28,77852,77853],{"class":34},"let b=2\n",[28,77855,77856],{"class":30,"line":2102},[28,77857,77858],{"class":34},";[b,a]=[a,b]\n",[28,77860,77861],{"class":30,"line":2107},[28,77862,2890],{"emptyLinePlaceholder":562},[28,77864,77865],{"class":30,"line":2113},[28,77866,77867],{"class":34},"②排序\n",[28,77869,77870],{"class":30,"line":2118},[28,77871,77872],{"class":34},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[28,77874,77875,77878,77881],{"class":30,"line":2132},[28,77876,77877],{"class":34},"for (let i = 0; i ",[28,77879,1529],{"class":77880},"s7hpK",[28,77882,77883],{"class":34}," arr1.length; i++) {\n",[28,77885,77886,77889,77891],{"class":30,"line":2137},[28,77887,77888],{"class":34},"   for (let j = 0; j ",[28,77890,1529],{"class":77880},[28,77892,77893],{"class":34}," arr1.length - 1; j++) {\n",[28,77895,77896],{"class":30,"line":2143},[28,77897,77898],{"class":34},"      if (arr1[j] > arr1[j + 1]) {\n",[28,77900,77901],{"class":30,"line":2164},[28,77902,77903],{"class":34},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[28,77905,77906],{"class":30,"line":2169},[28,77907,77908],{"class":34},"       }\n",[28,77910,77911],{"class":30,"line":2183},[28,77912,4797],{"class":34},[28,77914,77915],{"class":30,"line":2188},[28,77916,2055],{"class":34},[28,77918,77919],{"class":30,"line":2217},[28,77920,77921],{"class":34},"console.log(arr1)\n",[14,77923,77924],{},"数组解构的细节：",[14,77926,77927],{},"①变量多，单元值少",[14,77929,77930],{},[420,77931],{"alt":23,"src":77932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77934,77935],{},"防止出现undefined的方法：",[14,77937,77938],{},"const [a=0,b=0] =[1]",[14,77940,77941],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77943,77944],{},"②变量少，单元值多",[14,77946,77947],{},[420,77948],{"alt":23,"src":77949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77951,77952],{},"此时可以使用剩余参数来接收多余的值",[14,77954,77955],{},"const [a,b,...c]=[1,2,3,4]",[14,77957,77958],{},"console.log(c) 输出[3,4]",[14,77960,77961],{},"③可以按需导入，忽略某些返回值",[14,77963,77964],{},[420,77965],{"alt":23,"src":77966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77968,77969],{},"④支持多维数组的结构",[18,77971,77975],{"className":77972,"code":77973,"language":77974,"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,77976,77977,78005,78021,78036,78051],{"__ignoreMap":23},[28,77978,77979,77981,77983,77985,77987,77989,77991,77993,77996,77998,78000,78002],{"class":30,"line":31},[28,77980,7280],{"class":42},[28,77982,52310],{"class":34},[28,77984,83],{"class":42},[28,77986,52703],{"class":34},[28,77988,39],{"class":38},[28,77990,12921],{"class":34},[28,77992,93],{"class":38},[28,77994,77995],{"class":34},", [",[28,77997,98],{"class":38},[28,77999,12921],{"class":34},[28,78001,103],{"class":38},[28,78003,78004],{"class":34},"]]\n",[28,78006,78007,78010,78012,78014,78016,78018],{"class":30,"line":77},[28,78008,78009],{"class":34},"console.",[28,78011,58724],{"class":2453},[28,78013,4339],{"class":34},[28,78015,822],{"class":38},[28,78017,4704],{"class":34},[28,78019,78020],{"class":73},"  \u002F\u002F1\n",[28,78022,78023,78025,78027,78029,78031,78033],{"class":30,"line":114},[28,78024,78009],{"class":34},[28,78026,58724],{"class":2453},[28,78028,4339],{"class":34},[28,78030,39],{"class":38},[28,78032,4704],{"class":34},[28,78034,78035],{"class":73},"  \u002F\u002F2\n",[28,78037,78038,78040,78042,78044,78046,78048],{"class":30,"line":128},[28,78039,78009],{"class":34},[28,78041,58724],{"class":2453},[28,78043,4339],{"class":34},[28,78045,93],{"class":38},[28,78047,4704],{"class":34},[28,78049,78050],{"class":73},"  \u002F\u002F[3,4]\n",[28,78052,78053,78055,78057,78059,78061,78063,78065,78067],{"class":30,"line":393},[28,78054,78009],{"class":34},[28,78056,58724],{"class":2453},[28,78058,4339],{"class":34},[28,78060,93],{"class":38},[28,78062,5389],{"class":34},[28,78064,822],{"class":38},[28,78066,4704],{"class":34},[28,78068,78069],{"class":73},"  \u002F\u002F3\n",[18,78071,78073],{"className":77972,"code":78072,"language":77974,"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,78074,78075,78102,78113,78124],{"__ignoreMap":23},[28,78076,78077,78079,78082,78084,78086,78088,78090,78092,78094,78096,78098,78100],{"class":30,"line":31},[28,78078,7280],{"class":42},[28,78080,78081],{"class":34}," [a, b, c] ",[28,78083,83],{"class":42},[28,78085,52703],{"class":34},[28,78087,39],{"class":38},[28,78089,12921],{"class":34},[28,78091,93],{"class":38},[28,78093,77995],{"class":34},[28,78095,98],{"class":38},[28,78097,12921],{"class":34},[28,78099,103],{"class":38},[28,78101,78004],{"class":34},[28,78103,78104,78106,78108,78111],{"class":30,"line":77},[28,78105,78009],{"class":34},[28,78107,58724],{"class":2453},[28,78109,78110],{"class":34},"(a)",[28,78112,78020],{"class":73},[28,78114,78115,78117,78119,78122],{"class":30,"line":114},[28,78116,78009],{"class":34},[28,78118,58724],{"class":2453},[28,78120,78121],{"class":34},"(b)",[28,78123,78035],{"class":73},[28,78125,78126,78128,78130,78133],{"class":30,"line":128},[28,78127,78009],{"class":34},[28,78129,58724],{"class":2453},[28,78131,78132],{"class":34},"(c)",[28,78134,78050],{"class":73},[18,78136,78138],{"className":77972,"code":78137,"language":77974,"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,78139,78140,78167,78177,78187,78197],{"__ignoreMap":23},[28,78141,78142,78144,78147,78149,78151,78153,78155,78157,78159,78161,78163,78165],{"class":30,"line":31},[28,78143,7280],{"class":42},[28,78145,78146],{"class":34}," [a, b, [c, d]] ",[28,78148,83],{"class":42},[28,78150,52703],{"class":34},[28,78152,39],{"class":38},[28,78154,12921],{"class":34},[28,78156,93],{"class":38},[28,78158,77995],{"class":34},[28,78160,98],{"class":38},[28,78162,12921],{"class":34},[28,78164,103],{"class":38},[28,78166,78004],{"class":34},[28,78168,78169,78171,78173,78175],{"class":30,"line":77},[28,78170,78009],{"class":34},[28,78172,58724],{"class":2453},[28,78174,78110],{"class":34},[28,78176,78020],{"class":73},[28,78178,78179,78181,78183,78185],{"class":30,"line":114},[28,78180,78009],{"class":34},[28,78182,58724],{"class":2453},[28,78184,78121],{"class":34},[28,78186,78035],{"class":73},[28,78188,78189,78191,78193,78195],{"class":30,"line":128},[28,78190,78009],{"class":34},[28,78192,58724],{"class":2453},[28,78194,78132],{"class":34},[28,78196,78069],{"class":73},[28,78198,78199,78201,78203,78206],{"class":30,"line":393},[28,78200,78009],{"class":34},[28,78202,58724],{"class":2453},[28,78204,78205],{"class":34},"(d)",[28,78207,78208],{"class":73},"  \u002F\u002F4\n",[605,78210,78212],{"id":78211},"_462-对象解构","4.6.2 对象解构",[14,78214,78215],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78217,78218],{},"用的非常非常多！！！！！！",[22484,78220,78222],{"id":78221},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78224,78225],{},"基本语法：",[588,78227,78228,78231,78234,78237],{},[591,78229,78230],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[591,78232,78233],{},"对象属性的值将被赋值给与属性名相同的变量",[591,78235,78236],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[591,78238,78239],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[18,78241,78243],{"className":51110,"code":78242,"language":51112,"meta":23,"style":23},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[25,78244,78245,78250,78255,78260,78264],{"__ignoreMap":23},[28,78246,78247],{"class":30,"line":31},[28,78248,78249],{"class":34},"const obj = {\n",[28,78251,78252],{"class":30,"line":77},[28,78253,78254],{"class":34},"   uname: 'pink老师',\n",[28,78256,78257],{"class":30,"line":114},[28,78258,78259],{"class":34},"   age: 18,\n",[28,78261,78262],{"class":30,"line":128},[28,78263,2055],{"class":34},[28,78265,78266],{"class":30,"line":393},[28,78267,78268],{"class":34},"const { uname, age } = obj\n",[14,78270,78271],{},"上方代码这样写等价于：",[14,78273,78274],{},"const uname等价于obj.uname",[14,78276,78277],{},"变量名可以重新改名：",[14,78279,78280],{},"const uname='red老师'",[14,78282,78283],{},"const user={",[14,78285,78286],{},"  uname:'pink老师',",[14,78288,78289],{},"  age:18",[14,78291,1565],{},[14,78293,78294],{},"const {uname,age}=user",[14,78296,78297],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78299,78300],{},"const {旧变量名：新变量名}=对象",[14,78302,78303],{},"const {uname:username,age}=user",[22484,78305,78307],{"id":78306},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78309,78310],{},[420,78311],{"alt":23,"src":78312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22484,78314,78316],{"id":78315},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78318,78319],{},[420,78320],{"alt":23,"src":78321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[18,78323,78325],{"className":53544,"code":78324,"language":53546,"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,78326,78327,78335,78340,78345,78350,78355,78360,78365,78370,78375,78379,78384,78389],{"__ignoreMap":23},[28,78328,78329,78331,78333],{"class":30,"line":31},[28,78330,52621],{"class":34},[28,78332,52290],{"class":51777},[28,78334,51784],{"class":34},[28,78336,78337],{"class":30,"line":77},[28,78338,78339],{"class":34},"    const pig = {\n",[28,78341,78342],{"class":30,"line":114},[28,78343,78344],{"class":34},"      name: '佩奇',\n",[28,78346,78347],{"class":30,"line":128},[28,78348,78349],{"class":34},"      family: {\n",[28,78351,78352],{"class":30,"line":393},[28,78353,78354],{"class":34},"        mother: '猪妈妈',\n",[28,78356,78357],{"class":30,"line":409},[28,78358,78359],{"class":34},"        father: '猪爸爸',\n",[28,78361,78362],{"class":30,"line":1711},[28,78363,78364],{"class":34},"        sister: '乔治'\n",[28,78366,78367],{"class":30,"line":1802},[28,78368,78369],{"class":34},"      },\n",[28,78371,78372],{"class":30,"line":1808},[28,78373,78374],{"class":34},"      age: 6\n",[28,78376,78377],{"class":30,"line":1820},[28,78378,2677],{"class":34},[28,78380,78381],{"class":30,"line":2102},[28,78382,78383],{"class":34},"    \u002F\u002F 多级对象解构\n",[28,78385,78386],{"class":30,"line":2107},[28,78387,78388],{"class":34},"    const { name, family: { mother, father, sister }, age } = pig\n",[28,78390,78391,78393,78395],{"class":30,"line":2113},[28,78392,52894],{"class":34},[28,78394,52290],{"class":51777},[28,78396,51784],{"class":34},[14,78398,78399],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[18,78401,78404],{"className":78402,"code":78403,"language":76924,"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,78405,78406,78411,78422,78434,78446,78455,78459,78470,78482,78492,78497,78501,78511,78522,78531,78535,78539,78550,78561,78570,78574,78579],{"__ignoreMap":23},[28,78407,78408],{"class":30,"line":31},[28,78409,78410],{"class":73},"    \u002F\u002F 这是后台传递过来的数据\n",[28,78412,78413,78415,78418,78420],{"class":30,"line":77},[28,78414,11707],{"class":42},[28,78416,78417],{"class":34}," msg ",[28,78419,83],{"class":42},[28,78421,16058],{"class":34},[28,78423,78424,78427,78429,78432],{"class":30,"line":114},[28,78425,78426],{"class":735},"      \"code\"",[28,78428,1479],{"class":42},[28,78430,78431],{"class":38}," 200",[28,78433,31945],{"class":34},[28,78435,78436,78439,78441,78444],{"class":30,"line":128},[28,78437,78438],{"class":735},"      \"msg\"",[28,78440,1479],{"class":42},[28,78442,78443],{"class":735}," \"获取新闻列表成功\"",[28,78445,31945],{"class":34},[28,78447,78448,78451,78453],{"class":30,"line":393},[28,78449,78450],{"class":735},"      \"data\"",[28,78452,1479],{"class":42},[28,78454,55924],{"class":34},[28,78456,78457],{"class":30,"line":409},[28,78458,3000],{"class":34},[28,78460,78461,78464,78466,78468],{"class":30,"line":1711},[28,78462,78463],{"class":735},"          \"id\"",[28,78465,1479],{"class":42},[28,78467,25605],{"class":38},[28,78469,31945],{"class":34},[28,78471,78472,78475,78477,78480],{"class":30,"line":1802},[28,78473,78474],{"class":735},"          \"title\"",[28,78476,1479],{"class":42},[28,78478,78479],{"class":735}," \"5G商用自己，三大运用商收入下降\"",[28,78481,31945],{"class":34},[28,78483,78484,78487,78489],{"class":30,"line":1808},[28,78485,78486],{"class":735},"          \"count\"",[28,78488,1479],{"class":42},[28,78490,78491],{"class":38}," 58\n",[28,78493,78494],{"class":30,"line":1820},[28,78495,78496],{"class":34},"        },\n",[28,78498,78499],{"class":30,"line":2102},[28,78500,3000],{"class":34},[28,78502,78503,78505,78507,78509],{"class":30,"line":2107},[28,78504,78463],{"class":735},[28,78506,1479],{"class":42},[28,78508,15241],{"class":38},[28,78510,31945],{"class":34},[28,78512,78513,78515,78517,78520],{"class":30,"line":2113},[28,78514,78474],{"class":735},[28,78516,1479],{"class":42},[28,78518,78519],{"class":735}," \"国际媒体头条速览\"",[28,78521,31945],{"class":34},[28,78523,78524,78526,78528],{"class":30,"line":2118},[28,78525,78486],{"class":735},[28,78527,1479],{"class":42},[28,78529,78530],{"class":38}," 56\n",[28,78532,78533],{"class":30,"line":2132},[28,78534,78496],{"class":34},[28,78536,78537],{"class":30,"line":2137},[28,78538,3000],{"class":34},[28,78540,78541,78543,78545,78548],{"class":30,"line":2143},[28,78542,78463],{"class":735},[28,78544,1479],{"class":42},[28,78546,78547],{"class":38}," 3",[28,78549,31945],{"class":34},[28,78551,78552,78554,78556,78559],{"class":30,"line":2164},[28,78553,78474],{"class":735},[28,78555,1479],{"class":42},[28,78557,78558],{"class":735}," \"乌克兰和俄罗斯持续冲突\"",[28,78560,31945],{"class":34},[28,78562,78563,78565,78567],{"class":30,"line":2169},[28,78564,78486],{"class":735},[28,78566,1479],{"class":42},[28,78568,78569],{"class":38}," 1669\n",[28,78571,78572],{"class":30,"line":2183},[28,78573,78496],{"class":34},[28,78575,78576],{"class":30,"line":2188},[28,78577,78578],{"class":34},"      ]\n",[28,78580,78581],{"class":30,"line":2217},[28,78582,2677],{"class":34},[14,78584,78585],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78587,78588],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78590,78591],{},"\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,78593,78594],{},"function({data}) {",[14,78596,78597],{},"console.log(data)",[14,78599,1565],{},[14,78601,78602],{},"render(msg)",[14,78604,78605],{},"实参传递给形参的时候解构了",[14,78607,78608],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78610,78611],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78613,78614],{},"function render({data:mydata}) {",[14,78616,78617],{},"  console.log(data)",[14,78619,1565],{},[605,78621,78623],{"id":78622},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78625,78626],{},"有两种情况：一个是数组结构，一个是立即执行函数",[588,78628,78629],{},[591,78630,78631],{},"如果对一个数组进行遍历，有两种方式：",[14,78633,78634],{},"①法1",[14,78636,78637],{},"const arr=[1,2,3]",[14,78639,78640],{},"arr.map(function(item,index) {",[14,78642,78643],{},"  console.log(item)",[14,78645,52941],{},[14,78647,78648],{},[420,78649],{"alt":23,"src":78650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78652,78653],{},"②法2",[14,78655,78656],{},"const str='pink'",[14,78658,78659],{},"[1,2,3].map(function(item,index) {",[14,78661,78662],{},"console.log(item)",[14,78664,52941],{},[14,78666,78667],{},[420,78668],{"alt":23,"src":78669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78671,78672],{},"此时会报错",[14,78674,78675],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78677,78662],{},[14,78679,52941],{},[14,78681,78682],{},"内部会当成这样处理，所以我们用分号进行隔开",[60,78684,78686],{"id":78685},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78688,78689],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78691,78692],{},"可以理解为加强版的for循环",[14,78694,78695],{},[420,78696],{"alt":23,"src":78697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78699,78700],{},"里边不写return，不返回数组，只遍历不返回",[14,78702,78703],{},"map是返回数组",[14,78705,78706],{},"forEach主要用于遍历数组对象",[18,78708,78710],{"className":53544,"code":78709,"language":53546,"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,78711,78712,78720,78725,78730,78735,78740,78744,78749],{"__ignoreMap":23},[28,78713,78714,78716,78718],{"class":30,"line":31},[28,78715,52621],{"class":34},[28,78717,52290],{"class":51777},[28,78719,51784],{"class":34},[28,78721,78722],{"class":30,"line":77},[28,78723,78724],{"class":34},"    const arr = ['red', 'green', 'pink']\n",[28,78726,78727],{"class":30,"line":114},[28,78728,78729],{"class":34},"    const result = arr.forEach(function (item, index) {\n",[28,78731,78732],{"class":30,"line":128},[28,78733,78734],{"class":34},"      console.log(item)\n",[28,78736,78737],{"class":30,"line":393},[28,78738,78739],{"class":34},"      console.log(index)\n",[28,78741,78742],{"class":30,"line":409},[28,78743,33938],{"class":34},[28,78745,78746],{"class":30,"line":1711},[28,78747,78748],{"class":34},"    console.log(result)\n",[28,78750,78751,78753,78755],{"class":30,"line":1802},[28,78752,52894],{"class":34},[28,78754,52290],{"class":51777},[28,78756,51784],{"class":34},[14,78758,78759],{},[420,78760],{"alt":23,"src":78761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[60,78763,78765],{"id":78764},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78767,78768],{},[420,78769],{"alt":23,"src":78770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78772,78773],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[18,78775,78777],{"className":53544,"code":78776,"language":53546,"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,78778,78779,78787,78795,78800,78805,78809,78813,78818,78822,78827,78835],{"__ignoreMap":23},[28,78780,78781,78783,78785],{"class":30,"line":31},[28,78782,1529],{"class":34},[28,78784,52277],{"class":51777},[28,78786,51784],{"class":34},[28,78788,78789,78791,78793],{"class":30,"line":77},[28,78790,52621],{"class":34},[28,78792,52290],{"class":51777},[28,78794,51784],{"class":34},[28,78796,78797],{"class":30,"line":114},[28,78798,78799],{"class":34},"    const arr = [10, 20, 30]\n",[28,78801,78802],{"class":30,"line":128},[28,78803,78804],{"class":34},"    const newArr = arr.filter(function (item, index) {\n",[28,78806,78807],{"class":30,"line":393},[28,78808,78734],{"class":34},[28,78810,78811],{"class":30,"line":409},[28,78812,78739],{"class":34},[28,78814,78815],{"class":30,"line":1711},[28,78816,78817],{"class":34},"      return item >= 20\n",[28,78819,78820],{"class":30,"line":1802},[28,78821,33938],{"class":34},[28,78823,78824],{"class":30,"line":1808},[28,78825,78826],{"class":34},"    console.log(newArr)\n",[28,78828,78829,78831,78833],{"class":30,"line":1820},[28,78830,52894],{"class":34},[28,78832,52290],{"class":51777},[28,78834,51784],{"class":34},[28,78836,78837,78839,78841],{"class":30,"line":2102},[28,78838,52262],{"class":34},[28,78840,52277],{"class":51777},[28,78842,51784],{"class":34},[14,78844,78845],{},"这个也可以写成箭头函数：",[18,78847,78849],{"className":51110,"code":78848,"language":51112,"meta":23,"style":23},"const newArr = arr.filter(item => item >= 20)\n",[25,78850,78851],{"__ignoreMap":23},[28,78852,78853],{"class":30,"line":31},[28,78854,78848],{"class":34},[60,78856,78858],{"id":78857},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78860,78861],{},[420,78862],{"alt":23,"src":78863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78865,78866],{},"步骤：",[14,78868,78869],{},"①：渲染页面模块",[1626,78871,78872,78875],{},[591,78873,78874],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[591,78876,78877],{},"用forEach+字符串的形式",[14,78879,78880],{},"②：点击不同需求，显示不同页面内容",[1626,78882,78883,78886,78889,78892,78895],{},[591,78884,78885],{},"点击采取事件委托方式 .filter",[591,78887,78888],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[591,78890,78891],{},"筛选条件是根据点击的 data-index 来判断",[591,78893,78894],{},"可以使用对象解构，把事件对象解构",[591,78896,78897],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[18,78899,78901],{"className":51110,"code":78900,"language":51112,"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,78902,78903,78913,78927,78931,78939,78953,78973,78985,78993,78999,79009,79019,79029,79033,79037,79043,79056,79068,79078,79090,79094,79098,79105,79118,79130,79147,79165,79178,79182,79186,79198,79208,79212,79216,79223,79264,79291,79301,79305,79309,79317,79329,79333,79337,79345,79357,79369,79380,79384,79388,79397,79409,79420,79424,79428,79437,79449,79461,79465,79469,79476,79486,79498,79510,79525,79529,79533,79541,79557,79567,79577,79587,79599,79603,79607,79617,79628,79638,79642,79650,79658,79662,79670,79685,79711,79736,79761,79780,79788,79802,79807,79812,79817,79822,79827,79835,79843,79848,79859,79864,79874,79884,79894,79904,79908,79912,79921,79930,79939,79948,79952,79956,79965,79974,79983,79992,79996,80000,80009,80018,80027,80036,80040,80044,80053,80062,80071,80080,80084,80088,80097,80106,80115,80124,80128,80132,80141,80150,80159,80168,80172,80176,80185,80194,80202,80211,80215,80219,80223,80228,80240,80245,80257,80261,80278,80306,80315,80320,80330,80340,80349,80354,80359,80363,80368,80385,80389,80394,80402,80407,80434,80439,80459,80464,80476,80481,80486,80491,80502,80516,80553,80571,80604,80621,80645,80649,80654,80660,80664,80668,80672,80680,80688,80692],{"__ignoreMap":23},[28,78904,78905,78907,78909,78911],{"class":30,"line":31},[28,78906,51774],{"class":34},[28,78908,51778],{"class":51777},[28,78910,51781],{"class":2453},[28,78912,51784],{"class":34},[28,78914,78915,78917,78919,78921,78923,78925],{"class":30,"line":77},[28,78916,1529],{"class":34},[28,78918,51112],{"class":51777},[28,78920,51793],{"class":2453},[28,78922,83],{"class":34},[28,78924,51798],{"class":735},[28,78926,51784],{"class":34},[28,78928,78929],{"class":30,"line":114},[28,78930,2890],{"emptyLinePlaceholder":562},[28,78932,78933,78935,78937],{"class":30,"line":128},[28,78934,1529],{"class":34},[28,78936,51811],{"class":51777},[28,78938,51784],{"class":34},[28,78940,78941,78943,78945,78947,78949,78951],{"class":30,"line":393},[28,78942,52621],{"class":34},[28,78944,51821],{"class":51777},[28,78946,51824],{"class":2453},[28,78948,83],{"class":34},[28,78950,51829],{"class":735},[28,78952,51784],{"class":34},[28,78954,78955,78957,78959,78961,78963,78965,78967,78969,78971],{"class":30,"line":409},[28,78956,52621],{"class":34},[28,78958,51821],{"class":51777},[28,78960,15406],{"class":2453},[28,78962,83],{"class":34},[28,78964,51868],{"class":735},[28,78966,51848],{"class":2453},[28,78968,83],{"class":34},[28,78970,51875],{"class":735},[28,78972,51784],{"class":34},[28,78974,78975,78977,78979,78981,78983],{"class":30,"line":1711},[28,78976,52621],{"class":34},[28,78978,51884],{"class":51777},[28,78980,51887],{"class":34},[28,78982,51884],{"class":51777},[28,78984,51784],{"class":34},[28,78986,78987,78989,78991],{"class":30,"line":1802},[28,78988,52621],{"class":34},[28,78990,547],{"class":51777},[28,78992,51784],{"class":34},[28,78994,78995,78997],{"class":30,"line":1808},[28,78996,6891],{"class":51777},[28,78998,16058],{"class":34},[28,79000,79001,79003,79005,79007],{"class":30,"line":1820},[28,79002,55172],{"class":38},[28,79004,51914],{"class":34},[28,79006,822],{"class":38},[28,79008,1781],{"class":34},[28,79010,79011,79013,79015,79017],{"class":30,"line":2102},[28,79012,55183],{"class":38},[28,79014,51914],{"class":34},[28,79016,822],{"class":38},[28,79018,1781],{"class":34},[28,79020,79021,79023,79025,79027],{"class":30,"line":2107},[28,79022,73073],{"class":38},[28,79024,51914],{"class":34},[28,79026,60982],{"class":38},[28,79028,1781],{"class":34},[28,79030,79031],{"class":30,"line":2113},[28,79032,2677],{"class":34},[28,79034,79035],{"class":30,"line":2118},[28,79036,2890],{"emptyLinePlaceholder":562},[28,79038,79039,79041],{"class":30,"line":2132},[28,79040,62600],{"class":2453},[28,79042,16058],{"class":34},[28,79044,79045,79047,79049,79052,79054],{"class":30,"line":2137},[28,79046,55248],{"class":38},[28,79048,51914],{"class":34},[28,79050,79051],{"class":38},"990",[28,79053,51969],{"class":42},[28,79055,1781],{"class":34},[28,79057,79058,79060,79062,79064,79066],{"class":30,"line":2143},[28,79059,55183],{"class":38},[28,79061,51914],{"class":34},[28,79063,822],{"class":38},[28,79065,52033],{"class":38},[28,79067,1781],{"class":34},[28,79069,79070,79072,79074,79076],{"class":30,"line":2164},[28,79071,55486],{"class":38},[28,79073,51914],{"class":34},[28,79075,51954],{"class":38},[28,79077,1781],{"class":34},[28,79079,79080,79083,79085,79088],{"class":30,"line":2169},[28,79081,79082],{"class":38},"      flex-wrap",[28,79084,51914],{"class":34},[28,79086,79087],{"class":38},"wrap",[28,79089,1781],{"class":34},[28,79091,79092],{"class":30,"line":2183},[28,79093,2677],{"class":34},[28,79095,79096],{"class":30,"line":2188},[28,79097,2890],{"emptyLinePlaceholder":562},[28,79099,79100,79103],{"class":30,"line":2217},[28,79101,79102],{"class":2453},"    .item",[28,79104,16058],{"class":34},[28,79106,79107,79109,79111,79114,79116],{"class":30,"line":2222},[28,79108,55248],{"class":38},[28,79110,51914],{"class":34},[28,79112,79113],{"class":38},"240",[28,79115,51969],{"class":42},[28,79117,1781],{"class":34},[28,79119,79120,79122,79124,79126,79128],{"class":30,"line":2239},[28,79121,62477],{"class":38},[28,79123,51914],{"class":34},[28,79125,225],{"class":38},[28,79127,51969],{"class":42},[28,79129,1781],{"class":34},[28,79131,79132,79134,79136,79138,79140,79143,79145],{"class":30,"line":2244},[28,79133,55172],{"class":38},[28,79135,51914],{"class":34},[28,79137,1320],{"class":38},[28,79139,51969],{"class":42},[28,79141,79142],{"class":38}," 30",[28,79144,51969],{"class":42},[28,79146,1781],{"class":34},[28,79148,79149,79151,79153,79155,79158,79161,79163],{"class":30,"line":2249},[28,79150,62337],{"class":38},[28,79152,51914],{"class":34},[28,79154,28607],{"class":38},[28,79156,79157],{"class":38}," ease",[28,79159,79160],{"class":38}," .5",[28,79162,1315],{"class":42},[28,79164,1781],{"class":34},[28,79166,79167,79170,79172,79174,79176],{"class":30,"line":2254},[28,79168,79169],{"class":38},"      margin-bottom",[28,79171,51914],{"class":34},[28,79173,1320],{"class":38},[28,79175,51969],{"class":42},[28,79177,1781],{"class":34},[28,79179,79180],{"class":30,"line":2268},[28,79181,2677],{"class":34},[28,79183,79184],{"class":30,"line":2273},[28,79185,2890],{"emptyLinePlaceholder":562},[28,79187,79188,79191,79193,79196],{"class":30,"line":3067},[28,79189,79190],{"class":2453},"    .item:nth-child",[28,79192,367],{"class":34},[28,79194,79195],{"class":38},"4n",[28,79197,12928],{"class":34},[28,79199,79200,79202,79204,79206],{"class":30,"line":3081},[28,79201,62477],{"class":38},[28,79203,51914],{"class":34},[28,79205,822],{"class":38},[28,79207,1781],{"class":34},[28,79209,79210],{"class":30,"line":3089},[28,79211,2677],{"class":34},[28,79213,79214],{"class":30,"line":3094},[28,79215,2890],{"emptyLinePlaceholder":562},[28,79217,79218,79221],{"class":30,"line":3100},[28,79219,79220],{"class":2453},"    .item:hover",[28,79222,16058],{"class":34},[28,79224,79225,79228,79230,79232,79234,79236,79238,79240,79242,79245,79247,79249,79251,79253,79255,79257,79259,79262],{"class":30,"line":3106},[28,79226,79227],{"class":38},"      box-shadow",[28,79229,51914],{"class":34},[28,79231,822],{"class":38},[28,79233,51969],{"class":42},[28,79235,4581],{"class":38},[28,79237,51969],{"class":42},[28,79239,2638],{"class":38},[28,79241,51969],{"class":42},[28,79243,79244],{"class":38}," rgba",[28,79246,367],{"class":34},[28,79248,822],{"class":38},[28,79250,12921],{"class":34},[28,79252,822],{"class":38},[28,79254,12921],{"class":34},[28,79256,822],{"class":38},[28,79258,12921],{"class":34},[28,79260,79261],{"class":38},".2",[28,79263,3209],{"class":34},[28,79265,79266,79269,79271,79274,79276,79278,79280,79283,79285,79287,79289],{"class":30,"line":3111},[28,79267,79268],{"class":38},"      transform",[28,79270,51914],{"class":34},[28,79272,79273],{"class":38},"translate3d",[28,79275,367],{"class":34},[28,79277,822],{"class":38},[28,79279,12921],{"class":34},[28,79281,79282],{"class":38},"-4",[28,79284,51969],{"class":42},[28,79286,12921],{"class":34},[28,79288,822],{"class":38},[28,79290,3209],{"class":34},[28,79292,79293,79295,79297,79299],{"class":30,"line":8436},[28,79294,62502],{"class":38},[28,79296,51914],{"class":34},[28,79298,62507],{"class":38},[28,79300,1781],{"class":34},[28,79302,79303],{"class":30,"line":8460},[28,79304,2677],{"class":34},[28,79306,79307],{"class":30,"line":8465},[28,79308,2890],{"emptyLinePlaceholder":562},[28,79310,79311,79313,79315],{"class":30,"line":8471},[28,79312,79102],{"class":2453},[28,79314,56092],{"class":51777},[28,79316,16058],{"class":34},[28,79318,79319,79321,79323,79325,79327],{"class":30,"line":8498},[28,79320,55248],{"class":38},[28,79322,51914],{"class":34},[28,79324,938],{"class":38},[28,79326,954],{"class":42},[28,79328,1781],{"class":34},[28,79330,79331],{"class":30,"line":8503},[28,79332,2677],{"class":34},[28,79334,79335],{"class":30,"line":8509},[28,79336,2890],{"emptyLinePlaceholder":562},[28,79338,79339,79341,79343],{"class":30,"line":8521},[28,79340,79102],{"class":2453},[28,79342,62781],{"class":2453},[28,79344,16058],{"class":34},[28,79346,79347,79349,79351,79353,79355],{"class":30,"line":8533},[28,79348,55399],{"class":38},[28,79350,51914],{"class":34},[28,79352,1270],{"class":38},[28,79354,51969],{"class":42},[28,79356,1781],{"class":34},[28,79358,79359,79361,79363,79365,79367],{"class":30,"line":8545},[28,79360,79169],{"class":38},[28,79362,51914],{"class":34},[28,79364,225],{"class":38},[28,79366,51969],{"class":42},[28,79368,1781],{"class":34},[28,79370,79371,79373,79375,79378],{"class":30,"line":10202},[28,79372,57893],{"class":38},[28,79374,51914],{"class":34},[28,79376,79377],{"class":38},"#666",[28,79379,1781],{"class":34},[28,79381,79382],{"class":30,"line":10227},[28,79383,2677],{"class":34},[28,79385,79386],{"class":30,"line":10250},[28,79387,2890],{"emptyLinePlaceholder":562},[28,79389,79390,79392,79395],{"class":30,"line":10274},[28,79391,79102],{"class":2453},[28,79393,79394],{"class":2453}," .price",[28,79396,16058],{"class":34},[28,79398,79399,79401,79403,79405,79407],{"class":30,"line":10279},[28,79400,55399],{"class":38},[28,79402,51914],{"class":34},[28,79404,1370],{"class":38},[28,79406,51969],{"class":42},[28,79408,1781],{"class":34},[28,79410,79411,79413,79415,79418],{"class":30,"line":10284},[28,79412,57893],{"class":38},[28,79414,51914],{"class":34},[28,79416,79417],{"class":38},"firebrick",[28,79419,1781],{"class":34},[28,79421,79422],{"class":30,"line":10289},[28,79423,2677],{"class":34},[28,79425,79426],{"class":30,"line":10298},[28,79427,2890],{"emptyLinePlaceholder":562},[28,79429,79430,79432,79435],{"class":30,"line":10303},[28,79431,79102],{"class":2453},[28,79433,79434],{"class":2453}," .price::before",[28,79436,16058],{"class":34},[28,79438,79439,79442,79444,79447],{"class":30,"line":10309},[28,79440,79441],{"class":38},"      content",[28,79443,51914],{"class":34},[28,79445,79446],{"class":735},"'￥'",[28,79448,1781],{"class":34},[28,79450,79451,79453,79455,79457,79459],{"class":30,"line":10330},[28,79452,55399],{"class":38},[28,79454,51914],{"class":34},[28,79456,1170],{"class":38},[28,79458,51969],{"class":42},[28,79460,1781],{"class":34},[28,79462,79463],{"class":30,"line":10336},[28,79464,2677],{"class":34},[28,79466,79467],{"class":30,"line":10350},[28,79468,2890],{"emptyLinePlaceholder":562},[28,79470,79471,79474],{"class":30,"line":10356},[28,79472,79473],{"class":2453},"    .filter",[28,79475,16058],{"class":34},[28,79477,79478,79480,79482,79484],{"class":30,"line":10383},[28,79479,55486],{"class":38},[28,79481,51914],{"class":34},[28,79483,51954],{"class":38},[28,79485,1781],{"class":34},[28,79487,79488,79490,79492,79494,79496],{"class":30,"line":10392},[28,79489,55248],{"class":38},[28,79491,51914],{"class":34},[28,79493,79051],{"class":38},[28,79495,51969],{"class":42},[28,79497,1781],{"class":34},[28,79499,79500,79502,79504,79506,79508],{"class":30,"line":10398},[28,79501,55183],{"class":38},[28,79503,51914],{"class":34},[28,79505,822],{"class":38},[28,79507,52033],{"class":38},[28,79509,1781],{"class":34},[28,79511,79512,79514,79516,79518,79520,79522],{"class":30,"line":10406},[28,79513,55172],{"class":38},[28,79515,51914],{"class":34},[28,79517,1276],{"class":38},[28,79519,51969],{"class":42},[28,79521,79142],{"class":38},[28,79523,79524],{"class":42},"px\n",[28,79526,79527],{"class":30,"line":10411},[28,79528,2677],{"class":34},[28,79530,79531],{"class":30,"line":17090},[28,79532,2890],{"emptyLinePlaceholder":562},[28,79534,79535,79537,79539],{"class":30,"line":17096},[28,79536,79473],{"class":2453},[28,79538,1889],{"class":51777},[28,79540,16058],{"class":34},[28,79542,79543,79545,79547,79549,79551,79553,79555],{"class":30,"line":17119},[28,79544,55172],{"class":38},[28,79546,51914],{"class":34},[28,79548,225],{"class":38},[28,79550,51969],{"class":42},[28,79552,9438],{"class":38},[28,79554,51969],{"class":42},[28,79556,1781],{"class":34},[28,79558,79559,79561,79563,79565],{"class":30,"line":17125},[28,79560,62198],{"class":38},[28,79562,51914],{"class":34},[28,79564,62295],{"class":38},[28,79566,1781],{"class":34},[28,79568,79569,79571,79573,79575],{"class":30,"line":17148},[28,79570,57893],{"class":38},[28,79572,51914],{"class":34},[28,79574,79377],{"class":38},[28,79576,1781],{"class":34},[28,79578,79579,79581,79583,79585],{"class":30,"line":17162},[28,79580,64447],{"class":38},[28,79582,51914],{"class":34},[28,79584,55214],{"class":38},[28,79586,1781],{"class":34},[28,79588,79589,79591,79593,79595,79597],{"class":30,"line":17182},[28,79590,62227],{"class":38},[28,79592,51914],{"class":34},[28,79594,1320],{"class":38},[28,79596,51969],{"class":42},[28,79598,1781],{"class":34},[28,79600,79601],{"class":30,"line":17188},[28,79602,2677],{"class":34},[28,79604,79605],{"class":30,"line":17199},[28,79606,2890],{"emptyLinePlaceholder":562},[28,79608,79609,79611,79613,79615],{"class":30,"line":17222},[28,79610,79473],{"class":2453},[28,79612,1889],{"class":51777},[28,79614,62377],{"class":2453},[28,79616,16058],{"class":34},[28,79618,79619,79621,79623,79626],{"class":30,"line":17244},[28,79620,55361],{"class":38},[28,79622,51914],{"class":34},[28,79624,79625],{"class":38},"#05943c",[28,79627,1781],{"class":34},[28,79629,79630,79632,79634,79636],{"class":30,"line":17249},[28,79631,57893],{"class":38},[28,79633,51914],{"class":34},[28,79635,61319],{"class":38},[28,79637,1781],{"class":34},[28,79639,79640],{"class":30,"line":17255},[28,79641,2677],{"class":34},[28,79643,79644,79646,79648],{"class":30,"line":17269},[28,79645,52894],{"class":34},[28,79647,547],{"class":51777},[28,79649,51784],{"class":34},[28,79651,79652,79654,79656],{"class":30,"line":17282},[28,79653,52262],{"class":34},[28,79655,51811],{"class":51777},[28,79657,51784],{"class":34},[28,79659,79660],{"class":30,"line":17287},[28,79661,2890],{"emptyLinePlaceholder":562},[28,79663,79664,79666,79668],{"class":30,"line":17301},[28,79665,1529],{"class":34},[28,79667,52277],{"class":51777},[28,79669,51784],{"class":34},[28,79671,79672,79674,79676,79678,79680,79683],{"class":30,"line":17306},[28,79673,52621],{"class":34},[28,79675,52088],{"class":51777},[28,79677,53963],{"class":2453},[28,79679,83],{"class":34},[28,79681,79682],{"class":735},"\"filter\"",[28,79684,51784],{"class":34},[28,79686,79687,79689,79691,79693,79695,79697,79700,79702,79704,79707,79709],{"class":30,"line":17312},[28,79688,51818],{"class":34},[28,79690,80],{"class":51777},[28,79692,61534],{"class":2453},[28,79694,83],{"class":34},[28,79696,61539],{"class":735},[28,79698,79699],{"class":2453}," data-index",[28,79701,83],{"class":34},[28,79703,4166],{"class":735},[28,79705,79706],{"class":34},">0-100元\u003C\u002F",[28,79708,80],{"class":51777},[28,79710,51784],{"class":34},[28,79712,79713,79715,79717,79719,79721,79723,79725,79727,79729,79732,79734],{"class":30,"line":17317},[28,79714,51818],{"class":34},[28,79716,80],{"class":51777},[28,79718,61534],{"class":2453},[28,79720,83],{"class":34},[28,79722,61539],{"class":735},[28,79724,79699],{"class":2453},[28,79726,83],{"class":34},[28,79728,4189],{"class":735},[28,79730,79731],{"class":34},">100-300元\u003C\u002F",[28,79733,80],{"class":51777},[28,79735,51784],{"class":34},[28,79737,79738,79740,79742,79744,79746,79748,79750,79752,79754,79757,79759],{"class":30,"line":17331},[28,79739,51818],{"class":34},[28,79741,80],{"class":51777},[28,79743,61534],{"class":2453},[28,79745,83],{"class":34},[28,79747,61539],{"class":735},[28,79749,79699],{"class":2453},[28,79751,83],{"class":34},[28,79753,4202],{"class":735},[28,79755,79756],{"class":34},">300元以上\u003C\u002F",[28,79758,80],{"class":51777},[28,79760,51784],{"class":34},[28,79762,79763,79765,79767,79769,79771,79773,79776,79778],{"class":30,"line":17336},[28,79764,51818],{"class":34},[28,79766,80],{"class":51777},[28,79768,61534],{"class":2453},[28,79770,83],{"class":34},[28,79772,61539],{"class":735},[28,79774,79775],{"class":34},">全部区间\u003C\u002F",[28,79777,80],{"class":51777},[28,79779,51784],{"class":34},[28,79781,79782,79784,79786],{"class":30,"line":17341},[28,79783,52894],{"class":34},[28,79785,52088],{"class":51777},[28,79787,51784],{"class":34},[28,79789,79790,79792,79794,79796,79798,79800],{"class":30,"line":17355},[28,79791,52621],{"class":34},[28,79793,52088],{"class":51777},[28,79795,53963],{"class":2453},[28,79797,83],{"class":34},[28,79799,63085],{"class":735},[28,79801,51784],{"class":34},[28,79803,79804],{"class":30,"line":17367},[28,79805,79806],{"class":73},"    \u003C!-- \u003Cdiv class=\"item\">\n",[28,79808,79809],{"class":30,"line":17372},[28,79810,79811],{"class":73},"      \u003Cimg src=\"\" alt=\"\">\n",[28,79813,79814],{"class":30,"line":17385},[28,79815,79816],{"class":73},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[28,79818,79819],{"class":30,"line":17390},[28,79820,79821],{"class":73},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[28,79823,79824],{"class":30,"line":17395},[28,79825,79826],{"class":73},"    \u003C\u002Fdiv> -->\n",[28,79828,79829,79831,79833],{"class":30,"line":17400},[28,79830,52894],{"class":34},[28,79832,52088],{"class":51777},[28,79834,51784],{"class":34},[28,79836,79837,79839,79841],{"class":30,"line":17413},[28,79838,52621],{"class":34},[28,79840,52290],{"class":51777},[28,79842,51784],{"class":34},[28,79844,79845],{"class":30,"line":17418},[28,79846,79847],{"class":73},"    \u002F\u002F 2. 初始化数据\n",[28,79849,79850,79852,79855,79857],{"class":30,"line":33111},[28,79851,11707],{"class":42},[28,79853,79854],{"class":38}," goodsList",[28,79856,14050],{"class":42},[28,79858,55924],{"class":34},[28,79860,79861],{"class":30,"line":33117},[28,79862,79863],{"class":34},"      {\n",[28,79865,79866,79869,79872],{"class":30,"line":33123},[28,79867,79868],{"class":34},"        id: ",[28,79870,79871],{"class":735},"'4001172'",[28,79873,31945],{"class":34},[28,79875,79876,79879,79882],{"class":30,"line":33129},[28,79877,79878],{"class":34},"        name: ",[28,79880,79881],{"class":735},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[28,79883,31945],{"class":34},[28,79885,79886,79889,79892],{"class":30,"line":33135},[28,79887,79888],{"class":34},"        price: ",[28,79890,79891],{"class":735},"'289.00'",[28,79893,31945],{"class":34},[28,79895,79896,79899,79902],{"class":30,"line":33146},[28,79897,79898],{"class":34},"        picture: ",[28,79900,79901],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[28,79903,31945],{"class":34},[28,79905,79906],{"class":30,"line":33152},[28,79907,78369],{"class":34},[28,79909,79910],{"class":30,"line":33172},[28,79911,79863],{"class":34},[28,79913,79914,79916,79919],{"class":30,"line":33178},[28,79915,79868],{"class":34},[28,79917,79918],{"class":735},"'4001594'",[28,79920,31945],{"class":34},[28,79922,79923,79925,79928],{"class":30,"line":33189},[28,79924,79878],{"class":34},[28,79926,79927],{"class":735},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[28,79929,31945],{"class":34},[28,79931,79932,79934,79937],{"class":30,"line":33195},[28,79933,79888],{"class":34},[28,79935,79936],{"class":735},"'288.00'",[28,79938,31945],{"class":34},[28,79940,79941,79943,79946],{"class":30,"line":33201},[28,79942,79898],{"class":34},[28,79944,79945],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[28,79947,31945],{"class":34},[28,79949,79950],{"class":30,"line":33207},[28,79951,78369],{"class":34},[28,79953,79954],{"class":30,"line":33213},[28,79955,79863],{"class":34},[28,79957,79958,79960,79963],{"class":30,"line":33219},[28,79959,79868],{"class":34},[28,79961,79962],{"class":735},"'4001009'",[28,79964,31945],{"class":34},[28,79966,79967,79969,79972],{"class":30,"line":33225},[28,79968,79878],{"class":34},[28,79970,79971],{"class":735},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[28,79973,31945],{"class":34},[28,79975,79976,79978,79981],{"class":30,"line":33231},[28,79977,79888],{"class":34},[28,79979,79980],{"class":735},"'109.00'",[28,79982,31945],{"class":34},[28,79984,79985,79987,79990],{"class":30,"line":33251},[28,79986,79898],{"class":34},[28,79988,79989],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[28,79991,31945],{"class":34},[28,79993,79994],{"class":30,"line":33257},[28,79995,78369],{"class":34},[28,79997,79998],{"class":30,"line":33273},[28,79999,79863],{"class":34},[28,80001,80002,80004,80007],{"class":30,"line":33279},[28,80003,79868],{"class":34},[28,80005,80006],{"class":735},"'4001874'",[28,80008,31945],{"class":34},[28,80010,80011,80013,80016],{"class":30,"line":33293},[28,80012,79878],{"class":34},[28,80014,80015],{"class":735},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[28,80017,31945],{"class":34},[28,80019,80020,80022,80025],{"class":30,"line":33299},[28,80021,79888],{"class":34},[28,80023,80024],{"class":735},"'488.00'",[28,80026,31945],{"class":34},[28,80028,80029,80031,80034],{"class":30,"line":33314},[28,80030,79898],{"class":34},[28,80032,80033],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[28,80035,31945],{"class":34},[28,80037,80038],{"class":30,"line":33320},[28,80039,78369],{"class":34},[28,80041,80042],{"class":30,"line":33329},[28,80043,79863],{"class":34},[28,80045,80046,80048,80051],{"class":30,"line":33335},[28,80047,79868],{"class":34},[28,80049,80050],{"class":735},"'4001649'",[28,80052,31945],{"class":34},[28,80054,80055,80057,80060],{"class":30,"line":33344},[28,80056,79878],{"class":34},[28,80058,80059],{"class":735},"'大师监制龙泉青瓷茶叶罐'",[28,80061,31945],{"class":34},[28,80063,80064,80066,80069],{"class":30,"line":33350},[28,80065,79888],{"class":34},[28,80067,80068],{"class":735},"'139.00'",[28,80070,31945],{"class":34},[28,80072,80073,80075,80078],{"class":30,"line":33356},[28,80074,79898],{"class":34},[28,80076,80077],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[28,80079,31945],{"class":34},[28,80081,80082],{"class":30,"line":33365},[28,80083,78369],{"class":34},[28,80085,80086],{"class":30,"line":33371},[28,80087,79863],{"class":34},[28,80089,80090,80092,80095],{"class":30,"line":33382},[28,80091,79868],{"class":34},[28,80093,80094],{"class":735},"'3997185'",[28,80096,31945],{"class":34},[28,80098,80099,80101,80104],{"class":30,"line":33388},[28,80100,79878],{"class":34},[28,80102,80103],{"class":735},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[28,80105,31945],{"class":34},[28,80107,80108,80110,80113],{"class":30,"line":33407},[28,80109,79888],{"class":34},[28,80111,80112],{"class":735},"'108.00'",[28,80114,31945],{"class":34},[28,80116,80117,80119,80122],{"class":30,"line":33413},[28,80118,79898],{"class":34},[28,80120,80121],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[28,80123,31945],{"class":34},[28,80125,80126],{"class":30,"line":33424},[28,80127,78369],{"class":34},[28,80129,80130],{"class":30,"line":33430},[28,80131,79863],{"class":34},[28,80133,80134,80136,80139],{"class":30,"line":33450},[28,80135,79868],{"class":34},[28,80137,80138],{"class":735},"'3997403'",[28,80140,31945],{"class":34},[28,80142,80143,80145,80148],{"class":30,"line":33466},[28,80144,79878],{"class":34},[28,80146,80147],{"class":735},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[28,80149,31945],{"class":34},[28,80151,80152,80154,80157],{"class":30,"line":33472},[28,80153,79888],{"class":34},[28,80155,80156],{"class":735},"'100.00'",[28,80158,31945],{"class":34},[28,80160,80161,80163,80166],{"class":30,"line":33486},[28,80162,79898],{"class":34},[28,80164,80165],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[28,80167,31945],{"class":34},[28,80169,80170],{"class":30,"line":33492},[28,80171,78369],{"class":34},[28,80173,80174],{"class":30,"line":33498},[28,80175,79863],{"class":34},[28,80177,80178,80180,80183],{"class":30,"line":33509},[28,80179,79868],{"class":34},[28,80181,80182],{"class":735},"'3998274'",[28,80184,31945],{"class":34},[28,80186,80187,80189,80192],{"class":30,"line":33515},[28,80188,79878],{"class":34},[28,80190,80191],{"class":735},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[28,80193,31945],{"class":34},[28,80195,80196,80198,80200],{"class":30,"line":33521},[28,80197,79888],{"class":34},[28,80199,80068],{"class":735},[28,80201,31945],{"class":34},[28,80203,80204,80206,80209],{"class":30,"line":33531},[28,80205,79898],{"class":34},[28,80207,80208],{"class":735},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[28,80210,31945],{"class":34},[28,80212,80213],{"class":30,"line":33537},[28,80214,78369],{"class":34},[28,80216,80217],{"class":30,"line":33548},[28,80218,53586],{"class":34},[28,80220,80221],{"class":30,"line":33554},[28,80222,2890],{"emptyLinePlaceholder":562},[28,80224,80225],{"class":30,"line":33564},[28,80226,80227],{"class":73},"    \u002F\u002F 1.渲染函数\n",[28,80229,80230,80232,80234,80236,80238],{"class":30,"line":33569},[28,80231,70561],{"class":42},[28,80233,70564],{"class":2453},[28,80235,367],{"class":34},[28,80237,4368],{"class":5704},[28,80239,12928],{"class":34},[28,80241,80242],{"class":30,"line":33575},[28,80243,80244],{"class":73},"      \u002F\u002F 声明空字符串\n",[28,80246,80247,80250,80253,80255],{"class":30,"line":33624},[28,80248,80249],{"class":42},"      let",[28,80251,80252],{"class":34}," str ",[28,80254,83],{"class":42},[28,80256,70581],{"class":735},[28,80258,80259],{"class":30,"line":33671},[28,80260,70586],{"class":73},[28,80262,80263,80265,80268,80270,80273,80276],{"class":30,"line":33676},[28,80264,58484],{"class":34},[28,80266,80267],{"class":2453},"forEach",[28,80269,367],{"class":34},[28,80271,80272],{"class":5704},"item",[28,80274,80275],{"class":42}," =>",[28,80277,16058],{"class":34},[28,80279,80280,80282,80285,80288,80290,80293,80295,80298,80301,80303],{"class":30,"line":33682},[28,80281,61747],{"class":42},[28,80283,80284],{"class":34}," { ",[28,80286,80287],{"class":38},"name",[28,80289,12921],{"class":34},[28,80291,80292],{"class":38},"price",[28,80294,12921],{"class":34},[28,80296,80297],{"class":38},"picture",[28,80299,80300],{"class":34}," } ",[28,80302,83],{"class":42},[28,80304,80305],{"class":34}," item\n",[28,80307,80308,80311,80313],{"class":30,"line":33701},[28,80309,80310],{"class":34},"        str ",[28,80312,9964],{"class":42},[28,80314,70645],{"class":735},[28,80316,80317],{"class":30,"line":33707},[28,80318,80319],{"class":735},"          \u003Cdiv class=\"item\">\n",[28,80321,80322,80325,80327],{"class":30,"line":33726},[28,80323,80324],{"class":735},"            \u003Cimg src=\"${",[28,80326,80297],{"class":34},[28,80328,80329],{"class":735},"}\" alt=\"\">\n",[28,80331,80332,80335,80337],{"class":30,"line":33732},[28,80333,80334],{"class":735},"            \u003Cp class=\"name\">${",[28,80336,80287],{"class":34},[28,80338,80339],{"class":735},"}\u003C\u002Fp>\n",[28,80341,80342,80345,80347],{"class":30,"line":33738},[28,80343,80344],{"class":735},"            \u003Cp class=\"price\">${",[28,80346,80292],{"class":34},[28,80348,80339],{"class":735},[28,80350,80351],{"class":30,"line":33748},[28,80352,80353],{"class":735},"          \u003C\u002Fdiv>\n",[28,80355,80356],{"class":30,"line":33753},[28,80357,80358],{"class":735},"        `\n",[28,80360,80361],{"class":30,"line":33759},[28,80362,65292],{"class":34},[28,80364,80365],{"class":30,"line":33775},[28,80366,80367],{"class":73},"      \u002F\u002F 追加给List\n",[28,80369,80370,80372,80374,80376,80379,80381,80383],{"class":30,"line":33820},[28,80371,56248],{"class":34},[28,80373,54876],{"class":2453},[28,80375,367],{"class":34},[28,80377,80378],{"class":735},"'.list'",[28,80380,74726],{"class":34},[28,80382,83],{"class":42},[28,80384,74462],{"class":34},[28,80386,80387],{"class":30,"line":33826},[28,80388,2677],{"class":34},[28,80390,80391],{"class":30,"line":33832},[28,80392,80393],{"class":73},"    \u002F\u002F 页面一打开就需要渲染\n",[28,80395,80396,80399],{"class":30,"line":33838},[28,80397,80398],{"class":2453},"    render",[28,80400,80401],{"class":34},"(goodsList)\n",[28,80403,80404],{"class":30,"line":33849},[28,80405,80406],{"class":73},"    \u002F\u002F 2.过滤筛选\n",[28,80408,80409,80411,80413,80415,80418,80420,80422,80424,80426,80428,80430,80432],{"class":30,"line":33855},[28,80410,52884],{"class":34},[28,80412,54876],{"class":2453},[28,80414,367],{"class":34},[28,80416,80417],{"class":735},"'.filter'",[28,80419,31307],{"class":34},[28,80421,58290],{"class":2453},[28,80423,367],{"class":34},[28,80425,58295],{"class":735},[28,80427,12921],{"class":34},[28,80429,706],{"class":5704},[28,80431,80275],{"class":42},[28,80433,16058],{"class":34},[28,80435,80436],{"class":30,"line":33861},[28,80437,80438],{"class":73},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[28,80440,80441,80443,80445,80448,80450,80452,80454,80456],{"class":30,"line":33867},[28,80442,58705],{"class":42},[28,80444,80284],{"class":34},[28,80446,80447],{"class":38},"tagName",[28,80449,12921],{"class":34},[28,80451,32016],{"class":38},[28,80453,80300],{"class":34},[28,80455,83],{"class":42},[28,80457,80458],{"class":34}," e.target\n",[28,80460,80461],{"class":30,"line":33885},[28,80462,80463],{"class":73},"      \u002F\u002F 判断\n",[28,80465,80466,80468,80470,80472,80474],{"class":30,"line":33899},[28,80467,54957],{"class":42},[28,80469,67511],{"class":34},[28,80471,54963],{"class":42},[28,80473,68733],{"class":735},[28,80475,12928],{"class":34},[28,80477,80478],{"class":30,"line":33908},[28,80479,80480],{"class":73},"        \u002F\u002F console.log(11)\n",[28,80482,80483],{"class":30,"line":33917},[28,80484,80485],{"class":73},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[28,80487,80488],{"class":30,"line":33926},[28,80489,80490],{"class":73},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[28,80492,80493,80495,80497,80499],{"class":30,"line":33935},[28,80494,52307],{"class":42},[28,80496,52310],{"class":34},[28,80498,83],{"class":42},[28,80500,80501],{"class":34}," goodsList\n",[28,80503,80504,80506,80509,80511,80514],{"class":30,"line":33941},[28,80505,2987],{"class":42},[28,80507,80508],{"class":34}," (dataset.index ",[28,80510,54963],{"class":42},[28,80512,80513],{"class":735}," '1'",[28,80515,12928],{"class":34},[28,80517,80518,80521,80523,80526,80529,80531,80533,80535,80538,80540,80542,80545,80547,80549,80551],{"class":30,"line":33947},[28,80519,80520],{"class":34},"          arr ",[28,80522,83],{"class":42},[28,80524,80525],{"class":34}," goodsList.",[28,80527,80528],{"class":2453},"filter",[28,80530,367],{"class":34},[28,80532,80272],{"class":5704},[28,80534,80275],{"class":42},[28,80536,80537],{"class":34}," item.price ",[28,80539,2200],{"class":42},[28,80541,4581],{"class":38},[28,80543,80544],{"class":42}," &&",[28,80546,80537],{"class":34},[28,80548,2078],{"class":42},[28,80550,6242],{"class":38},[28,80552,228],{"class":34},[28,80554,80555,80558,80560,80562,80564,80566,80569],{"class":30,"line":33955},[28,80556,80557],{"class":34},"        } ",[28,80559,2191],{"class":42},[28,80561,2194],{"class":42},[28,80563,80508],{"class":34},[28,80565,54963],{"class":42},[28,80567,80568],{"class":735}," '2'",[28,80570,12928],{"class":34},[28,80572,80573,80575,80577,80579,80581,80583,80585,80587,80589,80591,80593,80595,80597,80599,80602],{"class":30,"line":33960},[28,80574,80520],{"class":34},[28,80576,83],{"class":42},[28,80578,80525],{"class":34},[28,80580,80528],{"class":2453},[28,80582,367],{"class":34},[28,80584,80272],{"class":5704},[28,80586,80275],{"class":42},[28,80588,80537],{"class":34},[28,80590,2200],{"class":42},[28,80592,6242],{"class":38},[28,80594,80544],{"class":42},[28,80596,80537],{"class":34},[28,80598,2078],{"class":42},[28,80600,80601],{"class":38}," 300",[28,80603,228],{"class":34},[28,80605,80606,80608,80610,80612,80614,80616,80619],{"class":30,"line":33966},[28,80607,80557],{"class":34},[28,80609,2191],{"class":42},[28,80611,2194],{"class":42},[28,80613,80508],{"class":34},[28,80615,54963],{"class":42},[28,80617,80618],{"class":735}," '3'",[28,80620,12928],{"class":34},[28,80622,80623,80625,80627,80629,80631,80633,80635,80637,80639,80641,80643],{"class":30,"line":33977},[28,80624,80520],{"class":34},[28,80626,83],{"class":42},[28,80628,80525],{"class":34},[28,80630,80528],{"class":2453},[28,80632,367],{"class":34},[28,80634,80272],{"class":5704},[28,80636,80275],{"class":42},[28,80638,80537],{"class":34},[28,80640,2200],{"class":42},[28,80642,80601],{"class":38},[28,80644,228],{"class":34},[28,80646,80647],{"class":30,"line":33983},[28,80648,3019],{"class":34},[28,80650,80651],{"class":30,"line":34003},[28,80652,80653],{"class":73},"        \u002F\u002F 渲染函数\n",[28,80655,80656,80658],{"class":30,"line":34009},[28,80657,70885],{"class":2453},[28,80659,52889],{"class":34},[28,80661,80662],{"class":30,"line":34015},[28,80663,52875],{"class":34},[28,80665,80666],{"class":30,"line":34021},[28,80667,2890],{"emptyLinePlaceholder":562},[28,80669,80670],{"class":30,"line":34038},[28,80671,33938],{"class":34},[28,80673,80674,80676,80678],{"class":30,"line":34044},[28,80675,52894],{"class":34},[28,80677,52290],{"class":51777},[28,80679,51784],{"class":34},[28,80681,80682,80684,80686],{"class":30,"line":34050},[28,80683,52262],{"class":34},[28,80685,52277],{"class":51777},[28,80687,51784],{"class":34},[28,80689,80690],{"class":30,"line":34056},[28,80691,2890],{"emptyLinePlaceholder":562},[28,80693,80694,80696,80698],{"class":30,"line":34062},[28,80695,52262],{"class":34},[28,80697,51112],{"class":51777},[28,80699,51784],{"class":34},[60,80701,80703],{"id":80702},"_410-深入了解对象","4.10 深入了解对象",[605,80705,80707],{"id":80706},"_4101-创建对象","4.10.1 创建对象",[14,80709,80710],{},[420,80711],{"alt":23,"src":80712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80714,80715],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[605,80717,80719],{"id":80718},"_4102-构造函数","4.10.2 构造函数",[14,80721,80722,80725],{},[780,80723,80724],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80727,80728,80731],{},[780,80729,80730],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[18,80733,80735],{"className":51110,"code":80734,"language":51112,"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,80736,80737,80745,80750,80771,80784,80796,80808,80812,80817,80844,80849,80876],{"__ignoreMap":23},[28,80738,80739,80741,80743],{"class":30,"line":31},[28,80740,1529],{"class":34},[28,80742,52290],{"class":51777},[28,80744,51784],{"class":34},[28,80746,80747],{"class":30,"line":77},[28,80748,80749],{"class":73},"\u002F\u002F例：\n",[28,80751,80752,80754,80757,80759,80761,80763,80765,80767,80769],{"class":30,"line":114},[28,80753,54926],{"class":42},[28,80755,80756],{"class":2453}," Pig",[28,80758,367],{"class":34},[28,80760,80287],{"class":5704},[28,80762,90],{"class":34},[28,80764,70698],{"class":5704},[28,80766,90],{"class":34},[28,80768,70715],{"class":5704},[28,80770,12928],{"class":34},[28,80772,80773,80776,80779,80781],{"class":30,"line":128},[28,80774,80775],{"class":38},"    this",[28,80777,80778],{"class":34},".name",[28,80780,83],{"class":42},[28,80782,80783],{"class":34},"name\n",[28,80785,80786,80788,80791,80793],{"class":30,"line":393},[28,80787,80775],{"class":38},[28,80789,80790],{"class":34},".age",[28,80792,83],{"class":42},[28,80794,80795],{"class":34},"age\n",[28,80797,80798,80800,80803,80805],{"class":30,"line":409},[28,80799,80775],{"class":38},[28,80801,80802],{"class":34},".gender",[28,80804,83],{"class":42},[28,80806,80807],{"class":34},"gender    \n",[28,80809,80810],{"class":30,"line":1711},[28,80811,2055],{"class":34},[28,80813,80814],{"class":30,"line":1802},[28,80815,80816],{"class":73},"\u002F\u002F创建佩奇对象\n",[28,80818,80819,80821,80824,80826,80828,80830,80833,80835,80837,80839,80842],{"class":30,"line":1808},[28,80820,7280],{"class":42},[28,80822,80823],{"class":38}," Peppa",[28,80825,12203],{"class":42},[28,80827,80756],{"class":2453},[28,80829,367],{"class":34},[28,80831,80832],{"class":735},"'佩奇'",[28,80834,90],{"class":34},[28,80836,970],{"class":38},[28,80838,90],{"class":34},[28,80840,80841],{"class":735},"'女'",[28,80843,228],{"class":34},[28,80845,80846],{"class":30,"line":1820},[28,80847,80848],{"class":73},"\u002F\u002F创建乔治对象\n",[28,80850,80851,80853,80856,80858,80860,80862,80865,80867,80869,80871,80874],{"class":30,"line":2102},[28,80852,7280],{"class":42},[28,80854,80855],{"class":38}," George",[28,80857,12203],{"class":42},[28,80859,80756],{"class":2453},[28,80861,367],{"class":34},[28,80863,80864],{"class":735},"'乔治'",[28,80866,90],{"class":34},[28,80868,98],{"class":38},[28,80870,90],{"class":34},[28,80872,80873],{"class":735},"'男'",[28,80875,228],{"class":34},[28,80877,80878,80880,80882],{"class":30,"line":2107},[28,80879,52262],{"class":34},[28,80881,52290],{"class":51777},[28,80883,51784],{"class":34},[14,80885,80886],{},[420,80887],{"alt":23,"src":80888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80890,80891],{},[420,80892],{"alt":23,"src":80893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80895,80896],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80898,80899],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80901,80902],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80904,80905],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80907,80908],{},"这里用等号是因为：对象.属性=值",[14,80910,80911],{},"①利用对象字面量创建对象",[14,80913,80914],{},"const o={",[14,80916,80917],{},"name:'pink'",[14,80919,80920],{},"} ②利用new Object创建对象",[14,80922,80923],{},"const o=new Object({name:'pink'})",[14,80925,80926],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80928,80929],{},"构造函数创建对象的执行过程：",[14,80931,80932],{},[420,80933],{"alt":23,"src":80934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[605,80936,80938],{"id":80937},"_4103-实例成员","4.10.3 实例成员",[14,80940,80941],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[588,80943,80944,80947,80950],{},[591,80945,80946],{},"实例对象的属性和方法即为实例成员",[591,80948,80949],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[591,80951,80952],{},"构造函数创建的实例对象彼此独立互不影响",[605,80954,80956],{"id":80955},"_4104-静态成员","4.10.4 静态成员",[14,80958,80959],{},[420,80960],{"alt":23,"src":80961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80963,80964],{},"静态成员有Date.now() Math.PI Math.random()",[14,80966,80967],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80969,80970],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80972,80973],{},"function Pig(name) n {",[14,80975,80976],{},"this.name=name",[14,80978,1565],{},[14,80980,80981],{},"Pig.eyes=2",[14,80983,80984],{},"Pig.sayHai=function () { console.log(this) }",[14,80986,80987],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80989,80990],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80992,11818],{},[588,80994,80995,80998,81001,81004,81007],{},[591,80996,80997],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[591,80999,81000],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[591,81002,81003],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[591,81005,81006],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[591,81008,81009],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,81011,81012],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[605,81014,81016],{"id":81015},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81018,81019],{},"内置构造函数包含：",[14,81021,81022],{},[420,81023],{"alt":23,"src":81024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81026,81027],{},[420,81028],{"alt":23,"src":81029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81031,81032],{},"这些基本数据类型，js对他们进行了包装",[52290,81034,81035],{},"\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",[22484,81037,81039],{"id":81038},"_41051-object","4.10.5.1 Object",[14,81041,81042],{},"Object 是内置的构造函数，用于创建普通对象",[14,81044,81045],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[18,81047,81049],{"className":51110,"code":81048,"language":51112,"meta":23,"style":23},"const user=new Object({name:'小明',age:15})\n",[25,81050,81051],{"__ignoreMap":23},[28,81052,81053],{"class":30,"line":31},[28,81054,81048],{"class":34},[14,81056,81057],{},"三个常用的静态方法：",[23396,81059,81061],{"id":81060},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81063,81064],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81066,81067],{},[420,81068],{"alt":23,"src":81069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81071,81072],{},[420,81073],{"alt":23,"src":81074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[18,81076,81078],{"className":53544,"code":81077,"language":53546,"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,81079,81080,81088,81096,81101,81106,81111,81116,81121,81126,81134],{"__ignoreMap":23},[28,81081,81082,81084,81086],{"class":30,"line":31},[28,81083,1529],{"class":34},[28,81085,52277],{"class":51777},[28,81087,51784],{"class":34},[28,81089,81090,81092,81094],{"class":30,"line":77},[28,81091,52621],{"class":34},[28,81093,52290],{"class":51777},[28,81095,51784],{"class":34},[28,81097,81098],{"class":30,"line":114},[28,81099,81100],{"class":34},"    const o = { name: 'pink', age: 6 }\n",[28,81102,81103],{"class":30,"line":128},[28,81104,81105],{"class":34},"    \u002F\u002F 获得所有属性名\n",[28,81107,81108],{"class":30,"line":393},[28,81109,81110],{"class":34},"    const arr = Object.keys(o)\n",[28,81112,81113],{"class":30,"line":409},[28,81114,81115],{"class":34},"    console.log(arr)\n",[28,81117,81118],{"class":30,"line":1711},[28,81119,81120],{"class":34},"    \u002F\u002F 获得所有属性值\n",[28,81122,81123],{"class":30,"line":1802},[28,81124,81125],{"class":34},"    console.log(Object.values(o))\n",[28,81127,81128,81130,81132],{"class":30,"line":1808},[28,81129,52894],{"class":34},[28,81131,52290],{"class":51777},[28,81133,51784],{"class":34},[28,81135,81136,81138,81140],{"class":30,"line":1820},[28,81137,52262],{"class":34},[28,81139,52277],{"class":51777},[28,81141,51784],{"class":34},[23396,81143,81145],{"id":81144},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81147,81148],{},"Object.assign(oo,o)",[14,81150,81151],{},"后的东西添加给前 是追加",[14,81153,81154],{},[420,81155],{"alt":23,"src":81156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81158,81159],{},[420,81160],{"alt":23,"src":81161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[18,81163,81165],{"className":53544,"code":81164,"language":53546,"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,81166,81167,81175,81183,81187,81191,81195,81199,81203,81207,81212,81217,81222,81227,81232,81240],{"__ignoreMap":23},[28,81168,81169,81171,81173],{"class":30,"line":31},[28,81170,1529],{"class":34},[28,81172,52277],{"class":51777},[28,81174,51784],{"class":34},[28,81176,81177,81179,81181],{"class":30,"line":77},[28,81178,52621],{"class":34},[28,81180,52290],{"class":51777},[28,81182,51784],{"class":34},[28,81184,81185],{"class":30,"line":114},[28,81186,81100],{"class":34},[28,81188,81189],{"class":30,"line":128},[28,81190,81105],{"class":34},[28,81192,81193],{"class":30,"line":393},[28,81194,81110],{"class":34},[28,81196,81197],{"class":30,"line":409},[28,81198,81115],{"class":34},[28,81200,81201],{"class":30,"line":1711},[28,81202,81120],{"class":34},[28,81204,81205],{"class":30,"line":1802},[28,81206,81125],{"class":34},[28,81208,81209],{"class":30,"line":1808},[28,81210,81211],{"class":34},"    const oo = {}\n",[28,81213,81214],{"class":30,"line":1820},[28,81215,81216],{"class":34},"    Object.assign(oo, o)\n",[28,81218,81219],{"class":30,"line":2102},[28,81220,81221],{"class":34},"    console.log(oo)\n",[28,81223,81224],{"class":30,"line":2107},[28,81225,81226],{"class":34},"    Object.assign(o, { gender: '女' })\n",[28,81228,81229],{"class":30,"line":2113},[28,81230,81231],{"class":34},"    console.log(o)\n",[28,81233,81234,81236,81238],{"class":30,"line":2118},[28,81235,52894],{"class":34},[28,81237,52290],{"class":51777},[28,81239,51784],{"class":34},[28,81241,81242,81244,81246],{"class":30,"line":2132},[28,81243,52262],{"class":34},[28,81245,52277],{"class":51777},[28,81247,51784],{"class":34},[14,81249,81250],{},[420,81251],{"alt":23,"src":81252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22484,81254,81256],{"id":81255},"_41052-array","4.10.5.2 Array",[14,81258,81259],{},"Array 是内置的构造函数，用于创建数组",[14,81261,81262],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[18,81264,81266],{"className":51110,"code":81265,"language":51112,"meta":23,"style":23},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[25,81267,81268,81273],{"__ignoreMap":23},[28,81269,81270],{"class":30,"line":31},[28,81271,81272],{"class":34},"const arr=new Array(3,5)\n",[28,81274,81275],{"class":30,"line":77},[28,81276,81277],{"class":34},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81279,81280],{},"Array的实例方法，这个方法是实例成员",[14,81282,81283],{},[420,81284],{"alt":23,"src":81285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23396,81287,81289],{"id":81288},"_410521-reduce","4.10.5.2.1 reduce",[14,81291,81292],{},[420,81293],{"alt":23,"src":81294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[18,81296,81298],{"className":53544,"code":81297,"language":53546,"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,81299,81300,81308,81316,81321,81326,81331,81336,81340,81345,81350,81355,81359,81364,81369,81373,81378,81383,81388,81396],{"__ignoreMap":23},[28,81301,81302,81304,81306],{"class":30,"line":31},[28,81303,1529],{"class":34},[28,81305,52277],{"class":51777},[28,81307,51784],{"class":34},[28,81309,81310,81312,81314],{"class":30,"line":77},[28,81311,52621],{"class":34},[28,81313,52290],{"class":51777},[28,81315,51784],{"class":34},[28,81317,81318],{"class":30,"line":114},[28,81319,81320],{"class":34},"    const arr = [1, 5, 8]\n",[28,81322,81323],{"class":30,"line":128},[28,81324,81325],{"class":34},"    \u002F\u002F 1.没有初始值\n",[28,81327,81328],{"class":30,"line":393},[28,81329,81330],{"class":34},"    const total = arr.reduce(function (prev, current) {\n",[28,81332,81333],{"class":30,"line":409},[28,81334,81335],{"class":34},"      return prev + current\n",[28,81337,81338],{"class":30,"line":1711},[28,81339,33938],{"class":34},[28,81341,81342],{"class":30,"line":1802},[28,81343,81344],{"class":34},"    console.log(total)   \u002F\u002F14\n",[28,81346,81347],{"class":30,"line":1808},[28,81348,81349],{"class":34},"    \u002F\u002F 2.有初始值\n",[28,81351,81352],{"class":30,"line":1820},[28,81353,81354],{"class":34},"    const total1 = arr.reduce(function (prev, current) {\n",[28,81356,81357],{"class":30,"line":2102},[28,81358,81335],{"class":34},[28,81360,81361],{"class":30,"line":2107},[28,81362,81363],{"class":34},"    }, 10)\n",[28,81365,81366],{"class":30,"line":2113},[28,81367,81368],{"class":34},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[28,81370,81371],{"class":30,"line":2118},[28,81372,2890],{"emptyLinePlaceholder":562},[28,81374,81375],{"class":30,"line":2132},[28,81376,81377],{"class":34},"    \u002F\u002F 3.箭头函数写法\n",[28,81379,81380],{"class":30,"line":2137},[28,81381,81382],{"class":34},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[28,81384,81385],{"class":30,"line":2143},[28,81386,81387],{"class":34},"    console.log(total2)   \u002F\u002F24\n",[28,81389,81390,81392,81394],{"class":30,"line":2164},[28,81391,52894],{"class":34},[28,81393,52290],{"class":51777},[28,81395,51784],{"class":34},[28,81397,81398,81400,81402],{"class":30,"line":2169},[28,81399,52262],{"class":34},[28,81401,52277],{"class":51777},[28,81403,51784],{"class":34},[14,81405,81406],{},"执行过程：",[588,81408,81409,81412,81415],{},[591,81410,81411],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[591,81413,81414],{},"每一次循环，把返回值给作为下一次循环的上一次值",[591,81416,81417],{},"如果有起始值，则起始值作为上一次值",[18,81419,81421],{"className":53544,"code":81420,"language":53546,"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,81422,81423,81431,81439,81443,81447,81451,81455,81459,81463,81468,81473,81478,81483,81488,81492,81496,81500,81504,81508,81512,81517,81521,81526,81530,81535,81540,81544,81548,81552,81560],{"__ignoreMap":23},[28,81424,81425,81427,81429],{"class":30,"line":31},[28,81426,1529],{"class":34},[28,81428,52277],{"class":51777},[28,81430,51784],{"class":34},[28,81432,81433,81435,81437],{"class":30,"line":77},[28,81434,52621],{"class":34},[28,81436,52290],{"class":51777},[28,81438,51784],{"class":34},[28,81440,81441],{"class":30,"line":114},[28,81442,81320],{"class":34},[28,81444,81445],{"class":30,"line":128},[28,81446,81325],{"class":34},[28,81448,81449],{"class":30,"line":393},[28,81450,81330],{"class":34},[28,81452,81453],{"class":30,"line":409},[28,81454,81335],{"class":34},[28,81456,81457],{"class":30,"line":1711},[28,81458,33938],{"class":34},[28,81460,81461],{"class":30,"line":1802},[28,81462,81344],{"class":34},[28,81464,81465],{"class":30,"line":1808},[28,81466,81467],{"class":34},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[28,81469,81470],{"class":30,"line":1820},[28,81471,81472],{"class":34},"    \u002F\u002F     1              5                    6\n",[28,81474,81475],{"class":30,"line":2102},[28,81476,81477],{"class":34},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[28,81479,81480],{"class":30,"line":2107},[28,81481,81482],{"class":34},"    \u002F\u002F     6              8                    14\n",[28,81484,81485],{"class":30,"line":2113},[28,81486,81487],{"class":34},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[28,81489,81490],{"class":30,"line":2118},[28,81491,81349],{"class":34},[28,81493,81494],{"class":30,"line":2132},[28,81495,81354],{"class":34},[28,81497,81498],{"class":30,"line":2137},[28,81499,81335],{"class":34},[28,81501,81502],{"class":30,"line":2143},[28,81503,81363],{"class":34},[28,81505,81506],{"class":30,"line":2164},[28,81507,81368],{"class":34},[28,81509,81510],{"class":30,"line":2169},[28,81511,81467],{"class":34},[28,81513,81514],{"class":30,"line":2183},[28,81515,81516],{"class":34},"    \u002F\u002F     10             1                     11\n",[28,81518,81519],{"class":30,"line":2188},[28,81520,81477],{"class":34},[28,81522,81523],{"class":30,"line":2217},[28,81524,81525],{"class":34},"    \u002F\u002F     11             5                    16\n",[28,81527,81528],{"class":30,"line":2222},[28,81529,81477],{"class":34},[28,81531,81532],{"class":30,"line":2239},[28,81533,81534],{"class":34},"    \u002F\u002F     16             8                    24\n",[28,81536,81537],{"class":30,"line":2244},[28,81538,81539],{"class":34},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[28,81541,81542],{"class":30,"line":2249},[28,81543,81377],{"class":34},[28,81545,81546],{"class":30,"line":2254},[28,81547,81382],{"class":34},[28,81549,81550],{"class":30,"line":2268},[28,81551,81387],{"class":34},[28,81553,81554,81556,81558],{"class":30,"line":2273},[28,81555,52894],{"class":34},[28,81557,52290],{"class":51777},[28,81559,51784],{"class":34},[28,81561,81562,81564,81566],{"class":30,"line":3067},[28,81563,52262],{"class":34},[28,81565,52277],{"class":51777},[28,81567,51784],{"class":34},[23396,81569,81571],{"id":81570},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81573,81574],{},[420,81575],{"alt":23,"src":81576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[18,81578,81580],{"className":53544,"code":81579,"language":53546,"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,81581,81582,81590,81598,81603,81608,81613,81618,81622,81627,81632,81637,81642,81647,81652,81656,81661,81665,81670,81678],{"__ignoreMap":23},[28,81583,81584,81586,81588],{"class":30,"line":31},[28,81585,1529],{"class":34},[28,81587,52277],{"class":51777},[28,81589,51784],{"class":34},[28,81591,81592,81594,81596],{"class":30,"line":77},[28,81593,52621],{"class":34},[28,81595,52290],{"class":51777},[28,81597,51784],{"class":34},[28,81599,81600],{"class":30,"line":114},[28,81601,81602],{"class":34},"    const arr = [\n",[28,81604,81605],{"class":30,"line":128},[28,81606,81607],{"class":34},"      { name: '张三', salary: 10000 },\n",[28,81609,81610],{"class":30,"line":393},[28,81611,81612],{"class":34},"      { name: '李四', salary: 10000 },\n",[28,81614,81615],{"class":30,"line":409},[28,81616,81617],{"class":34},"      { name: '王五', salary: 10000 }\n",[28,81619,81620],{"class":30,"line":1711},[28,81621,53586],{"class":34},[28,81623,81624],{"class":30,"line":1802},[28,81625,81626],{"class":34},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[28,81628,81629],{"class":30,"line":1808},[28,81630,81631],{"class":34},"    \u002F\u002F prev是累计值\n",[28,81633,81634],{"class":30,"line":1820},[28,81635,81636],{"class":34},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[28,81638,81639],{"class":30,"line":2102},[28,81640,81641],{"class":34},"    console.log(total)\n",[28,81643,81644],{"class":30,"line":2107},[28,81645,81646],{"class":34},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[28,81648,81649],{"class":30,"line":2113},[28,81650,81651],{"class":34},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[28,81653,81654],{"class":30,"line":2118},[28,81655,81646],{"class":34},[28,81657,81658],{"class":30,"line":2132},[28,81659,81660],{"class":34},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[28,81662,81663],{"class":30,"line":2137},[28,81664,81646],{"class":34},[28,81666,81667],{"class":30,"line":2143},[28,81668,81669],{"class":34},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[28,81671,81672,81674,81676],{"class":30,"line":2164},[28,81673,52894],{"class":34},[28,81675,52290],{"class":51777},[28,81677,51784],{"class":34},[28,81679,81680,81682,81684],{"class":30,"line":2169},[28,81681,52262],{"class":34},[28,81683,52277],{"class":51777},[28,81685,51784],{"class":34},[23396,81687,81689],{"id":81688},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81691,81692],{},[420,81693],{"alt":23,"src":81694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81696,81697],{},[420,81698],{"alt":23,"src":81699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[588,81701,81702],{},[591,81703,81704],{},"find()",[14,81706,81707],{},"循环查找，找到第一个就ok",[14,81709,81710],{},[80,81711,81714],{"href":81712,"rel":81713},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24351],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[18,81716,81718],{"className":51110,"code":81717,"language":51112,"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,81719,81720,81725,81730],{"__ignoreMap":23},[28,81721,81722],{"class":30,"line":31},[28,81723,81724],{"class":34},"const array1 = [5, 12, 8, 130, 44]\n",[28,81726,81727],{"class":30,"line":77},[28,81728,81729],{"class":34},"const found = array1.find((element) => element > 10)\n",[28,81731,81732],{"class":30,"line":114},[28,81733,81734],{"class":34},"console.log(found)  \u002F\u002F12\n",[14,81736,81737,81739,81740,81745,81746,81749,81750,81752,81753,81758,81759,81761,81762,81764,81765,81767,81768],{},[25,81738,81704],{}," 方法是一个",[80,81741,81744],{"href":81742,"rel":81743},"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",[24351],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[25,81747,81748],{},"callbackFn"," 函数，直到 ",[25,81751,81748],{}," 返回一个",[80,81754,81757],{"href":81755,"rel":81756},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24351],"真值","。然后 ",[25,81760,81704],{}," 返回该元素并停止迭代数组。如果 ",[25,81763,81748],{}," 从未返回真值，则 ",[25,81766,81704],{}," 返回 ",[25,81769,81770],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[18,81772,81774],{"className":53544,"code":81773,"language":53546,"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,81775,81776,81784,81792,81797,81802,81807,81811,81816,81821,81825,81830,81835,81839,81843,81848,81853,81857,81861,81866,81871,81876,81881,81886,81890,81895,81900,81905,81910,81914,81919,81927],{"__ignoreMap":23},[28,81777,81778,81780,81782],{"class":30,"line":31},[28,81779,1529],{"class":34},[28,81781,52277],{"class":51777},[28,81783,51784],{"class":34},[28,81785,81786,81788,81790],{"class":30,"line":77},[28,81787,52621],{"class":34},[28,81789,52290],{"class":51777},[28,81791,51784],{"class":34},[28,81793,81794],{"class":30,"line":114},[28,81795,81796],{"class":34},"    const arr = ['red', 'blue', 'green']\n",[28,81798,81799],{"class":30,"line":128},[28,81800,81801],{"class":34},"    const found = arr.find(item => item === 'pink')\n",[28,81803,81804],{"class":30,"line":393},[28,81805,81806],{"class":34},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[28,81808,81809],{"class":30,"line":409},[28,81810,2890],{"emptyLinePlaceholder":562},[28,81812,81813],{"class":30,"line":1711},[28,81814,81815],{"class":34},"    \u002F\u002F 使用场景，用于查找数据\n",[28,81817,81818],{"class":30,"line":1802},[28,81819,81820],{"class":34},"    const arr1 = [\n",[28,81822,81823],{"class":30,"line":1808},[28,81824,79863],{"class":34},[28,81826,81827],{"class":30,"line":1820},[28,81828,81829],{"class":34},"        name: '小米',\n",[28,81831,81832],{"class":30,"line":2102},[28,81833,81834],{"class":34},"        price: 1999\n",[28,81836,81837],{"class":30,"line":2107},[28,81838,78369],{"class":34},[28,81840,81841],{"class":30,"line":2113},[28,81842,79863],{"class":34},[28,81844,81845],{"class":30,"line":2118},[28,81846,81847],{"class":34},"        name: '华为',\n",[28,81849,81850],{"class":30,"line":2132},[28,81851,81852],{"class":34},"        price: 3999\n",[28,81854,81855],{"class":30,"line":2137},[28,81856,52875],{"class":34},[28,81858,81859],{"class":30,"line":2143},[28,81860,53586],{"class":34},[28,81862,81863],{"class":30,"line":2164},[28,81864,81865],{"class":34},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[28,81867,81868],{"class":30,"line":2169},[28,81869,81870],{"class":34},"    \u002F\u002F const found1 = arr1.find(item => {\n",[28,81872,81873],{"class":30,"line":2183},[28,81874,81875],{"class":34},"    \u002F\u002F   if (item.name === '小米') {\n",[28,81877,81878],{"class":30,"line":2188},[28,81879,81880],{"class":34},"    \u002F\u002F     return item\n",[28,81882,81883],{"class":30,"line":2217},[28,81884,81885],{"class":34},"    \u002F\u002F   }\n",[28,81887,81888],{"class":30,"line":2222},[28,81889,63767],{"class":34},[28,81891,81892],{"class":30,"line":2239},[28,81893,81894],{"class":34},"    \u002F\u002F 另一种写法\n",[28,81896,81897],{"class":30,"line":2244},[28,81898,81899],{"class":34},"    const found1 = arr1.find(item => {\n",[28,81901,81902],{"class":30,"line":2249},[28,81903,81904],{"class":34},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[28,81906,81907],{"class":30,"line":2254},[28,81908,81909],{"class":34},"      return item.name = '小米'\n",[28,81911,81912],{"class":30,"line":2268},[28,81913,33938],{"class":34},[28,81915,81916],{"class":30,"line":2273},[28,81917,81918],{"class":34},"    console.log(found1)\n",[28,81920,81921,81923,81925],{"class":30,"line":3067},[28,81922,52894],{"class":34},[28,81924,52290],{"class":51777},[28,81926,51784],{"class":34},[28,81928,81929,81931,81933],{"class":30,"line":3081},[28,81930,52262],{"class":34},[28,81932,52277],{"class":51777},[28,81934,51784],{"class":34},[14,81936,81937],{},[420,81938],{"alt":23,"src":81939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81941,81942],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[588,81944,81945],{"start":77},[591,81946,81947],{},"every()返回的是布尔值",[14,81949,81950],{},[80,81951,81954],{"href":81952,"rel":81953},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24351],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81956,81957],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81959,81960],{},"some是只有有一个就没问题",[14,81962,81963],{},"every是必须全是才行",[18,81965,81969],{"className":81966,"code":81967,"language":81968,"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,81970,81971,81987,82001,82005,82014],{"__ignoreMap":23},[28,81972,81973,81975,81978,81980,81982,81985],{"class":30,"line":31},[28,81974,54926],{"class":42},[28,81976,81977],{"class":34}," isBigEnough(element, ",[28,81979,74535],{"class":42},[28,81981,12921],{"class":34},[28,81983,81984],{"class":42},"array",[28,81986,12928],{"class":34},[28,81988,81989,81992,81995,81997,81999],{"class":30,"line":77},[28,81990,81991],{"class":42},"  return",[28,81993,81994],{"class":34}," element ",[28,81996,2200],{"class":42},[28,81998,2528],{"class":38},[28,82000,1781],{"class":34},[28,82002,82003],{"class":30,"line":114},[28,82004,2055],{"class":34},[28,82006,82007,82010,82012],{"class":30,"line":128},[28,82008,82009],{"class":34},"[12, 5, 8, 130, 44].every(isBigEnough); ",[28,82011,33806],{"class":42},[28,82013,54993],{"class":34},[28,82015,82016,82019,82021],{"class":30,"line":393},[28,82017,82018],{"class":34},"[12, 54, 18, 130, 44].every(isBigEnough); ",[28,82020,33806],{"class":42},[28,82022,58417],{"class":34},[18,82024,82026],{"className":53544,"code":82025,"language":53546,"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,82027,82028,82036,82044,82049,82053,82058,82063,82071],{"__ignoreMap":23},[28,82029,82030,82032,82034],{"class":30,"line":31},[28,82031,1529],{"class":34},[28,82033,52277],{"class":51777},[28,82035,51784],{"class":34},[28,82037,82038,82040,82042],{"class":30,"line":77},[28,82039,52621],{"class":34},[28,82041,52290],{"class":51777},[28,82043,51784],{"class":34},[28,82045,82046],{"class":30,"line":114},[28,82047,82048],{"class":34},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[28,82050,82051],{"class":30,"line":128},[28,82052,78799],{"class":34},[28,82054,82055],{"class":30,"line":393},[28,82056,82057],{"class":34},"    const flag = arr.every(item => item >= 10)\n",[28,82059,82060],{"class":30,"line":409},[28,82061,82062],{"class":34},"    console.log(flag)    \u002F\u002Ftrue\n",[28,82064,82065,82067,82069],{"class":30,"line":1711},[28,82066,52894],{"class":34},[28,82068,52290],{"class":51777},[28,82070,51784],{"class":34},[28,82072,82073,82075,82077],{"class":30,"line":1802},[28,82074,52262],{"class":34},[28,82076,52277],{"class":51777},[28,82078,51784],{"class":34},[18,82080,82082],{"className":53544,"code":82081,"language":53546,"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,82083,82084,82092,82100,82104,82109,82114,82119,82127],{"__ignoreMap":23},[28,82085,82086,82088,82090],{"class":30,"line":31},[28,82087,1529],{"class":34},[28,82089,52277],{"class":51777},[28,82091,51784],{"class":34},[28,82093,82094,82096,82098],{"class":30,"line":77},[28,82095,52621],{"class":34},[28,82097,52290],{"class":51777},[28,82099,51784],{"class":34},[28,82101,82102],{"class":30,"line":114},[28,82103,82048],{"class":34},[28,82105,82106],{"class":30,"line":128},[28,82107,82108],{"class":34},"    const arr = [10, 0, 5]\n",[28,82110,82111],{"class":30,"line":393},[28,82112,82113],{"class":34},"    const flag = arr.some(item => item >= 10)\n",[28,82115,82116],{"class":30,"line":409},[28,82117,82118],{"class":34},"    console.log(flag)   \u002F\u002Ftrue\n",[28,82120,82121,82123,82125],{"class":30,"line":1711},[28,82122,52894],{"class":34},[28,82124,52290],{"class":51777},[28,82126,51784],{"class":34},[28,82128,82129,82131,82133],{"class":30,"line":1802},[28,82130,52262],{"class":34},[28,82132,52277],{"class":51777},[28,82134,51784],{"class":34},[23396,82136,82138],{"id":82137},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82140,82141],{},[420,82142],{"alt":23,"src":82143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[18,82145,82147],{"className":51110,"code":82146,"language":51112,"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,82148,82149,82159,82173,82177,82185,82199,82219,82231,82239,82246,82258,82270,82282,82294,82304,82314,82318,82326,82334,82338,82346,82358,82366,82388,82393,82398,82431,82439,82447,82451],{"__ignoreMap":23},[28,82150,82151,82153,82155,82157],{"class":30,"line":31},[28,82152,51774],{"class":34},[28,82154,51778],{"class":51777},[28,82156,51781],{"class":2453},[28,82158,51784],{"class":34},[28,82160,82161,82163,82165,82167,82169,82171],{"class":30,"line":77},[28,82162,1529],{"class":34},[28,82164,51112],{"class":51777},[28,82166,51793],{"class":2453},[28,82168,83],{"class":34},[28,82170,51798],{"class":735},[28,82172,51784],{"class":34},[28,82174,82175],{"class":30,"line":114},[28,82176,2890],{"emptyLinePlaceholder":562},[28,82178,82179,82181,82183],{"class":30,"line":128},[28,82180,1529],{"class":34},[28,82182,51811],{"class":51777},[28,82184,51784],{"class":34},[28,82186,82187,82189,82191,82193,82195,82197],{"class":30,"line":393},[28,82188,52621],{"class":34},[28,82190,51821],{"class":51777},[28,82192,51824],{"class":2453},[28,82194,83],{"class":34},[28,82196,51829],{"class":735},[28,82198,51784],{"class":34},[28,82200,82201,82203,82205,82207,82209,82211,82213,82215,82217],{"class":30,"line":409},[28,82202,52621],{"class":34},[28,82204,51821],{"class":51777},[28,82206,15406],{"class":2453},[28,82208,83],{"class":34},[28,82210,51868],{"class":735},[28,82212,51848],{"class":2453},[28,82214,83],{"class":34},[28,82216,51875],{"class":735},[28,82218,51784],{"class":34},[28,82220,82221,82223,82225,82227,82229],{"class":30,"line":1711},[28,82222,52621],{"class":34},[28,82224,51884],{"class":51777},[28,82226,51887],{"class":34},[28,82228,51884],{"class":51777},[28,82230,51784],{"class":34},[28,82232,82233,82235,82237],{"class":30,"line":1802},[28,82234,52621],{"class":34},[28,82236,547],{"class":51777},[28,82238,51784],{"class":34},[28,82240,82241,82244],{"class":30,"line":1808},[28,82242,82243],{"class":51777},"    div",[28,82245,16058],{"class":34},[28,82247,82248,82250,82252,82254,82256],{"class":30,"line":1820},[28,82249,55248],{"class":38},[28,82251,51914],{"class":34},[28,82253,2212],{"class":38},[28,82255,51969],{"class":42},[28,82257,1781],{"class":34},[28,82259,82260,82262,82264,82266,82268],{"class":30,"line":2102},[28,82261,55262],{"class":38},[28,82263,51914],{"class":34},[28,82265,1026],{"class":38},[28,82267,51969],{"class":42},[28,82269,1781],{"class":34},[28,82271,82272,82274,82276,82278,82280],{"class":30,"line":2107},[28,82273,57836],{"class":38},[28,82275,51914],{"class":34},[28,82277,1026],{"class":38},[28,82279,51969],{"class":42},[28,82281,1781],{"class":34},[28,82283,82284,82286,82288,82290,82292],{"class":30,"line":2113},[28,82285,65610],{"class":38},[28,82287,51914],{"class":34},[28,82289,1121],{"class":38},[28,82291,51969],{"class":42},[28,82293,1781],{"class":34},[28,82295,82296,82298,82300,82302],{"class":30,"line":2118},[28,82297,57763],{"class":38},[28,82299,51914],{"class":34},[28,82301,52069],{"class":38},[28,82303,1781],{"class":34},[28,82305,82306,82308,82310,82312],{"class":30,"line":2132},[28,82307,55361],{"class":38},[28,82309,51914],{"class":34},[28,82311,52122],{"class":38},[28,82313,1781],{"class":34},[28,82315,82316],{"class":30,"line":2137},[28,82317,2677],{"class":34},[28,82319,82320,82322,82324],{"class":30,"line":2143},[28,82321,52894],{"class":34},[28,82323,547],{"class":51777},[28,82325,51784],{"class":34},[28,82327,82328,82330,82332],{"class":30,"line":2164},[28,82329,52262],{"class":34},[28,82331,51811],{"class":51777},[28,82333,51784],{"class":34},[28,82335,82336],{"class":30,"line":2169},[28,82337,2890],{"emptyLinePlaceholder":562},[28,82339,82340,82342,82344],{"class":30,"line":2183},[28,82341,1529],{"class":34},[28,82343,52277],{"class":51777},[28,82345,51784],{"class":34},[28,82347,82348,82350,82352,82354,82356],{"class":30,"line":2188},[28,82349,52621],{"class":34},[28,82351,52088],{"class":51777},[28,82353,55791],{"class":34},[28,82355,52088],{"class":51777},[28,82357,51784],{"class":34},[28,82359,82360,82362,82364],{"class":30,"line":2217},[28,82361,52621],{"class":34},[28,82363,52290],{"class":51777},[28,82365,51784],{"class":34},[28,82367,82368,82370,82373,82375,82378,82381,82383,82386],{"class":30,"line":2222},[28,82369,11707],{"class":42},[28,82371,82372],{"class":38}," spec",[28,82374,14050],{"class":42},[28,82376,82377],{"class":34}," { size: ",[28,82379,82380],{"class":735},"'40cm*40cm'",[28,82382,55941],{"class":34},[28,82384,82385],{"class":735},"'黑色'",[28,82387,56081],{"class":34},[28,82389,82390],{"class":30,"line":2239},[28,82391,82392],{"class":73},"    \u002F\u002F const arr = Object.values(spec)\n",[28,82394,82395],{"class":30,"line":2244},[28,82396,82397],{"class":73},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[28,82399,82400,82402,82404,82406,82409,82411,82413,82416,82419,82422,82424,82426,82429],{"class":30,"line":2249},[28,82401,52884],{"class":34},[28,82403,54876],{"class":2453},[28,82405,367],{"class":34},[28,82407,82408],{"class":735},"'div'",[28,82410,74726],{"class":34},[28,82412,83],{"class":42},[28,82414,82415],{"class":34}," Object.",[28,82417,82418],{"class":2453},"values",[28,82420,82421],{"class":34},"(spec).",[28,82423,74700],{"class":2453},[28,82425,367],{"class":34},[28,82427,82428],{"class":735},"'\u002F'",[28,82430,228],{"class":34},[28,82432,82433,82435,82437],{"class":30,"line":2254},[28,82434,52894],{"class":34},[28,82436,52290],{"class":51777},[28,82438,51784],{"class":34},[28,82440,82441,82443,82445],{"class":30,"line":2268},[28,82442,52262],{"class":34},[28,82444,52277],{"class":51777},[28,82446,51784],{"class":34},[28,82448,82449],{"class":30,"line":2273},[28,82450,2890],{"emptyLinePlaceholder":562},[28,82452,82453,82455,82457],{"class":30,"line":3067},[28,82454,52262],{"class":34},[28,82456,51112],{"class":51777},[28,82458,51784],{"class":34},[14,82460,82461],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23396,82463,82465],{"id":82464},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82467,82468],{},"静态方法，将伪数组转换为真数组",[14,82470,82471],{},[420,82472],{"alt":23,"src":82473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[18,82475,82477],{"className":53544,"code":82476,"language":53546,"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,82478,82479,82487,82495,82507,82519,82531,82539,82547,82552,82557,82562,82567,82575],{"__ignoreMap":23},[28,82480,82481,82483,82485],{"class":30,"line":31},[28,82482,1529],{"class":34},[28,82484,52277],{"class":51777},[28,82486,51784],{"class":34},[28,82488,82489,82491,82493],{"class":30,"line":77},[28,82490,52621],{"class":34},[28,82492,1626],{"class":51777},[28,82494,51784],{"class":34},[28,82496,82497,82499,82501,82503,82505],{"class":30,"line":114},[28,82498,51818],{"class":34},[28,82500,591],{"class":51777},[28,82502,55791],{"class":34},[28,82504,591],{"class":51777},[28,82506,51784],{"class":34},[28,82508,82509,82511,82513,82515,82517],{"class":30,"line":128},[28,82510,51818],{"class":34},[28,82512,591],{"class":51777},[28,82514,55791],{"class":34},[28,82516,591],{"class":51777},[28,82518,51784],{"class":34},[28,82520,82521,82523,82525,82527,82529],{"class":30,"line":393},[28,82522,51818],{"class":34},[28,82524,591],{"class":51777},[28,82526,55791],{"class":34},[28,82528,591],{"class":51777},[28,82530,51784],{"class":34},[28,82532,82533,82535,82537],{"class":30,"line":409},[28,82534,52894],{"class":34},[28,82536,1626],{"class":51777},[28,82538,51784],{"class":34},[28,82540,82541,82543,82545],{"class":30,"line":1711},[28,82542,52621],{"class":34},[28,82544,52290],{"class":51777},[28,82546,51784],{"class":34},[28,82548,82549],{"class":30,"line":1802},[28,82550,82551],{"class":34},"    const lis = document.querySelectorAll('li')\n",[28,82553,82554],{"class":30,"line":1808},[28,82555,82556],{"class":34},"    const liss = Array.from(lis)\n",[28,82558,82559],{"class":30,"line":1820},[28,82560,82561],{"class":34},"    liss.pop()\n",[28,82563,82564],{"class":30,"line":2102},[28,82565,82566],{"class":34},"    console.log(liss)\n",[28,82568,82569,82571,82573],{"class":30,"line":2107},[28,82570,52894],{"class":34},[28,82572,52290],{"class":51777},[28,82574,51784],{"class":34},[28,82576,82577,82579,82581],{"class":30,"line":2113},[28,82578,52262],{"class":34},[28,82580,52277],{"class":51777},[28,82582,51784],{"class":34},[14,82584,82585],{},[420,82586],{"alt":23,"src":82587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22484,82589,82591],{"id":82590},"_41053-string","4.10.5.3 String",[14,82593,82594],{},[420,82595],{"alt":23,"src":82596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23396,82598,82600],{"id":82599},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[18,82602,82604],{"className":53544,"code":82603,"language":53546,"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,82605,82606,82614,82622,82627,82632,82637,82641,82646,82651,82656,82664],{"__ignoreMap":23},[28,82607,82608,82610,82612],{"class":30,"line":31},[28,82609,1529],{"class":34},[28,82611,52277],{"class":51777},[28,82613,51784],{"class":34},[28,82615,82616,82618,82620],{"class":30,"line":77},[28,82617,52621],{"class":34},[28,82619,52290],{"class":51777},[28,82621,51784],{"class":34},[28,82623,82624],{"class":30,"line":114},[28,82625,82626],{"class":34},"    \u002F\u002F 把字符串转化为数组\n",[28,82628,82629],{"class":30,"line":128},[28,82630,82631],{"class":34},"    const str = 'pink,red'\n",[28,82633,82634],{"class":30,"line":393},[28,82635,82636],{"class":34},"    const arr = str.split(',')\n",[28,82638,82639],{"class":30,"line":409},[28,82640,81115],{"class":34},[28,82642,82643],{"class":30,"line":1711},[28,82644,82645],{"class":34},"    const str1 = '2025-8-25'\n",[28,82647,82648],{"class":30,"line":1802},[28,82649,82650],{"class":34},"    const arr1 = str1.split('-')\n",[28,82652,82653],{"class":30,"line":1808},[28,82654,82655],{"class":34},"    console.log(arr1)\n",[28,82657,82658,82660,82662],{"class":30,"line":1820},[28,82659,52894],{"class":34},[28,82661,52290],{"class":51777},[28,82663,51784],{"class":34},[28,82665,82666,82668,82670],{"class":30,"line":2102},[28,82667,52262],{"class":34},[28,82669,52277],{"class":51777},[28,82671,51784],{"class":34},[23396,82673,82675],{"id":82674},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82677,5669],{},[14,82679,82680],{},"substring(indexStart)",[14,82682,82683],{},"substring(indexStart, indexEnd)",[1626,82685,82686,82697,82709,82719],{},[591,82687,82688,82689,82692,82693,82696],{},"如果省略了 ",[25,82690,82691],{},"indexEnd","，则 ",[25,82694,82695],{},"substring()"," 提取字符直到字符串的末尾",[591,82698,82699,82700,82703,82704,82692,82706,82708],{},"如果 ",[25,82701,82702],{},"indexStart"," 等于 ",[25,82705,82691],{},[25,82707,82695],{}," 返回一个空字符串",[591,82710,82699,82711,82713,82714,82692,82716,82718],{},[25,82712,82702],{}," 大于 ",[25,82715,82691],{},[25,82717,82695],{}," 的效果就像交换了这两个参数一样",[591,82720,82721],{},"结束的索引号不包含想要截取的部分",[18,82723,82725],{"className":81966,"code":82724,"language":81968,"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,82726,82727,82739,82743,82777,82807,82811,82842,82846,82873,82903,82933,82937,82968],{"__ignoreMap":23},[28,82728,82729,82732,82734,82737],{"class":30,"line":31},[28,82730,82731],{"class":34},"const anyString ",[28,82733,83],{"class":42},[28,82735,82736],{"class":735}," \"Mozilla\"",[28,82738,1781],{"class":34},[28,82740,82741],{"class":30,"line":77},[28,82742,2890],{"emptyLinePlaceholder":562},[28,82744,82745,82748,82750,82752,82754,82757,82759,82762,82764,82766,82768,82770,82772,82774],{"class":30,"line":114},[28,82746,82747],{"class":38},"console",[28,82749,1179],{"class":34},[28,82751,58724],{"class":38},[28,82753,367],{"class":34},[28,82755,82756],{"class":38},"anyString",[28,82758,1179],{"class":34},[28,82760,82761],{"class":38},"substring",[28,82763,367],{"class":34},[28,82765,822],{"class":38},[28,82767,12921],{"class":34},[28,82769,39],{"class":38},[28,82771,75730],{"class":34},[28,82773,33806],{"class":42},[28,82775,82776],{"class":735}," 'M'\n",[28,82778,82779,82781,82783,82785,82787,82789,82791,82793,82795,82797,82799,82801,82803,82805],{"class":30,"line":128},[28,82780,82747],{"class":38},[28,82782,1179],{"class":34},[28,82784,58724],{"class":38},[28,82786,367],{"class":34},[28,82788,82756],{"class":38},[28,82790,1179],{"class":34},[28,82792,82761],{"class":38},[28,82794,367],{"class":34},[28,82796,39],{"class":38},[28,82798,12921],{"class":34},[28,82800,822],{"class":38},[28,82802,75730],{"class":34},[28,82804,33806],{"class":42},[28,82806,82776],{"class":735},[28,82808,82809],{"class":30,"line":393},[28,82810,2890],{"emptyLinePlaceholder":562},[28,82812,82813,82815,82817,82819,82821,82823,82825,82827,82829,82831,82833,82835,82837,82839],{"class":30,"line":409},[28,82814,82747],{"class":38},[28,82816,1179],{"class":34},[28,82818,58724],{"class":38},[28,82820,367],{"class":34},[28,82822,82756],{"class":38},[28,82824,1179],{"class":34},[28,82826,82761],{"class":38},[28,82828,367],{"class":34},[28,82830,822],{"class":38},[28,82832,12921],{"class":34},[28,82834,970],{"class":38},[28,82836,75730],{"class":34},[28,82838,33806],{"class":42},[28,82840,82841],{"class":735}," 'Mozill'\n",[28,82843,82844],{"class":30,"line":1711},[28,82845,2890],{"emptyLinePlaceholder":562},[28,82847,82848,82850,82852,82854,82856,82858,82860,82862,82864,82866,82868,82870],{"class":30,"line":1802},[28,82849,82747],{"class":38},[28,82851,1179],{"class":34},[28,82853,58724],{"class":38},[28,82855,367],{"class":34},[28,82857,82756],{"class":38},[28,82859,1179],{"class":34},[28,82861,82761],{"class":38},[28,82863,367],{"class":34},[28,82865,103],{"class":38},[28,82867,75730],{"class":34},[28,82869,33806],{"class":42},[28,82871,82872],{"class":735}," 'lla'\n",[28,82874,82875,82877,82879,82881,82883,82885,82887,82889,82891,82893,82895,82897,82899,82901],{"class":30,"line":1808},[28,82876,82747],{"class":38},[28,82878,1179],{"class":34},[28,82880,58724],{"class":38},[28,82882,367],{"class":34},[28,82884,82756],{"class":38},[28,82886,1179],{"class":34},[28,82888,82761],{"class":38},[28,82890,367],{"class":34},[28,82892,103],{"class":38},[28,82894,12921],{"class":34},[28,82896,995],{"class":38},[28,82898,75786],{"class":34},[28,82900,33806],{"class":42},[28,82902,82872],{"class":735},[28,82904,82905,82907,82909,82911,82913,82915,82917,82919,82921,82923,82925,82927,82929,82931],{"class":30,"line":1820},[28,82906,82747],{"class":38},[28,82908,1179],{"class":34},[28,82910,58724],{"class":38},[28,82912,367],{"class":34},[28,82914,82756],{"class":38},[28,82916,1179],{"class":34},[28,82918,82761],{"class":38},[28,82920,367],{"class":34},[28,82922,995],{"class":38},[28,82924,12921],{"class":34},[28,82926,103],{"class":38},[28,82928,75730],{"class":34},[28,82930,33806],{"class":42},[28,82932,82872],{"class":735},[28,82934,82935],{"class":30,"line":2102},[28,82936,2890],{"emptyLinePlaceholder":562},[28,82938,82939,82941,82943,82945,82947,82949,82951,82953,82955,82957,82959,82961,82963,82965],{"class":30,"line":2107},[28,82940,82747],{"class":38},[28,82942,1179],{"class":34},[28,82944,58724],{"class":38},[28,82946,367],{"class":34},[28,82948,82756],{"class":38},[28,82950,1179],{"class":34},[28,82952,82761],{"class":38},[28,82954,367],{"class":34},[28,82956,822],{"class":38},[28,82958,12921],{"class":34},[28,82960,995],{"class":38},[28,82962,75730],{"class":34},[28,82964,33806],{"class":42},[28,82966,82967],{"class":735}," 'Mozilla'\n",[28,82969,82970,82972,82974,82976,82978,82980,82982,82984,82986,82988,82990,82992,82994,82996],{"class":30,"line":2113},[28,82971,82747],{"class":38},[28,82973,1179],{"class":34},[28,82975,58724],{"class":38},[28,82977,367],{"class":34},[28,82979,82756],{"class":38},[28,82981,1179],{"class":34},[28,82983,82761],{"class":38},[28,82985,367],{"class":34},[28,82987,822],{"class":38},[28,82989,12921],{"class":34},[28,82991,225],{"class":38},[28,82993,75730],{"class":34},[28,82995,33806],{"class":42},[28,82997,82967],{"class":735},[23396,82999,83001],{"id":83000},"_410533-startswith","4.10.5.3.3 startsWith",[14,83003,83004,83007,83008,83013,83014,83016,83017],{},[25,83005,83006],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[780,83009,83010],{},[25,83011,83012],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[25,83015,1853],{}," 或 ",[25,83018,66497],{},[18,83020,83022],{"className":77972,"code":83021,"language":77974,"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,83023,83024,83036,83055,83060,83080],{"__ignoreMap":23},[28,83025,83026,83028,83031,83033],{"class":30,"line":31},[28,83027,7280],{"class":42},[28,83029,83030],{"class":34}," str1 ",[28,83032,83],{"class":42},[28,83034,83035],{"class":735}," \"Saturday night plans\"\n",[28,83037,83038,83040,83042,83045,83048,83050,83053],{"class":30,"line":77},[28,83039,78009],{"class":34},[28,83041,58724],{"class":2453},[28,83043,83044],{"class":34},"(str1.",[28,83046,83047],{"class":2453},"startsWith",[28,83049,367],{"class":34},[28,83051,83052],{"class":735},"\"Sat\"",[28,83054,30980],{"class":34},[28,83056,83057],{"class":30,"line":114},[28,83058,83059],{"class":73},"\u002F\u002F Expected output: true\n",[28,83061,83062,83064,83066,83068,83070,83072,83074,83076,83078],{"class":30,"line":128},[28,83063,78009],{"class":34},[28,83065,58724],{"class":2453},[28,83067,83044],{"class":34},[28,83069,83047],{"class":2453},[28,83071,367],{"class":34},[28,83073,83052],{"class":735},[28,83075,12921],{"class":34},[28,83077,98],{"class":38},[28,83079,30980],{"class":34},[28,83081,83082],{"class":30,"line":393},[28,83083,83084],{"class":73},"\u002F\u002F Expected output: false\n",[18,83086,83088],{"className":51110,"code":83087,"language":51112,"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,83089,83090,83095,83100,83104,83109,83114],{"__ignoreMap":23},[28,83091,83092],{"class":30,"line":31},[28,83093,83094],{"class":34},"startsWith(searchString)\n",[28,83096,83097],{"class":30,"line":77},[28,83098,83099],{"class":34},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[28,83101,83102],{"class":30,"line":114},[28,83103,2890],{"emptyLinePlaceholder":562},[28,83105,83106],{"class":30,"line":128},[28,83107,83108],{"class":34},"const str3 = 'pink老师上课中'\n",[28,83110,83111],{"class":30,"line":393},[28,83112,83113],{"class":34},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[28,83115,83116],{"class":30,"line":409},[28,83117,83118],{"class":34},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23396,83120,83122],{"id":83121},"_410534-includes","4.10.5.3.4 includes",[14,83124,83125],{},"includes(searchString) includes(searchString, position)",[588,83127,83128],{},[591,83129,83130],{},"searchString:",[14,83132,83133,83134,83136,83137,83142,83143,83148,83149,21986,83152,83155,83156,83159],{},"一个要在 ",[25,83135,1790],{}," 中查找的字符串。",[80,83138,83141],{"href":83139,"rel":83140},"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",[24351],"不能是正则表达式","。所有非正则表达式的值都会被",[80,83144,83147],{"href":83145,"rel":83146},"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",[24351],"强制转换为字符串","，因此如果该参数被省略或传入 ",[25,83150,83151],{},"undefined",[25,83153,83154],{},"includes()"," 方法会在字符串中搜索 ",[25,83157,83158],{},"\"undefined\"","，这通常不是你想要的",[588,83161,83162],{"start":77},[591,83163,83164,1479],{},[25,83165,83166],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83168,83169,83170,83173,83174],{},"在字符串中开始搜索 ",[25,83171,83172],{},"searchString"," 的位置。默认值为 ",[25,83175,822],{},[588,83177,83178],{"start":114},[591,83179,83180],{},"返回值：",[14,83182,83183,83184,83186,83187,83191,83192],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[25,83185,83172],{}," 为空字符串的情况），则返回 ",[780,83188,83189],{},[25,83190,1853],{}," ，否则返回 ",[780,83193,83194],{},[25,83195,66497],{},[588,83197,83198],{"start":128},[591,83199,83200],{},"异常：",[14,83202,82699,83203,14281,83205,83209],{},[25,83204,83172],{},[80,83206,83208],{"href":83139,"rel":83207},[24351],"是一个正则表达式","，则会抛出",[14,83211,83212],{},"只要是有就是true，不需要非得以谁开头结尾",[18,83214,83216],{"className":77972,"code":83215,"language":77974,"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,83217,83218,83229,83252,83271,83291,83313,83332],{"__ignoreMap":23},[28,83219,83220,83222,83224,83226],{"class":30,"line":31},[28,83221,7280],{"class":42},[28,83223,80252],{"class":34},[28,83225,83],{"class":42},[28,83227,83228],{"class":735}," \"To be, or not to be, that is the question.\"\n",[28,83230,83231,83233,83235,83238,83241,83243,83246,83249],{"class":30,"line":77},[28,83232,78009],{"class":34},[28,83234,58724],{"class":2453},[28,83236,83237],{"class":34},"(str.",[28,83239,83240],{"class":2453},"includes",[28,83242,367],{"class":34},[28,83244,83245],{"class":735},"\"To be\"",[28,83247,83248],{"class":34},"))",[28,83250,83251],{"class":73},"  \u002F\u002F true\n",[28,83253,83254,83256,83258,83260,83262,83264,83267,83269],{"class":30,"line":114},[28,83255,78009],{"class":34},[28,83257,58724],{"class":2453},[28,83259,83237],{"class":34},[28,83261,83240],{"class":2453},[28,83263,367],{"class":34},[28,83265,83266],{"class":735},"\"question\"",[28,83268,83248],{"class":34},[28,83270,83251],{"class":73},[28,83272,83273,83275,83277,83279,83281,83283,83286,83288],{"class":30,"line":128},[28,83274,78009],{"class":34},[28,83276,58724],{"class":2453},[28,83278,83237],{"class":34},[28,83280,83240],{"class":2453},[28,83282,367],{"class":34},[28,83284,83285],{"class":735},"\"nonexistent\"",[28,83287,83248],{"class":34},[28,83289,83290],{"class":73},"  \u002F\u002F false\n",[28,83292,83293,83295,83297,83299,83301,83303,83305,83307,83309,83311],{"class":30,"line":393},[28,83294,78009],{"class":34},[28,83296,58724],{"class":2453},[28,83298,83237],{"class":34},[28,83300,83240],{"class":2453},[28,83302,367],{"class":34},[28,83304,83245],{"class":735},[28,83306,12921],{"class":34},[28,83308,39],{"class":38},[28,83310,83248],{"class":34},[28,83312,83290],{"class":73},[28,83314,83315,83317,83319,83321,83323,83325,83328,83330],{"class":30,"line":409},[28,83316,78009],{"class":34},[28,83318,58724],{"class":2453},[28,83320,83237],{"class":34},[28,83322,83240],{"class":2453},[28,83324,367],{"class":34},[28,83326,83327],{"class":735},"\"TO BE\"",[28,83329,83248],{"class":34},[28,83331,83290],{"class":73},[28,83333,83334,83336,83338,83340,83342,83344,83346,83348],{"class":30,"line":1711},[28,83335,78009],{"class":34},[28,83337,58724],{"class":2453},[28,83339,83237],{"class":34},[28,83341,83240],{"class":2453},[28,83343,367],{"class":34},[28,83345,8140],{"class":735},[28,83347,83248],{"class":34},[28,83349,83251],{"class":73},[23396,83351,83353],{"id":83352},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[18,83355,83357],{"className":53544,"code":83356,"language":53546,"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,83358,83359,83367,83375,83380,83385,83390,83395,83400,83408],{"__ignoreMap":23},[28,83360,83361,83363,83365],{"class":30,"line":31},[28,83362,1529],{"class":34},[28,83364,52277],{"class":51777},[28,83366,51784],{"class":34},[28,83368,83369,83371,83373],{"class":30,"line":77},[28,83370,52621],{"class":34},[28,83372,52290],{"class":51777},[28,83374,51784],{"class":34},[28,83376,83377],{"class":30,"line":114},[28,83378,83379],{"class":34},"    const num = 10\n",[28,83381,83382],{"class":30,"line":128},[28,83383,83384],{"class":34},"    \u002F\u002F 强制转换\n",[28,83386,83387],{"class":30,"line":393},[28,83388,83389],{"class":34},"    console.log(String(num))\n",[28,83391,83392],{"class":30,"line":409},[28,83393,83394],{"class":34},"    \u002F\u002F toString()方法转换\n",[28,83396,83397],{"class":30,"line":1711},[28,83398,83399],{"class":34},"    console.log(num.toString())\n",[28,83401,83402,83404,83406],{"class":30,"line":1802},[28,83403,52894],{"class":34},[28,83405,52290],{"class":51777},[28,83407,51784],{"class":34},[28,83409,83410,83412,83414],{"class":30,"line":1808},[28,83411,52262],{"class":34},[28,83413,52277],{"class":51777},[28,83415,51784],{"class":34},[23396,83417,83419],{"id":83418},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83421,83422],{},[420,83423],{"alt":23,"src":83424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[18,83426,83428],{"className":51110,"code":83427,"language":51112,"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,83429,83430,83440,83454,83458,83466,83480,83500,83512,83520,83524,83532,83544,83552,83564,83569,83574,83579,83626,83642,83650,83658,83662],{"__ignoreMap":23},[28,83431,83432,83434,83436,83438],{"class":30,"line":31},[28,83433,51774],{"class":34},[28,83435,51778],{"class":51777},[28,83437,51781],{"class":2453},[28,83439,51784],{"class":34},[28,83441,83442,83444,83446,83448,83450,83452],{"class":30,"line":77},[28,83443,1529],{"class":34},[28,83445,51112],{"class":51777},[28,83447,51793],{"class":2453},[28,83449,83],{"class":34},[28,83451,51798],{"class":735},[28,83453,51784],{"class":34},[28,83455,83456],{"class":30,"line":114},[28,83457,2890],{"emptyLinePlaceholder":562},[28,83459,83460,83462,83464],{"class":30,"line":128},[28,83461,1529],{"class":34},[28,83463,51811],{"class":51777},[28,83465,51784],{"class":34},[28,83467,83468,83470,83472,83474,83476,83478],{"class":30,"line":393},[28,83469,52621],{"class":34},[28,83471,51821],{"class":51777},[28,83473,51824],{"class":2453},[28,83475,83],{"class":34},[28,83477,51829],{"class":735},[28,83479,51784],{"class":34},[28,83481,83482,83484,83486,83488,83490,83492,83494,83496,83498],{"class":30,"line":409},[28,83483,52621],{"class":34},[28,83485,51821],{"class":51777},[28,83487,15406],{"class":2453},[28,83489,83],{"class":34},[28,83491,51868],{"class":735},[28,83493,51848],{"class":2453},[28,83495,83],{"class":34},[28,83497,51875],{"class":735},[28,83499,51784],{"class":34},[28,83501,83502,83504,83506,83508,83510],{"class":30,"line":1711},[28,83503,52621],{"class":34},[28,83505,51884],{"class":51777},[28,83507,51887],{"class":34},[28,83509,51884],{"class":51777},[28,83511,51784],{"class":34},[28,83513,83514,83516,83518],{"class":30,"line":1802},[28,83515,52262],{"class":34},[28,83517,51811],{"class":51777},[28,83519,51784],{"class":34},[28,83521,83522],{"class":30,"line":1808},[28,83523,2890],{"emptyLinePlaceholder":562},[28,83525,83526,83528,83530],{"class":30,"line":1820},[28,83527,1529],{"class":34},[28,83529,52277],{"class":51777},[28,83531,51784],{"class":34},[28,83533,83534,83536,83538,83540,83542],{"class":30,"line":2102},[28,83535,52621],{"class":34},[28,83537,52088],{"class":51777},[28,83539,55791],{"class":34},[28,83541,52088],{"class":51777},[28,83543,51784],{"class":34},[28,83545,83546,83548,83550],{"class":30,"line":2107},[28,83547,52621],{"class":34},[28,83549,52290],{"class":51777},[28,83551,51784],{"class":34},[28,83553,83554,83556,83559,83561],{"class":30,"line":2113},[28,83555,11707],{"class":42},[28,83557,83558],{"class":38}," gift",[28,83560,14050],{"class":42},[28,83562,83563],{"class":735}," '50g的茶叶，清洗球'\n",[28,83565,83566],{"class":30,"line":2118},[28,83567,83568],{"class":73},"    \u002F\u002F 1.把字符串拆分为数组\n",[28,83570,83571],{"class":30,"line":2132},[28,83572,83573],{"class":73},"    \u002F\u002F console.log(gift.split(','))\n",[28,83575,83576],{"class":30,"line":2137},[28,83577,83578],{"class":73},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[28,83580,83581,83583,83585,83587,83590,83593,83595,83598,83600,83602,83604,83606,83608,83611,83613,83616,83618,83620,83622,83624],{"class":30,"line":2143},[28,83582,11707],{"class":42},[28,83584,74396],{"class":38},[28,83586,14050],{"class":42},[28,83588,83589],{"class":34}," gift.",[28,83591,83592],{"class":2453},"split",[28,83594,367],{"class":34},[28,83596,83597],{"class":735},"'，'",[28,83599,31307],{"class":34},[28,83601,74521],{"class":2453},[28,83603,367],{"class":34},[28,83605,80272],{"class":5704},[28,83607,80275],{"class":42},[28,83609,83610],{"class":735}," `\u003Cspan>【赠品】${",[28,83612,80272],{"class":34},[28,83614,83615],{"class":735},"}\u003C\u002Fspan>\u003Cbr>`",[28,83617,31307],{"class":34},[28,83619,74700],{"class":2453},[28,83621,367],{"class":34},[28,83623,74705],{"class":735},[28,83625,228],{"class":34},[28,83627,83628,83630,83632,83634,83636,83638,83640],{"class":30,"line":2164},[28,83629,52884],{"class":34},[28,83631,54876],{"class":2453},[28,83633,367],{"class":34},[28,83635,82408],{"class":735},[28,83637,74726],{"class":34},[28,83639,83],{"class":42},[28,83641,74462],{"class":34},[28,83643,83644,83646,83648],{"class":30,"line":2169},[28,83645,52894],{"class":34},[28,83647,52290],{"class":51777},[28,83649,51784],{"class":34},[28,83651,83652,83654,83656],{"class":30,"line":2183},[28,83653,52262],{"class":34},[28,83655,52277],{"class":51777},[28,83657,51784],{"class":34},[28,83659,83660],{"class":30,"line":2188},[28,83661,2890],{"emptyLinePlaceholder":562},[28,83663,83664,83666,83668],{"class":30,"line":2217},[28,83665,52262],{"class":34},[28,83667,51112],{"class":51777},[28,83669,51784],{"class":34},[22484,83671,83673],{"id":83672},"_41054-number","4.10.5.4 Number",[14,83675,83676],{},[420,83677],{"alt":23,"src":83678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83680,83681],{},"整数也可以进行toFixed来保留小数",[14,83683,83684],{},"比如：",[14,83686,83687],{},"const price=10",[14,83689,83690],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22484,83692,83694],{"id":83693},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83696,83697],{},[420,83698],{"alt":23,"src":83699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[18,83701,83703],{"className":51110,"code":83702,"language":51112,"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,83704,83705,83715,83729,83733,83741,83755,83775,83787,83795,83801,83811,83821,83831,83835,83839,83845,83857,83871,83875,83879,83885,83897,83913,83923,83939,83943,83947,83953,83963,83973,83977,83981,83989,84001,84013,84025,84029,84033,84041,84053,84057,84061,84072,84082,84094,84106,84116,84120,84124,84132,84141,84153,84163,84173,84177,84181,84189,84198,84205,84215,84227,84231,84235,84244,84254,84265,84277,84289,84293,84297,84306,84316,84327,84331,84335,84341,84353,84365,84375,84385,84403,84415,84419,84423,84432,84444,84454,84464,84476,84480,84488,84496,84500,84508,84522,84530,84544,84572,84580,84588,84598,84602,84610,84618,84627,84635,84644,84654,84658,84662,84670,84678,84687,84695,84703,84716,84720,84724,84732,84740,84749,84757,84765,84780,84784,84788,84796,84804,84813,84821,84829,84843,84851,84855,84859,84864,84890,84895,84932,84937,84960,84965,85019,85024,85060,85064,85070,85075,85084,85098,85107,85126,85135,85145,85150,85155,85168,85173,85227,85253,85261,85269,85273],{"__ignoreMap":23},[28,83706,83707,83709,83711,83713],{"class":30,"line":31},[28,83708,51774],{"class":34},[28,83710,51778],{"class":51777},[28,83712,51781],{"class":2453},[28,83714,51784],{"class":34},[28,83716,83717,83719,83721,83723,83725,83727],{"class":30,"line":77},[28,83718,1529],{"class":34},[28,83720,51112],{"class":51777},[28,83722,51793],{"class":2453},[28,83724,83],{"class":34},[28,83726,51798],{"class":735},[28,83728,51784],{"class":34},[28,83730,83731],{"class":30,"line":114},[28,83732,2890],{"emptyLinePlaceholder":562},[28,83734,83735,83737,83739],{"class":30,"line":128},[28,83736,1529],{"class":34},[28,83738,51811],{"class":51777},[28,83740,51784],{"class":34},[28,83742,83743,83745,83747,83749,83751,83753],{"class":30,"line":393},[28,83744,52621],{"class":34},[28,83746,51821],{"class":51777},[28,83748,51824],{"class":2453},[28,83750,83],{"class":34},[28,83752,51829],{"class":735},[28,83754,51784],{"class":34},[28,83756,83757,83759,83761,83763,83765,83767,83769,83771,83773],{"class":30,"line":409},[28,83758,52621],{"class":34},[28,83760,51821],{"class":51777},[28,83762,15406],{"class":2453},[28,83764,83],{"class":34},[28,83766,51868],{"class":735},[28,83768,51848],{"class":2453},[28,83770,83],{"class":34},[28,83772,51875],{"class":735},[28,83774,51784],{"class":34},[28,83776,83777,83779,83781,83783,83785],{"class":30,"line":1711},[28,83778,52621],{"class":34},[28,83780,51884],{"class":51777},[28,83782,51887],{"class":34},[28,83784,51884],{"class":51777},[28,83786,51784],{"class":34},[28,83788,83789,83791,83793],{"class":30,"line":1802},[28,83790,52621],{"class":34},[28,83792,547],{"class":51777},[28,83794,51784],{"class":34},[28,83796,83797,83799],{"class":30,"line":1808},[28,83798,6891],{"class":51777},[28,83800,16058],{"class":34},[28,83802,83803,83805,83807,83809],{"class":30,"line":1820},[28,83804,55172],{"class":38},[28,83806,51914],{"class":34},[28,83808,822],{"class":38},[28,83810,1781],{"class":34},[28,83812,83813,83815,83817,83819],{"class":30,"line":2102},[28,83814,55183],{"class":38},[28,83816,51914],{"class":34},[28,83818,822],{"class":38},[28,83820,1781],{"class":34},[28,83822,83823,83825,83827,83829],{"class":30,"line":2107},[28,83824,73073],{"class":38},[28,83826,51914],{"class":34},[28,83828,60982],{"class":38},[28,83830,1781],{"class":34},[28,83832,83833],{"class":30,"line":2113},[28,83834,2677],{"class":34},[28,83836,83837],{"class":30,"line":2118},[28,83838,2890],{"emptyLinePlaceholder":562},[28,83840,83841,83843],{"class":30,"line":2132},[28,83842,62600],{"class":2453},[28,83844,16058],{"class":34},[28,83846,83847,83849,83851,83853,83855],{"class":30,"line":2137},[28,83848,55248],{"class":38},[28,83850,51914],{"class":34},[28,83852,79051],{"class":38},[28,83854,51969],{"class":42},[28,83856,1781],{"class":34},[28,83858,83859,83861,83863,83865,83867,83869],{"class":30,"line":2143},[28,83860,55183],{"class":38},[28,83862,51914],{"class":34},[28,83864,938],{"class":38},[28,83866,51969],{"class":42},[28,83868,52033],{"class":38},[28,83870,1781],{"class":34},[28,83872,83873],{"class":30,"line":2164},[28,83874,2677],{"class":34},[28,83876,83877],{"class":30,"line":2169},[28,83878,2890],{"emptyLinePlaceholder":562},[28,83880,83881,83883],{"class":30,"line":2183},[28,83882,79102],{"class":2453},[28,83884,16058],{"class":34},[28,83886,83887,83889,83891,83893,83895],{"class":30,"line":2188},[28,83888,55172],{"class":38},[28,83890,51914],{"class":34},[28,83892,1196],{"class":38},[28,83894,51969],{"class":42},[28,83896,1781],{"class":34},[28,83898,83899,83901,83903,83905,83907,83909,83911],{"class":30,"line":2217},[28,83900,62337],{"class":38},[28,83902,51914],{"class":34},[28,83904,28607],{"class":38},[28,83906,79157],{"class":38},[28,83908,79160],{"class":38},[28,83910,1315],{"class":42},[28,83912,1781],{"class":34},[28,83914,83915,83917,83919,83921],{"class":30,"line":2222},[28,83916,55486],{"class":38},[28,83918,51914],{"class":34},[28,83920,51954],{"class":38},[28,83922,1781],{"class":34},[28,83924,83925,83927,83929,83931,83933,83935,83937],{"class":30,"line":2239},[28,83926,62454],{"class":38},[28,83928,51914],{"class":34},[28,83930,39],{"class":38},[28,83932,51969],{"class":42},[28,83934,51998],{"class":38},[28,83936,62721],{"class":38},[28,83938,1781],{"class":34},[28,83940,83941],{"class":30,"line":2244},[28,83942,2677],{"class":34},[28,83944,83945],{"class":30,"line":2249},[28,83946,2890],{"emptyLinePlaceholder":562},[28,83948,83949,83951],{"class":30,"line":2254},[28,83950,79220],{"class":2453},[28,83952,16058],{"class":34},[28,83954,83955,83957,83959,83961],{"class":30,"line":2268},[28,83956,62502],{"class":38},[28,83958,51914],{"class":34},[28,83960,62507],{"class":38},[28,83962,1781],{"class":34},[28,83964,83965,83967,83969,83971],{"class":30,"line":2273},[28,83966,55361],{"class":38},[28,83968,51914],{"class":34},[28,83970,62295],{"class":38},[28,83972,1781],{"class":34},[28,83974,83975],{"class":30,"line":3067},[28,83976,2677],{"class":34},[28,83978,83979],{"class":30,"line":3081},[28,83980,2890],{"emptyLinePlaceholder":562},[28,83982,83983,83985,83987],{"class":30,"line":3089},[28,83984,79102],{"class":2453},[28,83986,56092],{"class":51777},[28,83988,16058],{"class":34},[28,83990,83991,83993,83995,83997,83999],{"class":30,"line":3094},[28,83992,55248],{"class":38},[28,83994,51914],{"class":34},[28,83996,1232],{"class":38},[28,83998,51969],{"class":42},[28,84000,1781],{"class":34},[28,84002,84003,84005,84007,84009,84011],{"class":30,"line":3100},[28,84004,55262],{"class":38},[28,84006,51914],{"class":34},[28,84008,1232],{"class":38},[28,84010,51969],{"class":42},[28,84012,1781],{"class":34},[28,84014,84015,84017,84019,84021,84023],{"class":30,"line":3106},[28,84016,62227],{"class":38},[28,84018,51914],{"class":34},[28,84020,108],{"class":38},[28,84022,51969],{"class":42},[28,84024,1781],{"class":34},[28,84026,84027],{"class":30,"line":3111},[28,84028,2677],{"class":34},[28,84030,84031],{"class":30,"line":8436},[28,84032,2890],{"emptyLinePlaceholder":562},[28,84034,84035,84037,84039],{"class":30,"line":8460},[28,84036,79102],{"class":2453},[28,84038,62781],{"class":2453},[28,84040,16058],{"class":34},[28,84042,84043,84045,84047,84049,84051],{"class":30,"line":8465},[28,84044,55248],{"class":38},[28,84046,51914],{"class":34},[28,84048,2212],{"class":38},[28,84050,51969],{"class":42},[28,84052,1781],{"class":34},[28,84054,84055],{"class":30,"line":8471},[28,84056,2677],{"class":34},[28,84058,84059],{"class":30,"line":8498},[28,84060,2890],{"emptyLinePlaceholder":562},[28,84062,84063,84065,84067,84070],{"class":30,"line":8503},[28,84064,79102],{"class":2453},[28,84066,62781],{"class":2453},[28,84068,84069],{"class":2453}," .tag",[28,84071,16058],{"class":34},[28,84073,84074,84076,84078,84080],{"class":30,"line":8509},[28,84075,55486],{"class":38},[28,84077,51914],{"class":34},[28,84079,61346],{"class":38},[28,84081,1781],{"class":34},[28,84083,84084,84086,84088,84090,84092],{"class":30,"line":8521},[28,84085,55172],{"class":38},[28,84087,51914],{"class":34},[28,84089,93],{"class":38},[28,84091,51969],{"class":42},[28,84093,1781],{"class":34},[28,84095,84096,84098,84100,84102,84104],{"class":30,"line":8533},[28,84097,55399],{"class":38},[28,84099,51914],{"class":34},[28,84101,1121],{"class":38},[28,84103,51969],{"class":42},[28,84105,1781],{"class":34},[28,84107,84108,84110,84112,84114],{"class":30,"line":8545},[28,84109,57893],{"class":38},[28,84111,51914],{"class":34},[28,84113,62547],{"class":38},[28,84115,1781],{"class":34},[28,84117,84118],{"class":30,"line":10202},[28,84119,2677],{"class":34},[28,84121,84122],{"class":30,"line":10227},[28,84123,2890],{"emptyLinePlaceholder":562},[28,84125,84126,84128,84130],{"class":30,"line":10250},[28,84127,79102],{"class":2453},[28,84129,79394],{"class":2453},[28,84131,31945],{"class":34},[28,84133,84134,84136,84139],{"class":30,"line":10274},[28,84135,79102],{"class":2453},[28,84137,84138],{"class":2453}," .sub-total",[28,84140,16058],{"class":34},[28,84142,84143,84145,84147,84149,84151],{"class":30,"line":10279},[28,84144,55399],{"class":38},[28,84146,51914],{"class":34},[28,84148,1270],{"class":38},[28,84150,51969],{"class":42},[28,84152,1781],{"class":34},[28,84154,84155,84157,84159,84161],{"class":30,"line":10284},[28,84156,57893],{"class":38},[28,84158,51914],{"class":34},[28,84160,79417],{"class":38},[28,84162,1781],{"class":34},[28,84164,84165,84167,84169,84171],{"class":30,"line":10289},[28,84166,62314],{"class":38},[28,84168,51914],{"class":34},[28,84170,39],{"class":38},[28,84172,1781],{"class":34},[28,84174,84175],{"class":30,"line":10298},[28,84176,2677],{"class":34},[28,84178,84179],{"class":30,"line":10303},[28,84180,2890],{"emptyLinePlaceholder":562},[28,84182,84183,84185,84187],{"class":30,"line":10309},[28,84184,79102],{"class":2453},[28,84186,79434],{"class":2453},[28,84188,31945],{"class":34},[28,84190,84191,84193,84196],{"class":30,"line":10330},[28,84192,79102],{"class":2453},[28,84194,84195],{"class":2453}," .sub-total::before",[28,84197,31945],{"class":34},[28,84199,84200,84203],{"class":30,"line":10336},[28,84201,84202],{"class":2453},"    .amount::before",[28,84204,16058],{"class":34},[28,84206,84207,84209,84211,84213],{"class":30,"line":10350},[28,84208,79441],{"class":38},[28,84210,51914],{"class":34},[28,84212,79446],{"class":735},[28,84214,1781],{"class":34},[28,84216,84217,84219,84221,84223,84225],{"class":30,"line":10356},[28,84218,55399],{"class":38},[28,84220,51914],{"class":34},[28,84222,1121],{"class":38},[28,84224,51969],{"class":42},[28,84226,1781],{"class":34},[28,84228,84229],{"class":30,"line":10383},[28,84230,2677],{"class":34},[28,84232,84233],{"class":30,"line":10392},[28,84234,2890],{"emptyLinePlaceholder":562},[28,84236,84237,84239,84242],{"class":30,"line":10398},[28,84238,79102],{"class":2453},[28,84240,84241],{"class":2453}," .spec",[28,84243,16058],{"class":34},[28,84245,84246,84248,84250,84252],{"class":30,"line":10406},[28,84247,62314],{"class":38},[28,84249,51914],{"class":34},[28,84251,93],{"class":38},[28,84253,1781],{"class":34},[28,84255,84256,84258,84260,84263],{"class":30,"line":10411},[28,84257,57893],{"class":38},[28,84259,51914],{"class":34},[28,84261,84262],{"class":38},"#888",[28,84264,1781],{"class":34},[28,84266,84267,84269,84271,84273,84275],{"class":30,"line":17090},[28,84268,55399],{"class":38},[28,84270,51914],{"class":34},[28,84272,1170],{"class":38},[28,84274,51969],{"class":42},[28,84276,1781],{"class":34},[28,84278,84279,84281,84283,84285,84287],{"class":30,"line":17096},[28,84280,62477],{"class":38},[28,84282,51914],{"class":34},[28,84284,1320],{"class":38},[28,84286,51969],{"class":42},[28,84288,1781],{"class":34},[28,84290,84291],{"class":30,"line":17119},[28,84292,2677],{"class":34},[28,84294,84295],{"class":30,"line":17125},[28,84296,2890],{"emptyLinePlaceholder":562},[28,84298,84299,84301,84304],{"class":30,"line":17148},[28,84300,79102],{"class":2453},[28,84302,84303],{"class":2453}," .count",[28,84305,16058],{"class":34},[28,84307,84308,84310,84312,84314],{"class":30,"line":17162},[28,84309,62314],{"class":38},[28,84311,51914],{"class":34},[28,84313,39],{"class":38},[28,84315,1781],{"class":34},[28,84317,84318,84320,84322,84325],{"class":30,"line":17182},[28,84319,57893],{"class":38},[28,84321,51914],{"class":34},[28,84323,84324],{"class":38},"#aaa",[28,84326,1781],{"class":34},[28,84328,84329],{"class":30,"line":17188},[28,84330,2677],{"class":34},[28,84332,84333],{"class":30,"line":17199},[28,84334,2890],{"emptyLinePlaceholder":562},[28,84336,84337,84339],{"class":30,"line":17222},[28,84338,72952],{"class":2453},[28,84340,16058],{"class":34},[28,84342,84343,84345,84347,84349,84351],{"class":30,"line":17244},[28,84344,55248],{"class":38},[28,84346,51914],{"class":34},[28,84348,79051],{"class":38},[28,84350,51969],{"class":42},[28,84352,1781],{"class":34},[28,84354,84355,84357,84359,84361,84363],{"class":30,"line":17249},[28,84356,55183],{"class":38},[28,84358,51914],{"class":34},[28,84360,822],{"class":38},[28,84362,52033],{"class":38},[28,84364,1781],{"class":34},[28,84366,84367,84369,84371,84373],{"class":30,"line":17255},[28,84368,55486],{"class":38},[28,84370,51914],{"class":34},[28,84372,51954],{"class":38},[28,84374,1781],{"class":34},[28,84376,84377,84379,84381,84383],{"class":30,"line":17269},[28,84378,55497],{"class":38},[28,84380,51914],{"class":34},[28,84382,52057],{"class":38},[28,84384,1781],{"class":34},[28,84386,84387,84390,84392,84394,84396,84398,84401],{"class":30,"line":17282},[28,84388,84389],{"class":38},"      border-top",[28,84391,51914],{"class":34},[28,84393,39],{"class":38},[28,84395,51969],{"class":42},[28,84397,51998],{"class":38},[28,84399,84400],{"class":38}," #4e4e4e",[28,84402,1781],{"class":34},[28,84404,84405,84407,84409,84411,84413],{"class":30,"line":17287},[28,84406,55172],{"class":38},[28,84408,51914],{"class":34},[28,84410,1320],{"class":38},[28,84412,51969],{"class":42},[28,84414,1781],{"class":34},[28,84416,84417],{"class":30,"line":17301},[28,84418,2677],{"class":34},[28,84420,84421],{"class":30,"line":17306},[28,84422,2890],{"emptyLinePlaceholder":562},[28,84424,84425,84427,84430],{"class":30,"line":17312},[28,84426,72952],{"class":2453},[28,84428,84429],{"class":2453}," .amount",[28,84431,16058],{"class":34},[28,84433,84434,84436,84438,84440,84442],{"class":30,"line":17317},[28,84435,55399],{"class":38},[28,84437,51914],{"class":34},[28,84439,1270],{"class":38},[28,84441,51969],{"class":42},[28,84443,1781],{"class":34},[28,84445,84446,84448,84450,84452],{"class":30,"line":17331},[28,84447,57893],{"class":38},[28,84449,51914],{"class":34},[28,84451,79417],{"class":38},[28,84453,1781],{"class":34},[28,84455,84456,84458,84460,84462],{"class":30,"line":17336},[28,84457,62811],{"class":38},[28,84459,51914],{"class":34},[28,84461,51966],{"class":38},[28,84463,1781],{"class":34},[28,84465,84466,84468,84470,84472,84474],{"class":30,"line":17341},[28,84467,62227],{"class":38},[28,84469,51914],{"class":34},[28,84471,1276],{"class":38},[28,84473,51969],{"class":42},[28,84475,1781],{"class":34},[28,84477,84478],{"class":30,"line":17355},[28,84479,2677],{"class":34},[28,84481,84482,84484,84486],{"class":30,"line":17367},[28,84483,52894],{"class":34},[28,84485,547],{"class":51777},[28,84487,51784],{"class":34},[28,84489,84490,84492,84494],{"class":30,"line":17372},[28,84491,52262],{"class":34},[28,84493,51811],{"class":51777},[28,84495,51784],{"class":34},[28,84497,84498],{"class":30,"line":17385},[28,84499,2890],{"emptyLinePlaceholder":562},[28,84501,84502,84504,84506],{"class":30,"line":17390},[28,84503,1529],{"class":34},[28,84505,52277],{"class":51777},[28,84507,51784],{"class":34},[28,84509,84510,84512,84514,84516,84518,84520],{"class":30,"line":17395},[28,84511,52621],{"class":34},[28,84513,52088],{"class":51777},[28,84515,53963],{"class":2453},[28,84517,83],{"class":34},[28,84519,63085],{"class":735},[28,84521,51784],{"class":34},[28,84523,84524,84526,84528],{"class":30,"line":17400},[28,84525,52894],{"class":34},[28,84527,52088],{"class":51777},[28,84529,51784],{"class":34},[28,84531,84532,84534,84536,84538,84540,84542],{"class":30,"line":17413},[28,84533,52621],{"class":34},[28,84535,52088],{"class":51777},[28,84537,53963],{"class":2453},[28,84539,83],{"class":34},[28,84541,63057],{"class":735},[28,84543,51784],{"class":34},[28,84545,84546,84548,84550,84553,84555,84557,84559,84562,84564,84566,84568,84570],{"class":30,"line":17418},[28,84547,51818],{"class":34},[28,84549,52088],{"class":51777},[28,84551,84552],{"class":34},">合计：\u003C",[28,84554,28],{"class":51777},[28,84556,53963],{"class":2453},[28,84558,83],{"class":34},[28,84560,84561],{"class":735},"\"amount\"",[28,84563,55791],{"class":34},[28,84565,28],{"class":51777},[28,84567,55791],{"class":34},[28,84569,52088],{"class":51777},[28,84571,51784],{"class":34},[28,84573,84574,84576,84578],{"class":30,"line":33111},[28,84575,52894],{"class":34},[28,84577,52088],{"class":51777},[28,84579,51784],{"class":34},[28,84581,84582,84584,84586],{"class":30,"line":33117},[28,84583,52621],{"class":34},[28,84585,52290],{"class":51777},[28,84587,51784],{"class":34},[28,84589,84590,84592,84594,84596],{"class":30,"line":33123},[28,84591,11707],{"class":42},[28,84593,79854],{"class":38},[28,84595,14050],{"class":42},[28,84597,55924],{"class":34},[28,84599,84600],{"class":30,"line":33129},[28,84601,79863],{"class":34},[28,84603,84604,84606,84608],{"class":30,"line":33135},[28,84605,79868],{"class":34},[28,84607,79871],{"class":735},[28,84609,31945],{"class":34},[28,84611,84612,84614,84616],{"class":30,"line":33146},[28,84613,79878],{"class":34},[28,84615,79881],{"class":735},[28,84617,31945],{"class":34},[28,84619,84620,84622,84625],{"class":30,"line":33152},[28,84621,79888],{"class":34},[28,84623,84624],{"class":38},"289.9",[28,84626,31945],{"class":34},[28,84628,84629,84631,84633],{"class":30,"line":33172},[28,84630,79898],{"class":34},[28,84632,79901],{"class":735},[28,84634,31945],{"class":34},[28,84636,84637,84640,84642],{"class":30,"line":33178},[28,84638,84639],{"class":34},"        count: ",[28,84641,93],{"class":38},[28,84643,31945],{"class":34},[28,84645,84646,84649,84652],{"class":30,"line":33189},[28,84647,84648],{"class":34},"        spec: { color: ",[28,84650,84651],{"class":735},"'白色'",[28,84653,56081],{"class":34},[28,84655,84656],{"class":30,"line":33195},[28,84657,78369],{"class":34},[28,84659,84660],{"class":30,"line":33201},[28,84661,79863],{"class":34},[28,84663,84664,84666,84668],{"class":30,"line":33207},[28,84665,79868],{"class":34},[28,84667,79962],{"class":735},[28,84669,31945],{"class":34},[28,84671,84672,84674,84676],{"class":30,"line":33213},[28,84673,79878],{"class":34},[28,84675,79971],{"class":735},[28,84677,31945],{"class":34},[28,84679,84680,84682,84685],{"class":30,"line":33219},[28,84681,79888],{"class":34},[28,84683,84684],{"class":38},"109.8",[28,84686,31945],{"class":34},[28,84688,84689,84691,84693],{"class":30,"line":33225},[28,84690,79898],{"class":34},[28,84692,79989],{"class":735},[28,84694,31945],{"class":34},[28,84696,84697,84699,84701],{"class":30,"line":33231},[28,84698,84639],{"class":34},[28,84700,98],{"class":38},[28,84702,31945],{"class":34},[28,84704,84705,84708,84710,84712,84714],{"class":30,"line":33251},[28,84706,84707],{"class":34},"        spec: { size: ",[28,84709,82380],{"class":735},[28,84711,55941],{"class":34},[28,84713,82385],{"class":735},[28,84715,56081],{"class":34},[28,84717,84718],{"class":30,"line":33257},[28,84719,78369],{"class":34},[28,84721,84722],{"class":30,"line":33273},[28,84723,79863],{"class":34},[28,84725,84726,84728,84730],{"class":30,"line":33279},[28,84727,79868],{"class":34},[28,84729,80006],{"class":735},[28,84731,31945],{"class":34},[28,84733,84734,84736,84738],{"class":30,"line":33293},[28,84735,79878],{"class":34},[28,84737,80015],{"class":735},[28,84739,31945],{"class":34},[28,84741,84742,84744,84747],{"class":30,"line":33299},[28,84743,79888],{"class":34},[28,84745,84746],{"class":38},"488",[28,84748,31945],{"class":34},[28,84750,84751,84753,84755],{"class":30,"line":33314},[28,84752,79898],{"class":34},[28,84754,80033],{"class":735},[28,84756,31945],{"class":34},[28,84758,84759,84761,84763],{"class":30,"line":33320},[28,84760,84639],{"class":34},[28,84762,39],{"class":38},[28,84764,31945],{"class":34},[28,84766,84767,84769,84772,84775,84778],{"class":30,"line":33329},[28,84768,84648],{"class":34},[28,84770,84771],{"class":735},"'青色'",[28,84773,84774],{"class":34},", sum: ",[28,84776,84777],{"class":735},"'一大四小'",[28,84779,56081],{"class":34},[28,84781,84782],{"class":30,"line":33335},[28,84783,78369],{"class":34},[28,84785,84786],{"class":30,"line":33344},[28,84787,79863],{"class":34},[28,84789,84790,84792,84794],{"class":30,"line":33350},[28,84791,79868],{"class":34},[28,84793,80050],{"class":735},[28,84795,31945],{"class":34},[28,84797,84798,84800,84802],{"class":30,"line":33356},[28,84799,79878],{"class":34},[28,84801,80059],{"class":735},[28,84803,31945],{"class":34},[28,84805,84806,84808,84811],{"class":30,"line":33365},[28,84807,79888],{"class":34},[28,84809,84810],{"class":38},"139",[28,84812,31945],{"class":34},[28,84814,84815,84817,84819],{"class":30,"line":33371},[28,84816,79898],{"class":34},[28,84818,80077],{"class":735},[28,84820,31945],{"class":34},[28,84822,84823,84825,84827],{"class":30,"line":33382},[28,84824,84639],{"class":34},[28,84826,39],{"class":38},[28,84828,31945],{"class":34},[28,84830,84831,84833,84836,84838,84841],{"class":30,"line":33388},[28,84832,84707],{"class":34},[28,84834,84835],{"class":735},"'小号'",[28,84837,55941],{"class":34},[28,84839,84840],{"class":735},"'紫色'",[28,84842,55947],{"class":34},[28,84844,84845,84848],{"class":30,"line":33407},[28,84846,84847],{"class":34},"        gift: ",[28,84849,84850],{"class":735},"'50g茶叶,清洗球'\n",[28,84852,84853],{"class":30,"line":33413},[28,84854,52875],{"class":34},[28,84856,84857],{"class":30,"line":33424},[28,84858,53586],{"class":34},[28,84860,84861],{"class":30,"line":33430},[28,84862,84863],{"class":73},"    \u002F\u002F  1.根据数据渲染页面\n",[28,84865,84866,84868,84870,84872,84874,84876,84878,84880,84882,84884,84886,84888],{"class":30,"line":33450},[28,84867,52884],{"class":34},[28,84869,54876],{"class":2453},[28,84871,367],{"class":34},[28,84873,80378],{"class":735},[28,84875,74726],{"class":34},[28,84877,83],{"class":42},[28,84879,80525],{"class":34},[28,84881,74521],{"class":2453},[28,84883,367],{"class":34},[28,84885,80272],{"class":5704},[28,84887,80275],{"class":42},[28,84889,16058],{"class":34},[28,84891,84892],{"class":30,"line":33466},[28,84893,84894],{"class":73},"      \u002F\u002F 对象解构\n",[28,84896,84897,84899,84901,84903,84905,84907,84909,84912,84914,84916,84918,84921,84923,84926,84928,84930],{"class":30,"line":33472},[28,84898,58705],{"class":42},[28,84900,80284],{"class":34},[28,84902,80297],{"class":38},[28,84904,12921],{"class":34},[28,84906,80287],{"class":38},[28,84908,12921],{"class":34},[28,84910,84911],{"class":38},"count",[28,84913,12921],{"class":34},[28,84915,80292],{"class":38},[28,84917,12921],{"class":34},[28,84919,84920],{"class":38},"spec",[28,84922,12921],{"class":34},[28,84924,84925],{"class":38},"gift",[28,84927,80300],{"class":34},[28,84929,83],{"class":42},[28,84931,80305],{"class":34},[28,84933,84934],{"class":30,"line":33486},[28,84935,84936],{"class":73},"      \u002F\u002F 规格文字模块处理\n",[28,84938,84939,84941,84944,84946,84948,84950,84952,84954,84956,84958],{"class":30,"line":33492},[28,84940,58705],{"class":42},[28,84942,84943],{"class":38}," text",[28,84945,14050],{"class":42},[28,84947,82415],{"class":34},[28,84949,82418],{"class":2453},[28,84951,82421],{"class":34},[28,84953,74700],{"class":2453},[28,84955,367],{"class":34},[28,84957,82428],{"class":735},[28,84959,228],{"class":34},[28,84961,84962],{"class":30,"line":33498},[28,84963,84964],{"class":73},"      \u002F\u002F 处理赠品模块\n",[28,84966,84967,84969,84971,84973,84976,84978,84980,84982,84984,84987,84989,84991,84993,84995,84997,85000,85002,85005,85007,85009,85011,85013,85015,85017],{"class":30,"line":33509},[28,84968,58705],{"class":42},[28,84970,74396],{"class":38},[28,84972,14050],{"class":42},[28,84974,84975],{"class":34}," gift ",[28,84977,1605],{"class":42},[28,84979,83589],{"class":34},[28,84981,83592],{"class":2453},[28,84983,367],{"class":34},[28,84985,84986],{"class":735},"','",[28,84988,31307],{"class":34},[28,84990,74521],{"class":2453},[28,84992,367],{"class":34},[28,84994,80272],{"class":5704},[28,84996,80275],{"class":42},[28,84998,84999],{"class":735}," `\u003Cspan class=\"tag\">【赠品】${",[28,85001,80272],{"class":34},[28,85003,85004],{"class":735},"}\u003C\u002Fspan>`",[28,85006,31307],{"class":34},[28,85008,74700],{"class":2453},[28,85010,367],{"class":34},[28,85012,74705],{"class":735},[28,85014,14200],{"class":34},[28,85016,1479],{"class":42},[28,85018,70581],{"class":735},[28,85020,85021],{"class":30,"line":33515},[28,85022,85023],{"class":73},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[28,85025,85026,85028,85031,85033,85036,85038,85040,85042,85045,85047,85049,85051,85054,85056,85058],{"class":30,"line":33521},[28,85027,58705],{"class":42},[28,85029,85030],{"class":38}," subtotal",[28,85032,14050],{"class":42},[28,85034,85035],{"class":34}," ((price ",[28,85037,256],{"class":42},[28,85039,6242],{"class":38},[28,85041,7006],{"class":42},[28,85043,85044],{"class":34}," count) ",[28,85046,43],{"class":42},[28,85048,6242],{"class":38},[28,85050,31307],{"class":34},[28,85052,85053],{"class":2453},"toFixed",[28,85055,367],{"class":34},[28,85057,93],{"class":38},[28,85059,228],{"class":34},[28,85061,85062],{"class":30,"line":33531},[28,85063,2890],{"emptyLinePlaceholder":562},[28,85065,85066,85068],{"class":30,"line":33537},[28,85067,74459],{"class":42},[28,85069,70645],{"class":735},[28,85071,85072],{"class":30,"line":33548},[28,85073,85074],{"class":735},"        \u003Cdiv class=\"item\">\n",[28,85076,85077,85080,85082],{"class":30,"line":33554},[28,85078,85079],{"class":735},"          \u003Cimg src=\"${",[28,85081,80297],{"class":34},[28,85083,80329],{"class":735},[28,85085,85086,85089,85091,85094,85096],{"class":30,"line":33564},[28,85087,85088],{"class":735},"          \u003Cp class=\"name\">${",[28,85090,80287],{"class":34},[28,85092,85093],{"class":735},"}${",[28,85095,1790],{"class":34},[28,85097,80339],{"class":735},[28,85099,85100,85103,85105],{"class":30,"line":33569},[28,85101,85102],{"class":735},"          \u003Cp class=\"spec\">${",[28,85104,5675],{"class":34},[28,85106,80339],{"class":735},[28,85108,85109,85112,85114,85116,85118,85120,85122,85124],{"class":30,"line":33575},[28,85110,85111],{"class":735},"          \u003Cp class=\"price\">${",[28,85113,80292],{"class":34},[28,85115,1179],{"class":735},[28,85117,85053],{"class":2453},[28,85119,367],{"class":735},[28,85121,93],{"class":38},[28,85123,1054],{"class":735},[28,85125,80339],{"class":735},[28,85127,85128,85131,85133],{"class":30,"line":33624},[28,85129,85130],{"class":735},"          \u003Cp class=\"count\">x${",[28,85132,84911],{"class":34},[28,85134,80339],{"class":735},[28,85136,85137,85140,85143],{"class":30,"line":33671},[28,85138,85139],{"class":735},"          \u003Cp class=\"sub-total\">${",[28,85141,85142],{"class":34},"subtotal",[28,85144,80339],{"class":735},[28,85146,85147],{"class":30,"line":33676},[28,85148,85149],{"class":735},"        \u003C\u002Fdiv> \n",[28,85151,85152],{"class":30,"line":33682},[28,85153,85154],{"class":735},"             `\n",[28,85156,85157,85160,85162,85164,85166],{"class":30,"line":33701},[28,85158,85159],{"class":34},"    }).",[28,85161,74700],{"class":2453},[28,85163,367],{"class":34},[28,85165,74705],{"class":735},[28,85167,228],{"class":34},[28,85169,85170],{"class":30,"line":33707},[28,85171,85172],{"class":73},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[28,85174,85175,85177,85179,85181,85183,85186,85188,85191,85193,85195,85197,85200,85203,85205,85208,85210,85212,85214,85217,85219,85221,85223,85225],{"class":30,"line":33726},[28,85176,11707],{"class":42},[28,85178,63262],{"class":38},[28,85180,14050],{"class":42},[28,85182,80525],{"class":34},[28,85184,85185],{"class":2453},"reduce",[28,85187,2866],{"class":34},[28,85189,85190],{"class":5704},"prev",[28,85192,12921],{"class":34},[28,85194,80272],{"class":5704},[28,85196,14200],{"class":34},[28,85198,85199],{"class":42},"=>",[28,85201,85202],{"class":34}," prev ",[28,85204,1104],{"class":42},[28,85206,85207],{"class":34}," (item.price ",[28,85209,256],{"class":42},[28,85211,6242],{"class":38},[28,85213,7006],{"class":42},[28,85215,85216],{"class":34}," item.count) ",[28,85218,43],{"class":42},[28,85220,6242],{"class":38},[28,85222,12921],{"class":34},[28,85224,822],{"class":38},[28,85226,228],{"class":34},[28,85228,85229,85231,85233,85235,85238,85240,85242,85245,85247,85249,85251],{"class":30,"line":33732},[28,85230,52884],{"class":34},[28,85232,54876],{"class":2453},[28,85234,367],{"class":34},[28,85236,85237],{"class":735},"'.amount'",[28,85239,74726],{"class":34},[28,85241,83],{"class":42},[28,85243,85244],{"class":34}," total.",[28,85246,85053],{"class":2453},[28,85248,367],{"class":34},[28,85250,93],{"class":38},[28,85252,228],{"class":34},[28,85254,85255,85257,85259],{"class":30,"line":33738},[28,85256,52894],{"class":34},[28,85258,52290],{"class":51777},[28,85260,51784],{"class":34},[28,85262,85263,85265,85267],{"class":30,"line":33748},[28,85264,52262],{"class":34},[28,85266,52277],{"class":51777},[28,85268,51784],{"class":34},[28,85270,85271],{"class":30,"line":33753},[28,85272,2890],{"emptyLinePlaceholder":562},[28,85274,85275,85277,85279],{"class":30,"line":33759},[28,85276,52262],{"class":34},[28,85278,51112],{"class":51777},[28,85280,51784],{"class":34},[60,85282,85284],{"id":85283},"_411-编程思想","4.11 编程思想",[605,85286,85288],{"id":85287},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85290,85291,85294],{},[780,85292,85293],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85296,85297],{},"调用就可以了",[14,85299,85300],{},[420,85301],{"alt":23,"src":85302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[605,85304,85306],{"id":85305},"_4112-面向对象","4.11.2 面向对象",[14,85308,85309],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85311,85312],{},[420,85313],{"alt":23,"src":85314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85316,85317],{},"面向对象的特性：",[1626,85319,85320,85323,85326],{},[591,85321,85322],{},"封装性",[591,85324,85325],{},"继承性",[591,85327,85328],{},"多态性",[605,85330,85332],{"id":85331},"_4113-两者比较","4.11.3 两者比较",[14,85334,85335],{},[420,85336],{"alt":23,"src":85337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[60,85339,85341],{"id":85340},"_412-构造函数回顾","4.12 构造函数回顾",[14,85343,85344],{},[420,85345],{"alt":23,"src":85346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85348,85349],{},[420,85350],{"alt":23,"src":85351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85353,85354],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85356,85357],{},[420,85358],{"alt":23,"src":85359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[60,85361,85363],{"id":85362},"_413-原型","4.13 原型",[605,85365,85367],{"id":85366},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85369,85370],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85372,85373],{},[420,85374],{"alt":23,"src":85375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85377,85378],{},[420,85379],{"alt":23,"src":85380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85382,85383],{},"原型是构造函数的属性，它也是一个对象",[14,85385,85386],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85388,85389],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[18,85391,85393],{"className":53544,"code":85392,"language":53546,"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,85394,85395,85403,85408,85416,85421,85426,85431,85436,85441,85445,85449,85453,85458,85463,85467,85472,85477,85482,85487,85492,85496,85504],{"__ignoreMap":23},[28,85396,85397,85399,85401],{"class":30,"line":31},[28,85398,1529],{"class":34},[28,85400,52277],{"class":51777},[28,85402,51784],{"class":34},[28,85404,85405],{"class":30,"line":77},[28,85406,85407],{"class":73},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[28,85409,85410,85412,85414],{"class":30,"line":114},[28,85411,52621],{"class":34},[28,85413,52290],{"class":51777},[28,85415,51784],{"class":34},[28,85417,85418],{"class":30,"line":128},[28,85419,85420],{"class":34},"    function Star(uname, age) {\n",[28,85422,85423],{"class":30,"line":393},[28,85424,85425],{"class":34},"      this.uname = uname,\n",[28,85427,85428],{"class":30,"line":409},[28,85429,85430],{"class":34},"        this.age = age\n",[28,85432,85433],{"class":30,"line":1711},[28,85434,85435],{"class":34},"      \u002F\u002F this.sing = function () {\n",[28,85437,85438],{"class":30,"line":1802},[28,85439,85440],{"class":34},"      \u002F\u002F   console.log('唱歌')\n",[28,85442,85443],{"class":30,"line":1808},[28,85444,2890],{"emptyLinePlaceholder":562},[28,85446,85447],{"class":30,"line":1820},[28,85448,60514],{"class":34},[28,85450,85451],{"class":30,"line":2102},[28,85452,2677],{"class":34},[28,85454,85455],{"class":30,"line":2107},[28,85456,85457],{"class":34},"    Star.prototype.sing = function () {\n",[28,85459,85460],{"class":30,"line":2113},[28,85461,85462],{"class":34},"      console.log('唱歌')\n",[28,85464,85465],{"class":30,"line":2118},[28,85466,2677],{"class":34},[28,85468,85469],{"class":30,"line":2132},[28,85470,85471],{"class":34},"    \u002F\u002F console.dir(Star.prototype)\n",[28,85473,85474],{"class":30,"line":2137},[28,85475,85476],{"class":34},"    const pink = new Star('pink', 18)\n",[28,85478,85479],{"class":30,"line":2143},[28,85480,85481],{"class":34},"    const red = new Star('red', 20)\n",[28,85483,85484],{"class":30,"line":2164},[28,85485,85486],{"class":34},"    pink.sing()\n",[28,85488,85489],{"class":30,"line":2169},[28,85490,85491],{"class":34},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[28,85493,85494],{"class":30,"line":2183},[28,85495,2890],{"emptyLinePlaceholder":562},[28,85497,85498,85500,85502],{"class":30,"line":2188},[28,85499,52894],{"class":34},[28,85501,52290],{"class":51777},[28,85503,51784],{"class":34},[28,85505,85506,85508,85510],{"class":30,"line":2217},[28,85507,52262],{"class":34},[28,85509,52277],{"class":51777},[28,85511,51784],{"class":34},[14,85513,85514],{},[420,85515],{"alt":23,"src":85516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[18,85518,85520],{"className":53544,"code":85519,"language":53546,"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,85521,85522,85530,85538,85543,85548,85553,85558,85562,85567,85572,85577,85581,85586,85590,85594,85599,85603,85611],{"__ignoreMap":23},[28,85523,85524,85526,85528],{"class":30,"line":31},[28,85525,1529],{"class":34},[28,85527,52277],{"class":51777},[28,85529,51784],{"class":34},[28,85531,85532,85534,85536],{"class":30,"line":77},[28,85533,52621],{"class":34},[28,85535,52290],{"class":51777},[28,85537,51784],{"class":34},[28,85539,85540],{"class":30,"line":114},[28,85541,85542],{"class":34},"    let that\n",[28,85544,85545],{"class":30,"line":128},[28,85546,85547],{"class":34},"    function Star(uname) {\n",[28,85549,85550],{"class":30,"line":393},[28,85551,85552],{"class":34},"      this.uname = uname\n",[28,85554,85555],{"class":30,"line":409},[28,85556,85557],{"class":34},"      that = this\n",[28,85559,85560],{"class":30,"line":1711},[28,85561,2677],{"class":34},[28,85563,85564],{"class":30,"line":1802},[28,85565,85566],{"class":34},"    \u002F\u002F 实例对象是 ldh\n",[28,85568,85569],{"class":30,"line":1808},[28,85570,85571],{"class":34},"    const ldh = new Star('刘德华')\n",[28,85573,85574],{"class":30,"line":1820},[28,85575,85576],{"class":34},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[28,85578,85579],{"class":30,"line":2102},[28,85580,2890],{"emptyLinePlaceholder":562},[28,85582,85583],{"class":30,"line":2107},[28,85584,85585],{"class":34},"    Star.sing = function () {\n",[28,85587,85588],{"class":30,"line":2113},[28,85589,85462],{"class":34},[28,85591,85592],{"class":30,"line":2118},[28,85593,2677],{"class":34},[28,85595,85596],{"class":30,"line":2132},[28,85597,85598],{"class":34},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[28,85600,85601],{"class":30,"line":2137},[28,85602,2890],{"emptyLinePlaceholder":562},[28,85604,85605,85607,85609],{"class":30,"line":2143},[28,85606,52894],{"class":34},[28,85608,52290],{"class":51777},[28,85610,51784],{"class":34},[28,85612,85613,85615,85617],{"class":30,"line":2164},[28,85614,52262],{"class":34},[28,85616,52277],{"class":51777},[28,85618,51784],{"class":34},[14,85620,85621],{},"构造函数的this指向的是实例对象；",[14,85623,85624],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[605,85626,85628],{"id":85627},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85630,85631],{},[420,85632],{"alt":23,"src":85633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[18,85635,85637],{"className":53544,"code":85636,"language":53546,"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,85638,85639,85647,85655,85660,85665,85670,85675,85680,85685,85690,85695,85700,85705,85709,85714,85719,85724,85729,85733,85738,85743,85748,85753,85757,85762,85767,85772,85777,85781,85786,85790,85798],{"__ignoreMap":23},[28,85640,85641,85643,85645],{"class":30,"line":31},[28,85642,1529],{"class":34},[28,85644,52277],{"class":51777},[28,85646,51784],{"class":34},[28,85648,85649,85651,85653],{"class":30,"line":77},[28,85650,52621],{"class":34},[28,85652,52290],{"class":51777},[28,85654,51784],{"class":34},[28,85656,85657],{"class":30,"line":114},[28,85658,85659],{"class":34},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[28,85661,85662],{"class":30,"line":128},[28,85663,85664],{"class":34},"    const arr = [1, 2, 3]\n",[28,85666,85667],{"class":30,"line":393},[28,85668,85669],{"class":34},"    \u002F\u002F 自己定义数组的扩展方法\n",[28,85671,85672],{"class":30,"line":409},[28,85673,85674],{"class":34},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[28,85676,85677],{"class":30,"line":1711},[28,85678,85679],{"class":34},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[28,85681,85682],{"class":30,"line":1802},[28,85683,85684],{"class":34},"    \u002F\u002F ①.最大值\n",[28,85686,85687],{"class":30,"line":1808},[28,85688,85689],{"class":34},"    Array.prototype.max = function () {\n",[28,85691,85692],{"class":30,"line":1820},[28,85693,85694],{"class":34},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[28,85696,85697],{"class":30,"line":2102},[28,85698,85699],{"class":34},"      return Math.max(...this)\n",[28,85701,85702],{"class":30,"line":2107},[28,85703,85704],{"class":34},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[28,85706,85707],{"class":30,"line":2113},[28,85708,2677],{"class":34},[28,85710,85711],{"class":30,"line":2118},[28,85712,85713],{"class":34},"    console.log(arr.max())\n",[28,85715,85716],{"class":30,"line":2132},[28,85717,85718],{"class":34},"    \u002F\u002F ②最小值\n",[28,85720,85721],{"class":30,"line":2137},[28,85722,85723],{"class":34},"    Array.prototype.min = function () {\n",[28,85725,85726],{"class":30,"line":2143},[28,85727,85728],{"class":34},"      return Math.min(...this)\n",[28,85730,85731],{"class":30,"line":2164},[28,85732,2677],{"class":34},[28,85734,85735],{"class":30,"line":2169},[28,85736,85737],{"class":34},"    console.log(arr.min())\n",[28,85739,85740],{"class":30,"line":2183},[28,85741,85742],{"class":34},"    \u002F\u002F③求和\n",[28,85744,85745],{"class":30,"line":2188},[28,85746,85747],{"class":34},"    Array.prototype.sum = function () {\n",[28,85749,85750],{"class":30,"line":2217},[28,85751,85752],{"class":34},"      return this.reduce((prev, current) => prev + current, 0)\n",[28,85754,85755],{"class":30,"line":2222},[28,85756,2677],{"class":34},[28,85758,85759],{"class":30,"line":2239},[28,85760,85761],{"class":34},"    console.log(arr.sum())\n",[28,85763,85764],{"class":30,"line":2244},[28,85765,85766],{"class":34},"    \u002F\u002F ③排序\n",[28,85768,85769],{"class":30,"line":2249},[28,85770,85771],{"class":34},"    Array.prototype.rever = function () {\n",[28,85773,85774],{"class":30,"line":2254},[28,85775,85776],{"class":34},"      return this.reverse()\n",[28,85778,85779],{"class":30,"line":2268},[28,85780,2677],{"class":34},[28,85782,85783],{"class":30,"line":2273},[28,85784,85785],{"class":34},"    console.log(arr.rever())\n",[28,85787,85788],{"class":30,"line":3067},[28,85789,2890],{"emptyLinePlaceholder":562},[28,85791,85792,85794,85796],{"class":30,"line":3081},[28,85793,52894],{"class":34},[28,85795,52290],{"class":51777},[28,85797,51784],{"class":34},[28,85799,85800,85802,85804],{"class":30,"line":3089},[28,85801,52262],{"class":34},[28,85803,52277],{"class":51777},[28,85805,51784],{"class":34},[14,85807,85808],{},[420,85809],{"alt":23,"src":85810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[605,85812,85814],{"id":85813},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85816,85817],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85819,85820],{},[420,85821],{"alt":23,"src":85822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[18,85824,85826],{"className":53544,"code":85825,"language":53546,"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,85827,85828,85836,85844,85849,85854,85858,85863,85868,85873,85881],{"__ignoreMap":23},[28,85829,85830,85832,85834],{"class":30,"line":31},[28,85831,1529],{"class":34},[28,85833,52277],{"class":51777},[28,85835,51784],{"class":34},[28,85837,85838,85840,85842],{"class":30,"line":77},[28,85839,52621],{"class":34},[28,85841,52290],{"class":51777},[28,85843,51784],{"class":34},[28,85845,85846],{"class":30,"line":114},[28,85847,85848],{"class":34},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[28,85850,85851],{"class":30,"line":128},[28,85852,85853],{"class":34},"    function Star() {\n",[28,85855,85856],{"class":30,"line":393},[28,85857,2677],{"class":34},[28,85859,85860],{"class":30,"line":409},[28,85861,85862],{"class":34},"    const ldh = new Star()\n",[28,85864,85865],{"class":30,"line":1711},[28,85866,85867],{"class":34},"    console.log(Star.prototype)\n",[28,85869,85870],{"class":30,"line":1802},[28,85871,85872],{"class":34},"    console.log(Star.prototype.constructor === Star)\n",[28,85874,85875,85877,85879],{"class":30,"line":1808},[28,85876,52894],{"class":34},[28,85878,52290],{"class":51777},[28,85880,51784],{"class":34},[28,85882,85883,85885,85887],{"class":30,"line":1820},[28,85884,52262],{"class":34},[28,85886,52277],{"class":51777},[28,85888,51784],{"class":34},[14,85890,85891],{},[420,85892],{"alt":23,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85895,85896],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[18,85898,85900],{"className":53544,"code":85899,"language":53546,"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,85901,85902,85910,85914,85918,85922,85927,85932,85937,85941,85946,85951,85956,85961,85966,85971,85975,85979,85984,85989,85994,85998,86003,86008,86012,86016,86020],{"__ignoreMap":23},[28,85903,85904,85906,85908],{"class":30,"line":31},[28,85905,52621],{"class":34},[28,85907,52290],{"class":51777},[28,85909,51784],{"class":34},[28,85911,85912],{"class":30,"line":77},[28,85913,85848],{"class":34},[28,85915,85916],{"class":30,"line":114},[28,85917,85853],{"class":34},[28,85919,85920],{"class":30,"line":128},[28,85921,2677],{"class":34},[28,85923,85924],{"class":30,"line":393},[28,85925,85926],{"class":34},"    \u002F\u002F const ldh = new Star()\n",[28,85928,85929],{"class":30,"line":409},[28,85930,85931],{"class":34},"    \u002F\u002F console.log(Star.prototype)\n",[28,85933,85934],{"class":30,"line":1711},[28,85935,85936],{"class":34},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[28,85938,85939],{"class":30,"line":1802},[28,85940,2890],{"emptyLinePlaceholder":562},[28,85942,85943],{"class":30,"line":1808},[28,85944,85945],{"class":34},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[28,85947,85948],{"class":30,"line":1820},[28,85949,85950],{"class":34},"    \u002F\u002F Star.prototype.sing = function () {\n",[28,85952,85953],{"class":30,"line":2102},[28,85954,85955],{"class":34},"    \u002F\u002F   console.log('唱歌')\n",[28,85957,85958],{"class":30,"line":2107},[28,85959,85960],{"class":34},"    \u002F\u002F }\n",[28,85962,85963],{"class":30,"line":2113},[28,85964,85965],{"class":34},"    \u002F\u002F Star.prototype.dance = function () {\n",[28,85967,85968],{"class":30,"line":2118},[28,85969,85970],{"class":34},"    \u002F\u002F   console.log('跳舞')\n",[28,85972,85973],{"class":30,"line":2132},[28,85974,85960],{"class":34},[28,85976,85977],{"class":30,"line":2137},[28,85978,85867],{"class":34},[28,85980,85981],{"class":30,"line":2143},[28,85982,85983],{"class":34},"    Star.prototype = {\n",[28,85985,85986],{"class":30,"line":2164},[28,85987,85988],{"class":34},"      sing: function () {\n",[28,85990,85991],{"class":30,"line":2169},[28,85992,85993],{"class":34},"        console.log('唱歌')\n",[28,85995,85996],{"class":30,"line":2183},[28,85997,78369],{"class":34},[28,85999,86000],{"class":30,"line":2188},[28,86001,86002],{"class":34},"      dance: function () {\n",[28,86004,86005],{"class":30,"line":2217},[28,86006,86007],{"class":34},"        console.log('跳舞')\n",[28,86009,86010],{"class":30,"line":2222},[28,86011,52875],{"class":34},[28,86013,86014],{"class":30,"line":2239},[28,86015,2677],{"class":34},[28,86017,86018],{"class":30,"line":2244},[28,86019,85867],{"class":34},[28,86021,86022,86024,86026],{"class":30,"line":2249},[28,86023,52894],{"class":34},[28,86025,52290],{"class":51777},[28,86027,51784],{"class":34},[14,86029,86030],{},"进行输出结果后会发现：",[14,86032,86033],{},[420,86034],{"alt":23,"src":86035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86037,86038],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86040,86041],{},"所以，要重新指回创造这个原型对象的构造函数",[18,86043,86045],{"className":71690,"code":86044,"language":71692,"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,86046,86047,86061,86066,86071,86082,86095,86100,86111,86125,86129],{"__ignoreMap":23},[28,86048,86049,86052,86054,86057,86059],{"class":30,"line":31},[28,86050,86051],{"class":38},"Star",[28,86053,1179],{"class":34},[28,86055,86056],{"class":38},"prototype",[28,86058,14050],{"class":42},[28,86060,16058],{"class":34},[28,86062,86063],{"class":30,"line":77},[28,86064,86065],{"class":73},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[28,86067,86068],{"class":30,"line":114},[28,86069,86070],{"class":34},"  constructor: Star,\n",[28,86072,86073,86076,86078,86080],{"class":30,"line":128},[28,86074,86075],{"class":2453},"  sing",[28,86077,51914],{"class":34},[28,86079,54926],{"class":42},[28,86081,54929],{"class":34},[28,86083,86084,86086,86088,86090,86093],{"class":30,"line":393},[28,86085,74230],{"class":34},[28,86087,58724],{"class":2453},[28,86089,367],{"class":34},[28,86091,86092],{"class":735},"'唱歌'",[28,86094,228],{"class":34},[28,86096,86097],{"class":30,"line":409},[28,86098,86099],{"class":34},"   },\n",[28,86101,86102,86105,86107,86109],{"class":30,"line":1711},[28,86103,86104],{"class":2453},"   dance",[28,86106,51914],{"class":34},[28,86108,54926],{"class":42},[28,86110,54929],{"class":34},[28,86112,86113,86116,86118,86120,86123],{"class":30,"line":1802},[28,86114,86115],{"class":34},"     console.",[28,86117,58724],{"class":2453},[28,86119,367],{"class":34},[28,86121,86122],{"class":735},"'跳舞'",[28,86124,228],{"class":34},[28,86126,86127],{"class":30,"line":1808},[28,86128,4797],{"class":34},[28,86130,86131],{"class":30,"line":1820},[28,86132,2055],{"class":34},[14,86134,86135],{},[420,86136],{"alt":23,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86139,86140],{},"总结1：",[14,86142,86143],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86145,86146],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86148,86149],{},"constructor指的是他的来源",[14,86151,86152],{},[420,86153],{"alt":23,"src":86154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86156,86157],{},[420,86158],{"alt":23,"src":86159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86161,86162],{},"总结2：",[14,86164,86165],{},[420,86166],{"alt":23,"src":86167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86169,86170],{},[420,86171],{"alt":23,"src":86172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86174,86175],{},[420,86176],{"alt":23,"src":86177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[605,86179,86181],{"id":86180},"_4134-对象原型","4.13.4 对象原型",[14,86183,86184],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86186,86187],{},"对象原型就是__proto__这个属性",[14,86189,86190],{},[420,86191],{"alt":23,"src":86192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86194,86195],{},[420,86196],{"alt":23,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86199,86200],{},[420,86201],{"alt":23,"src":86202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86204,86205],{},[420,86206],{"alt":23,"src":86207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[18,86209,86211],{"className":53544,"code":86210,"language":53546,"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,86212,86213,86221,86229,86233,86237,86241,86246,86254],{"__ignoreMap":23},[28,86214,86215,86217,86219],{"class":30,"line":31},[28,86216,1529],{"class":34},[28,86218,52277],{"class":51777},[28,86220,51784],{"class":34},[28,86222,86223,86225,86227],{"class":30,"line":77},[28,86224,52621],{"class":34},[28,86226,52290],{"class":51777},[28,86228,51784],{"class":34},[28,86230,86231],{"class":30,"line":114},[28,86232,85853],{"class":34},[28,86234,86235],{"class":30,"line":128},[28,86236,2677],{"class":34},[28,86238,86239],{"class":30,"line":393},[28,86240,85862],{"class":34},[28,86242,86243],{"class":30,"line":409},[28,86244,86245],{"class":34},"    console.log(ldh)\n",[28,86247,86248,86250,86252],{"class":30,"line":1711},[28,86249,52894],{"class":34},[28,86251,52290],{"class":51777},[28,86253,51784],{"class":34},[28,86255,86256,86258,86260],{"class":30,"line":1802},[28,86257,52262],{"class":34},[28,86259,52277],{"class":51777},[28,86261,51784],{"class":34},[14,86263,86264],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86266,86267],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86269,86270],{},[420,86271],{"alt":23,"src":86272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86274,86275],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86277,86278],{},"对象原型指向原型对象",[14,86280,86281],{},[420,86282],{"alt":23,"src":86283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86285,86286],{},[420,86287],{"alt":23,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86290,86291],{},[420,86292],{"alt":23,"src":86293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[605,86295,86297],{"id":86296},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86299,86300],{},[420,86301],{"alt":23,"src":86302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[588,86304,86305,86308,86311,86314],{},[591,86306,86307],{},"构造函数通过new的形式实例化得到实例对象",[591,86309,86310],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[591,86312,86313],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[591,86315,86316],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86318,86319],{},[420,86320],{"alt":23,"src":86321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86323,86324],{},"题目梳理：",[14,86326,86327],{},[420,86328],{"alt":23,"src":86329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[605,86331,86333],{"id":86332},"_4136-原型继承","4.13.6 原型继承",[14,86335,86336],{},[420,86337],{"alt":23,"src":86338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86340,86341],{},[420,86342],{"alt":23,"src":86343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86345,86346],{},[420,86347],{"alt":23,"src":86348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86350,86351],{},[420,86352],{"alt":23,"src":86353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86355,86356],{},[420,86357],{"alt":23,"src":86358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86360,86361],{},[420,86362],{"alt":23,"src":86363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86365,86366],{},[420,86367],{"alt":23,"src":86368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86370,86371],{},[420,86372],{"alt":23,"src":86373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86375,86376],{},"回顾：构造函数每次new得到对象都是不同的",[605,86378,86380],{"id":86379},"_4137-原型链","4.13.7 原型链",[14,86382,86383],{},[420,86384],{"alt":23,"src":86385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86387,86388],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86390,86391],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86393,86394],{},"大哥是Object",[14,86396,86397],{},[420,86398],{"alt":23,"src":86399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86401,86402],{},[420,86403],{"alt":23,"src":86404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86406,86407],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86409,86410],{},"万物皆对象",[605,86412,86414],{"id":86413},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86416,86417],{},"模态框",[14,86419,86420],{},"以后遇见这个效果直接使用这个就行",[14,86422,86423],{},[420,86424],{"alt":23,"src":86425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86427,86428],{},[420,86429],{"alt":23,"src":86430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86432,86433],{},[420,86434],{"alt":23,"src":86435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86437,86438],{},[420,86439],{"alt":23,"src":86440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86442,86443],{},"补充知识点：",[588,86445,86446],{},[591,86447,86448],{},"append()",[14,86450,86451],{},[420,86452],{"alt":23,"src":86453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[18,86455,86457],{"className":51110,"code":86456,"language":51112,"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,86458,86459,86464,86469,86474,86478,86482,86486,86491,86496,86501,86505],{"__ignoreMap":23},[28,86460,86461],{"class":30,"line":31},[28,86462,86463],{"class":34},"append(param1)\n",[28,86465,86466],{"class":30,"line":77},[28,86467,86468],{"class":34},"append(param1, param2)\n",[28,86470,86471],{"class":30,"line":114},[28,86472,86473],{"class":34},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[28,86475,86476],{"class":30,"line":128},[28,86477,2890],{"emptyLinePlaceholder":562},[28,86479,86480],{"class":30,"line":393},[28,86481,2890],{"emptyLinePlaceholder":562},[28,86483,86484],{"class":30,"line":409},[28,86485,2890],{"emptyLinePlaceholder":562},[28,86487,86488],{"class":30,"line":1711},[28,86489,86490],{"class":34},"let div = document.createElement(\"div\");\n",[28,86492,86493],{"class":30,"line":1802},[28,86494,86495],{"class":34},"let p = document.createElement(\"p\");\n",[28,86497,86498],{"class":30,"line":1808},[28,86499,86500],{"class":34},"div.append(p);\n",[28,86502,86503],{"class":30,"line":1820},[28,86504,2890],{"emptyLinePlaceholder":562},[28,86506,86507,86510,86512],{"class":30,"line":2102},[28,86508,86509],{"class":34},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[28,86511,14],{"class":51777},[28,86513,86514],{"class":34},"> ]\n",[588,86516,86517],{"start":77},[591,86518,86519],{},"remove()",[14,86521,86522],{},"自己删自己",[14,86524,86525],{},[420,86526],{"alt":23,"src":86527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[18,86529,86531],{"className":51110,"code":86530,"language":51112,"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,86532,86533,86543,86557,86561,86569,86583,86603,86615,86623,86630,86642,86655,86690,86702,86713,86725,86737,86749,86776,86786,86790,86794,86803,86815,86829,86839,86851,86855,86859,86869,86880,86890,86900,86913,86926,86936,86940,86944,86953,86963,86975,86979,86983,86992,87002,87012,87024,87028,87032,87042,87058,87069,87079,87089,87101,87113,87125,87129,87133,87146,87157,87161,87169,87177,87181,87189,87209,87229,87237,87242,87268,87273,87278,87297,87302,87314,87319,87330,87340,87350,87355,87360,87364,87369,87374,87379,87399,87404,87424,87429,87443,87448,87453,87458,87474,87478,87483,87512,87517,87522,87527,87538,87542,87546,87550,87555,87580,87585,87610,87615,87624,87628,87633,87658,87662,87687,87691,87700,87704,87709,87727,87737,87741,87749,87757,87761],{"__ignoreMap":23},[28,86534,86535,86537,86539,86541],{"class":30,"line":31},[28,86536,51774],{"class":34},[28,86538,51778],{"class":51777},[28,86540,51781],{"class":2453},[28,86542,51784],{"class":34},[28,86544,86545,86547,86549,86551,86553,86555],{"class":30,"line":77},[28,86546,1529],{"class":34},[28,86548,51112],{"class":51777},[28,86550,51793],{"class":2453},[28,86552,83],{"class":34},[28,86554,51798],{"class":735},[28,86556,51784],{"class":34},[28,86558,86559],{"class":30,"line":114},[28,86560,2890],{"emptyLinePlaceholder":562},[28,86562,86563,86565,86567],{"class":30,"line":128},[28,86564,1529],{"class":34},[28,86566,51811],{"class":51777},[28,86568,51784],{"class":34},[28,86570,86571,86573,86575,86577,86579,86581],{"class":30,"line":393},[28,86572,52621],{"class":34},[28,86574,51821],{"class":51777},[28,86576,51824],{"class":2453},[28,86578,83],{"class":34},[28,86580,51829],{"class":735},[28,86582,51784],{"class":34},[28,86584,86585,86587,86589,86591,86593,86595,86597,86599,86601],{"class":30,"line":409},[28,86586,52621],{"class":34},[28,86588,51821],{"class":51777},[28,86590,15406],{"class":2453},[28,86592,83],{"class":34},[28,86594,51868],{"class":735},[28,86596,51848],{"class":2453},[28,86598,83],{"class":34},[28,86600,51875],{"class":735},[28,86602,51784],{"class":34},[28,86604,86605,86607,86609,86611,86613],{"class":30,"line":1711},[28,86606,52621],{"class":34},[28,86608,51884],{"class":51777},[28,86610,51887],{"class":34},[28,86612,51884],{"class":51777},[28,86614,51784],{"class":34},[28,86616,86617,86619,86621],{"class":30,"line":1802},[28,86618,52621],{"class":34},[28,86620,547],{"class":51777},[28,86622,51784],{"class":34},[28,86624,86625,86628],{"class":30,"line":1808},[28,86626,86627],{"class":2453},"    .modal",[28,86629,16058],{"class":34},[28,86631,86632,86634,86636,86638,86640],{"class":30,"line":1820},[28,86633,55248],{"class":38},[28,86635,51914],{"class":34},[28,86637,4461],{"class":38},[28,86639,51969],{"class":42},[28,86641,1781],{"class":34},[28,86643,86644,86647,86649,86651,86653],{"class":30,"line":2102},[28,86645,86646],{"class":38},"      min-height",[28,86648,51914],{"class":34},[28,86650,938],{"class":38},[28,86652,51969],{"class":42},[28,86654,1781],{"class":34},[28,86656,86657,86659,86661,86663,86665,86667,86669,86671,86673,86675,86677,86679,86681,86683,86685,86688],{"class":30,"line":2107},[28,86658,79227],{"class":38},[28,86660,51914],{"class":34},[28,86662,822],{"class":38},[28,86664,4581],{"class":38},[28,86666,2528],{"class":38},[28,86668,51969],{"class":42},[28,86670,79244],{"class":38},[28,86672,367],{"class":34},[28,86674,822],{"class":38},[28,86676,12921],{"class":34},[28,86678,822],{"class":38},[28,86680,12921],{"class":34},[28,86682,822],{"class":38},[28,86684,12921],{"class":34},[28,86686,86687],{"class":38},"0.1",[28,86689,3209],{"class":34},[28,86691,86692,86694,86696,86698,86700],{"class":30,"line":2113},[28,86693,55611],{"class":38},[28,86695,51914],{"class":34},[28,86697,103],{"class":38},[28,86699,51969],{"class":42},[28,86701,1781],{"class":34},[28,86703,86704,86706,86708,86711],{"class":30,"line":2118},[28,86705,55236],{"class":38},[28,86707,51914],{"class":34},[28,86709,86710],{"class":38},"fixed",[28,86712,1781],{"class":34},[28,86714,86715,86718,86720,86723],{"class":30,"line":2132},[28,86716,86717],{"class":38},"      z-index",[28,86719,51914],{"class":34},[28,86721,86722],{"class":38},"999",[28,86724,1781],{"class":34},[28,86726,86727,86729,86731,86733,86735],{"class":30,"line":2137},[28,86728,55315],{"class":38},[28,86730,51914],{"class":34},[28,86732,1276],{"class":38},[28,86734,954],{"class":42},[28,86736,1781],{"class":34},[28,86738,86739,86741,86743,86745,86747],{"class":30,"line":2143},[28,86740,55424],{"class":38},[28,86742,51914],{"class":34},[28,86744,1276],{"class":38},[28,86746,954],{"class":42},[28,86748,1781],{"class":34},[28,86750,86751,86753,86755,86757,86759,86762,86764,86766,86768,86770,86772,86774],{"class":30,"line":2164},[28,86752,79268],{"class":38},[28,86754,51914],{"class":34},[28,86756,79273],{"class":38},[28,86758,367],{"class":34},[28,86760,86761],{"class":38},"-50",[28,86763,954],{"class":42},[28,86765,12921],{"class":34},[28,86767,86761],{"class":38},[28,86769,954],{"class":42},[28,86771,12921],{"class":34},[28,86773,822],{"class":38},[28,86775,3209],{"class":34},[28,86777,86778,86780,86782,86784],{"class":30,"line":2169},[28,86779,55361],{"class":38},[28,86781,51914],{"class":34},[28,86783,61319],{"class":38},[28,86785,1781],{"class":34},[28,86787,86788],{"class":30,"line":2183},[28,86789,2677],{"class":34},[28,86791,86792],{"class":30,"line":2188},[28,86793,2890],{"emptyLinePlaceholder":562},[28,86795,86796,86798,86801],{"class":30,"line":2217},[28,86797,86627],{"class":2453},[28,86799,86800],{"class":2453}," .header",[28,86802,16058],{"class":34},[28,86804,86805,86807,86809,86811,86813],{"class":30,"line":2222},[28,86806,57836],{"class":38},[28,86808,51914],{"class":34},[28,86810,1026],{"class":38},[28,86812,51969],{"class":42},[28,86814,1781],{"class":34},[28,86816,86817,86819,86821,86823,86825,86827],{"class":30,"line":2239},[28,86818,55172],{"class":38},[28,86820,51914],{"class":34},[28,86822,822],{"class":38},[28,86824,2528],{"class":38},[28,86826,51969],{"class":42},[28,86828,1781],{"class":34},[28,86830,86831,86833,86835,86837],{"class":30,"line":2244},[28,86832,55236],{"class":38},[28,86834,51914],{"class":34},[28,86836,55241],{"class":38},[28,86838,1781],{"class":34},[28,86840,86841,86843,86845,86847,86849],{"class":30,"line":2249},[28,86842,55399],{"class":38},[28,86844,51914],{"class":34},[28,86846,1320],{"class":38},[28,86848,51969],{"class":42},[28,86850,1781],{"class":34},[28,86852,86853],{"class":30,"line":2254},[28,86854,2677],{"class":34},[28,86856,86857],{"class":30,"line":2268},[28,86858,2890],{"emptyLinePlaceholder":562},[28,86860,86861,86863,86865,86867],{"class":30,"line":2273},[28,86862,86627],{"class":2453},[28,86864,86800],{"class":2453},[28,86866,3521],{"class":51777},[28,86868,16058],{"class":34},[28,86870,86871,86874,86876,86878],{"class":30,"line":3067},[28,86872,86873],{"class":38},"      font-style",[28,86875,51914],{"class":34},[28,86877,64318],{"class":38},[28,86879,1781],{"class":34},[28,86881,86882,86884,86886,86888],{"class":30,"line":3081},[28,86883,57893],{"class":38},[28,86885,51914],{"class":34},[28,86887,62547],{"class":38},[28,86889,1781],{"class":34},[28,86891,86892,86894,86896,86898],{"class":30,"line":3089},[28,86893,55236],{"class":38},[28,86895,51914],{"class":34},[28,86897,55308],{"class":38},[28,86899,1781],{"class":34},[28,86901,86902,86905,86907,86909,86911],{"class":30,"line":3094},[28,86903,86904],{"class":38},"      right",[28,86906,51914],{"class":34},[28,86908,1196],{"class":38},[28,86910,51969],{"class":42},[28,86912,1781],{"class":34},[28,86914,86915,86917,86919,86922,86924],{"class":30,"line":3100},[28,86916,55424],{"class":38},[28,86918,51914],{"class":34},[28,86920,86921],{"class":38},"-2",[28,86923,51969],{"class":42},[28,86925,1781],{"class":34},[28,86927,86928,86930,86932,86934],{"class":30,"line":3106},[28,86929,62502],{"class":38},[28,86931,51914],{"class":34},[28,86933,62507],{"class":38},[28,86935,1781],{"class":34},[28,86937,86938],{"class":30,"line":3111},[28,86939,2677],{"class":34},[28,86941,86942],{"class":30,"line":8436},[28,86943,2890],{"emptyLinePlaceholder":562},[28,86945,86946,86948,86951],{"class":30,"line":8460},[28,86947,86627],{"class":2453},[28,86949,86950],{"class":2453}," .body",[28,86952,16058],{"class":34},[28,86954,86955,86957,86959,86961],{"class":30,"line":8465},[28,86956,57763],{"class":38},[28,86958,51914],{"class":34},[28,86960,52069],{"class":38},[28,86962,1781],{"class":34},[28,86964,86965,86967,86969,86971,86973],{"class":30,"line":8471},[28,86966,55172],{"class":38},[28,86968,51914],{"class":34},[28,86970,225],{"class":38},[28,86972,51969],{"class":42},[28,86974,1781],{"class":34},[28,86976,86977],{"class":30,"line":8498},[28,86978,2677],{"class":34},[28,86980,86981],{"class":30,"line":8503},[28,86982,2890],{"emptyLinePlaceholder":562},[28,86984,86985,86987,86990],{"class":30,"line":8509},[28,86986,86627],{"class":2453},[28,86988,86989],{"class":2453}," .footer",[28,86991,16058],{"class":34},[28,86993,86994,86996,86998,87000],{"class":30,"line":8521},[28,86995,55486],{"class":38},[28,86997,51914],{"class":34},[28,86999,51954],{"class":38},[28,87001,1781],{"class":34},[28,87003,87004,87006,87008,87010],{"class":30,"line":8533},[28,87005,55497],{"class":38},[28,87007,51914],{"class":34},[28,87009,52057],{"class":38},[28,87011,1781],{"class":34},[28,87013,87014,87016,87018,87020,87022],{"class":30,"line":8545},[28,87015,55172],{"class":38},[28,87017,51914],{"class":34},[28,87019,225],{"class":38},[28,87021,51969],{"class":42},[28,87023,1781],{"class":34},[28,87025,87026],{"class":30,"line":10202},[28,87027,2677],{"class":34},[28,87029,87030],{"class":30,"line":10227},[28,87031,2890],{"emptyLinePlaceholder":562},[28,87033,87034,87036,87038,87040],{"class":30,"line":10250},[28,87035,86627],{"class":2453},[28,87037,86989],{"class":2453},[28,87039,1889],{"class":51777},[28,87041,16058],{"class":34},[28,87043,87044,87046,87048,87050,87052,87054,87056],{"class":30,"line":10274},[28,87045,55172],{"class":38},[28,87047,51914],{"class":34},[28,87049,98],{"class":38},[28,87051,51969],{"class":42},[28,87053,2573],{"class":38},[28,87055,51969],{"class":42},[28,87057,1781],{"class":34},[28,87059,87060,87062,87064,87067],{"class":30,"line":10279},[28,87061,62198],{"class":38},[28,87063,51914],{"class":34},[28,87065,87066],{"class":38},"#ccc",[28,87068,1781],{"class":34},[28,87070,87071,87073,87075,87077],{"class":30,"line":10284},[28,87072,64447],{"class":38},[28,87074,51914],{"class":34},[28,87076,55214],{"class":38},[28,87078,1781],{"class":34},[28,87080,87081,87083,87085,87087],{"class":30,"line":10289},[28,87082,57893],{"class":38},[28,87084,51914],{"class":34},[28,87086,61319],{"class":38},[28,87088,1781],{"class":34},[28,87090,87091,87093,87095,87097,87099],{"class":30,"line":10298},[28,87092,55611],{"class":38},[28,87094,51914],{"class":34},[28,87096,93],{"class":38},[28,87098,51969],{"class":42},[28,87100,1781],{"class":34},[28,87102,87103,87105,87107,87109,87111],{"class":30,"line":10303},[28,87104,62227],{"class":38},[28,87106,51914],{"class":34},[28,87108,225],{"class":38},[28,87110,51969],{"class":42},[28,87112,1781],{"class":34},[28,87114,87115,87117,87119,87121,87123],{"class":30,"line":10309},[28,87116,55399],{"class":38},[28,87118,51914],{"class":34},[28,87120,1170],{"class":38},[28,87122,51969],{"class":42},[28,87124,1781],{"class":34},[28,87126,87127],{"class":30,"line":10330},[28,87128,2677],{"class":34},[28,87130,87131],{"class":30,"line":10336},[28,87132,2890],{"emptyLinePlaceholder":562},[28,87134,87135,87137,87139,87141,87144],{"class":30,"line":10350},[28,87136,86627],{"class":2453},[28,87138,86989],{"class":2453},[28,87140,1889],{"class":51777},[28,87142,87143],{"class":2453},".submit",[28,87145,16058],{"class":34},[28,87147,87148,87150,87152,87155],{"class":30,"line":10356},[28,87149,55361],{"class":38},[28,87151,51914],{"class":34},[28,87153,87154],{"class":38},"#369",[28,87156,1781],{"class":34},[28,87158,87159],{"class":30,"line":10383},[28,87160,2677],{"class":34},[28,87162,87163,87165,87167],{"class":30,"line":10392},[28,87164,52894],{"class":34},[28,87166,547],{"class":51777},[28,87168,51784],{"class":34},[28,87170,87171,87173,87175],{"class":30,"line":10398},[28,87172,52262],{"class":34},[28,87174,51811],{"class":51777},[28,87176,51784],{"class":34},[28,87178,87179],{"class":30,"line":10406},[28,87180,2890],{"emptyLinePlaceholder":562},[28,87182,87183,87185,87187],{"class":30,"line":10411},[28,87184,1529],{"class":34},[28,87186,52277],{"class":51777},[28,87188,51784],{"class":34},[28,87190,87191,87193,87195,87197,87199,87202,87205,87207],{"class":30,"line":17090},[28,87192,52621],{"class":34},[28,87194,54364],{"class":51777},[28,87196,15445],{"class":2453},[28,87198,83],{"class":34},[28,87200,87201],{"class":735},"\"delete\"",[28,87203,87204],{"class":34},">删除\u003C\u002F",[28,87206,54364],{"class":51777},[28,87208,51784],{"class":34},[28,87210,87211,87213,87215,87217,87219,87222,87225,87227],{"class":30,"line":17096},[28,87212,52621],{"class":34},[28,87214,54364],{"class":51777},[28,87216,15445],{"class":2453},[28,87218,83],{"class":34},[28,87220,87221],{"class":735},"\"login\"",[28,87223,87224],{"class":34},">登录\u003C\u002F",[28,87226,54364],{"class":51777},[28,87228,51784],{"class":34},[28,87230,87231,87233,87235],{"class":30,"line":17119},[28,87232,52621],{"class":34},[28,87234,52290],{"class":51777},[28,87236,51784],{"class":34},[28,87238,87239],{"class":30,"line":17125},[28,87240,87241],{"class":73},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[28,87243,87244,87246,87249,87251,87253,87255,87257,87259,87262,87264,87266],{"class":30,"line":17148},[28,87245,70561],{"class":42},[28,87247,87248],{"class":2453}," Modal",[28,87250,367],{"class":34},[28,87252,51884],{"class":5704},[28,87254,14050],{"class":42},[28,87256,70407],{"class":735},[28,87258,12921],{"class":34},[28,87260,87261],{"class":5704},"message",[28,87263,14050],{"class":42},[28,87265,70407],{"class":735},[28,87267,12928],{"class":34},[28,87269,87270],{"class":30,"line":17162},[28,87271,87272],{"class":73},"      \u002F\u002F 创建Model 模态框盒子\n",[28,87274,87275],{"class":30,"line":17182},[28,87276,87277],{"class":73},"      \u002F\u002F 1.1 创建div标签\n",[28,87279,87280,87282,87285,87287,87289,87291,87293,87295],{"class":30,"line":17188},[28,87281,70528],{"class":38},[28,87283,87284],{"class":34},".modalBox ",[28,87286,83],{"class":42},[28,87288,54873],{"class":34},[28,87290,70628],{"class":2453},[28,87292,367],{"class":34},[28,87294,82408],{"class":735},[28,87296,228],{"class":34},[28,87298,87299],{"class":30,"line":17199},[28,87300,87301],{"class":73},"      \u002F\u002F 1.2 给div 添加类名为model\n",[28,87303,87304,87306,87309,87311],{"class":30,"line":17222},[28,87305,70528],{"class":38},[28,87307,87308],{"class":34},".modalBox.className ",[28,87310,83],{"class":42},[28,87312,87313],{"class":735}," 'modal'\n",[28,87315,87316],{"class":30,"line":17244},[28,87317,87318],{"class":73},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[28,87320,87321,87323,87326,87328],{"class":30,"line":17249},[28,87322,70528],{"class":38},[28,87324,87325],{"class":34},".modalBox.innerHTML ",[28,87327,83],{"class":42},[28,87329,70645],{"class":735},[28,87331,87332,87335,87337],{"class":30,"line":17255},[28,87333,87334],{"class":735},"        \u003Cdiv class=\"header\">${",[28,87336,51884],{"class":34},[28,87338,87339],{"class":735},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[28,87341,87342,87345,87347],{"class":30,"line":17269},[28,87343,87344],{"class":735},"        \u003Cdiv class=\"body\">${",[28,87346,87261],{"class":34},[28,87348,87349],{"class":735},"}\u003C\u002Fdiv>\n",[28,87351,87352],{"class":30,"line":17282},[28,87353,87354],{"class":735},"      `\n",[28,87356,87357],{"class":30,"line":17287},[28,87358,87359],{"class":73},"      \u002F\u002F console.log(this.modalBox)\n",[28,87361,87362],{"class":30,"line":17301},[28,87363,2677],{"class":34},[28,87365,87366],{"class":30,"line":17306},[28,87367,87368],{"class":73},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[28,87370,87371],{"class":30,"line":17312},[28,87372,87373],{"class":73},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[28,87375,87376],{"class":30,"line":17317},[28,87377,87378],{"class":73},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[28,87380,87381,87384,87386,87388,87390,87393,87395,87397],{"class":30,"line":17331},[28,87382,87383],{"class":38},"    Modal",[28,87385,1179],{"class":34},[28,87387,86056],{"class":38},[28,87389,1179],{"class":34},[28,87391,87392],{"class":2453},"open",[28,87394,14050],{"class":42},[28,87396,59395],{"class":42},[28,87398,54929],{"class":34},[28,87400,87401],{"class":30,"line":17336},[28,87402,87403],{"class":73},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[28,87405,87406,87408,87411,87413,87415,87417,87419,87422],{"class":30,"line":17341},[28,87407,58705],{"class":42},[28,87409,87410],{"class":38}," box",[28,87412,14050],{"class":42},[28,87414,54873],{"class":34},[28,87416,54876],{"class":2453},[28,87418,367],{"class":34},[28,87420,87421],{"class":735},"'.modal'",[28,87423,228],{"class":34},[28,87425,87426],{"class":30,"line":17355},[28,87427,87428],{"class":73},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[28,87430,87431,87434,87436,87439,87441],{"class":30,"line":17367},[28,87432,87433],{"class":34},"      box ",[28,87435,2205],{"class":42},[28,87437,87438],{"class":34}," box.",[28,87440,57483],{"class":2453},[28,87442,2466],{"class":34},[28,87444,87445],{"class":30,"line":17372},[28,87446,87447],{"class":73},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[28,87449,87450],{"class":30,"line":17385},[28,87451,87452],{"class":73},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[28,87454,87455],{"class":30,"line":17390},[28,87456,87457],{"class":73},"      \u002F\u002F append可以增加对象\n",[28,87459,87460,87463,87466,87468,87471],{"class":30,"line":17395},[28,87461,87462],{"class":34},"      document.body.",[28,87464,87465],{"class":2453},"append",[28,87467,367],{"class":34},[28,87469,87470],{"class":38},"this",[28,87472,87473],{"class":34},".modalBox)\n",[28,87475,87476],{"class":30,"line":17400},[28,87477,2890],{"emptyLinePlaceholder":562},[28,87479,87480],{"class":30,"line":17413},[28,87481,87482],{"class":73},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[28,87484,87485,87487,87490,87492,87494,87497,87499,87501,87503,87505,87508,87510],{"class":30,"line":17418},[28,87486,70528],{"class":38},[28,87488,87489],{"class":34},".modalBox.",[28,87491,54876],{"class":2453},[28,87493,367],{"class":34},[28,87495,87496],{"class":735},"'i'",[28,87498,31307],{"class":34},[28,87500,58290],{"class":2453},[28,87502,367],{"class":34},[28,87504,58295],{"class":735},[28,87506,87507],{"class":34},", () ",[28,87509,85199],{"class":42},[28,87511,16058],{"class":34},[28,87513,87514],{"class":30,"line":33111},[28,87515,87516],{"class":73},"        \u002F\u002F 这个地方需要用到箭头函数\n",[28,87518,87519],{"class":30,"line":33117},[28,87520,87521],{"class":73},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[28,87523,87524],{"class":30,"line":33123},[28,87525,87526],{"class":73},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[28,87528,87529,87531,87533,87536],{"class":30,"line":33129},[28,87530,65203],{"class":38},[28,87532,1179],{"class":34},[28,87534,87535],{"class":2453},"close",[28,87537,2466],{"class":34},[28,87539,87540],{"class":30,"line":33135},[28,87541,65292],{"class":34},[28,87543,87544],{"class":30,"line":33146},[28,87545,2677],{"class":34},[28,87547,87548],{"class":30,"line":33152},[28,87549,2890],{"emptyLinePlaceholder":562},[28,87551,87552],{"class":30,"line":33172},[28,87553,87554],{"class":73},"    \u002F\u002F 测试一下 点击 删除按钮\n",[28,87556,87557,87559,87561,87563,87566,87568,87570,87572,87574,87576,87578],{"class":30,"line":33178},[28,87558,52884],{"class":34},[28,87560,54876],{"class":2453},[28,87562,367],{"class":34},[28,87564,87565],{"class":735},"'#delete'",[28,87567,31307],{"class":34},[28,87569,58290],{"class":2453},[28,87571,367],{"class":34},[28,87573,58295],{"class":735},[28,87575,87507],{"class":34},[28,87577,85199],{"class":42},[28,87579,16058],{"class":34},[28,87581,87582],{"class":30,"line":33189},[28,87583,87584],{"class":73},"      \u002F\u002F 先调用Model构造函数\n",[28,87586,87587,87589,87592,87594,87596,87598,87600,87603,87605,87608],{"class":30,"line":33195},[28,87588,58705],{"class":42},[28,87590,87591],{"class":38}," del",[28,87593,14050],{"class":42},[28,87595,12064],{"class":42},[28,87597,87248],{"class":2453},[28,87599,367],{"class":34},[28,87601,87602],{"class":735},"'温馨的提示'",[28,87604,12921],{"class":34},[28,87606,87607],{"class":735},"'您没有删除权限操作'",[28,87609,228],{"class":34},[28,87611,87612],{"class":30,"line":33201},[28,87613,87614],{"class":73},"      \u002F\u002F 实例对象调用open方法\n",[28,87616,87617,87620,87622],{"class":30,"line":33207},[28,87618,87619],{"class":34},"      del.",[28,87621,87392],{"class":2453},[28,87623,2466],{"class":34},[28,87625,87626],{"class":30,"line":33213},[28,87627,33938],{"class":34},[28,87629,87630],{"class":30,"line":33219},[28,87631,87632],{"class":73},"    \u002F\u002F 测试一下 点击 登录按钮\n",[28,87634,87635,87637,87639,87641,87644,87646,87648,87650,87652,87654,87656],{"class":30,"line":33225},[28,87636,52884],{"class":34},[28,87638,54876],{"class":2453},[28,87640,367],{"class":34},[28,87642,87643],{"class":735},"'#login'",[28,87645,31307],{"class":34},[28,87647,58290],{"class":2453},[28,87649,367],{"class":34},[28,87651,58295],{"class":735},[28,87653,87507],{"class":34},[28,87655,85199],{"class":42},[28,87657,16058],{"class":34},[28,87659,87660],{"class":30,"line":33231},[28,87661,87584],{"class":73},[28,87663,87664,87666,87669,87671,87673,87675,87677,87680,87682,87685],{"class":30,"line":33251},[28,87665,58705],{"class":42},[28,87667,87668],{"class":38}," log",[28,87670,14050],{"class":42},[28,87672,12064],{"class":42},[28,87674,87248],{"class":2453},[28,87676,367],{"class":34},[28,87678,87679],{"class":735},"'友情提示'",[28,87681,12921],{"class":34},[28,87683,87684],{"class":735},"'您还没有登录呢'",[28,87686,228],{"class":34},[28,87688,87689],{"class":30,"line":33257},[28,87690,87614],{"class":73},[28,87692,87693,87696,87698],{"class":30,"line":33273},[28,87694,87695],{"class":34},"      log.",[28,87697,87392],{"class":2453},[28,87699,2466],{"class":34},[28,87701,87702],{"class":30,"line":33279},[28,87703,33938],{"class":34},[28,87705,87706],{"class":30,"line":33293},[28,87707,87708],{"class":73},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[28,87710,87711,87713,87715,87717,87719,87721,87723,87725],{"class":30,"line":33299},[28,87712,87383],{"class":38},[28,87714,1179],{"class":34},[28,87716,86056],{"class":38},[28,87718,1179],{"class":34},[28,87720,87535],{"class":2453},[28,87722,14050],{"class":42},[28,87724,59395],{"class":42},[28,87726,54929],{"class":34},[28,87728,87729,87731,87733,87735],{"class":30,"line":33314},[28,87730,70528],{"class":38},[28,87732,87489],{"class":34},[28,87734,57483],{"class":2453},[28,87736,2466],{"class":34},[28,87738,87739],{"class":30,"line":33320},[28,87740,2677],{"class":34},[28,87742,87743,87745,87747],{"class":30,"line":33329},[28,87744,52894],{"class":34},[28,87746,52290],{"class":51777},[28,87748,51784],{"class":34},[28,87750,87751,87753,87755],{"class":30,"line":33335},[28,87752,52262],{"class":34},[28,87754,52277],{"class":51777},[28,87756,51784],{"class":34},[28,87758,87759],{"class":30,"line":33344},[28,87760,2890],{"emptyLinePlaceholder":562},[28,87762,87763,87765,87767],{"class":30,"line":33350},[28,87764,52262],{"class":34},[28,87766,51112],{"class":51777},[28,87768,51784],{"class":34},[14,87770,87771],{},[420,87772],{"alt":23,"src":87773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[60,87775,87777],{"id":87776},"_414-深浅拷贝","4.14 深浅拷贝",[605,87779,87781],{"id":87780},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87783,87784],{},[420,87785],{"alt":23,"src":87786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87788,87789],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87791,87792],{},[420,87793],{"alt":23,"src":87794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87796,87797],{},[420,87798],{"alt":23,"src":87799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87801,87802],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87804,87805],{},[420,87806],{"alt":23,"src":87807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87809,11818],{},[14,87811,87812],{},[420,87813],{"alt":23,"src":87814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[605,87816,87818],{"id":87817},"_4142-深拷贝","4.14.2 深拷贝",[14,87820,87821],{},"深拷贝：拷贝的是对象，不是地址",[14,87823,87824],{},"常用的三种方法：",[588,87826,87827,87830,87833],{},[591,87828,87829],{},"通过递归实现深拷贝",[591,87831,87832],{},"lodash\u002FcloneDeep",[591,87834,87835],{},"通过JSON.stringify()实现",[22484,87837,87839],{"id":87838},"_41421-递归函数","4.14.2.1 递归函数",[14,87841,87842],{},[420,87843],{"alt":23,"src":87844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[588,87846,87847],{},[591,87848,87849],{},"死递归占溢出：",[18,87851,87853],{"className":53544,"code":87852,"language":53546,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,87854,87855,87863,87871,87875,87880,87884,87889,87897],{"__ignoreMap":23},[28,87856,87857,87859,87861],{"class":30,"line":31},[28,87858,1529],{"class":34},[28,87860,52277],{"class":51777},[28,87862,51784],{"class":34},[28,87864,87865,87867,87869],{"class":30,"line":77},[28,87866,52621],{"class":34},[28,87868,52290],{"class":51777},[28,87870,51784],{"class":34},[28,87872,87873],{"class":30,"line":114},[28,87874,77620],{"class":34},[28,87876,87877],{"class":30,"line":128},[28,87878,87879],{"class":34},"      fn()\n",[28,87881,87882],{"class":30,"line":393},[28,87883,2677],{"class":34},[28,87885,87886],{"class":30,"line":409},[28,87887,87888],{"class":34},"    fn()\n",[28,87890,87891,87893,87895],{"class":30,"line":1711},[28,87892,52894],{"class":34},[28,87894,52290],{"class":51777},[28,87896,51784],{"class":34},[28,87898,87899,87901,87903],{"class":30,"line":1802},[28,87900,52262],{"class":34},[28,87902,52277],{"class":51777},[28,87904,51784],{"class":34},[588,87906,87907],{"start":77},[591,87908,87909],{},"递归函数要加判断条件：",[14,87911,87912],{},[420,87913],{"alt":23,"src":87914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[588,87916,87917],{"start":114},[591,87918,87919],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[18,87921,87923],{"className":51110,"code":87922,"language":51112,"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,87924,87925,87935,87949,87953,87961,87975,87995,88007,88015,88019,88027,88039,88047,88055,88080,88092,88096,88103,88111,88119,88123],{"__ignoreMap":23},[28,87926,87927,87929,87931,87933],{"class":30,"line":31},[28,87928,51774],{"class":34},[28,87930,51778],{"class":51777},[28,87932,51781],{"class":2453},[28,87934,51784],{"class":34},[28,87936,87937,87939,87941,87943,87945,87947],{"class":30,"line":77},[28,87938,1529],{"class":34},[28,87940,51112],{"class":51777},[28,87942,51793],{"class":2453},[28,87944,83],{"class":34},[28,87946,51798],{"class":735},[28,87948,51784],{"class":34},[28,87950,87951],{"class":30,"line":114},[28,87952,2890],{"emptyLinePlaceholder":562},[28,87954,87955,87957,87959],{"class":30,"line":128},[28,87956,1529],{"class":34},[28,87958,51811],{"class":51777},[28,87960,51784],{"class":34},[28,87962,87963,87965,87967,87969,87971,87973],{"class":30,"line":393},[28,87964,52621],{"class":34},[28,87966,51821],{"class":51777},[28,87968,51824],{"class":2453},[28,87970,83],{"class":34},[28,87972,51829],{"class":735},[28,87974,51784],{"class":34},[28,87976,87977,87979,87981,87983,87985,87987,87989,87991,87993],{"class":30,"line":409},[28,87978,52621],{"class":34},[28,87980,51821],{"class":51777},[28,87982,15406],{"class":2453},[28,87984,83],{"class":34},[28,87986,51868],{"class":735},[28,87988,51848],{"class":2453},[28,87990,83],{"class":34},[28,87992,51875],{"class":735},[28,87994,51784],{"class":34},[28,87996,87997,87999,88001,88003,88005],{"class":30,"line":1711},[28,87998,52621],{"class":34},[28,88000,51884],{"class":51777},[28,88002,51887],{"class":34},[28,88004,51884],{"class":51777},[28,88006,51784],{"class":34},[28,88008,88009,88011,88013],{"class":30,"line":1802},[28,88010,52262],{"class":34},[28,88012,51811],{"class":51777},[28,88014,51784],{"class":34},[28,88016,88017],{"class":30,"line":1808},[28,88018,2890],{"emptyLinePlaceholder":562},[28,88020,88021,88023,88025],{"class":30,"line":1820},[28,88022,1529],{"class":34},[28,88024,52277],{"class":51777},[28,88026,51784],{"class":34},[28,88028,88029,88031,88033,88035,88037],{"class":30,"line":2102},[28,88030,52621],{"class":34},[28,88032,52088],{"class":51777},[28,88034,55791],{"class":34},[28,88036,52088],{"class":51777},[28,88038,51784],{"class":34},[28,88040,88041,88043,88045],{"class":30,"line":2107},[28,88042,52621],{"class":34},[28,88044,52290],{"class":51777},[28,88046,51784],{"class":34},[28,88048,88049,88051,88053],{"class":30,"line":2113},[28,88050,70561],{"class":42},[28,88052,74250],{"class":2453},[28,88054,11339],{"class":34},[28,88056,88057,88059,88061,88063,88065,88067,88069,88071,88073,88075,88078],{"class":30,"line":2118},[28,88058,56248],{"class":34},[28,88060,54876],{"class":2453},[28,88062,367],{"class":34},[28,88064,82408],{"class":735},[28,88066,74726],{"class":34},[28,88068,83],{"class":42},[28,88070,12064],{"class":42},[28,88072,74266],{"class":2453},[28,88074,17747],{"class":34},[28,88076,88077],{"class":2453},"toLocaleString",[28,88079,2466],{"class":34},[28,88081,88082,88085,88088,88090],{"class":30,"line":2132},[28,88083,88084],{"class":2453},"      setTimeout",[28,88086,88087],{"class":34},"(getTime, ",[28,88089,6898],{"class":38},[28,88091,228],{"class":34},[28,88093,88094],{"class":30,"line":2137},[28,88095,2677],{"class":34},[28,88097,88098,88101],{"class":30,"line":2143},[28,88099,88100],{"class":2453},"    getTime",[28,88102,2466],{"class":34},[28,88104,88105,88107,88109],{"class":30,"line":2164},[28,88106,52894],{"class":34},[28,88108,52290],{"class":51777},[28,88110,51784],{"class":34},[28,88112,88113,88115,88117],{"class":30,"line":2169},[28,88114,52262],{"class":34},[28,88116,52277],{"class":51777},[28,88118,51784],{"class":34},[28,88120,88121],{"class":30,"line":2183},[28,88122,2890],{"emptyLinePlaceholder":562},[28,88124,88125,88127,88129],{"class":30,"line":2188},[28,88126,52262],{"class":34},[28,88128,51112],{"class":51777},[28,88130,51784],{"class":34},[14,88132,88133],{},[420,88134],{"alt":23,"src":88135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[588,88137,88138],{"start":128},[591,88139,87829],{},[14,88141,88142],{},[420,88143],{"alt":23,"src":88144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88146,88147],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88149,39666],{},[14,88151,88152],{},"这个是简易版的递归函数深拷贝",[14,88154,88155],{},"一定要注意先数组再对象，因为万物皆可对象",[18,88157,88159],{"className":51110,"code":88158,"language":51112,"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,88160,88161,88171,88185,88189,88197,88211,88231,88243,88251,88255,88263,88271,88281,88290,88298,88314,88318,88326,88330,88334,88346,88351,88370,88386,88391,88396,88401,88416,88421,88426,88435,88443,88460,88468,88474,88482,88487,88492,88501,88505,88509,88513,88524,88533,88543,88557,88567,88575,88583,88591,88595],{"__ignoreMap":23},[28,88162,88163,88165,88167,88169],{"class":30,"line":31},[28,88164,51774],{"class":34},[28,88166,51778],{"class":51777},[28,88168,51781],{"class":2453},[28,88170,51784],{"class":34},[28,88172,88173,88175,88177,88179,88181,88183],{"class":30,"line":77},[28,88174,1529],{"class":34},[28,88176,51112],{"class":51777},[28,88178,51793],{"class":2453},[28,88180,83],{"class":34},[28,88182,51798],{"class":735},[28,88184,51784],{"class":34},[28,88186,88187],{"class":30,"line":114},[28,88188,2890],{"emptyLinePlaceholder":562},[28,88190,88191,88193,88195],{"class":30,"line":128},[28,88192,1529],{"class":34},[28,88194,51811],{"class":51777},[28,88196,51784],{"class":34},[28,88198,88199,88201,88203,88205,88207,88209],{"class":30,"line":393},[28,88200,52621],{"class":34},[28,88202,51821],{"class":51777},[28,88204,51824],{"class":2453},[28,88206,83],{"class":34},[28,88208,51829],{"class":735},[28,88210,51784],{"class":34},[28,88212,88213,88215,88217,88219,88221,88223,88225,88227,88229],{"class":30,"line":409},[28,88214,52621],{"class":34},[28,88216,51821],{"class":51777},[28,88218,15406],{"class":2453},[28,88220,83],{"class":34},[28,88222,51868],{"class":735},[28,88224,51848],{"class":2453},[28,88226,83],{"class":34},[28,88228,51875],{"class":735},[28,88230,51784],{"class":34},[28,88232,88233,88235,88237,88239,88241],{"class":30,"line":1711},[28,88234,52621],{"class":34},[28,88236,51884],{"class":51777},[28,88238,51887],{"class":34},[28,88240,51884],{"class":51777},[28,88242,51784],{"class":34},[28,88244,88245,88247,88249],{"class":30,"line":1802},[28,88246,52262],{"class":34},[28,88248,51811],{"class":51777},[28,88250,51784],{"class":34},[28,88252,88253],{"class":30,"line":1808},[28,88254,2890],{"emptyLinePlaceholder":562},[28,88256,88257,88259,88261],{"class":30,"line":1820},[28,88258,1529],{"class":34},[28,88260,52277],{"class":51777},[28,88262,51784],{"class":34},[28,88264,88265,88267,88269],{"class":30,"line":2102},[28,88266,52621],{"class":34},[28,88268,52290],{"class":51777},[28,88270,51784],{"class":34},[28,88272,88273,88275,88277,88279],{"class":30,"line":2107},[28,88274,11707],{"class":42},[28,88276,70448],{"class":38},[28,88278,14050],{"class":42},[28,88280,16058],{"class":34},[28,88282,88283,88285,88288],{"class":30,"line":2113},[28,88284,72093],{"class":34},[28,88286,88287],{"class":735},"'pink'",[28,88289,31945],{"class":34},[28,88291,88292,88294,88296],{"class":30,"line":2118},[28,88293,72103],{"class":34},[28,88295,1270],{"class":38},[28,88297,31945],{"class":34},[28,88299,88300,88303,88306,88308,88311],{"class":30,"line":2132},[28,88301,88302],{"class":34},"      hobby: [",[28,88304,88305],{"class":735},"'乒乓球'",[28,88307,12921],{"class":34},[28,88309,88310],{"class":735},"'足球'",[28,88312,88313],{"class":34},"],\n",[28,88315,88316],{"class":30,"line":2137},[28,88317,78349],{"class":34},[28,88319,88320,88323],{"class":30,"line":2143},[28,88321,88322],{"class":34},"        baby: ",[28,88324,88325],{"class":735},"'小pink'\n",[28,88327,88328],{"class":30,"line":2164},[28,88329,52875],{"class":34},[28,88331,88332],{"class":30,"line":2169},[28,88333,2677],{"class":34},[28,88335,88336,88338,88341,88343],{"class":30,"line":2183},[28,88337,11707],{"class":42},[28,88339,88340],{"class":38}," o",[28,88342,14050],{"class":42},[28,88344,88345],{"class":34}," {}\n",[28,88347,88348],{"class":30,"line":2188},[28,88349,88350],{"class":73},"    \u002F\u002F 拷贝函数\n",[28,88352,88353,88355,88358,88360,88363,88365,88368],{"class":30,"line":2217},[28,88354,70561],{"class":42},[28,88356,88357],{"class":2453}," deepCopy",[28,88359,367],{"class":34},[28,88361,88362],{"class":5704},"newObj",[28,88364,12921],{"class":34},[28,88366,88367],{"class":5704},"oldObj",[28,88369,12928],{"class":34},[28,88371,88372,88374,88376,88378,88381,88383],{"class":30,"line":2222},[28,88373,52761],{"class":42},[28,88375,2148],{"class":34},[28,88377,52324],{"class":42},[28,88379,88380],{"class":34}," k ",[28,88382,55],{"class":42},[28,88384,88385],{"class":34}," oldObj) {\n",[28,88387,88388],{"class":30,"line":2239},[28,88389,88390],{"class":73},"        \u002F\u002F 处理数组的问题\n",[28,88392,88393],{"class":30,"line":2244},[28,88394,88395],{"class":73},"        \u002F\u002F 判断是否属于数组\n",[28,88397,88398],{"class":30,"line":2249},[28,88399,88400],{"class":73},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[28,88402,88403,88405,88408,88411,88414],{"class":30,"line":2254},[28,88404,2987],{"class":42},[28,88406,88407],{"class":34}," (oldObj[k] ",[28,88409,88410],{"class":42},"instanceof",[28,88412,88413],{"class":2453}," Array",[28,88415,12928],{"class":34},[28,88417,88418],{"class":30,"line":2268},[28,88419,88420],{"class":73},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[28,88422,88423],{"class":30,"line":2273},[28,88424,88425],{"class":73},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[28,88427,88428,88431,88433],{"class":30,"line":3067},[28,88429,88430],{"class":34},"          newObj[k] ",[28,88432,83],{"class":42},[28,88434,52315],{"class":34},[28,88436,88437,88440],{"class":30,"line":3081},[28,88438,88439],{"class":2453},"          deepCopy",[28,88441,88442],{"class":34},"(newObj[k], oldObj[k])\n",[28,88444,88445,88447,88449,88451,88453,88455,88458],{"class":30,"line":3089},[28,88446,80557],{"class":34},[28,88448,2191],{"class":42},[28,88450,2194],{"class":42},[28,88452,88407],{"class":34},[28,88454,88410],{"class":42},[28,88456,88457],{"class":2453}," Object",[28,88459,12928],{"class":34},[28,88461,88462,88464,88466],{"class":30,"line":3094},[28,88463,88430],{"class":34},[28,88465,83],{"class":42},[28,88467,88345],{"class":34},[28,88469,88470,88472],{"class":30,"line":3100},[28,88471,88439],{"class":2453},[28,88473,88442],{"class":34},[28,88475,88476,88478,88480],{"class":30,"line":3106},[28,88477,80557],{"class":34},[28,88479,2191],{"class":42},[28,88481,16058],{"class":34},[28,88483,88484],{"class":30,"line":3111},[28,88485,88486],{"class":73},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[28,88488,88489],{"class":30,"line":8436},[28,88490,88491],{"class":73},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[28,88493,88494,88496,88498],{"class":30,"line":8460},[28,88495,88430],{"class":34},[28,88497,83],{"class":42},[28,88499,88500],{"class":34}," oldObj[k]\n",[28,88502,88503],{"class":30,"line":8465},[28,88504,3019],{"class":34},[28,88506,88507],{"class":30,"line":8471},[28,88508,52875],{"class":34},[28,88510,88511],{"class":30,"line":8498},[28,88512,2677],{"class":34},[28,88514,88515,88518,88521],{"class":30,"line":8503},[28,88516,88517],{"class":2453},"    deepCopy",[28,88519,88520],{"class":34},"(o, obj) ",[28,88522,88523],{"class":73},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[28,88525,88526,88528,88530],{"class":30,"line":8509},[28,88527,74230],{"class":34},[28,88529,58724],{"class":2453},[28,88531,88532],{"class":34},"(o)\n",[28,88534,88535,88538,88540],{"class":30,"line":8521},[28,88536,88537],{"class":34},"    o.age ",[28,88539,83],{"class":42},[28,88541,88542],{"class":38}," 20\n",[28,88544,88545,88548,88550,88552,88554],{"class":30,"line":8533},[28,88546,88547],{"class":34},"    o.hobby[",[28,88549,822],{"class":38},[28,88551,4931],{"class":34},[28,88553,83],{"class":42},[28,88555,88556],{"class":735}," '篮球'\n",[28,88558,88559,88562,88564],{"class":30,"line":8545},[28,88560,88561],{"class":34},"    o.family ",[28,88563,83],{"class":42},[28,88565,88566],{"class":735}," '老pink'\n",[28,88568,88569,88571,88573],{"class":30,"line":10202},[28,88570,74230],{"class":34},[28,88572,58724],{"class":2453},[28,88574,70513],{"class":34},[28,88576,88577,88579,88581],{"class":30,"line":10227},[28,88578,52894],{"class":34},[28,88580,52290],{"class":51777},[28,88582,51784],{"class":34},[28,88584,88585,88587,88589],{"class":30,"line":10250},[28,88586,52262],{"class":34},[28,88588,52277],{"class":51777},[28,88590,51784],{"class":34},[28,88592,88593],{"class":30,"line":10274},[28,88594,2890],{"emptyLinePlaceholder":562},[28,88596,88597,88599,88601],{"class":30,"line":10279},[28,88598,52262],{"class":34},[28,88600,51112],{"class":51777},[28,88602,51784],{"class":34},[14,88604,88605],{},[420,88606],{"alt":23,"src":88607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22484,88609,88611,88612],{"id":88610},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[780,88613,88614],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88616,88617],{},[80,88618,88619],{"href":88619,"rel":88620},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24351],[14,88622,88623],{},"lodash里边的方法都要加上一个下划线_",[14,88625,88626],{},"_.cloneDeep()",[18,88628,88630],{"className":51110,"code":88629,"language":51112,"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,88631,88632,88642,88656,88660,88668,88682,88702,88714,88722,88726,88734,88739,88758,88766,88776,88784,88792,88804,88808,88814,88818,88822,88838,88846,88855,88863,88871,88879,88883],{"__ignoreMap":23},[28,88633,88634,88636,88638,88640],{"class":30,"line":31},[28,88635,51774],{"class":34},[28,88637,51778],{"class":51777},[28,88639,51781],{"class":2453},[28,88641,51784],{"class":34},[28,88643,88644,88646,88648,88650,88652,88654],{"class":30,"line":77},[28,88645,1529],{"class":34},[28,88647,51112],{"class":51777},[28,88649,51793],{"class":2453},[28,88651,83],{"class":34},[28,88653,51798],{"class":735},[28,88655,51784],{"class":34},[28,88657,88658],{"class":30,"line":114},[28,88659,2890],{"emptyLinePlaceholder":562},[28,88661,88662,88664,88666],{"class":30,"line":128},[28,88663,1529],{"class":34},[28,88665,51811],{"class":51777},[28,88667,51784],{"class":34},[28,88669,88670,88672,88674,88676,88678,88680],{"class":30,"line":393},[28,88671,52621],{"class":34},[28,88673,51821],{"class":51777},[28,88675,51824],{"class":2453},[28,88677,83],{"class":34},[28,88679,51829],{"class":735},[28,88681,51784],{"class":34},[28,88683,88684,88686,88688,88690,88692,88694,88696,88698,88700],{"class":30,"line":409},[28,88685,52621],{"class":34},[28,88687,51821],{"class":51777},[28,88689,15406],{"class":2453},[28,88691,83],{"class":34},[28,88693,51868],{"class":735},[28,88695,51848],{"class":2453},[28,88697,83],{"class":34},[28,88699,51875],{"class":735},[28,88701,51784],{"class":34},[28,88703,88704,88706,88708,88710,88712],{"class":30,"line":1711},[28,88705,52621],{"class":34},[28,88707,51884],{"class":51777},[28,88709,51887],{"class":34},[28,88711,51884],{"class":51777},[28,88713,51784],{"class":34},[28,88715,88716,88718,88720],{"class":30,"line":1802},[28,88717,52262],{"class":34},[28,88719,51811],{"class":51777},[28,88721,51784],{"class":34},[28,88723,88724],{"class":30,"line":1808},[28,88725,2890],{"emptyLinePlaceholder":562},[28,88727,88728,88730,88732],{"class":30,"line":1820},[28,88729,1529],{"class":34},[28,88731,52277],{"class":51777},[28,88733,51784],{"class":34},[28,88735,88736],{"class":30,"line":2102},[28,88737,88738],{"class":73},"  \u003C!-- 先引用这个库 -->\n",[28,88740,88741,88743,88745,88747,88749,88752,88754,88756],{"class":30,"line":2107},[28,88742,52621],{"class":34},[28,88744,52290],{"class":51777},[28,88746,55716],{"class":2453},[28,88748,83],{"class":34},[28,88750,88751],{"class":735},"\"lodash.min.js\"",[28,88753,55791],{"class":34},[28,88755,52290],{"class":51777},[28,88757,51784],{"class":34},[28,88759,88760,88762,88764],{"class":30,"line":2113},[28,88761,52621],{"class":34},[28,88763,52290],{"class":51777},[28,88765,51784],{"class":34},[28,88767,88768,88770,88772,88774],{"class":30,"line":2118},[28,88769,11707],{"class":42},[28,88771,70448],{"class":38},[28,88773,14050],{"class":42},[28,88775,16058],{"class":34},[28,88777,88778,88780,88782],{"class":30,"line":2132},[28,88779,72093],{"class":34},[28,88781,88287],{"class":735},[28,88783,31945],{"class":34},[28,88785,88786,88788,88790],{"class":30,"line":2137},[28,88787,72103],{"class":34},[28,88789,1270],{"class":38},[28,88791,31945],{"class":34},[28,88793,88794,88796,88798,88800,88802],{"class":30,"line":2143},[28,88795,88302],{"class":34},[28,88797,88305],{"class":735},[28,88799,12921],{"class":34},[28,88801,88310],{"class":735},[28,88803,88313],{"class":34},[28,88805,88806],{"class":30,"line":2164},[28,88807,78349],{"class":34},[28,88809,88810,88812],{"class":30,"line":2169},[28,88811,88322],{"class":34},[28,88813,88325],{"class":735},[28,88815,88816],{"class":30,"line":2183},[28,88817,52875],{"class":34},[28,88819,88820],{"class":30,"line":2188},[28,88821,2677],{"class":34},[28,88823,88824,88826,88828,88830,88833,88836],{"class":30,"line":2217},[28,88825,11707],{"class":42},[28,88827,88340],{"class":38},[28,88829,14050],{"class":42},[28,88831,88832],{"class":34}," _.",[28,88834,88835],{"class":2453},"cloneDeep",[28,88837,70513],{"class":34},[28,88839,88840,88842,88844],{"class":30,"line":2222},[28,88841,74230],{"class":34},[28,88843,58724],{"class":2453},[28,88845,88532],{"class":34},[28,88847,88848,88851,88853],{"class":30,"line":2239},[28,88849,88850],{"class":34},"    o.family.baby ",[28,88852,83],{"class":42},[28,88854,88566],{"class":735},[28,88856,88857,88859,88861],{"class":30,"line":2244},[28,88858,74230],{"class":34},[28,88860,58724],{"class":2453},[28,88862,70513],{"class":34},[28,88864,88865,88867,88869],{"class":30,"line":2249},[28,88866,52894],{"class":34},[28,88868,52290],{"class":51777},[28,88870,51784],{"class":34},[28,88872,88873,88875,88877],{"class":30,"line":2254},[28,88874,52262],{"class":34},[28,88876,52277],{"class":51777},[28,88878,51784],{"class":34},[28,88880,88881],{"class":30,"line":2268},[28,88882,2890],{"emptyLinePlaceholder":562},[28,88884,88885,88887,88889],{"class":30,"line":2273},[28,88886,52262],{"class":34},[28,88888,51112],{"class":51777},[28,88890,51784],{"class":34},[14,88892,88893],{},[420,88894],{"alt":23,"src":88895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22484,88897,88899],{"id":88898},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[18,88901,88903],{"className":51110,"code":88902,"language":51112,"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,88904,88905,88915,88929,88933,88941,88955,88975,88987,88995,88999,89007,89015,89025,89033,89041,89053,89057,89063,89067,89071,89076,89081,89086,89112,89120,89129,89137,89145,89153,89157],{"__ignoreMap":23},[28,88906,88907,88909,88911,88913],{"class":30,"line":31},[28,88908,51774],{"class":34},[28,88910,51778],{"class":51777},[28,88912,51781],{"class":2453},[28,88914,51784],{"class":34},[28,88916,88917,88919,88921,88923,88925,88927],{"class":30,"line":77},[28,88918,1529],{"class":34},[28,88920,51112],{"class":51777},[28,88922,51793],{"class":2453},[28,88924,83],{"class":34},[28,88926,51798],{"class":735},[28,88928,51784],{"class":34},[28,88930,88931],{"class":30,"line":114},[28,88932,2890],{"emptyLinePlaceholder":562},[28,88934,88935,88937,88939],{"class":30,"line":128},[28,88936,1529],{"class":34},[28,88938,51811],{"class":51777},[28,88940,51784],{"class":34},[28,88942,88943,88945,88947,88949,88951,88953],{"class":30,"line":393},[28,88944,52621],{"class":34},[28,88946,51821],{"class":51777},[28,88948,51824],{"class":2453},[28,88950,83],{"class":34},[28,88952,51829],{"class":735},[28,88954,51784],{"class":34},[28,88956,88957,88959,88961,88963,88965,88967,88969,88971,88973],{"class":30,"line":409},[28,88958,52621],{"class":34},[28,88960,51821],{"class":51777},[28,88962,15406],{"class":2453},[28,88964,83],{"class":34},[28,88966,51868],{"class":735},[28,88968,51848],{"class":2453},[28,88970,83],{"class":34},[28,88972,51875],{"class":735},[28,88974,51784],{"class":34},[28,88976,88977,88979,88981,88983,88985],{"class":30,"line":1711},[28,88978,52621],{"class":34},[28,88980,51884],{"class":51777},[28,88982,51887],{"class":34},[28,88984,51884],{"class":51777},[28,88986,51784],{"class":34},[28,88988,88989,88991,88993],{"class":30,"line":1802},[28,88990,52262],{"class":34},[28,88992,51811],{"class":51777},[28,88994,51784],{"class":34},[28,88996,88997],{"class":30,"line":1808},[28,88998,2890],{"emptyLinePlaceholder":562},[28,89000,89001,89003,89005],{"class":30,"line":1820},[28,89002,1529],{"class":34},[28,89004,52277],{"class":51777},[28,89006,51784],{"class":34},[28,89008,89009,89011,89013],{"class":30,"line":2102},[28,89010,52621],{"class":34},[28,89012,52290],{"class":51777},[28,89014,51784],{"class":34},[28,89016,89017,89019,89021,89023],{"class":30,"line":2107},[28,89018,11707],{"class":42},[28,89020,70448],{"class":38},[28,89022,14050],{"class":42},[28,89024,16058],{"class":34},[28,89026,89027,89029,89031],{"class":30,"line":2113},[28,89028,72093],{"class":34},[28,89030,88287],{"class":735},[28,89032,31945],{"class":34},[28,89034,89035,89037,89039],{"class":30,"line":2118},[28,89036,72103],{"class":34},[28,89038,1270],{"class":38},[28,89040,31945],{"class":34},[28,89042,89043,89045,89047,89049,89051],{"class":30,"line":2132},[28,89044,88302],{"class":34},[28,89046,88305],{"class":735},[28,89048,12921],{"class":34},[28,89050,88310],{"class":735},[28,89052,88313],{"class":34},[28,89054,89055],{"class":30,"line":2137},[28,89056,78349],{"class":34},[28,89058,89059,89061],{"class":30,"line":2143},[28,89060,88322],{"class":34},[28,89062,88325],{"class":735},[28,89064,89065],{"class":30,"line":2164},[28,89066,52875],{"class":34},[28,89068,89069],{"class":30,"line":2169},[28,89070,2677],{"class":34},[28,89072,89073],{"class":30,"line":2183},[28,89074,89075],{"class":73},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[28,89077,89078],{"class":30,"line":2188},[28,89079,89080],{"class":73},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[28,89082,89083],{"class":30,"line":2217},[28,89084,89085],{"class":73},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[28,89087,89088,89090,89092,89094,89097,89099,89102,89104,89106,89108,89110],{"class":30,"line":2222},[28,89089,11707],{"class":42},[28,89091,88340],{"class":38},[28,89093,14050],{"class":42},[28,89095,89096],{"class":38}," JSON",[28,89098,1179],{"class":34},[28,89100,89101],{"class":2453},"parse",[28,89103,367],{"class":34},[28,89105,72141],{"class":38},[28,89107,1179],{"class":34},[28,89109,72146],{"class":2453},[28,89111,72149],{"class":34},[28,89113,89114,89116,89118],{"class":30,"line":2239},[28,89115,74230],{"class":34},[28,89117,58724],{"class":2453},[28,89119,88532],{"class":34},[28,89121,89122,89124,89126],{"class":30,"line":2244},[28,89123,88850],{"class":34},[28,89125,83],{"class":42},[28,89127,89128],{"class":735}," '123'\n",[28,89130,89131,89133,89135],{"class":30,"line":2249},[28,89132,74230],{"class":34},[28,89134,58724],{"class":2453},[28,89136,70513],{"class":34},[28,89138,89139,89141,89143],{"class":30,"line":2254},[28,89140,52894],{"class":34},[28,89142,52290],{"class":51777},[28,89144,51784],{"class":34},[28,89146,89147,89149,89151],{"class":30,"line":2268},[28,89148,52262],{"class":34},[28,89150,52277],{"class":51777},[28,89152,51784],{"class":34},[28,89154,89155],{"class":30,"line":2273},[28,89156,2890],{"emptyLinePlaceholder":562},[28,89158,89159,89161,89163],{"class":30,"line":3067},[28,89160,52262],{"class":34},[28,89162,51112],{"class":51777},[28,89164,51784],{"class":34},[14,89166,89167],{},[420,89168],{"alt":23,"src":89169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[60,89171,89173],{"id":89172},"_415-异常处理","4.15 异常处理",[588,89175,89176],{},[591,89177,89178],{},"throw抛异常",[14,89180,89181],{},[420,89182],{"alt":23,"src":89183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[588,89185,89186],{"start":77},[591,89187,89188],{},"try\u002Fcatch 捕获错误信息",[14,89190,89191],{},[420,89192],{"alt":23,"src":89193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[18,89195,89197],{"className":51110,"code":89196,"language":51112,"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,89198,89199,89209,89223,89227,89235,89249,89269,89281,89289,89293,89301,89313,89321,89330,89337,89342,89361,89370,89381,89386,89396,89401,89406,89411,89428,89432,89437,89444,89456,89460,89472,89476,89480,89485,89490,89497,89505,89513,89517],{"__ignoreMap":23},[28,89200,89201,89203,89205,89207],{"class":30,"line":31},[28,89202,51774],{"class":34},[28,89204,51778],{"class":51777},[28,89206,51781],{"class":2453},[28,89208,51784],{"class":34},[28,89210,89211,89213,89215,89217,89219,89221],{"class":30,"line":77},[28,89212,1529],{"class":34},[28,89214,51112],{"class":51777},[28,89216,51793],{"class":2453},[28,89218,83],{"class":34},[28,89220,51798],{"class":735},[28,89222,51784],{"class":34},[28,89224,89225],{"class":30,"line":114},[28,89226,2890],{"emptyLinePlaceholder":562},[28,89228,89229,89231,89233],{"class":30,"line":128},[28,89230,1529],{"class":34},[28,89232,51811],{"class":51777},[28,89234,51784],{"class":34},[28,89236,89237,89239,89241,89243,89245,89247],{"class":30,"line":393},[28,89238,52621],{"class":34},[28,89240,51821],{"class":51777},[28,89242,51824],{"class":2453},[28,89244,83],{"class":34},[28,89246,51829],{"class":735},[28,89248,51784],{"class":34},[28,89250,89251,89253,89255,89257,89259,89261,89263,89265,89267],{"class":30,"line":409},[28,89252,52621],{"class":34},[28,89254,51821],{"class":51777},[28,89256,15406],{"class":2453},[28,89258,83],{"class":34},[28,89260,51868],{"class":735},[28,89262,51848],{"class":2453},[28,89264,83],{"class":34},[28,89266,51875],{"class":735},[28,89268,51784],{"class":34},[28,89270,89271,89273,89275,89277,89279],{"class":30,"line":1711},[28,89272,52621],{"class":34},[28,89274,51884],{"class":51777},[28,89276,51887],{"class":34},[28,89278,51884],{"class":51777},[28,89280,51784],{"class":34},[28,89282,89283,89285,89287],{"class":30,"line":1802},[28,89284,52262],{"class":34},[28,89286,51811],{"class":51777},[28,89288,51784],{"class":34},[28,89290,89291],{"class":30,"line":1808},[28,89292,2890],{"emptyLinePlaceholder":562},[28,89294,89295,89297,89299],{"class":30,"line":1820},[28,89296,1529],{"class":34},[28,89298,52277],{"class":51777},[28,89300,51784],{"class":34},[28,89302,89303,89305,89307,89309,89311],{"class":30,"line":2102},[28,89304,52621],{"class":34},[28,89306,14],{"class":51777},[28,89308,53971],{"class":34},[28,89310,14],{"class":51777},[28,89312,51784],{"class":34},[28,89314,89315,89317,89319],{"class":30,"line":2107},[28,89316,52621],{"class":34},[28,89318,52290],{"class":51777},[28,89320,51784],{"class":34},[28,89322,89323,89325,89328],{"class":30,"line":2113},[28,89324,70561],{"class":42},[28,89326,89327],{"class":2453}," fn",[28,89329,11339],{"class":34},[28,89331,89332,89335],{"class":30,"line":2118},[28,89333,89334],{"class":42},"      try",[28,89336,16058],{"class":34},[28,89338,89339],{"class":30,"line":2132},[28,89340,89341],{"class":73},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[28,89343,89344,89346,89348,89350,89352,89354,89356,89359],{"class":30,"line":2137},[28,89345,61747],{"class":42},[28,89347,7313],{"class":38},[28,89349,14050],{"class":42},[28,89351,54873],{"class":34},[28,89353,54876],{"class":2453},[28,89355,367],{"class":34},[28,89357,89358],{"class":735},"'.p'",[28,89360,228],{"class":34},[28,89362,89363,89366,89368],{"class":30,"line":2143},[28,89364,89365],{"class":34},"        p.style.color ",[28,89367,83],{"class":42},[28,89369,67528],{"class":735},[28,89371,89372,89375,89378],{"class":30,"line":2164},[28,89373,89374],{"class":34},"      } ",[28,89376,89377],{"class":42},"catch",[28,89379,89380],{"class":34}," (err) {\n",[28,89382,89383],{"class":30,"line":2169},[28,89384,89385],{"class":73},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[28,89387,89388,89391,89393],{"class":30,"line":2183},[28,89389,89390],{"class":34},"        console.",[28,89392,58724],{"class":2453},[28,89394,89395],{"class":34},"(err.message)\n",[28,89397,89398],{"class":30,"line":2188},[28,89399,89400],{"class":73},"        \u002F\u002F 想要中断程序，需要加return\n",[28,89402,89403],{"class":30,"line":2217},[28,89404,89405],{"class":73},"        \u002F\u002F return\n",[28,89407,89408],{"class":30,"line":2222},[28,89409,89410],{"class":73},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[28,89412,89413,89416,89418,89421,89423,89426],{"class":30,"line":2239},[28,89414,89415],{"class":42},"        throw",[28,89417,12064],{"class":42},[28,89419,89420],{"class":2453}," Error",[28,89422,367],{"class":34},[28,89424,89425],{"class":735},"'你看看，选择器错误了吧'",[28,89427,228],{"class":34},[28,89429,89430],{"class":30,"line":2244},[28,89431,52875],{"class":34},[28,89433,89434],{"class":30,"line":2249},[28,89435,89436],{"class":73},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[28,89438,89439,89442],{"class":30,"line":2254},[28,89440,89441],{"class":42},"      finally",[28,89443,16058],{"class":34},[28,89445,89446,89449,89451,89454],{"class":30,"line":2268},[28,89447,89448],{"class":2453},"        alert",[28,89450,367],{"class":34},[28,89452,89453],{"class":735},"'弹出对话框'",[28,89455,228],{"class":34},[28,89457,89458],{"class":30,"line":2273},[28,89459,52875],{"class":34},[28,89461,89462,89464,89466,89468,89470],{"class":30,"line":3067},[28,89463,58721],{"class":34},[28,89465,58724],{"class":2453},[28,89467,367],{"class":34},[28,89469,1095],{"class":38},[28,89471,228],{"class":34},[28,89473,89474],{"class":30,"line":3081},[28,89475,2890],{"emptyLinePlaceholder":562},[28,89477,89478],{"class":30,"line":3089},[28,89479,2677],{"class":34},[28,89481,89482],{"class":30,"line":3094},[28,89483,89484],{"class":73},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[28,89486,89487],{"class":30,"line":3100},[28,89488,89489],{"class":73},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[28,89491,89492,89495],{"class":30,"line":3106},[28,89493,89494],{"class":2453},"    fn",[28,89496,2466],{"class":34},[28,89498,89499,89501,89503],{"class":30,"line":3111},[28,89500,52894],{"class":34},[28,89502,52290],{"class":51777},[28,89504,51784],{"class":34},[28,89506,89507,89509,89511],{"class":30,"line":8436},[28,89508,52262],{"class":34},[28,89510,52277],{"class":51777},[28,89512,51784],{"class":34},[28,89514,89515],{"class":30,"line":8460},[28,89516,2890],{"emptyLinePlaceholder":562},[28,89518,89519,89521,89523],{"class":30,"line":8465},[28,89520,52262],{"class":34},[28,89522,51112],{"class":51777},[28,89524,51784],{"class":34},[14,89526,89527],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[588,89529,89530],{"start":114},[591,89531,89532],{},"debugger",[14,89534,89535],{},[420,89536],{"alt":23,"src":89537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89539,89540],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[60,89542,89544],{"id":89543},"_416-处理this","4.16 处理this",[605,89546,89548],{"id":89547},"_4161-this的指向","4.16.1 this的指向",[588,89550,89551],{},[591,89552,89553],{},"普通函数的this",[14,89555,89556],{},[420,89557],{"alt":23,"src":89558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[588,89560,89561],{"start":77},[591,89562,89563],{},"箭头函数的this",[14,89565,89566],{},[420,89567],{"alt":23,"src":89568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89570,89571],{},[420,89572],{"alt":23,"src":89573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89575,89576],{},[420,89577],{"alt":23,"src":89578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[605,89580,89582],{"id":89581},"_4162-this的改变","4.16.2 this的改变",[14,89584,89585],{},"call() apply() bind()",[588,89587,89588],{},[591,89589,89590],{},"call()",[14,89592,89593],{},[420,89594],{"alt":23,"src":89595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89597,89598],{},"两个作用：①调用函数；②改变this指向",[18,89600,89602],{"className":53544,"code":89601,"language":53546,"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,89603,89604,89612,89620,89624,89629,89633,89638,89643,89648,89652,89657,89665],{"__ignoreMap":23},[28,89605,89606,89608,89610],{"class":30,"line":31},[28,89607,1529],{"class":34},[28,89609,52277],{"class":51777},[28,89611,51784],{"class":34},[28,89613,89614,89616,89618],{"class":30,"line":77},[28,89615,52621],{"class":34},[28,89617,52290],{"class":51777},[28,89619,51784],{"class":34},[28,89621,89622],{"class":30,"line":114},[28,89623,72000],{"class":34},[28,89625,89626],{"class":30,"line":128},[28,89627,89628],{"class":34},"      uname: 'pink'\n",[28,89630,89631],{"class":30,"line":393},[28,89632,2677],{"class":34},[28,89634,89635],{"class":30,"line":409},[28,89636,89637],{"class":34},"    function fn(x, y) {\n",[28,89639,89640],{"class":30,"line":1711},[28,89641,89642],{"class":34},"      console.log(this)  \u002F\u002Fwindow\n",[28,89644,89645],{"class":30,"line":1802},[28,89646,89647],{"class":34},"      console.log(x + y)\n",[28,89649,89650],{"class":30,"line":1808},[28,89651,2677],{"class":34},[28,89653,89654],{"class":30,"line":1820},[28,89655,89656],{"class":34},"    fn.call(obj, 1, 2)\n",[28,89658,89659,89661,89663],{"class":30,"line":2102},[28,89660,52894],{"class":34},[28,89662,52290],{"class":51777},[28,89664,51784],{"class":34},[28,89666,89667,89669,89671],{"class":30,"line":2107},[28,89668,52262],{"class":34},[28,89670,52277],{"class":51777},[28,89672,51784],{"class":34},[14,89674,89675],{},[420,89676],{"alt":23,"src":89677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[588,89679,89680],{"start":77},[591,89681,89682],{},"apply()",[14,89684,89685],{},[420,89686],{"alt":23,"src":89687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89689,89598],{},[14,89691,89692],{},"call传递的是普通参数，而apply必须传递的是数组",[18,89694,89696],{"className":51110,"code":89695,"language":51112,"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,89697,89698,89708,89722,89726,89734,89748,89768,89780,89788,89792,89800,89808,89818,89825,89829,89834,89850,89862,89876,89880,89885,89904,89909,89913,89918,89923,89931,89936,89958,89963,89979,89995,90007,90011,90016,90035,90043,90051,90055],{"__ignoreMap":23},[28,89699,89700,89702,89704,89706],{"class":30,"line":31},[28,89701,51774],{"class":34},[28,89703,51778],{"class":51777},[28,89705,51781],{"class":2453},[28,89707,51784],{"class":34},[28,89709,89710,89712,89714,89716,89718,89720],{"class":30,"line":77},[28,89711,1529],{"class":34},[28,89713,51112],{"class":51777},[28,89715,51793],{"class":2453},[28,89717,83],{"class":34},[28,89719,51798],{"class":735},[28,89721,51784],{"class":34},[28,89723,89724],{"class":30,"line":114},[28,89725,2890],{"emptyLinePlaceholder":562},[28,89727,89728,89730,89732],{"class":30,"line":128},[28,89729,1529],{"class":34},[28,89731,51811],{"class":51777},[28,89733,51784],{"class":34},[28,89735,89736,89738,89740,89742,89744,89746],{"class":30,"line":393},[28,89737,52621],{"class":34},[28,89739,51821],{"class":51777},[28,89741,51824],{"class":2453},[28,89743,83],{"class":34},[28,89745,51829],{"class":735},[28,89747,51784],{"class":34},[28,89749,89750,89752,89754,89756,89758,89760,89762,89764,89766],{"class":30,"line":409},[28,89751,52621],{"class":34},[28,89753,51821],{"class":51777},[28,89755,15406],{"class":2453},[28,89757,83],{"class":34},[28,89759,51868],{"class":735},[28,89761,51848],{"class":2453},[28,89763,83],{"class":34},[28,89765,51875],{"class":735},[28,89767,51784],{"class":34},[28,89769,89770,89772,89774,89776,89778],{"class":30,"line":1711},[28,89771,52621],{"class":34},[28,89773,51884],{"class":51777},[28,89775,51887],{"class":34},[28,89777,51884],{"class":51777},[28,89779,51784],{"class":34},[28,89781,89782,89784,89786],{"class":30,"line":1802},[28,89783,52262],{"class":34},[28,89785,51811],{"class":51777},[28,89787,51784],{"class":34},[28,89789,89790],{"class":30,"line":1808},[28,89791,2890],{"emptyLinePlaceholder":562},[28,89793,89794,89796,89798],{"class":30,"line":1820},[28,89795,1529],{"class":34},[28,89797,52277],{"class":51777},[28,89799,51784],{"class":34},[28,89801,89802,89804,89806],{"class":30,"line":2102},[28,89803,52621],{"class":34},[28,89805,52290],{"class":51777},[28,89807,51784],{"class":34},[28,89809,89810,89812,89814,89816],{"class":30,"line":2107},[28,89811,11707],{"class":42},[28,89813,70448],{"class":38},[28,89815,14050],{"class":42},[28,89817,16058],{"class":34},[28,89819,89820,89822],{"class":30,"line":2113},[28,89821,72103],{"class":34},[28,89823,89824],{"class":38},"18\n",[28,89826,89827],{"class":30,"line":2118},[28,89828,2677],{"class":34},[28,89830,89831],{"class":30,"line":2132},[28,89832,89833],{"class":73},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[28,89835,89836,89838,89840,89842,89844,89846,89848],{"class":30,"line":2137},[28,89837,70561],{"class":42},[28,89839,89327],{"class":2453},[28,89841,367],{"class":34},[28,89843,1440],{"class":5704},[28,89845,12921],{"class":34},[28,89847,1465],{"class":5704},[28,89849,12928],{"class":34},[28,89851,89852,89854,89856,89858,89860],{"class":30,"line":2143},[28,89853,58721],{"class":34},[28,89855,58724],{"class":2453},[28,89857,367],{"class":34},[28,89859,87470],{"class":38},[28,89861,228],{"class":34},[28,89863,89864,89866,89868,89871,89873],{"class":30,"line":2164},[28,89865,58721],{"class":34},[28,89867,58724],{"class":2453},[28,89869,89870],{"class":34},"(x ",[28,89872,1104],{"class":42},[28,89874,89875],{"class":34}," y)\n",[28,89877,89878],{"class":30,"line":2169},[28,89879,2677],{"class":34},[28,89881,89882],{"class":30,"line":2183},[28,89883,89884],{"class":73},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[28,89886,89887,89890,89893,89896,89898,89900,89902],{"class":30,"line":2188},[28,89888,89889],{"class":34},"    fn.",[28,89891,89892],{"class":2453},"apply",[28,89894,89895],{"class":34},"(obj, [",[28,89897,39],{"class":38},[28,89899,12921],{"class":34},[28,89901,93],{"class":38},[28,89903,5145],{"class":34},[28,89905,89906],{"class":30,"line":2217},[28,89907,89908],{"class":73},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[28,89910,89911],{"class":30,"line":2222},[28,89912,2890],{"emptyLinePlaceholder":562},[28,89914,89915],{"class":30,"line":2239},[28,89916,89917],{"class":73},"    \u002F\u002F 使用场景：求数组最大值\n",[28,89919,89920],{"class":30,"line":2244},[28,89921,89922],{"class":73},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[28,89924,89925,89928],{"class":30,"line":2249},[28,89926,89927],{"class":73},"    \u002F\u002F console.log(max)",[28,89929,89930],{"class":73},"   \u002F\u002F3\n",[28,89932,89933],{"class":30,"line":2254},[28,89934,89935],{"class":73},"    \u002F\u002F 指向空或者Math都是可以的\n",[28,89937,89938,89940,89942,89944,89946,89948,89950,89952,89954,89956],{"class":30,"line":2268},[28,89939,11707],{"class":42},[28,89941,58172],{"class":38},[28,89943,14050],{"class":42},[28,89945,52703],{"class":34},[28,89947,938],{"class":38},[28,89949,12921],{"class":34},[28,89951,1127],{"class":38},[28,89953,12921],{"class":34},[28,89955,1156],{"class":38},[28,89957,111],{"class":34},[28,89959,89960],{"class":30,"line":2273},[28,89961,89962],{"class":73},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[28,89964,89965,89967,89969,89971,89974,89976],{"class":30,"line":3067},[28,89966,11707],{"class":42},[28,89968,6439],{"class":38},[28,89970,14050],{"class":42},[28,89972,89973],{"class":34}," Math.max.",[28,89975,89892],{"class":2453},[28,89977,89978],{"class":34},"(Math, arr)\n",[28,89980,89981,89983,89986,89988,89991,89993],{"class":30,"line":3081},[28,89982,11707],{"class":42},[28,89984,89985],{"class":38}," min",[28,89987,14050],{"class":42},[28,89989,89990],{"class":34}," Math.min.",[28,89992,89892],{"class":2453},[28,89994,89978],{"class":34},[28,89996,89997,89999,90001,90004],{"class":30,"line":3089},[28,89998,74230],{"class":34},[28,90000,58724],{"class":2453},[28,90002,90003],{"class":34},"(max, min)     ",[28,90005,90006],{"class":73},"\u002F\u002F100,4\n",[28,90008,90009],{"class":30,"line":3094},[28,90010,2890],{"emptyLinePlaceholder":562},[28,90012,90013],{"class":30,"line":3100},[28,90014,90015],{"class":73},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[28,90017,90018,90020,90022,90025,90027,90029,90032],{"class":30,"line":3106},[28,90019,74230],{"class":34},[28,90021,58724],{"class":2453},[28,90023,90024],{"class":34},"(Max.",[28,90026,6503],{"class":2453},[28,90028,367],{"class":34},[28,90030,90031],{"class":42},"...",[28,90033,90034],{"class":34},"arr))\n",[28,90036,90037,90039,90041],{"class":30,"line":3111},[28,90038,52894],{"class":34},[28,90040,52290],{"class":51777},[28,90042,51784],{"class":34},[28,90044,90045,90047,90049],{"class":30,"line":8436},[28,90046,52262],{"class":34},[28,90048,52277],{"class":51777},[28,90050,51784],{"class":34},[28,90052,90053],{"class":30,"line":8460},[28,90054,2890],{"emptyLinePlaceholder":562},[28,90056,90057,90059,90061],{"class":30,"line":8465},[28,90058,52262],{"class":34},[28,90060,51112],{"class":51777},[28,90062,51784],{"class":34},[14,90064,90065],{},[420,90066],{"alt":23,"src":90067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[588,90069,90070],{"start":114},[591,90071,90072],{},"bind()",[14,90074,90075],{},[420,90076],{"alt":23,"src":90077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90079,90080],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90082,90083],{},"bind的语法跟call很相似",[18,90085,90087],{"className":53544,"code":90086,"language":53546,"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,90088,90089,90097,90105,90109,90114,90118,90122,90127,90131,90136,90141,90146,90151,90156,90161,90166,90170,90178],{"__ignoreMap":23},[28,90090,90091,90093,90095],{"class":30,"line":31},[28,90092,1529],{"class":34},[28,90094,52277],{"class":51777},[28,90096,51784],{"class":34},[28,90098,90099,90101,90103],{"class":30,"line":77},[28,90100,52621],{"class":34},[28,90102,52290],{"class":51777},[28,90104,51784],{"class":34},[28,90106,90107],{"class":30,"line":114},[28,90108,72000],{"class":34},[28,90110,90111],{"class":30,"line":128},[28,90112,90113],{"class":34},"      age: 18\n",[28,90115,90116],{"class":30,"line":393},[28,90117,2677],{"class":34},[28,90119,90120],{"class":30,"line":409},[28,90121,77620],{"class":34},[28,90123,90124],{"class":30,"line":1711},[28,90125,90126],{"class":34},"      console.log(this)\n",[28,90128,90129],{"class":30,"line":1802},[28,90130,2677],{"class":34},[28,90132,90133],{"class":30,"line":1808},[28,90134,90135],{"class":34},"    \u002F\u002F 1.bind 不会调用函数\n",[28,90137,90138],{"class":30,"line":1820},[28,90139,90140],{"class":34},"    \u002F\u002F 2.bind能改变this的指向\n",[28,90142,90143],{"class":30,"line":2102},[28,90144,90145],{"class":34},"    fn.bind()\n",[28,90147,90148],{"class":30,"line":2107},[28,90149,90150],{"class":34},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[28,90152,90153],{"class":30,"line":2113},[28,90154,90155],{"class":34},"    const fun = fn.bind(obj)\n",[28,90157,90158],{"class":30,"line":2118},[28,90159,90160],{"class":34},"    \u002F\u002F console.log(fun)\n",[28,90162,90163],{"class":30,"line":2132},[28,90164,90165],{"class":34},"    \u002F\u002F 调用,查看this的指向\n",[28,90167,90168],{"class":30,"line":2137},[28,90169,53128],{"class":34},[28,90171,90172,90174,90176],{"class":30,"line":2143},[28,90173,52894],{"class":34},[28,90175,52290],{"class":51777},[28,90177,51784],{"class":34},[28,90179,90180,90182,90184],{"class":30,"line":2164},[28,90181,52262],{"class":34},[28,90183,52277],{"class":51777},[28,90185,51784],{"class":34},[14,90187,90188],{},[420,90189],{"alt":23,"src":90190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[588,90192,90193],{"start":128},[591,90194,90195],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[18,90197,90199],{"className":53544,"code":90198,"language":53546,"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,90200,90201,90209,90222,90230,90235,90239,90244,90249,90254,90259,90264,90269,90274,90279,90283,90291],{"__ignoreMap":23},[28,90202,90203,90205,90207],{"class":30,"line":31},[28,90204,1529],{"class":34},[28,90206,52277],{"class":51777},[28,90208,51784],{"class":34},[28,90210,90211,90213,90215,90218,90220],{"class":30,"line":77},[28,90212,52621],{"class":34},[28,90214,54364],{"class":51777},[28,90216,90217],{"class":34},">禁用\u003C\u002F",[28,90219,54364],{"class":51777},[28,90221,51784],{"class":34},[28,90223,90224,90226,90228],{"class":30,"line":114},[28,90225,52621],{"class":34},[28,90227,52290],{"class":51777},[28,90229,51784],{"class":34},[28,90231,90232],{"class":30,"line":128},[28,90233,90234],{"class":34},"    const btn = document.querySelector('button')\n",[28,90236,90237],{"class":30,"line":393},[28,90238,59493],{"class":34},[28,90240,90241],{"class":30,"line":409},[28,90242,90243],{"class":34},"      this.disabled = true\n",[28,90245,90246],{"class":30,"line":1711},[28,90247,90248],{"class":34},"      \u002F\u002F 定时器是window进行调用的\n",[28,90250,90251],{"class":30,"line":1802},[28,90252,90253],{"class":34},"      setTimeout(function () {\n",[28,90255,90256],{"class":30,"line":1808},[28,90257,90258],{"class":34},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[28,90260,90261],{"class":30,"line":1820},[28,90262,90263],{"class":34},"        this.disabled = false\n",[28,90265,90266],{"class":30,"line":2102},[28,90267,90268],{"class":34},"      }.bind(this), 2000)\n",[28,90270,90271],{"class":30,"line":2107},[28,90272,90273],{"class":34},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[28,90275,90276],{"class":30,"line":2113},[28,90277,90278],{"class":34},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[28,90280,90281],{"class":30,"line":2118},[28,90282,33938],{"class":34},[28,90284,90285,90287,90289],{"class":30,"line":2132},[28,90286,52894],{"class":34},[28,90288,52290],{"class":51777},[28,90290,51784],{"class":34},[28,90292,90293,90295,90297],{"class":30,"line":2137},[28,90294,52262],{"class":34},[28,90296,52277],{"class":51777},[28,90298,51784],{"class":34},[588,90300,90301],{"start":393},[591,90302,22439],{},[14,90304,90305],{},[420,90306],{"alt":23,"src":90307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[60,90309,90311],{"id":90310},"_417-性能优化","4.17 性能优化",[605,90313,90315],{"id":90314},"_4171-防抖","4.17.1 防抖",[14,90317,90318],{},[420,90319],{"alt":23,"src":90320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90322,90323],{},[780,90324,90325],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90327,90328],{},"防抖实现方式：",[1626,90330,90331],{},[591,90332,90333],{},"lodash 提供了防抖处理",[14,90335,90336],{},"_.debounce(func,[wait=0],[options={}])",[14,90338,90339],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[18,90341,90343],{"className":51110,"code":90342,"language":51112,"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,90344,90345,90355,90369,90373,90381,90395,90415,90427,90435,90441,90451,90463,90475,90486,90498,90508,90518,90531,90535,90543,90551,90555,90563,90581,90599,90607,90626,90636,90645,90656,90661,90665,90670,90675,90680,90705,90713,90721,90725],{"__ignoreMap":23},[28,90346,90347,90349,90351,90353],{"class":30,"line":31},[28,90348,51774],{"class":34},[28,90350,51778],{"class":51777},[28,90352,51781],{"class":2453},[28,90354,51784],{"class":34},[28,90356,90357,90359,90361,90363,90365,90367],{"class":30,"line":77},[28,90358,1529],{"class":34},[28,90360,51112],{"class":51777},[28,90362,51793],{"class":2453},[28,90364,83],{"class":34},[28,90366,51798],{"class":735},[28,90368,51784],{"class":34},[28,90370,90371],{"class":30,"line":114},[28,90372,2890],{"emptyLinePlaceholder":562},[28,90374,90375,90377,90379],{"class":30,"line":128},[28,90376,1529],{"class":34},[28,90378,51811],{"class":51777},[28,90380,51784],{"class":34},[28,90382,90383,90385,90387,90389,90391,90393],{"class":30,"line":393},[28,90384,52621],{"class":34},[28,90386,51821],{"class":51777},[28,90388,51824],{"class":2453},[28,90390,83],{"class":34},[28,90392,51829],{"class":735},[28,90394,51784],{"class":34},[28,90396,90397,90399,90401,90403,90405,90407,90409,90411,90413],{"class":30,"line":409},[28,90398,52621],{"class":34},[28,90400,51821],{"class":51777},[28,90402,15406],{"class":2453},[28,90404,83],{"class":34},[28,90406,51868],{"class":735},[28,90408,51848],{"class":2453},[28,90410,83],{"class":34},[28,90412,51875],{"class":735},[28,90414,51784],{"class":34},[28,90416,90417,90419,90421,90423,90425],{"class":30,"line":1711},[28,90418,52621],{"class":34},[28,90420,51884],{"class":51777},[28,90422,51887],{"class":34},[28,90424,51884],{"class":51777},[28,90426,51784],{"class":34},[28,90428,90429,90431,90433],{"class":30,"line":1802},[28,90430,52621],{"class":34},[28,90432,547],{"class":51777},[28,90434,51784],{"class":34},[28,90436,90437,90439],{"class":30,"line":1808},[28,90438,55229],{"class":2453},[28,90440,16058],{"class":34},[28,90442,90443,90445,90447,90449],{"class":30,"line":1820},[28,90444,73073],{"class":38},[28,90446,51914],{"class":34},[28,90448,60982],{"class":38},[28,90450,1781],{"class":34},[28,90452,90453,90455,90457,90459,90461],{"class":30,"line":2102},[28,90454,55248],{"class":38},[28,90456,51914],{"class":34},[28,90458,2212],{"class":38},[28,90460,51969],{"class":42},[28,90462,1781],{"class":34},[28,90464,90465,90467,90469,90471,90473],{"class":30,"line":2107},[28,90466,55262],{"class":38},[28,90468,51914],{"class":34},[28,90470,2212],{"class":38},[28,90472,51969],{"class":42},[28,90474,1781],{"class":34},[28,90476,90477,90479,90481,90484],{"class":30,"line":2113},[28,90478,55361],{"class":38},[28,90480,51914],{"class":34},[28,90482,90483],{"class":38},"gray",[28,90485,1781],{"class":34},[28,90487,90488,90490,90492,90494,90496],{"class":30,"line":2118},[28,90489,55399],{"class":38},[28,90491,51914],{"class":34},[28,90493,1445],{"class":38},[28,90495,51969],{"class":42},[28,90497,1781],{"class":34},[28,90499,90500,90502,90504,90506],{"class":30,"line":2132},[28,90501,57893],{"class":38},[28,90503,51914],{"class":34},[28,90505,61319],{"class":38},[28,90507,1781],{"class":34},[28,90509,90510,90512,90514,90516],{"class":30,"line":2137},[28,90511,57763],{"class":38},[28,90513,51914],{"class":34},[28,90515,52069],{"class":38},[28,90517,1781],{"class":34},[28,90519,90520,90523,90525,90527,90529],{"class":30,"line":2143},[28,90521,90522],{"class":38},"      padding-top",[28,90524,51914],{"class":34},[28,90526,108],{"class":38},[28,90528,51969],{"class":42},[28,90530,1781],{"class":34},[28,90532,90533],{"class":30,"line":2164},[28,90534,2677],{"class":34},[28,90536,90537,90539,90541],{"class":30,"line":2169},[28,90538,52894],{"class":34},[28,90540,547],{"class":51777},[28,90542,51784],{"class":34},[28,90544,90545,90547,90549],{"class":30,"line":2183},[28,90546,52262],{"class":34},[28,90548,51811],{"class":51777},[28,90550,51784],{"class":34},[28,90552,90553],{"class":30,"line":2188},[28,90554,2890],{"emptyLinePlaceholder":562},[28,90556,90557,90559,90561],{"class":30,"line":2217},[28,90558,1529],{"class":34},[28,90560,52277],{"class":51777},[28,90562,51784],{"class":34},[28,90564,90565,90567,90569,90571,90573,90575,90577,90579],{"class":30,"line":2222},[28,90566,52621],{"class":34},[28,90568,52088],{"class":51777},[28,90570,53963],{"class":2453},[28,90572,83],{"class":34},[28,90574,53968],{"class":735},[28,90576,55791],{"class":34},[28,90578,52088],{"class":51777},[28,90580,51784],{"class":34},[28,90582,90583,90585,90587,90589,90591,90593,90595,90597],{"class":30,"line":2239},[28,90584,52621],{"class":34},[28,90586,52290],{"class":51777},[28,90588,55716],{"class":2453},[28,90590,83],{"class":34},[28,90592,88751],{"class":735},[28,90594,55791],{"class":34},[28,90596,52290],{"class":51777},[28,90598,51784],{"class":34},[28,90600,90601,90603,90605],{"class":30,"line":2244},[28,90602,52621],{"class":34},[28,90604,52290],{"class":51777},[28,90606,51784],{"class":34},[28,90608,90609,90611,90613,90615,90617,90619,90621,90624],{"class":30,"line":2249},[28,90610,11707],{"class":42},[28,90612,87410],{"class":38},[28,90614,14050],{"class":42},[28,90616,54873],{"class":34},[28,90618,54876],{"class":2453},[28,90620,367],{"class":34},[28,90622,90623],{"class":735},"'.box'",[28,90625,228],{"class":34},[28,90627,90628,90630,90632,90634],{"class":30,"line":2254},[28,90629,52696],{"class":42},[28,90631,52],{"class":34},[28,90633,83],{"class":42},[28,90635,47810],{"class":38},[28,90637,90638,90640,90643],{"class":30,"line":2268},[28,90639,70561],{"class":42},[28,90641,90642],{"class":2453}," mouseMove",[28,90644,11339],{"class":34},[28,90646,90647,90650,90652,90654],{"class":30,"line":2273},[28,90648,90649],{"class":34},"      box.innerHTML ",[28,90651,83],{"class":42},[28,90653,3521],{"class":34},[28,90655,3192],{"class":42},[28,90657,90658],{"class":30,"line":3067},[28,90659,90660],{"class":73},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[28,90662,90663],{"class":30,"line":3081},[28,90664,2677],{"class":34},[28,90666,90667],{"class":30,"line":3089},[28,90668,90669],{"class":73},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[28,90671,90672],{"class":30,"line":3094},[28,90673,90674],{"class":73},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[28,90676,90677],{"class":30,"line":3100},[28,90678,90679],{"class":73},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[28,90681,90682,90685,90687,90689,90692,90695,90698,90701,90703],{"class":30,"line":3106},[28,90683,90684],{"class":34},"    box.",[28,90686,58290],{"class":2453},[28,90688,367],{"class":34},[28,90690,90691],{"class":735},"'mousemove'",[28,90693,90694],{"class":34},", _.",[28,90696,90697],{"class":2453},"debounce",[28,90699,90700],{"class":34},"(mouseMove, ",[28,90702,65551],{"class":38},[28,90704,30980],{"class":34},[28,90706,90707,90709,90711],{"class":30,"line":3111},[28,90708,52894],{"class":34},[28,90710,52290],{"class":51777},[28,90712,51784],{"class":34},[28,90714,90715,90717,90719],{"class":30,"line":8436},[28,90716,52262],{"class":34},[28,90718,52277],{"class":51777},[28,90720,51784],{"class":34},[28,90722,90723],{"class":30,"line":8460},[28,90724,2890],{"emptyLinePlaceholder":562},[28,90726,90727,90729,90731],{"class":30,"line":8465},[28,90728,52262],{"class":34},[28,90730,51112],{"class":51777},[28,90732,51784],{"class":34},[1626,90734,90735],{},[591,90736,90737],{},"手写一个防抖函数来处理",[14,90739,90740],{},"防抖的核心就是利用定时器来实现的：",[14,90742,90743],{},"①声明一个定时器变量",[14,90745,90746],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90748,90749],{},"③如果没有定时器则开启定时器，记得存到变量里面",[18,90751,90753],{"className":51110,"code":90752,"language":51112,"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,90754,90755,90765,90779,90783,90791,90805,90825,90837,90845,90851,90861,90873,90885,90895,90907,90917,90927,90939,90943,90951,90959,90963,90971,90989,91007,91015,91033,91043,91051,91061,91065,91069,91073,91078,91083,91088,91093,91098,91103,91121,91128,91133,91141,91146,91159,91175,91185,91190,91194,91198,91218,91222,91227,91232,91237,91242,91250,91258,91262],{"__ignoreMap":23},[28,90756,90757,90759,90761,90763],{"class":30,"line":31},[28,90758,51774],{"class":34},[28,90760,51778],{"class":51777},[28,90762,51781],{"class":2453},[28,90764,51784],{"class":34},[28,90766,90767,90769,90771,90773,90775,90777],{"class":30,"line":77},[28,90768,1529],{"class":34},[28,90770,51112],{"class":51777},[28,90772,51793],{"class":2453},[28,90774,83],{"class":34},[28,90776,51798],{"class":735},[28,90778,51784],{"class":34},[28,90780,90781],{"class":30,"line":114},[28,90782,2890],{"emptyLinePlaceholder":562},[28,90784,90785,90787,90789],{"class":30,"line":128},[28,90786,1529],{"class":34},[28,90788,51811],{"class":51777},[28,90790,51784],{"class":34},[28,90792,90793,90795,90797,90799,90801,90803],{"class":30,"line":393},[28,90794,52621],{"class":34},[28,90796,51821],{"class":51777},[28,90798,51824],{"class":2453},[28,90800,83],{"class":34},[28,90802,51829],{"class":735},[28,90804,51784],{"class":34},[28,90806,90807,90809,90811,90813,90815,90817,90819,90821,90823],{"class":30,"line":409},[28,90808,52621],{"class":34},[28,90810,51821],{"class":51777},[28,90812,15406],{"class":2453},[28,90814,83],{"class":34},[28,90816,51868],{"class":735},[28,90818,51848],{"class":2453},[28,90820,83],{"class":34},[28,90822,51875],{"class":735},[28,90824,51784],{"class":34},[28,90826,90827,90829,90831,90833,90835],{"class":30,"line":1711},[28,90828,52621],{"class":34},[28,90830,51884],{"class":51777},[28,90832,51887],{"class":34},[28,90834,51884],{"class":51777},[28,90836,51784],{"class":34},[28,90838,90839,90841,90843],{"class":30,"line":1802},[28,90840,52621],{"class":34},[28,90842,547],{"class":51777},[28,90844,51784],{"class":34},[28,90846,90847,90849],{"class":30,"line":1808},[28,90848,55229],{"class":2453},[28,90850,16058],{"class":34},[28,90852,90853,90855,90857,90859],{"class":30,"line":1820},[28,90854,73073],{"class":38},[28,90856,51914],{"class":34},[28,90858,60982],{"class":38},[28,90860,1781],{"class":34},[28,90862,90863,90865,90867,90869,90871],{"class":30,"line":2102},[28,90864,55248],{"class":38},[28,90866,51914],{"class":34},[28,90868,2212],{"class":38},[28,90870,51969],{"class":42},[28,90872,1781],{"class":34},[28,90874,90875,90877,90879,90881,90883],{"class":30,"line":2107},[28,90876,55262],{"class":38},[28,90878,51914],{"class":34},[28,90880,2212],{"class":38},[28,90882,51969],{"class":42},[28,90884,1781],{"class":34},[28,90886,90887,90889,90891,90893],{"class":30,"line":2113},[28,90888,55361],{"class":38},[28,90890,51914],{"class":34},[28,90892,90483],{"class":38},[28,90894,1781],{"class":34},[28,90896,90897,90899,90901,90903,90905],{"class":30,"line":2118},[28,90898,55399],{"class":38},[28,90900,51914],{"class":34},[28,90902,1445],{"class":38},[28,90904,51969],{"class":42},[28,90906,1781],{"class":34},[28,90908,90909,90911,90913,90915],{"class":30,"line":2132},[28,90910,57893],{"class":38},[28,90912,51914],{"class":34},[28,90914,61319],{"class":38},[28,90916,1781],{"class":34},[28,90918,90919,90921,90923,90925],{"class":30,"line":2137},[28,90920,57763],{"class":38},[28,90922,51914],{"class":34},[28,90924,52069],{"class":38},[28,90926,1781],{"class":34},[28,90928,90929,90931,90933,90935,90937],{"class":30,"line":2143},[28,90930,90522],{"class":38},[28,90932,51914],{"class":34},[28,90934,108],{"class":38},[28,90936,51969],{"class":42},[28,90938,1781],{"class":34},[28,90940,90941],{"class":30,"line":2164},[28,90942,2677],{"class":34},[28,90944,90945,90947,90949],{"class":30,"line":2169},[28,90946,52894],{"class":34},[28,90948,547],{"class":51777},[28,90950,51784],{"class":34},[28,90952,90953,90955,90957],{"class":30,"line":2183},[28,90954,52262],{"class":34},[28,90956,51811],{"class":51777},[28,90958,51784],{"class":34},[28,90960,90961],{"class":30,"line":2188},[28,90962,2890],{"emptyLinePlaceholder":562},[28,90964,90965,90967,90969],{"class":30,"line":2217},[28,90966,1529],{"class":34},[28,90968,52277],{"class":51777},[28,90970,51784],{"class":34},[28,90972,90973,90975,90977,90979,90981,90983,90985,90987],{"class":30,"line":2222},[28,90974,52621],{"class":34},[28,90976,52088],{"class":51777},[28,90978,53963],{"class":2453},[28,90980,83],{"class":34},[28,90982,53968],{"class":735},[28,90984,55791],{"class":34},[28,90986,52088],{"class":51777},[28,90988,51784],{"class":34},[28,90990,90991,90993,90995,90997,90999,91001,91003,91005],{"class":30,"line":2239},[28,90992,52621],{"class":34},[28,90994,52290],{"class":51777},[28,90996,55716],{"class":2453},[28,90998,83],{"class":34},[28,91000,88751],{"class":735},[28,91002,55791],{"class":34},[28,91004,52290],{"class":51777},[28,91006,51784],{"class":34},[28,91008,91009,91011,91013],{"class":30,"line":2244},[28,91010,52621],{"class":34},[28,91012,52290],{"class":51777},[28,91014,51784],{"class":34},[28,91016,91017,91019,91021,91023,91025,91027,91029,91031],{"class":30,"line":2249},[28,91018,11707],{"class":42},[28,91020,87410],{"class":38},[28,91022,14050],{"class":42},[28,91024,54873],{"class":34},[28,91026,54876],{"class":2453},[28,91028,367],{"class":34},[28,91030,90623],{"class":735},[28,91032,228],{"class":34},[28,91034,91035,91037,91039,91041],{"class":30,"line":2254},[28,91036,52696],{"class":42},[28,91038,52],{"class":34},[28,91040,83],{"class":42},[28,91042,47810],{"class":38},[28,91044,91045,91047,91049],{"class":30,"line":2268},[28,91046,70561],{"class":42},[28,91048,90642],{"class":2453},[28,91050,11339],{"class":34},[28,91052,91053,91055,91057,91059],{"class":30,"line":2273},[28,91054,90649],{"class":34},[28,91056,83],{"class":42},[28,91058,3521],{"class":34},[28,91060,3192],{"class":42},[28,91062,91063],{"class":30,"line":3067},[28,91064,90660],{"class":73},[28,91066,91067],{"class":30,"line":3081},[28,91068,2677],{"class":34},[28,91070,91071],{"class":30,"line":3089},[28,91072,90669],{"class":73},[28,91074,91075],{"class":30,"line":3094},[28,91076,91077],{"class":73},"    \u002F\u002F 手写防抖函数\n",[28,91079,91080],{"class":30,"line":3100},[28,91081,91082],{"class":73},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[28,91084,91085],{"class":30,"line":3106},[28,91086,91087],{"class":73},"    \u002F\u002F 1.声明定时器变量\n",[28,91089,91090],{"class":30,"line":3111},[28,91091,91092],{"class":73},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[28,91094,91095],{"class":30,"line":8436},[28,91096,91097],{"class":73},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[28,91099,91100],{"class":30,"line":8460},[28,91101,91102],{"class":73},"    \u002F\u002F 4.定时器里面写函数调用\n",[28,91104,91105,91107,91110,91112,91115,91117,91119],{"class":30,"line":8465},[28,91106,70561],{"class":42},[28,91108,91109],{"class":2453}," debounce",[28,91111,367],{"class":34},[28,91113,91114],{"class":5704},"fn",[28,91116,12921],{"class":34},[28,91118,1340],{"class":5704},[28,91120,12928],{"class":34},[28,91122,91123,91125],{"class":30,"line":8471},[28,91124,80249],{"class":42},[28,91126,91127],{"class":34}," timer\n",[28,91129,91130],{"class":30,"line":8498},[28,91131,91132],{"class":73},"      \u002F\u002F return 返回一个匿名函数\n",[28,91134,91135,91137,91139],{"class":30,"line":8503},[28,91136,74459],{"class":42},[28,91138,59395],{"class":42},[28,91140,54929],{"class":34},[28,91142,91143],{"class":30,"line":8509},[28,91144,91145],{"class":73},"        \u002F\u002F 这里边写第二三四步\n",[28,91147,91148,91150,91153,91156],{"class":30,"line":8521},[28,91149,2987],{"class":42},[28,91151,91152],{"class":34}," (timer) ",[28,91154,91155],{"class":2453},"clearTimeout",[28,91157,91158],{"class":34},"(timer)\n",[28,91160,91161,91164,91166,91169,91171,91173],{"class":30,"line":8533},[28,91162,91163],{"class":34},"        timer ",[28,91165,83],{"class":42},[28,91167,91168],{"class":2453}," setTimeout",[28,91170,367],{"class":34},[28,91172,54926],{"class":42},[28,91174,54929],{"class":34},[28,91176,91177,91180,91182],{"class":30,"line":8545},[28,91178,91179],{"class":2453},"          fn",[28,91181,13536],{"class":34},[28,91183,91184],{"class":73},"\u002F\u002F加小括号调用fn }, t)\n",[28,91186,91187],{"class":30,"line":10202},[28,91188,91189],{"class":34},"        }, t)\n",[28,91191,91192],{"class":30,"line":10227},[28,91193,52875],{"class":34},[28,91195,91196],{"class":30,"line":10250},[28,91197,2677],{"class":34},[28,91199,91200,91202,91204,91206,91208,91210,91212,91214,91216],{"class":30,"line":10274},[28,91201,90684],{"class":34},[28,91203,58290],{"class":2453},[28,91205,367],{"class":34},[28,91207,90691],{"class":735},[28,91209,12921],{"class":34},[28,91211,90697],{"class":2453},[28,91213,90700],{"class":34},[28,91215,65551],{"class":38},[28,91217,30980],{"class":34},[28,91219,91220],{"class":30,"line":10279},[28,91221,2890],{"emptyLinePlaceholder":562},[28,91223,91224],{"class":30,"line":10284},[28,91225,91226],{"class":73},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[28,91228,91229],{"class":30,"line":10289},[28,91230,91231],{"class":73},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[28,91233,91234],{"class":30,"line":10298},[28,91235,91236],{"class":73},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[28,91238,91239],{"class":30,"line":10303},[28,91240,91241],{"class":73},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[28,91243,91244,91246,91248],{"class":30,"line":10309},[28,91245,52894],{"class":34},[28,91247,52290],{"class":51777},[28,91249,51784],{"class":34},[28,91251,91252,91254,91256],{"class":30,"line":10330},[28,91253,52262],{"class":34},[28,91255,52277],{"class":51777},[28,91257,51784],{"class":34},[28,91259,91260],{"class":30,"line":10336},[28,91261,2890],{"emptyLinePlaceholder":562},[28,91263,91264,91266,91268],{"class":30,"line":10350},[28,91265,52262],{"class":34},[28,91267,51112],{"class":51777},[28,91269,51784],{"class":34},[605,91271,91273],{"id":91272},"_4172-节流","4.17.2 节流",[14,91275,91276],{},[420,91277],{"alt":23,"src":91278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91280,91281],{},[420,91282],{"alt":23,"src":91283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91285,91286],{},[780,91287,91288],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91290,91291],{},"实现方式：",[1626,91293,91294],{},[591,91295,91296],{},"lodash 提供的节流函数来处理",[14,91298,91299],{},"_.throttle(func,[wait=0],[options=])",[14,91301,91302],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[18,91304,91306],{"className":51110,"code":91305,"language":51112,"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,91307,91308,91318,91332,91336,91344,91358,91378,91390,91398,91404,91414,91426,91438,91448,91460,91470,91480,91492,91496,91504,91512,91516,91524,91542,91560,91568,91586,91596,91604,91614,91618,91622,91626,91631,91636,91657,91665,91673,91677],{"__ignoreMap":23},[28,91309,91310,91312,91314,91316],{"class":30,"line":31},[28,91311,51774],{"class":34},[28,91313,51778],{"class":51777},[28,91315,51781],{"class":2453},[28,91317,51784],{"class":34},[28,91319,91320,91322,91324,91326,91328,91330],{"class":30,"line":77},[28,91321,1529],{"class":34},[28,91323,51112],{"class":51777},[28,91325,51793],{"class":2453},[28,91327,83],{"class":34},[28,91329,51798],{"class":735},[28,91331,51784],{"class":34},[28,91333,91334],{"class":30,"line":114},[28,91335,2890],{"emptyLinePlaceholder":562},[28,91337,91338,91340,91342],{"class":30,"line":128},[28,91339,1529],{"class":34},[28,91341,51811],{"class":51777},[28,91343,51784],{"class":34},[28,91345,91346,91348,91350,91352,91354,91356],{"class":30,"line":393},[28,91347,52621],{"class":34},[28,91349,51821],{"class":51777},[28,91351,51824],{"class":2453},[28,91353,83],{"class":34},[28,91355,51829],{"class":735},[28,91357,51784],{"class":34},[28,91359,91360,91362,91364,91366,91368,91370,91372,91374,91376],{"class":30,"line":409},[28,91361,52621],{"class":34},[28,91363,51821],{"class":51777},[28,91365,15406],{"class":2453},[28,91367,83],{"class":34},[28,91369,51868],{"class":735},[28,91371,51848],{"class":2453},[28,91373,83],{"class":34},[28,91375,51875],{"class":735},[28,91377,51784],{"class":34},[28,91379,91380,91382,91384,91386,91388],{"class":30,"line":1711},[28,91381,52621],{"class":34},[28,91383,51884],{"class":51777},[28,91385,51887],{"class":34},[28,91387,51884],{"class":51777},[28,91389,51784],{"class":34},[28,91391,91392,91394,91396],{"class":30,"line":1802},[28,91393,52621],{"class":34},[28,91395,547],{"class":51777},[28,91397,51784],{"class":34},[28,91399,91400,91402],{"class":30,"line":1808},[28,91401,55229],{"class":2453},[28,91403,16058],{"class":34},[28,91405,91406,91408,91410,91412],{"class":30,"line":1820},[28,91407,73073],{"class":38},[28,91409,51914],{"class":34},[28,91411,60982],{"class":38},[28,91413,1781],{"class":34},[28,91415,91416,91418,91420,91422,91424],{"class":30,"line":2102},[28,91417,55248],{"class":38},[28,91419,51914],{"class":34},[28,91421,2212],{"class":38},[28,91423,51969],{"class":42},[28,91425,1781],{"class":34},[28,91427,91428,91430,91432,91434,91436],{"class":30,"line":2107},[28,91429,55262],{"class":38},[28,91431,51914],{"class":34},[28,91433,2212],{"class":38},[28,91435,51969],{"class":42},[28,91437,1781],{"class":34},[28,91439,91440,91442,91444,91446],{"class":30,"line":2113},[28,91441,55361],{"class":38},[28,91443,51914],{"class":34},[28,91445,90483],{"class":38},[28,91447,1781],{"class":34},[28,91449,91450,91452,91454,91456,91458],{"class":30,"line":2118},[28,91451,55399],{"class":38},[28,91453,51914],{"class":34},[28,91455,1445],{"class":38},[28,91457,51969],{"class":42},[28,91459,1781],{"class":34},[28,91461,91462,91464,91466,91468],{"class":30,"line":2132},[28,91463,57893],{"class":38},[28,91465,51914],{"class":34},[28,91467,61319],{"class":38},[28,91469,1781],{"class":34},[28,91471,91472,91474,91476,91478],{"class":30,"line":2137},[28,91473,57763],{"class":38},[28,91475,51914],{"class":34},[28,91477,52069],{"class":38},[28,91479,1781],{"class":34},[28,91481,91482,91484,91486,91488,91490],{"class":30,"line":2143},[28,91483,90522],{"class":38},[28,91485,51914],{"class":34},[28,91487,108],{"class":38},[28,91489,51969],{"class":42},[28,91491,1781],{"class":34},[28,91493,91494],{"class":30,"line":2164},[28,91495,2677],{"class":34},[28,91497,91498,91500,91502],{"class":30,"line":2169},[28,91499,52894],{"class":34},[28,91501,547],{"class":51777},[28,91503,51784],{"class":34},[28,91505,91506,91508,91510],{"class":30,"line":2183},[28,91507,52262],{"class":34},[28,91509,51811],{"class":51777},[28,91511,51784],{"class":34},[28,91513,91514],{"class":30,"line":2188},[28,91515,2890],{"emptyLinePlaceholder":562},[28,91517,91518,91520,91522],{"class":30,"line":2217},[28,91519,1529],{"class":34},[28,91521,52277],{"class":51777},[28,91523,51784],{"class":34},[28,91525,91526,91528,91530,91532,91534,91536,91538,91540],{"class":30,"line":2222},[28,91527,52621],{"class":34},[28,91529,52088],{"class":51777},[28,91531,53963],{"class":2453},[28,91533,83],{"class":34},[28,91535,53968],{"class":735},[28,91537,55791],{"class":34},[28,91539,52088],{"class":51777},[28,91541,51784],{"class":34},[28,91543,91544,91546,91548,91550,91552,91554,91556,91558],{"class":30,"line":2239},[28,91545,52621],{"class":34},[28,91547,52290],{"class":51777},[28,91549,55716],{"class":2453},[28,91551,83],{"class":34},[28,91553,88751],{"class":735},[28,91555,55791],{"class":34},[28,91557,52290],{"class":51777},[28,91559,51784],{"class":34},[28,91561,91562,91564,91566],{"class":30,"line":2244},[28,91563,52621],{"class":34},[28,91565,52290],{"class":51777},[28,91567,51784],{"class":34},[28,91569,91570,91572,91574,91576,91578,91580,91582,91584],{"class":30,"line":2249},[28,91571,11707],{"class":42},[28,91573,87410],{"class":38},[28,91575,14050],{"class":42},[28,91577,54873],{"class":34},[28,91579,54876],{"class":2453},[28,91581,367],{"class":34},[28,91583,90623],{"class":735},[28,91585,228],{"class":34},[28,91587,91588,91590,91592,91594],{"class":30,"line":2254},[28,91589,52696],{"class":42},[28,91591,52],{"class":34},[28,91593,83],{"class":42},[28,91595,47810],{"class":38},[28,91597,91598,91600,91602],{"class":30,"line":2268},[28,91599,70561],{"class":42},[28,91601,90642],{"class":2453},[28,91603,11339],{"class":34},[28,91605,91606,91608,91610,91612],{"class":30,"line":2273},[28,91607,90649],{"class":34},[28,91609,83],{"class":42},[28,91611,3521],{"class":34},[28,91613,3192],{"class":42},[28,91615,91616],{"class":30,"line":3067},[28,91617,90660],{"class":73},[28,91619,91620],{"class":30,"line":3081},[28,91621,2677],{"class":34},[28,91623,91624],{"class":30,"line":3089},[28,91625,90669],{"class":73},[28,91627,91628],{"class":30,"line":3094},[28,91629,91630],{"class":73},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[28,91632,91633],{"class":30,"line":3100},[28,91634,91635],{"class":73},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[28,91637,91638,91640,91642,91644,91646,91648,91651,91653,91655],{"class":30,"line":3106},[28,91639,90684],{"class":34},[28,91641,58290],{"class":2453},[28,91643,367],{"class":34},[28,91645,90691],{"class":735},[28,91647,90694],{"class":34},[28,91649,91650],{"class":2453},"throttle",[28,91652,90700],{"class":34},[28,91654,65551],{"class":38},[28,91656,30980],{"class":34},[28,91658,91659,91661,91663],{"class":30,"line":3111},[28,91660,52894],{"class":34},[28,91662,52290],{"class":51777},[28,91664,51784],{"class":34},[28,91666,91667,91669,91671],{"class":30,"line":8436},[28,91668,52262],{"class":34},[28,91670,52277],{"class":51777},[28,91672,51784],{"class":34},[28,91674,91675],{"class":30,"line":8460},[28,91676,2890],{"emptyLinePlaceholder":562},[28,91678,91679,91681,91683],{"class":30,"line":8465},[28,91680,52262],{"class":34},[28,91682,51112],{"class":51777},[28,91684,51784],{"class":34},[1626,91686,91687],{},[591,91688,91689],{},"手写一个节流函数来处理",[14,91691,71429],{},[14,91693,90743],{},[14,91695,91696],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91698,91699],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[18,91701,91703],{"className":51110,"code":91702,"language":51112,"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,91704,91705,91715,91729,91733,91741,91755,91775,91787,91795,91801,91811,91823,91835,91845,91857,91867,91877,91889,91893,91901,91909,91913,91921,91939,91957,91965,91983,91993,92001,92011,92015,92019,92023,92028,92033,92038,92043,92048,92053,92070,92076,92084,92095,92110,92117,92122,92127,92137,92142,92147,92152,92156,92160,92164,92184,92192,92200,92204],{"__ignoreMap":23},[28,91706,91707,91709,91711,91713],{"class":30,"line":31},[28,91708,51774],{"class":34},[28,91710,51778],{"class":51777},[28,91712,51781],{"class":2453},[28,91714,51784],{"class":34},[28,91716,91717,91719,91721,91723,91725,91727],{"class":30,"line":77},[28,91718,1529],{"class":34},[28,91720,51112],{"class":51777},[28,91722,51793],{"class":2453},[28,91724,83],{"class":34},[28,91726,51798],{"class":735},[28,91728,51784],{"class":34},[28,91730,91731],{"class":30,"line":114},[28,91732,2890],{"emptyLinePlaceholder":562},[28,91734,91735,91737,91739],{"class":30,"line":128},[28,91736,1529],{"class":34},[28,91738,51811],{"class":51777},[28,91740,51784],{"class":34},[28,91742,91743,91745,91747,91749,91751,91753],{"class":30,"line":393},[28,91744,52621],{"class":34},[28,91746,51821],{"class":51777},[28,91748,51824],{"class":2453},[28,91750,83],{"class":34},[28,91752,51829],{"class":735},[28,91754,51784],{"class":34},[28,91756,91757,91759,91761,91763,91765,91767,91769,91771,91773],{"class":30,"line":409},[28,91758,52621],{"class":34},[28,91760,51821],{"class":51777},[28,91762,15406],{"class":2453},[28,91764,83],{"class":34},[28,91766,51868],{"class":735},[28,91768,51848],{"class":2453},[28,91770,83],{"class":34},[28,91772,51875],{"class":735},[28,91774,51784],{"class":34},[28,91776,91777,91779,91781,91783,91785],{"class":30,"line":1711},[28,91778,52621],{"class":34},[28,91780,51884],{"class":51777},[28,91782,51887],{"class":34},[28,91784,51884],{"class":51777},[28,91786,51784],{"class":34},[28,91788,91789,91791,91793],{"class":30,"line":1802},[28,91790,52621],{"class":34},[28,91792,547],{"class":51777},[28,91794,51784],{"class":34},[28,91796,91797,91799],{"class":30,"line":1808},[28,91798,55229],{"class":2453},[28,91800,16058],{"class":34},[28,91802,91803,91805,91807,91809],{"class":30,"line":1820},[28,91804,73073],{"class":38},[28,91806,51914],{"class":34},[28,91808,60982],{"class":38},[28,91810,1781],{"class":34},[28,91812,91813,91815,91817,91819,91821],{"class":30,"line":2102},[28,91814,55248],{"class":38},[28,91816,51914],{"class":34},[28,91818,2212],{"class":38},[28,91820,51969],{"class":42},[28,91822,1781],{"class":34},[28,91824,91825,91827,91829,91831,91833],{"class":30,"line":2107},[28,91826,55262],{"class":38},[28,91828,51914],{"class":34},[28,91830,2212],{"class":38},[28,91832,51969],{"class":42},[28,91834,1781],{"class":34},[28,91836,91837,91839,91841,91843],{"class":30,"line":2113},[28,91838,55361],{"class":38},[28,91840,51914],{"class":34},[28,91842,90483],{"class":38},[28,91844,1781],{"class":34},[28,91846,91847,91849,91851,91853,91855],{"class":30,"line":2118},[28,91848,55399],{"class":38},[28,91850,51914],{"class":34},[28,91852,1445],{"class":38},[28,91854,51969],{"class":42},[28,91856,1781],{"class":34},[28,91858,91859,91861,91863,91865],{"class":30,"line":2132},[28,91860,57893],{"class":38},[28,91862,51914],{"class":34},[28,91864,61319],{"class":38},[28,91866,1781],{"class":34},[28,91868,91869,91871,91873,91875],{"class":30,"line":2137},[28,91870,57763],{"class":38},[28,91872,51914],{"class":34},[28,91874,52069],{"class":38},[28,91876,1781],{"class":34},[28,91878,91879,91881,91883,91885,91887],{"class":30,"line":2143},[28,91880,90522],{"class":38},[28,91882,51914],{"class":34},[28,91884,108],{"class":38},[28,91886,51969],{"class":42},[28,91888,1781],{"class":34},[28,91890,91891],{"class":30,"line":2164},[28,91892,2677],{"class":34},[28,91894,91895,91897,91899],{"class":30,"line":2169},[28,91896,52894],{"class":34},[28,91898,547],{"class":51777},[28,91900,51784],{"class":34},[28,91902,91903,91905,91907],{"class":30,"line":2183},[28,91904,52262],{"class":34},[28,91906,51811],{"class":51777},[28,91908,51784],{"class":34},[28,91910,91911],{"class":30,"line":2188},[28,91912,2890],{"emptyLinePlaceholder":562},[28,91914,91915,91917,91919],{"class":30,"line":2217},[28,91916,1529],{"class":34},[28,91918,52277],{"class":51777},[28,91920,51784],{"class":34},[28,91922,91923,91925,91927,91929,91931,91933,91935,91937],{"class":30,"line":2222},[28,91924,52621],{"class":34},[28,91926,52088],{"class":51777},[28,91928,53963],{"class":2453},[28,91930,83],{"class":34},[28,91932,53968],{"class":735},[28,91934,55791],{"class":34},[28,91936,52088],{"class":51777},[28,91938,51784],{"class":34},[28,91940,91941,91943,91945,91947,91949,91951,91953,91955],{"class":30,"line":2239},[28,91942,52621],{"class":34},[28,91944,52290],{"class":51777},[28,91946,55716],{"class":2453},[28,91948,83],{"class":34},[28,91950,88751],{"class":735},[28,91952,55791],{"class":34},[28,91954,52290],{"class":51777},[28,91956,51784],{"class":34},[28,91958,91959,91961,91963],{"class":30,"line":2244},[28,91960,52621],{"class":34},[28,91962,52290],{"class":51777},[28,91964,51784],{"class":34},[28,91966,91967,91969,91971,91973,91975,91977,91979,91981],{"class":30,"line":2249},[28,91968,11707],{"class":42},[28,91970,87410],{"class":38},[28,91972,14050],{"class":42},[28,91974,54873],{"class":34},[28,91976,54876],{"class":2453},[28,91978,367],{"class":34},[28,91980,90623],{"class":735},[28,91982,228],{"class":34},[28,91984,91985,91987,91989,91991],{"class":30,"line":2254},[28,91986,52696],{"class":42},[28,91988,52],{"class":34},[28,91990,83],{"class":42},[28,91992,47810],{"class":38},[28,91994,91995,91997,91999],{"class":30,"line":2268},[28,91996,70561],{"class":42},[28,91998,90642],{"class":2453},[28,92000,11339],{"class":34},[28,92002,92003,92005,92007,92009],{"class":30,"line":2273},[28,92004,90649],{"class":34},[28,92006,83],{"class":42},[28,92008,3521],{"class":34},[28,92010,3192],{"class":42},[28,92012,92013],{"class":30,"line":3067},[28,92014,90660],{"class":73},[28,92016,92017],{"class":30,"line":3081},[28,92018,2677],{"class":34},[28,92020,92021],{"class":30,"line":3089},[28,92022,90669],{"class":73},[28,92024,92025],{"class":30,"line":3094},[28,92026,92027],{"class":73},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[28,92029,92030],{"class":30,"line":3100},[28,92031,92032],{"class":73},"    \u002F\u002F 1.声明一个定时器变量\n",[28,92034,92035],{"class":30,"line":3106},[28,92036,92037],{"class":73},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[28,92039,92040],{"class":30,"line":3111},[28,92041,92042],{"class":73},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[28,92044,92045],{"class":30,"line":8436},[28,92046,92047],{"class":73},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[28,92049,92050],{"class":30,"line":8460},[28,92051,92052],{"class":73},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[28,92054,92055,92057,92060,92062,92064,92066,92068],{"class":30,"line":8465},[28,92056,70561],{"class":42},[28,92058,92059],{"class":2453}," throttle",[28,92061,367],{"class":34},[28,92063,91114],{"class":5704},[28,92065,12921],{"class":34},[28,92067,1340],{"class":5704},[28,92069,12928],{"class":34},[28,92071,92072,92074],{"class":30,"line":8471},[28,92073,80249],{"class":42},[28,92075,91127],{"class":34},[28,92077,92078,92080,92082],{"class":30,"line":8498},[28,92079,74459],{"class":42},[28,92081,59395],{"class":42},[28,92083,54929],{"class":34},[28,92085,92086,92088,92090,92092],{"class":30,"line":8503},[28,92087,2987],{"class":42},[28,92089,2148],{"class":34},[28,92091,856],{"class":42},[28,92093,92094],{"class":34},"timer) {\n",[28,92096,92097,92100,92102,92104,92106,92108],{"class":30,"line":8509},[28,92098,92099],{"class":34},"          timer ",[28,92101,83],{"class":42},[28,92103,91168],{"class":2453},[28,92105,367],{"class":34},[28,92107,54926],{"class":42},[28,92109,54929],{"class":34},[28,92111,92112,92115],{"class":30,"line":8521},[28,92113,92114],{"class":2453},"            fn",[28,92116,2466],{"class":34},[28,92118,92119],{"class":30,"line":8533},[28,92120,92121],{"class":73},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[28,92123,92124],{"class":30,"line":8545},[28,92125,92126],{"class":73},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[28,92128,92129,92132,92134],{"class":30,"line":10202},[28,92130,92131],{"class":34},"            timer ",[28,92133,83],{"class":42},[28,92135,92136],{"class":38}," null\n",[28,92138,92139],{"class":30,"line":10227},[28,92140,92141],{"class":73},"            \u002F\u002F 不能用clearTimeout(timer)\n",[28,92143,92144],{"class":30,"line":10250},[28,92145,92146],{"class":73},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[28,92148,92149],{"class":30,"line":10274},[28,92150,92151],{"class":34},"          }, t)\n",[28,92153,92154],{"class":30,"line":10279},[28,92155,3019],{"class":34},[28,92157,92158],{"class":30,"line":10284},[28,92159,52875],{"class":34},[28,92161,92162],{"class":30,"line":10289},[28,92163,2677],{"class":34},[28,92165,92166,92168,92170,92172,92174,92176,92178,92180,92182],{"class":30,"line":10298},[28,92167,90684],{"class":34},[28,92169,58290],{"class":2453},[28,92171,367],{"class":34},[28,92173,90691],{"class":735},[28,92175,12921],{"class":34},[28,92177,91650],{"class":2453},[28,92179,90700],{"class":34},[28,92181,65551],{"class":38},[28,92183,30980],{"class":34},[28,92185,92186,92188,92190],{"class":30,"line":10303},[28,92187,52894],{"class":34},[28,92189,52290],{"class":51777},[28,92191,51784],{"class":34},[28,92193,92194,92196,92198],{"class":30,"line":10309},[28,92195,52262],{"class":34},[28,92197,52277],{"class":51777},[28,92199,51784],{"class":34},[28,92201,92202],{"class":30,"line":10330},[28,92203,2890],{"emptyLinePlaceholder":562},[28,92205,92206,92208,92210],{"class":30,"line":10336},[28,92207,52262],{"class":34},[28,92209,51112],{"class":51777},[28,92211,51784],{"class":34},[605,92213,92215],{"id":92214},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[18,92217,92219],{"className":53544,"code":92218,"language":53546,"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,92220,92221,92229,92237,92242,92247,92252,92257,92261,92269],{"__ignoreMap":23},[28,92222,92223,92225,92227],{"class":30,"line":31},[28,92224,1529],{"class":34},[28,92226,52277],{"class":51777},[28,92228,51784],{"class":34},[28,92230,92231,92233,92235],{"class":30,"line":77},[28,92232,52621],{"class":34},[28,92234,52290],{"class":51777},[28,92236,51784],{"class":34},[28,92238,92239],{"class":30,"line":114},[28,92240,92241],{"class":34},"    let timer = null\n",[28,92243,92244],{"class":30,"line":128},[28,92245,92246],{"class":34},"    timer = setTimeout(() => {\n",[28,92248,92249],{"class":30,"line":393},[28,92250,92251],{"class":34},"      clearTimeout(timer)\n",[28,92253,92254],{"class":30,"line":409},[28,92255,92256],{"class":34},"      console.log(timer)\n",[28,92258,92259],{"class":30,"line":1711},[28,92260,60702],{"class":34},[28,92262,92263,92265,92267],{"class":30,"line":1802},[28,92264,52894],{"class":34},[28,92266,52290],{"class":51777},[28,92268,51784],{"class":34},[28,92270,92271,92273,92275],{"class":30,"line":1808},[28,92272,52262],{"class":34},[28,92274,52277],{"class":51777},[28,92276,51784],{"class":34},[14,92278,92279],{},"输出为1",[14,92281,92282],{},"在开启的定时器里边写清除定时器",[14,92284,92285],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[605,92287,92289],{"id":92288},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92291,92292],{},"页面打开，可以记录上一次的视频播放位置",[14,92294,92295],{},[420,92296],{"alt":23,"src":92297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92299,92300],{},[420,92301],{"alt":23,"src":92302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[18,92304,92306],{"className":51110,"code":92305,"language":51112,"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,92307,92308,92318,92332,92336,92344,92358,92378,92398,92420,92433,92441,92447,92457,92467,92477,92481,92485,92492,92505,92517,92521,92525,92535,92547,92561,92565,92569,92576,92586,92599,92611,92621,92631,92647,92659,92663,92667,92675,92685,92697,92707,92717,92727,92731,92735,92745,92756,92760,92768,92776,92780,92788,92803,92818,92833,92854,92862,92870,92885,92907,92915,92930,92956,92982,93008,93016,93024,93043,93051,93056,93075,93080,93098,93103,93108,93116,93121,93135,93143,93148,93165,93169,93174,93196,93200,93208,93216,93220],{"__ignoreMap":23},[28,92309,92310,92312,92314,92316],{"class":30,"line":31},[28,92311,51774],{"class":34},[28,92313,51778],{"class":51777},[28,92315,51781],{"class":2453},[28,92317,51784],{"class":34},[28,92319,92320,92322,92324,92326,92328,92330],{"class":30,"line":77},[28,92321,1529],{"class":34},[28,92323,51112],{"class":51777},[28,92325,51793],{"class":2453},[28,92327,83],{"class":34},[28,92329,51798],{"class":735},[28,92331,51784],{"class":34},[28,92333,92334],{"class":30,"line":114},[28,92335,2890],{"emptyLinePlaceholder":562},[28,92337,92338,92340,92342],{"class":30,"line":128},[28,92339,1529],{"class":34},[28,92341,51811],{"class":51777},[28,92343,51784],{"class":34},[28,92345,92346,92348,92350,92352,92354,92356],{"class":30,"line":393},[28,92347,52621],{"class":34},[28,92349,51821],{"class":51777},[28,92351,51824],{"class":2453},[28,92353,83],{"class":34},[28,92355,51829],{"class":735},[28,92357,59604],{"class":34},[28,92359,92360,92362,92364,92366,92368,92370,92372,92374,92376],{"class":30,"line":409},[28,92361,52621],{"class":34},[28,92363,51821],{"class":51777},[28,92365,51840],{"class":2453},[28,92367,83],{"class":34},[28,92369,51845],{"class":735},[28,92371,51848],{"class":2453},[28,92373,83],{"class":34},[28,92375,51853],{"class":735},[28,92377,59604],{"class":34},[28,92379,92380,92382,92384,92386,92388,92390,92392,92394,92396],{"class":30,"line":1711},[28,92381,52621],{"class":34},[28,92383,51821],{"class":51777},[28,92385,15406],{"class":2453},[28,92387,83],{"class":34},[28,92389,51868],{"class":735},[28,92391,51848],{"class":2453},[28,92393,83],{"class":34},[28,92395,51875],{"class":735},[28,92397,59604],{"class":34},[28,92399,92400,92402,92404,92406,92408,92411,92413,92415,92418],{"class":30,"line":1802},[28,92401,52621],{"class":34},[28,92403,51821],{"class":51777},[28,92405,15406],{"class":2453},[28,92407,83],{"class":34},[28,92409,92410],{"class":735},"\"referrer\"",[28,92412,51848],{"class":2453},[28,92414,83],{"class":34},[28,92416,92417],{"class":735},"\"never\"",[28,92419,59604],{"class":34},[28,92421,92422,92424,92426,92429,92431],{"class":30,"line":1808},[28,92423,52621],{"class":34},[28,92425,51884],{"class":51777},[28,92427,92428],{"class":34},">综合案例\u003C\u002F",[28,92430,51884],{"class":51777},[28,92432,51784],{"class":34},[28,92434,92435,92437,92439],{"class":30,"line":1820},[28,92436,52621],{"class":34},[28,92438,547],{"class":51777},[28,92440,51784],{"class":34},[28,92442,92443,92445],{"class":30,"line":2102},[28,92444,6891],{"class":51777},[28,92446,16058],{"class":34},[28,92448,92449,92451,92453,92455],{"class":30,"line":2107},[28,92450,55172],{"class":38},[28,92452,51914],{"class":34},[28,92454,822],{"class":38},[28,92456,1781],{"class":34},[28,92458,92459,92461,92463,92465],{"class":30,"line":2113},[28,92460,55183],{"class":38},[28,92462,51914],{"class":34},[28,92464,822],{"class":38},[28,92466,1781],{"class":34},[28,92468,92469,92471,92473,92475],{"class":30,"line":2118},[28,92470,73073],{"class":38},[28,92472,51914],{"class":34},[28,92474,60982],{"class":38},[28,92476,1781],{"class":34},[28,92478,92479],{"class":30,"line":2132},[28,92480,2677],{"class":34},[28,92482,92483],{"class":30,"line":2137},[28,92484,2890],{"emptyLinePlaceholder":562},[28,92486,92487,92490],{"class":30,"line":2143},[28,92488,92489],{"class":2453},"    .container",[28,92491,16058],{"class":34},[28,92493,92494,92496,92498,92501,92503],{"class":30,"line":2164},[28,92495,55248],{"class":38},[28,92497,51914],{"class":34},[28,92499,92500],{"class":38},"1200",[28,92502,51969],{"class":42},[28,92504,1781],{"class":34},[28,92506,92507,92509,92511,92513,92515],{"class":30,"line":2169},[28,92508,55183],{"class":38},[28,92510,51914],{"class":34},[28,92512,822],{"class":38},[28,92514,52033],{"class":38},[28,92516,1781],{"class":34},[28,92518,92519],{"class":30,"line":2183},[28,92520,2677],{"class":34},[28,92522,92523],{"class":30,"line":2188},[28,92524,2890],{"emptyLinePlaceholder":562},[28,92526,92527,92530,92533],{"class":30,"line":2217},[28,92528,92529],{"class":2453},"    .video",[28,92531,92532],{"class":51777}," video",[28,92534,16058],{"class":34},[28,92536,92537,92539,92541,92543,92545],{"class":30,"line":2222},[28,92538,55248],{"class":38},[28,92540,51914],{"class":34},[28,92542,938],{"class":38},[28,92544,954],{"class":42},[28,92546,1781],{"class":34},[28,92548,92549,92551,92553,92555,92557,92559],{"class":30,"line":2239},[28,92550,55172],{"class":38},[28,92552,51914],{"class":34},[28,92554,1320],{"class":38},[28,92556,51969],{"class":42},[28,92558,4581],{"class":38},[28,92560,1781],{"class":34},[28,92562,92563],{"class":30,"line":2244},[28,92564,2677],{"class":34},[28,92566,92567],{"class":30,"line":2249},[28,92568,2890],{"emptyLinePlaceholder":562},[28,92570,92571,92574],{"class":30,"line":2254},[28,92572,92573],{"class":2453},"    .elevator",[28,92575,16058],{"class":34},[28,92577,92578,92580,92582,92584],{"class":30,"line":2268},[28,92579,55236],{"class":38},[28,92581,51914],{"class":34},[28,92583,86710],{"class":38},[28,92585,1781],{"class":34},[28,92587,92588,92590,92592,92595,92597],{"class":30,"line":2273},[28,92589,55424],{"class":38},[28,92591,51914],{"class":34},[28,92593,92594],{"class":38},"280",[28,92596,51969],{"class":42},[28,92598,1781],{"class":34},[28,92600,92601,92603,92605,92607,92609],{"class":30,"line":3067},[28,92602,86904],{"class":38},[28,92604,51914],{"class":34},[28,92606,1320],{"class":38},[28,92608,51969],{"class":42},[28,92610,1781],{"class":34},[28,92612,92613,92615,92617,92619],{"class":30,"line":3081},[28,92614,86717],{"class":38},[28,92616,51914],{"class":34},[28,92618,86722],{"class":38},[28,92620,1781],{"class":34},[28,92622,92623,92625,92627,92629],{"class":30,"line":3089},[28,92624,62198],{"class":38},[28,92626,51914],{"class":34},[28,92628,61319],{"class":38},[28,92630,1781],{"class":34},[28,92632,92633,92635,92637,92639,92641,92643,92645],{"class":30,"line":3094},[28,92634,62454],{"class":38},[28,92636,51914],{"class":34},[28,92638,39],{"class":38},[28,92640,51969],{"class":42},[28,92642,51998],{"class":38},[28,92644,62721],{"class":38},[28,92646,1781],{"class":34},[28,92648,92649,92651,92653,92655,92657],{"class":30,"line":3100},[28,92650,55248],{"class":38},[28,92652,51914],{"class":34},[28,92654,1526],{"class":38},[28,92656,51969],{"class":42},[28,92658,1781],{"class":34},[28,92660,92661],{"class":30,"line":3106},[28,92662,2677],{"class":34},[28,92664,92665],{"class":30,"line":3111},[28,92666,2890],{"emptyLinePlaceholder":562},[28,92668,92669,92671,92673],{"class":30,"line":8436},[28,92670,92573],{"class":2453},[28,92672,1889],{"class":51777},[28,92674,16058],{"class":34},[28,92676,92677,92679,92681,92683],{"class":30,"line":8460},[28,92678,55486],{"class":38},[28,92680,51914],{"class":34},[28,92682,61346],{"class":38},[28,92684,1781],{"class":34},[28,92686,92687,92689,92691,92693,92695],{"class":30,"line":8465},[28,92688,55172],{"class":38},[28,92690,51914],{"class":34},[28,92692,225],{"class":38},[28,92694,51969],{"class":42},[28,92696,1781],{"class":34},[28,92698,92699,92701,92703,92705],{"class":30,"line":8471},[28,92700,64447],{"class":38},[28,92702,51914],{"class":34},[28,92704,55214],{"class":38},[28,92706,1781],{"class":34},[28,92708,92709,92711,92713,92715],{"class":30,"line":8498},[28,92710,57763],{"class":38},[28,92712,51914],{"class":34},[28,92714,52069],{"class":38},[28,92716,1781],{"class":34},[28,92718,92719,92721,92723,92725],{"class":30,"line":8503},[28,92720,57893],{"class":38},[28,92722,51914],{"class":34},[28,92724,62547],{"class":38},[28,92726,1781],{"class":34},[28,92728,92729],{"class":30,"line":8509},[28,92730,2677],{"class":34},[28,92732,92733],{"class":30,"line":8521},[28,92734,2890],{"emptyLinePlaceholder":562},[28,92736,92737,92739,92741,92743],{"class":30,"line":8533},[28,92738,92573],{"class":2453},[28,92740,1889],{"class":51777},[28,92742,64501],{"class":2453},[28,92744,16058],{"class":34},[28,92746,92747,92749,92751,92754],{"class":30,"line":8545},[28,92748,57893],{"class":38},[28,92750,51914],{"class":34},[28,92752,92753],{"class":38},"#1286ff",[28,92755,1781],{"class":34},[28,92757,92758],{"class":30,"line":10202},[28,92759,2677],{"class":34},[28,92761,92762,92764,92766],{"class":30,"line":10227},[28,92763,52894],{"class":34},[28,92765,547],{"class":51777},[28,92767,51784],{"class":34},[28,92769,92770,92772,92774],{"class":30,"line":10250},[28,92771,52262],{"class":34},[28,92773,51811],{"class":51777},[28,92775,51784],{"class":34},[28,92777,92778],{"class":30,"line":10274},[28,92779,2890],{"emptyLinePlaceholder":562},[28,92781,92782,92784,92786],{"class":30,"line":10279},[28,92783,1529],{"class":34},[28,92785,52277],{"class":51777},[28,92787,51784],{"class":34},[28,92789,92790,92792,92794,92796,92798,92801],{"class":30,"line":10284},[28,92791,52621],{"class":34},[28,92793,52088],{"class":51777},[28,92795,53963],{"class":2453},[28,92797,83],{"class":34},[28,92799,92800],{"class":735},"\"container\"",[28,92802,51784],{"class":34},[28,92804,92805,92807,92809,92811,92813,92816],{"class":30,"line":10289},[28,92806,51818],{"class":34},[28,92808,52088],{"class":51777},[28,92810,53963],{"class":2453},[28,92812,83],{"class":34},[28,92814,92815],{"class":735},"\"header\"",[28,92817,51784],{"class":34},[28,92819,92820,92822,92824,92826,92828,92831],{"class":30,"line":10298},[28,92821,55711],{"class":34},[28,92823,80],{"class":51777},[28,92825,61534],{"class":2453},[28,92827,83],{"class":34},[28,92829,92830],{"class":735},"\"http:\u002F\u002Fpip.itcast.cn\"",[28,92832,51784],{"class":34},[28,92834,92835,92837,92839,92841,92843,92846,92848,92850,92852],{"class":30,"line":10303},[28,92836,55779],{"class":34},[28,92838,420],{"class":51777},[28,92840,55716],{"class":2453},[28,92842,83],{"class":34},[28,92844,92845],{"class":735},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[28,92847,55724],{"class":2453},[28,92849,83],{"class":34},[28,92851,8140],{"class":735},[28,92853,59604],{"class":34},[28,92855,92856,92858,92860],{"class":30,"line":10309},[28,92857,55884],{"class":34},[28,92859,80],{"class":51777},[28,92861,51784],{"class":34},[28,92863,92864,92866,92868],{"class":30,"line":10330},[28,92865,52253],{"class":34},[28,92867,52088],{"class":51777},[28,92869,51784],{"class":34},[28,92871,92872,92874,92876,92878,92880,92883],{"class":30,"line":10336},[28,92873,51818],{"class":34},[28,92875,52088],{"class":51777},[28,92877,53963],{"class":2453},[28,92879,83],{"class":34},[28,92881,92882],{"class":735},"\"video\"",[28,92884,51784],{"class":34},[28,92886,92887,92889,92891,92893,92895,92898,92901,92903,92905],{"class":30,"line":10350},[28,92888,55711],{"class":34},[28,92890,28669],{"class":51777},[28,92892,55716],{"class":2453},[28,92894,83],{"class":34},[28,92896,92897],{"class":735},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[28,92899,92900],{"class":2453}," controls",[28,92902,55791],{"class":34},[28,92904,28669],{"class":51777},[28,92906,51784],{"class":34},[28,92908,92909,92911,92913],{"class":30,"line":10356},[28,92910,52253],{"class":34},[28,92912,52088],{"class":51777},[28,92914,51784],{"class":34},[28,92916,92917,92919,92921,92923,92925,92928],{"class":30,"line":10383},[28,92918,51818],{"class":34},[28,92920,52088],{"class":51777},[28,92922,53963],{"class":2453},[28,92924,83],{"class":34},[28,92926,92927],{"class":735},"\"elevator\"",[28,92929,51784],{"class":34},[28,92931,92932,92934,92936,92938,92940,92942,92945,92947,92949,92952,92954],{"class":30,"line":10392},[28,92933,55711],{"class":34},[28,92935,80],{"class":51777},[28,92937,61534],{"class":2453},[28,92939,83],{"class":34},[28,92941,64713],{"class":735},[28,92943,92944],{"class":2453}," data-ref",[28,92946,83],{"class":34},[28,92948,92882],{"class":735},[28,92950,92951],{"class":34},">视频介绍\u003C\u002F",[28,92953,80],{"class":51777},[28,92955,51784],{"class":34},[28,92957,92958,92960,92962,92964,92966,92968,92970,92972,92975,92978,92980],{"class":30,"line":10398},[28,92959,55711],{"class":34},[28,92961,80],{"class":51777},[28,92963,61534],{"class":2453},[28,92965,83],{"class":34},[28,92967,64713],{"class":735},[28,92969,92944],{"class":2453},[28,92971,83],{"class":34},[28,92973,92974],{"class":735},"\"intro\"",[28,92976,92977],{"class":34},">课程简介\u003C\u002F",[28,92979,80],{"class":51777},[28,92981,51784],{"class":34},[28,92983,92984,92986,92988,92990,92992,92994,92996,92998,93001,93004,93006],{"class":30,"line":10406},[28,92985,55711],{"class":34},[28,92987,80],{"class":51777},[28,92989,61534],{"class":2453},[28,92991,83],{"class":34},[28,92993,64713],{"class":735},[28,92995,92944],{"class":2453},[28,92997,83],{"class":34},[28,92999,93000],{"class":735},"\"outline\"",[28,93002,93003],{"class":34},">评论列表\u003C\u002F",[28,93005,80],{"class":51777},[28,93007,51784],{"class":34},[28,93009,93010,93012,93014],{"class":30,"line":10411},[28,93011,52253],{"class":34},[28,93013,52088],{"class":51777},[28,93015,51784],{"class":34},[28,93017,93018,93020,93022],{"class":30,"line":17090},[28,93019,52894],{"class":34},[28,93021,52088],{"class":51777},[28,93023,51784],{"class":34},[28,93025,93026,93028,93030,93032,93034,93037,93039,93041],{"class":30,"line":17096},[28,93027,52621],{"class":34},[28,93029,52290],{"class":51777},[28,93031,55716],{"class":2453},[28,93033,83],{"class":34},[28,93035,93036],{"class":735},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[28,93038,55791],{"class":34},[28,93040,52290],{"class":51777},[28,93042,51784],{"class":34},[28,93044,93045,93047,93049],{"class":30,"line":17119},[28,93046,52621],{"class":34},[28,93048,52290],{"class":51777},[28,93050,51784],{"class":34},[28,93052,93053],{"class":30,"line":17125},[28,93054,93055],{"class":73},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[28,93057,93058,93060,93062,93064,93066,93068,93070,93073],{"class":30,"line":17148},[28,93059,11707],{"class":42},[28,93061,92532],{"class":38},[28,93063,14050],{"class":42},[28,93065,54873],{"class":34},[28,93067,54876],{"class":2453},[28,93069,367],{"class":34},[28,93071,93072],{"class":735},"'video'",[28,93074,228],{"class":34},[28,93076,93077],{"class":30,"line":17162},[28,93078,93079],{"class":73},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[28,93081,93082,93085,93087,93089,93091,93094,93096],{"class":30,"line":17182},[28,93083,93084],{"class":34},"    video.ontimeupdate ",[28,93086,83],{"class":42},[28,93088,88832],{"class":34},[28,93090,91650],{"class":2453},[28,93092,93093],{"class":34},"(() ",[28,93095,85199],{"class":42},[28,93097,16058],{"class":34},[28,93099,93100],{"class":30,"line":17188},[28,93101,93102],{"class":73},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[28,93104,93105],{"class":30,"line":17199},[28,93106,93107],{"class":73},"      \u002F\u002F 控制台输出当前的时间\n",[28,93109,93110,93113],{"class":30,"line":17222},[28,93111,93112],{"class":73},"      \u002F\u002F console.log(video.currentTime)",[28,93114,93115],{"class":73},"  \u002F\u002F获得当前的视频时间\n",[28,93117,93118],{"class":30,"line":17244},[28,93119,93120],{"class":73},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[28,93122,93123,93125,93127,93129,93132],{"class":30,"line":17249},[28,93124,75160],{"class":34},[28,93126,72131],{"class":2453},[28,93128,367],{"class":34},[28,93130,93131],{"class":735},"'currentTime'",[28,93133,93134],{"class":34},", video.currentTime)\n",[28,93136,93137,93139,93141],{"class":30,"line":17255},[28,93138,55012],{"class":34},[28,93140,6898],{"class":38},[28,93142,228],{"class":34},[28,93144,93145],{"class":30,"line":17269},[28,93146,93147],{"class":73},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[28,93149,93150,93153,93156,93158,93161,93163],{"class":30,"line":17282},[28,93151,93152],{"class":34},"    video.",[28,93154,93155],{"class":2453},"onloadeddata",[28,93157,14050],{"class":42},[28,93159,93160],{"class":34}," () ",[28,93162,85199],{"class":42},[28,93164,16058],{"class":34},[28,93166,93167],{"class":30,"line":17287},[28,93168,60489],{"class":73},[28,93170,93171],{"class":30,"line":17301},[28,93172,93173],{"class":73},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[28,93175,93176,93179,93181,93184,93186,93188,93190,93192,93194],{"class":30,"line":17306},[28,93177,93178],{"class":34},"      video.currentTime ",[28,93180,83],{"class":42},[28,93182,93183],{"class":34}," localStorage.",[28,93185,72162],{"class":2453},[28,93187,367],{"class":34},[28,93189,93131],{"class":735},[28,93191,14200],{"class":34},[28,93193,71834],{"class":42},[28,93195,47810],{"class":38},[28,93197,93198],{"class":30,"line":17312},[28,93199,2677],{"class":34},[28,93201,93202,93204,93206],{"class":30,"line":17317},[28,93203,52894],{"class":34},[28,93205,52290],{"class":51777},[28,93207,51784],{"class":34},[28,93209,93210,93212,93214],{"class":30,"line":17331},[28,93211,52262],{"class":34},[28,93213,52277],{"class":51777},[28,93215,51784],{"class":34},[28,93217,93218],{"class":30,"line":17336},[28,93219,2890],{"emptyLinePlaceholder":562},[28,93221,93222,93224,93226],{"class":30,"line":17341},[28,93223,52262],{"class":34},[28,93225,51112],{"class":51777},[28,93227,51784],{"class":34},[547,93229,93230],{},"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":77,"depth":77,"links":93232},[93233,93238,93242,93243,93244,93249,93254,93255,93256,93257,93264,93269,93270,93280,93284,93285,93289],{"id":77168,"depth":77,"text":77169,"children":93234},[93235,93236,93237],{"id":77172,"depth":114,"text":77173},{"id":77197,"depth":114,"text":77198},{"id":77209,"depth":114,"text":77210},{"id":77221,"depth":77,"text":77222,"children":93239},[93240,93241],{"id":77225,"depth":114,"text":77226},{"id":77240,"depth":114,"text":77241},{"id":77292,"depth":77,"text":77293},{"id":77336,"depth":77,"text":77337},{"id":77353,"depth":77,"text":77354,"children":93245},[93246,93247,93248],{"id":77357,"depth":114,"text":77358},{"id":77370,"depth":114,"text":77371},{"id":77475,"depth":114,"text":77476},{"id":77764,"depth":77,"text":77765,"children":93250},[93251,93252,93253],{"id":77768,"depth":114,"text":77769},{"id":78211,"depth":114,"text":78212},{"id":78622,"depth":114,"text":78623},{"id":78685,"depth":77,"text":78686},{"id":78764,"depth":77,"text":78765},{"id":78857,"depth":77,"text":78858},{"id":80702,"depth":77,"text":80703,"children":93258},[93259,93260,93261,93262,93263],{"id":80706,"depth":114,"text":80707},{"id":80718,"depth":114,"text":80719},{"id":80937,"depth":114,"text":80938},{"id":80955,"depth":114,"text":80956},{"id":81015,"depth":114,"text":81016},{"id":85283,"depth":77,"text":85284,"children":93265},[93266,93267,93268],{"id":85287,"depth":114,"text":85288},{"id":85305,"depth":114,"text":85306},{"id":85331,"depth":114,"text":85332},{"id":85340,"depth":77,"text":85341},{"id":85362,"depth":77,"text":85363,"children":93271},[93272,93273,93274,93275,93276,93277,93278,93279],{"id":85366,"depth":114,"text":85367},{"id":85627,"depth":114,"text":85628},{"id":85813,"depth":114,"text":85814},{"id":86180,"depth":114,"text":86181},{"id":86296,"depth":114,"text":86297},{"id":86332,"depth":114,"text":86333},{"id":86379,"depth":114,"text":86380},{"id":86413,"depth":114,"text":86414},{"id":87776,"depth":77,"text":87777,"children":93281},[93282,93283],{"id":87780,"depth":114,"text":87781},{"id":87817,"depth":114,"text":87818},{"id":89172,"depth":77,"text":89173},{"id":89543,"depth":77,"text":89544,"children":93286},[93287,93288],{"id":89547,"depth":114,"text":89548},{"id":89581,"depth":114,"text":89582},{"id":90310,"depth":77,"text":90311,"children":93290},[93291,93292,93293,93294],{"id":90314,"depth":114,"text":90315},{"id":91272,"depth":114,"text":91273},{"id":92214,"depth":114,"text":92215},{"id":92288,"depth":114,"text":92289},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77157,"description":559},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93301,"title":93302,"body":93303,"description":93314,"extension":560,"meta":93315,"navigation":562,"path":93317,"seo":93318,"stem":93319,"__hash__":93320},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93304,"toc":93312},[93305],[14,93306,93307,93308],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[80,93309,93310],{"href":93310,"rel":93311},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24351],{"title":23,"searchDepth":77,"depth":77,"links":93313},[],"三件套第三套学习",{"category":93316},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93302,"description":93314},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93322,"title":93323,"body":93324,"description":559,"extension":560,"meta":93429,"navigation":562,"path":93430,"seo":93431,"stem":93432,"__hash__":93433},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93325,"toc":93424},[93326,93333,93336,93339,93342,93346,93355,93358,93361,93365,93374,93377,93381,93384,93404,93407,93421],[14,93327,93328],{},[80,93329,93332],{"href":93330,"rel":93331},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24351],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93334,93323],{"id":93335},"_1安装",[14,93337,93338],{},"numpy是科学计算基础库,底层是C语言",[14,93340,93341],{},"三种方式：",[60,93343,93345],{"id":93344},"_11-通过pip安装","1.1 通过pip安装",[18,93347,93349],{"className":20,"code":93348,"language":22,"meta":23,"style":23},"pip install numpy\n",[25,93350,93351],{"__ignoreMap":23},[28,93352,93353],{"class":30,"line":31},[28,93354,93348],{"class":34},[14,93356,93357],{},"首选方式，自动处理依赖项",[14,93359,93360],{},"在提示系统命令符中使用cmd",[60,93362,93364],{"id":93363},"_12-通过anaconda安装","1.2 通过Anaconda安装",[18,93366,93368],{"className":20,"code":93367,"language":22,"meta":23,"style":23},"conda install numpy\n",[25,93369,93370],{"__ignoreMap":23},[28,93371,93372],{"class":30,"line":31},[28,93373,93367],{"class":34},[14,93375,93376],{},"自动解决环境依赖",[60,93378,93380],{"id":93379},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93382,93383],{},"对于Debian\u002FUbuntu",[18,93385,93387],{"className":20,"code":93386,"language":22,"meta":23,"style":23},"sudo apt-get install python3-numpy\n",[25,93388,93389],{"__ignoreMap":23},[28,93390,93391,93394,93396,93399,93401],{"class":30,"line":31},[28,93392,93393],{"class":34},"sudo apt",[28,93395,445],{"class":42},[28,93397,93398],{"class":34},"get install python3",[28,93400,445],{"class":42},[28,93402,93403],{"class":34},"numpy\n",[14,93405,93406],{},"对于Fedora:",[18,93408,93410],{"className":20,"code":93409,"language":22,"meta":23,"style":23},"sudo dnf install python3-numpy\n",[25,93411,93412],{"__ignoreMap":23},[28,93413,93414,93417,93419],{"class":30,"line":31},[28,93415,93416],{"class":34},"sudo dnf install python3",[28,93418,445],{"class":42},[28,93420,93403],{"class":34},[547,93422,93423],{},"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":77,"depth":77,"links":93425},[93426,93427,93428],{"id":93344,"depth":77,"text":93345},{"id":93363,"depth":77,"text":93364},{"id":93379,"depth":77,"text":93380},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93323,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93435,"title":93436,"body":93437,"description":559,"extension":560,"meta":93548,"navigation":562,"path":93549,"seo":93550,"stem":93551,"__hash__":93552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93438,"toc":93546},[93439,93442,93445,93448,93451,93454,93457,93460,93463,93466,93540,93543],[10,93440,93436],{"id":93441},"_10算数函数",[14,93443,93444],{},"加减乘除运算跟python基础语法没区别",[14,93446,93447],{},"除了python那种方法外还可以使用函数",[14,93449,93450],{},"加：np.add(a,b)",[14,93452,93453],{},"减：np.subtract(a,b)",[14,93455,93456],{},"乘：np.multiply(a,b)",[14,93458,93459],{},"除：np.divide(a,b) == a\u002Fb",[14,93461,93462],{},"取余：np.mod(a,b) == a%b",[14,93464,93465],{},"必须会的用法：",[18,93467,93469],{"className":20,"code":93468,"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,93470,93471,93491,93512,93522,93535],{"__ignoreMap":23},[28,93472,93473,93475,93477,93479,93481,93483,93485,93487,93489],{"class":30,"line":31},[28,93474,80],{"class":34},[28,93476,83],{"class":42},[28,93478,218],{"class":34},[28,93480,1045],{"class":38},[28,93482,320],{"class":34},[28,93484,98],{"class":38},[28,93486,90],{"class":34},[28,93488,98],{"class":38},[28,93490,228],{"class":34},[28,93492,93493,93495,93497,93500,93502,93504,93506,93508,93510],{"class":30,"line":77},[28,93494,117],{"class":34},[28,93496,83],{"class":42},[28,93498,93499],{"class":34},"np.array([",[28,93501,225],{"class":38},[28,93503,90],{"class":34},[28,93505,225],{"class":38},[28,93507,90],{"class":34},[28,93509,225],{"class":38},[28,93511,5145],{"class":34},[28,93513,93514,93517,93519],{"class":30,"line":114},[28,93515,93516],{"class":34},"result",[28,93518,83],{"class":42},[28,93520,93521],{"class":34},"np.empty_like(a)\n",[28,93523,93524,93527,93530,93532],{"class":30,"line":128},[28,93525,93526],{"class":34},"np.add(a,b,",[28,93528,93529],{"class":5704},"out",[28,93531,83],{"class":42},[28,93533,93534],{"class":34},"result)\n",[28,93536,93537],{"class":30,"line":393},[28,93538,93539],{"class":34},"result\n",[14,93541,93542],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[547,93544,93545],{},"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":77,"depth":77,"links":93547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93436,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93554,"title":93555,"body":93556,"description":559,"extension":560,"meta":94315,"navigation":562,"path":94316,"seo":94317,"stem":94318,"__hash__":94319},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93557,"toc":94302},[93558,93561,93564,93567,93571,93610,93614,93658,93718,93722,93725,93764,93766,93809,93813,93849,93853,93922,93926,93990,93994,93997,94000,94003,94006,94042,94046,94086,94090,94162,94165,94169,94232,94236,94299],[10,93559,93555],{"id":93560},"_11统计函数",[14,93562,93563],{},"sum max min mean",[14,93565,93566],{},"这些有axis参数，可以指定方向",[60,93568,93570],{"id":93569},"_111-sum求和函数","11.1 sum()求和函数",[18,93572,93574],{"className":20,"code":93573,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[25,93575,93576,93581,93602],{"__ignoreMap":23},[28,93577,93578],{"class":30,"line":31},[28,93579,93580],{"class":73},"#创建一维数组\n",[28,93582,93583,93585,93587,93590,93592,93594,93596,93598,93600],{"class":30,"line":77},[28,93584,80],{"class":34},[28,93586,83],{"class":42},[28,93588,93589],{"class":34},"np.random.randint(",[28,93591,39],{"class":38},[28,93593,90],{"class":34},[28,93595,938],{"class":38},[28,93597,90],{"class":34},[28,93599,1320],{"class":38},[28,93601,228],{"class":34},[28,93603,93604,93607],{"class":30,"line":114},[28,93605,93606],{"class":34},"np.sum(a)",[28,93608,93609],{"class":73},"#求和\n",[60,93611,93613],{"id":93612},"_112-max求最大值函数","11.2 max()求最大值函数",[18,93615,93617],{"className":20,"code":93616,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[25,93618,93619,93623,93643,93648,93653],{"__ignoreMap":23},[28,93620,93621],{"class":30,"line":31},[28,93622,93580],{"class":73},[28,93624,93625,93627,93629,93631,93633,93635,93637,93639,93641],{"class":30,"line":77},[28,93626,80],{"class":34},[28,93628,83],{"class":42},[28,93630,93589],{"class":34},[28,93632,39],{"class":38},[28,93634,90],{"class":34},[28,93636,938],{"class":38},[28,93638,90],{"class":34},[28,93640,1320],{"class":38},[28,93642,228],{"class":34},[28,93644,93645],{"class":30,"line":114},[28,93646,93647],{"class":34},"np.max(a)\n",[28,93649,93650],{"class":30,"line":128},[28,93651,93652],{"class":73},"#最大索引(求最大元素的索引)arg\n",[28,93654,93655],{"class":30,"line":393},[28,93656,93657],{"class":34},"np.argmax(a)\n",[18,93659,93661],{"className":20,"code":93660,"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,93662,93663,93684,93704,93708],{"__ignoreMap":23},[28,93664,93665,93667,93669,93672,93674,93676,93678,93680,93682],{"class":30,"line":31},[28,93666,11405],{"class":34},[28,93668,83],{"class":42},[28,93670,93671],{"class":34}," np.array([",[28,93673,39],{"class":38},[28,93675,12921],{"class":34},[28,93677,108],{"class":38},[28,93679,12921],{"class":34},[28,93681,98],{"class":38},[28,93683,5145],{"class":34},[28,93685,93686,93688,93690,93692,93694,93696,93698,93700,93702],{"class":30,"line":77},[28,93687,11431],{"class":34},[28,93689,83],{"class":42},[28,93691,93671],{"class":34},[28,93693,98],{"class":38},[28,93695,12921],{"class":34},[28,93697,93],{"class":38},[28,93699,12921],{"class":34},[28,93701,103],{"class":38},[28,93703,5145],{"class":34},[28,93705,93706],{"class":30,"line":114},[28,93707,2890],{"emptyLinePlaceholder":562},[28,93709,93710,93712,93715],{"class":30,"line":128},[28,93711,30898],{"class":38},[28,93713,93714],{"class":34},"(np.maximum(a, b))   ",[28,93716,93717],{"class":73},"# [3 5 4]，每个位置上取较大值\n",[60,93719,93721],{"id":93720},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93723,93724],{},"①一维数组：",[18,93726,93728],{"className":20,"code":93727,"language":22,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[25,93729,93730,93734,93754,93759],{"__ignoreMap":23},[28,93731,93732],{"class":30,"line":31},[28,93733,93580],{"class":73},[28,93735,93736,93738,93740,93742,93744,93746,93748,93750,93752],{"class":30,"line":77},[28,93737,80],{"class":34},[28,93739,83],{"class":42},[28,93741,93589],{"class":34},[28,93743,39],{"class":38},[28,93745,90],{"class":34},[28,93747,938],{"class":38},[28,93749,90],{"class":34},[28,93751,1320],{"class":38},[28,93753,228],{"class":34},[28,93755,93756],{"class":30,"line":114},[28,93757,93758],{"class":73},"#求平均值\n",[28,93760,93761],{"class":30,"line":128},[28,93762,93763],{"class":34},"np.mean(a)\n",[14,93765,291],{},[18,93767,93769],{"className":20,"code":93768,"language":22,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[25,93770,93771,93775,93799,93804],{"__ignoreMap":23},[28,93772,93773],{"class":30,"line":31},[28,93774,301],{"class":73},[28,93776,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797],{"class":30,"line":77},[28,93778,306],{"class":34},[28,93780,83],{"class":42},[28,93782,218],{"class":34},[28,93784,39],{"class":38},[28,93786,90],{"class":34},[28,93788,317],{"class":38},[28,93790,320],{"class":34},[28,93792,98],{"class":38},[28,93794,90],{"class":34},[28,93796,103],{"class":38},[28,93798,228],{"class":34},[28,93800,93801],{"class":30,"line":114},[28,93802,93803],{"class":73},"#对数组中的所有数求平均\n",[28,93805,93806],{"class":30,"line":128},[28,93807,93808],{"class":34},"np.mean(aa)\n",[60,93810,93812],{"id":93811},"_114-median求中位数函数","11.4 median()求中位数函数",[18,93814,93816],{"className":20,"code":93815,"language":22,"meta":23,"style":23},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[25,93817,93818,93823,93839,93844],{"__ignoreMap":23},[28,93819,93820],{"class":30,"line":31},[28,93821,93822],{"class":73},"#求中位数\n",[28,93824,93825,93827,93829,93831,93833,93835,93837],{"class":30,"line":77},[28,93826,117],{"class":34},[28,93828,83],{"class":42},[28,93830,218],{"class":34},[28,93832,39],{"class":38},[28,93834,90],{"class":34},[28,93836,225],{"class":38},[28,93838,228],{"class":34},[28,93840,93841],{"class":30,"line":114},[28,93842,93843],{"class":34},"np.median(b)\n",[28,93845,93846],{"class":30,"line":128},[28,93847,93848],{"class":73},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[60,93850,93852],{"id":93851},"_115-power求幂运算函数","11.5 power()求幂运算函数",[18,93854,93856],{"className":20,"code":93855,"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,93857,93858,93874,93879,93884,93893,93898,93907],{"__ignoreMap":23},[28,93859,93860,93862,93864,93866,93868,93870,93872],{"class":30,"line":31},[28,93861,117],{"class":34},[28,93863,83],{"class":42},[28,93865,218],{"class":34},[28,93867,39],{"class":38},[28,93869,90],{"class":34},[28,93871,225],{"class":38},[28,93873,228],{"class":34},[28,93875,93876],{"class":30,"line":77},[28,93877,93878],{"class":73},"#幂运算\n",[28,93880,93881],{"class":30,"line":114},[28,93882,93883],{"class":73},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[28,93885,93886,93889,93891],{"class":30,"line":128},[28,93887,93888],{"class":34},"np.power(b,",[28,93890,93],{"class":38},[28,93892,228],{"class":34},[28,93894,93895],{"class":30,"line":393},[28,93896,93897],{"class":73},"#或者以下代码，将数据存储起来\n",[28,93899,93900,93902,93904],{"class":30,"line":409},[28,93901,1465],{"class":34},[28,93903,83],{"class":42},[28,93905,93906],{"class":34},"np.empty_like(b)\n",[28,93908,93909,93911,93913,93915,93917,93919],{"class":30,"line":1711},[28,93910,93888],{"class":34},[28,93912,93],{"class":38},[28,93914,90],{"class":34},[28,93916,93529],{"class":5704},[28,93918,83],{"class":42},[28,93920,93921],{"class":34},"y)\n",[60,93923,93925],{"id":93924},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[18,93927,93929],{"className":20,"code":93928,"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,93930,93931,93947,93952,93957,93961,93979],{"__ignoreMap":23},[28,93932,93933,93935,93937,93939,93941,93943,93945],{"class":30,"line":31},[28,93934,117],{"class":34},[28,93936,83],{"class":42},[28,93938,218],{"class":34},[28,93940,39],{"class":38},[28,93942,90],{"class":34},[28,93944,225],{"class":38},[28,93946,228],{"class":34},[28,93948,93949],{"class":30,"line":77},[28,93950,93951],{"class":73},"#开方\n",[28,93953,93954],{"class":30,"line":114},[28,93955,93956],{"class":34},"np.sqrt(b)\n",[28,93958,93959],{"class":30,"line":128},[28,93960,93897],{"class":73},[28,93962,93963,93965,93967,93970,93973,93975,93977],{"class":30,"line":393},[28,93964,1465],{"class":34},[28,93966,83],{"class":42},[28,93968,93969],{"class":34},"np.empty_like(b,",[28,93971,93972],{"class":5704},"dtype",[28,93974,83],{"class":42},[28,93976,675],{"class":38},[28,93978,228],{"class":34},[28,93980,93981,93984,93986,93988],{"class":30,"line":409},[28,93982,93983],{"class":34},"np.sqrt(b,",[28,93985,93529],{"class":5704},[28,93987,83],{"class":42},[28,93989,93921],{"class":34},[60,93991,93993],{"id":93992},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93995,93996],{},"对数组中的元素累计求和，可指定轴",[14,93998,93999],{},"#累计求和的意思是：",[14,94001,94002],{},"a = np.array([1, 2, 3, 4])",[14,94004,94005],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[18,94007,94009],{"className":20,"code":94008,"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,94010,94011,94027,94032,94037],{"__ignoreMap":23},[28,94012,94013,94015,94017,94019,94021,94023,94025],{"class":30,"line":31},[28,94014,117],{"class":34},[28,94016,83],{"class":42},[28,94018,218],{"class":34},[28,94020,39],{"class":38},[28,94022,90],{"class":34},[28,94024,225],{"class":38},[28,94026,228],{"class":34},[28,94028,94029],{"class":30,"line":77},[28,94030,94031],{"class":34},"np.cumsum(b)\n",[28,94033,94034],{"class":30,"line":114},[28,94035,94036],{"class":73},"#结果：\n",[28,94038,94039],{"class":30,"line":128},[28,94040,94041],{"class":73},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[60,94043,94045],{"id":94044},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[18,94047,94049],{"className":20,"code":94048,"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,94050,94051,94067,94072,94077,94081],{"__ignoreMap":23},[28,94052,94053,94055,94057,94059,94061,94063,94065],{"class":30,"line":31},[28,94054,117],{"class":34},[28,94056,83],{"class":42},[28,94058,218],{"class":34},[28,94060,39],{"class":38},[28,94062,90],{"class":34},[28,94064,225],{"class":38},[28,94066,228],{"class":34},[28,94068,94069],{"class":30,"line":77},[28,94070,94071],{"class":73},"#对数组中的元素累计求积，可指定轴\n",[28,94073,94074],{"class":30,"line":114},[28,94075,94076],{"class":34},"np.cumprod(b)\n",[28,94078,94079],{"class":30,"line":128},[28,94080,94036],{"class":73},[28,94082,94083],{"class":30,"line":393},[28,94084,94085],{"class":73},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[60,94087,94089],{"id":94088},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[18,94091,94093],{"className":20,"code":94092,"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,94094,94095,94100,94148,94153,94157],{"__ignoreMap":23},[28,94096,94097],{"class":30,"line":31},[28,94098,94099],{"class":73},"#删除数组中的重复数据，并对数据进行排序\n",[28,94101,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128,94130,94132,94134,94136,94138,94140,94142,94144,94146],{"class":30,"line":77},[28,94103,80],{"class":34},[28,94105,83],{"class":42},[28,94107,93499],{"class":34},[28,94109,39],{"class":38},[28,94111,90],{"class":34},[28,94113,93],{"class":38},[28,94115,90],{"class":34},[28,94117,98],{"class":38},[28,94119,90],{"class":34},[28,94121,1121],{"class":38},[28,94123,90],{"class":34},[28,94125,98],{"class":38},[28,94127,90],{"class":34},[28,94129,225],{"class":38},[28,94131,90],{"class":34},[28,94133,828],{"class":38},[28,94135,90],{"class":34},[28,94137,822],{"class":38},[28,94139,90],{"class":34},[28,94141,1395],{"class":38},[28,94143,90],{"class":34},[28,94145,103],{"class":38},[28,94147,5145],{"class":34},[28,94149,94150],{"class":30,"line":114},[28,94151,94152],{"class":34},"np.unique(a)\n",[28,94154,94155],{"class":30,"line":128},[28,94156,94036],{"class":73},[28,94158,94159],{"class":30,"line":393},[28,94160,94161],{"class":73},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94163,94164],{},"升序形式排序",[60,94166,94168],{"id":94167},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[18,94170,94172],{"className":20,"code":94171,"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,94173,94174,94222,94227],{"__ignoreMap":23},[28,94175,94176,94178,94180,94182,94184,94186,94188,94190,94192,94194,94196,94198,94200,94202,94204,94206,94208,94210,94212,94214,94216,94218,94220],{"class":30,"line":31},[28,94177,80],{"class":34},[28,94179,83],{"class":42},[28,94181,93499],{"class":34},[28,94183,39],{"class":38},[28,94185,90],{"class":34},[28,94187,93],{"class":38},[28,94189,90],{"class":34},[28,94191,98],{"class":38},[28,94193,90],{"class":34},[28,94195,1121],{"class":38},[28,94197,90],{"class":34},[28,94199,98],{"class":38},[28,94201,90],{"class":34},[28,94203,225],{"class":38},[28,94205,90],{"class":34},[28,94207,828],{"class":38},[28,94209,90],{"class":34},[28,94211,822],{"class":38},[28,94213,90],{"class":34},[28,94215,1395],{"class":38},[28,94217,90],{"class":34},[28,94219,103],{"class":38},[28,94221,5145],{"class":34},[28,94223,94224],{"class":30,"line":77},[28,94225,94226],{"class":73},"#返回数组中非零元素的索引\n",[28,94228,94229],{"class":30,"line":114},[28,94230,94231],{"class":34},"np.nonzero(a)\n",[60,94233,94235],{"id":94234},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[18,94237,94239],{"className":20,"code":94238,"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,94240,94241,94289,94294],{"__ignoreMap":23},[28,94242,94243,94245,94247,94249,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285,94287],{"class":30,"line":31},[28,94244,80],{"class":34},[28,94246,83],{"class":42},[28,94248,93499],{"class":34},[28,94250,39],{"class":38},[28,94252,90],{"class":34},[28,94254,93],{"class":38},[28,94256,90],{"class":34},[28,94258,98],{"class":38},[28,94260,90],{"class":34},[28,94262,1121],{"class":38},[28,94264,90],{"class":34},[28,94266,98],{"class":38},[28,94268,90],{"class":34},[28,94270,225],{"class":38},[28,94272,90],{"class":34},[28,94274,828],{"class":38},[28,94276,90],{"class":34},[28,94278,822],{"class":38},[28,94280,90],{"class":34},[28,94282,1395],{"class":38},[28,94284,90],{"class":34},[28,94286,103],{"class":38},[28,94288,5145],{"class":34},[28,94290,94291],{"class":30,"line":77},[28,94292,94293],{"class":73},"#计算一组数中最大值与最小值的差，可指定轴\n",[28,94295,94296],{"class":30,"line":114},[28,94297,94298],{"class":34},"np.ptp(a)\n",[547,94300,94301],{},"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":77,"depth":77,"links":94303},[94304,94305,94306,94307,94308,94309,94310,94311,94312,94313,94314],{"id":93569,"depth":77,"text":93570},{"id":93612,"depth":77,"text":93613},{"id":93720,"depth":77,"text":93721},{"id":93811,"depth":77,"text":93812},{"id":93851,"depth":77,"text":93852},{"id":93924,"depth":77,"text":93925},{"id":93992,"depth":77,"text":93993},{"id":94044,"depth":77,"text":94045},{"id":94088,"depth":77,"text":94089},{"id":94167,"depth":77,"text":94168},{"id":94234,"depth":77,"text":94235},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93555,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94321,"title":94322,"body":94323,"description":559,"extension":560,"meta":94978,"navigation":562,"path":94979,"seo":94980,"stem":94981,"__hash__":94982},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94324,"toc":94966},[94325,94328,94332,94335,94551,94555,94558,94767,94771,94837,94842,94846,94849,94852,94890,94894,94897,94902,94906,94909,94912,94917,94921,94924,94928,94931,94934,94939,94943,94946,94949,94954,94958,94963],[10,94326,94322],{"id":94327},"_12其他常用函数",[60,94329,94331],{"id":94330},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94333,94334],{},"将数组的数据按照行列复制扩展",[18,94336,94338],{"className":20,"code":94337,"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,94339,94340,94356,94365,94369,94374,94379,94392,94396,94401,94406,94411,94415,94420,94444,94456,94460,94464,94469,94474,94479,94484,94488,94501,94505,94509,94514,94519,94524,94529,94534,94538,94542,94547],{"__ignoreMap":23},[28,94341,94342,94344,94346,94348,94350,94352,94354],{"class":30,"line":31},[28,94343,80],{"class":34},[28,94345,83],{"class":42},[28,94347,218],{"class":34},[28,94349,39],{"class":38},[28,94351,90],{"class":34},[28,94353,108],{"class":38},[28,94355,228],{"class":34},[28,94357,94358,94361,94363],{"class":30,"line":77},[28,94359,94360],{"class":34},"np.tile(a,",[28,94362,93],{"class":38},[28,94364,228],{"class":34},[28,94366,94367],{"class":30,"line":114},[28,94368,94036],{"class":73},[28,94370,94371],{"class":30,"line":128},[28,94372,94373],{"class":73},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[28,94375,94376],{"class":30,"line":393},[28,94377,94378],{"class":73},"#行复制两次，列复制三次\n",[28,94380,94381,94384,94386,94388,94390],{"class":30,"line":409},[28,94382,94383],{"class":34},"np.tile(a,(",[28,94385,93],{"class":38},[28,94387,90],{"class":34},[28,94389,98],{"class":38},[28,94391,30980],{"class":34},[28,94393,94394],{"class":30,"line":1711},[28,94395,94036],{"class":73},[28,94397,94398],{"class":30,"line":1802},[28,94399,94400],{"class":735},"'''\n",[28,94402,94403],{"class":30,"line":1808},[28,94404,94405],{"class":735},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[28,94407,94408],{"class":30,"line":1820},[28,94409,94410],{"class":735},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[28,94412,94413],{"class":30,"line":2102},[28,94414,94400],{"class":735},[28,94416,94417],{"class":30,"line":2107},[28,94418,94419],{"class":73},"#创建二维数组\n",[28,94421,94422,94424,94426,94428,94430,94432,94434,94436,94438,94440,94442],{"class":30,"line":2113},[28,94423,306],{"class":34},[28,94425,83],{"class":42},[28,94427,218],{"class":34},[28,94429,39],{"class":38},[28,94431,90],{"class":34},[28,94433,317],{"class":38},[28,94435,320],{"class":34},[28,94437,103],{"class":38},[28,94439,90],{"class":34},[28,94441,98],{"class":38},[28,94443,228],{"class":34},[28,94445,94446,94449,94451,94453],{"class":30,"line":2118},[28,94447,94448],{"class":34},"np.tile(aa,",[28,94450,93],{"class":38},[28,94452,1054],{"class":34},[28,94454,94455],{"class":73},"#一个数的时候就是行\n",[28,94457,94458],{"class":30,"line":2132},[28,94459,94036],{"class":73},[28,94461,94462],{"class":30,"line":2137},[28,94463,94400],{"class":735},[28,94465,94466],{"class":30,"line":2143},[28,94467,94468],{"class":735},"array([[ 1,  2,  3,  1,  2,  3],\n",[28,94470,94471],{"class":30,"line":2164},[28,94472,94473],{"class":735},"       [ 4,  5,  6,  4,  5,  6],\n",[28,94475,94476],{"class":30,"line":2169},[28,94477,94478],{"class":735},"       [ 7,  8,  9,  7,  8,  9],\n",[28,94480,94481],{"class":30,"line":2183},[28,94482,94483],{"class":735},"       [10, 11, 12, 10, 11, 12]])\n",[28,94485,94486],{"class":30,"line":2188},[28,94487,94400],{"class":735},[28,94489,94490,94493,94495,94497,94499],{"class":30,"line":2217},[28,94491,94492],{"class":34},"np.tile(aa,(",[28,94494,93],{"class":38},[28,94496,90],{"class":34},[28,94498,98],{"class":38},[28,94500,30980],{"class":34},[28,94502,94503],{"class":30,"line":2222},[28,94504,94036],{"class":73},[28,94506,94507],{"class":30,"line":2239},[28,94508,94400],{"class":735},[28,94510,94511],{"class":30,"line":2244},[28,94512,94513],{"class":735},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94515,94516],{"class":30,"line":2249},[28,94517,94518],{"class":735},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[28,94520,94521],{"class":30,"line":2254},[28,94522,94523],{"class":735},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[28,94525,94526],{"class":30,"line":2268},[28,94527,94528],{"class":735},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[28,94530,94531],{"class":30,"line":2273},[28,94532,94533],{"class":735},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94535,94536],{"class":30,"line":3067},[28,94537,94518],{"class":735},[28,94539,94540],{"class":30,"line":3081},[28,94541,94523],{"class":735},[28,94543,94544],{"class":30,"line":3089},[28,94545,94546],{"class":735},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[28,94548,94549],{"class":30,"line":3094},[28,94550,94400],{"class":735},[60,94552,94554],{"id":94553},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94556,94557],{},"repeat()将数组中的每个元素重复若干次",[18,94559,94561],{"className":20,"code":94560,"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,94562,94563,94579,94588,94592,94597,94621,94626,94635,94639,94644,94648,94653,94669,94673,94677,94682,94687,94692,94696,94701,94705,94710,94715,94719,94735,94739,94743,94748,94753,94758,94763],{"__ignoreMap":23},[28,94564,94565,94567,94569,94571,94573,94575,94577],{"class":30,"line":31},[28,94566,80],{"class":34},[28,94568,83],{"class":42},[28,94570,218],{"class":34},[28,94572,39],{"class":38},[28,94574,90],{"class":34},[28,94576,108],{"class":38},[28,94578,228],{"class":34},[28,94580,94581,94584,94586],{"class":30,"line":77},[28,94582,94583],{"class":34},"np.repeat(a,",[28,94585,98],{"class":38},[28,94587,228],{"class":34},[28,94589,94590],{"class":30,"line":114},[28,94591,94036],{"class":73},[28,94593,94594],{"class":30,"line":128},[28,94595,94596],{"class":73},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[28,94598,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619],{"class":30,"line":393},[28,94600,306],{"class":34},[28,94602,83],{"class":42},[28,94604,218],{"class":34},[28,94606,39],{"class":38},[28,94608,90],{"class":34},[28,94610,317],{"class":38},[28,94612,320],{"class":34},[28,94614,103],{"class":38},[28,94616,90],{"class":34},[28,94618,98],{"class":38},[28,94620,228],{"class":34},[28,94622,94623],{"class":30,"line":409},[28,94624,94625],{"class":73},"#这个重复之后二维变成一维\n",[28,94627,94628,94631,94633],{"class":30,"line":1711},[28,94629,94630],{"class":34},"np.repeat(aa,",[28,94632,93],{"class":38},[28,94634,228],{"class":34},[28,94636,94637],{"class":30,"line":1802},[28,94638,94400],{"class":735},[28,94640,94641],{"class":30,"line":1808},[28,94642,94643],{"class":735},"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,94645,94646],{"class":30,"line":1820},[28,94647,94400],{"class":735},[28,94649,94650],{"class":30,"line":2102},[28,94651,94652],{"class":73},"#指定axis\n",[28,94654,94655,94657,94659,94661,94663,94665,94667],{"class":30,"line":2107},[28,94656,94630],{"class":34},[28,94658,93],{"class":38},[28,94660,90],{"class":34},[28,94662,47991],{"class":5704},[28,94664,83],{"class":42},[28,94666,822],{"class":38},[28,94668,228],{"class":34},[28,94670,94671],{"class":30,"line":2113},[28,94672,94036],{"class":73},[28,94674,94675],{"class":30,"line":2118},[28,94676,94400],{"class":735},[28,94678,94679],{"class":30,"line":2132},[28,94680,94681],{"class":735},"array([[ 1,  2,  3],\n",[28,94683,94684],{"class":30,"line":2137},[28,94685,94686],{"class":735},"       [ 1,  2,  3],\n",[28,94688,94689],{"class":30,"line":2143},[28,94690,94691],{"class":735},"       [ 4,  5,  6],\n",[28,94693,94694],{"class":30,"line":2164},[28,94695,94691],{"class":735},[28,94697,94698],{"class":30,"line":2169},[28,94699,94700],{"class":735},"       [ 7,  8,  9],\n",[28,94702,94703],{"class":30,"line":2183},[28,94704,94700],{"class":735},[28,94706,94707],{"class":30,"line":2188},[28,94708,94709],{"class":735},"       [10, 11, 12],\n",[28,94711,94712],{"class":30,"line":2217},[28,94713,94714],{"class":735},"       [10, 11, 12]])\n",[28,94716,94717],{"class":30,"line":2222},[28,94718,94400],{"class":735},[28,94720,94721,94723,94725,94727,94729,94731,94733],{"class":30,"line":2239},[28,94722,94630],{"class":34},[28,94724,93],{"class":38},[28,94726,90],{"class":34},[28,94728,47991],{"class":5704},[28,94730,83],{"class":42},[28,94732,39],{"class":38},[28,94734,228],{"class":34},[28,94736,94737],{"class":30,"line":2244},[28,94738,94036],{"class":73},[28,94740,94741],{"class":30,"line":2249},[28,94742,94400],{"class":735},[28,94744,94745],{"class":30,"line":2254},[28,94746,94747],{"class":735},"array([[ 1,  1,  2,  2,  3,  3],\n",[28,94749,94750],{"class":30,"line":2268},[28,94751,94752],{"class":735},"       [ 4,  4,  5,  5,  6,  6],\n",[28,94754,94755],{"class":30,"line":2273},[28,94756,94757],{"class":735},"       [ 7,  7,  8,  8,  9,  9],\n",[28,94759,94760],{"class":30,"line":3067},[28,94761,94762],{"class":735},"       [10, 10, 11, 11, 12, 12]])\n",[28,94764,94765],{"class":30,"line":3081},[28,94766,94400],{"class":735},[60,94768,94770],{"id":94769},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[18,94772,94774],{"className":20,"code":94773,"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,94775,94776,94792,94797,94809,94813,94818,94828,94832],{"__ignoreMap":23},[28,94777,94778,94780,94782,94784,94786,94788,94790],{"class":30,"line":31},[28,94779,80],{"class":34},[28,94781,83],{"class":42},[28,94783,218],{"class":34},[28,94785,39],{"class":38},[28,94787,90],{"class":34},[28,94789,108],{"class":38},[28,94791,228],{"class":34},[28,94793,94794],{"class":30,"line":77},[28,94795,94796],{"class":73},"#array([，2，3，4])\n",[28,94798,94799,94802,94804,94806],{"class":30,"line":114},[28,94800,94801],{"class":34},"np.roll(a,",[28,94803,93],{"class":38},[28,94805,1054],{"class":34},[28,94807,94808],{"class":73},"#传正数向后调多少位，传负数向前调多少位\n",[28,94810,94811],{"class":30,"line":128},[28,94812,94036],{"class":73},[28,94814,94815],{"class":30,"line":393},[28,94816,94817],{"class":73},"#array([3, 4, 1, 2])\n",[28,94819,94820,94822,94824,94826],{"class":30,"line":409},[28,94821,94801],{"class":34},[28,94823,445],{"class":42},[28,94825,39],{"class":38},[28,94827,228],{"class":34},[28,94829,94830],{"class":30,"line":1711},[28,94831,94036],{"class":73},[28,94833,94834],{"class":30,"line":1802},[28,94835,94836],{"class":73},"#array([2, 3, 4, 1])\n",[14,94838,94839],{},[420,94840],{"alt":23,"src":94841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[60,94843,94845],{"id":94844},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94847,94848],{},"resize()重新调整数组的大小",[14,94850,94851],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[18,94853,94855],{"className":20,"code":94854,"language":22,"meta":23,"style":23},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[25,94856,94857,94862,94875],{"__ignoreMap":23},[28,94858,94859],{"class":30,"line":31},[28,94860,94861],{"class":73},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[28,94863,94864,94867,94869,94871,94873],{"class":30,"line":77},[28,94865,94866],{"class":34},"np.resize(aa,(",[28,94868,93],{"class":38},[28,94870,90],{"class":34},[28,94872,970],{"class":38},[28,94874,30980],{"class":34},[28,94876,94877,94879,94881,94883,94885,94887],{"class":30,"line":114},[28,94878,94866],{"class":34},[28,94880,93],{"class":38},[28,94882,90],{"class":34},[28,94884,1045],{"class":38},[28,94886,83248],{"class":34},[28,94888,94889],{"class":73},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[60,94891,94893],{"id":94892},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94895,94896],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94898,94899],{},[420,94900],{"alt":23,"src":94901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[60,94903,94905],{"id":94904},"_126-保存加载文件","12.6 保存加载文件",[14,94907,94908],{},"savetxt():将数据保存到txt文件中",[14,94910,94911],{},"loadtxt():从文件加载数据",[14,94913,94914],{},[420,94915],{"alt":23,"src":94916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[60,94918,94920],{"id":94919},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94922,94923],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[60,94925,94927],{"id":94926},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94929,94930],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94932,94933],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94935,94936],{},[420,94937],{"alt":23,"src":94938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[60,94940,94942],{"id":94941},"_129-where语句","12.9 where语句",[14,94944,94945],{},"np.where(条件,x,y)",[14,94947,94948],{},"如果条件为True,对应值为x,否则对应值为y",[14,94950,94951],{},[420,94952],{"alt":23,"src":94953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[60,94955,94957],{"id":94956},"_1210-dot矩阵","12.10 dot()矩阵",[14,94959,94960],{},[420,94961],{"alt":23,"src":94962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[547,94964,94965],{},"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":77,"depth":77,"links":94967},[94968,94969,94970,94971,94972,94973,94974,94975,94976,94977],{"id":94330,"depth":77,"text":94331},{"id":94553,"depth":77,"text":94554},{"id":94769,"depth":77,"text":94770},{"id":94844,"depth":77,"text":94845},{"id":94892,"depth":77,"text":94893},{"id":94904,"depth":77,"text":94905},{"id":94919,"depth":77,"text":94920},{"id":94926,"depth":77,"text":94927},{"id":94941,"depth":77,"text":94942},{"id":94956,"depth":77,"text":94957},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94322,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94984,"title":94985,"body":94986,"description":559,"extension":560,"meta":95338,"navigation":562,"path":95339,"seo":95340,"stem":95341,"__hash__":95342},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94987,"toc":95336},[94988,94991,94994,94997,95000,95002,95067,95069,95333],[10,94989,94985],{"id":94990},"_13数组排序",[14,94992,94993],{},"排序主要用到的方法是np.sort和np.argsort",[14,94995,94996],{},"其中np.sort()对数组直接排序",[14,94998,94999],{},"而np.argsort()是返回排序后的原始索引",[14,95001,194],{},[18,95003,95005],{"className":20,"code":95004,"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,95006,95007,95011,95051,95059],{"__ignoreMap":23},[28,95008,95009],{"class":30,"line":31},[28,95010,93580],{"class":73},[28,95012,95013,95015,95017,95019,95021,95023,95025,95027,95029,95031,95033,95035,95037,95039,95041,95043,95045,95047,95049],{"class":30,"line":77},[28,95014,80],{"class":34},[28,95016,83],{"class":42},[28,95018,93499],{"class":34},[28,95020,98],{"class":38},[28,95022,90],{"class":34},[28,95024,1121],{"class":38},[28,95026,90],{"class":34},[28,95028,1020],{"class":38},[28,95030,90],{"class":34},[28,95032,1395],{"class":38},[28,95034,90],{"class":34},[28,95036,907],{"class":38},[28,95038,90],{"class":34},[28,95040,1512],{"class":38},[28,95042,90],{"class":34},[28,95044,970],{"class":38},[28,95046,90],{"class":34},[28,95048,225],{"class":38},[28,95050,5145],{"class":34},[28,95052,95053,95056],{"class":30,"line":114},[28,95054,95055],{"class":34},"np.sort(a)",[28,95057,95058],{"class":73},"#升序排序\n",[28,95060,95061,95064],{"class":30,"line":128},[28,95062,95063],{"class":34},"np.argsort(a)",[28,95065,95066],{"class":73},"#按照元素大小来索引排序\n",[14,95068,291],{},[18,95070,95072],{"className":20,"code":95071,"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,95073,95074,95086,95112,95117,95121,95126,95131,95136,95141,95145,95153,95157,95162,95167,95172,95177,95181,95186,95199,95203,95208,95213,95218,95223,95227,95232,95244,95248,95252,95256,95260,95264,95268,95273,95288,95293,95302,95307,95311,95315,95320,95324,95329],{"__ignoreMap":23},[28,95075,95076,95079,95081,95083],{"class":30,"line":31},[28,95077,95078],{"class":34},"np.random.seed(",[28,95080,822],{"class":38},[28,95082,1054],{"class":34},[28,95084,95085],{"class":73},"#保证每次值一样\n",[28,95087,95088,95090,95092,95094,95096,95098,95100,95102,95104,95106,95108,95110],{"class":30,"line":77},[28,95089,306],{"class":34},[28,95091,83],{"class":42},[28,95093,93589],{"class":34},[28,95095,938],{"class":38},[28,95097,90],{"class":34},[28,95099,31975],{"class":5704},[28,95101,83],{"class":42},[28,95103,367],{"class":34},[28,95105,103],{"class":38},[28,95107,90],{"class":34},[28,95109,970],{"class":38},[28,95111,30980],{"class":34},[28,95113,95114],{"class":30,"line":114},[28,95115,95116],{"class":73},"#原数组：\n",[28,95118,95119],{"class":30,"line":128},[28,95120,94400],{"class":735},[28,95122,95123],{"class":30,"line":393},[28,95124,95125],{"class":735},"array([[44, 47, 64, 67, 67,  9],\n",[28,95127,95128],{"class":30,"line":409},[28,95129,95130],{"class":735},"       [83, 21, 36, 87, 70, 88],\n",[28,95132,95133],{"class":30,"line":1711},[28,95134,95135],{"class":735},"       [88, 12, 58, 65, 39, 87],\n",[28,95137,95138],{"class":30,"line":1802},[28,95139,95140],{"class":735},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[28,95142,95143],{"class":30,"line":1808},[28,95144,94400],{"class":735},[28,95146,95147,95150],{"class":30,"line":1820},[28,95148,95149],{"class":34},"np.sort(aa)",[28,95151,95152],{"class":73},"#每行进行了排序\n",[28,95154,95155],{"class":30,"line":2102},[28,95156,94400],{"class":735},[28,95158,95159],{"class":30,"line":2107},[28,95160,95161],{"class":735},"array([[ 9, 44, 47, 64, 67, 67],\n",[28,95163,95164],{"class":30,"line":2113},[28,95165,95166],{"class":735},"       [21, 36, 70, 83, 87, 88],\n",[28,95168,95169],{"class":30,"line":2118},[28,95170,95171],{"class":735},"       [12, 39, 58, 65, 87, 88],\n",[28,95173,95174],{"class":30,"line":2132},[28,95175,95176],{"class":735},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[28,95178,95179],{"class":30,"line":2137},[28,95180,94400],{"class":735},[28,95182,95183],{"class":30,"line":2143},[28,95184,95185],{"class":73},"#axis=0时\n",[28,95187,95188,95191,95193,95195,95197],{"class":30,"line":2164},[28,95189,95190],{"class":34},"np.sort(aa,",[28,95192,47991],{"class":5704},[28,95194,83],{"class":42},[28,95196,822],{"class":38},[28,95198,228],{"class":34},[28,95200,95201],{"class":30,"line":2169},[28,95202,94400],{"class":735},[28,95204,95205],{"class":30,"line":2183},[28,95206,95207],{"class":735},"array([[44, 12, 36, 37, 25,  9],\n",[28,95209,95210],{"class":30,"line":2188},[28,95211,95212],{"class":735},"       [46, 21, 58, 65, 39, 77],\n",[28,95214,95215],{"class":30,"line":2217},[28,95216,95217],{"class":735},"       [83, 47, 64, 67, 67, 87],\n",[28,95219,95220],{"class":30,"line":2222},[28,95221,95222],{"class":735},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[28,95224,95225],{"class":30,"line":2239},[28,95226,94400],{"class":735},[28,95228,95229],{"class":30,"line":2244},[28,95230,95231],{"class":73},"#axis=1时,为默认值\n",[28,95233,95234,95236,95238,95240,95242],{"class":30,"line":2249},[28,95235,95190],{"class":34},[28,95237,47991],{"class":5704},[28,95239,83],{"class":42},[28,95241,39],{"class":38},[28,95243,228],{"class":34},[28,95245,95246],{"class":30,"line":2254},[28,95247,94400],{"class":735},[28,95249,95250],{"class":30,"line":2268},[28,95251,95161],{"class":735},[28,95253,95254],{"class":30,"line":2273},[28,95255,95166],{"class":735},[28,95257,95258],{"class":30,"line":3067},[28,95259,95171],{"class":735},[28,95261,95262],{"class":30,"line":3081},[28,95263,95176],{"class":735},[28,95265,95266],{"class":30,"line":3089},[28,95267,94400],{"class":735},[28,95269,95270],{"class":30,"line":3094},[28,95271,95272],{"class":73},"#按最后一列排序\n",[28,95274,95275,95277,95279,95282,95284,95286],{"class":30,"line":3100},[28,95276,117],{"class":34},[28,95278,83],{"class":42},[28,95280,95281],{"class":34},"aa[:,",[28,95283,445],{"class":42},[28,95285,39],{"class":38},[28,95287,111],{"class":34},[28,95289,95290],{"class":30,"line":3106},[28,95291,95292],{"class":73},"#获取最后一列排好序的索引\n",[28,95294,95295,95297,95299],{"class":30,"line":3111},[28,95296,74535],{"class":34},[28,95298,83],{"class":42},[28,95300,95301],{"class":34},"np.argsort(b)\n",[28,95303,95304],{"class":30,"line":8436},[28,95305,95306],{"class":34},"aa[index]\n",[28,95308,95309],{"class":30,"line":8460},[28,95310,94400],{"class":735},[28,95312,95313],{"class":30,"line":8465},[28,95314,95125],{"class":735},[28,95316,95317],{"class":30,"line":8471},[28,95318,95319],{"class":735},"       [46, 88, 81, 37, 25, 77],\n",[28,95321,95322],{"class":30,"line":8498},[28,95323,95135],{"class":735},[28,95325,95326],{"class":30,"line":8503},[28,95327,95328],{"class":735},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[28,95330,95331],{"class":30,"line":8509},[28,95332,94400],{"class":735},[547,95334,95335],{},"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":77,"depth":77,"links":95337},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94985,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95344,"title":95345,"body":95346,"description":559,"extension":560,"meta":95376,"navigation":562,"path":95377,"seo":95378,"stem":95379,"__hash__":95380},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95347,"toc":95374},[95348,95351,95354,95357,95360,95363,95366,95369],[10,95349,95345],{"id":95350},"_14广播机制",[14,95352,95353],{},"广播的规则：",[14,95355,95356],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95358,95359],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95361,95362],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95364,95365],{},"3.如果没有维度形状为1，则会引发异常",[14,95367,95368],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95370,95371],{},[420,95372],{"alt":23,"src":95373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":23,"searchDepth":77,"depth":77,"links":95375},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95345,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95382,"title":95383,"body":95384,"description":559,"extension":560,"meta":95482,"navigation":562,"path":95483,"seo":95484,"stem":95485,"__hash__":95486},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95385,"toc":95480},[95386,95389,95392,95477],[10,95387,95383],{"id":95388},"_15比较掩码",[14,95390,95391],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[18,95393,95395],{"className":20,"code":95394,"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,95396,95397,95443,95454,95468,95472],{"__ignoreMap":23},[28,95398,95399,95401,95403,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430,95432,95434,95436,95438,95440],{"class":30,"line":31},[28,95400,80],{"class":34},[28,95402,83],{"class":42},[28,95404,95405],{"class":34},"np.array([[",[28,95407,39],{"class":38},[28,95409,90],{"class":34},[28,95411,93],{"class":38},[28,95413,90],{"class":34},[28,95415,98],{"class":38},[28,95417,48507],{"class":34},[28,95419,1095],{"class":38},[28,95421,90],{"class":34},[28,95423,1121],{"class":38},[28,95425,90],{"class":34},[28,95427,317],{"class":38},[28,95429,48507],{"class":34},[28,95431,1345],{"class":38},[28,95433,90],{"class":34},[28,95435,1370],{"class":38},[28,95437,90],{"class":34},[28,95439,1395],{"class":38},[28,95441,95442],{"class":34},"]])\n",[28,95444,95445,95447,95449,95451],{"class":30,"line":77},[28,95446,80],{"class":34},[28,95448,1529],{"class":42},[28,95450,1320],{"class":38},[28,95452,95453],{"class":73},"#结果是一个由True,False组成的数组\n",[28,95455,95456,95459,95461,95463,95465],{"class":30,"line":114},[28,95457,95458],{"class":34},"a[a",[28,95460,1529],{"class":42},[28,95462,1320],{"class":38},[28,95464,1559],{"class":34},[28,95466,95467],{"class":73},"#小于20的元素会存到这个数组中\n",[28,95469,95470],{"class":30,"line":128},[28,95471,94036],{"class":73},[28,95473,95474],{"class":30,"line":393},[28,95475,95476],{"class":73},"#array([ 1,  2,  3, 11, 12, 13])\n",[547,95478,95479],{},"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":77,"depth":77,"links":95481},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95383,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95488,"title":95489,"body":95490,"description":559,"extension":560,"meta":95582,"navigation":562,"path":95583,"seo":95584,"stem":95585,"__hash__":95586},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95491,"toc":95580},[95492,95495,95498,95501,95504,95507,95572,95577],[10,95493,95489],{"id":95494},"_16魔法命令time",[14,95496,95497],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95499,95500],{},"%:行模式",[14,95502,95503],{},"%%:单元格模式",[14,95505,95506],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[18,95508,95510],{"className":20,"code":95509,"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,95511,95512,95517,95524,95529,95538,95551,95555,95563],{"__ignoreMap":23},[28,95513,95514],{"class":30,"line":31},[28,95515,95516],{"class":73},"#程序执行时间\n",[28,95518,95519,95521],{"class":30,"line":77},[28,95520,536],{"class":42},[28,95522,95523],{"class":34}," time \n",[28,95525,95526],{"class":30,"line":114},[28,95527,95528],{"class":73},"#获取时间\n",[28,95530,95531,95534,95536],{"class":30,"line":128},[28,95532,95533],{"class":34},"start",[28,95535,83],{"class":42},[28,95537,32897],{"class":34},[28,95539,95540,95543,95546,95548],{"class":30,"line":393},[28,95541,95542],{"class":34},"time.sleep(",[28,95544,95545],{"class":38},"0.4",[28,95547,1054],{"class":34},[28,95549,95550],{"class":73},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[28,95552,95553],{"class":30,"line":409},[28,95554,95528],{"class":73},[28,95556,95557,95559,95561],{"class":30,"line":1711},[28,95558,46278],{"class":34},[28,95560,83],{"class":42},[28,95562,32897],{"class":34},[28,95564,95565,95567,95569],{"class":30,"line":1802},[28,95566,46278],{"class":34},[28,95568,445],{"class":42},[28,95570,95571],{"class":34},"start\n",[14,95573,95574],{},[420,95575],{"alt":23,"src":95576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[547,95578,95579],{},"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":77,"depth":77,"links":95581},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95489,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95588,"title":95589,"body":95590,"description":559,"extension":560,"meta":95625,"navigation":562,"path":95626,"seo":95627,"stem":95628,"__hash__":95629},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95591,"toc":95623},[95592,95595,95598,95601,95604,95607,95610,95613,95618],[10,95593,95589],{"id":95594},"_17魔法命令timeit",[14,95596,95597],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95599,95600],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95602,95603],{},"单元格模式：",[14,95605,95606],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95608,95609],{},"初始化语句执行次数由轮数来决定",[14,95611,95612],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95614,95615],{},[420,95616],{"alt":23,"src":95617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95619,95620],{},[420,95621],{"alt":23,"src":95622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":23,"searchDepth":77,"depth":77,"links":95624},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95589,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95631,"title":95632,"body":95633,"description":559,"extension":560,"meta":95651,"navigation":562,"path":95652,"seo":95653,"stem":95654,"__hash__":95655},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95634,"toc":95649},[95635,95638,95641,95644],[10,95636,95632],{"id":95637},"_18魔法命令writefile和run",[14,95639,95640],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95642,95643],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95645,95646],{},[420,95647],{"alt":23,"src":95648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":23,"searchDepth":77,"depth":77,"links":95650},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95632,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95657,"title":95658,"body":95659,"description":559,"extension":560,"meta":95712,"navigation":562,"path":95713,"seo":95714,"stem":95715,"__hash__":95716},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95660,"toc":95710},[95661,95664,95667,95669,95672,95675,95680,95683,95686,95689,95692,95695,95698,95701,95704,95707],[10,95662,95658],{"id":95663},"_19魔法命令memit",[14,95665,95666],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95668,25086],{},[14,95670,95671],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95673,95674],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95676,95677],{},[420,95678],{"alt":23,"src":95679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95681,95682],{},"补充：",[14,95684,95685],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95687,95688],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95690,95691],{},"解决方法：",[14,95693,95694],{},"1.cmd",[14,95696,95697],{},"2.依次输入以下代码：",[14,95699,95700],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95702,95703],{},"pip install --upgrade ipython",[14,95705,95706],{},"#升级 memory_profiler 和 setuptools",[14,95708,95709],{},"pip install --upgrade memory_profiler setuptools",{"title":23,"searchDepth":77,"depth":77,"links":95711},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95658,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95718,"title":95719,"body":95720,"description":559,"extension":560,"meta":97366,"navigation":562,"path":97367,"seo":97368,"stem":97369,"__hash__":97370},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95721,"toc":97336},[95722,95725,95729,95733,95794,95797,95802,95806,95811,95816,95821,95826,95829,95834,95838,95842,95875,95878,95881,95884,95936,95939,95975,95978,96020,96024,96045,96047,96084,96086,96091,96093,96098,96102,96105,96133,96137,96141,96194,96198,96290,96294,96298,96301,96306,96310,96335,96340,96344,96347,96350,96353,96356,96359,96362,96365,96377,96381,96385,96388,96420,96423,96446,96449,96475,96478,96504,96507,96541,96544,96606,96610,96613,96617,96620,96646,96649,96652,96657,96660,96729,96731,96736,96797,96800,96811,96817,96822,96826,96829,96842,96846,96861,96863,96886,96888,96914,96917,96920,96923,96971,96973,96978,96982,96986,97013,97017,97044,97047,97052,97057,97147,97151,97209,97214,97217,97220,97262,97266,97322,97327,97330,97333],[10,95723,95719],{"id":95724},"_2创建数组",[60,95726,95728],{"id":95727},"_21-array函数创建数组","2.1 array()函数创建数组",[605,95730,95732],{"id":95731},"_221-函数语句","2.2.1 函数语句",[18,95734,95736],{"className":20,"code":95735,"language":22,"meta":23,"style":23},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[25,95737,95738],{"__ignoreMap":23},[28,95739,95740,95743,95746,95748,95750,95752,95754,95756,95759,95761,95764,95766,95769,95771,95773,95775,95778,95780,95783,95785,95788,95790,95792],{"class":30,"line":31},[28,95741,95742],{"class":34},"numpy.array(",[28,95744,95745],{"class":38},"object",[28,95747,12921],{"class":34},[28,95749,93972],{"class":5704},[28,95751,14050],{"class":42},[28,95753,39410],{"class":38},[28,95755,12921],{"class":34},[28,95757,95758],{"class":5704},"copy",[28,95760,14050],{"class":42},[28,95762,95763],{"class":38}," True",[28,95765,12921],{"class":34},[28,95767,95768],{"class":5704},"order",[28,95770,14050],{"class":42},[28,95772,39410],{"class":38},[28,95774,12921],{"class":34},[28,95776,95777],{"class":5704},"subok",[28,95779,14050],{"class":42},[28,95781,95782],{"class":38}," False",[28,95784,12921],{"class":34},[28,95786,95787],{"class":5704},"ndmin",[28,95789,14050],{"class":42},[28,95791,4581],{"class":38},[28,95793,228],{"class":34},[14,95795,95796],{},"参数：",[14,95798,95799],{},[420,95800],{"alt":23,"src":95801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[605,95803,95805],{"id":95804},"_222-实例","2.2.2 实例",[14,95807,95808],{},[420,95809],{"alt":23,"src":95810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95812,95813],{},[420,95814],{"alt":23,"src":95815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95817,95818],{},[420,95819],{"alt":23,"src":95820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95822,95823],{},[420,95824],{"alt":23,"src":95825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95827,95828],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95830,95831],{},[420,95832],{"alt":23,"src":95833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[60,95835,95837],{"id":95836},"_22-随机数创建数组","2.2 随机数创建数组",[605,95839,95841],{"id":95840},"_221-random语句","2.2.1 random语句",[18,95843,95845],{"className":20,"code":95844,"language":22,"meta":23,"style":23},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[25,95846,95847,95852,95857,95865,95870],{"__ignoreMap":23},[28,95848,95849],{"class":30,"line":31},[28,95850,95851],{"class":73},"#random.random()\n",[28,95853,95854],{"class":30,"line":77},[28,95855,95856],{"class":73},"#确定随机种子,就是每次运行结果是相同的\n",[28,95858,95859,95861,95863],{"class":30,"line":114},[28,95860,95078],{"class":34},[28,95862,822],{"class":38},[28,95864,228],{"class":34},[28,95866,95867],{"class":30,"line":128},[28,95868,95869],{"class":34},"np.random.random()\n",[28,95871,95872],{"class":30,"line":393},[28,95873,95874],{"class":73},"#生成一个随机的数目\n",[14,95876,95877],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95879,95880],{},"可以指定数组形状 size",[14,95882,95883],{},"①生成一维数组",[18,95885,95887],{"className":20,"code":95886,"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,95888,95889,95894,95907,95912,95928],{"__ignoreMap":23},[28,95890,95891],{"class":30,"line":31},[28,95892,95893],{"class":73},"#random.random(size())\n",[28,95895,95896,95899,95901,95903,95905],{"class":30,"line":77},[28,95897,95898],{"class":34},"np.random.random(",[28,95900,31975],{"class":5704},[28,95902,83],{"class":42},[28,95904,108],{"class":38},[28,95906,228],{"class":34},[28,95908,95909],{"class":30,"line":114},[28,95910,95911],{"class":73},"#生成一位的五个元素\n",[28,95913,95914,95916,95918,95920,95922,95924,95926],{"class":30,"line":128},[28,95915,80],{"class":34},[28,95917,83],{"class":42},[28,95919,95898],{"class":34},[28,95921,31975],{"class":5704},[28,95923,83],{"class":42},[28,95925,103],{"class":38},[28,95927,228],{"class":34},[28,95929,95930,95933],{"class":30,"line":393},[28,95931,95932],{"class":34},"a.shape ",[28,95934,95935],{"class":73},"#输出数组形状\n",[14,95937,95938],{},"②生成二维数组",[18,95940,95942],{"className":20,"code":95941,"language":22,"meta":23,"style":23},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[25,95943,95944,95948,95970],{"__ignoreMap":23},[28,95945,95946],{"class":30,"line":31},[28,95947,301],{"class":73},[28,95949,95950,95952,95954,95956,95958,95960,95962,95964,95966,95968],{"class":30,"line":77},[28,95951,306],{"class":34},[28,95953,83],{"class":42},[28,95955,95898],{"class":34},[28,95957,31975],{"class":5704},[28,95959,83],{"class":42},[28,95961,367],{"class":34},[28,95963,103],{"class":38},[28,95965,90],{"class":34},[28,95967,108],{"class":38},[28,95969,30980],{"class":34},[28,95971,95972],{"class":30,"line":114},[28,95973,95974],{"class":73},"#生成四行五列的数组\n",[14,95976,95977],{},"③生成三维数组",[18,95979,95981],{"className":20,"code":95980,"language":22,"meta":23,"style":23},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[25,95982,95983,95988,96015],{"__ignoreMap":23},[28,95984,95985],{"class":30,"line":31},[28,95986,95987],{"class":73},"#三维数组\n",[28,95989,95990,95993,95995,95997,95999,96001,96003,96005,96007,96009,96011,96013],{"class":30,"line":77},[28,95991,95992],{"class":34},"aaa",[28,95994,83],{"class":42},[28,95996,95898],{"class":34},[28,95998,31975],{"class":5704},[28,96000,83],{"class":42},[28,96002,367],{"class":34},[28,96004,93],{"class":38},[28,96006,90],{"class":34},[28,96008,98],{"class":38},[28,96010,90],{"class":34},[28,96012,103],{"class":38},[28,96014,30980],{"class":34},[28,96016,96017],{"class":30,"line":114},[28,96018,96019],{"class":34},"aaa.shape\n",[605,96021,96023],{"id":96022},"_222-randint语句","2.2.2 randint语句",[18,96025,96027],{"className":20,"code":96026,"language":22,"meta":23,"style":23},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[25,96028,96029,96034],{"__ignoreMap":23},[28,96030,96031],{"class":30,"line":31},[28,96032,96033],{"class":73},"#生成随机的整数 random.randint(low,high,size)\n",[28,96035,96036,96038,96040,96042],{"class":30,"line":77},[28,96037,93589],{"class":34},[28,96039,108],{"class":38},[28,96041,14200],{"class":34},[28,96043,96044],{"class":73},"#0~5中的随机一个数\n",[14,96046,95883],{},[18,96048,96050],{"className":20,"code":96049,"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,96051,96052,96057,96079],{"__ignoreMap":23},[28,96053,96054],{"class":30,"line":31},[28,96055,96056],{"class":73},"#一维\n",[28,96058,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077],{"class":30,"line":77},[28,96060,93589],{"class":34},[28,96062,39],{"class":38},[28,96064,90],{"class":34},[28,96066,1095],{"class":38},[28,96068,90],{"class":34},[28,96070,31975],{"class":5704},[28,96072,83],{"class":42},[28,96074,367],{"class":34},[28,96076,225],{"class":38},[28,96078,30980],{"class":34},[28,96080,96081],{"class":30,"line":114},[28,96082,96083],{"class":73},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96085,95938],{},[14,96087,96088],{},[420,96089],{"alt":23,"src":96090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96092,95977],{},[14,96094,96095],{},[420,96096],{"alt":23,"src":96097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[605,96099,96101],{"id":96100},"_222-rand语句","2.2.2 rand语句",[14,96103,96104],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[18,96106,96108],{"className":20,"code":96107,"language":22,"meta":23,"style":23},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[25,96109,96110,96123,96128],{"__ignoreMap":23},[28,96111,96112,96115,96117,96119,96121],{"class":30,"line":31},[28,96113,96114],{"class":34},"np.random.rand(",[28,96116,938],{"class":38},[28,96118,90],{"class":34},[28,96120,225],{"class":38},[28,96122,228],{"class":34},[28,96124,96125],{"class":30,"line":77},[28,96126,96127],{"class":73},"#第一个参数100：行数，表示有100个样本\n",[28,96129,96130],{"class":30,"line":114},[28,96131,96132],{"class":73},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[60,96134,96136],{"id":96135},"_23-arange创建数组","2.3 arange()创建数组",[605,96138,96140],{"id":96139},"_231-函数语句","2.3.1 函数语句",[18,96142,96144],{"className":20,"code":96143,"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,96145,96146,96160,96165,96170,96175,96180,96185,96190],{"__ignoreMap":23},[28,96147,96148,96151,96153,96155,96158],{"class":30,"line":31},[28,96149,96150],{"class":34},"numpy.arange([start,] stop[, step], ",[28,96152,93972],{"class":5704},[28,96154,83],{"class":42},[28,96156,96157],{"class":38},"None",[28,96159,228],{"class":34},[28,96161,96162],{"class":30,"line":77},[28,96163,96164],{"class":73},"#参数\n",[28,96166,96167],{"class":30,"line":114},[28,96168,96169],{"class":735},"\"\"\"\n",[28,96171,96172],{"class":30,"line":128},[28,96173,96174],{"class":735},"start:起始值，可选，默认从 0 开始。\n",[28,96176,96177],{"class":30,"line":393},[28,96178,96179],{"class":735},"stop:结束值（不包含该值）。\n",[28,96181,96182],{"class":30,"line":409},[28,96183,96184],{"class":735},"step:步长，可选，默认是 1。可以为浮点数。\n",[28,96186,96187],{"class":30,"line":1711},[28,96188,96189],{"class":735},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[28,96191,96192],{"class":30,"line":1802},[28,96193,96169],{"class":735},[605,96195,96197],{"id":96196},"_232-实例","2.3.2 实例",[18,96199,96201],{"className":20,"code":96200,"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,96202,96203,96207,96231,96236,96241,96245,96268,96272,96276,96281,96286],{"__ignoreMap":23},[28,96204,96205],{"class":30,"line":31},[28,96206,93580],{"class":73},[28,96208,96209,96211,96213,96215,96217,96219,96221,96223,96225,96227,96229],{"class":30,"line":77},[28,96210,218],{"class":34},[28,96212,39],{"class":38},[28,96214,90],{"class":34},[28,96216,1345],{"class":38},[28,96218,90],{"class":34},[28,96220,39],{"class":38},[28,96222,90],{"class":34},[28,96224,93972],{"class":5704},[28,96226,83],{"class":42},[28,96228,640],{"class":38},[28,96230,228],{"class":34},[28,96232,96233],{"class":30,"line":114},[28,96234,96235],{"class":73},"#输出结果：\n",[28,96237,96238],{"class":30,"line":128},[28,96239,96240],{"class":73},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[28,96242,96243],{"class":30,"line":393},[28,96244,94419],{"class":73},[28,96246,96247,96250,96252,96254,96256,96259,96261,96263,96265],{"class":30,"line":409},[28,96248,96249],{"class":34},"np.array([np.arange(",[28,96251,39],{"class":38},[28,96253,90],{"class":34},[28,96255,103],{"class":38},[28,96257,96258],{"class":34},"),np.arange(",[28,96260,103],{"class":38},[28,96262,90],{"class":34},[28,96264,995],{"class":38},[28,96266,96267],{"class":34},")])\n",[28,96269,96270],{"class":30,"line":1711},[28,96271,94036],{"class":73},[28,96273,96274],{"class":30,"line":1802},[28,96275,96169],{"class":735},[28,96277,96278],{"class":30,"line":1808},[28,96279,96280],{"class":735},"array([[1, 2, 3],\n",[28,96282,96283],{"class":30,"line":1820},[28,96284,96285],{"class":735},"       [4, 5, 6]])\n",[28,96287,96288],{"class":30,"line":2102},[28,96289,96169],{"class":735},[60,96291,96293],{"id":96292},"_24-生态分布","2.4 生态分布",[605,96295,96297],{"id":96296},"_241-标准正态分布","2.4.1 标准正态分布",[14,96299,96300],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96302,96303],{},[420,96304],{"alt":23,"src":96305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[605,96307,96309],{"id":96308},"_242-常规正态分布","2.4.2 常规正态分布",[18,96311,96313],{"className":20,"code":96312,"language":22,"meta":23,"style":23},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[25,96314,96315,96320,96325,96330],{"__ignoreMap":23},[28,96316,96317],{"class":30,"line":31},[28,96318,96319],{"class":34},"random.normal(loc,scale,size)也可以生成正态分布\n",[28,96321,96322],{"class":30,"line":77},[28,96323,96324],{"class":73},"#loc:期望\n",[28,96326,96327],{"class":30,"line":114},[28,96328,96329],{"class":73},"#scale:方差\n",[28,96331,96332],{"class":30,"line":128},[28,96333,96334],{"class":73},"#size:用于确定是几维的数列\n",[14,96336,96337],{},[420,96338],{"alt":23,"src":96339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[60,96341,96343],{"id":96342},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96345,96346],{},"ndim:秩，维度个数",[14,96348,96349],{},"size:数组元素的个数",[14,96351,96352],{},"shape:数组的形状",[14,96354,96355],{},"dtype:数组元素的类型",[14,96357,96358],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96360,96361],{},"他们都是属性，通过数组.属性的形式来确定",[14,96363,96364],{},"如果需要输出多个可以通过以下方式：",[18,96366,96368],{"className":20,"code":96367,"language":22,"meta":23,"style":23},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[25,96369,96370],{"__ignoreMap":23},[28,96371,96372,96374],{"class":30,"line":31},[28,96373,30898],{"class":38},[28,96375,96376],{"class":34},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[60,96378,96380],{"id":96379},"_26-其他方式创建数组","2.6 其他方式创建数组",[605,96382,96384],{"id":96383},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96386,96387],{},"①创建一维数组",[18,96389,96391],{"className":20,"code":96390,"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,96392,96393,96402,96406,96411,96416],{"__ignoreMap":23},[28,96394,96395,96398,96400],{"class":30,"line":31},[28,96396,96397],{"class":34},"np.zeros(",[28,96399,225],{"class":38},[28,96401,228],{"class":34},[28,96403,96404],{"class":30,"line":77},[28,96405,96169],{"class":735},[28,96407,96408],{"class":30,"line":114},[28,96409,96410],{"class":735},"输出结果：\n",[28,96412,96413],{"class":30,"line":128},[28,96414,96415],{"class":735},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[28,96417,96418],{"class":30,"line":393},[28,96419,96169],{"class":735},[14,96421,96422],{},"上方代码等价于：",[18,96424,96426],{"className":20,"code":96425,"language":22,"meta":23,"style":23},"np.zeros(shape=(10))#创建10个元素的0数组\n",[25,96427,96428],{"__ignoreMap":23},[28,96429,96430,96432,96435,96437,96439,96441,96443],{"class":30,"line":31},[28,96431,96397],{"class":34},[28,96433,96434],{"class":5704},"shape",[28,96436,83],{"class":42},[28,96438,367],{"class":34},[28,96440,225],{"class":38},[28,96442,83248],{"class":34},[28,96444,96445],{"class":73},"#创建10个元素的0数组\n",[14,96447,96448],{},"也可以指定类型",[18,96450,96452],{"className":20,"code":96451,"language":22,"meta":23,"style":23},"#指定类型\nnp.zeros(5,dtype=int)\n",[25,96453,96454,96459],{"__ignoreMap":23},[28,96455,96456],{"class":30,"line":31},[28,96457,96458],{"class":73},"#指定类型\n",[28,96460,96461,96463,96465,96467,96469,96471,96473],{"class":30,"line":77},[28,96462,96397],{"class":34},[28,96464,108],{"class":38},[28,96466,90],{"class":34},[28,96468,93972],{"class":5704},[28,96470,83],{"class":42},[28,96472,640],{"class":38},[28,96474,228],{"class":34},[14,96476,96477],{},"②创建二维数组",[18,96479,96481],{"className":20,"code":96480,"language":22,"meta":23,"style":23},"np.zeros((3,4),dtype=int)\n",[25,96482,96483],{"__ignoreMap":23},[28,96484,96485,96488,96490,96492,96494,96496,96498,96500,96502],{"class":30,"line":31},[28,96486,96487],{"class":34},"np.zeros((",[28,96489,98],{"class":38},[28,96491,90],{"class":34},[28,96493,103],{"class":38},[28,96495,42733],{"class":34},[28,96497,93972],{"class":5704},[28,96499,83],{"class":42},[28,96501,640],{"class":38},[28,96503,228],{"class":34},[14,96505,96506],{},"③创建三维数组",[18,96508,96510],{"className":20,"code":96509,"language":22,"meta":23,"style":23},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[25,96511,96512,96517],{"__ignoreMap":23},[28,96513,96514],{"class":30,"line":31},[28,96515,96516],{"class":73},"#创建三维数组\n",[28,96518,96519,96521,96523,96525,96527,96529,96531,96533,96535,96537,96539],{"class":30,"line":77},[28,96520,96487],{"class":34},[28,96522,98],{"class":38},[28,96524,90],{"class":34},[28,96526,103],{"class":38},[28,96528,90],{"class":34},[28,96530,108],{"class":38},[28,96532,42733],{"class":34},[28,96534,93972],{"class":5704},[28,96536,83],{"class":42},[28,96538,640],{"class":38},[28,96540,228],{"class":34},[14,96542,96543],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[18,96545,96547],{"className":20,"code":96546,"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,96548,96549,96554,96569,96574,96579,96601],{"__ignoreMap":23},[28,96550,96551],{"class":30,"line":31},[28,96552,96553],{"class":73},"#使用zeros_like将创建的一维数组变成全0的数组\n",[28,96555,96556,96558,96560,96562,96564,96566],{"class":30,"line":77},[28,96557,80],{"class":34},[28,96559,83],{"class":42},[28,96561,218],{"class":34},[28,96563,103],{"class":38},[28,96565,1054],{"class":34},[28,96567,96568],{"class":73},"#这个得到的结果：一维数组0，1，2，3\n",[28,96570,96571],{"class":30,"line":114},[28,96572,96573],{"class":34},"np.zeros_like(a)\n",[28,96575,96576],{"class":30,"line":128},[28,96577,96578],{"class":73},"#使用zeros_like将创建的二维数组变成全0的数组\n",[28,96580,96581,96583,96585,96587,96589,96591,96593,96595,96597,96599],{"class":30,"line":393},[28,96582,306],{"class":34},[28,96584,83],{"class":42},[28,96586,95898],{"class":34},[28,96588,31975],{"class":5704},[28,96590,83],{"class":42},[28,96592,367],{"class":34},[28,96594,103],{"class":38},[28,96596,90],{"class":34},[28,96598,108],{"class":38},[28,96600,30980],{"class":34},[28,96602,96603],{"class":30,"line":409},[28,96604,96605],{"class":34},"np.zeros_like(aa)\n",[605,96607,96609],{"id":96608},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96611,96612],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[605,96614,96616],{"id":96615},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96618,96619],{},"①empty()用法",[18,96621,96623],{"className":20,"code":96622,"language":22,"meta":23,"style":23},"numpy.empty(shape,dtype=float,order='c')\n",[25,96624,96625],{"__ignoreMap":23},[28,96626,96627,96630,96632,96634,96636,96638,96640,96642,96644],{"class":30,"line":31},[28,96628,96629],{"class":34},"numpy.empty(shape,",[28,96631,93972],{"class":5704},[28,96633,83],{"class":42},[28,96635,675],{"class":38},[28,96637,90],{"class":34},[28,96639,95768],{"class":5704},[28,96641,83],{"class":42},[28,96643,76505],{"class":735},[28,96645,228],{"class":34},[14,96647,96648],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96650,96651],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96653,96654],{},[420,96655],{"alt":23,"src":96656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96658,96659],{},"②empty()用法",[18,96661,96663],{"className":20,"code":96662,"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,96664,96665,96686,96698,96719,96724],{"__ignoreMap":23},[28,96666,96667,96669,96671,96674,96676,96678,96680,96682,96684],{"class":30,"line":31},[28,96668,1465],{"class":34},[28,96670,83],{"class":42},[28,96672,96673],{"class":34},"np.empty(",[28,96675,225],{"class":38},[28,96677,90],{"class":34},[28,96679,93972],{"class":5704},[28,96681,83],{"class":42},[28,96683,640],{"class":38},[28,96685,228],{"class":34},[28,96687,96688,96690,96692,96694,96696],{"class":30,"line":77},[28,96689,1440],{"class":34},[28,96691,83],{"class":42},[28,96693,218],{"class":34},[28,96695,108],{"class":38},[28,96697,228],{"class":34},[28,96699,96700,96703,96705,96708,96710,96712,96715,96717],{"class":30,"line":114},[28,96701,96702],{"class":34},"np.add(",[28,96704,93],{"class":38},[28,96706,96707],{"class":34},",x,",[28,96709,93529],{"class":5704},[28,96711,83],{"class":42},[28,96713,96714],{"class":34},"y[:",[28,96716,108],{"class":38},[28,96718,5145],{"class":34},[28,96720,96721],{"class":30,"line":128},[28,96722,96723],{"class":73},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[28,96725,96726],{"class":30,"line":393},[28,96727,96728],{"class":34},"y\n",[14,96730,12000],{},[14,96732,96733],{},[420,96734],{"alt":23,"src":96735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[18,96737,96739],{"className":20,"code":96738,"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,96740,96741,96757,96777,96792],{"__ignoreMap":23},[28,96742,96743,96745,96747,96749,96751,96753,96755],{"class":30,"line":31},[28,96744,1440],{"class":34},[28,96746,83],{"class":42},[28,96748,218],{"class":34},[28,96750,39],{"class":38},[28,96752,90],{"class":34},[28,96754,970],{"class":38},[28,96756,228],{"class":34},[28,96758,96759,96761,96763,96765,96767,96769,96771,96773,96775],{"class":30,"line":77},[28,96760,1465],{"class":34},[28,96762,83],{"class":42},[28,96764,96673],{"class":34},[28,96766,108],{"class":38},[28,96768,90],{"class":34},[28,96770,93972],{"class":5704},[28,96772,83],{"class":42},[28,96774,640],{"class":38},[28,96776,228],{"class":34},[28,96778,96779,96782,96784,96786,96788,96790],{"class":30,"line":114},[28,96780,96781],{"class":34},"np.add(x,",[28,96783,93],{"class":38},[28,96785,90],{"class":34},[28,96787,93529],{"class":5704},[28,96789,83],{"class":42},[28,96791,93921],{"class":34},[28,96793,96794],{"class":30,"line":128},[28,96795,96796],{"class":73},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96798,96799],{},"③empty_like()",[14,96801,96802],{},[780,96803,96804,96805,96810],{},"创建一个",[780,96806,96807],{},[780,96808,96809],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96812,96813,96816],{},[25,96814,96815],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96818,96819],{},[420,96820],{"alt":23,"src":96821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[605,96823,96825],{"id":96824},"_264-用法","2.6.4 ？？用法",[14,96827,96828],{},"当想查看一个函数的参数时，可以通过？？来实现",[18,96830,96832],{"className":20,"code":96831,"language":22,"meta":23,"style":23},"np.full??\n",[25,96833,96834],{"__ignoreMap":23},[28,96835,96836,96839],{"class":30,"line":31},[28,96837,96838],{"class":34},"np.full",[28,96840,96841],{"class":77880},"??\n",[605,96843,96845],{"id":96844},"_265-full创建数组","2.6.5 full()创建数组",[18,96847,96849],{"className":20,"code":96848,"language":22,"meta":23,"style":23},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[25,96850,96851,96856],{"__ignoreMap":23},[28,96852,96853],{"class":30,"line":31},[28,96854,96855],{"class":34},"full(shape,fill_value)\n",[28,96857,96858],{"class":30,"line":77},[28,96859,96860],{"class":34},"创建全为某个指定值的数组\n",[14,96862,194],{},[18,96864,96866],{"className":20,"code":96865,"language":22,"meta":23,"style":23},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[25,96867,96868,96873],{"__ignoreMap":23},[28,96869,96870],{"class":30,"line":31},[28,96871,96872],{"class":73},"#创建一个一维数组,以20进行填充\n",[28,96874,96875,96878,96880,96882,96884],{"class":30,"line":77},[28,96876,96877],{"class":34},"np.full(",[28,96879,225],{"class":38},[28,96881,90],{"class":34},[28,96883,1320],{"class":38},[28,96885,228],{"class":34},[14,96887,291],{},[18,96889,96891],{"className":20,"code":96890,"language":22,"meta":23,"style":23},"#创建二维数组\nnp.full((3,5),11)\n",[25,96892,96893,96897],{"__ignoreMap":23},[28,96894,96895],{"class":30,"line":31},[28,96896,94419],{"class":73},[28,96898,96899,96902,96904,96906,96908,96910,96912],{"class":30,"line":77},[28,96900,96901],{"class":34},"np.full((",[28,96903,98],{"class":38},[28,96905,90],{"class":34},[28,96907,108],{"class":38},[28,96909,42733],{"class":34},[28,96911,1095],{"class":38},[28,96913,228],{"class":34},[14,96915,96916],{},"③full_like用法",[14,96918,96919],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96921,96922],{},"这里是指定填充而已",[18,96924,96926],{"className":20,"code":96925,"language":22,"meta":23,"style":23},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[25,96927,96928,96933,96957,96962],{"__ignoreMap":23},[28,96929,96930],{"class":30,"line":31},[28,96931,96932],{"class":73},"#创建一个指定形状数组\n",[28,96934,96935,96937,96939,96941,96943,96945,96947,96949,96951,96953,96955],{"class":30,"line":77},[28,96936,80],{"class":34},[28,96938,83],{"class":42},[28,96940,218],{"class":34},[28,96942,39],{"class":38},[28,96944,90],{"class":34},[28,96946,951],{"class":38},[28,96948,320],{"class":34},[28,96950,103],{"class":38},[28,96952,90],{"class":34},[28,96954,1045],{"class":38},[28,96956,228],{"class":34},[28,96958,96959],{"class":30,"line":114},[28,96960,96961],{"class":73},"#进行指定填充\n",[28,96963,96964,96967,96969],{"class":30,"line":128},[28,96965,96966],{"class":34},"np.full_like(a,",[28,96968,225],{"class":38},[28,96970,228],{"class":34},[14,96972,12000],{},[14,96974,96975],{},[420,96976],{"alt":23,"src":96977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[605,96979,96981],{"id":96980},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22484,96983,96985],{"id":96984},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[18,96987,96989],{"className":20,"code":96988,"language":22,"meta":23,"style":23},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25,96990,96991,97008],{"__ignoreMap":23},[28,96992,96993,96996,96998,97000,97002,97004,97006],{"class":30,"line":31},[28,96994,96995],{"class":34},"np.eye(",[28,96997,103],{"class":38},[28,96999,90],{"class":34},[28,97001,93972],{"class":5704},[28,97003,83],{"class":42},[28,97005,640],{"class":38},[28,97007,228],{"class":34},[28,97009,97010],{"class":30,"line":77},[28,97011,97012],{"class":73},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22484,97014,97016],{"id":97015},"_2662-法2identity","2.6.6.2 法2：identity()",[18,97018,97020],{"className":20,"code":97019,"language":22,"meta":23,"style":23},"#identity()\nnp.identity(5,dtype=int)\n",[25,97021,97022,97027],{"__ignoreMap":23},[28,97023,97024],{"class":30,"line":31},[28,97025,97026],{"class":73},"#identity()\n",[28,97028,97029,97032,97034,97036,97038,97040,97042],{"class":30,"line":77},[28,97030,97031],{"class":34},"np.identity(",[28,97033,108],{"class":38},[28,97035,90],{"class":34},[28,97037,93972],{"class":5704},[28,97039,83],{"class":42},[28,97041,640],{"class":38},[28,97043,228],{"class":34},[14,97045,97046],{},"两个函数是有区别的",[14,97048,97049],{},[420,97050],{"alt":23,"src":97051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97053,97054],{},[420,97055],{"alt":23,"src":97056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[18,97058,97060],{"className":20,"code":97059,"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,97061,97062,97067,97079,97084,97089,97094,97099,97103,97108,97128,97132,97137,97142],{"__ignoreMap":23},[28,97063,97064],{"class":30,"line":31},[28,97065,97066],{"class":73},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[28,97068,97069,97071,97073,97075,97077],{"class":30,"line":77},[28,97070,96995],{"class":34},[28,97072,98],{"class":38},[28,97074,12921],{"class":34},[28,97076,103],{"class":38},[28,97078,228],{"class":34},[28,97080,97081],{"class":30,"line":114},[28,97082,97083],{"class":73},"# 输出:\n",[28,97085,97086],{"class":30,"line":128},[28,97087,97088],{"class":73},"# [[1. 0. 0. 0.]\n",[28,97090,97091],{"class":30,"line":393},[28,97092,97093],{"class":73},"#  [0. 1. 0. 0.]\n",[28,97095,97096],{"class":30,"line":409},[28,97097,97098],{"class":73},"#  [0. 0. 1. 0.]]\n",[28,97100,97101],{"class":30,"line":1711},[28,97102,2890],{"emptyLinePlaceholder":562},[28,97104,97105],{"class":30,"line":1802},[28,97106,97107],{"class":73},"# 对角线向上偏移1\n",[28,97109,97110,97112,97114,97116,97118,97120,97122,97124,97126],{"class":30,"line":1808},[28,97111,96995],{"class":34},[28,97113,98],{"class":38},[28,97115,12921],{"class":34},[28,97117,103],{"class":38},[28,97119,12921],{"class":34},[28,97121,1116],{"class":5704},[28,97123,83],{"class":42},[28,97125,39],{"class":38},[28,97127,228],{"class":34},[28,97129,97130],{"class":30,"line":1820},[28,97131,97083],{"class":73},[28,97133,97134],{"class":30,"line":2102},[28,97135,97136],{"class":73},"# [[0. 1. 0. 0.]\n",[28,97138,97139],{"class":30,"line":2107},[28,97140,97141],{"class":73},"#  [0. 0. 1. 0.]\n",[28,97143,97144],{"class":30,"line":2113},[28,97145,97146],{"class":73},"#  [0. 0. 0. 1.]]\n",[605,97148,97150],{"id":97149},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[18,97152,97154],{"className":20,"code":97153,"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,97155,97156,97161,97165,97170,97175,97180,97185,97190,97195,97200,97205],{"__ignoreMap":23},[28,97157,97158],{"class":30,"line":31},[28,97159,97160],{"class":73},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[28,97162,97163],{"class":30,"line":77},[28,97164,96169],{"class":735},[28,97166,97167],{"class":30,"line":114},[28,97168,97169],{"class":735},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[28,97171,97172],{"class":30,"line":128},[28,97173,97174],{"class":735},"参数介绍：\n",[28,97176,97177],{"class":30,"line":393},[28,97178,97179],{"class":735},"start：序列的起始值\n",[28,97181,97182],{"class":30,"line":409},[28,97183,97184],{"class":735},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[28,97186,97187],{"class":30,"line":1711},[28,97188,97189],{"class":735},"num：要生长的等步长的样本数量，默认为50\n",[28,97191,97192],{"class":30,"line":1802},[28,97193,97194],{"class":735},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[28,97196,97197],{"class":30,"line":1808},[28,97198,97199],{"class":735},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[28,97201,97202],{"class":30,"line":1820},[28,97203,97204],{"class":735},"dtype：ndarry的数据类型\n",[28,97206,97207],{"class":30,"line":2102},[28,97208,96169],{"class":735},[14,97210,97211],{},[420,97212],{"alt":23,"src":97213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97215,97216],{},"这里num=是可以省略的",[14,97218,97219],{},"也就是下方两行代码结果是一模一样的",[18,97221,97223],{"className":20,"code":97222,"language":22,"meta":23,"style":23},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[25,97224,97225,97242],{"__ignoreMap":23},[28,97226,97227,97230,97232,97234,97236,97238,97240],{"class":30,"line":31},[28,97228,97229],{"class":34},"np.linspace(",[28,97231,39],{"class":38},[28,97233,90],{"class":34},[28,97235,108],{"class":38},[28,97237,90],{"class":34},[28,97239,108],{"class":38},[28,97241,228],{"class":34},[28,97243,97244,97246,97248,97250,97252,97254,97256,97258,97260],{"class":30,"line":77},[28,97245,97229],{"class":34},[28,97247,39],{"class":38},[28,97249,90],{"class":34},[28,97251,108],{"class":38},[28,97253,90],{"class":34},[28,97255,2155],{"class":5704},[28,97257,83],{"class":42},[28,97259,108],{"class":38},[28,97261,228],{"class":34},[605,97263,97265],{"id":97264},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[18,97267,97269],{"className":20,"code":97268,"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,97270,97271,97276,97280,97285,97290,97295,97300,97304,97309,97314,97318],{"__ignoreMap":23},[28,97272,97273],{"class":30,"line":31},[28,97274,97275],{"class":73},"#logspace函数用于创建一个等比数列，格式如下：\n",[28,97277,97278],{"class":30,"line":77},[28,97279,96169],{"class":735},[28,97281,97282],{"class":30,"line":114},[28,97283,97284],{"class":735},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[28,97286,97287],{"class":30,"line":128},[28,97288,97289],{"class":735},"参数为：\n",[28,97291,97292],{"class":30,"line":393},[28,97293,97294],{"class":735},"start:序列的起始位置为：base**start\n",[28,97296,97297],{"class":30,"line":409},[28,97298,97299],{"class":735},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[28,97301,97302],{"class":30,"line":1711},[28,97303,97189],{"class":735},[28,97305,97306],{"class":30,"line":1802},[28,97307,97308],{"class":735},"endpoint：是否包含 stop 这个值，默认是 True\n",[28,97310,97311],{"class":30,"line":1808},[28,97312,97313],{"class":735},"base：对数的底数，默认是 10（常见对数）\n",[28,97315,97316],{"class":30,"line":1820},[28,97317,97204],{"class":735},[28,97319,97320],{"class":30,"line":2102},[28,97321,96169],{"class":735},[14,97323,97324],{},[420,97325],{"alt":23,"src":97326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97328,97329],{},"logspace()函数中的num参数也是可以不写num=的",[14,97331,97332],{},"endpoint是不可以省略的",[547,97334,97335],{},"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":77,"depth":77,"links":97337},[97338,97342,97347,97351,97355,97356],{"id":95727,"depth":77,"text":95728,"children":97339},[97340,97341],{"id":95731,"depth":114,"text":95732},{"id":95804,"depth":114,"text":95805},{"id":95836,"depth":77,"text":95837,"children":97343},[97344,97345,97346],{"id":95840,"depth":114,"text":95841},{"id":96022,"depth":114,"text":96023},{"id":96100,"depth":114,"text":96101},{"id":96135,"depth":77,"text":96136,"children":97348},[97349,97350],{"id":96139,"depth":114,"text":96140},{"id":96196,"depth":114,"text":96197},{"id":96292,"depth":77,"text":96293,"children":97352},[97353,97354],{"id":96296,"depth":114,"text":96297},{"id":96308,"depth":114,"text":96309},{"id":96342,"depth":77,"text":96343},{"id":96379,"depth":77,"text":96380,"children":97357},[97358,97359,97360,97361,97362,97363,97364,97365],{"id":96383,"depth":114,"text":96384},{"id":96608,"depth":114,"text":96609},{"id":96615,"depth":114,"text":96616},{"id":96824,"depth":114,"text":96825},{"id":96844,"depth":114,"text":96845},{"id":96980,"depth":114,"text":96981},{"id":97149,"depth":114,"text":97150},{"id":97264,"depth":114,"text":97265},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95719,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97372,"title":97373,"body":97374,"description":559,"extension":560,"meta":97467,"navigation":562,"path":97468,"seo":97469,"stem":97470,"__hash__":97471},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97375,"toc":97465},[97376,97379,97382,97385,97388,97391,97394,97397,97400,97403,97406,97409,97411,97414,97417,97422,97425,97428,97462],[10,97377,97373],{"id":97378},"_20魔法命令mprun",[14,97380,97381],{},"逐行分析数据内存的使用情况",[14,97383,97384],{},"语法格式：",[14,97386,97387],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97389,97390],{},"分析结果列如下：",[14,97392,97393],{},"Line行号",[14,97395,97396],{},"Mem usage内存使用大小",[14,97398,97399],{},"increment内存增量",[14,97401,97402],{},"Line content代码内容",[14,97404,97405],{},"补充说明：",[14,97407,97408],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97410,95674],{},[14,97412,97413],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97415,97416],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97418,97419],{},[420,97420],{"alt":23,"src":97421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97423,97424],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97426,97427],{},"这时候需要重新加载模块",[18,97429,97431],{"className":20,"code":97430,"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,97432,97433,97438,97445,97450],{"__ignoreMap":23},[28,97434,97435],{"class":30,"line":31},[28,97436,97437],{"class":73},"#重新加载模块\n",[28,97439,97440,97442],{"class":30,"line":77},[28,97441,536],{"class":42},[28,97443,97444],{"class":34}," importlib\n",[28,97446,97447],{"class":30,"line":114},[28,97448,97449],{"class":34},"importlib.reload(mprun_test)\n",[28,97451,97452,97454,97457,97459],{"class":30,"line":128},[28,97453,954],{"class":42},[28,97455,97456],{"class":34},"mprun ",[28,97458,445],{"class":42},[28,97460,97461],{"class":34},"f mprun_test.fun_test mprun_test.fun_test()\n",[547,97463,97464],{},"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":77,"depth":77,"links":97466},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97373,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97473,"title":97474,"body":97475,"description":559,"extension":560,"meta":97492,"navigation":562,"path":97493,"seo":97494,"stem":97495,"__hash__":97496},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97476,"toc":97490},[97477,97480,97485],[10,97478,97474],{"id":97479},"_3一维数组的索引和切片",[14,97481,97482],{},[420,97483],{"alt":23,"src":97484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97486,97487],{},[420,97488],{"alt":23,"src":97489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":23,"searchDepth":77,"depth":77,"links":97491},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97474,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97498,"title":97499,"body":97500,"description":559,"extension":560,"meta":97983,"navigation":562,"path":97984,"seo":97985,"stem":97986,"__hash__":97987},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97501,"toc":97981},[97502,97505,97508,97513,97546,97549,97587,97590,97624,97627,97732,97735,97772,97775,97876,97879,97930,97933,97975,97978],[10,97503,97499],{"id":97504},"_4二维数组的索引与切片",[14,97506,97507],{},"①获取指定单个元素",[14,97509,97510],{},[420,97511],{"alt":23,"src":97512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[18,97514,97516],{"className":20,"code":97515,"language":22,"meta":23,"style":23},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[25,97517,97518,97523,97528,97533],{"__ignoreMap":23},[28,97519,97520],{"class":30,"line":31},[28,97521,97522],{"class":73},"#获取元素9\n",[28,97524,97525],{"class":30,"line":77},[28,97526,97527],{"class":73},"#先获取所在行，再获取所在列\n",[28,97529,97530],{"class":30,"line":114},[28,97531,97532],{"class":73},"#数组[行索引号，列索引号]\n",[28,97534,97535,97538,97540,97542,97544],{"class":30,"line":128},[28,97536,97537],{"class":34},"a[",[28,97539,39],{"class":38},[28,97541,90],{"class":34},[28,97543,93],{"class":38},[28,97545,111],{"class":34},[14,97547,97548],{},"②获取整行元素",[18,97550,97552],{"className":20,"code":97551,"language":22,"meta":23,"style":23},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[25,97553,97554,97559,97564,97572,97577],{"__ignoreMap":23},[28,97555,97556],{"class":30,"line":31},[28,97557,97558],{"class":73},"#获取整行 数组[行索引号]\n",[28,97560,97561],{"class":30,"line":77},[28,97562,97563],{"class":73},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[28,97565,97566,97568,97570],{"class":30,"line":114},[28,97567,97537],{"class":34},[28,97569,93],{"class":38},[28,97571,111],{"class":34},[28,97573,97574],{"class":30,"line":128},[28,97575,97576],{"class":73},"#也可以负索引获取一行\n",[28,97578,97579,97581,97583,97585],{"class":30,"line":393},[28,97580,97537],{"class":34},[28,97582,445],{"class":42},[28,97584,39],{"class":38},[28,97586,111],{"class":34},[14,97588,97589],{},"③获取整列元素",[18,97591,97593],{"className":20,"code":97592,"language":22,"meta":23,"style":23},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[25,97594,97595,97600,97609,97614],{"__ignoreMap":23},[28,97596,97597],{"class":30,"line":31},[28,97598,97599],{"class":73},"#获取整列 数组名[:,列索引]\n",[28,97601,97602,97605,97607],{"class":30,"line":77},[28,97603,97604],{"class":34},"a[:,",[28,97606,93],{"class":38},[28,97608,111],{"class":34},[28,97610,97611],{"class":30,"line":114},[28,97612,97613],{"class":73},"#也可以负索引获取一列\n",[28,97615,97616,97618,97620,97622],{"class":30,"line":128},[28,97617,97604],{"class":34},[28,97619,445],{"class":42},[28,97621,39],{"class":38},[28,97623,111],{"class":34},[14,97625,97626],{},"④部分行部分列的元素",[18,97628,97630],{"className":20,"code":97629,"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,97631,97632,97637,97647,97651,97655,97660,97665,97669,97681,97685,97689,97694,97699,97704,97709,97713,97718],{"__ignoreMap":23},[28,97633,97634],{"class":30,"line":31},[28,97635,97636],{"class":73},"#部分行部分列 数组名[行切片，列切片]\n",[28,97638,97639,97642,97644],{"class":30,"line":77},[28,97640,97641],{"class":34},"a[:",[28,97643,93],{"class":38},[28,97645,97646],{"class":34},",:]\n",[28,97648,97649],{"class":30,"line":114},[28,97650,94036],{"class":73},[28,97652,97653],{"class":30,"line":128},[28,97654,94400],{"class":735},[28,97656,97657],{"class":30,"line":393},[28,97658,97659],{"class":735},"array([[ 1,  2,  3,  4,  5,  6],\n",[28,97661,97662],{"class":30,"line":409},[28,97663,97664],{"class":735},"       [ 7,  8,  9, 10, 11, 12]])\n",[28,97666,97667],{"class":30,"line":1711},[28,97668,94400],{"class":735},[28,97670,97671,97673,97675,97677,97679],{"class":30,"line":1802},[28,97672,97604],{"class":34},[28,97674,39],{"class":38},[28,97676,1479],{"class":34},[28,97678,103],{"class":38},[28,97680,111],{"class":34},[28,97682,97683],{"class":30,"line":1808},[28,97684,94036],{"class":73},[28,97686,97687],{"class":30,"line":1820},[28,97688,94400],{"class":735},[28,97690,97691],{"class":30,"line":2102},[28,97692,97693],{"class":735},"array([[ 2,  3,  4],\n",[28,97695,97696],{"class":30,"line":2107},[28,97697,97698],{"class":735},"       [ 8,  9, 10],\n",[28,97700,97701],{"class":30,"line":2113},[28,97702,97703],{"class":735},"       [14, 15, 16],\n",[28,97705,97706],{"class":30,"line":2118},[28,97707,97708],{"class":735},"       [20, 21, 22]])\n",[28,97710,97711],{"class":30,"line":2132},[28,97712,94400],{"class":735},[28,97714,97715],{"class":30,"line":2137},[28,97716,97717],{"class":73},"#对列行同时进行切片，使用了step参数\n",[28,97719,97720,97723,97725,97728,97730],{"class":30,"line":2143},[28,97721,97722],{"class":34},"a[::",[28,97724,93],{"class":38},[28,97726,97727],{"class":34},",::",[28,97729,93],{"class":38},[28,97731,111],{"class":34},[14,97733,97734],{},"⑤同时获取两个元素",[18,97736,97738],{"className":20,"code":97737,"language":22,"meta":23,"style":23},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[25,97739,97740,97745,97750],{"__ignoreMap":23},[28,97741,97742],{"class":30,"line":31},[28,97743,97744],{"class":73},"#同时获取第三行第二列，第四行第一列\n",[28,97746,97747],{"class":30,"line":77},[28,97748,97749],{"class":73},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[28,97751,97752,97755,97757,97759,97761,97763,97765,97767,97769],{"class":30,"line":114},[28,97753,97754],{"class":34},"a[(",[28,97756,93],{"class":38},[28,97758,90],{"class":34},[28,97760,98],{"class":38},[28,97762,42724],{"class":34},[28,97764,39],{"class":38},[28,97766,90],{"class":34},[28,97768,822],{"class":38},[28,97770,97771],{"class":34},")]\n",[14,97773,97774],{},"⑥切片，对行进行反向获取",[18,97776,97778],{"className":20,"code":97777,"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,97779,97780,97785,97795,97799,97803,97808,97813,97818,97823,97827,97832,97848,97852,97857,97862,97867,97872],{"__ignoreMap":23},[28,97781,97782],{"class":30,"line":31},[28,97783,97784],{"class":73},"#切片 对所有行进行反向获取\n",[28,97786,97787,97789,97791,97793],{"class":30,"line":77},[28,97788,97722],{"class":34},[28,97790,445],{"class":42},[28,97792,39],{"class":38},[28,97794,111],{"class":34},[28,97796,97797],{"class":30,"line":114},[28,97798,94036],{"class":73},[28,97800,97801],{"class":30,"line":128},[28,97802,94400],{"class":735},[28,97804,97805],{"class":30,"line":393},[28,97806,97807],{"class":735},"array([[19, 20, 21, 22, 23, 24],\n",[28,97809,97810],{"class":30,"line":409},[28,97811,97812],{"class":735},"       [13, 14, 15, 16, 17, 18],\n",[28,97814,97815],{"class":30,"line":1711},[28,97816,97817],{"class":735},"       [ 7,  8,  9, 10, 11, 12],\n",[28,97819,97820],{"class":30,"line":1802},[28,97821,97822],{"class":735},"       [ 1,  2,  3,  4,  5,  6]])\n",[28,97824,97825],{"class":30,"line":1808},[28,97826,94400],{"class":735},[28,97828,97829],{"class":30,"line":1820},[28,97830,97831],{"class":73},"#对行列都进行反向切片获取\n",[28,97833,97834,97836,97838,97840,97842,97844,97846],{"class":30,"line":2102},[28,97835,97722],{"class":34},[28,97837,445],{"class":42},[28,97839,39],{"class":38},[28,97841,97727],{"class":34},[28,97843,445],{"class":42},[28,97845,39],{"class":38},[28,97847,111],{"class":34},[28,97849,97850],{"class":30,"line":2107},[28,97851,94400],{"class":735},[28,97853,97854],{"class":30,"line":2113},[28,97855,97856],{"class":735},"array([[24, 23, 22, 21, 20, 19],\n",[28,97858,97859],{"class":30,"line":2118},[28,97860,97861],{"class":735},"       [18, 17, 16, 15, 14, 13],\n",[28,97863,97864],{"class":30,"line":2132},[28,97865,97866],{"class":735},"       [12, 11, 10,  9,  8,  7],\n",[28,97868,97869],{"class":30,"line":2137},[28,97870,97871],{"class":735},"       [ 6,  5,  4,  3,  2,  1]])\n",[28,97873,97874],{"class":30,"line":2143},[28,97875,94400],{"class":735},[14,97877,97878],{},"⑦修改元素",[18,97880,97882],{"className":20,"code":97881,"language":22,"meta":23,"style":23},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[25,97883,97884,97889,97907,97912],{"__ignoreMap":23},[28,97885,97886],{"class":30,"line":31},[28,97887,97888],{"class":73},"#获取前两行和前两列\n",[28,97890,97891,97894,97896,97898,97900,97903,97905],{"class":30,"line":77},[28,97892,97893],{"class":34},"sub_a",[28,97895,83],{"class":42},[28,97897,97641],{"class":34},[28,97899,93],{"class":38},[28,97901,97902],{"class":34},",:",[28,97904,93],{"class":38},[28,97906,111],{"class":34},[28,97908,97909],{"class":30,"line":114},[28,97910,97911],{"class":73},"#修改sub_a第一个元素的值\n",[28,97913,97914,97917,97919,97921,97923,97925,97927],{"class":30,"line":128},[28,97915,97916],{"class":34},"sub_a[",[28,97918,822],{"class":38},[28,97920,90],{"class":34},[28,97922,822],{"class":38},[28,97924,1559],{"class":34},[28,97926,83],{"class":42},[28,97928,97929],{"class":38},"100\n",[14,97931,97932],{},"⑧数组复制copy()",[18,97934,97936],{"className":20,"code":97935,"language":22,"meta":23,"style":23},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[25,97937,97938,97943,97953,97958],{"__ignoreMap":23},[28,97939,97940],{"class":30,"line":31},[28,97941,97942],{"class":73},"#数组复制\n",[28,97944,97945,97948,97950],{"class":30,"line":77},[28,97946,97947],{"class":34},"copy_a",[28,97949,83],{"class":42},[28,97951,97952],{"class":34},"np.copy(sub_a)\n",[28,97954,97955],{"class":30,"line":114},[28,97956,97957],{"class":73},"#修改copy_a后不影响原数组\n",[28,97959,97960,97963,97965,97967,97969,97971,97973],{"class":30,"line":128},[28,97961,97962],{"class":34},"copy_a[",[28,97964,822],{"class":38},[28,97966,90],{"class":34},[28,97968,822],{"class":38},[28,97970,1559],{"class":34},[28,97972,83],{"class":42},[28,97974,97929],{"class":38},[14,97976,97977],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[547,97979,97980],{},"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":77,"depth":77,"links":97982},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97499,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97989,"title":97990,"body":97991,"description":559,"extension":560,"meta":98483,"navigation":562,"path":98484,"seo":98485,"stem":98486,"__hash__":98487},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97992,"toc":98475},[97993,97996,98000,98003,98006,98059,98062,98087,98090,98109,98129,98132,98148,98152,98198,98202,98244,98248,98251,98254,98257,98260,98263,98325,98385,98389,98392,98449,98453,98458,98467,98472],[10,97994,97990],{"id":97995},"_5改变数组的维度",[60,97997,97999],{"id":97998},"_51-使用reshape","5.1 使用reshape()",[14,98001,98002],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,98004,98005],{},"①一维数组转换为二维数组",[18,98007,98009],{"className":20,"code":98008,"language":22,"meta":23,"style":23},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[25,98010,98011,98027,98032,98037,98042],{"__ignoreMap":23},[28,98012,98013,98015,98017,98019,98021,98023,98025],{"class":30,"line":31},[28,98014,80],{"class":34},[28,98016,83],{"class":42},[28,98018,218],{"class":34},[28,98020,39],{"class":38},[28,98022,90],{"class":34},[28,98024,317],{"class":38},[28,98026,228],{"class":34},[28,98028,98029],{"class":30,"line":77},[28,98030,98031],{"class":73},"#将一维数组进行转换\n",[28,98033,98034],{"class":30,"line":114},[28,98035,98036],{"class":73},"#注意点：元素个数不可以变\n",[28,98038,98039],{"class":30,"line":128},[28,98040,98041],{"class":73},"#转换维度要保持一致，不一致就异常！！！\n",[28,98043,98044,98046,98048,98051,98053,98055,98057],{"class":30,"line":393},[28,98045,306],{"class":34},[28,98047,83],{"class":42},[28,98049,98050],{"class":34},"a.reshape(",[28,98052,93],{"class":38},[28,98054,90],{"class":34},[28,98056,970],{"class":38},[28,98058,228],{"class":34},[14,98060,98061],{},"②一维数组转换为三维数组",[18,98063,98065],{"className":20,"code":98064,"language":22,"meta":23,"style":23},"aaa=a.reshape(2,3,2)\n",[25,98066,98067],{"__ignoreMap":23},[28,98068,98069,98071,98073,98075,98077,98079,98081,98083,98085],{"class":30,"line":31},[28,98070,95992],{"class":34},[28,98072,83],{"class":42},[28,98074,98050],{"class":34},[28,98076,93],{"class":38},[28,98078,90],{"class":34},[28,98080,98],{"class":38},[28,98082,90],{"class":34},[28,98084,93],{"class":38},[28,98086,228],{"class":34},[14,98088,98089],{},"③二维数组转化为一维数组",[18,98091,98093],{"className":20,"code":98092,"language":22,"meta":23,"style":23},"#知道元素个数：\naa.reshape(12)\n",[25,98094,98095,98100],{"__ignoreMap":23},[28,98096,98097],{"class":30,"line":31},[28,98098,98099],{"class":73},"#知道元素个数：\n",[28,98101,98102,98105,98107],{"class":30,"line":77},[28,98103,98104],{"class":34},"aa.reshape(",[28,98106,1121],{"class":38},[28,98108,228],{"class":34},[18,98110,98112],{"className":20,"code":98111,"language":22,"meta":23,"style":23},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[25,98113,98114,98119],{"__ignoreMap":23},[28,98115,98116],{"class":30,"line":31},[28,98117,98118],{"class":73},"#不知道元素个数，参数传递-1\n",[28,98120,98121,98123,98125,98127],{"class":30,"line":77},[28,98122,98104],{"class":34},[28,98124,445],{"class":42},[28,98126,39],{"class":38},[28,98128,228],{"class":34},[14,98130,98131],{},"④三维数组转换为一维数组",[18,98133,98135],{"className":20,"code":98134,"language":22,"meta":23,"style":23},"aaa.reshape(-1)\n",[25,98136,98137],{"__ignoreMap":23},[28,98138,98139,98142,98144,98146],{"class":30,"line":31},[28,98140,98141],{"class":34},"aaa.reshape(",[28,98143,445],{"class":42},[28,98145,39],{"class":38},[28,98147,228],{"class":34},[60,98149,98151],{"id":98150},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[18,98153,98155],{"className":20,"code":98154,"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,98156,98157,98184,98189,98193],{"__ignoreMap":23},[28,98158,98159,98161,98163,98165,98167,98169,98171,98173,98175,98177,98179,98181],{"class":30,"line":31},[28,98160,306],{"class":34},[28,98162,83],{"class":42},[28,98164,218],{"class":34},[28,98166,39],{"class":38},[28,98168,90],{"class":34},[28,98170,317],{"class":38},[28,98172,320],{"class":34},[28,98174,93],{"class":38},[28,98176,90],{"class":34},[28,98178,970],{"class":38},[28,98180,1054],{"class":34},[28,98182,98183],{"class":73},"#转换为2行6列的数组\n",[28,98185,98186],{"class":30,"line":77},[28,98187,98188],{"class":34},"aa.revel()\n",[28,98190,98191],{"class":30,"line":114},[28,98192,94036],{"class":73},[28,98194,98195],{"class":30,"line":128},[28,98196,98197],{"class":73},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[60,98199,98201],{"id":98200},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[18,98203,98205],{"className":20,"code":98204,"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,98206,98207,98231,98236,98240],{"__ignoreMap":23},[28,98208,98209,98211,98213,98215,98217,98219,98221,98223,98225,98227,98229],{"class":30,"line":31},[28,98210,306],{"class":34},[28,98212,83],{"class":42},[28,98214,218],{"class":34},[28,98216,39],{"class":38},[28,98218,90],{"class":34},[28,98220,317],{"class":38},[28,98222,320],{"class":34},[28,98224,93],{"class":38},[28,98226,90],{"class":34},[28,98228,970],{"class":38},[28,98230,228],{"class":34},[28,98232,98233],{"class":30,"line":77},[28,98234,98235],{"class":34},"aa.flatten()\n",[28,98237,98238],{"class":30,"line":114},[28,98239,94036],{"class":73},[28,98241,98242],{"class":30,"line":128},[28,98243,98197],{"class":73},[60,98245,98247],{"id":98246},"_54-使用resize","5.4 使用resize()",[14,98249,98250],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98252,98253],{},"通过resize方法可以改变数组的维度",[14,98255,98256],{},"#resize修改数组维度",[14,98258,98259],{},"#以元组的形式指定形状",[14,98261,98262],{},"#改变的是原数组",[18,98264,98266],{"className":20,"code":98265,"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,98267,98268,98284,98304,98317,98321],{"__ignoreMap":23},[28,98269,98270,98272,98274,98276,98278,98280,98282],{"class":30,"line":31},[28,98271,80],{"class":34},[28,98273,83],{"class":42},[28,98275,218],{"class":34},[28,98277,39],{"class":38},[28,98279,90],{"class":34},[28,98281,317],{"class":38},[28,98283,228],{"class":34},[28,98285,98286,98289,98291,98293,98295,98297,98299,98301],{"class":30,"line":77},[28,98287,98288],{"class":34},"a.shape",[28,98290,83],{"class":42},[28,98292,367],{"class":34},[28,98294,93],{"class":38},[28,98296,90],{"class":34},[28,98298,970],{"class":38},[28,98300,1054],{"class":34},[28,98302,98303],{"class":73},"#改变了原数组\n",[28,98305,98306,98308,98310,98313,98315],{"class":30,"line":114},[28,98307,80],{"class":34},[28,98309,83],{"class":42},[28,98311,98312],{"class":34},"resize((",[28,98314,1121],{"class":38},[28,98316,30980],{"class":34},[28,98318,98319],{"class":30,"line":128},[28,98320,94036],{"class":73},[28,98322,98323],{"class":30,"line":393},[28,98324,98197],{"class":73},[18,98326,98328],{"className":20,"code":98327,"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,98329,98330,98343,98347,98351,98356,98361,98366,98371,98376,98381],{"__ignoreMap":23},[28,98331,98332,98335,98337,98339,98341],{"class":30,"line":31},[28,98333,98334],{"class":34},"a.resize((",[28,98336,970],{"class":38},[28,98338,90],{"class":34},[28,98340,93],{"class":38},[28,98342,30980],{"class":34},[28,98344,98345],{"class":30,"line":77},[28,98346,94036],{"class":73},[28,98348,98349],{"class":30,"line":114},[28,98350,94400],{"class":735},[28,98352,98353],{"class":30,"line":128},[28,98354,98355],{"class":735},"array([[ 1,  2],\n",[28,98357,98358],{"class":30,"line":393},[28,98359,98360],{"class":735},"       [ 3,  4],\n",[28,98362,98363],{"class":30,"line":409},[28,98364,98365],{"class":735},"       [ 5,  6],\n",[28,98367,98368],{"class":30,"line":1711},[28,98369,98370],{"class":735},"       [ 7,  8],\n",[28,98372,98373],{"class":30,"line":1802},[28,98374,98375],{"class":735},"       [ 9, 10],\n",[28,98377,98378],{"class":30,"line":1808},[28,98379,98380],{"class":735},"       [11, 12]])\n",[28,98382,98383],{"class":30,"line":1820},[28,98384,94400],{"class":735},[60,98386,98388],{"id":98387},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98390,98391],{},"改变了原数组",[18,98393,98395],{"className":20,"code":98394,"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,98396,98397,98413,98429,98433,98437,98441,98445],{"__ignoreMap":23},[28,98398,98399,98401,98403,98405,98407,98409,98411],{"class":30,"line":31},[28,98400,80],{"class":34},[28,98402,83],{"class":42},[28,98404,218],{"class":34},[28,98406,39],{"class":38},[28,98408,90],{"class":34},[28,98410,317],{"class":38},[28,98412,228],{"class":34},[28,98414,98415,98417,98419,98421,98423,98425,98427],{"class":30,"line":77},[28,98416,98288],{"class":34},[28,98418,83],{"class":42},[28,98420,367],{"class":34},[28,98422,93],{"class":38},[28,98424,90],{"class":34},[28,98426,970],{"class":38},[28,98428,228],{"class":34},[28,98430,98431],{"class":30,"line":114},[28,98432,94036],{"class":73},[28,98434,98435],{"class":30,"line":128},[28,98436,94400],{"class":735},[28,98438,98439],{"class":30,"line":393},[28,98440,97659],{"class":735},[28,98442,98443],{"class":30,"line":409},[28,98444,97664],{"class":735},[28,98446,98447],{"class":30,"line":1711},[28,98448,94400],{"class":735},[60,98450,98452],{"id":98451},"_56-重要比较","5.6 重要比较：",[14,98454,98455],{},[420,98456],{"alt":23,"src":98457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98459,98460,98461,98463,98464,98466],{},"口诀：NumPy 函数要么用 ",[25,98462,96434],{},"，要么用 ",[25,98465,31975],{},"，创建结构用 shape，造数据用 size",[14,98468,98469],{},[420,98470],{"alt":23,"src":98471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[547,98473,98474],{},"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":77,"depth":77,"links":98476},[98477,98478,98479,98480,98481,98482],{"id":97998,"depth":77,"text":97999},{"id":98150,"depth":77,"text":98151},{"id":98200,"depth":77,"text":98201},{"id":98246,"depth":77,"text":98247},{"id":98387,"depth":77,"text":98388},{"id":98451,"depth":77,"text":98452},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97990,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98489,"title":98490,"body":98491,"description":559,"extension":560,"meta":99562,"navigation":562,"path":99563,"seo":99564,"stem":99565,"__hash__":99566},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98492,"toc":99556},[98493,98496,98500,98503,98506,98509,98574,98577,98617,98620,98701,98704,98709,98731,98733,98738,98743,98746,98749,98904,98907,99109,99113,99116,99119,99187,99189,99194,99197,99200,99280,99284,99287,99289,99362,99364,99369,99371,99451,99455,99458,99461,99464,99467,99470,99473,99553],[10,98494,98490],{"id":98495},"_6数组的拼接",[60,98497,98499],{"id":98498},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98501,98502],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98504,98505],{},"函数内部传两个数列构成的数列或者元组",[14,98507,98508],{},"①一维数组的拼接",[18,98510,98512],{"className":20,"code":98511,"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,98513,98514,98534,98554,98559,98564,98569],{"__ignoreMap":23},[28,98515,98516,98518,98520,98522,98524,98526,98528,98530,98532],{"class":30,"line":31},[28,98517,80],{"class":34},[28,98519,83],{"class":42},[28,98521,93499],{"class":34},[28,98523,39],{"class":38},[28,98525,90],{"class":34},[28,98527,93],{"class":38},[28,98529,90],{"class":34},[28,98531,98],{"class":38},[28,98533,5145],{"class":34},[28,98535,98536,98538,98540,98542,98544,98546,98548,98550,98552],{"class":30,"line":77},[28,98537,117],{"class":34},[28,98539,83],{"class":42},[28,98541,93499],{"class":34},[28,98543,103],{"class":38},[28,98545,90],{"class":34},[28,98547,108],{"class":38},[28,98549,90],{"class":34},[28,98551,970],{"class":38},[28,98553,5145],{"class":34},[28,98555,98556],{"class":30,"line":114},[28,98557,98558],{"class":73},"#调用concatenate进行数组拼接\n",[28,98560,98561],{"class":30,"line":128},[28,98562,98563],{"class":34},"np.concatenate((a,b))\n",[28,98565,98566],{"class":30,"line":393},[28,98567,98568],{"class":73},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[28,98570,98571],{"class":30,"line":409},[28,98572,98573],{"class":73},"#np.concatenate([a,b])\n",[14,98575,98576],{},"②一维多个数组拼接",[18,98578,98580],{"className":20,"code":98579,"language":22,"meta":23,"style":23},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[25,98581,98582,98587,98607,98612],{"__ignoreMap":23},[28,98583,98584],{"class":30,"line":31},[28,98585,98586],{"class":73},"#也可以多个数组进行拼接\n",[28,98588,98589,98591,98593,98595,98597,98599,98601,98603,98605],{"class":30,"line":77},[28,98590,916],{"class":34},[28,98592,83],{"class":42},[28,98594,93499],{"class":34},[28,98596,225],{"class":38},[28,98598,90],{"class":34},[28,98600,1095],{"class":38},[28,98602,90],{"class":34},[28,98604,317],{"class":38},[28,98606,5145],{"class":34},[28,98608,98609],{"class":30,"line":114},[28,98610,98611],{"class":34},"c\n",[28,98613,98614],{"class":30,"line":128},[28,98615,98616],{"class":34},"np.concatenate((a,b,c))\n",[14,98618,98619],{},"③二维数组拼接",[18,98621,98623],{"className":20,"code":98622,"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,98624,98625,98630,98654,98678,98683,98688],{"__ignoreMap":23},[28,98626,98627],{"class":30,"line":31},[28,98628,98629],{"class":73},"#二维数组使用concatenate进行拼接\n",[28,98631,98632,98634,98636,98638,98640,98642,98644,98646,98648,98650,98652],{"class":30,"line":77},[28,98633,306],{"class":34},[28,98635,83],{"class":42},[28,98637,218],{"class":34},[28,98639,39],{"class":38},[28,98641,90],{"class":34},[28,98643,317],{"class":38},[28,98645,320],{"class":34},[28,98647,98],{"class":38},[28,98649,90],{"class":34},[28,98651,103],{"class":38},[28,98653,228],{"class":34},[28,98655,98656,98658,98660,98662,98664,98666,98668,98670,98672,98674,98676],{"class":30,"line":114},[28,98657,348],{"class":34},[28,98659,83],{"class":42},[28,98661,218],{"class":34},[28,98663,963],{"class":38},[28,98665,90],{"class":34},[28,98667,1262],{"class":38},[28,98669,320],{"class":34},[28,98671,98],{"class":38},[28,98673,90],{"class":34},[28,98675,103],{"class":38},[28,98677,228],{"class":34},[28,98679,98680],{"class":30,"line":128},[28,98681,98682],{"class":73},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[28,98684,98685],{"class":30,"line":393},[28,98686,98687],{"class":73},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[28,98689,98690,98693,98695,98697,98699],{"class":30,"line":409},[28,98691,98692],{"class":34},"np.concatenate((aa,bb),",[28,98694,47991],{"class":5704},[28,98696,83],{"class":42},[28,98698,822],{"class":38},[28,98700,228],{"class":34},[14,98702,98703],{},"结果：",[14,98705,98706],{},[420,98707],{"alt":23,"src":98708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[18,98710,98712],{"className":20,"code":98711,"language":22,"meta":23,"style":23},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[25,98713,98714,98719],{"__ignoreMap":23},[28,98715,98716],{"class":30,"line":31},[28,98717,98718],{"class":73},"#指定axis为1进行拼接\n",[28,98720,98721,98723,98725,98727,98729],{"class":30,"line":77},[28,98722,98692],{"class":34},[28,98724,47991],{"class":5704},[28,98726,83],{"class":42},[28,98728,39],{"class":38},[28,98730,228],{"class":34},[14,98732,98703],{},[14,98734,98735],{},[420,98736],{"alt":23,"src":98737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98739,98740],{},[780,98741,98742],{},"二维数组总结：0竖着方向，1横着方向",[14,98744,98745],{},"④三维数组拼接",[14,98747,98748],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[18,98750,98752],{"className":20,"code":98751,"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,98753,98754,98759,98787,98817,98822,98839,98844,98849,98854,98871,98876,98881,98886,98899],{"__ignoreMap":23},[28,98755,98756],{"class":30,"line":31},[28,98757,98758],{"class":73},"#两个三行六列\n",[28,98760,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779,98781,98783,98785],{"class":30,"line":77},[28,98762,95992],{"class":34},[28,98764,83],{"class":42},[28,98766,218],{"class":34},[28,98768,39],{"class":38},[28,98770,90],{"class":34},[28,98772,951],{"class":38},[28,98774,320],{"class":34},[28,98776,93],{"class":38},[28,98778,90],{"class":34},[28,98780,98],{"class":38},[28,98782,90],{"class":34},[28,98784,970],{"class":38},[28,98786,228],{"class":34},[28,98788,98789,98792,98794,98796,98798,98800,98803,98805,98807,98809,98811,98813,98815],{"class":30,"line":114},[28,98790,98791],{"class":34},"bbb",[28,98793,83],{"class":42},[28,98795,218],{"class":34},[28,98797,963],{"class":38},[28,98799,90],{"class":34},[28,98801,98802],{"class":38},"137",[28,98804,320],{"class":34},[28,98806,93],{"class":38},[28,98808,90],{"class":34},[28,98810,98],{"class":38},[28,98812,90],{"class":34},[28,98814,970],{"class":38},[28,98816,228],{"class":34},[28,98818,98819],{"class":30,"line":128},[28,98820,98821],{"class":73},"#axis=0\n",[28,98823,98824,98826,98828,98831,98833,98835,98837],{"class":30,"line":393},[28,98825,1315],{"class":34},[28,98827,83],{"class":42},[28,98829,98830],{"class":34},"np.concatenate((aaa,bbb),",[28,98832,47991],{"class":5704},[28,98834,83],{"class":42},[28,98836,822],{"class":38},[28,98838,228],{"class":34},[28,98840,98841],{"class":30,"line":409},[28,98842,98843],{"class":34},"s.shape\n",[28,98845,98846],{"class":30,"line":1711},[28,98847,98848],{"class":73},"#输出：(4,3,6)\n",[28,98850,98851],{"class":30,"line":1802},[28,98852,98853],{"class":73},"#axis=1\n",[28,98855,98856,98859,98861,98863,98865,98867,98869],{"class":30,"line":1808},[28,98857,98858],{"class":34},"ss",[28,98860,83],{"class":42},[28,98862,98830],{"class":34},[28,98864,47991],{"class":5704},[28,98866,83],{"class":42},[28,98868,39],{"class":38},[28,98870,228],{"class":34},[28,98872,98873],{"class":30,"line":1820},[28,98874,98875],{"class":34},"ss.shape\n",[28,98877,98878],{"class":30,"line":2102},[28,98879,98880],{"class":73},"#输出：(2,6,6)\n",[28,98882,98883],{"class":30,"line":2107},[28,98884,98885],{"class":73},"#axis=2\n",[28,98887,98888,98890,98892,98894,98896],{"class":30,"line":2113},[28,98889,98830],{"class":34},[28,98891,47991],{"class":5704},[28,98893,83],{"class":42},[28,98895,93],{"class":38},[28,98897,98898],{"class":34},").shape\n",[28,98900,98901],{"class":30,"line":2118},[28,98902,98903],{"class":73},"#输出：（2，3，12）\n",[14,98905,98906],{},"⑤四维数组拼接",[18,98908,98910],{"className":20,"code":98909,"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,98911,98912,98916,98944,98972,98997,99023,99027,99040,99045,99049,99061,99066,99070,99082,99087,99092,99104],{"__ignoreMap":23},[28,98913,98914],{"class":30,"line":31},[28,98915,98758],{"class":73},[28,98917,98918,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938,98940,98942],{"class":30,"line":77},[28,98919,95992],{"class":34},[28,98921,83],{"class":42},[28,98923,218],{"class":34},[28,98925,39],{"class":38},[28,98927,90],{"class":34},[28,98929,951],{"class":38},[28,98931,320],{"class":34},[28,98933,93],{"class":38},[28,98935,90],{"class":34},[28,98937,98],{"class":38},[28,98939,90],{"class":34},[28,98941,970],{"class":38},[28,98943,228],{"class":34},[28,98945,98946,98948,98950,98952,98954,98956,98958,98960,98962,98964,98966,98968,98970],{"class":30,"line":114},[28,98947,98791],{"class":34},[28,98949,83],{"class":42},[28,98951,218],{"class":34},[28,98953,963],{"class":38},[28,98955,90],{"class":34},[28,98957,98802],{"class":38},[28,98959,320],{"class":34},[28,98961,93],{"class":38},[28,98963,90],{"class":34},[28,98965,98],{"class":38},[28,98967,90],{"class":34},[28,98969,970],{"class":38},[28,98971,228],{"class":34},[28,98973,98974,98977,98979,98981,98983,98985,98987,98989,98991,98993,98995],{"class":30,"line":128},[28,98975,98976],{"class":34},"aaaa",[28,98978,83],{"class":42},[28,98980,98141],{"class":34},[28,98982,93],{"class":38},[28,98984,90],{"class":34},[28,98986,98],{"class":38},[28,98988,90],{"class":34},[28,98990,98],{"class":38},[28,98992,90],{"class":34},[28,98994,93],{"class":38},[28,98996,228],{"class":34},[28,98998,98999,99002,99004,99007,99009,99011,99013,99015,99017,99019,99021],{"class":30,"line":393},[28,99000,99001],{"class":34},"bbbb",[28,99003,83],{"class":42},[28,99005,99006],{"class":34},"bbb.reshape(",[28,99008,93],{"class":38},[28,99010,90],{"class":34},[28,99012,98],{"class":38},[28,99014,90],{"class":34},[28,99016,98],{"class":38},[28,99018,90],{"class":34},[28,99020,93],{"class":38},[28,99022,228],{"class":34},[28,99024,99025],{"class":30,"line":409},[28,99026,98821],{"class":73},[28,99028,99029,99032,99034,99036,99038],{"class":30,"line":1711},[28,99030,99031],{"class":34},"np.concatenate((aaaa,bbbb),",[28,99033,47991],{"class":5704},[28,99035,83],{"class":42},[28,99037,822],{"class":38},[28,99039,98898],{"class":34},[28,99041,99042],{"class":30,"line":1802},[28,99043,99044],{"class":73},"#结果：（4，3，3，2）\n",[28,99046,99047],{"class":30,"line":1808},[28,99048,98853],{"class":73},[28,99050,99051,99053,99055,99057,99059],{"class":30,"line":1820},[28,99052,99031],{"class":34},[28,99054,47991],{"class":5704},[28,99056,83],{"class":42},[28,99058,39],{"class":38},[28,99060,98898],{"class":34},[28,99062,99063],{"class":30,"line":2102},[28,99064,99065],{"class":73},"#结果：（2，6，3，2）\n",[28,99067,99068],{"class":30,"line":2107},[28,99069,98885],{"class":73},[28,99071,99072,99074,99076,99078,99080],{"class":30,"line":2113},[28,99073,99031],{"class":34},[28,99075,47991],{"class":5704},[28,99077,83],{"class":42},[28,99079,93],{"class":38},[28,99081,98898],{"class":34},[28,99083,99084],{"class":30,"line":2118},[28,99085,99086],{"class":73},"#结果：（2，3，6，2）\n",[28,99088,99089],{"class":30,"line":2132},[28,99090,99091],{"class":73},"#axis=3\n",[28,99093,99094,99096,99098,99100,99102],{"class":30,"line":2137},[28,99095,99031],{"class":34},[28,99097,47991],{"class":5704},[28,99099,83],{"class":42},[28,99101,98],{"class":38},[28,99103,98898],{"class":34},[28,99105,99106],{"class":30,"line":2143},[28,99107,99108],{"class":73},"#结果：（2，3，3，4）\n",[60,99110,99112],{"id":99111},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99114,99115],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99117,99118],{},"①二维数组",[18,99120,99122],{"className":20,"code":99121,"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,99123,99124,99148,99172,99177,99182],{"__ignoreMap":23},[28,99125,99126,99128,99130,99132,99134,99136,99138,99140,99142,99144,99146],{"class":30,"line":31},[28,99127,306],{"class":34},[28,99129,83],{"class":42},[28,99131,218],{"class":34},[28,99133,39],{"class":38},[28,99135,90],{"class":34},[28,99137,317],{"class":38},[28,99139,320],{"class":34},[28,99141,98],{"class":38},[28,99143,90],{"class":34},[28,99145,103],{"class":38},[28,99147,228],{"class":34},[28,99149,99150,99152,99154,99156,99158,99160,99162,99164,99166,99168,99170],{"class":30,"line":77},[28,99151,348],{"class":34},[28,99153,83],{"class":42},[28,99155,218],{"class":34},[28,99157,963],{"class":38},[28,99159,90],{"class":34},[28,99161,1262],{"class":38},[28,99163,320],{"class":34},[28,99165,98],{"class":38},[28,99167,90],{"class":34},[28,99169,103],{"class":38},[28,99171,228],{"class":34},[28,99173,99174],{"class":30,"line":114},[28,99175,99176],{"class":34},"np.hstack((aa,bb))\n",[28,99178,99179],{"class":30,"line":128},[28,99180,99181],{"class":73},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[28,99183,99184],{"class":30,"line":393},[28,99185,99186],{"class":73},"#np.hstack([aa,bb])\n",[14,99188,98703],{},[14,99190,99191],{},[420,99192],{"alt":23,"src":99193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99195,99196],{},"等效于concatenate()函数中axis=1时的情况",[14,99198,99199],{},"②三维数组",[18,99201,99203],{"className":20,"code":99202,"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,99204,99205,99209,99237,99265,99270,99275],{"__ignoreMap":23},[28,99206,99207],{"class":30,"line":31},[28,99208,98758],{"class":73},[28,99210,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235],{"class":30,"line":77},[28,99212,95992],{"class":34},[28,99214,83],{"class":42},[28,99216,218],{"class":34},[28,99218,39],{"class":38},[28,99220,90],{"class":34},[28,99222,951],{"class":38},[28,99224,320],{"class":34},[28,99226,93],{"class":38},[28,99228,90],{"class":34},[28,99230,98],{"class":38},[28,99232,90],{"class":34},[28,99234,970],{"class":38},[28,99236,228],{"class":34},[28,99238,99239,99241,99243,99245,99247,99249,99251,99253,99255,99257,99259,99261,99263],{"class":30,"line":114},[28,99240,98791],{"class":34},[28,99242,83],{"class":42},[28,99244,218],{"class":34},[28,99246,963],{"class":38},[28,99248,90],{"class":34},[28,99250,98802],{"class":38},[28,99252,320],{"class":34},[28,99254,93],{"class":38},[28,99256,90],{"class":34},[28,99258,98],{"class":38},[28,99260,90],{"class":34},[28,99262,970],{"class":38},[28,99264,228],{"class":34},[28,99266,99267],{"class":30,"line":128},[28,99268,99269],{"class":73},"#使用hstack\n",[28,99271,99272],{"class":30,"line":393},[28,99273,99274],{"class":34},"np.hstack((aaa,bbb)).shape\n",[28,99276,99277],{"class":30,"line":409},[28,99278,99279],{"class":73},"#输出：（2，6，6）\n",[60,99281,99283],{"id":99282},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99285,99286],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99288,99118],{},[18,99290,99292],{"className":20,"code":99291,"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,99293,99294,99318,99342,99347,99352,99357],{"__ignoreMap":23},[28,99295,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316],{"class":30,"line":31},[28,99297,306],{"class":34},[28,99299,83],{"class":42},[28,99301,218],{"class":34},[28,99303,39],{"class":38},[28,99305,90],{"class":34},[28,99307,317],{"class":38},[28,99309,320],{"class":34},[28,99311,98],{"class":38},[28,99313,90],{"class":34},[28,99315,103],{"class":38},[28,99317,228],{"class":34},[28,99319,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338,99340],{"class":30,"line":77},[28,99321,348],{"class":34},[28,99323,83],{"class":42},[28,99325,218],{"class":34},[28,99327,963],{"class":38},[28,99329,90],{"class":34},[28,99331,1262],{"class":38},[28,99333,320],{"class":34},[28,99335,98],{"class":38},[28,99337,90],{"class":34},[28,99339,103],{"class":38},[28,99341,228],{"class":34},[28,99343,99344],{"class":30,"line":114},[28,99345,99346],{"class":73},"#vstack 垂直方向进行堆叠\n",[28,99348,99349],{"class":30,"line":128},[28,99350,99351],{"class":34},"np.vstack((aa,bb))\n",[28,99353,99354],{"class":30,"line":393},[28,99355,99356],{"class":73},"#与hstack传的参数类似，等价于：\n",[28,99358,99359],{"class":30,"line":409},[28,99360,99361],{"class":34},"np.vstack([aa,bb])\n",[14,99363,98703],{},[14,99365,99366],{},[420,99367],{"alt":23,"src":99368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99370,99199],{},[18,99372,99374],{"className":20,"code":99373,"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,99375,99376,99380,99408,99436,99441,99446],{"__ignoreMap":23},[28,99377,99378],{"class":30,"line":31},[28,99379,98758],{"class":73},[28,99381,99382,99384,99386,99388,99390,99392,99394,99396,99398,99400,99402,99404,99406],{"class":30,"line":77},[28,99383,95992],{"class":34},[28,99385,83],{"class":42},[28,99387,218],{"class":34},[28,99389,39],{"class":38},[28,99391,90],{"class":34},[28,99393,951],{"class":38},[28,99395,320],{"class":34},[28,99397,93],{"class":38},[28,99399,90],{"class":34},[28,99401,98],{"class":38},[28,99403,90],{"class":34},[28,99405,970],{"class":38},[28,99407,228],{"class":34},[28,99409,99410,99412,99414,99416,99418,99420,99422,99424,99426,99428,99430,99432,99434],{"class":30,"line":114},[28,99411,98791],{"class":34},[28,99413,83],{"class":42},[28,99415,218],{"class":34},[28,99417,963],{"class":38},[28,99419,90],{"class":34},[28,99421,98802],{"class":38},[28,99423,320],{"class":34},[28,99425,93],{"class":38},[28,99427,90],{"class":34},[28,99429,98],{"class":38},[28,99431,90],{"class":34},[28,99433,970],{"class":38},[28,99435,228],{"class":34},[28,99437,99438],{"class":30,"line":128},[28,99439,99440],{"class":73},"#使用vstack\n",[28,99442,99443],{"class":30,"line":393},[28,99444,99445],{"class":34},"np.vstack((aaa,bbb)).shape\n",[28,99447,99448],{"class":30,"line":409},[28,99449,99450],{"class":73},"#输出：（4，3，6）\n",[60,99452,99454],{"id":99453},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99456,99457],{},"该方法是三维数组特有的方法",[14,99459,99460],{},"也就是说",[14,99462,99463],{},"一维数组拼接方法用：concatenate()",[14,99465,99466],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99468,99469],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99471,99472],{},"四维数组及多维数组只能用concatenate进行拼接",[18,99474,99476],{"className":20,"code":99475,"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,99477,99478,99482,99510,99538,99543,99548],{"__ignoreMap":23},[28,99479,99480],{"class":30,"line":31},[28,99481,98758],{"class":73},[28,99483,99484,99486,99488,99490,99492,99494,99496,99498,99500,99502,99504,99506,99508],{"class":30,"line":77},[28,99485,95992],{"class":34},[28,99487,83],{"class":42},[28,99489,218],{"class":34},[28,99491,39],{"class":38},[28,99493,90],{"class":34},[28,99495,951],{"class":38},[28,99497,320],{"class":34},[28,99499,93],{"class":38},[28,99501,90],{"class":34},[28,99503,98],{"class":38},[28,99505,90],{"class":34},[28,99507,970],{"class":38},[28,99509,228],{"class":34},[28,99511,99512,99514,99516,99518,99520,99522,99524,99526,99528,99530,99532,99534,99536],{"class":30,"line":114},[28,99513,98791],{"class":34},[28,99515,83],{"class":42},[28,99517,218],{"class":34},[28,99519,963],{"class":38},[28,99521,90],{"class":34},[28,99523,98802],{"class":38},[28,99525,320],{"class":34},[28,99527,93],{"class":38},[28,99529,90],{"class":34},[28,99531,98],{"class":38},[28,99533,90],{"class":34},[28,99535,970],{"class":38},[28,99537,228],{"class":34},[28,99539,99540],{"class":30,"line":128},[28,99541,99542],{"class":73},"#使用dstack\n",[28,99544,99545],{"class":30,"line":393},[28,99546,99547],{"class":34},"np.dstack((aaa,bbb)).shape\n",[28,99549,99550],{"class":30,"line":409},[28,99551,99552],{"class":73},"#结果：（2，3，12）\n",[547,99554,99555],{},"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":77,"depth":77,"links":99557},[99558,99559,99560,99561],{"id":98498,"depth":77,"text":98499},{"id":99111,"depth":77,"text":99112},{"id":99282,"depth":77,"text":99283},{"id":99453,"depth":77,"text":99454},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98490,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99568,"title":99569,"body":99570,"description":559,"extension":560,"meta":99845,"navigation":562,"path":99846,"seo":99847,"stem":99848,"__hash__":99849},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99571,"toc":99843},[99572,99575,99578,99672,99675,99678,99681,99684,99687,99690,99693,99696,99840],[10,99573,99569],{"id":99574},"_7数组转置",[14,99576,99577],{},"使用transpose()函数",[18,99579,99581],{"className":20,"code":99580,"language":22,"meta":23,"style":23},"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",[25,99582,99583,99593,99617,99622,99627,99632,99637,99645,99649,99653,99658,99663,99668],{"__ignoreMap":23},[28,99584,99585,99587,99589,99591],{"class":30,"line":31},[28,99586,536],{"class":42},[28,99588,31861],{"class":34},[28,99590,542],{"class":42},[28,99592,31866],{"class":34},[28,99594,99595,99597,99599,99601,99603,99605,99607,99609,99611,99613,99615],{"class":30,"line":77},[28,99596,80],{"class":34},[28,99598,83],{"class":42},[28,99600,32196],{"class":34},[28,99602,39],{"class":38},[28,99604,90],{"class":34},[28,99606,317],{"class":38},[28,99608,320],{"class":34},[28,99610,103],{"class":38},[28,99612,90],{"class":34},[28,99614,98],{"class":38},[28,99616,228],{"class":34},[28,99618,99619],{"class":30,"line":114},[28,99620,99621],{"class":73},"#二维数组转置\n",[28,99623,99624],{"class":30,"line":128},[28,99625,99626],{"class":73},"#调用transpose()函数\n",[28,99628,99629],{"class":30,"line":393},[28,99630,99631],{"class":34},"a.transpose()\n",[28,99633,99634],{"class":30,"line":409},[28,99635,99636],{"class":73},"#对于二维数组也可以采用.T来实现\n",[28,99638,99639,99642],{"class":30,"line":1711},[28,99640,99641],{"class":34},"a.T",[28,99643,99644],{"class":73},"#与上述代码一样\n",[28,99646,99647],{"class":30,"line":1802},[28,99648,94036],{"class":73},[28,99650,99651],{"class":30,"line":1808},[28,99652,94400],{"class":735},[28,99654,99655],{"class":30,"line":1820},[28,99656,99657],{"class":735},"array([[ 1,  4,  7, 10],\n",[28,99659,99660],{"class":30,"line":2102},[28,99661,99662],{"class":735},"       [ 2,  5,  8, 11],\n",[28,99664,99665],{"class":30,"line":2107},[28,99666,99667],{"class":735},"       [ 3,  6,  9, 12]])\n",[28,99669,99670],{"class":30,"line":2113},[28,99671,94400],{"class":735},[14,99673,99674],{},"也可以使用np.transpose()的形式",[14,99676,99677],{},"#多维数组进行转置 np.transpose()",[14,99679,99680],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99682,99683],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99685,99686],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99688,99689],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99691,99692],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99694,99695],{},"四维及以上的数组也是一样的道理",[18,99697,99699],{"className":20,"code":99698,"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,99700,99701,99729,99734,99739,99744,99762,99767,99799,99804,99809,99814,99835],{"__ignoreMap":23},[28,99702,99703,99705,99707,99709,99711,99713,99715,99717,99719,99721,99723,99725,99727],{"class":30,"line":31},[28,99704,1440],{"class":34},[28,99706,83],{"class":42},[28,99708,218],{"class":34},[28,99710,39],{"class":38},[28,99712,90],{"class":34},[28,99714,951],{"class":38},[28,99716,320],{"class":34},[28,99718,98],{"class":38},[28,99720,90],{"class":34},[28,99722,970],{"class":38},[28,99724,90],{"class":34},[28,99726,93],{"class":38},[28,99728,228],{"class":34},[28,99730,99731],{"class":30,"line":77},[28,99732,99733],{"class":34},"x.shape\n",[28,99735,99736],{"class":30,"line":114},[28,99737,99738],{"class":73},"#结果：（3,6,2）\n",[28,99740,99741],{"class":30,"line":128},[28,99742,99743],{"class":73},"#使用np.transpose()进行转置 变为(2,6,3)\n",[28,99745,99746,99749,99751,99753,99755,99757,99759],{"class":30,"line":393},[28,99747,99748],{"class":34},"np.transpose(x,(",[28,99750,93],{"class":38},[28,99752,90],{"class":34},[28,99754,39],{"class":38},[28,99756,90],{"class":34},[28,99758,822],{"class":38},[28,99760,99761],{"class":34},")).shape\n",[28,99763,99764],{"class":30,"line":409},[28,99765,99766],{"class":73},"#结果：(2,6,3)\n",[28,99768,99769,99771,99773,99775,99777,99779,99781,99783,99785,99787,99789,99791,99793,99795,99797],{"class":30,"line":1711},[28,99770,98976],{"class":34},[28,99772,83],{"class":42},[28,99774,218],{"class":34},[28,99776,39],{"class":38},[28,99778,90],{"class":34},[28,99780,951],{"class":38},[28,99782,320],{"class":34},[28,99784,98],{"class":38},[28,99786,90],{"class":34},[28,99788,93],{"class":38},[28,99790,90],{"class":34},[28,99792,39],{"class":38},[28,99794,90],{"class":34},[28,99796,970],{"class":38},[28,99798,228],{"class":34},[28,99800,99801],{"class":30,"line":1802},[28,99802,99803],{"class":34},"aaaa.shape\n",[28,99805,99806],{"class":30,"line":1808},[28,99807,99808],{"class":73},"#结果：（3，2，1，6）\n",[28,99810,99811],{"class":30,"line":1820},[28,99812,99813],{"class":73},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[28,99815,99816,99819,99821,99823,99825,99827,99829,99831,99833],{"class":30,"line":2102},[28,99817,99818],{"class":34},"np.transpose(aaaa,(",[28,99820,39],{"class":38},[28,99822,90],{"class":34},[28,99824,93],{"class":38},[28,99826,90],{"class":34},[28,99828,822],{"class":38},[28,99830,90],{"class":34},[28,99832,98],{"class":38},[28,99834,99761],{"class":34},[28,99836,99837],{"class":30,"line":2107},[28,99838,99839],{"class":73},"#结果：(2,1,3,6)\n",[547,99841,99842],{},"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":77,"depth":77,"links":99844},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99569,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99851,"title":99852,"body":99853,"description":559,"extension":560,"meta":100587,"navigation":562,"path":100588,"seo":100589,"stem":100590,"__hash__":100591},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99854,"toc":100585},[99855,99858,99861,99864,99867,99870,99873,99876,99879,99988,99991,99994,100582],[10,99856,99852],{"id":99857},"_8数组分割",[14,99859,99860],{},"split分割",[14,99862,99863],{},"numpy.split(ary,indics_or_sections,axis)",[14,99865,99866],{},"解释：",[14,99868,99869],{},"ary:被分割的数组",[14,99871,99872],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99874,99875],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99877,99878],{},"①一维数组的分割",[18,99880,99882],{"className":20,"code":99881,"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,99883,99884,99900,99905,99914,99918,99923,99931,99935,99940,99945,99958,99962,99967,99979,99983],{"__ignoreMap":23},[28,99885,99886,99888,99890,99892,99894,99896,99898],{"class":30,"line":31},[28,99887,80],{"class":34},[28,99889,83],{"class":42},[28,99891,218],{"class":34},[28,99893,39],{"class":38},[28,99895,90],{"class":34},[28,99897,1045],{"class":38},[28,99899,228],{"class":34},[28,99901,99902],{"class":30,"line":77},[28,99903,99904],{"class":73},"#如果传入整数，必须能够平分，否则会报错\n",[28,99906,99907,99910,99912],{"class":30,"line":114},[28,99908,99909],{"class":34},"np.split(a,",[28,99911,93],{"class":38},[28,99913,228],{"class":34},[28,99915,99916],{"class":30,"line":128},[28,99917,94036],{"class":73},[28,99919,99920],{"class":30,"line":393},[28,99921,99922],{"class":73},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[28,99924,99925,99927,99929],{"class":30,"line":409},[28,99926,99909],{"class":34},[28,99928,103],{"class":38},[28,99930,228],{"class":34},[28,99932,99933],{"class":30,"line":1711},[28,99934,94036],{"class":73},[28,99936,99937],{"class":30,"line":1802},[28,99938,99939],{"class":73},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[28,99941,99942],{"class":30,"line":1808},[28,99943,99944],{"class":73},"#传入数组\n",[28,99946,99947,99950,99952,99954,99956],{"class":30,"line":1820},[28,99948,99949],{"class":34},"np.split(a,[",[28,99951,98],{"class":38},[28,99953,90],{"class":34},[28,99955,108],{"class":38},[28,99957,5145],{"class":34},[28,99959,99960],{"class":30,"line":2102},[28,99961,94036],{"class":73},[28,99963,99964],{"class":30,"line":2107},[28,99965,99966],{"class":73},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[28,99968,99969,99971,99973,99975,99977],{"class":30,"line":2113},[28,99970,99949],{"class":34},[28,99972,108],{"class":38},[28,99974,90],{"class":34},[28,99976,995],{"class":38},[28,99978,5145],{"class":34},[28,99980,99981],{"class":30,"line":2118},[28,99982,94036],{"class":73},[28,99984,99985],{"class":30,"line":2132},[28,99986,99987],{"class":73},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99989,99990],{},"②二维数组的分割",[14,99992,99993],{},"使用split()",[18,99995,99997],{"className":20,"code":99996,"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,99998,99999,100004,100028,100033,100042,100046,100050,100055,100060,100065,100070,100075,100080,100085,100089,100102,100106,100110,100114,100118,100122,100127,100132,100137,100141,100146,100162,100166,100170,100175,100180,100185,100190,100195,100200,100205,100210,100215,100220,100225,100230,100235,100240,100245,100250,100255,100260,100264,100268,100288,100292,100296,100301,100306,100311,100316,100321,100326,100331,100336,100341,100346,100351,100356,100361,100366,100371,100376,100381,100386,100390,100395,100404,100408,100412,100416,100420,100424,100428,100432,100436,100440,100449,100453,100457,100461,100465,100469,100473,100477,100481,100485,100489,100493,100497,100501,100505,100509,100513,100517,100521,100525,100529,100533,100546,100550,100554,100558,100562,100566,100570,100574,100578],{"__ignoreMap":23},[28,100000,100001],{"class":30,"line":31},[28,100002,100003],{"class":73},"#二维数组分割\n",[28,100005,100006,100008,100010,100012,100014,100016,100018,100020,100022,100024,100026],{"class":30,"line":77},[28,100007,306],{"class":34},[28,100009,83],{"class":42},[28,100011,218],{"class":34},[28,100013,39],{"class":38},[28,100015,90],{"class":34},[28,100017,951],{"class":38},[28,100019,320],{"class":34},[28,100021,970],{"class":38},[28,100023,90],{"class":34},[28,100025,970],{"class":38},[28,100027,228],{"class":34},[28,100029,100030],{"class":30,"line":114},[28,100031,100032],{"class":73},"#默认axis=0  传入整数平均分,按行来的\n",[28,100034,100035,100038,100040],{"class":30,"line":128},[28,100036,100037],{"class":34},"np.split(aa,",[28,100039,98],{"class":38},[28,100041,228],{"class":34},[28,100043,100044],{"class":30,"line":393},[28,100045,96235],{"class":73},[28,100047,100048],{"class":30,"line":409},[28,100049,94400],{"class":735},[28,100051,100052],{"class":30,"line":1711},[28,100053,100054],{"class":735},"[array([[ 1,  2,  3,  4,  5,  6],\n",[28,100056,100057],{"class":30,"line":1802},[28,100058,100059],{"class":735},"        [ 7,  8,  9, 10, 11, 12]]),\n",[28,100061,100062],{"class":30,"line":1808},[28,100063,100064],{"class":735}," array([[13, 14, 15, 16, 17, 18],\n",[28,100066,100067],{"class":30,"line":1820},[28,100068,100069],{"class":735},"        [19, 20, 21, 22, 23, 24]]),\n",[28,100071,100072],{"class":30,"line":2102},[28,100073,100074],{"class":735}," array([[25, 26, 27, 28, 29, 30],\n",[28,100076,100077],{"class":30,"line":2107},[28,100078,100079],{"class":735},"        [31, 32, 33, 34, 35, 36]])]\n",[28,100081,100082],{"class":30,"line":2113},[28,100083,100084],{"class":735}," '''\n",[28,100086,100087],{"class":30,"line":2118},[28,100088,99944],{"class":73},[28,100090,100091,100094,100096,100098,100100],{"class":30,"line":2132},[28,100092,100093],{"class":34},"np.split(aa,[",[28,100095,93],{"class":38},[28,100097,90],{"class":34},[28,100099,108],{"class":38},[28,100101,5145],{"class":34},[28,100103,100104],{"class":30,"line":2137},[28,100105,96235],{"class":73},[28,100107,100108],{"class":30,"line":2143},[28,100109,94400],{"class":735},[28,100111,100112],{"class":30,"line":2164},[28,100113,100054],{"class":735},[28,100115,100116],{"class":30,"line":2169},[28,100117,100059],{"class":735},[28,100119,100120],{"class":30,"line":2183},[28,100121,100064],{"class":735},[28,100123,100124],{"class":30,"line":2188},[28,100125,100126],{"class":735},"        [19, 20, 21, 22, 23, 24],\n",[28,100128,100129],{"class":30,"line":2217},[28,100130,100131],{"class":735},"        [25, 26, 27, 28, 29, 30]]),\n",[28,100133,100134],{"class":30,"line":2222},[28,100135,100136],{"class":735}," array([[31, 32, 33, 34, 35, 36]])]\n",[28,100138,100139],{"class":30,"line":2239},[28,100140,94400],{"class":735},[28,100142,100143],{"class":30,"line":2244},[28,100144,100145],{"class":73},"#axis=1 按照列来分\n",[28,100147,100148,100150,100152,100154,100156,100158,100160],{"class":30,"line":2249},[28,100149,100037],{"class":34},[28,100151,98],{"class":38},[28,100153,90],{"class":34},[28,100155,47991],{"class":5704},[28,100157,83],{"class":42},[28,100159,39],{"class":38},[28,100161,228],{"class":34},[28,100163,100164],{"class":30,"line":2254},[28,100165,96235],{"class":73},[28,100167,100168],{"class":30,"line":2268},[28,100169,94400],{"class":735},[28,100171,100172],{"class":30,"line":2273},[28,100173,100174],{"class":735},"[array([[ 1,  2],\n",[28,100176,100177],{"class":30,"line":3067},[28,100178,100179],{"class":735},"        [ 7,  8],\n",[28,100181,100182],{"class":30,"line":3081},[28,100183,100184],{"class":735},"        [13, 14],\n",[28,100186,100187],{"class":30,"line":3089},[28,100188,100189],{"class":735},"        [19, 20],\n",[28,100191,100192],{"class":30,"line":3094},[28,100193,100194],{"class":735},"        [25, 26],\n",[28,100196,100197],{"class":30,"line":3100},[28,100198,100199],{"class":735},"        [31, 32]]),\n",[28,100201,100202],{"class":30,"line":3106},[28,100203,100204],{"class":735}," array([[ 3,  4],\n",[28,100206,100207],{"class":30,"line":3111},[28,100208,100209],{"class":735},"        [ 9, 10],\n",[28,100211,100212],{"class":30,"line":8436},[28,100213,100214],{"class":735},"        [15, 16],\n",[28,100216,100217],{"class":30,"line":8460},[28,100218,100219],{"class":735},"        [21, 22],\n",[28,100221,100222],{"class":30,"line":8465},[28,100223,100224],{"class":735},"        [27, 28],\n",[28,100226,100227],{"class":30,"line":8471},[28,100228,100229],{"class":735},"        [33, 34]]),\n",[28,100231,100232],{"class":30,"line":8498},[28,100233,100234],{"class":735}," array([[ 5,  6],\n",[28,100236,100237],{"class":30,"line":8503},[28,100238,100239],{"class":735},"        [11, 12],\n",[28,100241,100242],{"class":30,"line":8509},[28,100243,100244],{"class":735},"        [17, 18],\n",[28,100246,100247],{"class":30,"line":8521},[28,100248,100249],{"class":735},"        [23, 24],\n",[28,100251,100252],{"class":30,"line":8533},[28,100253,100254],{"class":735},"        [29, 30],\n",[28,100256,100257],{"class":30,"line":8545},[28,100258,100259],{"class":735},"        [35, 36]])]\n",[28,100261,100262],{"class":30,"line":10202},[28,100263,100084],{"class":735},[28,100265,100266],{"class":30,"line":10227},[28,100267,99944],{"class":73},[28,100269,100270,100272,100274,100276,100278,100280,100282,100284,100286],{"class":30,"line":10250},[28,100271,100093],{"class":34},[28,100273,39],{"class":38},[28,100275,90],{"class":34},[28,100277,93],{"class":38},[28,100279,42086],{"class":34},[28,100281,47991],{"class":5704},[28,100283,83],{"class":42},[28,100285,39],{"class":38},[28,100287,228],{"class":34},[28,100289,100290],{"class":30,"line":10274},[28,100291,94036],{"class":73},[28,100293,100294],{"class":30,"line":10279},[28,100295,94400],{"class":735},[28,100297,100298],{"class":30,"line":10284},[28,100299,100300],{"class":735},"[array([[ 1],\n",[28,100302,100303],{"class":30,"line":10289},[28,100304,100305],{"class":735},"        [ 7],\n",[28,100307,100308],{"class":30,"line":10298},[28,100309,100310],{"class":735},"        [13],\n",[28,100312,100313],{"class":30,"line":10303},[28,100314,100315],{"class":735},"        [19],\n",[28,100317,100318],{"class":30,"line":10309},[28,100319,100320],{"class":735},"        [25],\n",[28,100322,100323],{"class":30,"line":10330},[28,100324,100325],{"class":735},"        [31]]),\n",[28,100327,100328],{"class":30,"line":10336},[28,100329,100330],{"class":735}," array([[ 2],\n",[28,100332,100333],{"class":30,"line":10350},[28,100334,100335],{"class":735},"        [ 8],\n",[28,100337,100338],{"class":30,"line":10356},[28,100339,100340],{"class":735},"        [14],\n",[28,100342,100343],{"class":30,"line":10383},[28,100344,100345],{"class":735},"        [20],\n",[28,100347,100348],{"class":30,"line":10392},[28,100349,100350],{"class":735},"        [26],\n",[28,100352,100353],{"class":30,"line":10398},[28,100354,100355],{"class":735},"        [32]]),\n",[28,100357,100358],{"class":30,"line":10406},[28,100359,100360],{"class":735}," array([[ 3,  4,  5,  6],\n",[28,100362,100363],{"class":30,"line":10411},[28,100364,100365],{"class":735},"        [ 9, 10, 11, 12],\n",[28,100367,100368],{"class":30,"line":17090},[28,100369,100370],{"class":735},"        [15, 16, 17, 18],\n",[28,100372,100373],{"class":30,"line":17096},[28,100374,100375],{"class":735},"        [21, 22, 23, 24],\n",[28,100377,100378],{"class":30,"line":17119},[28,100379,100380],{"class":735},"        [27, 28, 29, 30],\n",[28,100382,100383],{"class":30,"line":17125},[28,100384,100385],{"class":735},"        [33, 34, 35, 36]])]\n",[28,100387,100388],{"class":30,"line":17148},[28,100389,94400],{"class":735},[28,100391,100392],{"class":30,"line":17162},[28,100393,100394],{"class":73},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[28,100396,100397,100400,100402],{"class":30,"line":17182},[28,100398,100399],{"class":34},"np.vsplit(aa,",[28,100401,98],{"class":38},[28,100403,228],{"class":34},[28,100405,100406],{"class":30,"line":17188},[28,100407,94036],{"class":73},[28,100409,100410],{"class":30,"line":17199},[28,100411,94400],{"class":735},[28,100413,100414],{"class":30,"line":17222},[28,100415,100054],{"class":735},[28,100417,100418],{"class":30,"line":17244},[28,100419,100059],{"class":735},[28,100421,100422],{"class":30,"line":17249},[28,100423,100064],{"class":735},[28,100425,100426],{"class":30,"line":17255},[28,100427,100069],{"class":735},[28,100429,100430],{"class":30,"line":17269},[28,100431,100074],{"class":735},[28,100433,100434],{"class":30,"line":17282},[28,100435,100079],{"class":735},[28,100437,100438],{"class":30,"line":17287},[28,100439,94400],{"class":735},[28,100441,100442,100445,100447],{"class":30,"line":17301},[28,100443,100444],{"class":34},"np.hsplit(aa,",[28,100446,98],{"class":38},[28,100448,228],{"class":34},[28,100450,100451],{"class":30,"line":17306},[28,100452,94036],{"class":73},[28,100454,100455],{"class":30,"line":17312},[28,100456,94400],{"class":735},[28,100458,100459],{"class":30,"line":17317},[28,100460,100174],{"class":735},[28,100462,100463],{"class":30,"line":17331},[28,100464,100179],{"class":735},[28,100466,100467],{"class":30,"line":17336},[28,100468,100184],{"class":735},[28,100470,100471],{"class":30,"line":17341},[28,100472,100189],{"class":735},[28,100474,100475],{"class":30,"line":17355},[28,100476,100194],{"class":735},[28,100478,100479],{"class":30,"line":17367},[28,100480,100199],{"class":735},[28,100482,100483],{"class":30,"line":17372},[28,100484,100204],{"class":735},[28,100486,100487],{"class":30,"line":17385},[28,100488,100209],{"class":735},[28,100490,100491],{"class":30,"line":17390},[28,100492,100214],{"class":735},[28,100494,100495],{"class":30,"line":17395},[28,100496,100219],{"class":735},[28,100498,100499],{"class":30,"line":17400},[28,100500,100224],{"class":735},[28,100502,100503],{"class":30,"line":17413},[28,100504,100229],{"class":735},[28,100506,100507],{"class":30,"line":17418},[28,100508,100234],{"class":735},[28,100510,100511],{"class":30,"line":33111},[28,100512,100239],{"class":735},[28,100514,100515],{"class":30,"line":33117},[28,100516,100244],{"class":735},[28,100518,100519],{"class":30,"line":33123},[28,100520,100249],{"class":735},[28,100522,100523],{"class":30,"line":33129},[28,100524,100254],{"class":735},[28,100526,100527],{"class":30,"line":33135},[28,100528,100259],{"class":735},[28,100530,100531],{"class":30,"line":33146},[28,100532,94400],{"class":735},[28,100534,100535,100538,100540,100542,100544],{"class":30,"line":33152},[28,100536,100537],{"class":34},"np.vsplit(aa,[",[28,100539,93],{"class":38},[28,100541,90],{"class":34},[28,100543,108],{"class":38},[28,100545,5145],{"class":34},[28,100547,100548],{"class":30,"line":33172},[28,100549,94036],{"class":73},[28,100551,100552],{"class":30,"line":33178},[28,100553,94400],{"class":735},[28,100555,100556],{"class":30,"line":33189},[28,100557,100054],{"class":735},[28,100559,100560],{"class":30,"line":33195},[28,100561,100059],{"class":735},[28,100563,100564],{"class":30,"line":33201},[28,100565,100064],{"class":735},[28,100567,100568],{"class":30,"line":33207},[28,100569,100126],{"class":735},[28,100571,100572],{"class":30,"line":33213},[28,100573,100131],{"class":735},[28,100575,100576],{"class":30,"line":33219},[28,100577,100136],{"class":735},[28,100579,100580],{"class":30,"line":33225},[28,100581,100084],{"class":735},[547,100583,100584],{},"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":77,"depth":77,"links":100586},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99852,"description":559},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":4,"title":5,"body":100593,"description":559,"extension":560,"meta":101016,"navigation":562,"path":563,"seo":101017,"stem":565,"__hash__":566},{"type":7,"value":100594,"toc":101007},[100595,100597,100599,100621,100623,100677,100725,100727,100729,100761,100807,100809,100845,100909,100911,100915,100917,100919,100949,100951,100953,100955,100957,100959,100961,100965,100967,100969,100971,100973,100975,100979,100981,100985,100987,101005],[10,100596,5],{"id":12},[14,100598,16],{},[18,100600,100601],{"className":20,"code":21,"language":22,"meta":23,"style":23},[25,100602,100603],{"__ignoreMap":23},[28,100604,100605,100607,100609,100611,100613,100615,100617,100619],{"class":30,"line":31},[28,100606,35],{"class":34},[28,100608,39],{"class":38},[28,100610,43],{"class":42},[28,100612,46],{"class":34},[28,100614,49],{"class":42},[28,100616,52],{"class":34},[28,100618,55],{"class":42},[28,100620,58],{"class":34},[60,100622,63],{"id":62},[18,100624,100625],{"className":20,"code":66,"language":22,"meta":23,"style":23},[25,100626,100627,100631,100659,100669],{"__ignoreMap":23},[28,100628,100629],{"class":30,"line":31},[28,100630,74],{"class":73},[28,100632,100633,100635,100637,100639,100641,100643,100645,100647,100649,100651,100653,100655,100657],{"class":30,"line":77},[28,100634,80],{"class":34},[28,100636,83],{"class":42},[28,100638,35],{"class":34},[28,100640,39],{"class":38},[28,100642,90],{"class":34},[28,100644,93],{"class":38},[28,100646,90],{"class":34},[28,100648,98],{"class":38},[28,100650,90],{"class":34},[28,100652,103],{"class":38},[28,100654,90],{"class":34},[28,100656,108],{"class":38},[28,100658,111],{"class":34},[28,100660,100661,100663,100665,100667],{"class":30,"line":114},[28,100662,117],{"class":34},[28,100664,83],{"class":42},[28,100666,122],{"class":34},[28,100668,125],{"class":73},[28,100670,100671,100673,100675],{"class":30,"line":128},[28,100672,39],{"class":38},[28,100674,43],{"class":42},[28,100676,135],{"class":34},[18,100678,100679],{"className":20,"code":138,"language":22,"meta":23,"style":23},[25,100680,100681,100709,100717,100721],{"__ignoreMap":23},[28,100682,100683,100685,100687,100689,100691,100693,100695,100697,100699,100701,100703,100705,100707],{"class":30,"line":31},[28,100684,80],{"class":34},[28,100686,83],{"class":42},[28,100688,35],{"class":34},[28,100690,39],{"class":38},[28,100692,90],{"class":34},[28,100694,93],{"class":38},[28,100696,90],{"class":34},[28,100698,98],{"class":38},[28,100700,90],{"class":34},[28,100702,103],{"class":38},[28,100704,90],{"class":34},[28,100706,108],{"class":38},[28,100708,111],{"class":34},[28,100710,100711,100713,100715],{"class":30,"line":77},[28,100712,117],{"class":34},[28,100714,83],{"class":42},[28,100716,177],{"class":34},[28,100718,100719],{"class":30,"line":114},[28,100720,182],{"class":73},[28,100722,100723],{"class":30,"line":128},[28,100724,187],{"class":34},[60,100726,191],{"id":190},[14,100728,194],{},[18,100730,100731],{"className":20,"code":197,"language":22,"meta":23,"style":23},[25,100732,100733,100737,100741,100757],{"__ignoreMap":23},[28,100734,100735],{"class":30,"line":31},[28,100736,204],{"class":73},[28,100738,100739],{"class":30,"line":77},[28,100740,209],{"class":73},[28,100742,100743,100745,100747,100749,100751,100753,100755],{"class":30,"line":114},[28,100744,80],{"class":34},[28,100746,83],{"class":42},[28,100748,218],{"class":34},[28,100750,39],{"class":38},[28,100752,90],{"class":34},[28,100754,225],{"class":38},[28,100756,228],{"class":34},[28,100758,100759],{"class":30,"line":128},[28,100760,233],{"class":34},[18,100762,100763],{"className":20,"code":236,"language":22,"meta":23,"style":23},[25,100764,100765,100769,100773,100791],{"__ignoreMap":23},[28,100766,100767],{"class":30,"line":31},[28,100768,243],{"class":73},[28,100770,100771],{"class":30,"line":77},[28,100772,248],{"class":73},[28,100774,100775,100777,100779,100781,100783,100785,100787,100789],{"class":30,"line":114},[28,100776,253],{"class":34},[28,100778,256],{"class":42},[28,100780,46],{"class":34},[28,100782,49],{"class":42},[28,100784,52],{"class":34},[28,100786,55],{"class":42},[28,100788,267],{"class":34},[28,100790,270],{"class":73},[28,100792,100793,100795,100797,100799,100801,100803,100805],{"class":30,"line":128},[28,100794,275],{"class":34},[28,100796,256],{"class":42},[28,100798,46],{"class":34},[28,100800,49],{"class":42},[28,100802,52],{"class":34},[28,100804,55],{"class":42},[28,100806,288],{"class":34},[14,100808,291],{},[18,100810,100811],{"className":20,"code":294,"language":22,"meta":23,"style":23},[25,100812,100813,100817,100841],{"__ignoreMap":23},[28,100814,100815],{"class":30,"line":31},[28,100816,301],{"class":73},[28,100818,100819,100821,100823,100825,100827,100829,100831,100833,100835,100837,100839],{"class":30,"line":77},[28,100820,306],{"class":34},[28,100822,83],{"class":42},[28,100824,218],{"class":34},[28,100826,39],{"class":38},[28,100828,90],{"class":34},[28,100830,317],{"class":38},[28,100832,320],{"class":34},[28,100834,103],{"class":38},[28,100836,90],{"class":34},[28,100838,98],{"class":38},[28,100840,228],{"class":34},[28,100842,100843],{"class":30,"line":114},[28,100844,333],{"class":34},[18,100846,100847],{"className":20,"code":336,"language":22,"meta":23,"style":23},[25,100848,100849,100853,100861,100877,100893,100905],{"__ignoreMap":23},[28,100850,100851],{"class":30,"line":31},[28,100852,343],{"class":73},[28,100854,100855,100857,100859],{"class":30,"line":77},[28,100856,348],{"class":34},[28,100858,83],{"class":42},[28,100860,353],{"class":34},[28,100862,100863,100865,100867,100869,100871,100873,100875],{"class":30,"line":114},[28,100864,49],{"class":42},[28,100866,52],{"class":34},[28,100868,55],{"class":42},[28,100870,364],{"class":38},[28,100872,367],{"class":34},[28,100874,103],{"class":38},[28,100876,372],{"class":34},[28,100878,100879,100881,100883,100885,100887,100889,100891],{"class":30,"line":128},[28,100880,377],{"class":42},[28,100882,380],{"class":34},[28,100884,55],{"class":42},[28,100886,364],{"class":38},[28,100888,367],{"class":34},[28,100890,98],{"class":38},[28,100892,372],{"class":34},[28,100894,100895,100897,100899,100901,100903],{"class":30,"line":393},[28,100896,396],{"class":34},[28,100898,83],{"class":42},[28,100900,401],{"class":34},[28,100902,256],{"class":42},[28,100904,406],{"class":34},[28,100906,100907],{"class":30,"line":409},[28,100908,412],{"class":34},[60,100910,416],{"id":415},[14,100912,100913],{},[420,100914],{"alt":23,"src":422},[60,100916,426],{"id":425},[14,100918,429],{},[18,100920,100921],{"className":20,"code":432,"language":22,"meta":23,"style":23},[25,100922,100923,100945],{"__ignoreMap":23},[28,100924,100925,100927,100929,100931,100933,100935,100937,100939,100941,100943],{"class":30,"line":31},[28,100926,80],{"class":34},[28,100928,83],{"class":42},[28,100930,218],{"class":34},[28,100932,445],{"class":42},[28,100934,225],{"class":38},[28,100936,90],{"class":34},[28,100938,225],{"class":38},[28,100940,90],{"class":34},[28,100942,456],{"class":38},[28,100944,228],{"class":34},[28,100946,100947],{"class":30,"line":77},[28,100948,463],{"class":34},[14,100950,466],{},[60,100952,470],{"id":469},[14,100954,473],{},[14,100956,476],{},[14,100958,479],{},[14,100960,482],{},[14,100962,100963],{},[420,100964],{"alt":23,"src":487},[60,100966,491],{"id":490},[14,100968,494],{},[14,100970,497],{},[14,100972,500],{},[14,100974,503],{},[14,100976,100977],{},[420,100978],{"alt":23,"src":508},[60,100980,512],{"id":511},[14,100982,100983],{},[420,100984],{"alt":23,"src":517},[14,100986,520],{},[18,100988,100989],{"className":20,"code":523,"language":22,"meta":23,"style":23},[25,100990,100991],{"__ignoreMap":23},[28,100992,100993,100995,100997,100999,101001,101003],{"class":30,"line":31},[28,100994,530],{"class":42},[28,100996,533],{"class":34},[28,100998,536],{"class":42},[28,101000,539],{"class":34},[28,101002,542],{"class":42},[28,101004,545],{"class":34},[547,101006,549],{},{"title":23,"searchDepth":77,"depth":77,"links":101008},[101009,101010,101011,101012,101013,101014,101015],{"id":62,"depth":77,"text":63},{"id":190,"depth":77,"text":191},{"id":415,"depth":77,"text":416},{"id":425,"depth":77,"text":426},{"id":469,"depth":77,"text":470},{"id":490,"depth":77,"text":491},{"id":511,"depth":77,"text":512},{},{"title":5,"description":559},{"id":101019,"title":101020,"body":101021,"description":559,"extension":560,"meta":101025,"navigation":562,"path":101026,"seo":101027,"stem":101028,"__hash__":101029},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101022,"toc":101023},[],{"title":23,"searchDepth":77,"depth":77,"links":101024},[],{"category":50897},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101020,"description":559},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101031,"title":101032,"body":101033,"description":23,"extension":560,"meta":103041,"navigation":562,"path":103042,"seo":103043,"stem":103044,"__hash__":103045},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101034,"toc":103017},[101035,101038,101042,101045,101048,101054,101057,101080,101083,101117,101120,101161,101165,101168,101261,101264,101308,101311,101328,101331,101345,101348,101351,101396,101399,101436,101440,101443,101449,101454,101474,101478,101481,101547,101550,101568,101572,101575,101604,101614,101620,101624,101627,101633,101644,101648,101651,101681,101684,101964,101967,101970,101981,101984,101987,102009,102016,102019,102037,102040,102043,102057,102065,102068,102094,102100,102103,102106,102116,102128,102148,102157,102177,102187,102211,102224,102238,102243,102284,102301,102326,102338,102358,102364,102409,102428,102445,102458,102474,102481,102493,102502,102537,102558,102583,102596,102620,102635,102660,102663,102684,102693,102696,102707,102711,102714,102720,102732,102739,102743,102746,102758,102761,102775,102778,102788,102798,102801,102841,102844,102848,102854,102857,102871,102875,102878,102911,102915,102918,102941,102949,102952,102958,102964,102967,102970,102998,103002,103005,103011,103014],[10,101036,101032],{"id":101037},"_1环境安装与第一个-mujoco-程序",[60,101039,101041],{"id":101040},"_1目标说明","1.目标说明",[14,101043,101044],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101046,101047],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[18,101049,101052],{"className":101050,"code":101051,"language":5675,"meta":23},[5673],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[25,101053,101051],{"__ignoreMap":23},[14,101055,101056],{},"需要掌握:",[588,101058,101059,101062,101065,101070,101075],{},[591,101060,101061],{},"Fedora 44 下 MuJoCo 的系统依赖",[591,101063,101064],{},"Python 虚拟环境创建",[591,101066,101067],{},[25,101068,101069],{},"mujoco.MjModel",[591,101071,101072],{},[25,101073,101074],{},"mujoco.MjData",[591,101076,101077],{},[25,101078,101079],{},"mujoco.mj_step(model, data)",[14,101081,101082],{},"MuJoCo 中最重要的两个对象:",[768,101084,101085,101095],{},[771,101086,101087],{},[774,101088,101089,101092],{},[777,101090,101091],{"align":24222},"对象",[777,101093,101094],{"align":24222},"含义",[815,101096,101097,101107],{},[774,101098,101099,101104],{},[820,101100,101101],{"align":24222},[25,101102,101103],{},"MjModel",[820,101105,101106],{"align":24222},"模型结构，来自 XML，基本不随时间变化",[774,101108,101109,101114],{},[820,101110,101111],{"align":24222},[25,101112,101113],{},"MjData",[820,101115,101116],{"align":24222},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101118,101119],{},"可以先用一个类比理解：",[768,101121,101122,101132],{},[771,101123,101124],{},[774,101125,101126,101129],{},[777,101127,101128],{"align":24222},"类比",[777,101130,101131],{"align":24222},"MuJoCo 对象",[815,101133,101134,101143,101152],{},[774,101135,101136,101139],{},[820,101137,101138],{"align":24222},"游戏地图和角色配置",[820,101140,101141],{"align":24222},[25,101142,101103],{},[774,101144,101145,101148],{},[820,101146,101147],{"align":24222},"游戏运行到当前帧的状态",[820,101149,101150],{"align":24222},[25,101151,101113],{},[774,101153,101154,101157],{},[820,101155,101156],{"align":24222},"前进一帧",[820,101158,101159],{"align":24222},[25,101160,101079],{},[60,101162,101164],{"id":101163},"_2环境与依赖安装","2.环境与依赖安装",[14,101166,101167],{},"Fedora 44 系统依赖:",[18,101169,101171],{"className":24308,"code":101170,"language":24310,"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,101172,101173,101185,101198,101211,101221,101231,101250],{"__ignoreMap":23},[28,101174,101175,101177,101179,101181,101183],{"class":30,"line":31},[28,101176,25063],{"class":2453},[28,101178,26801],{"class":735},[28,101180,24320],{"class":735},[28,101182,26886],{"class":38},[28,101184,25165],{"class":38},[28,101186,101187,101190,101193,101196],{"class":30,"line":77},[28,101188,101189],{"class":735},"  python3",[28,101191,101192],{"class":735}," python3-pip",[28,101194,101195],{"class":735}," python3-virtualenv",[28,101197,25165],{"class":38},[28,101199,101200,101203,101206,101209],{"class":30,"line":114},[28,101201,101202],{"class":735},"  mesa-libGL",[28,101204,101205],{"class":735}," mesa-libGLU",[28,101207,101208],{"class":735}," mesa-dri-drivers",[28,101210,25165],{"class":38},[28,101212,101213,101216,101219],{"class":30,"line":128},[28,101214,101215],{"class":735},"  libglvnd-glx",[28,101217,101218],{"class":735}," libglvnd-opengl",[28,101220,25165],{"class":38},[28,101222,101223,101226,101229],{"class":30,"line":393},[28,101224,101225],{"class":735},"  glfw",[28,101227,101228],{"class":735}," glfw-devel",[28,101230,25165],{"class":38},[28,101232,101233,101236,101239,101242,101245,101248],{"class":30,"line":409},[28,101234,101235],{"class":735},"  libX11",[28,101237,101238],{"class":735}," libXcursor",[28,101240,101241],{"class":735}," libXi",[28,101243,101244],{"class":735}," libXinerama",[28,101246,101247],{"class":735}," libXrandr",[28,101249,25165],{"class":38},[28,101251,101252,101255,101258],{"class":30,"line":1711},[28,101253,101254],{"class":735},"  gcc",[28,101256,101257],{"class":735}," gcc-c++",[28,101259,101260],{"class":735}," make\n",[14,101262,101263],{},"创建 Python 环境:",[18,101265,101267],{"className":24308,"code":101266,"language":24310,"meta":23,"style":23},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[25,101268,101269,101283,101291],{"__ignoreMap":23},[28,101270,101271,101274,101277,101280],{"class":30,"line":31},[28,101272,101273],{"class":2453},"python3",[28,101275,101276],{"class":38}," -m",[28,101278,101279],{"class":735}," venv",[28,101281,101282],{"class":735}," .venv\n",[28,101284,101285,101288],{"class":30,"line":77},[28,101286,101287],{"class":38},"source",[28,101289,101290],{"class":735}," .venv\u002Fbin\u002Factivate\n",[28,101292,101293,101295,101297,101300,101302,101305],{"class":30,"line":114},[28,101294,22],{"class":2453},[28,101296,101276],{"class":38},[28,101298,101299],{"class":735}," pip",[28,101301,24320],{"class":735},[28,101303,101304],{"class":38}," --upgrade",[28,101306,101307],{"class":735}," pip\n",[14,101309,101310],{},"pip 安装:",[18,101312,101314],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy\n",[25,101315,101316],{"__ignoreMap":23},[28,101317,101318,101320,101322,101325],{"class":30,"line":31},[28,101319,24317],{"class":2453},[28,101321,24320],{"class":735},[28,101323,101324],{"class":735}," \"mujoco>=2.3\"",[28,101326,101327],{"class":735}," numpy\n",[14,101329,101330],{},"安装完成后，先做最小检查：",[18,101332,101334],{"className":24308,"code":101333,"language":24310,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[25,101335,101336],{"__ignoreMap":23},[28,101337,101338,101340,101342],{"class":30,"line":31},[28,101339,22],{"class":2453},[28,101341,30844],{"class":38},[28,101343,101344],{"class":735}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101346,101347],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101349,101350],{},"conda 安装:",[18,101352,101354],{"className":24308,"code":101353,"language":24310,"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,101355,101356,101376,101386],{"__ignoreMap":23},[28,101357,101358,101360,101362,101364,101367,101370,101373],{"class":30,"line":31},[28,101359,30816],{"class":2453},[28,101361,29662],{"class":735},[28,101363,25602],{"class":38},[28,101365,101366],{"class":735}," mujoco-study",[28,101368,101369],{"class":735}," python=",[28,101371,101372],{"class":38},"3.10",[28,101374,101375],{"class":38}," -y\n",[28,101377,101378,101380,101383],{"class":30,"line":77},[28,101379,30816],{"class":2453},[28,101381,101382],{"class":735}," activate",[28,101384,101385],{"class":735}," mujoco-study\n",[28,101387,101388,101390,101392,101394],{"class":30,"line":114},[28,101389,24317],{"class":2453},[28,101391,24320],{"class":735},[28,101393,101324],{"class":735},[28,101395,101327],{"class":735},[14,101397,101398],{},"版本冲突说明:",[588,101400,101401,101407,101417,101426],{},[591,101402,101403,101404,28871],{},"不要安装 ",[25,101405,101406],{},"mujoco-py",[591,101408,101409,101410,101412,101413,101416],{},"如果旧项目里同时安装了 ",[25,101411,101406],{}," 和 ",[25,101414,101415],{},"mujoco","，建议新建干净虚拟环境。",[591,101418,101419,101422,101423,28871],{},[25,101420,101421],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[25,101424,101425],{},"~\u002F.mujoco\u002Fmujoco210",[591,101427,101428,101429,83016,101432,101435],{},"离屏渲染可能涉及 OpenGL 后端，",[25,101430,101431],{},"MUJOCO_GL=egl",[25,101433,101434],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[60,101437,101439],{"id":101438},"_3核心概念解释","3.核心概念解释",[14,101441,101442],{},"MuJoCo 的基本执行流程:",[18,101444,101447],{"className":101445,"code":101446,"language":5675,"meta":23},[5673],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[25,101448,101446],{"__ignoreMap":23},[14,101450,101451,101453],{},[25,101452,101103],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101455,101456,101458,101459,843,101462,843,101465,843,101468,843,101471,28871],{},[25,101457,101113],{}," 存放仿真运行时状态，例如 ",[25,101460,101461],{},"data.time",[25,101463,101464],{},"data.qpos",[25,101466,101467],{},"data.qvel",[25,101469,101470],{},"data.ctrl",[25,101472,101473],{},"data.xpos",[605,101475,101477],{"id":101476},"xml-是什么","XML 是什么",[14,101479,101480],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[18,101482,101484],{"className":53544,"code":101483,"language":53546,"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,101485,101486,101508,101539],{"__ignoreMap":23},[28,101487,101488,101490,101492,101494,101496,101498,101501,101503,101506],{"class":30,"line":31},[28,101489,1529],{"class":34},[28,101491,52277],{"class":51777},[28,101493,15406],{"class":2453},[28,101495,83],{"class":34},[28,101497,53968],{"class":735},[28,101499,101500],{"class":2453}," pos",[28,101502,83],{"class":34},[28,101504,101505],{"class":735},"\"0 0 1\"",[28,101507,51784],{"class":34},[28,101509,101510,101512,101515,101517,101519,101522,101524,101526,101528,101531,101533,101536],{"class":30,"line":77},[28,101511,52621],{"class":34},[28,101513,101514],{"class":51777},"geom",[28,101516,15406],{"class":2453},[28,101518,83],{"class":34},[28,101520,101521],{"class":735},"\"box_geom\"",[28,101523,54301],{"class":2453},[28,101525,83],{"class":34},[28,101527,53968],{"class":735},[28,101529,101530],{"class":2453}," size",[28,101532,83],{"class":34},[28,101534,101535],{"class":735},"\"0.1 0.1 0.1\"",[28,101537,101538],{"class":34},"\u002F>\n",[28,101540,101541,101543,101545],{"class":30,"line":114},[28,101542,52262],{"class":34},[28,101544,52277],{"class":51777},[28,101546,51784],{"class":34},[14,101548,101549],{},"这段意思是：",[588,101551,101552,101558,101565],{},[591,101553,101554,101555,101557],{},"创建一个叫 ",[25,101556,54191],{}," 的刚体。",[591,101559,101560,101561,101564],{},"它初始放在 ",[25,101562,101563],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[591,101566,101567],{},"它里面有一个盒子形状的几何体。",[605,101569,101571],{"id":101570},"timestep-是什么","timestep 是什么",[14,101573,101574],{},"XML 里的：",[18,101576,101578],{"className":53544,"code":101577,"language":53546,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101579,101580],{"__ignoreMap":23},[28,101581,101582,101584,101586,101589,101591,101594,101597,101599,101602],{"class":30,"line":31},[28,101583,1529],{"class":34},[28,101585,69643],{"class":51777},[28,101587,101588],{"class":2453}," timestep",[28,101590,83],{"class":34},[28,101592,101593],{"class":735},"\"0.01\"",[28,101595,101596],{"class":2453}," gravity",[28,101598,83],{"class":34},[28,101600,101601],{"class":735},"\"0 0 -9.81\"",[28,101603,101538],{"class":34},[14,101605,101606,101607,101610,101611,101613],{},"表示每调用一次 ",[25,101608,101609],{},"mj_step","，仿真时间前进 ",[25,101612,39463],{}," 秒。循环 100 次，大约就是 1 秒：",[18,101615,101618],{"className":101616,"code":101617,"language":5675,"meta":23},[5673],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[25,101619,101617],{"__ignoreMap":23},[605,101621,101623],{"id":101622},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101625,101626],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[18,101628,101631],{"className":101629,"code":101630,"language":5675,"meta":23},[5673],"x y z qw qx qy qz\n",[25,101632,101630],{"__ignoreMap":23},[14,101634,101635,101636,101639,101640,101643],{},"表示一个自由刚体的位置和姿态。其中 ",[25,101637,101638],{},"x y z"," 是位置，",[25,101641,101642],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[60,101645,101647],{"id":101646},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101649,101650],{},"新建文件:",[18,101652,101654],{"className":24308,"code":101653,"language":24310,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[25,101655,101656,101666,101673],{"__ignoreMap":23},[28,101657,101658,101661,101663],{"class":30,"line":31},[28,101659,101660],{"class":2453},"mkdir",[28,101662,29702],{"class":38},[28,101664,101665],{"class":735}," mujoco_tutorial\n",[28,101667,101668,101671],{"class":30,"line":77},[28,101669,101670],{"class":38},"cd",[28,101672,101665],{"class":735},[28,101674,101675,101678],{"class":30,"line":114},[28,101676,101677],{"class":2453},"touch",[28,101679,101680],{"class":735}," ch1_first_sim.py\n",[14,101682,101683],{},"写入:",[18,101685,101687],{"className":20,"code":101686,"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,101688,101689,101696,101700,101704,101714,101719,101724,101728,101733,101738,101742,101747,101752,101757,101762,101767,101772,101776,101780,101784,101797,101811,101821,101825,101837,101849,101861,101873,101885,101889,101906,101911,101915,101926,101937,101941,101945,101959],{"__ignoreMap":23},[28,101690,101691,101693],{"class":30,"line":31},[28,101692,536],{"class":42},[28,101694,101695],{"class":34}," mujoco\n",[28,101697,101698],{"class":30,"line":77},[28,101699,2890],{"emptyLinePlaceholder":562},[28,101701,101702],{"class":30,"line":114},[28,101703,2890],{"emptyLinePlaceholder":562},[28,101705,101706,101709,101711],{"class":30,"line":128},[28,101707,101708],{"class":38},"XML",[28,101710,14050],{"class":42},[28,101712,101713],{"class":735}," \"\"\"\n",[28,101715,101716],{"class":30,"line":393},[28,101717,101718],{"class":735},"\u003Cmujoco model=\"first_sim\">\n",[28,101720,101721],{"class":30,"line":409},[28,101722,101723],{"class":735},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[28,101725,101726],{"class":30,"line":1711},[28,101727,2890],{"emptyLinePlaceholder":562},[28,101729,101730],{"class":30,"line":1802},[28,101731,101732],{"class":735},"  \u003Cworldbody>\n",[28,101734,101735],{"class":30,"line":1808},[28,101736,101737],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,101739,101740],{"class":30,"line":1820},[28,101741,2890],{"emptyLinePlaceholder":562},[28,101743,101744],{"class":30,"line":2102},[28,101745,101746],{"class":735},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[28,101748,101749],{"class":30,"line":2107},[28,101750,101751],{"class":735},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[28,101753,101754],{"class":30,"line":2113},[28,101755,101756],{"class":735},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,101758,101759],{"class":30,"line":2118},[28,101760,101761],{"class":735},"    \u003C\u002Fbody>\n",[28,101763,101764],{"class":30,"line":2132},[28,101765,101766],{"class":735},"  \u003C\u002Fworldbody>\n",[28,101768,101769],{"class":30,"line":2137},[28,101770,101771],{"class":735},"\u003C\u002Fmujoco>\n",[28,101773,101774],{"class":30,"line":2143},[28,101775,96169],{"class":735},[28,101777,101778],{"class":30,"line":2164},[28,101779,2890],{"emptyLinePlaceholder":562},[28,101781,101782],{"class":30,"line":2169},[28,101783,2890],{"emptyLinePlaceholder":562},[28,101785,101786,101788,101790,101793,101795],{"class":30,"line":2183},[28,101787,32426],{"class":42},[28,101789,2463],{"class":2453},[28,101791,101792],{"class":34},"() -> ",[28,101794,96157],{"class":38},[28,101796,4227],{"class":34},[28,101798,101799,101802,101804,101807,101809],{"class":30,"line":2188},[28,101800,101801],{"class":34},"    model ",[28,101803,83],{"class":42},[28,101805,101806],{"class":34}," mujoco.MjModel.from_xml_string(",[28,101808,101708],{"class":38},[28,101810,228],{"class":34},[28,101812,101813,101816,101818],{"class":30,"line":2217},[28,101814,101815],{"class":34},"    data ",[28,101817,83],{"class":42},[28,101819,101820],{"class":34}," mujoco.MjData(model)\n",[28,101822,101823],{"class":30,"line":2222},[28,101824,2890],{"emptyLinePlaceholder":562},[28,101826,101827,101829,101831,101834],{"class":30,"line":2239},[28,101828,31780],{"class":38},[28,101830,367],{"class":34},[28,101832,101833],{"class":735},"\"nq:\"",[28,101835,101836],{"class":34},", model.nq)\n",[28,101838,101839,101841,101843,101846],{"class":30,"line":2244},[28,101840,31780],{"class":38},[28,101842,367],{"class":34},[28,101844,101845],{"class":735},"\"nv:\"",[28,101847,101848],{"class":34},", model.nv)\n",[28,101850,101851,101853,101855,101858],{"class":30,"line":2249},[28,101852,31780],{"class":38},[28,101854,367],{"class":34},[28,101856,101857],{"class":735},"\"nu:\"",[28,101859,101860],{"class":34},", model.nu)\n",[28,101862,101863,101865,101867,101870],{"class":30,"line":2254},[28,101864,31780],{"class":38},[28,101866,367],{"class":34},[28,101868,101869],{"class":735},"\"initial time:\"",[28,101871,101872],{"class":34},", data.time)\n",[28,101874,101875,101877,101879,101882],{"class":30,"line":2268},[28,101876,31780],{"class":38},[28,101878,367],{"class":34},[28,101880,101881],{"class":735},"\"initial qpos:\"",[28,101883,101884],{"class":34},", data.qpos.copy())\n",[28,101886,101887],{"class":30,"line":2273},[28,101888,2890],{"emptyLinePlaceholder":562},[28,101890,101891,101893,101896,101898,101900,101902,101904],{"class":30,"line":3067},[28,101892,377],{"class":42},[28,101894,101895],{"class":34}," _ ",[28,101897,55],{"class":42},[28,101899,364],{"class":38},[28,101901,367],{"class":34},[28,101903,938],{"class":38},[28,101905,372],{"class":34},[28,101907,101908],{"class":30,"line":3081},[28,101909,101910],{"class":34},"        mujoco.mj_step(model, data)\n",[28,101912,101913],{"class":30,"line":3089},[28,101914,2890],{"emptyLinePlaceholder":562},[28,101916,101917,101919,101921,101924],{"class":30,"line":3094},[28,101918,31780],{"class":38},[28,101920,367],{"class":34},[28,101922,101923],{"class":735},"\"final time:\"",[28,101925,101872],{"class":34},[28,101927,101928,101930,101932,101935],{"class":30,"line":3100},[28,101929,31780],{"class":38},[28,101931,367],{"class":34},[28,101933,101934],{"class":735},"\"final qpos:\"",[28,101936,101884],{"class":34},[28,101938,101939],{"class":30,"line":3106},[28,101940,2890],{"emptyLinePlaceholder":562},[28,101942,101943],{"class":30,"line":3111},[28,101944,2890],{"emptyLinePlaceholder":562},[28,101946,101947,101949,101951,101954,101957],{"class":30,"line":8436},[28,101948,2021],{"class":42},[28,101950,31701],{"class":38},[28,101952,101953],{"class":42}," ==",[28,101955,101956],{"class":735}," \"__main__\"",[28,101958,4227],{"class":34},[28,101960,101961],{"class":30,"line":8460},[28,101962,101963],{"class":34},"    main()\n",[605,101965,101966],{"id":101966},"代码逐段解释",[14,101968,101969],{},"导入库：",[18,101971,101973],{"className":20,"code":101972,"language":22,"meta":23,"style":23},"import mujoco\n",[25,101974,101975],{"__ignoreMap":23},[28,101976,101977,101979],{"class":30,"line":31},[28,101978,536],{"class":42},[28,101980,101695],{"class":34},[14,101982,101983],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101985,101986],{},"定义 XML：",[18,101988,101990],{"className":20,"code":101989,"language":22,"meta":23,"style":23},"XML = \"\"\"\n...\n\"\"\"\n",[25,101991,101992,102000,102005],{"__ignoreMap":23},[28,101993,101994,101996,101998],{"class":30,"line":31},[28,101995,101708],{"class":38},[28,101997,14050],{"class":42},[28,101999,101713],{"class":735},[28,102001,102002],{"class":30,"line":77},[28,102003,102004],{"class":735},"...\n",[28,102006,102007],{"class":30,"line":114},[28,102008,96169],{"class":735},[14,102010,102011,102012,102015],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[25,102013,102014],{},"freejoint"," 的方块。",[14,102017,102018],{},"编译模型：",[18,102020,102022],{"className":20,"code":102021,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\n",[25,102023,102024],{"__ignoreMap":23},[28,102025,102026,102029,102031,102033,102035],{"class":30,"line":31},[28,102027,102028],{"class":34},"model ",[28,102030,83],{"class":42},[28,102032,101806],{"class":34},[28,102034,101708],{"class":38},[28,102036,228],{"class":34},[14,102038,102039],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102041,102042],{},"创建数据：",[18,102044,102046],{"className":20,"code":102045,"language":22,"meta":23,"style":23},"data = mujoco.MjData(model)\n",[25,102047,102048],{"__ignoreMap":23},[28,102049,102050,102053,102055],{"class":30,"line":31},[28,102051,102052],{"class":34},"data ",[28,102054,83],{"class":42},[28,102056,101820],{"class":34},[14,102058,102059,102061,102062,102064],{},[25,102060,33878],{}," 会保存仿真当前状态。刚创建时，时间是 ",[25,102063,822],{},"，方块还在初始位置。",[14,102066,102067],{},"推进仿真：",[18,102069,102071],{"className":20,"code":102070,"language":22,"meta":23,"style":23},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[25,102072,102073,102089],{"__ignoreMap":23},[28,102074,102075,102077,102079,102081,102083,102085,102087],{"class":30,"line":31},[28,102076,49],{"class":42},[28,102078,101895],{"class":34},[28,102080,55],{"class":42},[28,102082,364],{"class":38},[28,102084,367],{"class":34},[28,102086,938],{"class":38},[28,102088,372],{"class":34},[28,102090,102091],{"class":30,"line":77},[28,102092,102093],{"class":34},"    mujoco.mj_step(model, data)\n",[14,102095,102096,102097,102099],{},"每次 ",[25,102098,101609],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[605,102101,102102],{"id":102102},"代码逐行细讲",[14,102104,102105],{},"下面把完整代码按新手视角拆开讲。",[18,102107,102108],{"className":20,"code":101972,"language":22,"meta":23,"style":23},[25,102109,102110],{"__ignoreMap":23},[28,102111,102112,102114],{"class":30,"line":31},[28,102113,536],{"class":42},[28,102115,101695],{"class":34},[14,102117,102118,102120,102121,843,102123,843,102125,28871],{},[25,102119,536],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[25,102122,101069],{},[25,102124,101074],{},[25,102126,102127],{},"mujoco.mj_step",[18,102129,102130],{"className":20,"code":101989,"language":22,"meta":23,"style":23},[25,102131,102132,102140,102144],{"__ignoreMap":23},[28,102133,102134,102136,102138],{"class":30,"line":31},[28,102135,101708],{"class":38},[28,102137,14050],{"class":42},[28,102139,101713],{"class":735},[28,102141,102142],{"class":30,"line":77},[28,102143,102004],{"class":735},[28,102145,102146],{"class":30,"line":114},[28,102147,96169],{"class":735},[14,102149,102150,102152,102153,102156],{},[25,102151,101708],{}," 是一个变量名。右边的三引号 ",[25,102154,102155],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[18,102158,102159],{"className":53544,"code":101718,"language":53546,"meta":23,"style":23},[25,102160,102161],{"__ignoreMap":23},[28,102162,102163,102165,102167,102170,102172,102175],{"class":30,"line":31},[28,102164,1529],{"class":34},[28,102166,101415],{"class":51777},[28,102168,102169],{"class":2453}," model",[28,102171,83],{"class":34},[28,102173,102174],{"class":735},"\"first_sim\"",[28,102176,51784],{"class":34},[14,102178,102179,102180,102183,102184,28871],{},"这是 XML 的根标签。",[25,102181,102182],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[25,102185,102186],{},"first_sim",[18,102188,102189],{"className":53544,"code":101577,"language":53546,"meta":23,"style":23},[25,102190,102191],{"__ignoreMap":23},[28,102192,102193,102195,102197,102199,102201,102203,102205,102207,102209],{"class":30,"line":31},[28,102194,1529],{"class":34},[28,102196,69643],{"class":51777},[28,102198,101588],{"class":2453},[28,102200,83],{"class":34},[28,102202,101593],{"class":735},[28,102204,101596],{"class":2453},[28,102206,83],{"class":34},[28,102208,101601],{"class":735},[28,102210,101538],{"class":34},[14,102212,102213,102215,102216,102219,102220,102223],{},[25,102214,69643],{}," 用来设置仿真参数。",[25,102217,102218],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[25,102221,102222],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[18,102225,102227],{"className":53544,"code":102226,"language":53546,"meta":23,"style":23},"\u003Cworldbody>\n",[25,102228,102229],{"__ignoreMap":23},[28,102230,102231,102233,102236],{"class":30,"line":31},[28,102232,1529],{"class":34},[28,102234,102235],{"class":51777},"worldbody",[28,102237,51784],{"class":34},[14,102239,102240,102242],{},[25,102241,102235],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[18,102244,102246],{"className":53544,"code":102245,"language":53546,"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,102247,102248],{"__ignoreMap":23},[28,102249,102250,102252,102254,102256,102258,102261,102263,102265,102268,102270,102272,102275,102277,102279,102282],{"class":30,"line":31},[28,102251,1529],{"class":34},[28,102253,101514],{"class":51777},[28,102255,15406],{"class":2453},[28,102257,83],{"class":34},[28,102259,102260],{"class":735},"\"floor\"",[28,102262,54301],{"class":2453},[28,102264,83],{"class":34},[28,102266,102267],{"class":735},"\"plane\"",[28,102269,101530],{"class":2453},[28,102271,83],{"class":34},[28,102273,102274],{"class":735},"\"2 2 0.1\"",[28,102276,79244],{"class":2453},[28,102278,83],{"class":34},[28,102280,102281],{"class":735},"\"0.8 0.8 0.8 1\"",[28,102283,101538],{"class":34},[14,102285,102286,102287,102289,102290,102293,102294,102297,102298,102300],{},"这行创建地面。",[25,102288,101514],{}," 是几何体。",[25,102291,102292],{},"name=\"floor\""," 是名字。",[25,102295,102296],{},"type=\"plane\""," 表示平面。",[25,102299,55587],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[18,102302,102304],{"className":53544,"code":102303,"language":53546,"meta":23,"style":23},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,102305,102306],{"__ignoreMap":23},[28,102307,102308,102310,102312,102314,102316,102318,102320,102322,102324],{"class":30,"line":31},[28,102309,1529],{"class":34},[28,102311,52277],{"class":51777},[28,102313,15406],{"class":2453},[28,102315,83],{"class":34},[28,102317,53968],{"class":735},[28,102319,101500],{"class":2453},[28,102321,83],{"class":34},[28,102323,101505],{"class":735},[28,102325,51784],{"class":34},[14,102327,102328,102329,28871,102331,102334,102335,102337],{},"这行创建一个刚体，名字叫 ",[25,102330,54191],{},[25,102332,102333],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[25,102336,101563],{},"，也就是离地面 1 米高。",[18,102339,102341],{"className":53544,"code":102340,"language":53546,"meta":23,"style":23},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[25,102342,102343],{"__ignoreMap":23},[28,102344,102345,102347,102349,102351,102353,102356],{"class":30,"line":31},[28,102346,1529],{"class":34},[28,102348,102014],{"class":51777},[28,102350,15406],{"class":2453},[28,102352,83],{"class":34},[28,102354,102355],{"class":735},"\"box_free\"",[28,102357,101538],{"class":34},[14,102359,102360,102361,102363],{},"这行很重要。",[25,102362,102014],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[18,102365,102367],{"className":53544,"code":102366,"language":53546,"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,102368,102369],{"__ignoreMap":23},[28,102370,102371,102373,102375,102377,102379,102381,102383,102385,102387,102389,102391,102393,102396,102398,102400,102402,102404,102407],{"class":30,"line":31},[28,102372,1529],{"class":34},[28,102374,101514],{"class":51777},[28,102376,15406],{"class":2453},[28,102378,83],{"class":34},[28,102380,101521],{"class":735},[28,102382,54301],{"class":2453},[28,102384,83],{"class":34},[28,102386,53968],{"class":735},[28,102388,101530],{"class":2453},[28,102390,83],{"class":34},[28,102392,101535],{"class":735},[28,102394,102395],{"class":2453}," mass",[28,102397,83],{"class":34},[28,102399,4166],{"class":735},[28,102401,79244],{"class":2453},[28,102403,83],{"class":34},[28,102405,102406],{"class":735},"\"1 0 0 1\"",[28,102408,101538],{"class":34},[14,102410,102411,102412,102415,102416,102419,102420,102423,102424,102427],{},"这行给 box body 添加一个盒子形状。",[25,102413,102414],{},"type=\"box\""," 表示形状是盒子。",[25,102417,102418],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[25,102421,102422],{},"mass=\"1\""," 表示质量是 1。",[25,102425,102426],{},"rgba=\"1 0 0 1\""," 表示红色。",[18,102429,102431],{"className":20,"code":102430,"language":22,"meta":23,"style":23},"def main() -> None:\n",[25,102432,102433],{"__ignoreMap":23},[28,102434,102435,102437,102439,102441,102443],{"class":30,"line":31},[28,102436,32426],{"class":42},[28,102438,2463],{"class":2453},[28,102440,101792],{"class":34},[28,102442,96157],{"class":38},[28,102444,4227],{"class":34},[14,102446,102447,102449,102450,102453,102454,102457],{},[25,102448,32426],{}," 用来定义函数。这里定义了一个叫 ",[25,102451,102452],{},"main"," 的函数。",[25,102455,102456],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[18,102459,102460],{"className":20,"code":102021,"language":22,"meta":23,"style":23},[25,102461,102462],{"__ignoreMap":23},[28,102463,102464,102466,102468,102470,102472],{"class":30,"line":31},[28,102465,102028],{"class":34},[28,102467,83],{"class":42},[28,102469,101806],{"class":34},[28,102471,101708],{"class":38},[28,102473,228],{"class":34},[14,102475,102476,102477,102480],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[25,102478,102479],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[18,102482,102483],{"className":20,"code":102045,"language":22,"meta":23,"style":23},[25,102484,102485],{"__ignoreMap":23},[28,102486,102487,102489,102491],{"class":30,"line":31},[28,102488,102052],{"class":34},[28,102490,83],{"class":42},[28,102492,101820],{"class":34},[14,102494,102495,102496,102498,102499,102501],{},"这行创建仿真数据。",[25,102497,33878],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[25,102500,33878],{}," 都会变化。",[18,102503,102505],{"className":20,"code":102504,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[25,102506,102507,102517,102527],{"__ignoreMap":23},[28,102508,102509,102511,102513,102515],{"class":30,"line":31},[28,102510,30898],{"class":38},[28,102512,367],{"class":34},[28,102514,101833],{"class":735},[28,102516,101836],{"class":34},[28,102518,102519,102521,102523,102525],{"class":30,"line":77},[28,102520,30898],{"class":38},[28,102522,367],{"class":34},[28,102524,101845],{"class":735},[28,102526,101848],{"class":34},[28,102528,102529,102531,102533,102535],{"class":30,"line":114},[28,102530,30898],{"class":38},[28,102532,367],{"class":34},[28,102534,101857],{"class":735},[28,102536,101860],{"class":34},[14,102538,102539,102541,102542,102545,102546,102549,102550,102553,102554,102557],{},[25,102540,30898],{}," 用来输出信息。",[25,102543,102544],{},"model.nq"," 是位置变量数量，",[25,102547,102548],{},"model.nv"," 是速度变量数量，",[25,102551,102552],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[25,102555,102556],{},"nu"," 是 0。",[18,102559,102561],{"className":20,"code":102560,"language":22,"meta":23,"style":23},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[25,102562,102563,102573],{"__ignoreMap":23},[28,102564,102565,102567,102569,102571],{"class":30,"line":31},[28,102566,30898],{"class":38},[28,102568,367],{"class":34},[28,102570,101869],{"class":735},[28,102572,101872],{"class":34},[28,102574,102575,102577,102579,102581],{"class":30,"line":77},[28,102576,30898],{"class":38},[28,102578,367],{"class":34},[28,102580,101881],{"class":735},[28,102582,101884],{"class":34},[14,102584,102585,102586,102588,102589,102591,102592,102595],{},"这里打印初始时间和初始位置。",[25,102587,101461],{}," 一开始是 0。",[25,102590,101464],{}," 是位置数组。",[25,102593,102594],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[18,102597,102598],{"className":20,"code":102070,"language":22,"meta":23,"style":23},[25,102599,102600,102616],{"__ignoreMap":23},[28,102601,102602,102604,102606,102608,102610,102612,102614],{"class":30,"line":31},[28,102603,49],{"class":42},[28,102605,101895],{"class":34},[28,102607,55],{"class":42},[28,102609,364],{"class":38},[28,102611,367],{"class":34},[28,102613,938],{"class":38},[28,102615,372],{"class":34},[28,102617,102618],{"class":30,"line":77},[28,102619,102093],{"class":34},[14,102621,102622,102624,102625,102628,102629,102631,102632,102634],{},[25,102623,49],{}," 是循环。",[25,102626,102627],{},"range(100)"," 表示循环 100 次。",[25,102630,1611],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[25,102633,101609],{},"，仿真就前进一步。",[18,102636,102638],{"className":20,"code":102637,"language":22,"meta":23,"style":23},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[25,102639,102640,102650],{"__ignoreMap":23},[28,102641,102642,102644,102646,102648],{"class":30,"line":31},[28,102643,30898],{"class":38},[28,102645,367],{"class":34},[28,102647,101923],{"class":735},[28,102649,101872],{"class":34},[28,102651,102652,102654,102656,102658],{"class":30,"line":77},[28,102653,30898],{"class":38},[28,102655,367],{"class":34},[28,102657,101934],{"class":735},[28,102659,101884],{"class":34},[14,102661,102662],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[18,102664,102666],{"className":20,"code":102665,"language":22,"meta":23,"style":23},"if __name__ == \"__main__\":\n    main()\n",[25,102667,102668,102680],{"__ignoreMap":23},[28,102669,102670,102672,102674,102676,102678],{"class":30,"line":31},[28,102671,2021],{"class":42},[28,102673,31701],{"class":38},[28,102675,101953],{"class":42},[28,102677,101956],{"class":735},[28,102679,4227],{"class":34},[28,102681,102682],{"class":30,"line":77},[28,102683,101963],{"class":34},[14,102685,102686,102687,102690,102691,28871],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[25,102688,102689],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[25,102692,102689],{},[14,102694,102695],{},"运行:",[18,102697,102699],{"className":24308,"code":102698,"language":24310,"meta":23,"style":23},"python ch1_first_sim.py\n",[25,102700,102701],{"__ignoreMap":23},[28,102702,102703,102705],{"class":30,"line":31},[28,102704,22],{"class":2453},[28,102706,101680],{"class":735},[60,102708,102710],{"id":102709},"_5运行结果说明","5.运行结果说明",[14,102712,102713],{},"你应该看到类似输出:",[18,102715,102718],{"className":102716,"code":102717,"language":5675,"meta":23},[5673],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[25,102719,102717],{"__ignoreMap":23},[14,102721,102722,102724,102725,102728,102729,28871],{},[25,102723,102014],{}," 有 7 个位置变量: ",[25,102726,102727],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[25,102730,102731],{},"vx vy vz wx wy wz",[14,102733,102734,102735,102738],{},"你还会看到 ",[25,102736,102737],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[60,102740,102742],{"id":102741},"_6验证步骤","6.验证步骤",[14,102744,102745],{},"确认版本:",[18,102747,102748],{"className":24308,"code":101333,"language":24310,"meta":23,"style":23},[25,102749,102750],{"__ignoreMap":23},[28,102751,102752,102754,102756],{"class":30,"line":31},[28,102753,22],{"class":2453},[28,102755,30844],{"class":38},[28,102757,101344],{"class":735},[14,102759,102760],{},"确认导入的是官方 bindings:",[18,102762,102764],{"className":24308,"code":102763,"language":24310,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco)\"\n",[25,102765,102766],{"__ignoreMap":23},[28,102767,102768,102770,102772],{"class":30,"line":31},[28,102769,22],{"class":2453},[28,102771,30844],{"class":38},[28,102773,102774],{"class":735}," \"import mujoco; print(mujoco)\"\n",[14,102776,102777],{},"运行程序:",[18,102779,102780],{"className":24308,"code":102698,"language":24310,"meta":23,"style":23},[25,102781,102782],{"__ignoreMap":23},[28,102783,102784,102786],{"class":30,"line":31},[28,102785,22],{"class":2453},[28,102787,101680],{"class":735},[14,102789,102790,102791,102794,102795,28871],{},"检查 ",[25,102792,102793],{},"final time"," 是否约等于 ",[25,102796,102797],{},"1.0",[14,102799,102800],{},"再做几个小实验：",[588,102802,102803,102813,102821,102834],{},[591,102804,102805,102806,102808,102809,102812],{},"把 ",[25,102807,102333],{}," 改成 ",[25,102810,102811],{},"pos=\"0 0 2\"","，观察初始高度变化。",[591,102814,102805,102815,102808,102817,102820],{},[25,102816,102222],{},[25,102818,102819],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[591,102822,102805,102823,102808,102825,102828,102829,102831,102832,28871],{},[25,102824,102218],{},[25,102826,102827],{},"timestep=\"0.005\"","，观察 100 步后的 ",[25,102830,102793],{}," 是否变成约 ",[25,102833,35806],{},[591,102835,102836,102837,102840],{},"删除 ",[25,102838,102839],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102842,102843],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[60,102845,102847],{"id":102846},"_7常见错误与解决方案","7.常见错误与解决方案",[605,102849,102851],{"id":102850},"modulenotfounderror-no-module-named-mujoco",[25,102852,102853],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102855,102856],{},"解决:",[18,102858,102860],{"className":24308,"code":102859,"language":24310,"meta":23,"style":23},"pip install \"mujoco>=2.3\"\n",[25,102861,102862],{"__ignoreMap":23},[28,102863,102864,102866,102868],{"class":30,"line":31},[28,102865,24317],{"class":2453},[28,102867,24320],{"class":735},[28,102869,102870],{"class":735}," \"mujoco>=2.3\"\n",[605,102872,102874],{"id":102873},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102876,102877],{},"先安装系统依赖:",[18,102879,102881],{"className":24308,"code":102880,"language":24310,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[25,102882,102883],{"__ignoreMap":23},[28,102884,102885,102887,102889,102891,102893,102896,102898,102901,102903,102906,102908],{"class":30,"line":31},[28,102886,25063],{"class":2453},[28,102888,26801],{"class":735},[28,102890,24320],{"class":735},[28,102892,26886],{"class":38},[28,102894,102895],{"class":735}," mesa-libGL",[28,102897,101208],{"class":735},[28,102899,102900],{"class":735}," glfw",[28,102902,101228],{"class":735},[28,102904,102905],{"class":735}," libX11",[28,102907,101241],{"class":735},[28,102909,102910],{"class":735}," libXrandr\n",[605,102912,102914],{"id":102913},"xml-解析失败","XML 解析失败",[14,102916,102917],{},"检查:",[588,102919,102920,102923,102926,102932],{},[591,102921,102922],{},"标签是否闭合",[591,102924,102925],{},"属性是否带引号",[591,102927,102928,102929],{},"根节点是否是 ",[25,102930,102931],{},"\u003Cmujoco>",[591,102933,102934,102936,102937,102940],{},[25,102935,52277],{}," 是否放在 ",[25,102938,102939],{},"\u003Cworldbody>"," 内部",[605,102942,102944,102946,102947],{"id":102943},"final-time-不是严格等于-10",[25,102945,102793],{}," 不是严格等于 ",[25,102948,102797],{},[14,102950,102951],{},"这通常不是错误。浮点数计算可能得到：",[18,102953,102956],{"className":102954,"code":102955,"language":5675,"meta":23},[5673],"1.0000000000000007\n",[25,102957,102955],{"__ignoreMap":23},[14,102959,102960,102961,102963],{},"只要接近 ",[25,102962,102797],{}," 就正常。",[605,102965,102966],{"id":102966},"方块没有掉下来",[14,102968,102969],{},"检查：",[588,102971,102972,102978,102984,102989],{},[591,102973,102974,102975],{},"方块 body 里是否有 ",[25,102976,102977],{},"\u003Cfreejoint\u002F>",[591,102979,102980,102981],{},"重力是否是 ",[25,102982,102983],{},"0 0 -9.81",[591,102985,102986,102987],{},"是否真的调用了 ",[25,102988,101079],{},[591,102990,102991,102992,102994,102995],{},"你看的是否是 ",[25,102993,102737],{},"，不是 ",[25,102996,102997],{},"initial qpos",[60,102999,103001],{"id":103000},"_8本章小结","8.本章小结",[14,103003,103004],{},"本章你已经完成了 MuJoCo 的最小闭环：",[18,103006,103009],{"className":103007,"code":103008,"language":5675,"meta":23},[5673],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[25,103010,103008],{"__ignoreMap":23},[14,103012,103013],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[547,103015,103016],{},"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":77,"depth":77,"links":103018},[103019,103020,103021,103026,103030,103031,103032,103040],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":103022},[103023,103024,103025],{"id":101476,"depth":114,"text":101477},{"id":101570,"depth":114,"text":101571},{"id":101622,"depth":114,"text":101623},{"id":101646,"depth":77,"text":101647,"children":103027},[103028,103029],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":103033},[103034,103035,103036,103037,103039],{"id":102850,"depth":114,"text":102853},{"id":102873,"depth":114,"text":102874},{"id":102913,"depth":114,"text":102914},{"id":102943,"depth":114,"text":103038},"final time 不是严格等于 1.0",{"id":102966,"depth":114,"text":102966},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101032,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103047,"title":103048,"body":103049,"description":23,"extension":560,"meta":104705,"navigation":562,"path":104706,"seo":104707,"stem":104708,"__hash__":104709},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103050,"toc":104681},[103051,103054,103056,103059,103062,103079,103174,103177,103183,103185,103187,103211,103214,103228,103231,103272,103274,103287,103289,103292,103340,103352,103355,103358,103364,103377,103444,103447,103466,103469,103472,103478,103480,103489,103492,103496,103505,103587,103596,103600,103606,103620,103630,103632,103962,103965,103977,103979,103990,103992,103995,104013,104016,104019,104037,104048,104051,104066,104076,104078,104099,104116,104136,104142,104182,104198,104214,104220,104223,104247,104263,104268,104298,104315,104340,104343,104358,104367,104382,104391,104406,104413,104415,104425,104438,104445,104448,104487,104494,104496,104548,104550,104556,104559,104566,104573,104576,104578,104596,104599,104602,104636,104648,104650,104653,104675,104678],[10,103052,103048],{"id":103053},"_2xml-与-mjcf-物理建模基础",[60,103055,101041],{"id":101040},[14,103057,103058],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103060,103061],{},"本章结束后，你应该能看懂一个简单模型里：",[588,103063,103064,103067,103070,103073,103076],{},[591,103065,103066],{},"地面在哪里。",[591,103068,103069],{},"物体初始位置在哪里。",[591,103071,103072],{},"几何体是什么形状。",[591,103074,103075],{},"哪些 body 可以自由运动。",[591,103077,103078],{},"如何用名字在 Python 里找到 XML 中的对象。",[768,103080,103081,103091],{},[771,103082,103083],{},[774,103084,103085,103088],{},[777,103086,103087],{"align":24222},"标签",[777,103089,103090],{"align":24222},"作用",[815,103092,103093,103102,103112,103121,103131,103141,103154,103164],{},[774,103094,103095,103099],{},[820,103096,103097],{"align":24222},[25,103098,102931],{},[820,103100,103101],{"align":24222},"根节点",[774,103103,103104,103109],{},[820,103105,103106],{"align":24222},[25,103107,103108],{},"\u003Coption>",[820,103110,103111],{"align":24222},"仿真参数",[774,103113,103114,103118],{},[820,103115,103116],{"align":24222},[25,103117,102939],{},[820,103119,103120],{"align":24222},"世界中的物体",[774,103122,103123,103128],{},[820,103124,103125],{"align":24222},[25,103126,103127],{},"\u003Cbody>",[820,103129,103130],{"align":24222},"刚体",[774,103132,103133,103138],{},[820,103134,103135],{"align":24222},[25,103136,103137],{},"\u003Cgeom>",[820,103139,103140],{"align":24222},"几何体、碰撞体、可视体",[774,103142,103143,103151],{},[820,103144,103145,25465,103148],{"align":24222},[25,103146,103147],{},"\u003Cjoint>",[25,103149,103150],{},"\u003Cfreejoint>",[820,103152,103153],{"align":24222},"关节",[774,103155,103156,103161],{},[820,103157,103158],{"align":24222},[25,103159,103160],{},"\u003Csite>",[820,103162,103163],{"align":24222},"标记点",[774,103165,103166,103171],{},[820,103167,103168],{"align":24222},[25,103169,103170],{},"\u003Cactuator>",[820,103172,103173],{"align":24222},"控制器",[14,103175,103176],{},"初学时可以先记住：",[18,103178,103181],{"className":103179,"code":103180,"language":5675,"meta":23},[5673],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[25,103182,103180],{"__ignoreMap":23},[60,103184,101164],{"id":101163},[14,103186,101167],{},[18,103188,103190],{"className":24308,"code":103189,"language":24310,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[25,103191,103192],{"__ignoreMap":23},[28,103193,103194,103196,103198,103200,103202,103204,103206,103208],{"class":30,"line":31},[28,103195,25063],{"class":2453},[28,103197,26801],{"class":735},[28,103199,24320],{"class":735},[28,103201,26886],{"class":38},[28,103203,102895],{"class":735},[28,103205,101208],{"class":735},[28,103207,102900],{"class":735},[28,103209,103210],{"class":735}," glfw-devel\n",[14,103212,103213],{},"pip:",[18,103215,103216],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},[25,103217,103218],{"__ignoreMap":23},[28,103219,103220,103222,103224,103226],{"class":30,"line":31},[28,103221,24317],{"class":2453},[28,103223,24320],{"class":735},[28,103225,101324],{"class":735},[28,103227,101327],{"class":735},[14,103229,103230],{},"conda:",[18,103232,103234],{"className":24308,"code":103233,"language":24310,"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,103235,103236,103253,103262],{"__ignoreMap":23},[28,103237,103238,103240,103242,103244,103247,103249,103251],{"class":30,"line":31},[28,103239,30816],{"class":2453},[28,103241,29662],{"class":735},[28,103243,25602],{"class":38},[28,103245,103246],{"class":735}," mujoco-xml",[28,103248,101369],{"class":735},[28,103250,101372],{"class":38},[28,103252,101375],{"class":38},[28,103254,103255,103257,103259],{"class":30,"line":77},[28,103256,30816],{"class":2453},[28,103258,101382],{"class":735},[28,103260,103261],{"class":735}," mujoco-xml\n",[28,103263,103264,103266,103268,103270],{"class":30,"line":114},[28,103265,24317],{"class":2453},[28,103267,24320],{"class":735},[28,103269,101324],{"class":735},[28,103271,101327],{"class":735},[14,103273,101398],{},[588,103275,103276,103279,103284],{},[591,103277,103278],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[591,103280,103281,103282,28871],{},"本章使用基础标签，适用于 ",[25,103283,101421],{},[591,103285,103286],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[60,103288,101439],{"id":101438},[14,103290,103291],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[18,103293,103295],{"className":53544,"code":103294,"language":53546,"meta":23,"style":23},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[25,103296,103297,103311,103319,103324,103332],{"__ignoreMap":23},[28,103298,103299,103301,103303,103305,103307,103309],{"class":30,"line":31},[28,103300,1529],{"class":34},[28,103302,101415],{"class":51777},[28,103304,102169],{"class":2453},[28,103306,83],{"class":34},[28,103308,63156],{"class":735},[28,103310,51784],{"class":34},[28,103312,103313,103315,103317],{"class":30,"line":77},[28,103314,52621],{"class":34},[28,103316,102235],{"class":51777},[28,103318,51784],{"class":34},[28,103320,103321],{"class":30,"line":114},[28,103322,103323],{"class":34},"    ...\n",[28,103325,103326,103328,103330],{"class":30,"line":128},[28,103327,52894],{"class":34},[28,103329,102235],{"class":51777},[28,103331,51784],{"class":34},[28,103333,103334,103336,103338],{"class":30,"line":393},[28,103335,52262],{"class":34},[28,103337,101415],{"class":51777},[28,103339,51784],{"class":34},[14,103341,103342,103344,103345,103347,103348,103351],{},[25,103343,52277],{}," 表示刚体。",[25,103346,101514],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[25,103349,103350],{},"joint"," 表示刚体相对父刚体如何运动。",[605,103353,103354],{"id":103354},"层级结构非常重要",[14,103356,103357],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[18,103359,103362],{"className":103360,"code":103361,"language":5675,"meta":23},[5673],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[25,103363,103361],{"__ignoreMap":23},[14,103365,103366,101412,103369,103372,103373,103376],{},[25,103367,103368],{},"red_box_geom",[25,103370,103371],{},"box_center"," 都属于 ",[25,103374,103375],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[18,103378,103380],{"className":53544,"code":103379,"language":53546,"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,103381,103382,103402,103416,103436],{"__ignoreMap":23},[28,103383,103384,103386,103388,103390,103392,103394,103396,103398,103400],{"class":30,"line":31},[28,103385,1529],{"class":34},[28,103387,52277],{"class":51777},[28,103389,15406],{"class":2453},[28,103391,83],{"class":34},[28,103393,53968],{"class":735},[28,103395,101500],{"class":2453},[28,103397,83],{"class":34},[28,103399,101505],{"class":735},[28,103401,51784],{"class":34},[28,103403,103404,103406,103408,103410,103412,103414],{"class":30,"line":77},[28,103405,52621],{"class":34},[28,103407,102014],{"class":51777},[28,103409,15406],{"class":2453},[28,103411,83],{"class":34},[28,103413,102355],{"class":735},[28,103415,101538],{"class":34},[28,103417,103418,103420,103422,103424,103426,103428,103430,103432,103434],{"class":30,"line":114},[28,103419,52621],{"class":34},[28,103421,101514],{"class":51777},[28,103423,54301],{"class":2453},[28,103425,83],{"class":34},[28,103427,53968],{"class":735},[28,103429,101530],{"class":2453},[28,103431,83],{"class":34},[28,103433,101535],{"class":735},[28,103435,101538],{"class":34},[28,103437,103438,103440,103442],{"class":30,"line":128},[28,103439,52262],{"class":34},[28,103441,52277],{"class":51777},[28,103443,51784],{"class":34},[14,103445,103446],{},"含义:",[588,103448,103449,103455,103460,103463],{},[591,103450,103451,103452,103454],{},"创建名为 ",[25,103453,54191],{}," 的刚体",[591,103456,103457,103458],{},"初始位置在世界坐标 ",[25,103459,101563],{},[591,103461,103462],{},"它有一个自由关节",[591,103464,103465],{},"它有一个盒子几何体",[605,103467,103468],{"id":103468},"坐标怎么理解",[14,103470,103471],{},"MuJoCo 默认使用三维坐标：",[18,103473,103476],{"className":103474,"code":103475,"language":5675,"meta":23},[5673],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[25,103477,103475],{"__ignoreMap":23},[14,103479,15119],{},[18,103481,103483],{"className":53544,"code":103482,"language":53546,"meta":23,"style":23},"pos=\"0 0 1\"\n",[25,103484,103485],{"__ignoreMap":23},[28,103486,103487],{"class":30,"line":31},[28,103488,103482],{"class":34},[14,103490,103491],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[605,103493,103495],{"id":103494},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103497,103498,103499,83007,103502,103504],{},"不同 ",[25,103500,103501],{},"type",[25,103503,31975],{}," 含义不同：",[768,103506,103507,103522],{},[771,103508,103509],{},[774,103510,103511,103515,103520],{},[777,103512,103513],{"align":24222},[25,103514,103501],{},[777,103516,103517,103519],{"align":24222},[25,103518,31975],{}," 示例",[777,103521,101094],{"align":24222},[815,103523,103524,103538,103553,103572],{},[774,103525,103526,103530,103535],{},[820,103527,103528],{"align":24222},[25,103529,54191],{},[820,103531,103532],{"align":24222},[25,103533,103534],{},"size=\"0.1 0.2 0.3\"",[820,103536,103537],{"align":24222},"x\u002Fy\u002Fz 半边长，不是完整长度",[774,103539,103540,103545,103550],{},[820,103541,103542],{"align":24222},[25,103543,103544],{},"sphere",[820,103546,103547],{"align":24222},[25,103548,103549],{},"size=\"0.1\"",[820,103551,103552],{"align":24222},"球半径",[774,103554,103555,103560,103565],{},[820,103556,103557],{"align":24222},[25,103558,103559],{},"capsule",[820,103561,103562],{"align":24222},[25,103563,103564],{},"size=\"0.03\"",[820,103566,103567,103568,103571],{"align":24222},"胶囊半径，长度常用 ",[25,103569,103570],{},"fromto"," 指定",[774,103573,103574,103579,103584],{},[820,103575,103576],{"align":24222},[25,103577,103578],{},"plane",[820,103580,103581],{"align":24222},[25,103582,103583],{},"size=\"3 3 0.1\"",[820,103585,103586],{"align":24222},"可视平面大小，通常当地面",[14,103588,103589,103590,103592,103593,103595],{},"最容易踩坑的是 box：",[25,103591,102418],{}," 表示边长大约是 ",[25,103594,32516],{},"，因为 MuJoCo 用的是半边长。",[605,103597,103599],{"id":103598},"site-是什么","site 是什么",[14,103601,103602,103605],{},[25,103603,103604],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[588,103607,103608,103611,103614,103617],{},[591,103609,103610],{},"标记机械臂末端。",[591,103612,103613],{},"标记目标位置。",[591,103615,103616],{},"放传感器或相机参考点。",[591,103618,103619],{},"在 Python 中读取某个关键点的世界坐标。",[14,103621,103622,103623,101412,103626,103629],{},"在后面的 Reacher 任务中，",[25,103624,103625],{},"tip",[25,103627,103628],{},"target"," 就会用 site 表示。",[60,103631,101647],{"id":101646},[18,103633,103635],{"className":20,"code":103634,"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,103636,103637,103643,103653,103657,103661,103669,103674,103678,103682,103686,103691,103695,103700,103705,103710,103715,103719,103723,103727,103731,103735,103739,103751,103763,103771,103775,103790,103805,103809,103822,103837,103850,103863,103867,103883,103887,103891,103902,103914,103926,103938,103942,103946,103958],{"__ignoreMap":23},[28,103638,103639,103641],{"class":30,"line":31},[28,103640,536],{"class":42},[28,103642,101695],{"class":34},[28,103644,103645,103647,103649,103651],{"class":30,"line":77},[28,103646,536],{"class":42},[28,103648,31861],{"class":34},[28,103650,542],{"class":42},[28,103652,31866],{"class":34},[28,103654,103655],{"class":30,"line":114},[28,103656,2890],{"emptyLinePlaceholder":562},[28,103658,103659],{"class":30,"line":128},[28,103660,2890],{"emptyLinePlaceholder":562},[28,103662,103663,103665,103667],{"class":30,"line":393},[28,103664,101708],{"class":38},[28,103666,14050],{"class":42},[28,103668,101713],{"class":735},[28,103670,103671],{"class":30,"line":409},[28,103672,103673],{"class":735},"\u003Cmujoco model=\"xml_basic\">\n",[28,103675,103676],{"class":30,"line":1711},[28,103677,101723],{"class":735},[28,103679,103680],{"class":30,"line":1802},[28,103681,2890],{"emptyLinePlaceholder":562},[28,103683,103684],{"class":30,"line":1808},[28,103685,101732],{"class":735},[28,103687,103688],{"class":30,"line":1820},[28,103689,103690],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[28,103692,103693],{"class":30,"line":2102},[28,103694,2890],{"emptyLinePlaceholder":562},[28,103696,103697],{"class":30,"line":2107},[28,103698,103699],{"class":735},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[28,103701,103702],{"class":30,"line":2113},[28,103703,103704],{"class":735},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[28,103706,103707],{"class":30,"line":2118},[28,103708,103709],{"class":735},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,103711,103712],{"class":30,"line":2132},[28,103713,103714],{"class":735},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,103716,103717],{"class":30,"line":2137},[28,103718,101761],{"class":735},[28,103720,103721],{"class":30,"line":2143},[28,103722,101766],{"class":735},[28,103724,103725],{"class":30,"line":2164},[28,103726,101771],{"class":735},[28,103728,103729],{"class":30,"line":2169},[28,103730,96169],{"class":735},[28,103732,103733],{"class":30,"line":2183},[28,103734,2890],{"emptyLinePlaceholder":562},[28,103736,103737],{"class":30,"line":2188},[28,103738,2890],{"emptyLinePlaceholder":562},[28,103740,103741,103743,103745,103747,103749],{"class":30,"line":2217},[28,103742,32426],{"class":42},[28,103744,2463],{"class":2453},[28,103746,101792],{"class":34},[28,103748,96157],{"class":38},[28,103750,4227],{"class":34},[28,103752,103753,103755,103757,103759,103761],{"class":30,"line":2222},[28,103754,101801],{"class":34},[28,103756,83],{"class":42},[28,103758,101806],{"class":34},[28,103760,101708],{"class":38},[28,103762,228],{"class":34},[28,103764,103765,103767,103769],{"class":30,"line":2239},[28,103766,101815],{"class":34},[28,103768,83],{"class":42},[28,103770,101820],{"class":34},[28,103772,103773],{"class":30,"line":2244},[28,103774,2890],{"emptyLinePlaceholder":562},[28,103776,103777,103780,103782,103785,103788],{"class":30,"line":2249},[28,103778,103779],{"class":34},"    box_body_id ",[28,103781,83],{"class":42},[28,103783,103784],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[28,103786,103787],{"class":735},"\"red_box\"",[28,103789,228],{"class":34},[28,103791,103792,103795,103797,103800,103803],{"class":30,"line":2254},[28,103793,103794],{"class":34},"    site_id ",[28,103796,83],{"class":42},[28,103798,103799],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[28,103801,103802],{"class":735},"\"box_center\"",[28,103804,228],{"class":34},[28,103806,103807],{"class":30,"line":2268},[28,103808,2890],{"emptyLinePlaceholder":562},[28,103810,103811,103813,103816,103818,103820],{"class":30,"line":2273},[28,103812,3590],{"class":42},[28,103814,103815],{"class":34}," box_body_id ",[28,103817,1529],{"class":42},[28,103819,4581],{"class":38},[28,103821,4227],{"class":34},[28,103823,103824,103827,103830,103832,103835],{"class":30,"line":3067},[28,103825,103826],{"class":42},"        raise",[28,103828,103829],{"class":38}," RuntimeError",[28,103831,367],{"class":34},[28,103833,103834],{"class":735},"\"body red_box not found\"",[28,103836,228],{"class":34},[28,103838,103839,103841,103844,103846,103848],{"class":30,"line":3081},[28,103840,3590],{"class":42},[28,103842,103843],{"class":34}," site_id ",[28,103845,1529],{"class":42},[28,103847,4581],{"class":38},[28,103849,4227],{"class":34},[28,103851,103852,103854,103856,103858,103861],{"class":30,"line":3089},[28,103853,103826],{"class":42},[28,103855,103829],{"class":38},[28,103857,367],{"class":34},[28,103859,103860],{"class":735},"\"site box_center not found\"",[28,103862,228],{"class":34},[28,103864,103865],{"class":30,"line":3094},[28,103866,2890],{"emptyLinePlaceholder":562},[28,103868,103869,103871,103873,103875,103877,103879,103881],{"class":30,"line":3100},[28,103870,377],{"class":42},[28,103872,101895],{"class":34},[28,103874,55],{"class":42},[28,103876,364],{"class":38},[28,103878,367],{"class":34},[28,103880,2212],{"class":38},[28,103882,372],{"class":34},[28,103884,103885],{"class":30,"line":3106},[28,103886,101910],{"class":34},[28,103888,103889],{"class":30,"line":3111},[28,103890,2890],{"emptyLinePlaceholder":562},[28,103892,103893,103895,103897,103900],{"class":30,"line":8436},[28,103894,31780],{"class":38},[28,103896,367],{"class":34},[28,103898,103899],{"class":735},"\"simulation time:\"",[28,103901,101872],{"class":34},[28,103903,103904,103906,103908,103911],{"class":30,"line":8460},[28,103905,31780],{"class":38},[28,103907,367],{"class":34},[28,103909,103910],{"class":735},"\"box body position:\"",[28,103912,103913],{"class":34},", data.xpos[box_body_id].copy())\n",[28,103915,103916,103918,103920,103923],{"class":30,"line":8465},[28,103917,31780],{"class":38},[28,103919,367],{"class":34},[28,103921,103922],{"class":735},"\"site position:\"",[28,103924,103925],{"class":34},", data.site_xpos[site_id].copy())\n",[28,103927,103928,103930,103932,103935],{"class":30,"line":8471},[28,103929,31780],{"class":38},[28,103931,367],{"class":34},[28,103933,103934],{"class":735},"\"box qpos:\"",[28,103936,103937],{"class":34},", np.array(data.qpos))\n",[28,103939,103940],{"class":30,"line":8498},[28,103941,2890],{"emptyLinePlaceholder":562},[28,103943,103944],{"class":30,"line":8503},[28,103945,2890],{"emptyLinePlaceholder":562},[28,103947,103948,103950,103952,103954,103956],{"class":30,"line":8509},[28,103949,2021],{"class":42},[28,103951,31701],{"class":38},[28,103953,101953],{"class":42},[28,103955,101956],{"class":735},[28,103957,4227],{"class":34},[28,103959,103960],{"class":30,"line":8521},[28,103961,101963],{"class":34},[14,103963,103964],{},"保存为：",[18,103966,103968],{"className":24308,"code":103967,"language":24310,"meta":23,"style":23},"touch ch2_xml_basic.py\n",[25,103969,103970],{"__ignoreMap":23},[28,103971,103972,103974],{"class":30,"line":31},[28,103973,101677],{"class":2453},[28,103975,103976],{"class":735}," ch2_xml_basic.py\n",[14,103978,102695],{},[18,103980,103982],{"className":24308,"code":103981,"language":24310,"meta":23,"style":23},"python ch2_xml_basic.py\n",[25,103983,103984],{"__ignoreMap":23},[28,103985,103986,103988],{"class":30,"line":31},[28,103987,22],{"class":2453},[28,103989,103976],{"class":735},[605,103991,101966],{"id":101966},[14,103993,103994],{},"用名字查找 body：",[18,103996,103998],{"className":20,"code":103997,"language":22,"meta":23,"style":23},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[25,103999,104000],{"__ignoreMap":23},[28,104001,104002,104005,104007,104009,104011],{"class":30,"line":31},[28,104003,104004],{"class":34},"box_body_id ",[28,104006,83],{"class":42},[28,104008,103784],{"class":34},[28,104010,103787],{"class":735},[28,104012,228],{"class":34},[14,104014,104015],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104017,104018],{},"用名字查找 site：",[18,104020,104022],{"className":20,"code":104021,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[25,104023,104024],{"__ignoreMap":23},[28,104025,104026,104029,104031,104033,104035],{"class":30,"line":31},[28,104027,104028],{"class":34},"site_id ",[28,104030,83],{"class":42},[28,104032,103799],{"class":34},[28,104034,103802],{"class":735},[28,104036,228],{"class":34},[14,104038,104039,104040,104043,104044,104047],{},"注意第二个参数是对象类型。查 body 就用 ",[25,104041,104042],{},"mjOBJ_BODY","，查 site 就用 ",[25,104045,104046],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104049,104050],{},"读取世界坐标：",[18,104052,104054],{"className":20,"code":104053,"language":22,"meta":23,"style":23},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[25,104055,104056,104061],{"__ignoreMap":23},[28,104057,104058],{"class":30,"line":31},[28,104059,104060],{"class":34},"data.xpos[box_body_id]\n",[28,104062,104063],{"class":30,"line":77},[28,104064,104065],{"class":34},"data.site_xpos[site_id]\n",[14,104067,104068,104071,104072,104075],{},[25,104069,104070],{},"xpos"," 是 body 的世界坐标，",[25,104073,104074],{},"site_xpos"," 是 site 的世界坐标。",[605,104077,102102],{"id":102102},[18,104079,104081],{"className":20,"code":104080,"language":22,"meta":23,"style":23},"import mujoco\nimport numpy as np\n",[25,104082,104083,104089],{"__ignoreMap":23},[28,104084,104085,104087],{"class":30,"line":31},[28,104086,536],{"class":42},[28,104088,101695],{"class":34},[28,104090,104091,104093,104095,104097],{"class":30,"line":77},[28,104092,536],{"class":42},[28,104094,31861],{"class":34},[28,104096,542],{"class":42},[28,104098,31866],{"class":34},[14,104100,104101,104102,104105,104106,104109,104110,843,104113,28871],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[25,104103,104104],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[25,104107,104108],{},"as np"," 是习惯写法，后面就可以写 ",[25,104111,104112],{},"np.array(...)",[25,104114,104115],{},"np.round(...)",[18,104117,104118],{"className":20,"code":101989,"language":22,"meta":23,"style":23},[25,104119,104120,104128,104132],{"__ignoreMap":23},[28,104121,104122,104124,104126],{"class":30,"line":31},[28,104123,101708],{"class":38},[28,104125,14050],{"class":42},[28,104127,101713],{"class":735},[28,104129,104130],{"class":30,"line":77},[28,104131,102004],{"class":735},[28,104133,104134],{"class":30,"line":114},[28,104135,96169],{"class":735},[14,104137,104138,104139,28871],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[25,104140,104141],{},"mujoco.MjModel.from_xml_string(XML)",[18,104143,104145],{"className":53544,"code":104144,"language":53546,"meta":23,"style":23},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104146,104147],{"__ignoreMap":23},[28,104148,104149,104151,104153,104155,104157,104159,104161,104163,104166,104168,104170,104173,104175,104177,104180],{"class":30,"line":31},[28,104150,1529],{"class":34},[28,104152,103604],{"class":51777},[28,104154,15406],{"class":2453},[28,104156,83],{"class":34},[28,104158,103802],{"class":735},[28,104160,101500],{"class":2453},[28,104162,83],{"class":34},[28,104164,104165],{"class":735},"\"0 0 0\"",[28,104167,101530],{"class":2453},[28,104169,83],{"class":34},[28,104171,104172],{"class":735},"\"0.03\"",[28,104174,79244],{"class":2453},[28,104176,83],{"class":34},[28,104178,104179],{"class":735},"\"0 1 0 1\"",[28,104181,101538],{"class":34},[14,104183,104184,104186,104187,104190,104191,104193,104194,104197],{},[25,104185,103604],{}," 是标记点。",[25,104188,104189],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[25,104192,103564],{}," 表示显示出来的小球大小。",[25,104195,104196],{},"rgba=\"0 1 0 1\""," 表示绿色。",[18,104199,104200],{"className":20,"code":103997,"language":22,"meta":23,"style":23},[25,104201,104202],{"__ignoreMap":23},[28,104203,104204,104206,104208,104210,104212],{"class":30,"line":31},[28,104205,104004],{"class":34},[28,104207,83],{"class":42},[28,104209,103784],{"class":34},[28,104211,103787],{"class":735},[28,104213,228],{"class":34},[14,104215,104216,104217,104219],{},"这行的作用是：根据名字 ",[25,104218,103787],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104221,104222],{},"拆开看：",[588,104224,104225,104231,104236,104242],{},[591,104226,104227,104230],{},[25,104228,104229],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[591,104232,104233,104235],{},[25,104234,102479],{}," 是被查询的模型。",[591,104237,104238,104241],{},[25,104239,104240],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[591,104243,104244,104246],{},[25,104245,103787],{}," 是 XML 里写的名字。",[18,104248,104249],{"className":20,"code":104021,"language":22,"meta":23,"style":23},[25,104250,104251],{"__ignoreMap":23},[28,104252,104253,104255,104257,104259,104261],{"class":30,"line":31},[28,104254,104028],{"class":34},[28,104256,83],{"class":42},[28,104258,103799],{"class":34},[28,104260,103802],{"class":735},[28,104262,228],{"class":34},[14,104264,104265,104266,28871],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[25,104267,103802],{},[18,104269,104271],{"className":20,"code":104270,"language":22,"meta":23,"style":23},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[25,104272,104273,104285],{"__ignoreMap":23},[28,104274,104275,104277,104279,104281,104283],{"class":30,"line":31},[28,104276,2021],{"class":42},[28,104278,103815],{"class":34},[28,104280,1529],{"class":42},[28,104282,4581],{"class":38},[28,104284,4227],{"class":34},[28,104286,104287,104290,104292,104294,104296],{"class":30,"line":77},[28,104288,104289],{"class":42},"    raise",[28,104291,103829],{"class":38},[28,104293,367],{"class":34},[28,104295,103834],{"class":735},[28,104297,228],{"class":34},[14,104299,104300,104302,104303,104306,104307,104310,104311,104314],{},[25,104301,2021],{}," 是条件判断。",[25,104304,104305],{},"mj_name2id"," 找不到对象时会返回 ",[25,104308,104309],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[25,104312,104313],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[18,104316,104318],{"className":20,"code":104317,"language":22,"meta":23,"style":23},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[25,104319,104320,104336],{"__ignoreMap":23},[28,104321,104322,104324,104326,104328,104330,104332,104334],{"class":30,"line":31},[28,104323,49],{"class":42},[28,104325,101895],{"class":34},[28,104327,55],{"class":42},[28,104329,364],{"class":38},[28,104331,367],{"class":34},[28,104333,2212],{"class":38},[28,104335,372],{"class":34},[28,104337,104338],{"class":30,"line":77},[28,104339,102093],{"class":34},[14,104341,104342],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[18,104344,104346],{"className":20,"code":104345,"language":22,"meta":23,"style":23},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[25,104347,104348],{"__ignoreMap":23},[28,104349,104350,104352,104354,104356],{"class":30,"line":31},[28,104351,30898],{"class":38},[28,104353,367],{"class":34},[28,104355,103910],{"class":735},[28,104357,103913],{"class":34},[14,104359,104360,104362,104363,104366],{},[25,104361,101473],{}," 保存所有 body 的世界坐标。",[25,104364,104365],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[18,104368,104370],{"className":20,"code":104369,"language":22,"meta":23,"style":23},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[25,104371,104372],{"__ignoreMap":23},[28,104373,104374,104376,104378,104380],{"class":30,"line":31},[28,104375,30898],{"class":38},[28,104377,367],{"class":34},[28,104379,103922],{"class":735},[28,104381,103925],{"class":34},[14,104383,104384,104387,104388,104390],{},[25,104385,104386],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[25,104389,103371],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[18,104392,104394],{"className":20,"code":104393,"language":22,"meta":23,"style":23},"print(\"box qpos:\", np.array(data.qpos))\n",[25,104395,104396],{"__ignoreMap":23},[28,104397,104398,104400,104402,104404],{"class":30,"line":31},[28,104399,30898],{"class":38},[28,104401,367],{"class":34},[28,104403,103934],{"class":735},[28,104405,103937],{"class":34},[14,104407,104408,104409,104412],{},"这里打印广义位置数组。",[25,104410,104411],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[60,104414,102710],{"id":102709},[14,104416,104417,104418,104421,104422,28871],{},"程序会输出 ",[25,104419,104420],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[25,104423,104424],{},"qpos",[14,104426,104427,104429,104430,104433,104434,104437],{},[25,104428,104365],{}," 是 body 的世界坐标位置。",[25,104431,104432],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[25,104435,104436],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104439,82699,104440,83007,104442,104444],{},[25,104441,103371],{},[25,104443,104189],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104446,104447],{},"如果你把 site 改成：",[18,104449,104451],{"className":53544,"code":104450,"language":53546,"meta":23,"style":23},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104452,104453],{"__ignoreMap":23},[28,104454,104455,104457,104459,104461,104463,104466,104468,104470,104473,104475,104477,104479,104481,104483,104485],{"class":30,"line":31},[28,104456,1529],{"class":34},[28,104458,103604],{"class":51777},[28,104460,15406],{"class":2453},[28,104462,83],{"class":34},[28,104464,104465],{"class":735},"\"box_top\"",[28,104467,101500],{"class":2453},[28,104469,83],{"class":34},[28,104471,104472],{"class":735},"\"0 0 0.15\"",[28,104474,101530],{"class":2453},[28,104476,83],{"class":34},[28,104478,104172],{"class":735},[28,104480,79244],{"class":2453},[28,104482,83],{"class":34},[28,104484,104179],{"class":735},[28,104486,101538],{"class":34},[14,104488,104489,104490,104493],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[25,104491,104492],{},"site position"," 就会比 body position 的 z 坐标更高。",[60,104495,102742],{"id":102741},[588,104497,104498,104507,104510,104517,104523,104534],{},[591,104499,102805,104500,104502,104503,102808,104505,28871],{},[25,104501,103375],{}," 的初始高度从 ",[25,104504,39],{},[25,104506,93],{},[591,104508,104509],{},"重新运行程序。",[591,104511,104512,104513,104516],{},"观察 ",[25,104514,104515],{},"box qpos"," 和最终位置是否变化。",[591,104518,104519,104520,104522],{},"故意把 ",[25,104521,103604],{}," 名称改错，确认程序能报错。",[591,104524,102805,104525,104527,104528,102808,104530,104533],{},[25,104526,101514],{}," 的颜色 ",[25,104529,102426],{},[25,104531,104532],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[591,104535,102805,104536,83007,104538,102808,104541,104544,104545,104547],{},[25,104537,103371],{},[25,104539,104540],{},"pos",[25,104542,104543],{},"0 0 0.2","，观察 ",[25,104546,104492],{}," 如何变化。",[60,104549,102847],{"id":102846},[605,104551,104553],{"id":104552},"xml-error-schema-violation",[25,104554,104555],{},"XML Error: Schema violation",[14,104557,104558],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[605,104560,104562,81767,104564],{"id":104561},"mj_name2id-返回-1",[25,104563,104305],{},[25,104565,104309],{},[14,104567,104568,104569,104572],{},"说明名字没有找到。检查 XML 中 ",[25,104570,104571],{},"name=\"...\"","，并确认对象类型正确。",[605,104574,104575],{"id":104575},"物体不下落",[14,104577,102917],{},[588,104579,104580,104585,104590],{},[591,104581,104582,104583],{},"body 是否有 ",[25,104584,102014],{},[591,104586,104587,104588],{},"gravity 是否为 ",[25,104589,102983],{},[591,104591,104592,104593,104595],{},"body 是否被固定在 ",[25,104594,102235],{}," 中",[605,104597,104598],{"id":104598},"坐标看起来不符合预期",[14,104600,104601],{},"先区分两种坐标：",[768,104603,104604,104613],{},[771,104605,104606],{},[774,104607,104608,104611],{},[777,104609,104610],{"align":24222},"坐标",[777,104612,101094],{"align":24222},[815,104614,104615,104625],{},[774,104616,104617,104622],{},[820,104618,104619,104620],{"align":24222},"XML 里的 ",[25,104621,104540],{},[820,104623,104624],{"align":24222},"相对父 body 的局部坐标",[774,104626,104627,104633],{},[820,104628,104629,25465,104631],{"align":24222},[25,104630,101473],{},[25,104632,104386],{},[820,104634,104635],{"align":24222},"仿真更新后的世界坐标",[14,104637,104638,104639,104641,104642,83016,104645,104647],{},"如果你修改了 ",[25,104640,101464],{},"，但还没调用 ",[25,104643,104644],{},"mj_forward",[25,104646,101609],{},"，世界坐标可能还没有更新。",[60,104649,103001],{"id":103000},[14,104651,104652],{},"MJCF 建模先掌握四件事：",[588,104654,104655,104660,104665,104670],{},[591,104656,104657,104659],{},[25,104658,52277],{}," 表示刚体层级。",[591,104661,104662,104664],{},[25,104663,101514],{}," 表示形状、碰撞和质量。",[591,104666,104667,104669],{},[25,104668,103350],{}," 决定 body 能不能动、怎么动。",[591,104671,104672,104674],{},[25,104673,103604],{}," 用来标记关键点，方便 Python 读取位置。",[14,104676,104677],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[547,104679,104680],{},"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":77,"depth":77,"links":104682},[104683,104684,104685,104691,104695,104696,104697,104704],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":104686},[104687,104688,104689,104690],{"id":103354,"depth":114,"text":103354},{"id":103468,"depth":114,"text":103468},{"id":103494,"depth":114,"text":103495},{"id":103598,"depth":114,"text":103599},{"id":101646,"depth":77,"text":101647,"children":104692},[104693,104694],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":104698},[104699,104700,104702,104703],{"id":104552,"depth":114,"text":104555},{"id":104561,"depth":114,"text":104701},"mj_name2id 返回 -1",{"id":104575,"depth":114,"text":104575},{"id":104598,"depth":114,"text":104598},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103048,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104711,"title":104712,"body":104713,"description":23,"extension":560,"meta":106208,"navigation":562,"path":106209,"seo":106210,"stem":106211,"__hash__":106212},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104714,"toc":106180},[104715,104718,104720,104723,104726,104764,104767,104773,104776,104778,104780,104807,104809,104823,104825,104866,104868,104892,104894,104897,104906,104915,104918,104927,104935,104944,104947,104957,104960,105012,105019,105025,105033,105081,105084,105103,105106,105114,105118,105127,105160,105162,105510,105512,105524,105526,105537,105539,105542,105563,105569,105572,105597,105607,105610,105618,105621,105624,105645,105656,105658,105678,105681,105702,105711,105730,105736,105761,105764,105778,105785,105809,105812,105820,105829,105845,105857,105865,105874,105876,105879,105903,105908,105911,105933,105935,105974,105976,105983,105985,105993,105996,105999,106011,106052,106059,106070,106077,106080,106129,106132,106135,106141,106143,106148,106174,106177],[10,104716,104712],{"id":104717},"_3python-控制接口读取状态与推进仿真",[60,104719,101041],{"id":101040},[14,104721,104722],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104724,104725],{},"你将学习:",[588,104727,104728,104733,104738,104742,104747,104758],{},[591,104729,104730],{},[25,104731,104732],{},"MjModel.from_xml_string",[591,104734,104735],{},[25,104736,104737],{},"MjData(model)",[591,104739,104740],{},[25,104741,101609],{},[591,104743,104744],{},[25,104745,104746],{},"mj_resetData",[591,104748,104749,104750,843,104752,843,104755],{},"读取 ",[25,104751,104424],{},[25,104753,104754],{},"qvel",[25,104756,104757],{},"ctrl",[591,104759,104760,104761],{},"使用 ",[25,104762,104763],{},"model.opt.timestep",[14,104765,104766],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[18,104768,104771],{"className":104769,"code":104770,"language":5675,"meta":23},[5673],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[25,104772,104770],{"__ignoreMap":23},[14,104774,104775],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[60,104777,101164],{"id":101163},[14,104779,101167],{},[18,104781,104783],{"className":24308,"code":104782,"language":24310,"meta":23,"style":23},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[25,104784,104785],{"__ignoreMap":23},[28,104786,104787,104789,104791,104793,104795,104798,104800,104802,104804],{"class":30,"line":31},[28,104788,25063],{"class":2453},[28,104790,26801],{"class":735},[28,104792,24320],{"class":735},[28,104794,26886],{"class":38},[28,104796,104797],{"class":735}," python3",[28,104799,101192],{"class":735},[28,104801,102895],{"class":735},[28,104803,101208],{"class":735},[28,104805,104806],{"class":735}," glfw\n",[14,104808,103213],{},[18,104810,104811],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},[25,104812,104813],{"__ignoreMap":23},[28,104814,104815,104817,104819,104821],{"class":30,"line":31},[28,104816,24317],{"class":2453},[28,104818,24320],{"class":735},[28,104820,101324],{"class":735},[28,104822,101327],{"class":735},[14,104824,103230],{},[18,104826,104828],{"className":24308,"code":104827,"language":24310,"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,104829,104830,104847,104856],{"__ignoreMap":23},[28,104831,104832,104834,104836,104838,104841,104843,104845],{"class":30,"line":31},[28,104833,30816],{"class":2453},[28,104835,29662],{"class":735},[28,104837,25602],{"class":38},[28,104839,104840],{"class":735}," mujoco-python-api",[28,104842,101369],{"class":735},[28,104844,101372],{"class":38},[28,104846,101375],{"class":38},[28,104848,104849,104851,104853],{"class":30,"line":77},[28,104850,30816],{"class":2453},[28,104852,101382],{"class":735},[28,104854,104855],{"class":735}," mujoco-python-api\n",[28,104857,104858,104860,104862,104864],{"class":30,"line":114},[28,104859,24317],{"class":2453},[28,104861,24320],{"class":735},[28,104863,101324],{"class":735},[28,104865,101327],{"class":735},[14,104867,101398],{},[588,104869,104870,104877,104886],{},[591,104871,104872,101412,104874,104876],{},[25,104873,101069],{},[25,104875,101074],{}," 是官方 Python bindings 的类名。",[591,104878,104879,104880,104883,104884,28871],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[25,104881,104882],{},"mjModel"," 在 Python 中是 ",[25,104885,101103],{},[591,104887,104888,104889,28871],{},"不要使用 ",[25,104890,104891],{},"sim = mujoco_py.MjSim(...)",[60,104893,101439],{"id":101438},[14,104895,104896],{},"仿真推进核心代码:",[18,104898,104900],{"className":20,"code":104899,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\n",[25,104901,104902],{"__ignoreMap":23},[28,104903,104904],{"class":30,"line":31},[28,104905,104899],{"class":34},[14,104907,104908,104909,843,104911,843,104913,28871],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[25,104910,101464],{},[25,104912,101467],{},[25,104914,101461],{},[14,104916,104917],{},"重置仿真:",[18,104919,104921],{"className":20,"code":104920,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\n",[25,104922,104923],{"__ignoreMap":23},[28,104924,104925],{"class":30,"line":31},[28,104926,104920],{"class":34},[14,104928,104929,104930,83016,104932,104934],{},"如果手动修改了 ",[25,104931,101464],{},[25,104933,101467],{},"，通常应调用:",[18,104936,104938],{"className":20,"code":104937,"language":22,"meta":23,"style":23},"mujoco.mj_forward(model, data)\n",[25,104939,104940],{"__ignoreMap":23},[28,104941,104942],{"class":30,"line":31},[28,104943,104937],{"class":34},[14,104945,104946],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[605,104948,104950,843,104952,843,104954,104956],{"id":104949},"qposqvelctrl-是什么",[25,104951,104424],{},[25,104953,104754],{},[25,104955,104757],{}," 是什么",[14,104958,104959],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[768,104961,104962,104974],{},[771,104963,104964],{},[774,104965,104966,104969,104971],{},[777,104967,104968],{"align":24222},"字段",[777,104970,101094],{"align":24222},[777,104972,104973],{"align":24222},"谁来修改",[815,104975,104976,104988,105000],{},[774,104977,104978,104982,104985],{},[820,104979,104980],{"align":24222},[25,104981,101464],{},[820,104983,104984],{"align":24222},"广义位置，例如小车位置、关节角、自由物体位置姿态",[820,104986,104987],{"align":24222},"MuJoCo 更新，也可以手动设置初始状态",[774,104989,104990,104994,104997],{},[820,104991,104992],{"align":24222},[25,104993,101467],{},[820,104995,104996],{"align":24222},"广义速度，例如小车速度、关节角速度",[820,104998,104999],{"align":24222},"MuJoCo 更新，也可以手动清零",[774,105001,105002,105006,105009],{},[820,105003,105004],{"align":24222},[25,105005,101470],{},[820,105007,105008],{"align":24222},"actuator 的控制输入",[820,105010,105011],{"align":24222},"主要由你的控制代码写入",[14,105013,9513,105014,101412,105016,105018],{},[25,105015,104424],{},[25,105017,104754],{}," 不一定同维。自由刚体就是典型例子：",[18,105020,105023],{"className":105021,"code":105022,"language":5675,"meta":23},[5673],"freejoint: qpos 7 维，qvel 6 维\n",[25,105024,105022],{"__ignoreMap":23},[605,105026,105028,101412,105030,105032],{"id":105027},"mj_step-和-mj_forward-的区别",[25,105029,101609],{},[25,105031,104644],{}," 的区别",[768,105034,105035,105048],{},[771,105036,105037],{},[774,105038,105039,105042,105045],{},[777,105040,105041],{"align":24222},"函数",[777,105043,105044],{"align":24222},"是否推进时间",[777,105046,105047],{"align":24222},"什么时候用",[815,105049,105050,105063],{},[774,105051,105052,105057,105060],{},[820,105053,105054],{"align":24222},[25,105055,105056],{},"mj_step(model, data)",[820,105058,105059],{"align":24222},"是",[820,105061,105062],{"align":24222},"正常仿真循环，每调用一次前进一步",[774,105064,105065,105070,105073],{},[820,105066,105067],{"align":24222},[25,105068,105069],{},"mj_forward(model, data)",[820,105071,105072],{"align":24222},"否",[820,105074,105075,105076,843,105078,105080],{"align":24222},"手动改了 ",[25,105077,104424],{},[25,105079,104754],{}," 后，刷新派生量",[14,105082,105083],{},"例如你写：",[18,105085,105087],{"className":20,"code":105086,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\n",[25,105088,105089],{"__ignoreMap":23},[28,105090,105091,105094,105096,105098,105100],{"class":30,"line":31},[28,105092,105093],{"class":34},"data.qpos[",[28,105095,93],{"class":38},[28,105097,4931],{"class":34},[28,105099,83],{"class":42},[28,105101,105102],{"class":38}," 2.0\n",[14,105104,105105],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[18,105107,105108],{"className":20,"code":104937,"language":22,"meta":23,"style":23},[25,105109,105110],{"__ignoreMap":23},[28,105111,105112],{"class":30,"line":31},[28,105113,104937],{"class":34},[605,105115,105117],{"id":105116},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105119,105120,105123,105124,105126],{},[25,105121,105122],{},"mujoco.mj_resetData(model, data)"," 会把 ",[25,105125,33878],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[18,105128,105130],{"className":20,"code":105129,"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,105131,105132,105136,105146,105156],{"__ignoreMap":23},[28,105133,105134],{"class":30,"line":31},[28,105135,104920],{"class":34},[28,105137,105138,105141,105143],{"class":30,"line":77},[28,105139,105140],{"class":34},"data.qpos[:] ",[28,105142,83],{"class":42},[28,105144,105145],{"class":34}," random_qpos\n",[28,105147,105148,105151,105153],{"class":30,"line":114},[28,105149,105150],{"class":34},"data.qvel[:] ",[28,105152,83],{"class":42},[28,105154,105155],{"class":38}," 0.0\n",[28,105157,105158],{"class":30,"line":128},[28,105159,104937],{"class":34},[60,105161,101647],{"id":101646},[18,105163,105165],{"className":20,"code":105164,"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,105166,105167,105173,105183,105187,105191,105199,105204,105208,105212,105216,105221,105225,105230,105235,105240,105244,105248,105252,105256,105260,105264,105283,105290,105302,105313,105329,105345,105349,105353,105365,105377,105385,105389,105400,105404,105420,105424,105428,105437,105441,105446,105455,105459,105472,105477,105486,105490,105494,105506],{"__ignoreMap":23},[28,105168,105169,105171],{"class":30,"line":31},[28,105170,536],{"class":42},[28,105172,101695],{"class":34},[28,105174,105175,105177,105179,105181],{"class":30,"line":77},[28,105176,536],{"class":42},[28,105178,31861],{"class":34},[28,105180,542],{"class":42},[28,105182,31866],{"class":34},[28,105184,105185],{"class":30,"line":114},[28,105186,2890],{"emptyLinePlaceholder":562},[28,105188,105189],{"class":30,"line":128},[28,105190,2890],{"emptyLinePlaceholder":562},[28,105192,105193,105195,105197],{"class":30,"line":393},[28,105194,101708],{"class":38},[28,105196,14050],{"class":42},[28,105198,101713],{"class":735},[28,105200,105201],{"class":30,"line":409},[28,105202,105203],{"class":735},"\u003Cmujoco model=\"state_api\">\n",[28,105205,105206],{"class":30,"line":1711},[28,105207,101723],{"class":735},[28,105209,105210],{"class":30,"line":1802},[28,105211,2890],{"emptyLinePlaceholder":562},[28,105213,105214],{"class":30,"line":1808},[28,105215,101732],{"class":735},[28,105217,105218],{"class":30,"line":1820},[28,105219,105220],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[28,105222,105223],{"class":30,"line":2102},[28,105224,2890],{"emptyLinePlaceholder":562},[28,105226,105227],{"class":30,"line":2107},[28,105228,105229],{"class":735},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[28,105231,105232],{"class":30,"line":2113},[28,105233,105234],{"class":735},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[28,105236,105237],{"class":30,"line":2118},[28,105238,105239],{"class":735},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[28,105241,105242],{"class":30,"line":2132},[28,105243,101761],{"class":735},[28,105245,105246],{"class":30,"line":2137},[28,105247,101766],{"class":735},[28,105249,105250],{"class":30,"line":2143},[28,105251,101771],{"class":735},[28,105253,105254],{"class":30,"line":2164},[28,105255,96169],{"class":735},[28,105257,105258],{"class":30,"line":2169},[28,105259,2890],{"emptyLinePlaceholder":562},[28,105261,105262],{"class":30,"line":2183},[28,105263,2890],{"emptyLinePlaceholder":562},[28,105265,105266,105268,105271,105274,105276,105279,105281],{"class":30,"line":2188},[28,105267,32426],{"class":42},[28,105269,105270],{"class":2453}," print_state",[28,105272,105273],{"class":34},"(prefix: ",[28,105275,1790],{"class":38},[28,105277,105278],{"class":34},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,105280,96157],{"class":38},[28,105282,4227],{"class":34},[28,105284,105285,105287],{"class":30,"line":2217},[28,105286,31780],{"class":38},[28,105288,105289],{"class":34},"(prefix)\n",[28,105291,105292,105294,105296,105299],{"class":30,"line":2222},[28,105293,31780],{"class":38},[28,105295,367],{"class":34},[28,105297,105298],{"class":735},"\"  timestep:\"",[28,105300,105301],{"class":34},", model.opt.timestep)\n",[28,105303,105304,105306,105308,105311],{"class":30,"line":2239},[28,105305,31780],{"class":38},[28,105307,367],{"class":34},[28,105309,105310],{"class":735},"\"  time:\"",[28,105312,101872],{"class":34},[28,105314,105315,105317,105319,105322,105325,105327],{"class":30,"line":2244},[28,105316,31780],{"class":38},[28,105318,367],{"class":34},[28,105320,105321],{"class":735},"\"  qpos:\"",[28,105323,105324],{"class":34},", np.round(data.qpos.copy(), ",[28,105326,103],{"class":38},[28,105328,30980],{"class":34},[28,105330,105331,105333,105335,105338,105341,105343],{"class":30,"line":2249},[28,105332,31780],{"class":38},[28,105334,367],{"class":34},[28,105336,105337],{"class":735},"\"  qvel:\"",[28,105339,105340],{"class":34},", np.round(data.qvel.copy(), ",[28,105342,103],{"class":38},[28,105344,30980],{"class":34},[28,105346,105347],{"class":30,"line":2254},[28,105348,2890],{"emptyLinePlaceholder":562},[28,105350,105351],{"class":30,"line":2268},[28,105352,2890],{"emptyLinePlaceholder":562},[28,105354,105355,105357,105359,105361,105363],{"class":30,"line":2273},[28,105356,32426],{"class":42},[28,105358,2463],{"class":2453},[28,105360,101792],{"class":34},[28,105362,96157],{"class":38},[28,105364,4227],{"class":34},[28,105366,105367,105369,105371,105373,105375],{"class":30,"line":3067},[28,105368,101801],{"class":34},[28,105370,83],{"class":42},[28,105372,101806],{"class":34},[28,105374,101708],{"class":38},[28,105376,228],{"class":34},[28,105378,105379,105381,105383],{"class":30,"line":3081},[28,105380,101815],{"class":34},[28,105382,83],{"class":42},[28,105384,101820],{"class":34},[28,105386,105387],{"class":30,"line":3089},[28,105388,2890],{"emptyLinePlaceholder":562},[28,105390,105391,105394,105397],{"class":30,"line":3094},[28,105392,105393],{"class":34},"    print_state(",[28,105395,105396],{"class":735},"\"initial\"",[28,105398,105399],{"class":34},", model, data)\n",[28,105401,105402],{"class":30,"line":3100},[28,105403,2890],{"emptyLinePlaceholder":562},[28,105405,105406,105408,105410,105412,105414,105416,105418],{"class":30,"line":3106},[28,105407,377],{"class":42},[28,105409,101895],{"class":34},[28,105411,55],{"class":42},[28,105413,364],{"class":38},[28,105415,367],{"class":34},[28,105417,1276],{"class":38},[28,105419,372],{"class":34},[28,105421,105422],{"class":30,"line":3111},[28,105423,101910],{"class":34},[28,105425,105426],{"class":30,"line":8436},[28,105427,2890],{"emptyLinePlaceholder":562},[28,105429,105430,105432,105435],{"class":30,"line":8460},[28,105431,105393],{"class":34},[28,105433,105434],{"class":735},"\"after 50 steps\"",[28,105436,105399],{"class":34},[28,105438,105439],{"class":30,"line":8465},[28,105440,2890],{"emptyLinePlaceholder":562},[28,105442,105443],{"class":30,"line":8471},[28,105444,105445],{"class":34},"    mujoco.mj_resetData(model, data)\n",[28,105447,105448,105450,105453],{"class":30,"line":8498},[28,105449,105393],{"class":34},[28,105451,105452],{"class":735},"\"after reset\"",[28,105454,105399],{"class":34},[28,105456,105457],{"class":30,"line":8503},[28,105458,2890],{"emptyLinePlaceholder":562},[28,105460,105461,105464,105466,105468,105470],{"class":30,"line":8509},[28,105462,105463],{"class":34},"    data.qpos[",[28,105465,93],{"class":38},[28,105467,4931],{"class":34},[28,105469,83],{"class":42},[28,105471,105102],{"class":38},[28,105473,105474],{"class":30,"line":8521},[28,105475,105476],{"class":34},"    mujoco.mj_forward(model, data)\n",[28,105478,105479,105481,105484],{"class":30,"line":8533},[28,105480,105393],{"class":34},[28,105482,105483],{"class":735},"\"after manual qpos edit\"",[28,105485,105399],{"class":34},[28,105487,105488],{"class":30,"line":8545},[28,105489,2890],{"emptyLinePlaceholder":562},[28,105491,105492],{"class":30,"line":10202},[28,105493,2890],{"emptyLinePlaceholder":562},[28,105495,105496,105498,105500,105502,105504],{"class":30,"line":10227},[28,105497,2021],{"class":42},[28,105499,31701],{"class":38},[28,105501,101953],{"class":42},[28,105503,101956],{"class":735},[28,105505,4227],{"class":34},[28,105507,105508],{"class":30,"line":10250},[28,105509,101963],{"class":34},[14,105511,103964],{},[18,105513,105515],{"className":24308,"code":105514,"language":24310,"meta":23,"style":23},"touch ch3_python_state.py\n",[25,105516,105517],{"__ignoreMap":23},[28,105518,105519,105521],{"class":30,"line":31},[28,105520,101677],{"class":2453},[28,105522,105523],{"class":735}," ch3_python_state.py\n",[14,105525,102695],{},[18,105527,105529],{"className":24308,"code":105528,"language":24310,"meta":23,"style":23},"python ch3_python_state.py\n",[25,105530,105531],{"__ignoreMap":23},[28,105532,105533,105535],{"class":30,"line":31},[28,105534,22],{"class":2453},[28,105536,105523],{"class":735},[605,105538,101966],{"id":101966},[14,105540,105541],{},"打印状态的函数：",[18,105543,105545],{"className":20,"code":105544,"language":22,"meta":23,"style":23},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[25,105546,105547],{"__ignoreMap":23},[28,105548,105549,105551,105553,105555,105557,105559,105561],{"class":30,"line":31},[28,105550,32426],{"class":42},[28,105552,105270],{"class":2453},[28,105554,105273],{"class":34},[28,105556,1790],{"class":38},[28,105558,105278],{"class":34},[28,105560,96157],{"class":38},[28,105562,4227],{"class":34},[14,105564,105565,105566,105568],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[25,105567,33878],{}," 里发生了什么。",[14,105570,105571],{},"推进 50 步：",[18,105573,105575],{"className":20,"code":105574,"language":22,"meta":23,"style":23},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[25,105576,105577,105593],{"__ignoreMap":23},[28,105578,105579,105581,105583,105585,105587,105589,105591],{"class":30,"line":31},[28,105580,49],{"class":42},[28,105582,101895],{"class":34},[28,105584,55],{"class":42},[28,105586,364],{"class":38},[28,105588,367],{"class":34},[28,105590,1276],{"class":38},[28,105592,372],{"class":34},[28,105594,105595],{"class":30,"line":77},[28,105596,102093],{"class":34},[14,105598,105599,105600,105603,105604,105606],{},"由于 ",[25,105601,105602],{},"timestep=0.01","，所以 50 步后时间约为 ",[25,105605,35806],{}," 秒。",[14,105608,105609],{},"重置：",[18,105611,105612],{"className":20,"code":104920,"language":22,"meta":23,"style":23},[25,105613,105614],{"__ignoreMap":23},[28,105615,105616],{"class":30,"line":31},[28,105617,104920],{"class":34},[14,105619,105620],{},"这会把时间、位置、速度恢复到初始状态。",[14,105622,105623],{},"手动改高度：",[18,105625,105627],{"className":20,"code":105626,"language":22,"meta":23,"style":23},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[25,105628,105629,105641],{"__ignoreMap":23},[28,105630,105631,105633,105635,105637,105639],{"class":30,"line":31},[28,105632,105093],{"class":34},[28,105634,93],{"class":38},[28,105636,4931],{"class":34},[28,105638,83],{"class":42},[28,105640,105102],{"class":38},[28,105642,105643],{"class":30,"line":77},[28,105644,104937],{"class":34},[14,105646,105647,105648,105651,105652,105655],{},"这个例子里 ",[25,105649,105650],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[25,105653,105654],{},"2.0"," 表示把小球放到更高的位置。",[605,105657,102102],{"id":102102},[18,105659,105660],{"className":20,"code":105544,"language":22,"meta":23,"style":23},[25,105661,105662],{"__ignoreMap":23},[28,105663,105664,105666,105668,105670,105672,105674,105676],{"class":30,"line":31},[28,105665,32426],{"class":42},[28,105667,105270],{"class":2453},[28,105669,105273],{"class":34},[28,105671,1790],{"class":38},[28,105673,105278],{"class":34},[28,105675,96157],{"class":38},[28,105677,4227],{"class":34},[14,105679,105680],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[588,105682,105683,105692,105697],{},[591,105684,105685,105688,105689,105691],{},[25,105686,105687],{},"prefix","：一段文字，比如 ",[25,105690,105396],{},"，用来说明现在打印的是哪个阶段。",[591,105693,105694,105696],{},[25,105695,102479],{},"：MuJoCo 模型。",[591,105698,105699,105701],{},[25,105700,33878],{},"：MuJoCo 当前状态。",[14,105703,105704,843,105707,105710],{},[25,105705,105706],{},"prefix: str",[25,105708,105709],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[18,105712,105714],{"className":20,"code":105713,"language":22,"meta":23,"style":23},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[25,105715,105716],{"__ignoreMap":23},[28,105717,105718,105720,105722,105724,105726,105728],{"class":30,"line":31},[28,105719,30898],{"class":38},[28,105721,367],{"class":34},[28,105723,105321],{"class":735},[28,105725,105324],{"class":34},[28,105727,103],{"class":38},[28,105729,30980],{"class":34},[14,105731,105732,105735],{},[25,105733,105734],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[18,105737,105739],{"className":20,"code":105738,"language":22,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[25,105740,105741,105753],{"__ignoreMap":23},[28,105742,105743,105745,105747,105749,105751],{"class":30,"line":31},[28,105744,102028],{"class":34},[28,105746,83],{"class":42},[28,105748,101806],{"class":34},[28,105750,101708],{"class":38},[28,105752,228],{"class":34},[28,105754,105755,105757,105759],{"class":30,"line":77},[28,105756,102052],{"class":34},[28,105758,83],{"class":42},[28,105760,101820],{"class":34},[14,105762,105763],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[18,105765,105767],{"className":20,"code":105766,"language":22,"meta":23,"style":23},"print_state(\"initial\", model, data)\n",[25,105768,105769],{"__ignoreMap":23},[28,105770,105771,105774,105776],{"class":30,"line":31},[28,105772,105773],{"class":34},"print_state(",[28,105775,105396],{"class":735},[28,105777,105399],{"class":34},[14,105779,105780,105781,105784],{},"调用刚才定义的 ",[25,105782,105783],{},"print_state"," 函数，打印初始状态。",[18,105786,105787],{"className":20,"code":105574,"language":22,"meta":23,"style":23},[25,105788,105789,105805],{"__ignoreMap":23},[28,105790,105791,105793,105795,105797,105799,105801,105803],{"class":30,"line":31},[28,105792,49],{"class":42},[28,105794,101895],{"class":34},[28,105796,55],{"class":42},[28,105798,364],{"class":38},[28,105800,367],{"class":34},[28,105802,1276],{"class":38},[28,105804,372],{"class":34},[28,105806,105807],{"class":30,"line":77},[28,105808,102093],{"class":34},[14,105810,105811],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[18,105813,105814],{"className":20,"code":104920,"language":22,"meta":23,"style":23},[25,105815,105816],{"__ignoreMap":23},[28,105817,105818],{"class":30,"line":31},[28,105819,104920],{"class":34},[14,105821,105822,105823,105825,105826,105828],{},"重置 ",[25,105824,33878],{},"。注意它不会重新创建 ",[25,105827,102479],{},"，因为模型结构没有变，只是状态回到初始值。",[18,105830,105831],{"className":20,"code":105086,"language":22,"meta":23,"style":23},[25,105832,105833],{"__ignoreMap":23},[28,105834,105835,105837,105839,105841,105843],{"class":30,"line":31},[28,105836,105093],{"class":34},[28,105838,93],{"class":38},[28,105840,4931],{"class":34},[28,105842,83],{"class":42},[28,105844,105102],{"class":38},[14,105846,105847,105848,843,105851,843,105854,105856],{},"这行是“手动改状态”。在 freejoint 中，",[25,105849,105850],{},"qpos[0]",[25,105852,105853],{},"qpos[1]",[25,105855,105650],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[18,105858,105859],{"className":20,"code":104937,"language":22,"meta":23,"style":23},[25,105860,105861],{"__ignoreMap":23},[28,105862,105863],{"class":30,"line":31},[28,105864,104937],{"class":34},[14,105866,105867,105868,105870,105871,105873],{},"手动改完 ",[25,105869,104424],{}," 后，调用 ",[25,105872,104644],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[60,105875,102710],{"id":102709},[14,105877,105878],{},"你会看到:",[588,105880,105881,105886,105891,105894],{},[591,105882,105883,105884],{},"初始时间为 ",[25,105885,822],{},[591,105887,105888,105889],{},"50 步后时间约为 ",[25,105890,35806],{},[591,105892,105893],{},"reset 后状态恢复",[591,105895,105896,105897,105900,105901],{},"手动修改 ",[25,105898,105899],{},"data.qpos[2]"," 后，小球高度变为 ",[25,105902,105654],{},[14,105904,105905,105907],{},[25,105906,105650],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105909,105910],{},"输出里可以重点看三件事：",[588,105912,105913,105921,105926],{},[591,105914,105915,105917,105918,105920],{},[25,105916,2877],{}," 是否随着 ",[25,105919,101609],{}," 增加。",[591,105922,105923,105925],{},[25,105924,104424],{}," 的 z 坐标是否因为下落而变化。",[591,105927,105928,105930,105931,28871],{},[25,105929,104746],{}," 后时间是否回到 ",[25,105932,822],{},[60,105934,102742],{"id":102741},[588,105936,105937,105943,105949,105955,105958,105967],{},[591,105938,105939,105940,28871],{},"修改 timestep 为 ",[25,105941,105942],{},"0.005",[591,105944,105945,105946,28871],{},"重新运行，检查 50 步后时间是否约为 ",[25,105947,105948],{},"0.25",[591,105950,105951,105952,28871],{},"修改重力为 ",[25,105953,105954],{},"0 0 -1.0",[591,105956,105957],{},"观察小球下降速度是否变慢。",[591,105959,102805,105960,102808,105963,105966],{},[25,105961,105962],{},"data.qpos[2] = 2.0",[25,105964,105965],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[591,105968,105969,105970,105973],{},"注释掉 ",[25,105971,105972],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[60,105975,102847],{"id":102846},[605,105977,105979,105980,105982],{"id":105978},"修改-dataqpos-后位置没有更新","修改 ",[25,105981,101464],{}," 后位置没有更新",[14,105984,102856],{},[18,105986,105987],{"className":20,"code":104937,"language":22,"meta":23,"style":23},[25,105988,105989],{"__ignoreMap":23},[28,105990,105991],{"class":30,"line":31},[28,105992,104937],{"class":34},[605,105994,105995],{"id":105995},"数组维度看不懂",[14,105997,105998],{},"打印模型维度:",[18,106000,106002],{"className":20,"code":106001,"language":22,"meta":23,"style":23},"print(model.nq, model.nv, model.nu)\n",[25,106003,106004],{"__ignoreMap":23},[28,106005,106006,106008],{"class":30,"line":31},[28,106007,30898],{"class":38},[28,106009,106010],{"class":34},"(model.nq, model.nv, model.nu)\n",[768,106012,106013,106021],{},[771,106014,106015],{},[774,106016,106017,106019],{},[777,106018,104968],{"align":24222},[777,106020,101094],{"align":24222},[815,106022,106023,106033,106043],{},[774,106024,106025,106030],{},[820,106026,106027],{"align":24222},[25,106028,106029],{},"nq",[820,106031,106032],{"align":24222},"位置变量数量",[774,106034,106035,106040],{},[820,106036,106037],{"align":24222},[25,106038,106039],{},"nv",[820,106041,106042],{"align":24222},"速度变量数量",[774,106044,106045,106049],{},[820,106046,106047],{"align":24222},[25,106048,102556],{},[820,106050,106051],{"align":24222},"控制输入数量",[605,106053,106055,106056,106058],{"id":106054},"误以为-qpos-一定等于关节数","误以为 ",[25,106057,104424],{}," 一定等于关节数",[14,106060,106061,106062,83007,106064,106066,106067,106069],{},"不是。例如 ",[25,106063,102014],{},[25,106065,104424],{}," 是 7 维，但 ",[25,106068,104754],{}," 是 6 维。",[605,106071,106073,106074,106076],{"id":106072},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[25,106075,104424],{}," 的第几位",[14,106078,106079],{},"初学时可以先打印：",[18,106081,106083],{"className":20,"code":106082,"language":22,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[25,106084,106085,106095,106105,106117],{"__ignoreMap":23},[28,106086,106087,106089,106091,106093],{"class":30,"line":31},[28,106088,30898],{"class":38},[28,106090,367],{"class":34},[28,106092,101833],{"class":735},[28,106094,101836],{"class":34},[28,106096,106097,106099,106101,106103],{"class":30,"line":77},[28,106098,30898],{"class":38},[28,106100,367],{"class":34},[28,106102,101845],{"class":735},[28,106104,101848],{"class":34},[28,106106,106107,106109,106111,106114],{"class":30,"line":114},[28,106108,30898],{"class":38},[28,106110,367],{"class":34},[28,106112,106113],{"class":735},"\"qpos:\"",[28,106115,106116],{"class":34},", data.qpos)\n",[28,106118,106119,106121,106123,106126],{"class":30,"line":128},[28,106120,30898],{"class":38},[28,106122,367],{"class":34},[28,106124,106125],{"class":735},"\"qvel:\"",[28,106127,106128],{"class":34},", data.qvel)\n",[14,106130,106131],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[605,106133,106134],{"id":106134},"仿真结果每次都一样",[14,106136,106137,106138,106140],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[25,106139,104424],{},"、目标点或控制输入。",[60,106142,103001],{"id":103000},[14,106144,106145,106146,25105],{},"Python 控制 MuJoCo 的核心就是读写 ",[25,106147,33878],{},[588,106149,106150,106158,106163,106168],{},[591,106151,106152,106153,101412,106155,106157],{},"用 ",[25,106154,101464],{},[25,106156,101467],{}," 读取状态。",[591,106159,106152,106160,106162],{},[25,106161,101470],{}," 写入控制。",[591,106164,106152,106165,106167],{},[25,106166,101609],{}," 推进时间。",[591,106169,106170,106171,106173],{},"手动改状态后用 ",[25,106172,104644],{}," 刷新派生量。",[14,106175,106176],{},"理解这一章后，就可以进入关节和 actuator 控制。",[547,106178,106179],{},"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":77,"depth":77,"links":106181},[106182,106183,106184,106191,106195,106196,106197,106207],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":106185},[106186,106188,106190],{"id":104949,"depth":114,"text":106187},"qpos、qvel、ctrl 是什么",{"id":105027,"depth":114,"text":106189},"mj_step 和 mj_forward 的区别",{"id":105116,"depth":114,"text":105117},{"id":101646,"depth":77,"text":101647,"children":106192},[106193,106194],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":106198},[106199,106201,106202,106204,106206],{"id":105978,"depth":114,"text":106200},"修改 data.qpos 后位置没有更新",{"id":105995,"depth":114,"text":105995},{"id":106054,"depth":114,"text":106203},"误以为 qpos 一定等于关节数",{"id":106072,"depth":114,"text":106205},"不知道某个元素在 qpos 的第几位",{"id":106134,"depth":114,"text":106134},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104712,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106214,"title":106215,"body":106216,"description":23,"extension":560,"meta":107906,"navigation":562,"path":107907,"seo":107908,"stem":107909,"__hash__":107910},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106217,"toc":107882},[106218,106221,106223,106226,106228,106253,106256,106275,106278,106280,106282,106306,106308,106322,106324,106365,106367,106391,106393,106396,106430,106432,106445,106448,106516,106525,106529,106532,106566,106572,106575,106579,106618,106621,106641,106645,106688,106690,106719,106722,106728,106731,106733,107127,107129,107141,107143,107154,107156,107159,107188,107196,107199,107234,107237,107239,107247,107250,107252,107263,107273,107293,107296,107332,107344,107392,107411,107453,107466,107494,107499,107520,107530,107548,107551,107585,107588,107608,107611,107630,107636,107638,107641,107647,107653,107663,107666,107672,107681,107683,107729,107731,107737,107743,107746,107749,107769,107772,107778,107784,107786,107809,107812,107815,107824,107827,107865,107867,107870,107876,107879],[10,106219,106215],{"id":106220},"_4关节actuator-与力控制",[60,106222,101041],{"id":101040},[14,106224,106225],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106227,104725],{},[588,106229,106230,106236,106241,106245,106250],{},[591,106231,106232,106235],{},[25,106233,106234],{},"hinge"," 关节",[591,106237,106238],{},[25,106239,106240],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[591,106242,106243],{},[25,106244,101470],{},[591,106246,106247],{},[25,106248,106249],{},"ctrlrange",[591,106251,106252],{},"读取关节角和角速度",[14,106254,106255],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[18,106257,106259],{"className":20,"code":106258,"language":22,"meta":23,"style":23},"data.ctrl[0] = ...\n",[25,106260,106261],{"__ignoreMap":23},[28,106262,106263,106266,106268,106270,106272],{"class":30,"line":31},[28,106264,106265],{"class":34},"data.ctrl[",[28,106267,822],{"class":38},[28,106269,4931],{"class":34},[28,106271,83],{"class":42},[28,106273,106274],{"class":38}," ...\n",[14,106276,106277],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[60,106279,101164],{"id":101163},[14,106281,101167],{},[18,106283,106284],{"className":24308,"code":104782,"language":24310,"meta":23,"style":23},[25,106285,106286],{"__ignoreMap":23},[28,106287,106288,106290,106292,106294,106296,106298,106300,106302,106304],{"class":30,"line":31},[28,106289,25063],{"class":2453},[28,106291,26801],{"class":735},[28,106293,24320],{"class":735},[28,106295,26886],{"class":38},[28,106297,104797],{"class":735},[28,106299,101192],{"class":735},[28,106301,102895],{"class":735},[28,106303,101208],{"class":735},[28,106305,104806],{"class":735},[14,106307,103213],{},[18,106309,106310],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},[25,106311,106312],{"__ignoreMap":23},[28,106313,106314,106316,106318,106320],{"class":30,"line":31},[28,106315,24317],{"class":2453},[28,106317,24320],{"class":735},[28,106319,101324],{"class":735},[28,106321,101327],{"class":735},[14,106323,103230],{},[18,106325,106327],{"className":24308,"code":106326,"language":24310,"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,106328,106329,106346,106355],{"__ignoreMap":23},[28,106330,106331,106333,106335,106337,106340,106342,106344],{"class":30,"line":31},[28,106332,30816],{"class":2453},[28,106334,29662],{"class":735},[28,106336,25602],{"class":38},[28,106338,106339],{"class":735}," mujoco-control",[28,106341,101369],{"class":735},[28,106343,101372],{"class":38},[28,106345,101375],{"class":38},[28,106347,106348,106350,106352],{"class":30,"line":77},[28,106349,30816],{"class":2453},[28,106351,101382],{"class":735},[28,106353,106354],{"class":735}," mujoco-control\n",[28,106356,106357,106359,106361,106363],{"class":30,"line":114},[28,106358,24317],{"class":2453},[28,106360,24320],{"class":735},[28,106362,101324],{"class":735},[28,106364,101327],{"class":735},[14,106366,101398],{},[588,106368,106369,106375,106382,106388],{},[591,106370,106371,106374],{},[25,106372,106373],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[591,106376,106377,106379,106380,28871],{},[25,106378,101470],{}," 长度等于 ",[25,106381,102552],{},[591,106383,82699,106384,106387],{},[25,106385,106386],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[591,106389,106390],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[60,106392,101439],{"id":101438},[14,106394,106395],{},"关节决定 body 如何运动:",[18,106397,106399],{"className":53544,"code":106398,"language":53546,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,106400,106401],{"__ignoreMap":23},[28,106402,106403,106405,106407,106409,106411,106414,106416,106418,106420,106423,106425,106428],{"class":30,"line":31},[28,106404,1529],{"class":34},[28,106406,103350],{"class":51777},[28,106408,15406],{"class":2453},[28,106410,83],{"class":34},[28,106412,106413],{"class":735},"\"hinge\"",[28,106415,54301],{"class":2453},[28,106417,83],{"class":34},[28,106419,106413],{"class":735},[28,106421,106422],{"class":2453}," axis",[28,106424,83],{"class":34},[28,106426,106427],{"class":735},"\"0 1 0\"",[28,106429,101538],{"class":34},[14,106431,103446],{},[588,106433,106434,106439,106442],{},[591,106435,106436,106437],{},"名字是 ",[25,106438,106234],{},[591,106440,106441],{},"类型是旋转关节",[591,106443,106444],{},"绕 y 轴旋转",[14,106446,106447],{},"actuator 决定如何施加控制:",[18,106449,106451],{"className":53544,"code":106450,"language":53546,"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,106452,106453,106462,106508],{"__ignoreMap":23},[28,106454,106455,106457,106460],{"class":30,"line":31},[28,106456,1529],{"class":34},[28,106458,106459],{"class":51777},"actuator",[28,106461,51784],{"class":34},[28,106463,106464,106466,106469,106471,106473,106476,106479,106481,106483,106486,106488,106490,106493,106495,106498,106501,106503,106506],{"class":30,"line":77},[28,106465,52621],{"class":34},[28,106467,106468],{"class":51777},"motor",[28,106470,15406],{"class":2453},[28,106472,83],{"class":34},[28,106474,106475],{"class":735},"\"hinge_motor\"",[28,106477,106478],{"class":2453}," joint",[28,106480,83],{"class":34},[28,106482,106413],{"class":735},[28,106484,106485],{"class":2453}," gear",[28,106487,83],{"class":34},[28,106489,4166],{"class":735},[28,106491,106492],{"class":2453}," ctrlrange",[28,106494,83],{"class":34},[28,106496,106497],{"class":735},"\"-2 2\"",[28,106499,106500],{"class":2453}," ctrllimited",[28,106502,83],{"class":34},[28,106504,106505],{"class":735},"\"true\"",[28,106507,101538],{"class":34},[28,106509,106510,106512,106514],{"class":30,"line":114},[28,106511,52262],{"class":34},[28,106513,106459],{"class":51777},[28,106515,51784],{"class":34},[14,106517,106518,106521,106522,28871],{},[25,106519,106520],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[25,106523,106524],{},"[-2, 2]",[605,106526,106528],{"id":106527},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106530,106531],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[768,106533,106534,106544],{},[771,106535,106536],{},[774,106537,106538,106540,106542],{},[777,106539,26240],{"align":24222},[777,106541,103090],{"align":24222},[777,106543,101128],{"align":24222},[815,106545,106546,106556],{},[774,106547,106548,106550,106553],{},[820,106549,103350],{"align":24222},[820,106551,106552],{"align":24222},"定义能怎么动",[820,106554,106555],{"align":24222},"门轴允许门旋转",[774,106557,106558,106560,106563],{},[820,106559,106459],{"align":24222},[820,106561,106562],{"align":24222},"定义怎么施力或控制",[820,106564,106565],{"align":24222},"人推门、马达带动门",[14,106567,106568,106569,106571],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[25,106570,101470],{}," 主动控制它。",[14,106573,106574],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[605,106576,106578],{"id":106577},"hinge-joint","hinge joint",[18,106580,106582],{"className":53544,"code":106581,"language":53546,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106583,106584],{"__ignoreMap":23},[28,106585,106586,106588,106590,106592,106594,106596,106598,106600,106602,106604,106606,106608,106611,106613,106616],{"class":30,"line":31},[28,106587,1529],{"class":34},[28,106589,103350],{"class":51777},[28,106591,15406],{"class":2453},[28,106593,83],{"class":34},[28,106595,106413],{"class":735},[28,106597,54301],{"class":2453},[28,106599,83],{"class":34},[28,106601,106413],{"class":735},[28,106603,106422],{"class":2453},[28,106605,83],{"class":34},[28,106607,106427],{"class":735},[28,106609,106610],{"class":2453}," damping",[28,106612,83],{"class":34},[28,106614,106615],{"class":735},"\"0.1\"",[28,106617,101538],{"class":34},[14,106619,106620],{},"含义：",[588,106622,106623,106629,106635],{},[591,106624,106625,106628],{},[25,106626,106627],{},"type=\"hinge\"","：只能绕一个轴旋转。",[591,106630,106631,106634],{},[25,106632,106633],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[591,106636,106637,106640],{},[25,106638,106639],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[605,106642,106644],{"id":106643},"motor-actuator","motor actuator",[18,106646,106648],{"className":53544,"code":106647,"language":53546,"meta":23,"style":23},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106649,106650],{"__ignoreMap":23},[28,106651,106652,106654,106656,106658,106660,106662,106664,106666,106668,106670,106672,106674,106676,106678,106680,106682,106684,106686],{"class":30,"line":31},[28,106653,1529],{"class":34},[28,106655,106468],{"class":51777},[28,106657,15406],{"class":2453},[28,106659,83],{"class":34},[28,106661,106475],{"class":735},[28,106663,106478],{"class":2453},[28,106665,83],{"class":34},[28,106667,106413],{"class":735},[28,106669,106485],{"class":2453},[28,106671,83],{"class":34},[28,106673,4166],{"class":735},[28,106675,106492],{"class":2453},[28,106677,83],{"class":34},[28,106679,106497],{"class":735},[28,106681,106500],{"class":2453},[28,106683,83],{"class":34},[28,106685,106505],{"class":735},[28,106687,101538],{"class":34},[14,106689,106620],{},[588,106691,106692,106701,106707,106713],{},[591,106693,106694,106697,106698,106700],{},[25,106695,106696],{},"joint=\"hinge\"","：这个电机作用在名为 ",[25,106699,106234],{}," 的关节上。",[591,106702,106703,106706],{},[25,106704,106705],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[591,106708,106709,106712],{},[25,106710,106711],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[591,106714,106715,106718],{},[25,106716,106717],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106720,106721],{},"简单理解：",[18,106723,106726],{"className":106724,"code":106725,"language":5675,"meta":23},[5673],"实际施加效果 ≈ data.ctrl[0] * gear\n",[25,106727,106725],{"__ignoreMap":23},[14,106729,106730],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[60,106732,101647],{"id":101646},[18,106734,106736],{"className":20,"code":106735,"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,106737,106738,106745,106749,106755,106765,106769,106773,106781,106786,106791,106795,106799,106804,106809,106813,106818,106823,106828,106833,106837,106841,106845,106850,106855,106860,106864,106868,106872,106876,106888,106900,106908,106912,106922,106932,106942,106946,106959,106972,106976,106993,107007,107042,107046,107050,107061,107076,107091,107103,107107,107111,107123],{"__ignoreMap":23},[28,106739,106740,106742],{"class":30,"line":31},[28,106741,536],{"class":42},[28,106743,106744],{"class":34}," math\n",[28,106746,106747],{"class":30,"line":77},[28,106748,2890],{"emptyLinePlaceholder":562},[28,106750,106751,106753],{"class":30,"line":114},[28,106752,536],{"class":42},[28,106754,101695],{"class":34},[28,106756,106757,106759,106761,106763],{"class":30,"line":128},[28,106758,536],{"class":42},[28,106760,31861],{"class":34},[28,106762,542],{"class":42},[28,106764,31866],{"class":34},[28,106766,106767],{"class":30,"line":393},[28,106768,2890],{"emptyLinePlaceholder":562},[28,106770,106771],{"class":30,"line":409},[28,106772,2890],{"emptyLinePlaceholder":562},[28,106774,106775,106777,106779],{"class":30,"line":1711},[28,106776,101708],{"class":38},[28,106778,14050],{"class":42},[28,106780,101713],{"class":735},[28,106782,106783],{"class":30,"line":1802},[28,106784,106785],{"class":735},"\u003Cmujoco model=\"one_link_motor\">\n",[28,106787,106788],{"class":30,"line":1808},[28,106789,106790],{"class":735},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[28,106792,106793],{"class":30,"line":1820},[28,106794,2890],{"emptyLinePlaceholder":562},[28,106796,106797],{"class":30,"line":2102},[28,106798,101732],{"class":735},[28,106800,106801],{"class":30,"line":2107},[28,106802,106803],{"class":735},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[28,106805,106806],{"class":30,"line":2113},[28,106807,106808],{"class":735},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[28,106810,106811],{"class":30,"line":2118},[28,106812,2890],{"emptyLinePlaceholder":562},[28,106814,106815],{"class":30,"line":2132},[28,106816,106817],{"class":735},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[28,106819,106820],{"class":30,"line":2137},[28,106821,106822],{"class":735},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,106824,106825],{"class":30,"line":2143},[28,106826,106827],{"class":735},"        \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,106829,106830],{"class":30,"line":2164},[28,106831,106832],{"class":735},"      \u003C\u002Fbody>\n",[28,106834,106835],{"class":30,"line":2169},[28,106836,101761],{"class":735},[28,106838,106839],{"class":30,"line":2183},[28,106840,101766],{"class":735},[28,106842,106843],{"class":30,"line":2188},[28,106844,2890],{"emptyLinePlaceholder":562},[28,106846,106847],{"class":30,"line":2217},[28,106848,106849],{"class":735},"  \u003Cactuator>\n",[28,106851,106852],{"class":30,"line":2222},[28,106853,106854],{"class":735},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[28,106856,106857],{"class":30,"line":2239},[28,106858,106859],{"class":735},"  \u003C\u002Factuator>\n",[28,106861,106862],{"class":30,"line":2244},[28,106863,101771],{"class":735},[28,106865,106866],{"class":30,"line":2249},[28,106867,96169],{"class":735},[28,106869,106870],{"class":30,"line":2254},[28,106871,2890],{"emptyLinePlaceholder":562},[28,106873,106874],{"class":30,"line":2268},[28,106875,2890],{"emptyLinePlaceholder":562},[28,106877,106878,106880,106882,106884,106886],{"class":30,"line":2273},[28,106879,32426],{"class":42},[28,106881,2463],{"class":2453},[28,106883,101792],{"class":34},[28,106885,96157],{"class":38},[28,106887,4227],{"class":34},[28,106889,106890,106892,106894,106896,106898],{"class":30,"line":3067},[28,106891,101801],{"class":34},[28,106893,83],{"class":42},[28,106895,101806],{"class":34},[28,106897,101708],{"class":38},[28,106899,228],{"class":34},[28,106901,106902,106904,106906],{"class":30,"line":3081},[28,106903,101815],{"class":34},[28,106905,83],{"class":42},[28,106907,101820],{"class":34},[28,106909,106910],{"class":30,"line":3089},[28,106911,2890],{"emptyLinePlaceholder":562},[28,106913,106914,106916,106918,106920],{"class":30,"line":3094},[28,106915,31780],{"class":38},[28,106917,367],{"class":34},[28,106919,101833],{"class":735},[28,106921,101836],{"class":34},[28,106923,106924,106926,106928,106930],{"class":30,"line":3100},[28,106925,31780],{"class":38},[28,106927,367],{"class":34},[28,106929,101845],{"class":735},[28,106931,101848],{"class":34},[28,106933,106934,106936,106938,106940],{"class":30,"line":3106},[28,106935,31780],{"class":38},[28,106937,367],{"class":34},[28,106939,101857],{"class":735},[28,106941,101860],{"class":34},[28,106943,106944],{"class":30,"line":3111},[28,106945,2890],{"emptyLinePlaceholder":562},[28,106947,106948,106950,106953,106955,106957],{"class":30,"line":8436},[28,106949,3590],{"class":42},[28,106951,106952],{"class":34}," model.nu ",[28,106954,21434],{"class":42},[28,106956,25605],{"class":38},[28,106958,4227],{"class":34},[28,106960,106961,106963,106965,106967,106970],{"class":30,"line":8460},[28,106962,103826],{"class":42},[28,106964,103829],{"class":38},[28,106966,367],{"class":34},[28,106968,106969],{"class":735},"\"expected exactly one actuator\"",[28,106971,228],{"class":34},[28,106973,106974],{"class":30,"line":8465},[28,106975,2890],{"emptyLinePlaceholder":562},[28,106977,106978,106980,106982,106984,106986,106988,106991],{"class":30,"line":8471},[28,106979,377],{"class":42},[28,106981,32095],{"class":34},[28,106983,55],{"class":42},[28,106985,364],{"class":38},[28,106987,367],{"class":34},[28,106989,106990],{"class":38},"2000",[28,106992,372],{"class":34},[28,106994,106995,106998,107000,107002,107004],{"class":30,"line":8498},[28,106996,106997],{"class":34},"        t ",[28,106999,83],{"class":42},[28,107001,32095],{"class":34},[28,107003,256],{"class":42},[28,107005,107006],{"class":34}," model.opt.timestep\n",[28,107008,107009,107012,107014,107016,107018,107021,107023,107026,107028,107030,107033,107035,107037,107039],{"class":30,"line":8503},[28,107010,107011],{"class":34},"        data.ctrl[",[28,107013,822],{"class":38},[28,107015,4931],{"class":34},[28,107017,83],{"class":42},[28,107019,107020],{"class":38}," 1.5",[28,107022,7006],{"class":42},[28,107024,107025],{"class":34}," math.sin(",[28,107027,105654],{"class":38},[28,107029,7006],{"class":42},[28,107031,107032],{"class":34}," math.pi ",[28,107034,256],{"class":42},[28,107036,62344],{"class":38},[28,107038,7006],{"class":42},[28,107040,107041],{"class":34}," t)\n",[28,107043,107044],{"class":30,"line":8509},[28,107045,101910],{"class":34},[28,107047,107048],{"class":30,"line":8521},[28,107049,2890],{"emptyLinePlaceholder":562},[28,107051,107052,107054,107056,107059],{"class":30,"line":8533},[28,107053,31780],{"class":38},[28,107055,367],{"class":34},[28,107057,107058],{"class":735},"\"time:\"",[28,107060,101872],{"class":34},[28,107062,107063,107065,107067,107070,107072,107074],{"class":30,"line":8545},[28,107064,31780],{"class":38},[28,107066,367],{"class":34},[28,107068,107069],{"class":735},"\"joint qpos:\"",[28,107071,105324],{"class":34},[28,107073,103],{"class":38},[28,107075,30980],{"class":34},[28,107077,107078,107080,107082,107085,107087,107089],{"class":30,"line":10202},[28,107079,31780],{"class":38},[28,107081,367],{"class":34},[28,107083,107084],{"class":735},"\"joint qvel:\"",[28,107086,105340],{"class":34},[28,107088,103],{"class":38},[28,107090,30980],{"class":34},[28,107092,107093,107095,107097,107100],{"class":30,"line":10227},[28,107094,31780],{"class":38},[28,107096,367],{"class":34},[28,107098,107099],{"class":735},"\"last ctrl:\"",[28,107101,107102],{"class":34},", data.ctrl.copy())\n",[28,107104,107105],{"class":30,"line":10250},[28,107106,2890],{"emptyLinePlaceholder":562},[28,107108,107109],{"class":30,"line":10274},[28,107110,2890],{"emptyLinePlaceholder":562},[28,107112,107113,107115,107117,107119,107121],{"class":30,"line":10279},[28,107114,2021],{"class":42},[28,107116,31701],{"class":38},[28,107118,101953],{"class":42},[28,107120,101956],{"class":735},[28,107122,4227],{"class":34},[28,107124,107125],{"class":30,"line":10284},[28,107126,101963],{"class":34},[14,107128,103964],{},[18,107130,107132],{"className":24308,"code":107131,"language":24310,"meta":23,"style":23},"touch ch4_joint_motor.py\n",[25,107133,107134],{"__ignoreMap":23},[28,107135,107136,107138],{"class":30,"line":31},[28,107137,101677],{"class":2453},[28,107139,107140],{"class":735}," ch4_joint_motor.py\n",[14,107142,102695],{},[18,107144,107146],{"className":24308,"code":107145,"language":24310,"meta":23,"style":23},"python ch4_joint_motor.py\n",[25,107147,107148],{"__ignoreMap":23},[28,107149,107150,107152],{"class":30,"line":31},[28,107151,22],{"class":2453},[28,107153,107140],{"class":735},[605,107155,101966],{"id":101966},[14,107157,107158],{},"检查 actuator 数量：",[18,107160,107162],{"className":20,"code":107161,"language":22,"meta":23,"style":23},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[25,107163,107164,107176],{"__ignoreMap":23},[28,107165,107166,107168,107170,107172,107174],{"class":30,"line":31},[28,107167,2021],{"class":42},[28,107169,106952],{"class":34},[28,107171,21434],{"class":42},[28,107173,25605],{"class":38},[28,107175,4227],{"class":34},[28,107177,107178,107180,107182,107184,107186],{"class":30,"line":77},[28,107179,104289],{"class":42},[28,107181,103829],{"class":38},[28,107183,367],{"class":34},[28,107185,106969],{"class":735},[28,107187,228],{"class":34},[14,107189,107190,107192,107193,107195],{},[25,107191,102552],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[25,107194,101470],{}," 长度应该是 1。",[14,107197,107198],{},"产生正弦控制信号：",[18,107200,107202],{"className":20,"code":107201,"language":22,"meta":23,"style":23},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[25,107203,107204],{"__ignoreMap":23},[28,107205,107206,107208,107210,107212,107214,107216,107218,107220,107222,107224,107226,107228,107230,107232],{"class":30,"line":31},[28,107207,106265],{"class":34},[28,107209,822],{"class":38},[28,107211,4931],{"class":34},[28,107213,83],{"class":42},[28,107215,107020],{"class":38},[28,107217,7006],{"class":42},[28,107219,107025],{"class":34},[28,107221,105654],{"class":38},[28,107223,7006],{"class":42},[28,107225,107032],{"class":34},[28,107227,256],{"class":42},[28,107229,62344],{"class":38},[28,107231,7006],{"class":42},[28,107233,107041],{"class":34},[14,107235,107236],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107238,102067],{},[18,107240,107241],{"className":20,"code":104899,"language":22,"meta":23,"style":23},[25,107242,107243],{"__ignoreMap":23},[28,107244,107245],{"class":30,"line":31},[28,107246,104899],{"class":34},[14,107248,107249],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[605,107251,102102],{"id":102102},[18,107253,107255],{"className":20,"code":107254,"language":22,"meta":23,"style":23},"import math\n",[25,107256,107257],{"__ignoreMap":23},[28,107258,107259,107261],{"class":30,"line":31},[28,107260,536],{"class":42},[28,107262,106744],{"class":34},[14,107264,107265,107266,101412,107269,107272],{},"导入 Python 标准库里的数学模块。后面要用 ",[25,107267,107268],{},"math.sin",[25,107270,107271],{},"math.pi"," 生成周期变化的控制信号。",[18,107274,107275],{"className":20,"code":104080,"language":22,"meta":23,"style":23},[25,107276,107277,107283],{"__ignoreMap":23},[28,107278,107279,107281],{"class":30,"line":31},[28,107280,536],{"class":42},[28,107282,101695],{"class":34},[28,107284,107285,107287,107289,107291],{"class":30,"line":77},[28,107286,536],{"class":42},[28,107288,31861],{"class":34},[28,107290,542],{"class":42},[28,107292,31866],{"class":34},[14,107294,107295],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[18,107297,107298],{"className":53544,"code":106581,"language":53546,"meta":23,"style":23},[25,107299,107300],{"__ignoreMap":23},[28,107301,107302,107304,107306,107308,107310,107312,107314,107316,107318,107320,107322,107324,107326,107328,107330],{"class":30,"line":31},[28,107303,1529],{"class":34},[28,107305,103350],{"class":51777},[28,107307,15406],{"class":2453},[28,107309,83],{"class":34},[28,107311,106413],{"class":735},[28,107313,54301],{"class":2453},[28,107315,83],{"class":34},[28,107317,106413],{"class":735},[28,107319,106422],{"class":2453},[28,107321,83],{"class":34},[28,107323,106427],{"class":735},[28,107325,106610],{"class":2453},[28,107327,83],{"class":34},[28,107329,106615],{"class":735},[28,107331,101538],{"class":34},[14,107333,107334,107335,107337,107338,107340,107341,107343],{},"这行定义关节。",[25,107336,106234],{}," 表示旋转关节。",[25,107339,106633],{}," 表示绕 y 轴旋转。",[25,107342,106639],{}," 表示有一点阻尼，运动不会完全无损耗。",[18,107345,107347],{"className":53544,"code":107346,"language":53546,"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,107348,107349],{"__ignoreMap":23},[28,107350,107351,107353,107355,107357,107359,107362,107364,107366,107369,107372,107374,107377,107379,107381,107383,107385,107387,107390],{"class":30,"line":31},[28,107352,1529],{"class":34},[28,107354,101514],{"class":51777},[28,107356,15406],{"class":2453},[28,107358,83],{"class":34},[28,107360,107361],{"class":735},"\"link_geom\"",[28,107363,54301],{"class":2453},[28,107365,83],{"class":34},[28,107367,107368],{"class":735},"\"capsule\"",[28,107370,107371],{"class":2453}," fromto",[28,107373,83],{"class":34},[28,107375,107376],{"class":735},"\"0 0 0 0 0 0.5\"",[28,107378,101530],{"class":2453},[28,107380,83],{"class":34},[28,107382,104172],{"class":735},[28,107384,102395],{"class":2453},[28,107386,83],{"class":34},[28,107388,107389],{"class":735},"\"0.5\"",[28,107391,101538],{"class":34},[14,107393,107394,107395,107397,107398,107400,107401,107404,107405,28871,107408,107410],{},"这行定义摆杆的形状。",[25,107396,103559],{}," 是胶囊体，适合表示杆子。",[25,107399,103570],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[25,107402,107403],{},"(0,0,0)"," 延伸到 ",[25,107406,107407],{},"(0,0,0.5)",[25,107409,103564],{}," 是半径。",[18,107412,107413],{"className":53544,"code":106647,"language":53546,"meta":23,"style":23},[25,107414,107415],{"__ignoreMap":23},[28,107416,107417,107419,107421,107423,107425,107427,107429,107431,107433,107435,107437,107439,107441,107443,107445,107447,107449,107451],{"class":30,"line":31},[28,107418,1529],{"class":34},[28,107420,106468],{"class":51777},[28,107422,15406],{"class":2453},[28,107424,83],{"class":34},[28,107426,106475],{"class":735},[28,107428,106478],{"class":2453},[28,107430,83],{"class":34},[28,107432,106413],{"class":735},[28,107434,106485],{"class":2453},[28,107436,83],{"class":34},[28,107438,4166],{"class":735},[28,107440,106492],{"class":2453},[28,107442,83],{"class":34},[28,107444,106497],{"class":735},[28,107446,106500],{"class":2453},[28,107448,83],{"class":34},[28,107450,106505],{"class":735},[28,107452,101538],{"class":34},[14,107454,107455,107456,107458,107459,107462,107463,107465],{},"这行定义电机。它作用在 ",[25,107457,106234],{}," 关节上。",[25,107460,107461],{},"gear"," 可以理解成放大倍数。",[25,107464,106249],{}," 限制控制输入范围。",[18,107467,107468],{"className":20,"code":107161,"language":22,"meta":23,"style":23},[25,107469,107470,107482],{"__ignoreMap":23},[28,107471,107472,107474,107476,107478,107480],{"class":30,"line":31},[28,107473,2021],{"class":42},[28,107475,106952],{"class":34},[28,107477,21434],{"class":42},[28,107479,25605],{"class":38},[28,107481,4227],{"class":34},[28,107483,107484,107486,107488,107490,107492],{"class":30,"line":77},[28,107485,104289],{"class":42},[28,107487,103829],{"class":38},[28,107489,367],{"class":34},[28,107491,106969],{"class":735},[28,107493,228],{"class":34},[14,107495,107496,107498],{},[25,107497,102552],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[18,107500,107502],{"className":20,"code":107501,"language":22,"meta":23,"style":23},"for step in range(2000):\n",[25,107503,107504],{"__ignoreMap":23},[28,107505,107506,107508,107510,107512,107514,107516,107518],{"class":30,"line":31},[28,107507,49],{"class":42},[28,107509,32095],{"class":34},[28,107511,55],{"class":42},[28,107513,364],{"class":38},[28,107515,367],{"class":34},[28,107517,106990],{"class":38},[28,107519,372],{"class":34},[14,107521,107522,107523,107525,107526,107529],{},"循环 2000 步。这里没有用 ",[25,107524,1611],{},"，而是用 ",[25,107527,107528],{},"step","，因为后面要用当前步数计算时间。",[18,107531,107533],{"className":20,"code":107532,"language":22,"meta":23,"style":23},"t = step * model.opt.timestep\n",[25,107534,107535],{"__ignoreMap":23},[28,107536,107537,107540,107542,107544,107546],{"class":30,"line":31},[28,107538,107539],{"class":34},"t ",[28,107541,83],{"class":42},[28,107543,32095],{"class":34},[28,107545,256],{"class":42},[28,107547,107006],{"class":34},[14,107549,107550],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[18,107552,107553],{"className":20,"code":107201,"language":22,"meta":23,"style":23},[25,107554,107555],{"__ignoreMap":23},[28,107556,107557,107559,107561,107563,107565,107567,107569,107571,107573,107575,107577,107579,107581,107583],{"class":30,"line":31},[28,107558,106265],{"class":34},[28,107560,822],{"class":38},[28,107562,4931],{"class":34},[28,107564,83],{"class":42},[28,107566,107020],{"class":38},[28,107568,7006],{"class":42},[28,107570,107025],{"class":34},[28,107572,105654],{"class":38},[28,107574,7006],{"class":42},[28,107576,107032],{"class":34},[28,107578,256],{"class":42},[28,107580,62344],{"class":38},[28,107582,7006],{"class":42},[28,107584,107041],{"class":34},[14,107586,107587],{},"这行给电机输入一个正弦波。拆开看：",[588,107589,107590,107596,107602],{},[591,107591,107592,107595],{},[25,107593,107594],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[591,107597,107598,107601],{},[25,107599,107600],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[591,107603,107604,107607],{},[25,107605,107606],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107609,107610],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[18,107612,107614],{"className":20,"code":107613,"language":22,"meta":23,"style":23},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[25,107615,107616],{"__ignoreMap":23},[28,107617,107618,107620,107622,107624,107626,107628],{"class":30,"line":31},[28,107619,30898],{"class":38},[28,107621,367],{"class":34},[28,107623,107069],{"class":735},[28,107625,105324],{"class":34},[28,107627,103],{"class":38},[28,107629,30980],{"class":34},[14,107631,107632,107633,107635],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[25,107634,101464],{}," 只有一个数。",[60,107637,102710],{"id":102709},[14,107639,107640],{},"输出类似:",[18,107642,107645],{"className":107643,"code":107644,"language":5675,"meta":23},[5673],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[25,107646,107644],{"__ignoreMap":23},[14,107648,107649,107650,107652],{},"这里 ",[25,107651,106520],{}," 是电机输入。",[14,107654,107655,107658,107659,107662],{},[25,107656,107657],{},"joint qpos"," 是关节角度，单位通常是弧度。",[25,107660,107661],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107664,107665],{},"角度单位提示：",[18,107667,107670],{"className":107668,"code":107669,"language":5675,"meta":23},[5673],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[25,107671,107669],{"__ignoreMap":23},[14,107673,107674,107675,107677,107678,107680],{},"如果你看到 ",[25,107676,104424],{}," 是 ",[25,107679,35806],{},"，大约就是 28.6 度。",[60,107682,102742],{"id":102741},[588,107684,107685,107692,107695,107702,107705,107713,107721],{},[591,107686,102805,107687,102808,107689,28871],{},[25,107688,106705],{},[25,107690,107691],{},"gear=\"5\"",[591,107693,107694],{},"重新运行，观察关节运动是否更剧烈。",[591,107696,102805,107697,102808,107699,28871],{},[25,107698,106249],{},[25,107700,107701],{},"-0.2 0.2",[591,107703,107704],{},"重新运行，观察控制能力是否变弱。",[591,107706,107707,107708,107710,107711,28871],{},"去掉 actuator，确认 ",[25,107709,102552],{}," 变成 ",[25,107712,822],{},[591,107714,102805,107715,102808,107717,107720],{},[25,107716,106639],{},[25,107718,107719],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[591,107722,102805,107723,102808,107725,107728],{},[25,107724,106633],{},[25,107726,107727],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[60,107730,102847],{"id":102846},[605,107732,107734],{"id":107733},"indexerror-index-0-is-out-of-bounds",[25,107735,107736],{},"IndexError: index 0 is out of bounds",[14,107738,107739,107740,107742],{},"原因是 ",[25,107741,106386],{},"，没有 actuator。",[605,107744,107745],{"id":107745},"关节几乎不动",[14,107747,107748],{},"可能原因:",[588,107750,107751,107756,107760,107766],{},[591,107752,107753,107755],{},[25,107754,107461],{}," 太小",[591,107757,107758,107755],{},[25,107759,106249],{},[591,107761,107762,107765],{},[25,107763,107764],{},"damping"," 太大",[591,107767,107768],{},"重力方向导致运动不明显",[605,107770,107771],{"id":107771},"模型编译失败",[14,107773,107774,107775,107777],{},"检查 actuator 引用的 ",[25,107776,106696],{}," 是否存在，joint 名称是否拼写一致。",[605,107779,107781,107783],{"id":107780},"datactrl0-写了但没有效果",[25,107782,106520],{}," 写了但没有效果",[14,107785,102969],{},[588,107787,107788,107793,107796,107801,107806],{},[591,107789,107790,107792],{},[25,107791,102552],{}," 是否大于 0。",[591,107794,107795],{},"motor 是否引用了正确 joint。",[591,107797,107798,107800],{},[25,107799,107461],{}," 是否太小。",[591,107802,107803,107805],{},[25,107804,106249],{}," 是否把输入限制得太小。",[591,107807,107808],{},"body 是否真的有可动 joint。",[605,107810,107811],{"id":107811},"控制输入超过范围会怎样",[14,107813,107814],{},"如果设置了：",[18,107816,107818],{"className":53544,"code":107817,"language":53546,"meta":23,"style":23},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[25,107819,107820],{"__ignoreMap":23},[28,107821,107822],{"class":30,"line":31},[28,107823,107817],{"class":34},[14,107825,107826],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[18,107828,107830],{"className":20,"code":107829,"language":22,"meta":23,"style":23},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[25,107831,107832,107852],{"__ignoreMap":23},[28,107833,107834,107837,107839,107842,107844,107846,107848,107850],{"class":30,"line":31},[28,107835,107836],{"class":34},"action ",[28,107838,83],{"class":42},[28,107840,107841],{"class":34}," np.clip(action, ",[28,107843,445],{"class":42},[28,107845,105654],{"class":38},[28,107847,12921],{"class":34},[28,107849,105654],{"class":38},[28,107851,228],{"class":34},[28,107853,107854,107856,107858,107860,107862],{"class":30,"line":77},[28,107855,106265],{"class":34},[28,107857,822],{"class":38},[28,107859,4931],{"class":34},[28,107861,83],{"class":42},[28,107863,107864],{"class":34}," action\n",[60,107866,103001],{"id":103000},[14,107868,107869],{},"这一章建立了控制任务的基本形式：",[18,107871,107874],{"className":107872,"code":107873,"language":5675,"meta":23},[5673],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[25,107875,107873],{"__ignoreMap":23},[14,107877,107878],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[547,107880,107881],{},"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":77,"depth":77,"links":107883},[107884,107885,107886,107891,107895,107896,107897,107905],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":107887},[107888,107889,107890],{"id":106527,"depth":114,"text":106528},{"id":106577,"depth":114,"text":106578},{"id":106643,"depth":114,"text":106644},{"id":101646,"depth":77,"text":101647,"children":107892},[107893,107894],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":107898},[107899,107900,107901,107902,107904],{"id":107733,"depth":114,"text":107736},{"id":107745,"depth":114,"text":107745},{"id":107771,"depth":114,"text":107771},{"id":107780,"depth":114,"text":107903},"data.ctrl[0] 写了但没有效果",{"id":107811,"depth":114,"text":107811},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106215,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107912,"title":107913,"body":107914,"description":23,"extension":560,"meta":109823,"navigation":562,"path":109824,"seo":109825,"stem":109826,"__hash__":109827},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107915,"toc":109799},[107916,107919,107921,107924,107932,107935,107952,107955,107980,107983,108029,108031,108033,108088,108090,108109,108111,108154,108157,108174,108177,108193,108203,108210,108212,108215,108218,108252,108255,108303,108307,108310,108324,108333,108337,108340,108365,108368,108372,108385,108388,108394,108397,108412,108414,108417,108677,108679,108691,108694,109006,109008,109020,109022,109025,109040,109045,109048,109070,109073,109076,109110,109113,109117,109128,109131,109148,109151,109165,109172,109192,109199,109213,109216,109228,109243,109263,109266,109288,109291,109295,109310,109321,109336,109339,109369,109385,109414,109422,109446,109449,109467,109477,109489,109496,109505,109511,109520,109523,109525,109534,109537,109552,109554,109557,109568,109571,109582,109585,109603,109605,109622,109625,109653,109655,109659,109662,109692,109698,109701,109705,109713,109716,109718,109739,109742,109745,109761,109764,109780,109782,109785,109796],[10,107917,107913],{"id":107918},"_5viewer-可视化与-renderer-离屏渲染",[60,107920,101041],{"id":101040},[14,107922,107923],{},"本章掌握两类可视化方式:",[588,107925,107926,107929],{},[591,107927,107928],{},"交互式 viewer: 适合人工观察仿真",[591,107930,107931],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107933,107934],{},"使用官方接口:",[18,107936,107938],{"className":20,"code":107937,"language":22,"meta":23,"style":23},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[25,107939,107940,107947],{"__ignoreMap":23},[28,107941,107942,107944],{"class":30,"line":31},[28,107943,536],{"class":42},[28,107945,107946],{"class":34}," mujoco.viewer\n",[28,107948,107949],{"class":30,"line":77},[28,107950,107951],{"class":34},"mujoco.viewer.launch_passive(model, data)\n",[14,107953,107954],{},"以及:",[18,107956,107958],{"className":20,"code":107957,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[25,107959,107960,107970],{"__ignoreMap":23},[28,107961,107962,107965,107967],{"class":30,"line":31},[28,107963,107964],{"class":34},"renderer ",[28,107966,83],{"class":42},[28,107968,107969],{"class":34}," mujoco.Renderer(model)\n",[28,107971,107972,107975,107977],{"class":30,"line":77},[28,107973,107974],{"class":34},"image ",[28,107976,83],{"class":42},[28,107978,107979],{"class":34}," renderer.render()\n",[14,107981,107982],{},"新手建议先理解二者区别：",[768,107984,107985,108001],{},[771,107986,107987],{},[774,107988,107989,107992,107995,107998],{},[777,107990,107991],{"align":24222},"工具",[777,107993,107994],{"align":24222},"用途",[777,107996,107997],{"align":24222},"是否打开窗口",[777,107999,108000],{"align":24222},"常见场景",[815,108002,108003,108016],{},[774,108004,108005,108008,108011,108013],{},[820,108006,108007],{"align":24222},"Viewer",[820,108009,108010],{"align":24222},"人眼实时观察仿真",[820,108012,105059],{"align":24222},[820,108014,108015],{"align":24222},"调试模型、看控制效果",[774,108017,108018,108021,108024,108026],{},[820,108019,108020],{"align":24222},"Renderer",[820,108022,108023],{"align":24222},"生成图像数组",[820,108025,105072],{"align":24222},[820,108027,108028],{"align":24222},"保存图片、训练视觉策略、服务器批量采集",[60,108030,101164],{"id":101163},[14,108032,101167],{},[18,108034,108036],{"className":24308,"code":108035,"language":24310,"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,108037,108038,108050,108060,108068,108076],{"__ignoreMap":23},[28,108039,108040,108042,108044,108046,108048],{"class":30,"line":31},[28,108041,25063],{"class":2453},[28,108043,26801],{"class":735},[28,108045,24320],{"class":735},[28,108047,26886],{"class":38},[28,108049,25165],{"class":38},[28,108051,108052,108054,108056,108058],{"class":30,"line":77},[28,108053,101202],{"class":735},[28,108055,101205],{"class":735},[28,108057,101208],{"class":735},[28,108059,25165],{"class":38},[28,108061,108062,108064,108066],{"class":30,"line":114},[28,108063,101215],{"class":735},[28,108065,101218],{"class":735},[28,108067,25165],{"class":38},[28,108069,108070,108072,108074],{"class":30,"line":128},[28,108071,101225],{"class":735},[28,108073,101228],{"class":735},[28,108075,25165],{"class":38},[28,108077,108078,108080,108082,108084,108086],{"class":30,"line":393},[28,108079,101235],{"class":735},[28,108081,101238],{"class":735},[28,108083,101241],{"class":735},[28,108085,101244],{"class":735},[28,108087,102910],{"class":735},[14,108089,103213],{},[18,108091,108093],{"className":24308,"code":108092,"language":24310,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy pillow\n",[25,108094,108095],{"__ignoreMap":23},[28,108096,108097,108099,108101,108103,108106],{"class":30,"line":31},[28,108098,24317],{"class":2453},[28,108100,24320],{"class":735},[28,108102,101324],{"class":735},[28,108104,108105],{"class":735}," numpy",[28,108107,108108],{"class":735}," pillow\n",[14,108110,103230],{},[18,108112,108114],{"className":24308,"code":108113,"language":24310,"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,108115,108116,108133,108142],{"__ignoreMap":23},[28,108117,108118,108120,108122,108124,108127,108129,108131],{"class":30,"line":31},[28,108119,30816],{"class":2453},[28,108121,29662],{"class":735},[28,108123,25602],{"class":38},[28,108125,108126],{"class":735}," mujoco-render",[28,108128,101369],{"class":735},[28,108130,101372],{"class":38},[28,108132,101375],{"class":38},[28,108134,108135,108137,108139],{"class":30,"line":77},[28,108136,30816],{"class":2453},[28,108138,101382],{"class":735},[28,108140,108141],{"class":735}," mujoco-render\n",[28,108143,108144,108146,108148,108150,108152],{"class":30,"line":114},[28,108145,24317],{"class":2453},[28,108147,24320],{"class":735},[28,108149,101324],{"class":735},[28,108151,108105],{"class":735},[28,108153,108108],{"class":735},[14,108155,108156],{},"离屏渲染后端:",[18,108158,108160],{"className":24308,"code":108159,"language":24310,"meta":23,"style":23},"export MUJOCO_GL=egl\n",[25,108161,108162],{"__ignoreMap":23},[28,108163,108164,108166,108169,108171],{"class":30,"line":31},[28,108165,25529],{"class":42},[28,108167,108168],{"class":34}," MUJOCO_GL",[28,108170,83],{"class":42},[28,108172,108173],{"class":34},"egl\n",[14,108175,108176],{},"或:",[18,108178,108180],{"className":24308,"code":108179,"language":24310,"meta":23,"style":23},"export MUJOCO_GL=osmesa\n",[25,108181,108182],{"__ignoreMap":23},[28,108183,108184,108186,108188,108190],{"class":30,"line":31},[28,108185,25529],{"class":42},[28,108187,108168],{"class":34},[28,108189,83],{"class":42},[28,108191,108192],{"class":34},"osmesa\n",[14,108194,108195,108196,108199,108200,28871],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[25,108197,108198],{},"egl"," 失败，再尝试 ",[25,108201,108202],{},"osmesa",[14,108204,108205,108206,108209],{},"如果你在本机桌面环境运行，通常先不要设置 ",[25,108207,108208],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[60,108211,101439],{"id":101438},[14,108213,108214],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108216,108217],{},"典型 viewer 流程:",[18,108219,108221],{"className":20,"code":108220,"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,108222,108223,108236,108243,108247],{"__ignoreMap":23},[28,108224,108225,108228,108231,108233],{"class":30,"line":31},[28,108226,108227],{"class":42},"with",[28,108229,108230],{"class":34}," mujoco.viewer.launch_passive(model, data) ",[28,108232,542],{"class":42},[28,108234,108235],{"class":34}," viewer:\n",[28,108237,108238,108240],{"class":30,"line":77},[28,108239,2741],{"class":42},[28,108241,108242],{"class":34}," viewer.is_running():\n",[28,108244,108245],{"class":30,"line":114},[28,108246,101910],{"class":34},[28,108248,108249],{"class":30,"line":128},[28,108250,108251],{"class":34},"        viewer.sync()\n",[14,108253,108254],{},"典型 renderer 流程:",[18,108256,108258],{"className":20,"code":108257,"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,108259,108260,108286,108290,108295],{"__ignoreMap":23},[28,108261,108262,108264,108266,108269,108271,108273,108275,108277,108279,108281,108284],{"class":30,"line":31},[28,108263,107964],{"class":34},[28,108265,83],{"class":42},[28,108267,108268],{"class":34}," mujoco.Renderer(model, ",[28,108270,25468],{"class":5704},[28,108272,83],{"class":42},[28,108274,42819],{"class":38},[28,108276,12921],{"class":34},[28,108278,25464],{"class":5704},[28,108280,83],{"class":42},[28,108282,108283],{"class":38},"640",[28,108285,228],{"class":34},[28,108287,108288],{"class":30,"line":77},[28,108289,104899],{"class":34},[28,108291,108292],{"class":30,"line":114},[28,108293,108294],{"class":34},"renderer.update_scene(data)\n",[28,108296,108297,108299,108301],{"class":30,"line":128},[28,108298,107974],{"class":34},[28,108300,83],{"class":42},[28,108302,107979],{"class":34},[605,108304,108306],{"id":108305},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108308,108309],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[18,108311,108313],{"className":20,"code":108312,"language":22,"meta":23,"style":23},"mujoco.mj_step(model, data)\nviewer.sync()\n",[25,108314,108315,108319],{"__ignoreMap":23},[28,108316,108317],{"class":30,"line":31},[28,108318,104899],{"class":34},[28,108320,108321],{"class":30,"line":77},[28,108322,108323],{"class":34},"viewer.sync()\n",[14,108325,108326,108328,108329,108332],{},[25,108327,101609],{}," 负责算物理，",[25,108330,108331],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[605,108334,108336],{"id":108335},"为什么要-sleep","为什么要 sleep",[14,108338,108339],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[18,108341,108343],{"className":20,"code":108342,"language":22,"meta":23,"style":23},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[25,108344,108345],{"__ignoreMap":23},[28,108346,108347,108350,108352,108355,108357,108360,108362],{"class":30,"line":31},[28,108348,108349],{"class":34},"sleep_time ",[28,108351,83],{"class":42},[28,108353,108354],{"class":34}," model.opt.timestep ",[28,108356,445],{"class":42},[28,108358,108359],{"class":34}," (time.time() ",[28,108361,445],{"class":42},[28,108363,108364],{"class":34}," step_start)\n",[14,108366,108367],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[605,108369,108371],{"id":108370},"renderer-输出是什么","renderer 输出是什么",[18,108373,108375],{"className":20,"code":108374,"language":22,"meta":23,"style":23},"image = renderer.render()\n",[25,108376,108377],{"__ignoreMap":23},[28,108378,108379,108381,108383],{"class":30,"line":31},[28,108380,107974],{"class":34},[28,108382,83],{"class":42},[28,108384,107979],{"class":34},[14,108386,108387],{},"得到的是 NumPy 数组，形状通常是：",[18,108389,108392],{"className":108390,"code":108391,"language":5675,"meta":23},[5673],"(height, width, 3)\n",[25,108393,108391],{"__ignoreMap":23},[14,108395,108396],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[18,108398,108400],{"className":20,"code":108399,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(\"render_output.png\")\n",[25,108401,108402],{"__ignoreMap":23},[28,108403,108404,108407,108410],{"class":30,"line":31},[28,108405,108406],{"class":34},"Image.fromarray(image).save(",[28,108408,108409],{"class":735},"\"render_output.png\"",[28,108411,228],{"class":34},[60,108413,101647],{"id":101646},[14,108415,108416],{},"交互式 Viewer:",[18,108418,108420],{"className":20,"code":108419,"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,108421,108422,108428,108432,108438,108444,108448,108452,108460,108465,108469,108473,108477,108482,108487,108491,108495,108499,108504,108508,108512,108516,108520,108524,108528,108540,108552,108560,108564,108574,108594,108604,108609,108614,108618,108635,108648,108653,108657,108661,108673],{"__ignoreMap":23},[28,108423,108424,108426],{"class":30,"line":31},[28,108425,536],{"class":42},[28,108427,32308],{"class":34},[28,108429,108430],{"class":30,"line":77},[28,108431,2890],{"emptyLinePlaceholder":562},[28,108433,108434,108436],{"class":30,"line":114},[28,108435,536],{"class":42},[28,108437,101695],{"class":34},[28,108439,108440,108442],{"class":30,"line":128},[28,108441,536],{"class":42},[28,108443,107946],{"class":34},[28,108445,108446],{"class":30,"line":393},[28,108447,2890],{"emptyLinePlaceholder":562},[28,108449,108450],{"class":30,"line":409},[28,108451,2890],{"emptyLinePlaceholder":562},[28,108453,108454,108456,108458],{"class":30,"line":1711},[28,108455,101708],{"class":38},[28,108457,14050],{"class":42},[28,108459,101713],{"class":735},[28,108461,108462],{"class":30,"line":1802},[28,108463,108464],{"class":735},"\u003Cmujoco model=\"viewer_demo\">\n",[28,108466,108467],{"class":30,"line":1808},[28,108468,101723],{"class":735},[28,108470,108471],{"class":30,"line":1820},[28,108472,2890],{"emptyLinePlaceholder":562},[28,108474,108475],{"class":30,"line":2102},[28,108476,101732],{"class":735},[28,108478,108479],{"class":30,"line":2107},[28,108480,108481],{"class":735},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[28,108483,108484],{"class":30,"line":2113},[28,108485,108486],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,108488,108489],{"class":30,"line":2118},[28,108490,2890],{"emptyLinePlaceholder":562},[28,108492,108493],{"class":30,"line":2132},[28,108494,101746],{"class":735},[28,108496,108497],{"class":30,"line":2137},[28,108498,101751],{"class":735},[28,108500,108501],{"class":30,"line":2143},[28,108502,108503],{"class":735},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,108505,108506],{"class":30,"line":2164},[28,108507,101761],{"class":735},[28,108509,108510],{"class":30,"line":2169},[28,108511,101766],{"class":735},[28,108513,108514],{"class":30,"line":2183},[28,108515,101771],{"class":735},[28,108517,108518],{"class":30,"line":2188},[28,108519,96169],{"class":735},[28,108521,108522],{"class":30,"line":2217},[28,108523,2890],{"emptyLinePlaceholder":562},[28,108525,108526],{"class":30,"line":2222},[28,108527,2890],{"emptyLinePlaceholder":562},[28,108529,108530,108532,108534,108536,108538],{"class":30,"line":2239},[28,108531,32426],{"class":42},[28,108533,2463],{"class":2453},[28,108535,101792],{"class":34},[28,108537,96157],{"class":38},[28,108539,4227],{"class":34},[28,108541,108542,108544,108546,108548,108550],{"class":30,"line":2244},[28,108543,101801],{"class":34},[28,108545,83],{"class":42},[28,108547,101806],{"class":34},[28,108549,101708],{"class":38},[28,108551,228],{"class":34},[28,108553,108554,108556,108558],{"class":30,"line":2249},[28,108555,101815],{"class":34},[28,108557,83],{"class":42},[28,108559,101820],{"class":34},[28,108561,108562],{"class":30,"line":2254},[28,108563,2890],{"emptyLinePlaceholder":562},[28,108565,108566,108568,108570,108572],{"class":30,"line":2268},[28,108567,34655],{"class":42},[28,108569,108230],{"class":34},[28,108571,542],{"class":42},[28,108573,108235],{"class":34},[28,108575,108576,108579,108582,108584,108587,108589,108592],{"class":30,"line":2273},[28,108577,108578],{"class":42},"        while",[28,108580,108581],{"class":34}," viewer.is_running() ",[28,108583,30945],{"class":42},[28,108585,108586],{"class":34}," data.time ",[28,108588,1529],{"class":42},[28,108590,108591],{"class":38}," 5.0",[28,108593,4227],{"class":34},[28,108595,108596,108599,108601],{"class":30,"line":3067},[28,108597,108598],{"class":34},"            step_start ",[28,108600,83],{"class":42},[28,108602,108603],{"class":34}," time.time()\n",[28,108605,108606],{"class":30,"line":3081},[28,108607,108608],{"class":34},"            mujoco.mj_step(model, data)\n",[28,108610,108611],{"class":30,"line":3089},[28,108612,108613],{"class":34},"            viewer.sync()\n",[28,108615,108616],{"class":30,"line":3094},[28,108617,2890],{"emptyLinePlaceholder":562},[28,108619,108620,108623,108625,108627,108629,108631,108633],{"class":30,"line":3100},[28,108621,108622],{"class":34},"            sleep_time ",[28,108624,83],{"class":42},[28,108626,108354],{"class":34},[28,108628,445],{"class":42},[28,108630,108359],{"class":34},[28,108632,445],{"class":42},[28,108634,108364],{"class":34},[28,108636,108637,108639,108642,108644,108646],{"class":30,"line":3106},[28,108638,5130],{"class":42},[28,108640,108641],{"class":34}," sleep_time ",[28,108643,1579],{"class":42},[28,108645,4581],{"class":38},[28,108647,4227],{"class":34},[28,108649,108650],{"class":30,"line":3111},[28,108651,108652],{"class":34},"                time.sleep(sleep_time)\n",[28,108654,108655],{"class":30,"line":8436},[28,108656,2890],{"emptyLinePlaceholder":562},[28,108658,108659],{"class":30,"line":8460},[28,108660,2890],{"emptyLinePlaceholder":562},[28,108662,108663,108665,108667,108669,108671],{"class":30,"line":8465},[28,108664,2021],{"class":42},[28,108666,31701],{"class":38},[28,108668,101953],{"class":42},[28,108670,101956],{"class":735},[28,108672,4227],{"class":34},[28,108674,108675],{"class":30,"line":8471},[28,108676,101963],{"class":34},[14,108678,103964],{},[18,108680,108682],{"className":24308,"code":108681,"language":24310,"meta":23,"style":23},"touch ch5_viewer.py\n",[25,108683,108684],{"__ignoreMap":23},[28,108685,108686,108688],{"class":30,"line":31},[28,108687,101677],{"class":2453},[28,108689,108690],{"class":735}," ch5_viewer.py\n",[14,108692,108693],{},"离屏 Renderer 保存图片:",[18,108695,108697],{"className":20,"code":108696,"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,108698,108699,108711,108715,108721,108731,108735,108739,108747,108752,108756,108760,108764,108768,108773,108777,108781,108785,108789,108793,108797,108801,108805,108809,108813,108817,108829,108841,108849,108874,108878,108894,108898,108902,108917,108926,108930,108944,108949,108954,108958,108970,108982,108986,108990,109002],{"__ignoreMap":23},[28,108700,108701,108703,108706,108708],{"class":30,"line":31},[28,108702,530],{"class":42},[28,108704,108705],{"class":34}," pathlib ",[28,108707,536],{"class":42},[28,108709,108710],{"class":34}," Path\n",[28,108712,108713],{"class":30,"line":77},[28,108714,2890],{"emptyLinePlaceholder":562},[28,108716,108717,108719],{"class":30,"line":114},[28,108718,536],{"class":42},[28,108720,101695],{"class":34},[28,108722,108723,108725,108727,108729],{"class":30,"line":128},[28,108724,530],{"class":42},[28,108726,47740],{"class":38},[28,108728,47743],{"class":42},[28,108730,47746],{"class":34},[28,108732,108733],{"class":30,"line":393},[28,108734,2890],{"emptyLinePlaceholder":562},[28,108736,108737],{"class":30,"line":409},[28,108738,2890],{"emptyLinePlaceholder":562},[28,108740,108741,108743,108745],{"class":30,"line":1711},[28,108742,101708],{"class":38},[28,108744,14050],{"class":42},[28,108746,101713],{"class":735},[28,108748,108749],{"class":30,"line":1802},[28,108750,108751],{"class":735},"\u003Cmujoco model=\"renderer_demo\">\n",[28,108753,108754],{"class":30,"line":1808},[28,108755,101723],{"class":735},[28,108757,108758],{"class":30,"line":1820},[28,108759,2890],{"emptyLinePlaceholder":562},[28,108761,108762],{"class":30,"line":2102},[28,108763,101732],{"class":735},[28,108765,108766],{"class":30,"line":2107},[28,108767,108481],{"class":735},[28,108769,108770],{"class":30,"line":2113},[28,108771,108772],{"class":735},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[28,108774,108775],{"class":30,"line":2118},[28,108776,108486],{"class":735},[28,108778,108779],{"class":30,"line":2132},[28,108780,2890],{"emptyLinePlaceholder":562},[28,108782,108783],{"class":30,"line":2137},[28,108784,101746],{"class":735},[28,108786,108787],{"class":30,"line":2143},[28,108788,101751],{"class":735},[28,108790,108791],{"class":30,"line":2164},[28,108792,108503],{"class":735},[28,108794,108795],{"class":30,"line":2169},[28,108796,101761],{"class":735},[28,108798,108799],{"class":30,"line":2183},[28,108800,101766],{"class":735},[28,108802,108803],{"class":30,"line":2188},[28,108804,101771],{"class":735},[28,108806,108807],{"class":30,"line":2217},[28,108808,96169],{"class":735},[28,108810,108811],{"class":30,"line":2222},[28,108812,2890],{"emptyLinePlaceholder":562},[28,108814,108815],{"class":30,"line":2239},[28,108816,2890],{"emptyLinePlaceholder":562},[28,108818,108819,108821,108823,108825,108827],{"class":30,"line":2244},[28,108820,32426],{"class":42},[28,108822,2463],{"class":2453},[28,108824,101792],{"class":34},[28,108826,96157],{"class":38},[28,108828,4227],{"class":34},[28,108830,108831,108833,108835,108837,108839],{"class":30,"line":2249},[28,108832,101801],{"class":34},[28,108834,83],{"class":42},[28,108836,101806],{"class":34},[28,108838,101708],{"class":38},[28,108840,228],{"class":34},[28,108842,108843,108845,108847],{"class":30,"line":2254},[28,108844,101815],{"class":34},[28,108846,83],{"class":42},[28,108848,101820],{"class":34},[28,108850,108851,108854,108856,108858,108860,108862,108864,108866,108868,108870,108872],{"class":30,"line":2268},[28,108852,108853],{"class":34},"    renderer ",[28,108855,83],{"class":42},[28,108857,108268],{"class":34},[28,108859,25468],{"class":5704},[28,108861,83],{"class":42},[28,108863,42819],{"class":38},[28,108865,12921],{"class":34},[28,108867,25464],{"class":5704},[28,108869,83],{"class":42},[28,108871,108283],{"class":38},[28,108873,228],{"class":34},[28,108875,108876],{"class":30,"line":2273},[28,108877,2890],{"emptyLinePlaceholder":562},[28,108879,108880,108882,108884,108886,108888,108890,108892],{"class":30,"line":3067},[28,108881,377],{"class":42},[28,108883,101895],{"class":34},[28,108885,55],{"class":42},[28,108887,364],{"class":38},[28,108889,367],{"class":34},[28,108891,938],{"class":38},[28,108893,372],{"class":34},[28,108895,108896],{"class":30,"line":3081},[28,108897,101910],{"class":34},[28,108899,108900],{"class":30,"line":3089},[28,108901,2890],{"emptyLinePlaceholder":562},[28,108903,108904,108907,108910,108912,108915],{"class":30,"line":3094},[28,108905,108906],{"class":34},"    renderer.update_scene(data, ",[28,108908,108909],{"class":5704},"camera",[28,108911,83],{"class":42},[28,108913,108914],{"class":735},"\"fixed_camera\"",[28,108916,228],{"class":34},[28,108918,108919,108922,108924],{"class":30,"line":3100},[28,108920,108921],{"class":34},"    image ",[28,108923,83],{"class":42},[28,108925,107979],{"class":34},[28,108927,108928],{"class":30,"line":3106},[28,108929,2890],{"emptyLinePlaceholder":562},[28,108931,108932,108935,108937,108940,108942],{"class":30,"line":3111},[28,108933,108934],{"class":34},"    output_path ",[28,108936,83],{"class":42},[28,108938,108939],{"class":34}," Path(",[28,108941,108409],{"class":735},[28,108943,228],{"class":34},[28,108945,108946],{"class":30,"line":8436},[28,108947,108948],{"class":34},"    Image.fromarray(image).save(output_path)\n",[28,108950,108951],{"class":30,"line":8460},[28,108952,108953],{"class":34},"    renderer.close()\n",[28,108955,108956],{"class":30,"line":8465},[28,108957,2890],{"emptyLinePlaceholder":562},[28,108959,108960,108962,108964,108967],{"class":30,"line":8471},[28,108961,31780],{"class":38},[28,108963,367],{"class":34},[28,108965,108966],{"class":735},"\"saved:\"",[28,108968,108969],{"class":34},", output_path.resolve())\n",[28,108971,108972,108974,108976,108979],{"class":30,"line":8498},[28,108973,31780],{"class":38},[28,108975,367],{"class":34},[28,108977,108978],{"class":735},"\"image shape:\"",[28,108980,108981],{"class":34},", image.shape)\n",[28,108983,108984],{"class":30,"line":8503},[28,108985,2890],{"emptyLinePlaceholder":562},[28,108987,108988],{"class":30,"line":8509},[28,108989,2890],{"emptyLinePlaceholder":562},[28,108991,108992,108994,108996,108998,109000],{"class":30,"line":8521},[28,108993,2021],{"class":42},[28,108995,31701],{"class":38},[28,108997,101953],{"class":42},[28,108999,101956],{"class":735},[28,109001,4227],{"class":34},[28,109003,109004],{"class":30,"line":8533},[28,109005,101963],{"class":34},[14,109007,103964],{},[18,109009,109011],{"className":24308,"code":109010,"language":24310,"meta":23,"style":23},"touch ch5_renderer.py\n",[25,109012,109013],{"__ignoreMap":23},[28,109014,109015,109017],{"class":30,"line":31},[28,109016,101677],{"class":2453},[28,109018,109019],{"class":735}," ch5_renderer.py\n",[605,109021,101966],{"id":101966},[14,109023,109024],{},"viewer 上下文：",[18,109026,109028],{"className":20,"code":109027,"language":22,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[25,109029,109030],{"__ignoreMap":23},[28,109031,109032,109034,109036,109038],{"class":30,"line":31},[28,109033,108227],{"class":42},[28,109035,108230],{"class":34},[28,109037,542],{"class":42},[28,109039,108235],{"class":34},[14,109041,109042,109044],{},[25,109043,108227],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109046,109047],{},"窗口循环：",[18,109049,109051],{"className":20,"code":109050,"language":22,"meta":23,"style":23},"while viewer.is_running() and data.time \u003C 5.0:\n",[25,109052,109053],{"__ignoreMap":23},[28,109054,109055,109058,109060,109062,109064,109066,109068],{"class":30,"line":31},[28,109056,109057],{"class":42},"while",[28,109059,108581],{"class":34},[28,109061,30945],{"class":42},[28,109063,108586],{"class":34},[28,109065,1529],{"class":42},[28,109067,108591],{"class":38},[28,109069,4227],{"class":34},[14,109071,109072],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109074,109075],{},"固定相机：",[18,109077,109079],{"className":53544,"code":109078,"language":53546,"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,109080,109081],{"__ignoreMap":23},[28,109082,109083,109085,109087,109089,109091,109093,109095,109097,109100,109103,109105,109108],{"class":30,"line":31},[28,109084,1529],{"class":34},[28,109086,108909],{"class":51777},[28,109088,15406],{"class":2453},[28,109090,83],{"class":34},[28,109092,108914],{"class":735},[28,109094,101500],{"class":2453},[28,109096,83],{"class":34},[28,109098,109099],{"class":735},"\"1.5 -2.0 1.2\"",[28,109101,109102],{"class":2453}," xyaxes",[28,109104,83],{"class":34},[28,109106,109107],{"class":735},"\"1 0.75 0 0 0 1\"",[28,109109,101538],{"class":34},[14,109111,109112],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[605,109114,109116],{"id":109115},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[18,109118,109120],{"className":20,"code":109119,"language":22,"meta":23,"style":23},"import time\n",[25,109121,109122],{"__ignoreMap":23},[28,109123,109124,109126],{"class":30,"line":31},[28,109125,536],{"class":42},[28,109127,32308],{"class":34},[14,109129,109130],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[18,109132,109134],{"className":20,"code":109133,"language":22,"meta":23,"style":23},"import mujoco\nimport mujoco.viewer\n",[25,109135,109136,109142],{"__ignoreMap":23},[28,109137,109138,109140],{"class":30,"line":31},[28,109139,536],{"class":42},[28,109141,101695],{"class":34},[28,109143,109144,109146],{"class":30,"line":77},[28,109145,536],{"class":42},[28,109147,107946],{"class":34},[14,109149,109150],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[18,109152,109153],{"className":20,"code":109027,"language":22,"meta":23,"style":23},[25,109154,109155],{"__ignoreMap":23},[28,109156,109157,109159,109161,109163],{"class":30,"line":31},[28,109158,108227],{"class":42},[28,109160,108230],{"class":34},[28,109162,542],{"class":42},[28,109164,108235],{"class":34},[14,109166,109167,109168,109171],{},"打开一个 viewer 窗口。",[25,109169,109170],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[18,109173,109174],{"className":20,"code":109050,"language":22,"meta":23,"style":23},[25,109175,109176],{"__ignoreMap":23},[28,109177,109178,109180,109182,109184,109186,109188,109190],{"class":30,"line":31},[28,109179,109057],{"class":42},[28,109181,108581],{"class":34},[28,109183,30945],{"class":42},[28,109185,108586],{"class":34},[28,109187,1529],{"class":42},[28,109189,108591],{"class":38},[28,109191,4227],{"class":34},[14,109193,109194,109195,109198],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[25,109196,109197],{},"viewer.is_running()"," 会变成 false，循环结束。",[18,109200,109202],{"className":20,"code":109201,"language":22,"meta":23,"style":23},"step_start = time.time()\n",[25,109203,109204],{"__ignoreMap":23},[28,109205,109206,109209,109211],{"class":30,"line":31},[28,109207,109208],{"class":34},"step_start ",[28,109210,83],{"class":42},[28,109212,108603],{"class":34},[14,109214,109215],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[18,109217,109218],{"className":20,"code":108312,"language":22,"meta":23,"style":23},[25,109219,109220,109224],{"__ignoreMap":23},[28,109221,109222],{"class":30,"line":31},[28,109223,104899],{"class":34},[28,109225,109226],{"class":30,"line":77},[28,109227,108323],{"class":34},[14,109229,109230,109232,109233,109235,109236,109238,109239,109242],{},[25,109231,101609],{}," 推进物理仿真。",[25,109234,108331],{}," 把最新的 ",[25,109237,33878],{}," 同步到窗口里显示。没有 ",[25,109240,109241],{},"sync()","，窗口可能看不到最新状态。",[18,109244,109245],{"className":20,"code":108342,"language":22,"meta":23,"style":23},[25,109246,109247],{"__ignoreMap":23},[28,109248,109249,109251,109253,109255,109257,109259,109261],{"class":30,"line":31},[28,109250,108349],{"class":34},[28,109252,83],{"class":42},[28,109254,108354],{"class":34},[28,109256,445],{"class":42},[28,109258,108359],{"class":34},[28,109260,445],{"class":42},[28,109262,108364],{"class":34},[14,109264,109265],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[18,109267,109269],{"className":20,"code":109268,"language":22,"meta":23,"style":23},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[25,109270,109271,109283],{"__ignoreMap":23},[28,109272,109273,109275,109277,109279,109281],{"class":30,"line":31},[28,109274,2021],{"class":42},[28,109276,108641],{"class":34},[28,109278,1579],{"class":42},[28,109280,4581],{"class":38},[28,109282,4227],{"class":34},[28,109284,109285],{"class":30,"line":77},[28,109286,109287],{"class":34},"    time.sleep(sleep_time)\n",[14,109289,109290],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[605,109292,109294],{"id":109293},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[18,109296,109298],{"className":20,"code":109297,"language":22,"meta":23,"style":23},"from pathlib import Path\n",[25,109299,109300],{"__ignoreMap":23},[28,109301,109302,109304,109306,109308],{"class":30,"line":31},[28,109303,530],{"class":42},[28,109305,108705],{"class":34},[28,109307,536],{"class":42},[28,109309,108710],{"class":34},[14,109311,109312,109313,109316,109317,109320],{},"导入 ",[25,109314,109315],{},"Path","，用来处理文件路径。相比直接写字符串，",[25,109318,109319],{},"Path(\"render_output.png\")"," 更清晰。",[18,109322,109324],{"className":20,"code":109323,"language":22,"meta":23,"style":23},"from PIL import Image\n",[25,109325,109326],{"__ignoreMap":23},[28,109327,109328,109330,109332,109334],{"class":30,"line":31},[28,109329,530],{"class":42},[28,109331,47740],{"class":38},[28,109333,47743],{"class":42},[28,109335,47746],{"class":34},[14,109337,109338],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[18,109340,109341],{"className":53544,"code":109078,"language":53546,"meta":23,"style":23},[25,109342,109343],{"__ignoreMap":23},[28,109344,109345,109347,109349,109351,109353,109355,109357,109359,109361,109363,109365,109367],{"class":30,"line":31},[28,109346,1529],{"class":34},[28,109348,108909],{"class":51777},[28,109350,15406],{"class":2453},[28,109352,83],{"class":34},[28,109354,108914],{"class":735},[28,109356,101500],{"class":2453},[28,109358,83],{"class":34},[28,109360,109099],{"class":735},[28,109362,109102],{"class":2453},[28,109364,83],{"class":34},[28,109366,109107],{"class":735},[28,109368,101538],{"class":34},[14,109370,109371,109372,109374,109375,109377,109378,109381,109382,109384],{},"定义一个相机。",[25,109373,80287],{}," 是相机名字。",[25,109376,104540],{}," 是相机在世界里的位置。",[25,109379,109380],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[25,109383,104540],{}," 来调视角。",[18,109386,109388],{"className":20,"code":109387,"language":22,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[25,109389,109390],{"__ignoreMap":23},[28,109391,109392,109394,109396,109398,109400,109402,109404,109406,109408,109410,109412],{"class":30,"line":31},[28,109393,107964],{"class":34},[28,109395,83],{"class":42},[28,109397,108268],{"class":34},[28,109399,25468],{"class":5704},[28,109401,83],{"class":42},[28,109403,42819],{"class":38},[28,109405,12921],{"class":34},[28,109407,25464],{"class":5704},[28,109409,83],{"class":42},[28,109411,108283],{"class":38},[28,109413,228],{"class":34},[14,109415,109416,109417,101412,109419,109421],{},"创建离屏渲染器。",[25,109418,25468],{},[25,109420,25464],{}," 决定输出图片大小。",[18,109423,109424],{"className":20,"code":102070,"language":22,"meta":23,"style":23},[25,109425,109426,109442],{"__ignoreMap":23},[28,109427,109428,109430,109432,109434,109436,109438,109440],{"class":30,"line":31},[28,109429,49],{"class":42},[28,109431,101895],{"class":34},[28,109433,55],{"class":42},[28,109435,364],{"class":38},[28,109437,367],{"class":34},[28,109439,938],{"class":38},[28,109441,372],{"class":34},[28,109443,109444],{"class":30,"line":77},[28,109445,102093],{"class":34},[14,109447,109448],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[18,109450,109452],{"className":20,"code":109451,"language":22,"meta":23,"style":23},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[25,109453,109454],{"__ignoreMap":23},[28,109455,109456,109459,109461,109463,109465],{"class":30,"line":31},[28,109457,109458],{"class":34},"renderer.update_scene(data, ",[28,109460,108909],{"class":5704},[28,109462,83],{"class":42},[28,109464,108914],{"class":735},[28,109466,228],{"class":34},[14,109468,109469,109470,109472,109473,109476],{},"告诉 renderer：用当前 ",[25,109471,33878],{}," 的状态更新画面，并使用名为 ",[25,109474,109475],{},"fixed_camera"," 的相机视角。",[18,109478,109479],{"className":20,"code":108374,"language":22,"meta":23,"style":23},[25,109480,109481],{"__ignoreMap":23},[28,109482,109483,109485,109487],{"class":30,"line":31},[28,109484,107974],{"class":34},[28,109486,83],{"class":42},[28,109488,107979],{"class":34},[14,109490,109491,109492,109495],{},"真正渲染出图像。",[25,109493,109494],{},"image"," 是一个 NumPy 数组，不是文件。",[18,109497,109499],{"className":20,"code":109498,"language":22,"meta":23,"style":23},"Image.fromarray(image).save(output_path)\n",[25,109500,109501],{"__ignoreMap":23},[28,109502,109503],{"class":30,"line":31},[28,109504,109498],{"class":34},[14,109506,109507,109508,28871],{},"把数组转换成图片，并保存到 ",[25,109509,109510],{},"render_output.png",[18,109512,109514],{"className":20,"code":109513,"language":22,"meta":23,"style":23},"renderer.close()\n",[25,109515,109516],{"__ignoreMap":23},[28,109517,109518],{"class":30,"line":31},[28,109519,109513],{"class":34},[14,109521,109522],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[60,109524,102710],{"id":102709},[14,109526,109527,109528,109530,109531,28871],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[25,109529,109510],{},"，并输出图像数组形状，例如 ",[25,109532,109533],{},"(480, 640, 3)",[14,109535,109536],{},"如果图片里看不到方块，先检查：",[588,109538,109539,109542,109545],{},[591,109540,109541],{},"方块是否掉到相机视野外。",[591,109543,109544],{},"camera 位置是否合理。",[591,109546,109547,109548,109551],{},"是否在 ",[25,109549,109550],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[60,109553,102742],{"id":102741},[14,109555,109556],{},"运行 viewer:",[18,109558,109560],{"className":24308,"code":109559,"language":24310,"meta":23,"style":23},"python ch5_viewer.py\n",[25,109561,109562],{"__ignoreMap":23},[28,109563,109564,109566],{"class":30,"line":31},[28,109565,22],{"class":2453},[28,109567,108690],{"class":735},[14,109569,109570],{},"运行 renderer:",[18,109572,109574],{"className":24308,"code":109573,"language":24310,"meta":23,"style":23},"python ch5_renderer.py\n",[25,109575,109576],{"__ignoreMap":23},[28,109577,109578,109580],{"class":30,"line":31},[28,109579,22],{"class":2453},[28,109581,109019],{"class":735},[14,109583,109584],{},"如果在服务器上运行:",[18,109586,109588],{"className":24308,"code":109587,"language":24310,"meta":23,"style":23},"MUJOCO_GL=egl python ch5_renderer.py\n",[25,109589,109590],{"__ignoreMap":23},[28,109591,109592,109594,109596,109598,109601],{"class":30,"line":31},[28,109593,108208],{"class":34},[28,109595,83],{"class":42},[28,109597,108198],{"class":735},[28,109599,109600],{"class":2453}," python",[28,109602,109019],{"class":735},[14,109604,108176],{},[18,109606,109608],{"className":24308,"code":109607,"language":24310,"meta":23,"style":23},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[25,109609,109610],{"__ignoreMap":23},[28,109611,109612,109614,109616,109618,109620],{"class":30,"line":31},[28,109613,108208],{"class":34},[28,109615,83],{"class":42},[28,109617,108202],{"class":735},[28,109619,109600],{"class":2453},[28,109621,109019],{"class":735},[14,109623,109624],{},"再做几个练习：",[588,109626,109627,109634,109637,109643],{},[591,109628,109629,109630,109633],{},"把 renderer 分辨率改成 ",[25,109631,109632],{},"height=240, width=320","，观察输出 shape。",[591,109635,109636],{},"把方块颜色改成蓝色，重新保存图片。",[591,109638,109639,109640,109642],{},"把相机 ",[25,109641,104540],{}," 改远一点，观察画面中物体是否变小。",[591,109644,109645,109646,102808,109649,109652],{},"把 viewer 示例中的 ",[25,109647,109648],{},"data.time \u003C 5.0",[25,109650,109651],{},"data.time \u003C 20.0","，观察更长时间。",[60,109654,102847],{"id":102846},[605,109656,109658],{"id":109657},"viewer-窗口打不开","viewer 窗口打不开",[14,109660,109661],{},"安装:",[18,109663,109665],{"className":24308,"code":109664,"language":24310,"meta":23,"style":23},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[25,109666,109667],{"__ignoreMap":23},[28,109668,109669,109671,109673,109675,109677,109679,109681,109683,109685,109687,109689],{"class":30,"line":31},[28,109670,25063],{"class":2453},[28,109672,26801],{"class":735},[28,109674,24320],{"class":735},[28,109676,26886],{"class":38},[28,109678,102900],{"class":735},[28,109680,101228],{"class":735},[28,109682,102905],{"class":735},[28,109684,101241],{"class":735},[28,109686,101247],{"class":735},[28,109688,101238],{"class":735},[28,109690,109691],{"class":735}," libXinerama\n",[605,109693,109695],{"id":109694},"glfwerror",[25,109696,109697],{},"GLFWError",[14,109699,109700],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[605,109702,109704],{"id":109703},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109706,109707,109708,83016,109710,109712],{},"尝试 ",[25,109709,101431],{},[25,109711,101434],{},"。可能存在版本差异。",[605,109714,109715],{"id":109715},"保存图片是黑的",[14,109717,102969],{},[588,109719,109720,109723,109726,109736],{},[591,109721,109722],{},"XML 里是否有 light。",[591,109724,109725],{},"相机是否对着模型。",[591,109727,109728,109729,109732,109733,28871],{},"是否先 ",[25,109730,109731],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[25,109734,109735],{},"renderer.render()",[591,109737,109738],{},"物体是否已经掉出视野。",[605,109740,109741],{"id":109741},"远程服务器没有显示器",[14,109743,109744],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[18,109746,109747],{"className":24308,"code":109587,"language":24310,"meta":23,"style":23},[25,109748,109749],{"__ignoreMap":23},[28,109750,109751,109753,109755,109757,109759],{"class":30,"line":31},[28,109752,108208],{"class":34},[28,109754,83],{"class":42},[28,109756,108198],{"class":735},[28,109758,109600],{"class":2453},[28,109760,109019],{"class":735},[14,109762,109763],{},"如果 EGL 不可用，再尝试：",[18,109765,109766],{"className":24308,"code":109607,"language":24310,"meta":23,"style":23},[25,109767,109768],{"__ignoreMap":23},[28,109769,109770,109772,109774,109776,109778],{"class":30,"line":31},[28,109771,108208],{"class":34},[28,109773,83],{"class":42},[28,109775,108202],{"class":735},[28,109777,109600],{"class":2453},[28,109779,109019],{"class":735},[60,109781,103001],{"id":103000},[14,109783,109784],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[588,109786,109787,109790,109793],{},[591,109788,109789],{},"先用 viewer 看模型和控制是否正常。",[591,109791,109792],{},"再用 renderer 保存图片或构造视觉观测。",[591,109794,109795],{},"最后把状态、动作、图像、奖励组织成训练数据。",[547,109797,109798],{},"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":77,"depth":77,"links":109800},[109801,109802,109803,109808,109813,109814,109815,109822],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":109804},[109805,109806,109807],{"id":108305,"depth":114,"text":108306},{"id":108335,"depth":114,"text":108336},{"id":108370,"depth":114,"text":108371},{"id":101646,"depth":77,"text":101647,"children":109809},[109810,109811,109812],{"id":101966,"depth":114,"text":101966},{"id":109115,"depth":114,"text":109116},{"id":109293,"depth":114,"text":109294},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":109816},[109817,109818,109819,109820,109821],{"id":109657,"depth":114,"text":109658},{"id":109694,"depth":114,"text":109697},{"id":109703,"depth":114,"text":109704},{"id":109715,"depth":114,"text":109715},{"id":109741,"depth":114,"text":109741},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107913,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109829,"title":109830,"body":109831,"description":23,"extension":560,"meta":111742,"navigation":562,"path":111743,"seo":111744,"stem":111745,"__hash__":111746},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109832,"toc":111718},[109833,109836,109838,109841,109843,109862,109865,109871,109874,109876,109878,109902,109904,109918,109920,109961,109963,109974,109976,109979,109985,109988,110022,110025,110057,110060,110092,110096,110099,110139,110142,110148,110151,110157,110161,110164,110170,110173,110177,110180,110220,110222,110235,110238,110240,110822,110824,110836,110839,110850,110852,110855,110874,110886,110889,110910,110913,110916,110959,110962,110965,110985,110992,110994,111012,111027,111030,111036,111039,111045,111062,111069,111100,111111,111145,111156,111173,111182,111190,111195,111209,111212,111233,111239,111253,111258,111288,111298,111323,111331,111354,111357,111373,111376,111384,111390,111412,111425,111446,111455,111494,111505,111507,111510,111516,111519,111522,111528,111531,111551,111554,111556,111595,111597,111600,111608,111611,111614,111641,111644,111654,111660,111663,111669,111671,111677,111681,111684,111686,111689,111713,111716],[10,109834,109830],{"id":109835},"_6控制任务cartpole",[60,109837,101041],{"id":101040},[14,109839,109840],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109842,104725],{},[588,109844,109845,109848,109850,109853,109856,109859],{},[591,109846,109847],{},"slide joint",[591,109849,106578],{},[591,109851,109852],{},"cart force actuator",[591,109854,109855],{},"状态观测",[591,109857,109858],{},"简单控制循环",[591,109860,109861],{},"reward 设计雏形",[14,109863,109864],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[18,109866,109869],{"className":109867,"code":109868,"language":5675,"meta":23},[5673],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[25,109870,109868],{"__ignoreMap":23},[14,109872,109873],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[60,109875,101164],{"id":101163},[14,109877,101167],{},[18,109879,109880],{"className":24308,"code":104782,"language":24310,"meta":23,"style":23},[25,109881,109882],{"__ignoreMap":23},[28,109883,109884,109886,109888,109890,109892,109894,109896,109898,109900],{"class":30,"line":31},[28,109885,25063],{"class":2453},[28,109887,26801],{"class":735},[28,109889,24320],{"class":735},[28,109891,26886],{"class":38},[28,109893,104797],{"class":735},[28,109895,101192],{"class":735},[28,109897,102895],{"class":735},[28,109899,101208],{"class":735},[28,109901,104806],{"class":735},[14,109903,103213],{},[18,109905,109906],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},[25,109907,109908],{"__ignoreMap":23},[28,109909,109910,109912,109914,109916],{"class":30,"line":31},[28,109911,24317],{"class":2453},[28,109913,24320],{"class":735},[28,109915,101324],{"class":735},[28,109917,101327],{"class":735},[14,109919,103230],{},[18,109921,109923],{"className":24308,"code":109922,"language":24310,"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,109924,109925,109942,109951],{"__ignoreMap":23},[28,109926,109927,109929,109931,109933,109936,109938,109940],{"class":30,"line":31},[28,109928,30816],{"class":2453},[28,109930,29662],{"class":735},[28,109932,25602],{"class":38},[28,109934,109935],{"class":735}," mujoco-cartpole",[28,109937,101369],{"class":735},[28,109939,101372],{"class":38},[28,109941,101375],{"class":38},[28,109943,109944,109946,109948],{"class":30,"line":77},[28,109945,30816],{"class":2453},[28,109947,101382],{"class":735},[28,109949,109950],{"class":735}," mujoco-cartpole\n",[28,109952,109953,109955,109957,109959],{"class":30,"line":114},[28,109954,24317],{"class":2453},[28,109956,24320],{"class":735},[28,109958,101324],{"class":735},[28,109960,101327],{"class":735},[14,109962,101398],{},[588,109964,109965,109968,109971],{},[591,109966,109967],{},"本章不依赖 Gymnasium。",[591,109969,109970],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[591,109972,109973],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[60,109975,101439],{"id":101438},[14,109977,109978],{},"Cartpole 的模型结构:",[18,109980,109983],{"className":109981,"code":109982,"language":5675,"meta":23},[5673],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[25,109984,109982],{"__ignoreMap":23},[14,109986,109987],{},"小车通过 slide joint 左右移动:",[18,109989,109991],{"className":53544,"code":109990,"language":53546,"meta":23,"style":23},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[25,109992,109993],{"__ignoreMap":23},[28,109994,109995,109997,109999,110001,110003,110006,110008,110010,110013,110015,110017,110020],{"class":30,"line":31},[28,109996,1529],{"class":34},[28,109998,103350],{"class":51777},[28,110000,15406],{"class":2453},[28,110002,83],{"class":34},[28,110004,110005],{"class":735},"\"cart_x\"",[28,110007,54301],{"class":2453},[28,110009,83],{"class":34},[28,110011,110012],{"class":735},"\"slide\"",[28,110014,106422],{"class":2453},[28,110016,83],{"class":34},[28,110018,110019],{"class":735},"\"1 0 0\"",[28,110021,101538],{"class":34},[14,110023,110024],{},"杆子通过 hinge joint 旋转:",[18,110026,110028],{"className":53544,"code":110027,"language":53546,"meta":23,"style":23},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,110029,110030],{"__ignoreMap":23},[28,110031,110032,110034,110036,110038,110040,110043,110045,110047,110049,110051,110053,110055],{"class":30,"line":31},[28,110033,1529],{"class":34},[28,110035,103350],{"class":51777},[28,110037,15406],{"class":2453},[28,110039,83],{"class":34},[28,110041,110042],{"class":735},"\"pole_hinge\"",[28,110044,54301],{"class":2453},[28,110046,83],{"class":34},[28,110048,106413],{"class":735},[28,110050,106422],{"class":2453},[28,110052,83],{"class":34},[28,110054,106427],{"class":735},[28,110056,101538],{"class":34},[14,110058,110059],{},"控制力作用在小车 slide joint 上:",[18,110061,110063],{"className":53544,"code":110062,"language":53546,"meta":23,"style":23},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[25,110064,110065],{"__ignoreMap":23},[28,110066,110067,110069,110071,110073,110075,110078,110080,110082,110084,110086,110088,110090],{"class":30,"line":31},[28,110068,1529],{"class":34},[28,110070,106468],{"class":51777},[28,110072,15406],{"class":2453},[28,110074,83],{"class":34},[28,110076,110077],{"class":735},"\"cart_motor\"",[28,110079,106478],{"class":2453},[28,110081,83],{"class":34},[28,110083,110005],{"class":735},[28,110085,106485],{"class":2453},[28,110087,83],{"class":34},[28,110089,54793],{"class":735},[28,110091,101538],{"class":34},[605,110093,110095],{"id":110094},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110097,110098],{},"这个简化模型有两个关节：",[768,110100,110101,110112],{},[771,110102,110103],{},[774,110104,110105,110107,110109],{},[777,110106,103153],{"align":24222},[777,110108,24223],{"align":24222},[777,110110,110111],{"align":24222},"对应状态",[815,110113,110114,110127],{},[774,110115,110116,110121,110124],{},[820,110117,110118],{"align":24222},[25,110119,110120],{},"cart_x",[820,110122,110123],{"align":24222},"slide",[820,110125,110126],{"align":24222},"小车 x 位置",[774,110128,110129,110134,110136],{},[820,110130,110131],{"align":24222},[25,110132,110133],{},"pole_hinge",[820,110135,106234],{"align":24222},[820,110137,110138],{"align":24222},"杆子角度",[14,110140,110141],{},"所以：",[18,110143,110146],{"className":110144,"code":110145,"language":5675,"meta":23},[5673],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[25,110147,110145],{"__ignoreMap":23},[14,110149,110150],{},"把它们拼起来就是观测：",[18,110152,110155],{"className":110153,"code":110154,"language":5675,"meta":23},[5673],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,110156,110154],{"__ignoreMap":23},[605,110158,110160],{"id":110159},"action-是什么","action 是什么",[14,110162,110163],{},"本章只有一个 actuator：",[18,110165,110168],{"className":110166,"code":110167,"language":5675,"meta":23},[5673],"data.ctrl[0] = action\n",[25,110169,110167],{"__ignoreMap":23},[14,110171,110172],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[605,110174,110176],{"id":110175},"reward-是什么","reward 是什么",[14,110178,110179],{},"奖励函数：",[18,110181,110183],{"className":20,"code":110182,"language":22,"meta":23,"style":23},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[25,110184,110185],{"__ignoreMap":23},[28,110186,110187,110189,110192,110194,110196,110198,110201,110203,110206,110208,110210,110212,110215,110217],{"class":30,"line":31},[28,110188,17532],{"class":42},[28,110190,110191],{"class":38}," float",[28,110193,367],{"class":34},[28,110195,102797],{"class":38},[28,110197,52748],{"class":42},[28,110199,110200],{"class":38}," 0.1",[28,110202,7006],{"class":42},[28,110204,110205],{"class":34}," cart_x ",[28,110207,256],{"class":42},[28,110209,110205],{"class":34},[28,110211,445],{"class":42},[28,110213,110214],{"class":34}," pole_angle ",[28,110216,256],{"class":42},[28,110218,110219],{"class":34}," pole_angle)\n",[14,110221,106620],{},[588,110223,110224,110229,110232],{},[591,110225,110226,110227,28871],{},"基础奖励是 ",[25,110228,102797],{},[591,110230,110231],{},"小车离中心越远，扣分越多。",[591,110233,110234],{},"杆子角度越大，扣分越多。",[14,110236,110237],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[60,110239,101647],{"id":101646},[18,110241,110243],{"className":20,"code":110242,"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,110244,110245,110251,110261,110265,110269,110277,110282,110286,110290,110294,110299,110303,110308,110313,110318,110322,110327,110332,110337,110341,110345,110349,110353,110357,110362,110366,110370,110374,110378,110382,110392,110399,110403,110407,110421,110435,110448,110478,110482,110486,110498,110510,110518,110522,110535,110539,110543,110552,110556,110572,110582,110595,110608,110612,110635,110653,110657,110669,110673,110677,110687,110697,110701,110717,110758,110762,110782,110798,110802,110806,110818],{"__ignoreMap":23},[28,110246,110247,110249],{"class":30,"line":31},[28,110248,536],{"class":42},[28,110250,101695],{"class":34},[28,110252,110253,110255,110257,110259],{"class":30,"line":77},[28,110254,536],{"class":42},[28,110256,31861],{"class":34},[28,110258,542],{"class":42},[28,110260,31866],{"class":34},[28,110262,110263],{"class":30,"line":114},[28,110264,2890],{"emptyLinePlaceholder":562},[28,110266,110267],{"class":30,"line":128},[28,110268,2890],{"emptyLinePlaceholder":562},[28,110270,110271,110273,110275],{"class":30,"line":393},[28,110272,101708],{"class":38},[28,110274,14050],{"class":42},[28,110276,101713],{"class":735},[28,110278,110279],{"class":30,"line":409},[28,110280,110281],{"class":735},"\u003Cmujoco model=\"cartpole\">\n",[28,110283,110284],{"class":30,"line":1711},[28,110285,101723],{"class":735},[28,110287,110288],{"class":30,"line":1802},[28,110289,2890],{"emptyLinePlaceholder":562},[28,110291,110292],{"class":30,"line":1808},[28,110293,101732],{"class":735},[28,110295,110296],{"class":30,"line":1820},[28,110297,110298],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,110300,110301],{"class":30,"line":2102},[28,110302,2890],{"emptyLinePlaceholder":562},[28,110304,110305],{"class":30,"line":2107},[28,110306,110307],{"class":735},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[28,110309,110310],{"class":30,"line":2113},[28,110311,110312],{"class":735},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[28,110314,110315],{"class":30,"line":2118},[28,110316,110317],{"class":735},"      \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,110319,110320],{"class":30,"line":2132},[28,110321,2890],{"emptyLinePlaceholder":562},[28,110323,110324],{"class":30,"line":2137},[28,110325,110326],{"class":735},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[28,110328,110329],{"class":30,"line":2143},[28,110330,110331],{"class":735},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[28,110333,110334],{"class":30,"line":2164},[28,110335,110336],{"class":735},"        \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,110338,110339],{"class":30,"line":2169},[28,110340,106832],{"class":735},[28,110342,110343],{"class":30,"line":2183},[28,110344,101761],{"class":735},[28,110346,110347],{"class":30,"line":2188},[28,110348,101766],{"class":735},[28,110350,110351],{"class":30,"line":2217},[28,110352,2890],{"emptyLinePlaceholder":562},[28,110354,110355],{"class":30,"line":2222},[28,110356,106849],{"class":735},[28,110358,110359],{"class":30,"line":2239},[28,110360,110361],{"class":735},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,110363,110364],{"class":30,"line":2244},[28,110365,106859],{"class":735},[28,110367,110368],{"class":30,"line":2249},[28,110369,101771],{"class":735},[28,110371,110372],{"class":30,"line":2254},[28,110373,96169],{"class":735},[28,110375,110376],{"class":30,"line":2268},[28,110377,2890],{"emptyLinePlaceholder":562},[28,110379,110380],{"class":30,"line":2273},[28,110381,2890],{"emptyLinePlaceholder":562},[28,110383,110384,110386,110389],{"class":30,"line":3067},[28,110385,32426],{"class":42},[28,110387,110388],{"class":2453}," get_observation",[28,110390,110391],{"class":34},"(data: mujoco.MjData) -> np.ndarray:\n",[28,110393,110394,110396],{"class":30,"line":3081},[28,110395,4578],{"class":42},[28,110397,110398],{"class":34}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[28,110400,110401],{"class":30,"line":3089},[28,110402,2890],{"emptyLinePlaceholder":562},[28,110404,110405],{"class":30,"line":3094},[28,110406,2890],{"emptyLinePlaceholder":562},[28,110408,110409,110411,110414,110417,110419],{"class":30,"line":3100},[28,110410,32426],{"class":42},[28,110412,110413],{"class":2453}," compute_reward",[28,110415,110416],{"class":34},"(obs: np.ndarray) -> ",[28,110418,675],{"class":38},[28,110420,4227],{"class":34},[28,110422,110423,110426,110428,110431,110433],{"class":30,"line":3106},[28,110424,110425],{"class":34},"    cart_x ",[28,110427,83],{"class":42},[28,110429,110430],{"class":34}," obs[",[28,110432,822],{"class":38},[28,110434,111],{"class":34},[28,110436,110437,110440,110442,110444,110446],{"class":30,"line":3111},[28,110438,110439],{"class":34},"    pole_angle ",[28,110441,83],{"class":42},[28,110443,110430],{"class":34},[28,110445,39],{"class":38},[28,110447,111],{"class":34},[28,110449,110450,110452,110454,110456,110458,110460,110462,110464,110466,110468,110470,110472,110474,110476],{"class":30,"line":8436},[28,110451,4578],{"class":42},[28,110453,110191],{"class":38},[28,110455,367],{"class":34},[28,110457,102797],{"class":38},[28,110459,52748],{"class":42},[28,110461,110200],{"class":38},[28,110463,7006],{"class":42},[28,110465,110205],{"class":34},[28,110467,256],{"class":42},[28,110469,110205],{"class":34},[28,110471,445],{"class":42},[28,110473,110214],{"class":34},[28,110475,256],{"class":42},[28,110477,110219],{"class":34},[28,110479,110480],{"class":30,"line":8460},[28,110481,2890],{"emptyLinePlaceholder":562},[28,110483,110484],{"class":30,"line":8465},[28,110485,2890],{"emptyLinePlaceholder":562},[28,110487,110488,110490,110492,110494,110496],{"class":30,"line":8471},[28,110489,32426],{"class":42},[28,110491,2463],{"class":2453},[28,110493,101792],{"class":34},[28,110495,96157],{"class":38},[28,110497,4227],{"class":34},[28,110499,110500,110502,110504,110506,110508],{"class":30,"line":8498},[28,110501,101801],{"class":34},[28,110503,83],{"class":42},[28,110505,101806],{"class":34},[28,110507,101708],{"class":38},[28,110509,228],{"class":34},[28,110511,110512,110514,110516],{"class":30,"line":8503},[28,110513,101815],{"class":34},[28,110515,83],{"class":42},[28,110517,101820],{"class":34},[28,110519,110520],{"class":30,"line":8509},[28,110521,2890],{"emptyLinePlaceholder":562},[28,110523,110524,110526,110528,110530,110532],{"class":30,"line":8521},[28,110525,105463],{"class":34},[28,110527,39],{"class":38},[28,110529,4931],{"class":34},[28,110531,83],{"class":42},[28,110533,110534],{"class":38}," 0.1\n",[28,110536,110537],{"class":30,"line":8533},[28,110538,105476],{"class":34},[28,110540,110541],{"class":30,"line":8545},[28,110542,2890],{"emptyLinePlaceholder":562},[28,110544,110545,110548,110550],{"class":30,"line":10202},[28,110546,110547],{"class":34},"    total_reward ",[28,110549,83],{"class":42},[28,110551,105155],{"class":38},[28,110553,110554],{"class":30,"line":10227},[28,110555,2890],{"emptyLinePlaceholder":562},[28,110557,110558,110560,110562,110564,110566,110568,110570],{"class":30,"line":10250},[28,110559,377],{"class":42},[28,110561,32095],{"class":34},[28,110563,55],{"class":42},[28,110565,364],{"class":38},[28,110567,367],{"class":34},[28,110569,6898],{"class":38},[28,110571,372],{"class":34},[28,110573,110574,110577,110579],{"class":30,"line":10274},[28,110575,110576],{"class":34},"        obs ",[28,110578,83],{"class":42},[28,110580,110581],{"class":34}," get_observation(data)\n",[28,110583,110584,110587,110589,110591,110593],{"class":30,"line":10279},[28,110585,110586],{"class":34},"        pole_angle ",[28,110588,83],{"class":42},[28,110590,110430],{"class":34},[28,110592,39],{"class":38},[28,110594,111],{"class":34},[28,110596,110597,110600,110602,110604,110606],{"class":30,"line":10284},[28,110598,110599],{"class":34},"        pole_angular_velocity ",[28,110601,83],{"class":42},[28,110603,110430],{"class":34},[28,110605,98],{"class":38},[28,110607,111],{"class":34},[28,110609,110610],{"class":30,"line":10289},[28,110611,2890],{"emptyLinePlaceholder":562},[28,110613,110614,110617,110619,110622,110624,110626,110628,110630,110632],{"class":30,"line":10298},[28,110615,110616],{"class":34},"        action ",[28,110618,83],{"class":42},[28,110620,110621],{"class":38}," 2.0",[28,110623,7006],{"class":42},[28,110625,110214],{"class":34},[28,110627,1104],{"class":42},[28,110629,62344],{"class":38},[28,110631,7006],{"class":42},[28,110633,110634],{"class":34}," pole_angular_velocity\n",[28,110636,110637,110639,110641,110643,110645,110647,110649,110651],{"class":30,"line":10303},[28,110638,110616],{"class":34},[28,110640,83],{"class":42},[28,110642,107841],{"class":34},[28,110644,445],{"class":42},[28,110646,102797],{"class":38},[28,110648,12921],{"class":34},[28,110650,102797],{"class":38},[28,110652,228],{"class":34},[28,110654,110655],{"class":30,"line":10309},[28,110656,2890],{"emptyLinePlaceholder":562},[28,110658,110659,110661,110663,110665,110667],{"class":30,"line":10330},[28,110660,107011],{"class":34},[28,110662,822],{"class":38},[28,110664,4931],{"class":34},[28,110666,83],{"class":42},[28,110668,107864],{"class":34},[28,110670,110671],{"class":30,"line":10336},[28,110672,101910],{"class":34},[28,110674,110675],{"class":30,"line":10350},[28,110676,2890],{"emptyLinePlaceholder":562},[28,110678,110679,110682,110684],{"class":30,"line":10356},[28,110680,110681],{"class":34},"        reward ",[28,110683,83],{"class":42},[28,110685,110686],{"class":34}," compute_reward(get_observation(data))\n",[28,110688,110689,110692,110694],{"class":30,"line":10383},[28,110690,110691],{"class":34},"        total_reward ",[28,110693,9964],{"class":42},[28,110695,110696],{"class":34}," reward\n",[28,110698,110699],{"class":30,"line":10392},[28,110700,2890],{"emptyLinePlaceholder":562},[28,110702,110703,110705,110707,110709,110711,110713,110715],{"class":30,"line":10398},[28,110704,2987],{"class":42},[28,110706,32095],{"class":34},[28,110708,954],{"class":42},[28,110710,6242],{"class":38},[28,110712,101953],{"class":42},[28,110714,4581],{"class":38},[28,110716,4227],{"class":34},[28,110718,110719,110721,110723,110726,110729,110732,110735,110737,110740,110743,110745,110747,110749,110751,110754,110756],{"class":30,"line":10406},[28,110720,35127],{"class":38},[28,110722,367],{"class":34},[28,110724,110725],{"class":735},"\"step:\"",[28,110727,110728],{"class":34},", step, ",[28,110730,110731],{"class":735},"\"obs:\"",[28,110733,110734],{"class":34},", np.round(obs, ",[28,110736,98],{"class":38},[28,110738,110739],{"class":34},"), ",[28,110741,110742],{"class":735},"\"action:\"",[28,110744,12921],{"class":34},[28,110746,32497],{"class":38},[28,110748,367],{"class":34},[28,110750,675],{"class":38},[28,110752,110753],{"class":34},"(action), ",[28,110755,98],{"class":38},[28,110757,30980],{"class":34},[28,110759,110760],{"class":30,"line":10411},[28,110761,2890],{"emptyLinePlaceholder":562},[28,110763,110764,110766,110768,110771,110773,110775,110778,110780],{"class":30,"line":17090},[28,110765,31780],{"class":38},[28,110767,367],{"class":34},[28,110769,110770],{"class":735},"\"total_reward:\"",[28,110772,12921],{"class":34},[28,110774,32497],{"class":38},[28,110776,110777],{"class":34},"(total_reward, ",[28,110779,98],{"class":38},[28,110781,30980],{"class":34},[28,110783,110784,110786,110788,110791,110794,110796],{"class":30,"line":17096},[28,110785,31780],{"class":38},[28,110787,367],{"class":34},[28,110789,110790],{"class":735},"\"final obs:\"",[28,110792,110793],{"class":34},", np.round(get_observation(data), ",[28,110795,98],{"class":38},[28,110797,30980],{"class":34},[28,110799,110800],{"class":30,"line":17119},[28,110801,2890],{"emptyLinePlaceholder":562},[28,110803,110804],{"class":30,"line":17125},[28,110805,2890],{"emptyLinePlaceholder":562},[28,110807,110808,110810,110812,110814,110816],{"class":30,"line":17148},[28,110809,2021],{"class":42},[28,110811,31701],{"class":38},[28,110813,101953],{"class":42},[28,110815,101956],{"class":735},[28,110817,4227],{"class":34},[28,110819,110820],{"class":30,"line":17162},[28,110821,101963],{"class":34},[14,110823,103964],{},[18,110825,110827],{"className":24308,"code":110826,"language":24310,"meta":23,"style":23},"touch ch6_cartpole.py\n",[25,110828,110829],{"__ignoreMap":23},[28,110830,110831,110833],{"class":30,"line":31},[28,110832,101677],{"class":2453},[28,110834,110835],{"class":735}," ch6_cartpole.py\n",[14,110837,110838],{},"运行：",[18,110840,110842],{"className":24308,"code":110841,"language":24310,"meta":23,"style":23},"python ch6_cartpole.py\n",[25,110843,110844],{"__ignoreMap":23},[28,110845,110846,110848],{"class":30,"line":31},[28,110847,22],{"class":2453},[28,110849,110835],{"class":735},[605,110851,101966],{"id":101966},[14,110853,110854],{},"构造观测：",[18,110856,110858],{"className":20,"code":110857,"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,110859,110860,110868],{"__ignoreMap":23},[28,110861,110862,110864,110866],{"class":30,"line":31},[28,110863,32426],{"class":42},[28,110865,110388],{"class":2453},[28,110867,110391],{"class":34},[28,110869,110870,110872],{"class":30,"line":77},[28,110871,4578],{"class":42},[28,110873,110398],{"class":34},[14,110875,110876,110879,110880,110882,110883,110885],{},[25,110877,110878],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[25,110881,104424],{}," 2 维，",[25,110884,104754],{}," 2 维，所以 obs 是 4 维。",[14,110887,110888],{},"设置初始角度：",[18,110890,110892],{"className":20,"code":110891,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[25,110893,110894,110906],{"__ignoreMap":23},[28,110895,110896,110898,110900,110902,110904],{"class":30,"line":31},[28,110897,105093],{"class":34},[28,110899,39],{"class":38},[28,110901,4931],{"class":34},[28,110903,83],{"class":42},[28,110905,110534],{"class":38},[28,110907,110908],{"class":30,"line":77},[28,110909,104937],{"class":34},[14,110911,110912],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110914,110915],{},"简单反馈控制：",[18,110917,110919],{"className":20,"code":110918,"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,110920,110921,110941],{"__ignoreMap":23},[28,110922,110923,110925,110927,110929,110931,110933,110935,110937,110939],{"class":30,"line":31},[28,110924,107836],{"class":34},[28,110926,83],{"class":42},[28,110928,110621],{"class":38},[28,110930,7006],{"class":42},[28,110932,110214],{"class":34},[28,110934,1104],{"class":42},[28,110936,62344],{"class":38},[28,110938,7006],{"class":42},[28,110940,110634],{"class":34},[28,110942,110943,110945,110947,110949,110951,110953,110955,110957],{"class":30,"line":77},[28,110944,107836],{"class":34},[28,110946,83],{"class":42},[28,110948,107841],{"class":34},[28,110950,445],{"class":42},[28,110952,102797],{"class":38},[28,110954,12921],{"class":34},[28,110956,102797],{"class":38},[28,110958,228],{"class":34},[14,110960,110961],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110963,110964],{},"限制动作：",[18,110966,110968],{"className":20,"code":110967,"language":22,"meta":23,"style":23},"np.clip(action, -1.0, 1.0)\n",[25,110969,110970],{"__ignoreMap":23},[28,110971,110972,110975,110977,110979,110981,110983],{"class":30,"line":31},[28,110973,110974],{"class":34},"np.clip(action, ",[28,110976,445],{"class":42},[28,110978,102797],{"class":38},[28,110980,12921],{"class":34},[28,110982,102797],{"class":38},[28,110984,228],{"class":34},[14,110986,110987,110988,110991],{},"因为 XML 里 ",[25,110989,110990],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[605,110993,102102],{"id":102102},[18,110995,110996],{"className":20,"code":110857,"language":22,"meta":23,"style":23},[25,110997,110998,111006],{"__ignoreMap":23},[28,110999,111000,111002,111004],{"class":30,"line":31},[28,111001,32426],{"class":42},[28,111003,110388],{"class":2453},[28,111005,110391],{"class":34},[28,111007,111008,111010],{"class":30,"line":77},[28,111009,4578],{"class":42},[28,111011,110398],{"class":34},[14,111013,111014,111015,111018,111019,111022,111023,111026],{},"这段定义了一个函数，用来获取当前观测。",[25,111016,111017],{},"data.qpos.copy()"," 是位置数组副本，",[25,111020,111021],{},"data.qvel.copy()"," 是速度数组副本。",[25,111024,111025],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111028,111029],{},"在本章模型里：",[18,111031,111034],{"className":111032,"code":111033,"language":5675,"meta":23},[5673],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[25,111035,111033],{"__ignoreMap":23},[14,111037,111038],{},"所以返回的 obs 是：",[18,111040,111043],{"className":111041,"code":111042,"language":5675,"meta":23},[5673],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[25,111044,111042],{"__ignoreMap":23},[18,111046,111048],{"className":20,"code":111047,"language":22,"meta":23,"style":23},"def compute_reward(obs: np.ndarray) -> float:\n",[25,111049,111050],{"__ignoreMap":23},[28,111051,111052,111054,111056,111058,111060],{"class":30,"line":31},[28,111053,32426],{"class":42},[28,111055,110413],{"class":2453},[28,111057,110416],{"class":34},[28,111059,675],{"class":38},[28,111061,4227],{"class":34},[14,111063,111064,111065,111068],{},"这行定义奖励函数。输入是观测 ",[25,111066,111067],{},"obs","，输出是一个浮点数奖励。",[18,111070,111072],{"className":20,"code":111071,"language":22,"meta":23,"style":23},"cart_x = obs[0]\npole_angle = obs[1]\n",[25,111073,111074,111087],{"__ignoreMap":23},[28,111075,111076,111079,111081,111083,111085],{"class":30,"line":31},[28,111077,111078],{"class":34},"cart_x ",[28,111080,83],{"class":42},[28,111082,110430],{"class":34},[28,111084,822],{"class":38},[28,111086,111],{"class":34},[28,111088,111089,111092,111094,111096,111098],{"class":30,"line":77},[28,111090,111091],{"class":34},"pole_angle ",[28,111093,83],{"class":42},[28,111095,110430],{"class":34},[28,111097,39],{"class":38},[28,111099,111],{"class":34},[14,111101,111102,111103,111106,111107,111110],{},"数组索引从 0 开始。",[25,111104,111105],{},"obs[0]"," 是第一个元素，也就是小车位置。",[25,111108,111109],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[18,111112,111113],{"className":20,"code":110182,"language":22,"meta":23,"style":23},[25,111114,111115],{"__ignoreMap":23},[28,111116,111117,111119,111121,111123,111125,111127,111129,111131,111133,111135,111137,111139,111141,111143],{"class":30,"line":31},[28,111118,17532],{"class":42},[28,111120,110191],{"class":38},[28,111122,367],{"class":34},[28,111124,102797],{"class":38},[28,111126,52748],{"class":42},[28,111128,110200],{"class":38},[28,111130,7006],{"class":42},[28,111132,110205],{"class":34},[28,111134,256],{"class":42},[28,111136,110205],{"class":34},[28,111138,445],{"class":42},[28,111140,110214],{"class":34},[28,111142,256],{"class":42},[28,111144,110219],{"class":34},[14,111146,111147,111148,111151,111152,111155],{},"这行计算奖励。",[25,111149,111150],{},"cart_x * cart_x"," 是小车位置的平方，",[25,111153,111154],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[18,111157,111159],{"className":20,"code":111158,"language":22,"meta":23,"style":23},"data.qpos[1] = 0.1\n",[25,111160,111161],{"__ignoreMap":23},[28,111162,111163,111165,111167,111169,111171],{"class":30,"line":31},[28,111164,105093],{"class":34},[28,111166,39],{"class":38},[28,111168,4931],{"class":34},[28,111170,83],{"class":42},[28,111172,110534],{"class":38},[14,111174,111175,111176,111178,111179,111181],{},"手动设置杆子的初始角度。因为 ",[25,111177,105850],{}," 是小车位置，",[25,111180,105853],{}," 是杆子角度，所以这里改的是杆子。",[18,111183,111184],{"className":20,"code":104937,"language":22,"meta":23,"style":23},[25,111185,111186],{"__ignoreMap":23},[28,111187,111188],{"class":30,"line":31},[28,111189,104937],{"class":34},[14,111191,105896,111192,111194],{},[25,111193,104424],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[18,111196,111198],{"className":20,"code":111197,"language":22,"meta":23,"style":23},"total_reward = 0.0\n",[25,111199,111200],{"__ignoreMap":23},[28,111201,111202,111205,111207],{"class":30,"line":31},[28,111203,111204],{"class":34},"total_reward ",[28,111206,83],{"class":42},[28,111208,105155],{"class":38},[14,111210,111211],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[18,111213,111215],{"className":20,"code":111214,"language":22,"meta":23,"style":23},"for step in range(1000):\n",[25,111216,111217],{"__ignoreMap":23},[28,111218,111219,111221,111223,111225,111227,111229,111231],{"class":30,"line":31},[28,111220,49],{"class":42},[28,111222,32095],{"class":34},[28,111224,55],{"class":42},[28,111226,364],{"class":38},[28,111228,367],{"class":34},[28,111230,6898],{"class":38},[28,111232,372],{"class":34},[14,111234,111235,111236,111238],{},"循环 1000 步。",[25,111237,107528],{}," 是当前步数，从 0 到 999。",[18,111240,111242],{"className":20,"code":111241,"language":22,"meta":23,"style":23},"obs = get_observation(data)\n",[25,111243,111244],{"__ignoreMap":23},[28,111245,111246,111249,111251],{"class":30,"line":31},[28,111247,111248],{"class":34},"obs ",[28,111250,83],{"class":42},[28,111252,110581],{"class":34},[14,111254,111255,111256,28871],{},"读取当前状态，保存到 ",[25,111257,111067],{},[18,111259,111261],{"className":20,"code":111260,"language":22,"meta":23,"style":23},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[25,111262,111263,111275],{"__ignoreMap":23},[28,111264,111265,111267,111269,111271,111273],{"class":30,"line":31},[28,111266,111091],{"class":34},[28,111268,83],{"class":42},[28,111270,110430],{"class":34},[28,111272,39],{"class":38},[28,111274,111],{"class":34},[28,111276,111277,111280,111282,111284,111286],{"class":30,"line":77},[28,111278,111279],{"class":34},"pole_angular_velocity ",[28,111281,83],{"class":42},[28,111283,110430],{"class":34},[28,111285,98],{"class":38},[28,111287,111],{"class":34},[14,111289,111290,111291,111294,111295,28871],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[25,111292,111293],{},"obs[3]","？因为 obs 的顺序是 ",[25,111296,111297],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[18,111299,111301],{"className":20,"code":111300,"language":22,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[25,111302,111303],{"__ignoreMap":23},[28,111304,111305,111307,111309,111311,111313,111315,111317,111319,111321],{"class":30,"line":31},[28,111306,107836],{"class":34},[28,111308,83],{"class":42},[28,111310,110621],{"class":38},[28,111312,7006],{"class":42},[28,111314,110214],{"class":34},[28,111316,1104],{"class":42},[28,111318,62344],{"class":38},[28,111320,7006],{"class":42},[28,111322,110634],{"class":34},[14,111324,111325,111326,101412,111328,111330],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[25,111327,105654],{},[25,111329,35806],{}," 是人为设置的系数，不是固定公式。",[18,111332,111334],{"className":20,"code":111333,"language":22,"meta":23,"style":23},"action = np.clip(action, -1.0, 1.0)\n",[25,111335,111336],{"__ignoreMap":23},[28,111337,111338,111340,111342,111344,111346,111348,111350,111352],{"class":30,"line":31},[28,111339,107836],{"class":34},[28,111341,83],{"class":42},[28,111343,107841],{"class":34},[28,111345,445],{"class":42},[28,111347,102797],{"class":38},[28,111349,12921],{"class":34},[28,111351,102797],{"class":38},[28,111353,228],{"class":34},[14,111355,111356],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[18,111358,111359],{"className":20,"code":110167,"language":22,"meta":23,"style":23},[25,111360,111361],{"__ignoreMap":23},[28,111362,111363,111365,111367,111369,111371],{"class":30,"line":31},[28,111364,106265],{"class":34},[28,111366,822],{"class":38},[28,111368,4931],{"class":34},[28,111370,83],{"class":42},[28,111372,107864],{"class":34},[14,111374,111375],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[18,111377,111378],{"className":20,"code":104899,"language":22,"meta":23,"style":23},[25,111379,111380],{"__ignoreMap":23},[28,111381,111382],{"class":30,"line":31},[28,111383,104899],{"class":34},[14,111385,111386,111387,111389],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[25,111388,106520],{}," 计算小车和杆子的下一刻状态。",[18,111391,111393],{"className":20,"code":111392,"language":22,"meta":23,"style":23},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[25,111394,111395,111404],{"__ignoreMap":23},[28,111396,111397,111400,111402],{"class":30,"line":31},[28,111398,111399],{"class":34},"reward ",[28,111401,83],{"class":42},[28,111403,110686],{"class":34},[28,111405,111406,111408,111410],{"class":30,"line":77},[28,111407,111204],{"class":34},[28,111409,9964],{"class":42},[28,111411,110696],{"class":34},[14,111413,111414,111415,111417,111418,111421,111422,28871],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[25,111416,9964],{}," 是简写，",[25,111419,111420],{},"total_reward += reward"," 等价于 ",[25,111423,111424],{},"total_reward = total_reward + reward",[18,111426,111428],{"className":20,"code":111427,"language":22,"meta":23,"style":23},"if step % 100 == 0:\n",[25,111429,111430],{"__ignoreMap":23},[28,111431,111432,111434,111436,111438,111440,111442,111444],{"class":30,"line":31},[28,111433,2021],{"class":42},[28,111435,32095],{"class":34},[28,111437,954],{"class":42},[28,111439,6242],{"class":38},[28,111441,101953],{"class":42},[28,111443,4581],{"class":38},[28,111445,4227],{"class":34},[14,111447,111448,111450,111451,111454],{},[25,111449,954],{}," 是取余数。",[25,111452,111453],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[18,111456,111458],{"className":20,"code":111457,"language":22,"meta":23,"style":23},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[25,111459,111460],{"__ignoreMap":23},[28,111461,111462,111464,111466,111468,111470,111472,111474,111476,111478,111480,111482,111484,111486,111488,111490,111492],{"class":30,"line":31},[28,111463,30898],{"class":38},[28,111465,367],{"class":34},[28,111467,110725],{"class":735},[28,111469,110728],{"class":34},[28,111471,110731],{"class":735},[28,111473,110734],{"class":34},[28,111475,98],{"class":38},[28,111477,110739],{"class":34},[28,111479,110742],{"class":735},[28,111481,12921],{"class":34},[28,111483,32497],{"class":38},[28,111485,367],{"class":34},[28,111487,675],{"class":38},[28,111489,110753],{"class":34},[28,111491,98],{"class":38},[28,111493,30980],{"class":34},[14,111495,111496,111497,111500,111501,111504],{},"打印当前步数、观测和动作。",[25,111498,111499],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[25,111502,111503],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[60,111506,102710],{"id":102709},[14,111508,111509],{},"观测向量:",[18,111511,111514],{"className":111512,"code":111513,"language":5675,"meta":23},[5673],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,111515,111513],{"__ignoreMap":23},[14,111517,111518],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111520,111521],{},"每隔 100 步会打印一次：",[18,111523,111526],{"className":111524,"code":111525,"language":5675,"meta":23},[5673],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[25,111527,111525],{"__ignoreMap":23},[14,111529,111530],{},"重点观察：",[588,111532,111533,111539,111544],{},[591,111534,111535,111538],{},[25,111536,111537],{},"pole_angle"," 是否越来越大。",[591,111540,111541,111543],{},[25,111542,110120],{}," 是否跑得太远。",[591,111545,111546,111547,83016,111549,28871],{},"action 是否经常被 clip 到 ",[25,111548,104309],{},[25,111550,39],{},[14,111552,111553],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[60,111555,102742],{"id":102741},[588,111557,111558,111564,111567,111573,111583,111589,111592],{},[591,111559,111560,111561,28871],{},"把初始角度改为 ",[25,111562,111563],{},"data.qpos[1] = 0.3",[591,111565,111566],{},"重新运行，观察控制是否变差。",[591,111568,111569,111570,111572],{},"把 actuator ",[25,111571,107461],{}," 改小。",[591,111574,111575,111576,111579,111580,28871],{},"打印 ",[25,111577,111578],{},"model.nq, model.nv, model.nu","，应为 ",[25,111581,111582],{},"2 2 1",[591,111584,111585,111586,111588],{},"把 reward 里的 ",[25,111587,111154],{}," 系数改大，观察总奖励变化。",[591,111590,111591],{},"把控制器改成反号，观察杆子是否更容易倒。",[591,111593,111594],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[60,111596,102847],{"id":102846},[605,111598,111599],{"id":111599},"杆子方向和预期不一致",[14,111601,102790,111602,111604,111605,111607],{},[25,111603,106633],{}," 和 capsule 的 ",[25,111606,103570],{},"，必要时用 viewer 可视化确认。",[605,111609,111610],{"id":111610},"控制器越控越倒",[14,111612,111613],{},"说明反馈符号可能反了，尝试:",[18,111615,111617],{"className":20,"code":111616,"language":22,"meta":23,"style":23},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[25,111618,111619],{"__ignoreMap":23},[28,111620,111621,111623,111625,111627,111629,111631,111633,111635,111637,111639],{"class":30,"line":31},[28,111622,107836],{"class":34},[28,111624,83],{"class":42},[28,111626,52748],{"class":42},[28,111628,105654],{"class":38},[28,111630,7006],{"class":42},[28,111632,110214],{"class":34},[28,111634,445],{"class":42},[28,111636,62344],{"class":38},[28,111638,7006],{"class":42},[28,111640,110634],{"class":34},[605,111642,111643],{"id":111643},"小车飞走",[14,111645,111646,111647,111649,111650,111653],{},"降低 ",[25,111648,107461],{}," 或缩小 ",[25,111651,111652],{},"action"," 的 clip 范围。",[605,111655,111657,111659],{"id":111656},"obs3-为什么是杆子角速度",[25,111658,111293],{}," 为什么是杆子角速度",[14,111661,111662],{},"因为这个模型里：",[18,111664,111667],{"className":111665,"code":111666,"language":5675,"meta":23},[5673],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[25,111668,111666],{"__ignoreMap":23},[14,111670,110141],{},[18,111672,111675],{"className":111673,"code":111674,"language":5675,"meta":23},[5673],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[25,111676,111674],{"__ignoreMap":23},[605,111678,111680],{"id":111679},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111682,111683],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[60,111685,103001],{"id":103000},[14,111687,111688],{},"一个控制任务通常包含：",[588,111690,111691,111694,111702,111707,111710],{},[591,111692,111693],{},"模型：Cartpole 的 body、joint、actuator。",[591,111695,111696,111697,843,111699,111701],{},"观测：从 ",[25,111698,104424],{},[25,111700,104754],{}," 里取状态。",[591,111703,111704,111705,28871],{},"动作：写入 ",[25,111706,101470],{},[591,111708,111709],{},"奖励：根据任务目标打分。",[591,111711,111712],{},"循环：obs -> action -> step -> reward。",[14,111714,111715],{},"这就是后面 Gymnasium 环境的基本骨架。",[547,111717,104680],{},{"title":23,"searchDepth":77,"depth":77,"links":111719},[111720,111721,111722,111727,111731,111732,111733,111741],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":111723},[111724,111725,111726],{"id":110094,"depth":114,"text":110095},{"id":110159,"depth":114,"text":110160},{"id":110175,"depth":114,"text":110176},{"id":101646,"depth":77,"text":101647,"children":111728},[111729,111730],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":111734},[111735,111736,111737,111738,111740],{"id":111599,"depth":114,"text":111599},{"id":111610,"depth":114,"text":111610},{"id":111643,"depth":114,"text":111643},{"id":111656,"depth":114,"text":111739},"obs[3] 为什么是杆子角速度",{"id":111679,"depth":114,"text":111680},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109830,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111748,"title":111749,"body":111750,"description":23,"extension":560,"meta":113764,"navigation":562,"path":113765,"seo":113766,"stem":113767,"__hash__":113768},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111751,"toc":113740},[111752,111755,111757,111760,111762,111779,111782,111785,111791,111794,111796,111798,111822,111824,111838,111840,111881,111883,111901,111903,111906,111912,111915,111943,111947,111953,111978,111981,112012,112019,112022,112025,112031,112034,112040,112043,112049,112053,112056,112081,112084,112086,112846,112848,112860,112862,112873,112875,112878,112895,112898,112900,112911,112914,112916,112962,112965,112978,112981,113063,113066,113068,113084,113094,113107,113110,113149,113159,113170,113180,113193,113196,113225,113228,113238,113241,113247,113264,113275,113277,113283,113300,113311,113332,113335,113347,113350,113371,113374,113382,113390,113407,113410,113479,113486,113494,113497,113510,113517,113519,113522,113528,113531,113534,113540,113546,113548,113588,113590,113596,113605,113608,113610,113630,113633,113636,113642,113646,113648,113675,113678,113681,113708,113714,113717,113720,113722,113725,113728,113734,113737],[10,111753,111749],{"id":111754},"_7控制任务reacher-机械臂到达目标",[60,111756,101041],{"id":101040},[14,111758,111759],{},"本章搭建一个二维两关节 reacher 任务。",[14,111761,104725],{},[588,111763,111764,111767,111770,111773,111776],{},[591,111765,111766],{},"两个 hinge joint",[591,111768,111769],{},"两个 motor actuator",[591,111771,111772],{},"site 作为末端点和目标点",[591,111774,111775],{},"根据末端和目标距离设计 reward",[591,111777,111778],{},"构造机械臂任务的基本形式",[14,111780,111781],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111783,111784],{},"Reacher 任务可以理解为：",[18,111786,111789],{"className":111787,"code":111788,"language":5675,"meta":23},[5673],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[25,111790,111788],{"__ignoreMap":23},[14,111792,111793],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[60,111795,101164],{"id":101163},[14,111797,101167],{},[18,111799,111800],{"className":24308,"code":104782,"language":24310,"meta":23,"style":23},[25,111801,111802],{"__ignoreMap":23},[28,111803,111804,111806,111808,111810,111812,111814,111816,111818,111820],{"class":30,"line":31},[28,111805,25063],{"class":2453},[28,111807,26801],{"class":735},[28,111809,24320],{"class":735},[28,111811,26886],{"class":38},[28,111813,104797],{"class":735},[28,111815,101192],{"class":735},[28,111817,102895],{"class":735},[28,111819,101208],{"class":735},[28,111821,104806],{"class":735},[14,111823,103213],{},[18,111825,111826],{"className":24308,"code":101313,"language":24310,"meta":23,"style":23},[25,111827,111828],{"__ignoreMap":23},[28,111829,111830,111832,111834,111836],{"class":30,"line":31},[28,111831,24317],{"class":2453},[28,111833,24320],{"class":735},[28,111835,101324],{"class":735},[28,111837,101327],{"class":735},[14,111839,103230],{},[18,111841,111843],{"className":24308,"code":111842,"language":24310,"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,111844,111845,111862,111871],{"__ignoreMap":23},[28,111846,111847,111849,111851,111853,111856,111858,111860],{"class":30,"line":31},[28,111848,30816],{"class":2453},[28,111850,29662],{"class":735},[28,111852,25602],{"class":38},[28,111854,111855],{"class":735}," mujoco-reacher",[28,111857,101369],{"class":735},[28,111859,101372],{"class":38},[28,111861,101375],{"class":38},[28,111863,111864,111866,111868],{"class":30,"line":77},[28,111865,30816],{"class":2453},[28,111867,101382],{"class":735},[28,111869,111870],{"class":735}," mujoco-reacher\n",[28,111872,111873,111875,111877,111879],{"class":30,"line":114},[28,111874,24317],{"class":2453},[28,111876,24320],{"class":735},[28,111878,101324],{"class":735},[28,111880,101327],{"class":735},[14,111882,101398],{},[588,111884,111885,111888,111891],{},[591,111886,111887],{},"本章使用低维状态，不使用图像输入。",[591,111889,111890],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[591,111892,111893,111894,843,111896,843,111898,111900],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[25,111895,104424],{},[25,111897,104754],{},[25,111899,104074],{}," 的方法一致。",[60,111902,101439],{"id":101438},[14,111904,111905],{},"Reacher 任务核心:",[18,111907,111910],{"className":111908,"code":111909,"language":5675,"meta":23},[5673],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[25,111911,111909],{"__ignoreMap":23},[14,111913,111914],{},"读取 site 世界坐标:",[18,111916,111918],{"className":20,"code":111917,"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,111919,111920,111933],{"__ignoreMap":23},[28,111921,111922,111924,111926,111928,111931],{"class":30,"line":31},[28,111923,104028],{"class":34},[28,111925,83],{"class":42},[28,111927,103799],{"class":34},[28,111929,111930],{"class":735},"\"tip\"",[28,111932,228],{"class":34},[28,111934,111935,111938,111940],{"class":30,"line":77},[28,111936,111937],{"class":34},"tip_pos ",[28,111939,83],{"class":42},[28,111941,111942],{"class":34}," data.site_xpos[site_id]\n",[605,111944,111946],{"id":111945},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111948,111949,111950,111952],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[25,111951,104424],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[18,111954,111956],{"className":20,"code":111955,"language":22,"meta":23,"style":23},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[25,111957,111958,111968],{"__ignoreMap":23},[28,111959,111960,111963,111965],{"class":30,"line":31},[28,111961,111962],{"class":34},"tip ",[28,111964,83],{"class":42},[28,111966,111967],{"class":34}," data.site_xpos[tip_site_id]\n",[28,111969,111970,111973,111975],{"class":30,"line":77},[28,111971,111972],{"class":34},"target ",[28,111974,83],{"class":42},[28,111976,111977],{"class":34}," data.site_xpos[target_site_id]\n",[14,111979,111980],{},"这样 reward 就很容易写：",[18,111982,111984],{"className":20,"code":111983,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[25,111985,111986,112001],{"__ignoreMap":23},[28,111987,111988,111991,111993,111996,111998],{"class":30,"line":31},[28,111989,111990],{"class":34},"dist ",[28,111992,83],{"class":42},[28,111994,111995],{"class":34}," np.linalg.norm(tip ",[28,111997,445],{"class":42},[28,111999,112000],{"class":34}," target)\n",[28,112002,112003,112005,112007,112009],{"class":30,"line":77},[28,112004,111399],{"class":34},[28,112006,83],{"class":42},[28,112008,52748],{"class":42},[28,112010,112011],{"class":34},"dist\n",[14,112013,112014,112015,112018],{},"距离越小，",[25,112016,112017],{},"-dist"," 越接近 0，奖励越高。",[605,112020,112021],{"id":112021},"两关节机械臂的状态",[14,112023,112024],{},"这个模型有两个 hinge joint：",[18,112026,112029],{"className":112027,"code":112028,"language":5675,"meta":23},[5673],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[25,112030,112028],{"__ignoreMap":23},[14,112032,112033],{},"再加上末端和目标位置：",[18,112035,112038],{"className":112036,"code":112037,"language":5675,"meta":23},[5673],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[25,112039,112037],{"__ignoreMap":23},[14,112041,112042],{},"总维度：",[18,112044,112047],{"className":112045,"code":112046,"language":5675,"meta":23},[5673],"2 + 2 + 3 + 3 = 10\n",[25,112048,112046],{"__ignoreMap":23},[605,112050,112052],{"id":112051},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112054,112055],{},"本章把重力设为：",[18,112057,112059],{"className":53544,"code":112058,"language":53546,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,112060,112061],{"__ignoreMap":23},[28,112062,112063,112065,112067,112069,112071,112073,112075,112077,112079],{"class":30,"line":31},[28,112064,1529],{"class":34},[28,112066,69643],{"class":51777},[28,112068,101588],{"class":2453},[28,112070,83],{"class":34},[28,112072,101593],{"class":735},[28,112074,101596],{"class":2453},[28,112076,83],{"class":34},[28,112078,104165],{"class":735},[28,112080,101538],{"class":34},[14,112082,112083],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[60,112085,101647],{"id":101646},[18,112087,112089],{"className":20,"code":112088,"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,112090,112091,112097,112107,112111,112115,112123,112128,112133,112137,112141,112146,112151,112155,112160,112165,112170,112174,112179,112184,112189,112194,112198,112202,112206,112210,112214,112219,112224,112228,112232,112236,112240,112244,112259,112268,112280,112303,112310,112314,112318,112328,112342,112356,112363,112367,112371,112385,112397,112409,112422,112437,112454,112458,112462,112474,112486,112494,112502,112506,112522,112527,112540,112553,112568,112572,112607,112639,112643,112647,112656,112660,112676,112686,112697,112713,112729,112745,112761,112765,112783,112803,112822,112826,112830,112842],{"__ignoreMap":23},[28,112092,112093,112095],{"class":30,"line":31},[28,112094,536],{"class":42},[28,112096,101695],{"class":34},[28,112098,112099,112101,112103,112105],{"class":30,"line":77},[28,112100,536],{"class":42},[28,112102,31861],{"class":34},[28,112104,542],{"class":42},[28,112106,31866],{"class":34},[28,112108,112109],{"class":30,"line":114},[28,112110,2890],{"emptyLinePlaceholder":562},[28,112112,112113],{"class":30,"line":128},[28,112114,2890],{"emptyLinePlaceholder":562},[28,112116,112117,112119,112121],{"class":30,"line":393},[28,112118,101708],{"class":38},[28,112120,14050],{"class":42},[28,112122,101713],{"class":735},[28,112124,112125],{"class":30,"line":409},[28,112126,112127],{"class":735},"\u003Cmujoco model=\"two_link_reacher\">\n",[28,112129,112130],{"class":30,"line":1711},[28,112131,112132],{"class":735},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[28,112134,112135],{"class":30,"line":1802},[28,112136,2890],{"emptyLinePlaceholder":562},[28,112138,112139],{"class":30,"line":1808},[28,112140,101732],{"class":735},[28,112142,112143],{"class":30,"line":1820},[28,112144,112145],{"class":735},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[28,112147,112148],{"class":30,"line":2102},[28,112149,112150],{"class":735},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[28,112152,112153],{"class":30,"line":2107},[28,112154,2890],{"emptyLinePlaceholder":562},[28,112156,112157],{"class":30,"line":2113},[28,112158,112159],{"class":735},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[28,112161,112162],{"class":30,"line":2118},[28,112163,112164],{"class":735},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,112166,112167],{"class":30,"line":2132},[28,112168,112169],{"class":735},"      \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,112171,112172],{"class":30,"line":2137},[28,112173,2890],{"emptyLinePlaceholder":562},[28,112175,112176],{"class":30,"line":2143},[28,112177,112178],{"class":735},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[28,112180,112181],{"class":30,"line":2164},[28,112182,112183],{"class":735},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,112185,112186],{"class":30,"line":2169},[28,112187,112188],{"class":735},"        \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,112190,112191],{"class":30,"line":2183},[28,112192,112193],{"class":735},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[28,112195,112196],{"class":30,"line":2188},[28,112197,106832],{"class":735},[28,112199,112200],{"class":30,"line":2217},[28,112201,101761],{"class":735},[28,112203,112204],{"class":30,"line":2222},[28,112205,101766],{"class":735},[28,112207,112208],{"class":30,"line":2239},[28,112209,2890],{"emptyLinePlaceholder":562},[28,112211,112212],{"class":30,"line":2244},[28,112213,106849],{"class":735},[28,112215,112216],{"class":30,"line":2249},[28,112217,112218],{"class":735},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,112220,112221],{"class":30,"line":2254},[28,112222,112223],{"class":735},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,112225,112226],{"class":30,"line":2268},[28,112227,106859],{"class":735},[28,112229,112230],{"class":30,"line":2273},[28,112231,101771],{"class":735},[28,112233,112234],{"class":30,"line":3067},[28,112235,96169],{"class":735},[28,112237,112238],{"class":30,"line":3081},[28,112239,2890],{"emptyLinePlaceholder":562},[28,112241,112242],{"class":30,"line":3089},[28,112243,2890],{"emptyLinePlaceholder":562},[28,112245,112246,112248,112251,112254,112256],{"class":30,"line":3094},[28,112247,32426],{"class":42},[28,112249,112250],{"class":2453}," site_position",[28,112252,112253],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[28,112255,1790],{"class":38},[28,112257,112258],{"class":34},") -> np.ndarray:\n",[28,112260,112261,112263,112265],{"class":30,"line":3100},[28,112262,103794],{"class":34},[28,112264,83],{"class":42},[28,112266,112267],{"class":34}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[28,112269,112270,112272,112274,112276,112278],{"class":30,"line":3106},[28,112271,3590],{"class":42},[28,112273,103843],{"class":34},[28,112275,1529],{"class":42},[28,112277,4581],{"class":38},[28,112279,4227],{"class":34},[28,112281,112282,112284,112286,112288,112290,112293,112295,112297,112299,112301],{"class":30,"line":3111},[28,112283,103826],{"class":42},[28,112285,103829],{"class":38},[28,112287,367],{"class":34},[28,112289,686],{"class":42},[28,112291,112292],{"class":735},"\"site not found: ",[28,112294,1515],{"class":38},[28,112296,80287],{"class":34},[28,112298,1565],{"class":38},[28,112300,880],{"class":735},[28,112302,228],{"class":34},[28,112304,112305,112307],{"class":30,"line":8436},[28,112306,4578],{"class":42},[28,112308,112309],{"class":34}," data.site_xpos[site_id].copy()\n",[28,112311,112312],{"class":30,"line":8460},[28,112313,2890],{"emptyLinePlaceholder":562},[28,112315,112316],{"class":30,"line":8465},[28,112317,2890],{"emptyLinePlaceholder":562},[28,112319,112320,112322,112325],{"class":30,"line":8471},[28,112321,32426],{"class":42},[28,112323,112324],{"class":2453}," get_obs",[28,112326,112327],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[28,112329,112330,112333,112335,112338,112340],{"class":30,"line":8498},[28,112331,112332],{"class":34},"    tip ",[28,112334,83],{"class":42},[28,112336,112337],{"class":34}," site_position(model, data, ",[28,112339,111930],{"class":735},[28,112341,228],{"class":34},[28,112343,112344,112347,112349,112351,112354],{"class":30,"line":8503},[28,112345,112346],{"class":34},"    target ",[28,112348,83],{"class":42},[28,112350,112337],{"class":34},[28,112352,112353],{"class":735},"\"target\"",[28,112355,228],{"class":34},[28,112357,112358,112360],{"class":30,"line":8509},[28,112359,4578],{"class":42},[28,112361,112362],{"class":34}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[28,112364,112365],{"class":30,"line":8521},[28,112366,2890],{"emptyLinePlaceholder":562},[28,112368,112369],{"class":30,"line":8533},[28,112370,2890],{"emptyLinePlaceholder":562},[28,112372,112373,112375,112378,112381,112383],{"class":30,"line":8545},[28,112374,32426],{"class":42},[28,112376,112377],{"class":2453}," reward",[28,112379,112380],{"class":34},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,112382,675],{"class":38},[28,112384,4227],{"class":34},[28,112386,112387,112389,112391,112393,112395],{"class":30,"line":10202},[28,112388,112332],{"class":34},[28,112390,83],{"class":42},[28,112392,112337],{"class":34},[28,112394,111930],{"class":735},[28,112396,228],{"class":34},[28,112398,112399,112401,112403,112405,112407],{"class":30,"line":10227},[28,112400,112346],{"class":34},[28,112402,83],{"class":42},[28,112404,112337],{"class":34},[28,112406,112353],{"class":735},[28,112408,228],{"class":34},[28,112410,112411,112414,112416,112418,112420],{"class":30,"line":10250},[28,112412,112413],{"class":34},"    dist ",[28,112415,83],{"class":42},[28,112417,111995],{"class":34},[28,112419,445],{"class":42},[28,112421,112000],{"class":34},[28,112423,112424,112427,112429,112432,112434],{"class":30,"line":10274},[28,112425,112426],{"class":34},"    control_cost ",[28,112428,83],{"class":42},[28,112430,112431],{"class":38}," 0.01",[28,112433,7006],{"class":42},[28,112435,112436],{"class":34}," np.sum(np.square(data.ctrl))\n",[28,112438,112439,112441,112443,112445,112447,112449,112451],{"class":30,"line":10279},[28,112440,4578],{"class":42},[28,112442,110191],{"class":38},[28,112444,367],{"class":34},[28,112446,445],{"class":42},[28,112448,111990],{"class":34},[28,112450,445],{"class":42},[28,112452,112453],{"class":34}," control_cost)\n",[28,112455,112456],{"class":30,"line":10284},[28,112457,2890],{"emptyLinePlaceholder":562},[28,112459,112460],{"class":30,"line":10289},[28,112461,2890],{"emptyLinePlaceholder":562},[28,112463,112464,112466,112468,112470,112472],{"class":30,"line":10298},[28,112465,32426],{"class":42},[28,112467,2463],{"class":2453},[28,112469,101792],{"class":34},[28,112471,96157],{"class":38},[28,112473,4227],{"class":34},[28,112475,112476,112478,112480,112482,112484],{"class":30,"line":10303},[28,112477,101801],{"class":34},[28,112479,83],{"class":42},[28,112481,101806],{"class":34},[28,112483,101708],{"class":38},[28,112485,228],{"class":34},[28,112487,112488,112490,112492],{"class":30,"line":10309},[28,112489,101815],{"class":34},[28,112491,83],{"class":42},[28,112493,101820],{"class":34},[28,112495,112496,112498,112500],{"class":30,"line":10330},[28,112497,110547],{"class":34},[28,112499,83],{"class":42},[28,112501,105155],{"class":38},[28,112503,112504],{"class":30,"line":10336},[28,112505,2890],{"emptyLinePlaceholder":562},[28,112507,112508,112510,112512,112514,112516,112518,112520],{"class":30,"line":10350},[28,112509,377],{"class":42},[28,112511,32095],{"class":34},[28,112513,55],{"class":42},[28,112515,364],{"class":38},[28,112517,367],{"class":34},[28,112519,65551],{"class":38},[28,112521,372],{"class":34},[28,112523,112524],{"class":30,"line":10356},[28,112525,112526],{"class":34},"        mujoco.mj_forward(model, data)\n",[28,112528,112529,112532,112534,112536,112538],{"class":30,"line":10383},[28,112530,112531],{"class":34},"        tip ",[28,112533,83],{"class":42},[28,112535,112337],{"class":34},[28,112537,111930],{"class":735},[28,112539,228],{"class":34},[28,112541,112542,112545,112547,112549,112551],{"class":30,"line":10392},[28,112543,112544],{"class":34},"        target ",[28,112546,83],{"class":42},[28,112548,112337],{"class":34},[28,112550,112353],{"class":735},[28,112552,228],{"class":34},[28,112554,112555,112558,112560,112563,112565],{"class":30,"line":10398},[28,112556,112557],{"class":34},"        error ",[28,112559,83],{"class":42},[28,112561,112562],{"class":34}," target ",[28,112564,445],{"class":42},[28,112566,112567],{"class":34}," tip\n",[28,112569,112570],{"class":30,"line":10406},[28,112571,2890],{"emptyLinePlaceholder":562},[28,112573,112574,112576,112578,112580,112582,112585,112587,112589,112592,112594,112597,112599,112601,112603,112605],{"class":30,"line":10411},[28,112575,107011],{"class":34},[28,112577,822],{"class":38},[28,112579,4931],{"class":34},[28,112581,83],{"class":42},[28,112583,112584],{"class":34}," np.clip(",[28,112586,105654],{"class":38},[28,112588,7006],{"class":42},[28,112590,112591],{"class":34}," error[",[28,112593,93],{"class":38},[28,112595,112596],{"class":34},"], ",[28,112598,445],{"class":42},[28,112600,102797],{"class":38},[28,112602,12921],{"class":34},[28,112604,102797],{"class":38},[28,112606,228],{"class":34},[28,112608,112609,112611,112613,112615,112617,112619,112621,112623,112625,112627,112629,112631,112633,112635,112637],{"class":30,"line":17090},[28,112610,107011],{"class":34},[28,112612,39],{"class":38},[28,112614,4931],{"class":34},[28,112616,83],{"class":42},[28,112618,112584],{"class":34},[28,112620,105654],{"class":38},[28,112622,7006],{"class":42},[28,112624,112591],{"class":34},[28,112626,822],{"class":38},[28,112628,112596],{"class":34},[28,112630,445],{"class":42},[28,112632,102797],{"class":38},[28,112634,12921],{"class":34},[28,112636,102797],{"class":38},[28,112638,228],{"class":34},[28,112640,112641],{"class":30,"line":17096},[28,112642,2890],{"emptyLinePlaceholder":562},[28,112644,112645],{"class":30,"line":17119},[28,112646,101910],{"class":34},[28,112648,112649,112651,112653],{"class":30,"line":17125},[28,112650,110691],{"class":34},[28,112652,9964],{"class":42},[28,112654,112655],{"class":34}," reward(model, data)\n",[28,112657,112658],{"class":30,"line":17148},[28,112659,2890],{"emptyLinePlaceholder":562},[28,112661,112662,112664,112666,112668,112670,112672,112674],{"class":30,"line":17162},[28,112663,2987],{"class":42},[28,112665,32095],{"class":34},[28,112667,954],{"class":42},[28,112669,6242],{"class":38},[28,112671,101953],{"class":42},[28,112673,4581],{"class":38},[28,112675,4227],{"class":34},[28,112677,112678,112681,112683],{"class":30,"line":17182},[28,112679,112680],{"class":34},"            obs ",[28,112682,83],{"class":42},[28,112684,112685],{"class":34}," get_obs(model, data)\n",[28,112687,112688,112690,112692,112694],{"class":30,"line":17188},[28,112689,35127],{"class":38},[28,112691,367],{"class":34},[28,112693,110725],{"class":735},[28,112695,112696],{"class":34},", step)\n",[28,112698,112699,112701,112703,112706,112709,112711],{"class":30,"line":17199},[28,112700,35127],{"class":38},[28,112702,367],{"class":34},[28,112704,112705],{"class":735},"\"  tip:\"",[28,112707,112708],{"class":34},", np.round(tip, ",[28,112710,98],{"class":38},[28,112712,30980],{"class":34},[28,112714,112715,112717,112719,112722,112725,112727],{"class":30,"line":17222},[28,112716,35127],{"class":38},[28,112718,367],{"class":34},[28,112720,112721],{"class":735},"\"  target:\"",[28,112723,112724],{"class":34},", np.round(target, ",[28,112726,98],{"class":38},[28,112728,30980],{"class":34},[28,112730,112731,112733,112735,112738,112741,112743],{"class":30,"line":17244},[28,112732,35127],{"class":38},[28,112734,367],{"class":34},[28,112736,112737],{"class":735},"\"  ctrl:\"",[28,112739,112740],{"class":34},", np.round(data.ctrl.copy(), ",[28,112742,98],{"class":38},[28,112744,30980],{"class":34},[28,112746,112747,112749,112751,112754,112757,112759],{"class":30,"line":17249},[28,112748,35127],{"class":38},[28,112750,367],{"class":34},[28,112752,112753],{"class":735},"\"  obs_dim:\"",[28,112755,112756],{"class":34},", obs.shape[",[28,112758,822],{"class":38},[28,112760,5145],{"class":34},[28,112762,112763],{"class":30,"line":17255},[28,112764,2890],{"emptyLinePlaceholder":562},[28,112766,112767,112769,112771,112773,112775,112777,112779,112781],{"class":30,"line":17269},[28,112768,31780],{"class":38},[28,112770,367],{"class":34},[28,112772,110770],{"class":735},[28,112774,12921],{"class":34},[28,112776,32497],{"class":38},[28,112778,110777],{"class":34},[28,112780,98],{"class":38},[28,112782,30980],{"class":34},[28,112784,112785,112787,112789,112792,112795,112797,112799,112801],{"class":30,"line":17282},[28,112786,31780],{"class":38},[28,112788,367],{"class":34},[28,112790,112791],{"class":735},"\"final tip:\"",[28,112793,112794],{"class":34},", np.round(site_position(model, data, ",[28,112796,111930],{"class":735},[28,112798,110739],{"class":34},[28,112800,98],{"class":38},[28,112802,30980],{"class":34},[28,112804,112805,112807,112809,112812,112814,112816,112818,112820],{"class":30,"line":17287},[28,112806,31780],{"class":38},[28,112808,367],{"class":34},[28,112810,112811],{"class":735},"\"target:\"",[28,112813,112794],{"class":34},[28,112815,112353],{"class":735},[28,112817,110739],{"class":34},[28,112819,98],{"class":38},[28,112821,30980],{"class":34},[28,112823,112824],{"class":30,"line":17301},[28,112825,2890],{"emptyLinePlaceholder":562},[28,112827,112828],{"class":30,"line":17306},[28,112829,2890],{"emptyLinePlaceholder":562},[28,112831,112832,112834,112836,112838,112840],{"class":30,"line":17312},[28,112833,2021],{"class":42},[28,112835,31701],{"class":38},[28,112837,101953],{"class":42},[28,112839,101956],{"class":735},[28,112841,4227],{"class":34},[28,112843,112844],{"class":30,"line":17317},[28,112845,101963],{"class":34},[14,112847,103964],{},[18,112849,112851],{"className":24308,"code":112850,"language":24310,"meta":23,"style":23},"touch ch7_reacher.py\n",[25,112852,112853],{"__ignoreMap":23},[28,112854,112855,112857],{"class":30,"line":31},[28,112856,101677],{"class":2453},[28,112858,112859],{"class":735}," ch7_reacher.py\n",[14,112861,110838],{},[18,112863,112865],{"className":24308,"code":112864,"language":24310,"meta":23,"style":23},"python ch7_reacher.py\n",[25,112866,112867],{"__ignoreMap":23},[28,112868,112869,112871],{"class":30,"line":31},[28,112870,22],{"class":2453},[28,112872,112859],{"class":735},[605,112874,101966],{"id":101966},[14,112876,112877],{},"读取 site 坐标：",[18,112879,112881],{"className":20,"code":112880,"language":22,"meta":23,"style":23},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[25,112882,112883],{"__ignoreMap":23},[28,112884,112885,112887,112889,112891,112893],{"class":30,"line":31},[28,112886,32426],{"class":42},[28,112888,112250],{"class":2453},[28,112890,112253],{"class":34},[28,112892,1790],{"class":38},[28,112894,112258],{"class":34},[14,112896,112897],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112899,110854],{},[18,112901,112903],{"className":20,"code":112902,"language":22,"meta":23,"style":23},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112904,112905],{"__ignoreMap":23},[28,112906,112907,112909],{"class":30,"line":31},[28,112908,17532],{"class":42},[28,112910,112362],{"class":34},[14,112912,112913],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112915,110179],{},[18,112917,112919],{"className":20,"code":112918,"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,112920,112921,112933,112946],{"__ignoreMap":23},[28,112922,112923,112925,112927,112929,112931],{"class":30,"line":31},[28,112924,111990],{"class":34},[28,112926,83],{"class":42},[28,112928,111995],{"class":34},[28,112930,445],{"class":42},[28,112932,112000],{"class":34},[28,112934,112935,112938,112940,112942,112944],{"class":30,"line":77},[28,112936,112937],{"class":34},"control_cost ",[28,112939,83],{"class":42},[28,112941,112431],{"class":38},[28,112943,7006],{"class":42},[28,112945,112436],{"class":34},[28,112947,112948,112950,112952,112954,112956,112958,112960],{"class":30,"line":114},[28,112949,17532],{"class":42},[28,112951,110191],{"class":38},[28,112953,367],{"class":34},[28,112955,445],{"class":42},[28,112957,111990],{"class":34},[28,112959,445],{"class":42},[28,112961,112453],{"class":34},[14,112963,112964],{},"奖励由两部分组成：",[588,112966,112967,112972],{},[591,112968,112969,112971],{},[25,112970,112017],{},"：末端离目标越远，奖励越低。",[591,112973,112974,112977],{},[25,112975,112976],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112979,112980],{},"简单控制器：",[18,112982,112984],{"className":20,"code":112983,"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,112985,112986,112999,113031],{"__ignoreMap":23},[28,112987,112988,112991,112993,112995,112997],{"class":30,"line":31},[28,112989,112990],{"class":34},"error ",[28,112992,83],{"class":42},[28,112994,112562],{"class":34},[28,112996,445],{"class":42},[28,112998,112567],{"class":34},[28,113000,113001,113003,113005,113007,113009,113011,113013,113015,113017,113019,113021,113023,113025,113027,113029],{"class":30,"line":77},[28,113002,106265],{"class":34},[28,113004,822],{"class":38},[28,113006,4931],{"class":34},[28,113008,83],{"class":42},[28,113010,112584],{"class":34},[28,113012,105654],{"class":38},[28,113014,7006],{"class":42},[28,113016,112591],{"class":34},[28,113018,93],{"class":38},[28,113020,112596],{"class":34},[28,113022,445],{"class":42},[28,113024,102797],{"class":38},[28,113026,12921],{"class":34},[28,113028,102797],{"class":38},[28,113030,228],{"class":34},[28,113032,113033,113035,113037,113039,113041,113043,113045,113047,113049,113051,113053,113055,113057,113059,113061],{"class":30,"line":114},[28,113034,106265],{"class":34},[28,113036,39],{"class":38},[28,113038,4931],{"class":34},[28,113040,83],{"class":42},[28,113042,112584],{"class":34},[28,113044,105654],{"class":38},[28,113046,7006],{"class":42},[28,113048,112591],{"class":34},[28,113050,822],{"class":38},[28,113052,112596],{"class":34},[28,113054,445],{"class":42},[28,113056,102797],{"class":38},[28,113058,12921],{"class":34},[28,113060,102797],{"class":38},[28,113062,228],{"class":34},[14,113064,113065],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[605,113067,102102],{"id":102102},[18,113069,113070],{"className":20,"code":112880,"language":22,"meta":23,"style":23},[25,113071,113072],{"__ignoreMap":23},[28,113073,113074,113076,113078,113080,113082],{"class":30,"line":31},[28,113075,32426],{"class":42},[28,113077,112250],{"class":2453},[28,113079,112253],{"class":34},[28,113081,1790],{"class":38},[28,113083,112258],{"class":34},[14,113085,113086,113087,113089,113090,83016,113092,28871],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[25,113088,80287],{}," 是 site 的名字，比如 ",[25,113091,111930],{},[25,113093,112353],{},[18,113095,113097],{"className":20,"code":113096,"language":22,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,113098,113099],{"__ignoreMap":23},[28,113100,113101,113103,113105],{"class":30,"line":31},[28,113102,104028],{"class":34},[28,113104,83],{"class":42},[28,113106,112267],{"class":34},[14,113108,113109],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[18,113111,113113],{"className":20,"code":113112,"language":22,"meta":23,"style":23},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[25,113114,113115,113127],{"__ignoreMap":23},[28,113116,113117,113119,113121,113123,113125],{"class":30,"line":31},[28,113118,2021],{"class":42},[28,113120,103843],{"class":34},[28,113122,1529],{"class":42},[28,113124,4581],{"class":38},[28,113126,4227],{"class":34},[28,113128,113129,113131,113133,113135,113137,113139,113141,113143,113145,113147],{"class":30,"line":77},[28,113130,104289],{"class":42},[28,113132,103829],{"class":38},[28,113134,367],{"class":34},[28,113136,686],{"class":42},[28,113138,112292],{"class":735},[28,113140,1515],{"class":38},[28,113142,80287],{"class":34},[28,113144,1565],{"class":38},[28,113146,880],{"class":735},[28,113148,228],{"class":34},[14,113150,113151,113152,113155,113156,113158],{},"如果 site 没找到，就主动报错。",[25,113153,113154],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[25,113157,80287],{}," 的值放进字符串里。",[18,113160,113162],{"className":20,"code":113161,"language":22,"meta":23,"style":23},"return data.site_xpos[site_id].copy()\n",[25,113163,113164],{"__ignoreMap":23},[28,113165,113166,113168],{"class":30,"line":31},[28,113167,17532],{"class":42},[28,113169,112309],{"class":34},[14,113171,113172,113173,113175,113176,113179],{},"返回这个 site 的世界坐标。",[25,113174,104074],{}," 里的每一行都是一个 site 的 ",[25,113177,113178],{},"(x, y, z)"," 坐标。",[18,113181,113183],{"className":20,"code":113182,"language":22,"meta":23,"style":23},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,113184,113185],{"__ignoreMap":23},[28,113186,113187,113189,113191],{"class":30,"line":31},[28,113188,32426],{"class":42},[28,113190,112324],{"class":2453},[28,113192,112327],{"class":34},[14,113194,113195],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[18,113197,113199],{"className":20,"code":113198,"language":22,"meta":23,"style":23},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[25,113200,113201,113213],{"__ignoreMap":23},[28,113202,113203,113205,113207,113209,113211],{"class":30,"line":31},[28,113204,111962],{"class":34},[28,113206,83],{"class":42},[28,113208,112337],{"class":34},[28,113210,111930],{"class":735},[28,113212,228],{"class":34},[28,113214,113215,113217,113219,113221,113223],{"class":30,"line":77},[28,113216,111972],{"class":34},[28,113218,83],{"class":42},[28,113220,112337],{"class":34},[28,113222,112353],{"class":735},[28,113224,228],{"class":34},[14,113226,113227],{},"分别读取末端点和目标点的世界坐标。",[18,113229,113230],{"className":20,"code":112902,"language":22,"meta":23,"style":23},[25,113231,113232],{"__ignoreMap":23},[28,113233,113234,113236],{"class":30,"line":31},[28,113235,17532],{"class":42},[28,113237,112362],{"class":34},[14,113239,113240],{},"把四部分拼成一个观测数组：",[18,113242,113245],{"className":113243,"code":113244,"language":5675,"meta":23},[5673],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[25,113246,113244],{"__ignoreMap":23},[18,113248,113250],{"className":20,"code":113249,"language":22,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\n",[25,113251,113252],{"__ignoreMap":23},[28,113253,113254,113256,113258,113260,113262],{"class":30,"line":31},[28,113255,111990],{"class":34},[28,113257,83],{"class":42},[28,113259,111995],{"class":34},[28,113261,445],{"class":42},[28,113263,112000],{"class":34},[14,113265,113266,113267,113270,113271,113274],{},"计算 tip 到 target 的距离。",[25,113268,113269],{},"tip - target"," 得到一个三维向量，",[25,113272,113273],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113276,15119],{},[18,113278,113281],{"className":113279,"code":113280,"language":5675,"meta":23},[5673],"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,113282,113280],{"__ignoreMap":23},[18,113284,113286],{"className":20,"code":113285,"language":22,"meta":23,"style":23},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[25,113287,113288],{"__ignoreMap":23},[28,113289,113290,113292,113294,113296,113298],{"class":30,"line":31},[28,113291,112937],{"class":34},[28,113293,83],{"class":42},[28,113295,112431],{"class":38},[28,113297,7006],{"class":42},[28,113299,112436],{"class":34},[14,113301,113302,113303,113306,113307,113310],{},"计算动作惩罚。",[25,113304,113305],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[25,113308,113309],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[18,113312,113314],{"className":20,"code":113313,"language":22,"meta":23,"style":23},"return float(-dist - control_cost)\n",[25,113315,113316],{"__ignoreMap":23},[28,113317,113318,113320,113322,113324,113326,113328,113330],{"class":30,"line":31},[28,113319,17532],{"class":42},[28,113321,110191],{"class":38},[28,113323,367],{"class":34},[28,113325,445],{"class":42},[28,113327,111990],{"class":34},[28,113329,445],{"class":42},[28,113331,112453],{"class":34},[14,113333,113334],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[18,113336,113337],{"className":20,"code":111197,"language":22,"meta":23,"style":23},[25,113338,113339],{"__ignoreMap":23},[28,113340,113341,113343,113345],{"class":30,"line":31},[28,113342,111204],{"class":34},[28,113344,83],{"class":42},[28,113346,105155],{"class":38},[14,113348,113349],{},"累计奖励变量，记录整个运行过程的总分。",[18,113351,113353],{"className":20,"code":113352,"language":22,"meta":23,"style":23},"for step in range(500):\n",[25,113354,113355],{"__ignoreMap":23},[28,113356,113357,113359,113361,113363,113365,113367,113369],{"class":30,"line":31},[28,113358,49],{"class":42},[28,113360,32095],{"class":34},[28,113362,55],{"class":42},[28,113364,364],{"class":38},[28,113366,367],{"class":34},[28,113368,65551],{"class":38},[28,113370,372],{"class":34},[14,113372,113373],{},"运行 500 个控制步。",[18,113375,113376],{"className":20,"code":104937,"language":22,"meta":23,"style":23},[25,113377,113378],{"__ignoreMap":23},[28,113379,113380],{"class":30,"line":31},[28,113381,104937],{"class":34},[14,113383,113384,113385,101412,113387,113389],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[25,113386,103625],{},[25,113388,103628],{}," 是当前状态下的坐标。",[18,113391,113393],{"className":20,"code":113392,"language":22,"meta":23,"style":23},"error = target - tip\n",[25,113394,113395],{"__ignoreMap":23},[28,113396,113397,113399,113401,113403,113405],{"class":30,"line":31},[28,113398,112990],{"class":34},[28,113400,83],{"class":42},[28,113402,112562],{"class":34},[28,113404,445],{"class":42},[28,113406,112567],{"class":34},[14,113408,113409],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[18,113411,113413],{"className":20,"code":113412,"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,113414,113415,113447],{"__ignoreMap":23},[28,113416,113417,113419,113421,113423,113425,113427,113429,113431,113433,113435,113437,113439,113441,113443,113445],{"class":30,"line":31},[28,113418,106265],{"class":34},[28,113420,822],{"class":38},[28,113422,4931],{"class":34},[28,113424,83],{"class":42},[28,113426,112584],{"class":34},[28,113428,105654],{"class":38},[28,113430,7006],{"class":42},[28,113432,112591],{"class":34},[28,113434,93],{"class":38},[28,113436,112596],{"class":34},[28,113438,445],{"class":42},[28,113440,102797],{"class":38},[28,113442,12921],{"class":34},[28,113444,102797],{"class":38},[28,113446,228],{"class":34},[28,113448,113449,113451,113453,113455,113457,113459,113461,113463,113465,113467,113469,113471,113473,113475,113477],{"class":30,"line":77},[28,113450,106265],{"class":34},[28,113452,39],{"class":38},[28,113454,4931],{"class":34},[28,113456,83],{"class":42},[28,113458,112584],{"class":34},[28,113460,105654],{"class":38},[28,113462,7006],{"class":42},[28,113464,112591],{"class":34},[28,113466,822],{"class":38},[28,113468,112596],{"class":34},[28,113470,445],{"class":42},[28,113472,102797],{"class":38},[28,113474,12921],{"class":34},[28,113476,102797],{"class":38},[28,113478,228],{"class":34},[14,113480,113481,113482,113485],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[25,113483,113484],{},"error -> ctrl -> step"," 的流程。",[18,113487,113488],{"className":20,"code":104899,"language":22,"meta":23,"style":23},[25,113489,113490],{"__ignoreMap":23},[28,113491,113492],{"class":30,"line":31},[28,113493,104899],{"class":34},[14,113495,113496],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[18,113498,113500],{"className":20,"code":113499,"language":22,"meta":23,"style":23},"obs = get_obs(model, data)\n",[25,113501,113502],{"__ignoreMap":23},[28,113503,113504,113506,113508],{"class":30,"line":31},[28,113505,111248],{"class":34},[28,113507,83],{"class":42},[28,113509,112685],{"class":34},[14,113511,113512,113513,113516],{},"读取最新观测。后面打印 ",[25,113514,113515],{},"obs.shape[0]","，用来确认观测维度是 10。",[60,113518,102710],{"id":102709},[14,113520,113521],{},"观测维度为:",[18,113523,113526],{"className":113524,"code":113525,"language":5675,"meta":23},[5673],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[25,113527,113525],{"__ignoreMap":23},[14,113529,113530],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113532,113533],{},"程序每 100 步打印：",[18,113535,113538],{"className":113536,"code":113537,"language":5675,"meta":23},[5673],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[25,113539,113537],{"__ignoreMap":23},[14,113541,113542,113543,113545],{},"如果控制有效，你应该看到最终 ",[25,113544,103625],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[60,113547,102742],{"id":102741},[588,113549,113550,113553,113556,113562,113568,113575,113585],{},[591,113551,113552],{},"修改目标点位置。",[591,113554,113555],{},"重新运行，观察最终 tip 是否变化。",[591,113557,113558,113559,113561],{},"把 gravity 改成 ",[25,113560,102983],{},"，观察控制是否变差。",[591,113563,111575,113564,111579,113566,28871],{},[25,113565,102552],{},[25,113567,93],{},[591,113569,102805,113570,102808,113572,113574],{},[25,113571,110990],{},[25,113573,107701],{},"，观察机械臂是否更难移动。",[591,113576,102805,113577,83007,113579,102808,113581,113584],{},[25,113578,103628],{},[25,113580,104540],{},[25,113582,113583],{},"0.2 0 0.6","，观察 reward 和 final tip。",[591,113586,113587],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[60,113589,102847],{"id":102846},[605,113591,113593],{"id":113592},"site-not-found",[25,113594,113595],{},"site not found",[14,113597,113598,113599,101412,113602,28871],{},"检查 XML 中是否有 ",[25,113600,113601],{},"site name=\"tip\"",[25,113603,113604],{},"site name=\"target\"",[605,113606,113607],{"id":113607},"机械臂完全不动",[14,113609,102917],{},[588,113611,113612,113617,113620,113625],{},[591,113613,113614,113616],{},[25,113615,102552],{}," 是否为 2",[591,113618,113619],{},"actuator 是否引用正确 joint",[591,113621,113622,113624],{},[25,113623,101470],{}," 是否被赋值",[591,113626,113627,113628],{},"是否执行了 ",[25,113629,101079],{},[605,113631,113632],{"id":113632},"控制效果不好",[14,113634,113635],{},"正常。本章重点不是控制器最优，而是任务结构:",[18,113637,113640],{"className":113638,"code":113639,"language":5675,"meta":23},[5673],"obs → action → mj_step → reward → next_obs\n",[25,113641,113639],{"__ignoreMap":23},[605,113643,113645],{"id":113644},"tip-坐标不变化","tip 坐标不变化",[14,113647,102969],{},[588,113649,113650,113655,113663,113672],{},[591,113651,113652,113653,28871],{},"是否每步调用了 ",[25,113654,101079],{},[591,113656,113657,113658,101412,113660,28871],{},"是否写入了 ",[25,113659,106520],{},[25,113661,113662],{},"data.ctrl[1]",[591,113664,113665,113666,843,113669,28871],{},"actuator 是否正确引用 ",[25,113667,113668],{},"joint1",[25,113670,113671],{},"joint2",[591,113673,113674],{},"控制输入是否太小。",[605,113676,113677],{"id":113677},"目标点不会动",[14,113679,113680],{},"本章的 target 是固定 site：",[18,113682,113684],{"className":53544,"code":113683,"language":53546,"meta":23,"style":23},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[25,113685,113686],{"__ignoreMap":23},[28,113687,113688,113690,113692,113694,113696,113698,113700,113702,113705],{"class":30,"line":31},[28,113689,1529],{"class":34},[28,113691,103604],{"class":51777},[28,113693,15406],{"class":2453},[28,113695,83],{"class":34},[28,113697,112353],{"class":735},[28,113699,101500],{"class":2453},[28,113701,83],{"class":34},[28,113703,113704],{"class":735},"\"0.5 0 0.4\"",[28,113706,113707],{"class":34}," ...\u002F>\n",[14,113709,113710,113711,113713],{},"它直接挂在 ",[25,113712,102235],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[605,113715,113716],{"id":113716},"机械臂不像真实机械臂",[14,113718,113719],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[60,113721,103001],{"id":103000},[14,113723,113724],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113726,113727],{},"核心公式：",[18,113729,113732],{"className":113730,"code":113731,"language":5675,"meta":23},[5673],"distance = ||tip - target||\nreward = -distance - action_cost\n",[25,113733,113731],{"__ignoreMap":23},[14,113735,113736],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[547,113738,113739],{},"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":77,"depth":77,"links":113741},[113742,113743,113744,113749,113753,113754,113755,113763],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":113745},[113746,113747,113748],{"id":111945,"depth":114,"text":111946},{"id":112021,"depth":114,"text":112021},{"id":112051,"depth":114,"text":112052},{"id":101646,"depth":77,"text":101647,"children":113750},[113751,113752],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":113756},[113757,113758,113759,113760,113761,113762],{"id":113592,"depth":114,"text":113595},{"id":113607,"depth":114,"text":113607},{"id":113632,"depth":114,"text":113632},{"id":113644,"depth":114,"text":113645},{"id":113677,"depth":114,"text":113677},{"id":113716,"depth":114,"text":113716},{"id":103000,"depth":77,"text":103001},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111749,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113770,"title":113771,"body":113772,"description":23,"extension":560,"meta":117234,"navigation":562,"path":117235,"seo":117236,"stem":117237,"__hash__":117238},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113773,"toc":117205},[113774,113777,113779,113782,113785,113810,113813,113819,113822,113828,113830,113832,113856,113858,113876,113878,113921,113923,113950,113952,113955,114007,114010,114016,114025,114028,114066,114069,114108,114111,114119,114126,114129,114135,114137,114191,114198,114243,114246,114250,114266,114276,114278,115539,115541,115553,115555,115566,115568,115571,115592,115595,115598,115631,115637,115640,115673,115676,115679,115720,115725,115739,115742,115755,115760,115783,115785,115800,115810,115825,115832,115852,115867,115885,115888,115905,115913,115929,115935,115967,115980,116012,116022,116057,116071,116117,116131,116173,116184,116197,116203,116236,116239,116266,116276,116316,116326,116343,116350,116368,116371,116412,116425,116440,116443,116466,116469,116481,116484,116503,116508,116529,116532,116547,116550,116584,116596,116611,116614,116639,116642,116661,116664,116696,116699,116723,116729,116759,116766,116779,116782,116784,116786,116792,116795,116798,116810,116813,116815,116869,116871,116875,116881,116890,116893,116900,116902,116925,116928,116932,116934,116952,116958,116960,116993,116996,117002,117006,117009,117029,117034,117038,117045,117065,117070,117074,117077,117097,117100,117186,117190,117193,117199,117202],[10,113775,113771],{"id":113776},"_8gymnasium-风格强化学习接口基础",[60,113778,101041],{"id":101040},[14,113780,113781],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113783,113784],{},"你将实现:",[18,113786,113788],{"className":20,"code":113787,"language":22,"meta":23,"style":23},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[25,113789,113790,113800],{"__ignoreMap":23},[28,113791,113792,113795,113797],{"class":30,"line":31},[28,113793,113794],{"class":34},"obs, info ",[28,113796,83],{"class":42},[28,113798,113799],{"class":34}," env.reset()\n",[28,113801,113802,113805,113807],{"class":30,"line":77},[28,113803,113804],{"class":34},"obs, reward, terminated, truncated, info ",[28,113806,83],{"class":42},[28,113808,113809],{"class":34}," env.step(action)\n",[14,113811,113812],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113814,113815,113816,113818],{},"前面章节的代码都是“脚本式”的：在 ",[25,113817,102689],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113820,113821],{},"可以先记住 Gymnasium 环境的核心交互：",[18,113823,113826],{"className":113824,"code":113825,"language":5675,"meta":23},[5673],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[25,113827,113825],{"__ignoreMap":23},[60,113829,101164],{"id":101163},[14,113831,101167],{},[18,113833,113834],{"className":24308,"code":104782,"language":24310,"meta":23,"style":23},[25,113835,113836],{"__ignoreMap":23},[28,113837,113838,113840,113842,113844,113846,113848,113850,113852,113854],{"class":30,"line":31},[28,113839,25063],{"class":2453},[28,113841,26801],{"class":735},[28,113843,24320],{"class":735},[28,113845,26886],{"class":38},[28,113847,104797],{"class":735},[28,113849,101192],{"class":735},[28,113851,102895],{"class":735},[28,113853,101208],{"class":735},[28,113855,104806],{"class":735},[14,113857,103213],{},[18,113859,113861],{"className":24308,"code":113860,"language":24310,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113862,113863],{"__ignoreMap":23},[28,113864,113865,113867,113869,113871,113873],{"class":30,"line":31},[28,113866,24317],{"class":2453},[28,113868,24320],{"class":735},[28,113870,101324],{"class":735},[28,113872,108105],{"class":735},[28,113874,113875],{"class":735}," gymnasium\n",[14,113877,103230],{},[18,113879,113881],{"className":24308,"code":113880,"language":24310,"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,113882,113883,113900,113909],{"__ignoreMap":23},[28,113884,113885,113887,113889,113891,113894,113896,113898],{"class":30,"line":31},[28,113886,30816],{"class":2453},[28,113888,29662],{"class":735},[28,113890,25602],{"class":38},[28,113892,113893],{"class":735}," mujoco-gym-api",[28,113895,101369],{"class":735},[28,113897,101372],{"class":38},[28,113899,101375],{"class":38},[28,113901,113902,113904,113906],{"class":30,"line":77},[28,113903,30816],{"class":2453},[28,113905,101382],{"class":735},[28,113907,113908],{"class":735}," mujoco-gym-api\n",[28,113910,113911,113913,113915,113917,113919],{"class":30,"line":114},[28,113912,24317],{"class":2453},[28,113914,24320],{"class":735},[28,113916,101324],{"class":735},[28,113918,108105],{"class":735},[28,113920,113875],{"class":735},[14,113922,101398],{},[588,113924,113925,113935,113938,113944],{},[591,113926,113927,113928,113931,113932,28871],{},"本章使用 ",[25,113929,113930],{},"gymnasium","，不是旧版 ",[25,113933,113934],{},"gym",[591,113936,113937],{},"Gymnasium API 与旧 Gym API 有差异。",[591,113939,113940,113941,28871],{},"旧 Gym 常见返回值是 4 个: ",[25,113942,113943],{},"obs, reward, done, info",[591,113945,113946,113947,28871],{},"Gymnasium 返回值是 5 个: ",[25,113948,113949],{},"obs, reward, terminated, truncated, info",[60,113951,101439],{"id":101438},[14,113953,113954],{},"强化学习环境接口包含:",[768,113956,113957,113966],{},[771,113958,113959],{},[774,113960,113961,113964],{},[777,113962,113963],{"align":24222},"方法",[777,113965,103090],{"align":24222},[815,113967,113968,113978,113988,113998],{},[774,113969,113970,113975],{},[820,113971,113972],{"align":24222},[25,113973,113974],{},"reset()",[820,113976,113977],{"align":24222},"重置环境",[774,113979,113980,113985],{},[820,113981,113982],{"align":24222},[25,113983,113984],{},"step(action)",[820,113986,113987],{"align":24222},"执行动作",[774,113989,113990,113995],{},[820,113991,113992],{"align":24222},[25,113993,113994],{},"observation_space",[820,113996,113997],{"align":24222},"观测空间",[774,113999,114000,114005],{},[820,114001,114002],{"align":24222},[25,114003,114004],{},"action_space",[820,114006,24140],{"align":24222},[14,114008,114009],{},"一个最小环境需要完成:",[18,114011,114014],{"className":114012,"code":114013,"language":5675,"meta":23},[5673],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[25,114015,114013],{"__ignoreMap":23},[605,114017,114019,101412,114022,105032],{"id":114018},"terminated-和-truncated-的区别",[25,114020,114021],{},"terminated",[25,114023,114024],{},"truncated",[14,114026,114027],{},"Gymnasium 把“结束”拆成两个概念：",[768,114029,114030,114040],{},[771,114031,114032],{},[774,114033,114034,114036,114038],{},[777,114035,104968],{"align":24222},[777,114037,101094],{"align":24222},[777,114039,21673],{"align":24222},[815,114041,114042,114054],{},[774,114043,114044,114048,114051],{},[820,114045,114046],{"align":24222},[25,114047,114021],{},[820,114049,114050],{"align":24222},"任务自然结束",[820,114052,114053],{"align":24222},"机械臂到达目标、机器人摔倒",[774,114055,114056,114060,114063],{},[820,114057,114058],{"align":24222},[25,114059,114024],{},[820,114061,114062],{"align":24222},"因外部限制截断",[820,114064,114065],{"align":24222},"达到最大步数、时间限制",[14,114067,114068],{},"本章中：",[18,114070,114072],{"className":20,"code":114071,"language":22,"meta":23,"style":23},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[25,114073,114074,114089],{"__ignoreMap":23},[28,114075,114076,114079,114081,114084,114086],{"class":30,"line":31},[28,114077,114078],{"class":34},"terminated ",[28,114080,83],{"class":42},[28,114082,114083],{"class":34}," dist ",[28,114085,1529],{"class":42},[28,114087,114088],{"class":38}," 0.05\n",[28,114090,114091,114094,114096,114098,114101,114103,114105],{"class":30,"line":77},[28,114092,114093],{"class":34},"truncated ",[28,114095,83],{"class":42},[28,114097,39350],{"class":38},[28,114099,114100],{"class":34},".steps ",[28,114102,2200],{"class":42},[28,114104,39350],{"class":38},[28,114106,114107],{"class":34},".max_steps\n",[14,114109,114110],{},"也就是：",[588,114112,114113,114116],{},[591,114114,114115],{},"末端距离目标小于 0.05，任务成功结束。",[591,114117,114118],{},"步数超过上限，episode 被截断。",[605,114120,114122,101412,114124],{"id":114121},"observation_space-和-action_space",[25,114123,113994],{},[25,114125,114004],{},[14,114127,114128],{},"这两个对象告诉算法：",[18,114130,114133],{"className":114131,"code":114132,"language":5675,"meta":23},[5673],"观测长什么样\n动作允许多大\n",[25,114134,114132],{"__ignoreMap":23},[14,114136,15119],{},[18,114138,114140],{"className":20,"code":114139,"language":22,"meta":23,"style":23},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[25,114141,114142],{"__ignoreMap":23},[28,114143,114144,114146,114149,114151,114154,114157,114160,114162,114164,114167,114169,114171,114173,114175,114177,114179,114181,114184,114186,114188],{"class":30,"line":31},[28,114145,31304],{"class":38},[28,114147,114148],{"class":34},".action_space ",[28,114150,83],{"class":42},[28,114152,114153],{"class":34}," spaces.Box(",[28,114155,114156],{"class":5704},"low",[28,114158,114159],{"class":42},"=-",[28,114161,102797],{"class":38},[28,114163,12921],{"class":34},[28,114165,114166],{"class":5704},"high",[28,114168,83],{"class":42},[28,114170,102797],{"class":38},[28,114172,12921],{"class":34},[28,114174,96434],{"class":5704},[28,114176,83],{"class":42},[28,114178,367],{"class":34},[28,114180,93],{"class":38},[28,114182,114183],{"class":34},",), ",[28,114185,93972],{"class":5704},[28,114187,83],{"class":42},[28,114189,114190],{"class":34},"np.float32)\n",[14,114192,114193,114194,114197],{},"表示动作是 2 维数组，每个值都在 ",[25,114195,114196],{},"[-1, 1]"," 范围内。",[18,114199,114201],{"className":20,"code":114200,"language":22,"meta":23,"style":23},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[25,114202,114203],{"__ignoreMap":23},[28,114204,114205,114207,114210,114212,114214,114216,114218,114221,114223,114225,114227,114229,114231,114233,114235,114237,114239,114241],{"class":30,"line":31},[28,114206,31304],{"class":38},[28,114208,114209],{"class":34},".observation_space ",[28,114211,83],{"class":42},[28,114213,114153],{"class":34},[28,114215,114156],{"class":5704},[28,114217,114159],{"class":42},[28,114219,114220],{"class":34},"np.inf, ",[28,114222,114166],{"class":5704},[28,114224,83],{"class":42},[28,114226,114220],{"class":34},[28,114228,96434],{"class":5704},[28,114230,83],{"class":42},[28,114232,367],{"class":34},[28,114234,225],{"class":38},[28,114236,114183],{"class":34},[28,114238,93972],{"class":5704},[28,114240,83],{"class":42},[28,114242,114190],{"class":34},[14,114244,114245],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[605,114247,114249],{"id":114248},"frame_skip-是什么","frame_skip 是什么",[18,114251,114253],{"className":20,"code":114252,"language":22,"meta":23,"style":23},"self.frame_skip = 5\n",[25,114254,114255],{"__ignoreMap":23},[28,114256,114257,114259,114262,114264],{"class":30,"line":31},[28,114258,31304],{"class":38},[28,114260,114261],{"class":34},".frame_skip ",[28,114263,83],{"class":42},[28,114265,54904],{"class":38},[14,114267,114268,114269,114272,114273,114275],{},"表示外部调用一次 ",[25,114270,114271],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[25,114274,101609],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[60,114277,101647],{"id":101646},[18,114279,114281],{"className":20,"code":114280,"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,114282,114283,114295,114301,114311,114322,114326,114330,114338,114343,114347,114351,114355,114359,114363,114367,114371,114376,114380,114384,114388,114393,114397,114401,114405,114409,114413,114417,114421,114425,114429,114433,114437,114441,114445,114463,114478,114482,114495,114505,114520,114537,114541,114562,114581,114606,114620,114624,114634,114646,114656,114660,114702,114740,114744,114754,114770,114785,114804,114811,114815,114828,114843,114858,114871,114890,114906,114910,114951,114966,114981,114985,115024,115035,115048,115052,115062,115071,115075,115085,115100,115118,115122,115133,115150,115163,115167,115177,115181,115192,115203,115207,115221,115235,115251,115255,115268,115285,115300,115307,115311,115315,115327,115337,115355,115367,115379,115383,115391,115407,115416,115425,115433,115475,115488,115493,115497,115515,115519,115523,115535],{"__ignoreMap":23},[28,114284,114285,114287,114290,114292],{"class":30,"line":31},[28,114286,536],{"class":42},[28,114288,114289],{"class":34}," gymnasium ",[28,114291,542],{"class":42},[28,114293,114294],{"class":34}," gym\n",[28,114296,114297,114299],{"class":30,"line":77},[28,114298,536],{"class":42},[28,114300,101695],{"class":34},[28,114302,114303,114305,114307,114309],{"class":30,"line":114},[28,114304,536],{"class":42},[28,114306,31861],{"class":34},[28,114308,542],{"class":42},[28,114310,31866],{"class":34},[28,114312,114313,114315,114317,114319],{"class":30,"line":128},[28,114314,530],{"class":42},[28,114316,114289],{"class":34},[28,114318,536],{"class":42},[28,114320,114321],{"class":34}," spaces\n",[28,114323,114324],{"class":30,"line":393},[28,114325,2890],{"emptyLinePlaceholder":562},[28,114327,114328],{"class":30,"line":409},[28,114329,2890],{"emptyLinePlaceholder":562},[28,114331,114332,114334,114336],{"class":30,"line":1711},[28,114333,101708],{"class":38},[28,114335,14050],{"class":42},[28,114337,101713],{"class":735},[28,114339,114340],{"class":30,"line":1802},[28,114341,114342],{"class":735},"\u003Cmujoco model=\"gym_reacher\">\n",[28,114344,114345],{"class":30,"line":1808},[28,114346,112132],{"class":735},[28,114348,114349],{"class":30,"line":1820},[28,114350,2890],{"emptyLinePlaceholder":562},[28,114352,114353],{"class":30,"line":2102},[28,114354,101732],{"class":735},[28,114356,114357],{"class":30,"line":2107},[28,114358,112150],{"class":735},[28,114360,114361],{"class":30,"line":2113},[28,114362,2890],{"emptyLinePlaceholder":562},[28,114364,114365],{"class":30,"line":2118},[28,114366,112159],{"class":735},[28,114368,114369],{"class":30,"line":2132},[28,114370,112164],{"class":735},[28,114372,114373],{"class":30,"line":2137},[28,114374,114375],{"class":735},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114377,114378],{"class":30,"line":2143},[28,114379,2890],{"emptyLinePlaceholder":562},[28,114381,114382],{"class":30,"line":2164},[28,114383,112178],{"class":735},[28,114385,114386],{"class":30,"line":2169},[28,114387,112183],{"class":735},[28,114389,114390],{"class":30,"line":2183},[28,114391,114392],{"class":735},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114394,114395],{"class":30,"line":2188},[28,114396,112193],{"class":735},[28,114398,114399],{"class":30,"line":2217},[28,114400,106832],{"class":735},[28,114402,114403],{"class":30,"line":2222},[28,114404,101761],{"class":735},[28,114406,114407],{"class":30,"line":2239},[28,114408,101766],{"class":735},[28,114410,114411],{"class":30,"line":2244},[28,114412,2890],{"emptyLinePlaceholder":562},[28,114414,114415],{"class":30,"line":2249},[28,114416,106849],{"class":735},[28,114418,114419],{"class":30,"line":2254},[28,114420,112218],{"class":735},[28,114422,114423],{"class":30,"line":2268},[28,114424,112223],{"class":735},[28,114426,114427],{"class":30,"line":2273},[28,114428,106859],{"class":735},[28,114430,114431],{"class":30,"line":3067},[28,114432,101771],{"class":735},[28,114434,114435],{"class":30,"line":3081},[28,114436,96169],{"class":735},[28,114438,114439],{"class":30,"line":3089},[28,114440,2890],{"emptyLinePlaceholder":562},[28,114442,114443],{"class":30,"line":3094},[28,114444,2890],{"emptyLinePlaceholder":562},[28,114446,114447,114449,114452,114454,114456,114458,114461],{"class":30,"line":3100},[28,114448,15180],{"class":42},[28,114450,114451],{"class":2453}," ReacherEnv",[28,114453,367],{"class":34},[28,114455,113934],{"class":2453},[28,114457,1179],{"class":34},[28,114459,114460],{"class":2453},"Env",[28,114462,372],{"class":34},[28,114464,114465,114468,114470,114472,114475],{"class":30,"line":3106},[28,114466,114467],{"class":34},"    metadata ",[28,114469,83],{"class":42},[28,114471,4936],{"class":34},[28,114473,114474],{"class":735},"\"render_modes\"",[28,114476,114477],{"class":34},": []}\n",[28,114479,114480],{"class":30,"line":3111},[28,114481,2890],{"emptyLinePlaceholder":562},[28,114483,114484,114486,114488,114491,114493],{"class":30,"line":8436},[28,114485,31282],{"class":42},[28,114487,31285],{"class":38},[28,114489,114490],{"class":34},"(self) -> ",[28,114492,96157],{"class":38},[28,114494,4227],{"class":34},[28,114496,114497,114499,114501,114503],{"class":30,"line":8460},[28,114498,31298],{"class":38},[28,114500,17747],{"class":34},[28,114502,31310],{"class":38},[28,114504,2466],{"class":34},[28,114506,114507,114509,114512,114514,114516,114518],{"class":30,"line":8465},[28,114508,31326],{"class":38},[28,114510,114511],{"class":34},".model ",[28,114513,83],{"class":42},[28,114515,101806],{"class":34},[28,114517,101708],{"class":38},[28,114519,228],{"class":34},[28,114521,114522,114524,114527,114529,114532,114534],{"class":30,"line":8471},[28,114523,31326],{"class":38},[28,114525,114526],{"class":34},".data ",[28,114528,83],{"class":42},[28,114530,114531],{"class":34}," mujoco.MjData(",[28,114533,31304],{"class":38},[28,114535,114536],{"class":34},".model)\n",[28,114538,114539],{"class":30,"line":8498},[28,114540,2890],{"emptyLinePlaceholder":562},[28,114542,114543,114545,114548,114550,114553,114555,114558,114560],{"class":30,"line":8503},[28,114544,31326],{"class":38},[28,114546,114547],{"class":34},".tip_site_id ",[28,114549,83],{"class":42},[28,114551,114552],{"class":34}," mujoco.mj_name2id(",[28,114554,31304],{"class":38},[28,114556,114557],{"class":34},".model, mujoco.mjtObj.mjOBJ_SITE, ",[28,114559,111930],{"class":735},[28,114561,228],{"class":34},[28,114563,114564,114566,114569,114571,114573,114575,114577,114579],{"class":30,"line":8509},[28,114565,31326],{"class":38},[28,114567,114568],{"class":34},".target_site_id ",[28,114570,83],{"class":42},[28,114572,114552],{"class":34},[28,114574,31304],{"class":38},[28,114576,114557],{"class":34},[28,114578,112353],{"class":735},[28,114580,228],{"class":34},[28,114582,114583,114585,114587,114589,114591,114593,114596,114598,114600,114602,114604],{"class":30,"line":8521},[28,114584,2987],{"class":42},[28,114586,39350],{"class":38},[28,114588,114547],{"class":34},[28,114590,1529],{"class":42},[28,114592,4581],{"class":38},[28,114594,114595],{"class":42}," or",[28,114597,39350],{"class":38},[28,114599,114568],{"class":34},[28,114601,1529],{"class":42},[28,114603,4581],{"class":38},[28,114605,4227],{"class":34},[28,114607,114608,114611,114613,114615,114618],{"class":30,"line":8533},[28,114609,114610],{"class":42},"            raise",[28,114612,103829],{"class":38},[28,114614,367],{"class":34},[28,114616,114617],{"class":735},"\"required sites not found\"",[28,114619,228],{"class":34},[28,114621,114622],{"class":30,"line":8545},[28,114623,2890],{"emptyLinePlaceholder":562},[28,114625,114626,114628,114630,114632],{"class":30,"line":10202},[28,114627,31326],{"class":38},[28,114629,114261],{"class":34},[28,114631,83],{"class":42},[28,114633,54904],{"class":38},[28,114635,114636,114638,114641,114643],{"class":30,"line":10227},[28,114637,31326],{"class":38},[28,114639,114640],{"class":34},".max_steps ",[28,114642,83],{"class":42},[28,114644,114645],{"class":38}," 200\n",[28,114647,114648,114650,114652,114654],{"class":30,"line":10250},[28,114649,31326],{"class":38},[28,114651,114100],{"class":34},[28,114653,83],{"class":42},[28,114655,47810],{"class":38},[28,114657,114658],{"class":30,"line":10274},[28,114659,2890],{"emptyLinePlaceholder":562},[28,114661,114662,114664,114666,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686,114688,114690,114692,114694,114696,114698,114700],{"class":30,"line":10279},[28,114663,31326],{"class":38},[28,114665,114148],{"class":34},[28,114667,83],{"class":42},[28,114669,114153],{"class":34},[28,114671,114156],{"class":5704},[28,114673,114159],{"class":42},[28,114675,102797],{"class":38},[28,114677,12921],{"class":34},[28,114679,114166],{"class":5704},[28,114681,83],{"class":42},[28,114683,102797],{"class":38},[28,114685,12921],{"class":34},[28,114687,96434],{"class":5704},[28,114689,83],{"class":42},[28,114691,367],{"class":34},[28,114693,93],{"class":38},[28,114695,114183],{"class":34},[28,114697,93972],{"class":5704},[28,114699,83],{"class":42},[28,114701,114190],{"class":34},[28,114703,114704,114706,114708,114710,114712,114714,114716,114718,114720,114722,114724,114726,114728,114730,114732,114734,114736,114738],{"class":30,"line":10284},[28,114705,31326],{"class":38},[28,114707,114209],{"class":34},[28,114709,83],{"class":42},[28,114711,114153],{"class":34},[28,114713,114156],{"class":5704},[28,114715,114159],{"class":42},[28,114717,114220],{"class":34},[28,114719,114166],{"class":5704},[28,114721,83],{"class":42},[28,114723,114220],{"class":34},[28,114725,96434],{"class":5704},[28,114727,83],{"class":42},[28,114729,367],{"class":34},[28,114731,225],{"class":38},[28,114733,114183],{"class":34},[28,114735,93972],{"class":5704},[28,114737,83],{"class":42},[28,114739,114190],{"class":34},[28,114741,114742],{"class":30,"line":10289},[28,114743,2890],{"emptyLinePlaceholder":562},[28,114745,114746,114748,114751],{"class":30,"line":10298},[28,114747,31282],{"class":42},[28,114749,114750],{"class":2453}," _get_obs",[28,114752,114753],{"class":34},"(self) -> np.ndarray:\n",[28,114755,114756,114758,114760,114762,114765,114767],{"class":30,"line":10303},[28,114757,112531],{"class":34},[28,114759,83],{"class":42},[28,114761,39350],{"class":38},[28,114763,114764],{"class":34},".data.site_xpos[",[28,114766,31304],{"class":38},[28,114768,114769],{"class":34},".tip_site_id].copy()\n",[28,114771,114772,114774,114776,114778,114780,114782],{"class":30,"line":10309},[28,114773,112544],{"class":34},[28,114775,83],{"class":42},[28,114777,39350],{"class":38},[28,114779,114764],{"class":34},[28,114781,31304],{"class":38},[28,114783,114784],{"class":34},".target_site_id].copy()\n",[28,114786,114787,114789,114791,114794,114796,114799,114801],{"class":30,"line":10330},[28,114788,110576],{"class":34},[28,114790,83],{"class":42},[28,114792,114793],{"class":34}," np.concatenate([",[28,114795,31304],{"class":38},[28,114797,114798],{"class":34},".data.qpos.copy(), ",[28,114800,31304],{"class":38},[28,114802,114803],{"class":34},".data.qvel.copy(), tip, target])\n",[28,114805,114806,114808],{"class":30,"line":10336},[28,114807,15238],{"class":42},[28,114809,114810],{"class":34}," obs.astype(np.float32)\n",[28,114812,114813],{"class":30,"line":10350},[28,114814,2890],{"emptyLinePlaceholder":562},[28,114816,114817,114819,114822,114824,114826],{"class":30,"line":10356},[28,114818,31282],{"class":42},[28,114820,114821],{"class":2453}," _get_reward",[28,114823,114490],{"class":34},[28,114825,675],{"class":38},[28,114827,4227],{"class":34},[28,114829,114830,114832,114834,114836,114838,114840],{"class":30,"line":10383},[28,114831,112531],{"class":34},[28,114833,83],{"class":42},[28,114835,39350],{"class":38},[28,114837,114764],{"class":34},[28,114839,31304],{"class":38},[28,114841,114842],{"class":34},".tip_site_id]\n",[28,114844,114845,114847,114849,114851,114853,114855],{"class":30,"line":10392},[28,114846,112544],{"class":34},[28,114848,83],{"class":42},[28,114850,39350],{"class":38},[28,114852,114764],{"class":34},[28,114854,31304],{"class":38},[28,114856,114857],{"class":34},".target_site_id]\n",[28,114859,114860,114863,114865,114867,114869],{"class":30,"line":10398},[28,114861,114862],{"class":34},"        dist ",[28,114864,83],{"class":42},[28,114866,111995],{"class":34},[28,114868,445],{"class":42},[28,114870,112000],{"class":34},[28,114872,114873,114876,114878,114880,114882,114885,114887],{"class":30,"line":10406},[28,114874,114875],{"class":34},"        control_cost ",[28,114877,83],{"class":42},[28,114879,112431],{"class":38},[28,114881,7006],{"class":42},[28,114883,114884],{"class":34}," np.sum(np.square(",[28,114886,31304],{"class":38},[28,114888,114889],{"class":34},".data.ctrl))\n",[28,114891,114892,114894,114896,114898,114900,114902,114904],{"class":30,"line":10411},[28,114893,15238],{"class":42},[28,114895,110191],{"class":38},[28,114897,367],{"class":34},[28,114899,445],{"class":42},[28,114901,111990],{"class":34},[28,114903,445],{"class":42},[28,114905,112453],{"class":34},[28,114907,114908],{"class":30,"line":17090},[28,114909,2890],{"emptyLinePlaceholder":562},[28,114911,114912,114914,114917,114920,114922,114925,114927,114929,114931,114933,114935,114938,114941,114943,114945,114947,114949],{"class":30,"line":17096},[28,114913,31282],{"class":42},[28,114915,114916],{"class":2453}," reset",[28,114918,114919],{"class":34},"(self, ",[28,114921,256],{"class":42},[28,114923,114924],{"class":34},", seed: ",[28,114926,640],{"class":38},[28,114928,25596],{"class":42},[28,114930,39410],{"class":38},[28,114932,14050],{"class":42},[28,114934,39410],{"class":38},[28,114936,114937],{"class":34},", options: ",[28,114939,114940],{"class":38},"dict",[28,114942,25596],{"class":42},[28,114944,39410],{"class":38},[28,114946,14050],{"class":42},[28,114948,39410],{"class":38},[28,114950,372],{"class":34},[28,114952,114953,114955,114958,114961,114963],{"class":30,"line":17119},[28,114954,31298],{"class":38},[28,114956,114957],{"class":34},"().reset(",[28,114959,114960],{"class":5704},"seed",[28,114962,83],{"class":42},[28,114964,114965],{"class":34},"seed)\n",[28,114967,114968,114971,114973,114976,114978],{"class":30,"line":17125},[28,114969,114970],{"class":34},"        mujoco.mj_resetData(",[28,114972,31304],{"class":38},[28,114974,114975],{"class":34},".model, ",[28,114977,31304],{"class":38},[28,114979,114980],{"class":34},".data)\n",[28,114982,114983],{"class":30,"line":17148},[28,114984,2890],{"emptyLinePlaceholder":562},[28,114986,114987,114989,114992,114994,114996,114999,115001,115003,115005,115007,115009,115011,115013,115015,115017,115019,115021],{"class":30,"line":17162},[28,114988,31326],{"class":38},[28,114990,114991],{"class":34},".data.qpos[:] ",[28,114993,83],{"class":42},[28,114995,39350],{"class":38},[28,114997,114998],{"class":34},".np_random.uniform(",[28,115000,114156],{"class":5704},[28,115002,114159],{"class":42},[28,115004,86687],{"class":38},[28,115006,12921],{"class":34},[28,115008,114166],{"class":5704},[28,115010,83],{"class":42},[28,115012,86687],{"class":38},[28,115014,12921],{"class":34},[28,115016,31975],{"class":5704},[28,115018,83],{"class":42},[28,115020,31304],{"class":38},[28,115022,115023],{"class":34},".model.nq)\n",[28,115025,115026,115028,115031,115033],{"class":30,"line":17182},[28,115027,31326],{"class":38},[28,115029,115030],{"class":34},".data.qvel[:] ",[28,115032,83],{"class":42},[28,115034,105155],{"class":38},[28,115036,115037,115040,115042,115044,115046],{"class":30,"line":17188},[28,115038,115039],{"class":34},"        mujoco.mj_forward(",[28,115041,31304],{"class":38},[28,115043,114975],{"class":34},[28,115045,31304],{"class":38},[28,115047,114980],{"class":34},[28,115049,115050],{"class":30,"line":17199},[28,115051,2890],{"emptyLinePlaceholder":562},[28,115053,115054,115056,115058,115060],{"class":30,"line":17222},[28,115055,31326],{"class":38},[28,115057,114100],{"class":34},[28,115059,83],{"class":42},[28,115061,47810],{"class":38},[28,115063,115064,115066,115068],{"class":30,"line":17244},[28,115065,15238],{"class":42},[28,115067,39350],{"class":38},[28,115069,115070],{"class":34},"._get_obs(), {}\n",[28,115072,115073],{"class":30,"line":17249},[28,115074,2890],{"emptyLinePlaceholder":562},[28,115076,115077,115079,115082],{"class":30,"line":17255},[28,115078,31282],{"class":42},[28,115080,115081],{"class":2453}," step",[28,115083,115084],{"class":34},"(self, action):\n",[28,115086,115087,115089,115091,115094,115096,115098],{"class":30,"line":17269},[28,115088,110616],{"class":34},[28,115090,83],{"class":42},[28,115092,115093],{"class":34}," np.asarray(action, ",[28,115095,93972],{"class":5704},[28,115097,83],{"class":42},[28,115099,114190],{"class":34},[28,115101,115102,115104,115106,115108,115110,115113,115115],{"class":30,"line":17282},[28,115103,110616],{"class":34},[28,115105,83],{"class":42},[28,115107,107841],{"class":34},[28,115109,31304],{"class":38},[28,115111,115112],{"class":34},".action_space.low, ",[28,115114,31304],{"class":38},[28,115116,115117],{"class":34},".action_space.high)\n",[28,115119,115120],{"class":30,"line":17287},[28,115121,2890],{"emptyLinePlaceholder":562},[28,115123,115124,115126,115129,115131],{"class":30,"line":17301},[28,115125,31326],{"class":38},[28,115127,115128],{"class":34},".data.ctrl[:] ",[28,115130,83],{"class":42},[28,115132,107864],{"class":34},[28,115134,115135,115137,115139,115141,115143,115145,115147],{"class":30,"line":17306},[28,115136,3891],{"class":42},[28,115138,101895],{"class":34},[28,115140,55],{"class":42},[28,115142,364],{"class":38},[28,115144,367],{"class":34},[28,115146,31304],{"class":38},[28,115148,115149],{"class":34},".frame_skip):\n",[28,115151,115152,115155,115157,115159,115161],{"class":30,"line":17312},[28,115153,115154],{"class":34},"            mujoco.mj_step(",[28,115156,31304],{"class":38},[28,115158,114975],{"class":34},[28,115160,31304],{"class":38},[28,115162,114980],{"class":34},[28,115164,115165],{"class":30,"line":17317},[28,115166,2890],{"emptyLinePlaceholder":562},[28,115168,115169,115171,115173,115175],{"class":30,"line":17331},[28,115170,31326],{"class":38},[28,115172,114100],{"class":34},[28,115174,9964],{"class":42},[28,115176,56176],{"class":38},[28,115178,115179],{"class":30,"line":17336},[28,115180,2890],{"emptyLinePlaceholder":562},[28,115182,115183,115185,115187,115189],{"class":30,"line":17341},[28,115184,110576],{"class":34},[28,115186,83],{"class":42},[28,115188,39350],{"class":38},[28,115190,115191],{"class":34},"._get_obs()\n",[28,115193,115194,115196,115198,115200],{"class":30,"line":17355},[28,115195,110681],{"class":34},[28,115197,83],{"class":42},[28,115199,39350],{"class":38},[28,115201,115202],{"class":34},"._get_reward()\n",[28,115204,115205],{"class":30,"line":17367},[28,115206,2890],{"emptyLinePlaceholder":562},[28,115208,115209,115211,115213,115215,115217,115219],{"class":30,"line":17372},[28,115210,112531],{"class":34},[28,115212,83],{"class":42},[28,115214,39350],{"class":38},[28,115216,114764],{"class":34},[28,115218,31304],{"class":38},[28,115220,114842],{"class":34},[28,115222,115223,115225,115227,115229,115231,115233],{"class":30,"line":17385},[28,115224,112544],{"class":34},[28,115226,83],{"class":42},[28,115228,39350],{"class":38},[28,115230,114764],{"class":34},[28,115232,31304],{"class":38},[28,115234,114857],{"class":34},[28,115236,115237,115239,115241,115243,115246,115248],{"class":30,"line":17390},[28,115238,114862],{"class":34},[28,115240,83],{"class":42},[28,115242,110191],{"class":38},[28,115244,115245],{"class":34},"(np.linalg.norm(tip ",[28,115247,445],{"class":42},[28,115249,115250],{"class":34}," target))\n",[28,115252,115253],{"class":30,"line":17395},[28,115254,2890],{"emptyLinePlaceholder":562},[28,115256,115257,115260,115262,115264,115266],{"class":30,"line":17400},[28,115258,115259],{"class":34},"        terminated ",[28,115261,83],{"class":42},[28,115263,114083],{"class":34},[28,115265,1529],{"class":42},[28,115267,114088],{"class":38},[28,115269,115270,115273,115275,115277,115279,115281,115283],{"class":30,"line":17413},[28,115271,115272],{"class":34},"        truncated ",[28,115274,83],{"class":42},[28,115276,39350],{"class":38},[28,115278,114100],{"class":34},[28,115280,2200],{"class":42},[28,115282,39350],{"class":38},[28,115284,114107],{"class":34},[28,115286,115287,115290,115292,115294,115297],{"class":30,"line":17418},[28,115288,115289],{"class":34},"        info ",[28,115291,83],{"class":42},[28,115293,4936],{"class":34},[28,115295,115296],{"class":735},"\"distance\"",[28,115298,115299],{"class":34},": dist}\n",[28,115301,115302,115304],{"class":30,"line":33111},[28,115303,15238],{"class":42},[28,115305,115306],{"class":34}," obs, reward, terminated, truncated, info\n",[28,115308,115309],{"class":30,"line":33117},[28,115310,2890],{"emptyLinePlaceholder":562},[28,115312,115313],{"class":30,"line":33123},[28,115314,2890],{"emptyLinePlaceholder":562},[28,115316,115317,115319,115321,115323,115325],{"class":30,"line":33129},[28,115318,32426],{"class":42},[28,115320,2463],{"class":2453},[28,115322,101792],{"class":34},[28,115324,96157],{"class":38},[28,115326,4227],{"class":34},[28,115328,115329,115332,115334],{"class":30,"line":33135},[28,115330,115331],{"class":34},"    env ",[28,115333,83],{"class":42},[28,115335,115336],{"class":34}," ReacherEnv()\n",[28,115338,115339,115342,115344,115347,115349,115351,115353],{"class":30,"line":33146},[28,115340,115341],{"class":34},"    obs, info ",[28,115343,83],{"class":42},[28,115345,115346],{"class":34}," env.reset(",[28,115348,114960],{"class":5704},[28,115350,83],{"class":42},[28,115352,822],{"class":38},[28,115354,228],{"class":34},[28,115356,115357,115359,115361,115364],{"class":30,"line":33152},[28,115358,31780],{"class":38},[28,115360,367],{"class":34},[28,115362,115363],{"class":735},"\"initial obs shape:\"",[28,115365,115366],{"class":34},", obs.shape)\n",[28,115368,115369,115371,115373,115376],{"class":30,"line":33172},[28,115370,31780],{"class":38},[28,115372,367],{"class":34},[28,115374,115375],{"class":735},"\"initial info:\"",[28,115377,115378],{"class":34},", info)\n",[28,115380,115381],{"class":30,"line":33178},[28,115382,2890],{"emptyLinePlaceholder":562},[28,115384,115385,115387,115389],{"class":30,"line":33189},[28,115386,110547],{"class":34},[28,115388,83],{"class":42},[28,115390,105155],{"class":38},[28,115392,115393,115395,115397,115399,115401,115403,115405],{"class":30,"line":33195},[28,115394,377],{"class":42},[28,115396,32095],{"class":34},[28,115398,55],{"class":42},[28,115400,364],{"class":38},[28,115402,367],{"class":34},[28,115404,1320],{"class":38},[28,115406,372],{"class":34},[28,115408,115409,115411,115413],{"class":30,"line":33201},[28,115410,110616],{"class":34},[28,115412,83],{"class":42},[28,115414,115415],{"class":34}," env.action_space.sample()\n",[28,115417,115418,115421,115423],{"class":30,"line":33207},[28,115419,115420],{"class":34},"        obs, reward, terminated, truncated, info ",[28,115422,83],{"class":42},[28,115424,113809],{"class":34},[28,115426,115427,115429,115431],{"class":30,"line":33213},[28,115428,110691],{"class":34},[28,115430,9964],{"class":42},[28,115432,110696],{"class":34},[28,115434,115435,115437,115439,115441,115443,115446,115448,115450,115453,115455,115457,115460,115462,115464,115467,115469,115471,115473],{"class":30,"line":33219},[28,115436,32929],{"class":38},[28,115438,367],{"class":34},[28,115440,110725],{"class":735},[28,115442,110728],{"class":34},[28,115444,115445],{"class":735},"\"reward:\"",[28,115447,12921],{"class":34},[28,115449,32497],{"class":38},[28,115451,115452],{"class":34},"(reward, ",[28,115454,98],{"class":38},[28,115456,110739],{"class":34},[28,115458,115459],{"class":735},"\"distance:\"",[28,115461,12921],{"class":34},[28,115463,32497],{"class":38},[28,115465,115466],{"class":34},"(info[",[28,115468,115296],{"class":735},[28,115470,112596],{"class":34},[28,115472,98],{"class":38},[28,115474,30980],{"class":34},[28,115476,115477,115479,115482,115485],{"class":30,"line":33225},[28,115478,2987],{"class":42},[28,115480,115481],{"class":34}," terminated ",[28,115483,115484],{"class":42},"or",[28,115486,115487],{"class":34}," truncated:\n",[28,115489,115490],{"class":30,"line":33231},[28,115491,115492],{"class":42},"            break\n",[28,115494,115495],{"class":30,"line":33251},[28,115496,2890],{"emptyLinePlaceholder":562},[28,115498,115499,115501,115503,115505,115507,115509,115511,115513],{"class":30,"line":33257},[28,115500,31780],{"class":38},[28,115502,367],{"class":34},[28,115504,110770],{"class":735},[28,115506,12921],{"class":34},[28,115508,32497],{"class":38},[28,115510,110777],{"class":34},[28,115512,98],{"class":38},[28,115514,30980],{"class":34},[28,115516,115517],{"class":30,"line":33273},[28,115518,2890],{"emptyLinePlaceholder":562},[28,115520,115521],{"class":30,"line":33279},[28,115522,2890],{"emptyLinePlaceholder":562},[28,115524,115525,115527,115529,115531,115533],{"class":30,"line":33293},[28,115526,2021],{"class":42},[28,115528,31701],{"class":38},[28,115530,101953],{"class":42},[28,115532,101956],{"class":735},[28,115534,4227],{"class":34},[28,115536,115537],{"class":30,"line":33299},[28,115538,101963],{"class":34},[14,115540,103964],{},[18,115542,115544],{"className":24308,"code":115543,"language":24310,"meta":23,"style":23},"touch ch8_gym_env.py\n",[25,115545,115546],{"__ignoreMap":23},[28,115547,115548,115550],{"class":30,"line":31},[28,115549,101677],{"class":2453},[28,115551,115552],{"class":735}," ch8_gym_env.py\n",[14,115554,110838],{},[18,115556,115558],{"className":24308,"code":115557,"language":24310,"meta":23,"style":23},"python ch8_gym_env.py\n",[25,115559,115560],{"__ignoreMap":23},[28,115561,115562,115564],{"class":30,"line":31},[28,115563,22],{"class":2453},[28,115565,115552],{"class":735},[605,115567,101966],{"id":101966},[14,115569,115570],{},"继承 Gymnasium 环境：",[18,115572,115574],{"className":20,"code":115573,"language":22,"meta":23,"style":23},"class ReacherEnv(gym.Env):\n",[25,115575,115576],{"__ignoreMap":23},[28,115577,115578,115580,115582,115584,115586,115588,115590],{"class":30,"line":31},[28,115579,15180],{"class":42},[28,115581,114451],{"class":2453},[28,115583,367],{"class":34},[28,115585,113934],{"class":2453},[28,115587,1179],{"class":34},[28,115589,114460],{"class":2453},[28,115591,372],{"class":34},[14,115593,115594],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115596,115597],{},"初始化模型：",[18,115599,115601],{"className":20,"code":115600,"language":22,"meta":23,"style":23},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[25,115602,115603,115617],{"__ignoreMap":23},[28,115604,115605,115607,115609,115611,115613,115615],{"class":30,"line":31},[28,115606,31304],{"class":38},[28,115608,114511],{"class":34},[28,115610,83],{"class":42},[28,115612,101806],{"class":34},[28,115614,101708],{"class":38},[28,115616,228],{"class":34},[28,115618,115619,115621,115623,115625,115627,115629],{"class":30,"line":77},[28,115620,31304],{"class":38},[28,115622,114526],{"class":34},[28,115624,83],{"class":42},[28,115626,114531],{"class":34},[28,115628,31304],{"class":38},[28,115630,114536],{"class":34},[14,115632,115633,115634,115636],{},"这和前面章节一样，只是现在放到了类的 ",[25,115635,31310],{}," 里。",[14,115638,115639],{},"缓存 site ID：",[18,115641,115643],{"className":20,"code":115642,"language":22,"meta":23,"style":23},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[25,115644,115645,115659],{"__ignoreMap":23},[28,115646,115647,115649,115651,115653,115655,115657],{"class":30,"line":31},[28,115648,31304],{"class":38},[28,115650,114547],{"class":34},[28,115652,83],{"class":42},[28,115654,114552],{"class":34},[28,115656,90031],{"class":38},[28,115658,228],{"class":34},[28,115660,115661,115663,115665,115667,115669,115671],{"class":30,"line":77},[28,115662,31304],{"class":38},[28,115664,114568],{"class":34},[28,115666,83],{"class":42},[28,115668,114552],{"class":34},[28,115670,90031],{"class":38},[28,115672,228],{"class":34},[14,115674,115675],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115677,115678],{},"reset：",[18,115680,115682],{"className":20,"code":115681,"language":22,"meta":23,"style":23},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[25,115683,115684],{"__ignoreMap":23},[28,115685,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718],{"class":30,"line":31},[28,115687,32426],{"class":42},[28,115689,114916],{"class":2453},[28,115691,114919],{"class":34},[28,115693,256],{"class":42},[28,115695,114924],{"class":34},[28,115697,640],{"class":38},[28,115699,25596],{"class":42},[28,115701,39410],{"class":38},[28,115703,14050],{"class":42},[28,115705,39410],{"class":38},[28,115707,114937],{"class":34},[28,115709,114940],{"class":38},[28,115711,25596],{"class":42},[28,115713,39410],{"class":38},[28,115715,14050],{"class":42},[28,115717,39410],{"class":38},[28,115719,372],{"class":34},[14,115721,115722,115724],{},[25,115723,70533],{}," 做四件事：",[588,115726,115727,115730,115733,115736],{},[591,115728,115729],{},"设置随机种子。",[591,115731,115732],{},"重置 MuJoCo data。",[591,115734,115735],{},"随机初始化关节角。",[591,115737,115738],{},"返回初始观测和 info。",[14,115740,115741],{},"step：",[18,115743,115745],{"className":20,"code":115744,"language":22,"meta":23,"style":23},"def step(self, action):\n",[25,115746,115747],{"__ignoreMap":23},[28,115748,115749,115751,115753],{"class":30,"line":31},[28,115750,32426],{"class":42},[28,115752,115081],{"class":2453},[28,115754,115084],{"class":34},[14,115756,115757,115759],{},[25,115758,107528],{}," 做六件事：",[588,115761,115762,115765,115771,115774,115777,115780],{},[591,115763,115764],{},"检查并裁剪 action。",[591,115766,115767,115768,28871],{},"写入 ",[25,115769,115770],{},"self.data.ctrl",[591,115772,115773],{},"连续推进若干个 MuJoCo 物理步。",[591,115775,115776],{},"计算新观测。",[591,115778,115779],{},"计算奖励和结束条件。",[591,115781,115782],{},"返回 Gymnasium 标准五元组。",[605,115784,102102],{"id":102102},[18,115786,115788],{"className":20,"code":115787,"language":22,"meta":23,"style":23},"import gymnasium as gym\n",[25,115789,115790],{"__ignoreMap":23},[28,115791,115792,115794,115796,115798],{"class":30,"line":31},[28,115793,536],{"class":42},[28,115795,114289],{"class":34},[28,115797,542],{"class":42},[28,115799,114294],{"class":34},[14,115801,115802,115803,115805,115806,115809],{},"导入 Gymnasium，并起别名 ",[25,115804,113934],{},"。后面写 ",[25,115807,115808],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[18,115811,115813],{"className":20,"code":115812,"language":22,"meta":23,"style":23},"from gymnasium import spaces\n",[25,115814,115815],{"__ignoreMap":23},[28,115816,115817,115819,115821,115823],{"class":30,"line":31},[28,115818,530],{"class":42},[28,115820,114289],{"class":34},[28,115822,536],{"class":42},[28,115824,114321],{"class":34},[14,115826,115827,115828,115831],{},"导入空间定义工具。",[25,115829,115830],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[18,115833,115834],{"className":20,"code":115573,"language":22,"meta":23,"style":23},[25,115835,115836],{"__ignoreMap":23},[28,115837,115838,115840,115842,115844,115846,115848,115850],{"class":30,"line":31},[28,115839,15180],{"class":42},[28,115841,114451],{"class":2453},[28,115843,367],{"class":34},[28,115845,113934],{"class":2453},[28,115847,1179],{"class":34},[28,115849,114460],{"class":2453},[28,115851,372],{"class":34},[14,115853,115854,115855,115858,115859,115861,115862,101412,115864,115866],{},"定义一个类，名字叫 ",[25,115856,115857],{},"ReacherEnv","。括号里的 ",[25,115860,115808],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[25,115863,70533],{},[25,115865,107528],{}," 这两个核心方法。",[18,115868,115870],{"className":20,"code":115869,"language":22,"meta":23,"style":23},"metadata = {\"render_modes\": []}\n",[25,115871,115872],{"__ignoreMap":23},[28,115873,115874,115877,115879,115881,115883],{"class":30,"line":31},[28,115875,115876],{"class":34},"metadata ",[28,115878,83],{"class":42},[28,115880,4936],{"class":34},[28,115882,114474],{"class":735},[28,115884,114477],{"class":34},[14,115886,115887],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[18,115889,115891],{"className":20,"code":115890,"language":22,"meta":23,"style":23},"def __init__(self) -> None:\n",[25,115892,115893],{"__ignoreMap":23},[28,115894,115895,115897,115899,115901,115903],{"class":30,"line":31},[28,115896,32426],{"class":42},[28,115898,31285],{"class":38},[28,115900,114490],{"class":34},[28,115902,96157],{"class":38},[28,115904,4227],{"class":34},[14,115906,115907,115909,115910,28871],{},[25,115908,31310],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[25,115911,115912],{},"env = ReacherEnv()",[18,115914,115916],{"className":20,"code":115915,"language":22,"meta":23,"style":23},"super().__init__()\n",[25,115917,115918],{"__ignoreMap":23},[28,115919,115920,115923,115925,115927],{"class":30,"line":31},[28,115921,115922],{"class":38},"super",[28,115924,17747],{"class":34},[28,115926,31310],{"class":38},[28,115928,2466],{"class":34},[14,115930,115931,115932,115934],{},"调用父类 ",[25,115933,115808],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[18,115936,115937],{"className":20,"code":115600,"language":22,"meta":23,"style":23},[25,115938,115939,115953],{"__ignoreMap":23},[28,115940,115941,115943,115945,115947,115949,115951],{"class":30,"line":31},[28,115942,31304],{"class":38},[28,115944,114511],{"class":34},[28,115946,83],{"class":42},[28,115948,101806],{"class":34},[28,115950,101708],{"class":38},[28,115952,228],{"class":34},[28,115954,115955,115957,115959,115961,115963,115965],{"class":30,"line":77},[28,115956,31304],{"class":38},[28,115958,114526],{"class":34},[28,115960,83],{"class":42},[28,115962,114531],{"class":34},[28,115964,31304],{"class":38},[28,115966,114536],{"class":34},[14,115968,115969,115970,115972,115973,101412,115976,115979],{},"把 MuJoCo 模型和状态保存到 ",[25,115971,31304],{}," 上。",[25,115974,115975],{},"self.model",[25,115977,115978],{},"self.data"," 表示这个环境对象自己的模型和状态。",[18,115981,115982],{"className":20,"code":115642,"language":22,"meta":23,"style":23},[25,115983,115984,115998],{"__ignoreMap":23},[28,115985,115986,115988,115990,115992,115994,115996],{"class":30,"line":31},[28,115987,31304],{"class":38},[28,115989,114547],{"class":34},[28,115991,83],{"class":42},[28,115993,114552],{"class":34},[28,115995,90031],{"class":38},[28,115997,228],{"class":34},[28,115999,116000,116002,116004,116006,116008,116010],{"class":30,"line":77},[28,116001,31304],{"class":38},[28,116003,114568],{"class":34},[28,116005,83],{"class":42},[28,116007,114552],{"class":34},[28,116009,90031],{"class":38},[28,116011,228],{"class":34},[14,116013,116014,116015,101412,116018,116021],{},"提前查好 tip 和 target 的 site ID。这样 ",[25,116016,116017],{},"_get_obs",[25,116019,116020],{},"_get_reward"," 里就不用每次按名字查找。",[18,116023,116025],{"className":20,"code":116024,"language":22,"meta":23,"style":23},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[25,116026,116027,116037,116047],{"__ignoreMap":23},[28,116028,116029,116031,116033,116035],{"class":30,"line":31},[28,116030,31304],{"class":38},[28,116032,114261],{"class":34},[28,116034,83],{"class":42},[28,116036,54904],{"class":38},[28,116038,116039,116041,116043,116045],{"class":30,"line":77},[28,116040,31304],{"class":38},[28,116042,114640],{"class":34},[28,116044,83],{"class":42},[28,116046,114645],{"class":38},[28,116048,116049,116051,116053,116055],{"class":30,"line":114},[28,116050,31304],{"class":38},[28,116052,114100],{"class":34},[28,116054,83],{"class":42},[28,116056,47810],{"class":38},[14,116058,116059,116062,116063,116066,116067,116070],{},[25,116060,116061],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[25,116064,116065],{},"max_steps"," 是一个 episode 最多运行多少步。",[25,116068,116069],{},"steps"," 记录当前 episode 已经走了多少步。",[18,116072,116073],{"className":20,"code":114139,"language":22,"meta":23,"style":23},[25,116074,116075],{"__ignoreMap":23},[28,116076,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113,116115],{"class":30,"line":31},[28,116078,31304],{"class":38},[28,116080,114148],{"class":34},[28,116082,83],{"class":42},[28,116084,114153],{"class":34},[28,116086,114156],{"class":5704},[28,116088,114159],{"class":42},[28,116090,102797],{"class":38},[28,116092,12921],{"class":34},[28,116094,114166],{"class":5704},[28,116096,83],{"class":42},[28,116098,102797],{"class":38},[28,116100,12921],{"class":34},[28,116102,96434],{"class":5704},[28,116104,83],{"class":42},[28,116106,367],{"class":34},[28,116108,93],{"class":38},[28,116110,114183],{"class":34},[28,116112,93972],{"class":5704},[28,116114,83],{"class":42},[28,116116,114190],{"class":34},[14,116118,116119,116120,116123,116124,101412,116127,116130],{},"定义动作空间。",[25,116121,116122],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[25,116125,116126],{},"low=-1.0",[25,116128,116129],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[18,116132,116133],{"className":20,"code":114200,"language":22,"meta":23,"style":23},[25,116134,116135],{"__ignoreMap":23},[28,116136,116137,116139,116141,116143,116145,116147,116149,116151,116153,116155,116157,116159,116161,116163,116165,116167,116169,116171],{"class":30,"line":31},[28,116138,31304],{"class":38},[28,116140,114209],{"class":34},[28,116142,83],{"class":42},[28,116144,114153],{"class":34},[28,116146,114156],{"class":5704},[28,116148,114159],{"class":42},[28,116150,114220],{"class":34},[28,116152,114166],{"class":5704},[28,116154,83],{"class":42},[28,116156,114220],{"class":34},[28,116158,96434],{"class":5704},[28,116160,83],{"class":42},[28,116162,367],{"class":34},[28,116164,225],{"class":38},[28,116166,114183],{"class":34},[28,116168,93972],{"class":5704},[28,116170,83],{"class":42},[28,116172,114190],{"class":34},[14,116174,116175,116176,116179,116180,116183],{},"定义观测空间。",[25,116177,116178],{},"shape=(10,)"," 表示观测是 10 个数。",[25,116181,116182],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[18,116185,116187],{"className":20,"code":116186,"language":22,"meta":23,"style":23},"def _get_obs(self) -> np.ndarray:\n",[25,116188,116189],{"__ignoreMap":23},[28,116190,116191,116193,116195],{"class":30,"line":31},[28,116192,32426],{"class":42},[28,116194,114750],{"class":2453},[28,116196,114753],{"class":34},[14,116198,116199,116200,116202],{},"定义内部函数，用来生成观测。函数名前面的 ",[25,116201,1611],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[18,116204,116206],{"className":20,"code":116205,"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,116207,116208,116222],{"__ignoreMap":23},[28,116209,116210,116212,116214,116216,116218,116220],{"class":30,"line":31},[28,116211,111962],{"class":34},[28,116213,83],{"class":42},[28,116215,39350],{"class":38},[28,116217,114764],{"class":34},[28,116219,31304],{"class":38},[28,116221,114769],{"class":34},[28,116223,116224,116226,116228,116230,116232,116234],{"class":30,"line":77},[28,116225,111972],{"class":34},[28,116227,83],{"class":42},[28,116229,39350],{"class":38},[28,116231,114764],{"class":34},[28,116233,31304],{"class":38},[28,116235,114784],{"class":34},[14,116237,116238],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[18,116240,116242],{"className":20,"code":116241,"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,116243,116244,116260],{"__ignoreMap":23},[28,116245,116246,116248,116250,116252,116254,116256,116258],{"class":30,"line":31},[28,116247,111248],{"class":34},[28,116249,83],{"class":42},[28,116251,114793],{"class":34},[28,116253,31304],{"class":38},[28,116255,114798],{"class":34},[28,116257,31304],{"class":38},[28,116259,114803],{"class":34},[28,116261,116262,116264],{"class":30,"line":77},[28,116263,17532],{"class":42},[28,116265,114810],{"class":34},[14,116267,116268,116269,116272,116273,116275],{},"拼接观测，并转换成 ",[25,116270,116271],{},"float32","。很多强化学习库默认使用 ",[25,116274,116271],{},"，所以这里主动转换。",[18,116277,116278],{"className":20,"code":115681,"language":22,"meta":23,"style":23},[25,116279,116280],{"__ignoreMap":23},[28,116281,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314],{"class":30,"line":31},[28,116283,32426],{"class":42},[28,116285,114916],{"class":2453},[28,116287,114919],{"class":34},[28,116289,256],{"class":42},[28,116291,114924],{"class":34},[28,116293,640],{"class":38},[28,116295,25596],{"class":42},[28,116297,39410],{"class":38},[28,116299,14050],{"class":42},[28,116301,39410],{"class":38},[28,116303,114937],{"class":34},[28,116305,114940],{"class":38},[28,116307,25596],{"class":42},[28,116309,39410],{"class":38},[28,116311,14050],{"class":42},[28,116313,39410],{"class":38},[28,116315,372],{"class":34},[14,116317,116318,116319,116321,116322,116325],{},"定义 reset。",[25,116320,114960],{}," 用来控制随机数，保证实验可以复现。",[25,116323,116324],{},"options"," 用来接收额外配置，本章暂时不用。",[18,116327,116329],{"className":20,"code":116328,"language":22,"meta":23,"style":23},"super().reset(seed=seed)\n",[25,116330,116331],{"__ignoreMap":23},[28,116332,116333,116335,116337,116339,116341],{"class":30,"line":31},[28,116334,115922],{"class":38},[28,116336,114957],{"class":34},[28,116338,114960],{"class":5704},[28,116340,83],{"class":42},[28,116342,114965],{"class":34},[14,116344,116345,116346,116349],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[25,116347,116348],{},"self.np_random"," 生成可复现的随机数。",[18,116351,116353],{"className":20,"code":116352,"language":22,"meta":23,"style":23},"mujoco.mj_resetData(self.model, self.data)\n",[25,116354,116355],{"__ignoreMap":23},[28,116356,116357,116360,116362,116364,116366],{"class":30,"line":31},[28,116358,116359],{"class":34},"mujoco.mj_resetData(",[28,116361,31304],{"class":38},[28,116363,114975],{"class":34},[28,116365,31304],{"class":38},[28,116367,114980],{"class":34},[14,116369,116370],{},"把 MuJoCo 状态重置到默认状态。",[18,116372,116374],{"className":20,"code":116373,"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,116375,116376],{"__ignoreMap":23},[28,116377,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396,116398,116400,116402,116404,116406,116408,116410],{"class":30,"line":31},[28,116379,31304],{"class":38},[28,116381,114991],{"class":34},[28,116383,83],{"class":42},[28,116385,39350],{"class":38},[28,116387,114998],{"class":34},[28,116389,114156],{"class":5704},[28,116391,114159],{"class":42},[28,116393,86687],{"class":38},[28,116395,12921],{"class":34},[28,116397,114166],{"class":5704},[28,116399,83],{"class":42},[28,116401,86687],{"class":38},[28,116403,12921],{"class":34},[28,116405,31975],{"class":5704},[28,116407,83],{"class":42},[28,116409,31304],{"class":38},[28,116411,115023],{"class":34},[14,116413,115735,116414,116417,116418,116421,116422,116424],{},[25,116415,116416],{},"[:]"," 表示修改整个数组。",[25,116419,116420],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[25,116423,102544],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[18,116426,116428],{"className":20,"code":116427,"language":22,"meta":23,"style":23},"self.data.qvel[:] = 0.0\n",[25,116429,116430],{"__ignoreMap":23},[28,116431,116432,116434,116436,116438],{"class":30,"line":31},[28,116433,31304],{"class":38},[28,116435,115030],{"class":34},[28,116437,83],{"class":42},[28,116439,105155],{"class":38},[14,116441,116442],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[18,116444,116446],{"className":20,"code":116445,"language":22,"meta":23,"style":23},"self.steps = 0\nreturn self._get_obs(), {}\n",[25,116447,116448,116458],{"__ignoreMap":23},[28,116449,116450,116452,116454,116456],{"class":30,"line":31},[28,116451,31304],{"class":38},[28,116453,114100],{"class":34},[28,116455,83],{"class":42},[28,116457,47810],{"class":38},[28,116459,116460,116462,116464],{"class":30,"line":77},[28,116461,17532],{"class":42},[28,116463,39350],{"class":38},[28,116465,115070],{"class":34},[14,116467,116468],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[18,116470,116471],{"className":20,"code":115744,"language":22,"meta":23,"style":23},[25,116472,116473],{"__ignoreMap":23},[28,116474,116475,116477,116479],{"class":30,"line":31},[28,116476,32426],{"class":42},[28,116478,115081],{"class":2453},[28,116480,115084],{"class":34},[14,116482,116483],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[18,116485,116487],{"className":20,"code":116486,"language":22,"meta":23,"style":23},"action = np.asarray(action, dtype=np.float32)\n",[25,116488,116489],{"__ignoreMap":23},[28,116490,116491,116493,116495,116497,116499,116501],{"class":30,"line":31},[28,116492,107836],{"class":34},[28,116494,83],{"class":42},[28,116496,115093],{"class":34},[28,116498,93972],{"class":5704},[28,116500,83],{"class":42},[28,116502,114190],{"class":34},[14,116504,116505,116506,28871],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[25,116507,116271],{},[18,116509,116511],{"className":20,"code":116510,"language":22,"meta":23,"style":23},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[25,116512,116513],{"__ignoreMap":23},[28,116514,116515,116517,116519,116521,116523,116525,116527],{"class":30,"line":31},[28,116516,107836],{"class":34},[28,116518,83],{"class":42},[28,116520,107841],{"class":34},[28,116522,31304],{"class":38},[28,116524,115112],{"class":34},[28,116526,31304],{"class":38},[28,116528,115117],{"class":34},[14,116530,116531],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[18,116533,116535],{"className":20,"code":116534,"language":22,"meta":23,"style":23},"self.data.ctrl[:] = action\n",[25,116536,116537],{"__ignoreMap":23},[28,116538,116539,116541,116543,116545],{"class":30,"line":31},[28,116540,31304],{"class":38},[28,116542,115128],{"class":34},[28,116544,83],{"class":42},[28,116546,107864],{"class":34},[14,116548,116549],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[18,116551,116553],{"className":20,"code":116552,"language":22,"meta":23,"style":23},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[25,116554,116555,116571],{"__ignoreMap":23},[28,116556,116557,116559,116561,116563,116565,116567,116569],{"class":30,"line":31},[28,116558,49],{"class":42},[28,116560,101895],{"class":34},[28,116562,55],{"class":42},[28,116564,364],{"class":38},[28,116566,367],{"class":34},[28,116568,31304],{"class":38},[28,116570,115149],{"class":34},[28,116572,116573,116576,116578,116580,116582],{"class":30,"line":77},[28,116574,116575],{"class":34},"    mujoco.mj_step(",[28,116577,31304],{"class":38},[28,116579,114975],{"class":34},[28,116581,31304],{"class":38},[28,116583,114980],{"class":34},[14,116585,116586,116587,116590,116591,116593,116594,28871],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[25,116588,116589],{},"frame_skip=5","，所以外部调用一次 ",[25,116592,114271],{},"，内部实际执行 5 次 ",[25,116595,101609],{},[18,116597,116599],{"className":20,"code":116598,"language":22,"meta":23,"style":23},"self.steps += 1\n",[25,116600,116601],{"__ignoreMap":23},[28,116602,116603,116605,116607,116609],{"class":30,"line":31},[28,116604,31304],{"class":38},[28,116606,114100],{"class":34},[28,116608,9964],{"class":42},[28,116610,56176],{"class":38},[14,116612,116613],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[18,116615,116617],{"className":20,"code":116616,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nreward = self._get_reward()\n",[25,116618,116619,116629],{"__ignoreMap":23},[28,116620,116621,116623,116625,116627],{"class":30,"line":31},[28,116622,111248],{"class":34},[28,116624,83],{"class":42},[28,116626,39350],{"class":38},[28,116628,115191],{"class":34},[28,116630,116631,116633,116635,116637],{"class":30,"line":77},[28,116632,111399],{"class":34},[28,116634,83],{"class":42},[28,116636,39350],{"class":38},[28,116638,115202],{"class":34},[14,116640,116641],{},"计算新的观测和奖励。",[18,116643,116645],{"className":20,"code":116644,"language":22,"meta":23,"style":23},"dist = float(np.linalg.norm(tip - target))\n",[25,116646,116647],{"__ignoreMap":23},[28,116648,116649,116651,116653,116655,116657,116659],{"class":30,"line":31},[28,116650,111990],{"class":34},[28,116652,83],{"class":42},[28,116654,110191],{"class":38},[28,116656,115245],{"class":34},[28,116658,445],{"class":42},[28,116660,115250],{"class":34},[14,116662,116663],{},"计算末端到目标的距离，并转换成 Python float。",[18,116665,116666],{"className":20,"code":114071,"language":22,"meta":23,"style":23},[25,116667,116668,116680],{"__ignoreMap":23},[28,116669,116670,116672,116674,116676,116678],{"class":30,"line":31},[28,116671,114078],{"class":34},[28,116673,83],{"class":42},[28,116675,114083],{"class":34},[28,116677,1529],{"class":42},[28,116679,114088],{"class":38},[28,116681,116682,116684,116686,116688,116690,116692,116694],{"class":30,"line":77},[28,116683,114093],{"class":34},[28,116685,83],{"class":42},[28,116687,39350],{"class":38},[28,116689,114100],{"class":34},[28,116691,2200],{"class":42},[28,116693,39350],{"class":38},[28,116695,114107],{"class":34},[14,116697,116698],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[18,116700,116702],{"className":20,"code":116701,"language":22,"meta":23,"style":23},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[25,116703,116704,116717],{"__ignoreMap":23},[28,116705,116706,116709,116711,116713,116715],{"class":30,"line":31},[28,116707,116708],{"class":34},"info ",[28,116710,83],{"class":42},[28,116712,4936],{"class":34},[28,116714,115296],{"class":735},[28,116716,115299],{"class":34},[28,116718,116719,116721],{"class":30,"line":77},[28,116720,17532],{"class":42},[28,116722,115306],{"class":34},[14,116724,116725,116728],{},[25,116726,116727],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[18,116730,116732],{"className":20,"code":116731,"language":22,"meta":23,"style":23},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[25,116733,116734,116743],{"__ignoreMap":23},[28,116735,116736,116739,116741],{"class":30,"line":31},[28,116737,116738],{"class":34},"env ",[28,116740,83],{"class":42},[28,116742,115336],{"class":34},[28,116744,116745,116747,116749,116751,116753,116755,116757],{"class":30,"line":77},[28,116746,113794],{"class":34},[28,116748,83],{"class":42},[28,116750,115346],{"class":34},[28,116752,114960],{"class":5704},[28,116754,83],{"class":42},[28,116756,822],{"class":38},[28,116758,228],{"class":34},[14,116760,116761,116762,116765],{},"创建环境并重置。",[25,116763,116764],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[18,116767,116769],{"className":20,"code":116768,"language":22,"meta":23,"style":23},"action = env.action_space.sample()\n",[25,116770,116771],{"__ignoreMap":23},[28,116772,116773,116775,116777],{"class":30,"line":31},[28,116774,107836],{"class":34},[28,116776,83],{"class":42},[28,116778,115415],{"class":34},[14,116780,116781],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[60,116783,102710],{"id":102709},[14,116785,105878],{},[18,116787,116790],{"className":116788,"code":116789,"language":5675,"meta":23},[5673],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[25,116791,116789],{"__ignoreMap":23},[14,116793,116794],{},"这个环境已经具备强化学习环境的基本结构。",[14,116796,116797],{},"主函数里使用随机动作：",[18,116799,116800],{"className":20,"code":116768,"language":22,"meta":23,"style":23},[25,116801,116802],{"__ignoreMap":23},[28,116803,116804,116806,116808],{"class":30,"line":31},[28,116805,107836],{"class":34},[28,116807,83],{"class":42},[28,116809,115415],{"class":34},[14,116811,116812],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[60,116814,102742],{"id":102741},[588,116816,116817,116820,116826,116835,116844,116853,116859],{},[591,116818,116819],{},"运行程序。",[591,116821,116822,116823,28871],{},"确认 ",[25,116824,116825],{},"obs.shape == (10,)",[591,116827,111575,116828,116831,116832,28871],{},[25,116829,116830],{},"env.action_space","，应类似 ",[25,116833,116834],{},"Box(-1.0, 1.0, (2,), float32)",[591,116836,105979,116837,116840,116841,28871],{},[25,116838,116839],{},"self.max_steps = 10","，确认环境会更快 ",[25,116842,116843],{},"truncated=True",[591,116845,102805,116846,102808,116849,116852],{},[25,116847,116848],{},"terminated = dist \u003C 0.05",[25,116850,116851],{},"dist \u003C 0.2","，观察是否更容易结束。",[591,116854,102805,116855,116858],{},[25,116856,116857],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[591,116860,116861,116862,116864,116865,116868],{},"在 ",[25,116863,116727],{}," 里加入 ",[25,116866,116867],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[60,116870,102847],{"id":102846},[605,116872,116874],{"id":116873},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116876,116877,116878,116880],{},"Gymnasium 的 ",[25,116879,107528],{}," 返回 5 个值:",[18,116882,116884],{"className":20,"code":116883,"language":22,"meta":23,"style":23},"obs, reward, terminated, truncated, info\n",[25,116885,116886],{"__ignoreMap":23},[28,116887,116888],{"class":30,"line":31},[28,116889,116883],{"class":34},[14,116891,116892],{},"不是旧 Gym 的 4 个值。",[605,116894,116896,116899],{"id":116895},"datactrl-action-维度错误",[25,116897,116898],{},"data.ctrl[:] = action"," 维度错误",[14,116901,102917],{},[18,116903,116905],{"className":20,"code":116904,"language":22,"meta":23,"style":23},"print(self.model.nu)\nprint(action.shape)\n",[25,116906,116907,116918],{"__ignoreMap":23},[28,116908,116909,116911,116913,116915],{"class":30,"line":31},[28,116910,30898],{"class":38},[28,116912,367],{"class":34},[28,116914,31304],{"class":38},[28,116916,116917],{"class":34},".model.nu)\n",[28,116919,116920,116922],{"class":30,"line":77},[28,116921,30898],{"class":38},[28,116923,116924],{"class":34},"(action.shape)\n",[14,116926,116927],{},"两者必须匹配。",[605,116929,116931],{"id":116930},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116933,102856],{},[18,116935,116937],{"className":20,"code":116936,"language":22,"meta":23,"style":23},"mujoco.mj_forward(self.model, self.data)\n",[25,116938,116939],{"__ignoreMap":23},[28,116940,116941,116944,116946,116948,116950],{"class":30,"line":31},[28,116942,116943],{"class":34},"mujoco.mj_forward(",[28,116945,31304],{"class":38},[28,116947,114975],{"class":34},[28,116949,31304],{"class":38},[28,116951,114980],{"class":34},[605,116953,116955,116957],{"id":116954},"observation_space-维度和-obs-不一致",[25,116956,113994],{}," 维度和 obs 不一致",[14,116959,102969],{},[18,116961,116963],{"className":20,"code":116962,"language":22,"meta":23,"style":23},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[25,116964,116965,116975,116982],{"__ignoreMap":23},[28,116966,116967,116969,116971,116973],{"class":30,"line":31},[28,116968,111248],{"class":34},[28,116970,83],{"class":42},[28,116972,39350],{"class":38},[28,116974,115191],{"class":34},[28,116976,116977,116979],{"class":30,"line":77},[28,116978,30898],{"class":38},[28,116980,116981],{"class":34},"(obs.shape)\n",[28,116983,116984,116986,116988,116990],{"class":30,"line":114},[28,116985,30898],{"class":38},[28,116987,367],{"class":34},[28,116989,31304],{"class":38},[28,116991,116992],{"class":34},".observation_space.shape)\n",[14,116994,116995],{},"两者必须一致。本章观测是：",[18,116997,117000],{"className":116998,"code":116999,"language":5675,"meta":23},[5673],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[25,117001,116999],{"__ignoreMap":23},[605,117003,117005],{"id":117004},"action-超过范围","action 超过范围",[14,117007,117008],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[18,117010,117011],{"className":20,"code":116510,"language":22,"meta":23,"style":23},[25,117012,117013],{"__ignoreMap":23},[28,117014,117015,117017,117019,117021,117023,117025,117027],{"class":30,"line":31},[28,117016,107836],{"class":34},[28,117018,83],{"class":42},[28,117020,107841],{"class":34},[28,117022,31304],{"class":38},[28,117024,115112],{"class":34},[28,117026,31304],{"class":38},[28,117028,115117],{"class":34},[14,117030,117031,117032,28871],{},"这能避免无效动作直接写入 ",[25,117033,101470],{},[605,117035,117037],{"id":117036},"忘记返回-info","忘记返回 info",[14,117039,116877,117040,101412,117042,117044],{},[25,117041,70533],{},[25,117043,107528],{}," 都会返回 info：",[18,117046,117047],{"className":20,"code":113787,"language":22,"meta":23,"style":23},[25,117048,117049,117057],{"__ignoreMap":23},[28,117050,117051,117053,117055],{"class":30,"line":31},[28,117052,113794],{"class":34},[28,117054,83],{"class":42},[28,117056,113799],{"class":34},[28,117058,117059,117061,117063],{"class":30,"line":77},[28,117060,113804],{"class":34},[28,117062,83],{"class":42},[28,117064,113809],{"class":34},[14,117066,117067,117068,28871],{},"即使暂时没有额外信息，也返回 ",[25,117069,32937],{},[60,117071,117073],{"id":117072},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117075,117076],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[588,117078,117079,117082,117085,117088,117091,117094],{},[591,117080,117081],{},"更稳定的 reward。",[591,117083,117084],{},"合理的 episode 长度。",[591,117086,117087],{},"可重复的随机目标采样。",[591,117089,117090],{},"render 接口。",[591,117092,117093],{},"环境注册代码。",[591,117095,117096],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117098,117099],{},"如果只是自己写训练循环，最小形式是：",[18,117101,117103],{"className":20,"code":117102,"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,117104,117105,117113,117129,117133,117149,117158,117167,117177],{"__ignoreMap":23},[28,117106,117107,117109,117111],{"class":30,"line":31},[28,117108,116738],{"class":34},[28,117110,83],{"class":42},[28,117112,115336],{"class":34},[28,117114,117115,117117,117119,117121,117123,117125,117127],{"class":30,"line":77},[28,117116,113794],{"class":34},[28,117118,83],{"class":42},[28,117120,115346],{"class":34},[28,117122,114960],{"class":5704},[28,117124,83],{"class":42},[28,117126,822],{"class":38},[28,117128,228],{"class":34},[28,117130,117131],{"class":30,"line":114},[28,117132,2890],{"emptyLinePlaceholder":562},[28,117134,117135,117137,117139,117141,117143,117145,117147],{"class":30,"line":128},[28,117136,49],{"class":42},[28,117138,101895],{"class":34},[28,117140,55],{"class":42},[28,117142,364],{"class":38},[28,117144,367],{"class":34},[28,117146,6898],{"class":38},[28,117148,372],{"class":34},[28,117150,117151,117154,117156],{"class":30,"line":393},[28,117152,117153],{"class":34},"    action ",[28,117155,83],{"class":42},[28,117157,115415],{"class":34},[28,117159,117160,117163,117165],{"class":30,"line":409},[28,117161,117162],{"class":34},"    obs, reward, terminated, truncated, info ",[28,117164,83],{"class":42},[28,117166,113809],{"class":34},[28,117168,117169,117171,117173,117175],{"class":30,"line":1711},[28,117170,3590],{"class":42},[28,117172,115481],{"class":34},[28,117174,115484],{"class":42},[28,117176,115487],{"class":34},[28,117178,117179,117182,117184],{"class":30,"line":1802},[28,117180,117181],{"class":34},"        obs, info ",[28,117183,83],{"class":42},[28,117185,113799],{"class":34},[60,117187,117189],{"id":117188},"_9本章小结","9.本章小结",[14,117191,117192],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[18,117194,117197],{"className":117195,"code":117196,"language":5675,"meta":23},[5673],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[25,117198,117196],{"__ignoreMap":23},[14,117200,117201],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[547,117203,117204],{},"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":77,"depth":77,"links":117206},[117207,117208,117209,117216,117220,117221,117222,117232,117233],{"id":101040,"depth":77,"text":101041},{"id":101163,"depth":77,"text":101164},{"id":101438,"depth":77,"text":101439,"children":117210},[117211,117213,117215],{"id":114018,"depth":114,"text":117212},"terminated 和 truncated 的区别",{"id":114121,"depth":114,"text":117214},"observation_space 和 action_space",{"id":114248,"depth":114,"text":114249},{"id":101646,"depth":77,"text":101647,"children":117217},[117218,117219],{"id":101966,"depth":114,"text":101966},{"id":102102,"depth":114,"text":102102},{"id":102709,"depth":77,"text":102710},{"id":102741,"depth":77,"text":102742},{"id":102846,"depth":77,"text":102847,"children":117223},[117224,117225,117227,117228,117230,117231],{"id":116873,"depth":114,"text":116874},{"id":116895,"depth":114,"text":117226},"data.ctrl[:] = action 维度错误",{"id":116930,"depth":114,"text":116931},{"id":116954,"depth":114,"text":117229},"observation_space 维度和 obs 不一致",{"id":117004,"depth":114,"text":117005},{"id":117036,"depth":114,"text":117037},{"id":117072,"depth":77,"text":117073},{"id":117188,"depth":77,"text":117189},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113771,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117240,"title":117241,"body":117242,"description":117665,"extension":560,"meta":117666,"navigation":562,"path":117667,"seo":117668,"stem":117669,"__hash__":117670},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117243,"toc":117655},[117244,117248,117251,117254,117274,117280,117286,117296,117299,117302,117322,117325,117329,117332,117338,117341,117355,117358,117361,117435,117438,117444,117447,117470,117473,117523,117526,117532,117535,117538,117541,117560,117563,117569,117572,117575,117578,117598,117601,117604,117607,117652],[10,117245,117247],{"id":117246},"mujoco-学习","MuJoCo 学习",[14,117249,117250],{},"初版",[14,117252,117253],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[588,117255,117256,117259,117262,117271],{},[591,117257,117258],{},"MuJoCo 模型文件在描述什么。",[591,117260,117261],{},"Python 代码怎样读取和推进仿真。",[591,117263,117264,843,117266,843,117268,117270],{},[25,117265,104424],{},[25,117267,104754],{},[25,117269,104757],{}," 这些数组为什么重要。",[591,117272,117273],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117275,117276,117277,117279],{},"默认环境为 Fedora 44、Python >= 3.10、",[25,117278,101421],{}," 官方 Python bindings。",[14,117281,117282,117283,117285],{},"注意：本文禁止使用 ",[25,117284,101406],{},"。所有示例均使用：",[18,117287,117288],{"className":20,"code":101972,"language":22,"meta":23,"style":23},[25,117289,117290],{"__ignoreMap":23},[28,117291,117292,117294],{"class":30,"line":31},[28,117293,536],{"class":42},[28,117295,101695],{"class":34},[60,117297,117298],{"id":117298},"适合谁阅读",[14,117300,117301],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[588,117303,117304,117307,117310,117313],{},[591,117305,117306],{},"没学过 MuJoCo，只会一点 Python。",[591,117308,117309],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[591,117311,117312],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[591,117314,117315,117316,117318,117319,117321],{},"以前接触过 ",[25,117317,101406],{},"，现在想迁移到官方 ",[25,117320,101415],{}," Python bindings。",[14,117323,117324],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[60,117326,117328],{"id":117327},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117330,117331],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[18,117333,117336],{"className":117334,"code":117335,"language":5675,"meta":23},[5673],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[25,117337,117335],{"__ignoreMap":23},[14,117339,117340],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[588,117342,117343,117346,117349,117352],{},[591,117344,117345],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[591,117347,117348],{},"快速测试控制算法，不必一开始就上真实机器人。",[591,117350,117351],{},"生成强化学习环境。",[591,117353,117354],{},"采集状态、动作、图像、奖励等训练数据。",[60,117356,117357],{"id":117357},"学习前的心智模型",[14,117359,117360],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[768,117362,117363,117375],{},[771,117364,117365],{},[774,117366,117367,117370,117373],{},[777,117368,117369],{"align":24222},"部分",[777,117371,117372],{"align":24222},"负责什么",[777,117374,21673],{"align":24222},[815,117376,117377,117388,117400,117412,117424],{},[774,117378,117379,117382,117385],{},[820,117380,117381],{"align":24222},"MJCF XML",[820,117383,117384],{"align":24222},"定义世界和机器人结构",[820,117386,117387],{"align":24222},"地面、盒子、关节、电机、摄像头",[774,117389,117390,117394,117397],{},[820,117391,117392],{"align":24222},[25,117393,101103],{},[820,117395,117396],{"align":24222},"编译后的静态模型",[820,117398,117399],{"align":24222},"有几个关节、有几个电机、时间步长是多少",[774,117401,117402,117406,117409],{},[820,117403,117404],{"align":24222},[25,117405,101113],{},[820,117407,117408],{"align":24222},"运行中的动态状态",[820,117410,117411],{"align":24222},"当前时间、位置、速度、电机输入",[774,117413,117414,117418,117421],{},[820,117415,117416],{"align":24222},[25,117417,101609],{},[820,117419,117420],{"align":24222},"推进一步物理仿真",[820,117422,117423],{"align":24222},"根据重力、力、碰撞更新状态",[774,117425,117426,117429,117432],{},[820,117427,117428],{"align":24222},"Viewer \u002F Renderer",[820,117430,117431],{"align":24222},"把仿真显示出来",[820,117433,117434],{"align":24222},"打开窗口或保存图片",[14,117436,117437],{},"一句话总结：",[18,117439,117442],{"className":117440,"code":117441,"language":5675,"meta":23},[5673],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[25,117443,117441],{"__ignoreMap":23},[14,117445,117446],{},"参考来源：",[1626,117448,117449,117456,117463],{},[591,117450,117451,117452],{},"MuJoCo Python 官方文档：",[80,117453,117454],{"href":117454,"rel":117455},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24351],[591,117457,117458,117459],{},"MuJoCo XML Reference：",[80,117460,117461],{"href":117461,"rel":117462},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24351],[591,117464,117465,117466],{},"MuJoCo Overview：",[80,117467,117468],{"href":117468,"rel":117469},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24351],[60,117471,117472],{"id":117472},"章节目录",[588,117474,117475,117481,117487,117493,117499,117505,117511,117517],{},[591,117476,117477],{},[80,117478,117480],{"href":117479},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[591,117482,117483],{},[80,117484,117486],{"href":117485},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[591,117488,117489],{},[80,117490,117492],{"href":117491},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[591,117494,117495],{},[80,117496,117498],{"href":117497},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[591,117500,117501],{},[80,117502,117504],{"href":117503},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[591,117506,117507],{},[80,117508,117510],{"href":117509},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[591,117512,117513],{},[80,117514,117516],{"href":117515},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[591,117518,117519],{},[80,117520,117522],{"href":117521},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[60,117524,117525],{"id":117525},"推荐学习路线",[18,117527,117530],{"className":117528,"code":117529,"language":5675,"meta":23},[5673],"环境安装\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,117531,117529],{"__ignoreMap":23},[14,117533,117534],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[60,117536,117537],{"id":117537},"建议的目录结构",[14,117539,117540],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[18,117542,117544],{"className":24308,"code":117543,"language":24310,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[25,117545,117546,117554],{"__ignoreMap":23},[28,117547,117548,117550,117552],{"class":30,"line":31},[28,117549,101660],{"class":2453},[28,117551,29702],{"class":38},[28,117553,101665],{"class":735},[28,117555,117556,117558],{"class":30,"line":77},[28,117557,101670],{"class":38},[28,117559,101665],{"class":735},[14,117561,117562],{},"每一章的代码都单独保存：",[18,117564,117567],{"className":117565,"code":117566,"language":5675,"meta":23},[5673],"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,117568,117566],{"__ignoreMap":23},[14,117570,117571],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[60,117573,117574],{"id":117574},"学习方法",[14,117576,117577],{},"每章建议按这个顺序操作：",[588,117579,117580,117583,117586,117589,117592,117595],{},[591,117581,117582],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[591,117584,117585],{},"复制最小可运行代码，保存成指定文件。",[591,117587,117588],{},"运行代码，确认没有报错。",[591,117590,117591],{},"对照“运行结果说明”理解输出。",[591,117593,117594],{},"做“验证步骤”，主动改一两个参数。",[591,117596,117597],{},"遇到报错先看“常见错误与解决方案”。",[14,117599,117600],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[60,117602,117603],{"id":117603},"全局排错顺序",[14,117605,117606],{},"遇到问题时，按下面顺序查：",[588,117608,117609,117615,117621,117626,117629,117632,117639,117649],{},[591,117610,117611,117612],{},"Python 环境是否激活：",[25,117613,117614],{},"which python",[591,117616,117617,117618],{},"MuJoCo 是否能导入：",[25,117619,117620],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[591,117622,117623,117624],{},"是否误装了 ",[25,117625,101406],{},[591,117627,117628],{},"XML 标签是否闭合、属性是否拼写正确",[591,117630,117631],{},"actuator 引用的 joint 名字是否存在",[591,117633,117634,117636,117637],{},[25,117635,101470],{}," 的长度是否等于 ",[25,117638,102552],{},[591,117640,105979,117641,83016,117643,117645,117646],{},[25,117642,104424],{},[25,117644,104754],{}," 后是否调用了 ",[25,117647,117648],{},"mujoco.mj_forward",[591,117650,117651],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[547,117653,117654],{},"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":77,"depth":77,"links":117656},[117657,117658,117659,117660,117661,117662,117663,117664],{"id":117298,"depth":77,"text":117298},{"id":117327,"depth":77,"text":117328},{"id":117357,"depth":77,"text":117357},{"id":117472,"depth":77,"text":117472},{"id":117525,"depth":77,"text":117525},{"id":117537,"depth":77,"text":117537},{"id":117574,"depth":77,"text":117574},{"id":117603,"depth":77,"text":117603},"仿真搭建。",{"category":23864},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117241,"description":117665},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117672,"title":117673,"body":117674,"description":559,"extension":560,"meta":118129,"navigation":562,"path":118130,"seo":118131,"stem":118132,"__hash__":118133},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117675,"toc":118127},[117676,117679,117682,117688,118124],[10,117677,117673],{"id":117678},"_1-最常用的基本操作更新",[14,117680,117681],{},"装linux系统教程：",[14,117683,117684],{},[80,117685,117686],{"href":117686,"rel":117687},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24351],[18,117689,117693],{"className":117690,"code":117691,"language":117692,"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,117694,117695,117700,117705,117714,117719,117728,117733,117753,117758,117769,117774,117783,117788,117816,117821,117840,117845,117864,117868,117873,117889,117893,117898,117928,117932,117937,117953,117957,117962,117977,117981,117986,118002,118006,118011,118023,118035,118039,118044,118061,118065,118070,118088,118092,118097,118106,118110,118115],{"__ignoreMap":23},[28,117696,117697],{"class":30,"line":31},[28,117698,117699],{"class":73},"#更新相关的知识\n",[28,117701,117702],{"class":30,"line":77},[28,117703,117704],{"class":73},"# 更新软件包列表（从服务器获取最新软件信息）\n",[28,117706,117707,117709,117712],{"class":30,"line":114},[28,117708,25063],{"class":2453},[28,117710,117711],{"class":735}," apt",[28,117713,26728],{"class":735},[28,117715,117716],{"class":30,"line":128},[28,117717,117718],{"class":73},"# 升级所有可更新的软件包（不删除旧包）\n",[28,117720,117721,117723,117725],{"class":30,"line":393},[28,117722,25063],{"class":2453},[28,117724,117711],{"class":735},[28,117726,117727],{"class":735}," upgrade\n",[28,117729,117730],{"class":30,"line":409},[28,117731,117732],{"class":73},"#更新和升级软件包\n",[28,117734,117735,117737,117739,117742,117744,117746,117748,117751],{"class":30,"line":1711},[28,117736,25063],{"class":2453},[28,117738,117711],{"class":735},[28,117740,117741],{"class":735}," update",[28,117743,26676],{"class":34},[28,117745,25063],{"class":2453},[28,117747,117711],{"class":735},[28,117749,117750],{"class":735}," upgrade",[28,117752,101375],{"class":38},[28,117754,117755],{"class":30,"line":1802},[28,117756,117757],{"class":73},"#列出可更新的软件包及版本信息\n",[28,117759,117760,117763,117766],{"class":30,"line":1808},[28,117761,117762],{"class":2453},"apt",[28,117764,117765],{"class":735}," list",[28,117767,117768],{"class":38}," --upgradable\n",[28,117770,117771],{"class":30,"line":1820},[28,117772,117773],{"class":73},"#彻底升级（处理依赖关系，可能删除旧包）\n",[28,117775,117776,117778,117780],{"class":30,"line":2102},[28,117777,25063],{"class":2453},[28,117779,117711],{"class":735},[28,117781,117782],{"class":735}," full-upgrade\n",[28,117784,117785],{"class":30,"line":2107},[28,117786,117787],{"class":73},"#设置指定版本\n",[28,117789,117790,117792,117794,117796,117798,117801,117803,117805,117807,117809,117812,117814],{"class":30,"line":2113},[28,117791,25063],{"class":2453},[28,117793,117711],{"class":735},[28,117795,24320],{"class":735},[28,117797,29388],{"class":42},[28,117799,117800],{"class":735},"package_nam",[28,117802,706],{"class":34},[28,117804,1579],{"class":42},[28,117806,83],{"class":735},[28,117808,1529],{"class":42},[28,117810,117811],{"class":735},"version_numbe",[28,117813,1290],{"class":34},[28,117815,51784],{"class":42},[28,117817,117818],{"class":30,"line":2118},[28,117819,117820],{"class":73},"#只安装软件包不升级\n",[28,117822,117823,117825,117827,117829,117831,117833,117835,117837],{"class":30,"line":2132},[28,117824,25063],{"class":2453},[28,117826,117711],{"class":735},[28,117828,24320],{"class":735},[28,117830,29388],{"class":42},[28,117832,117800],{"class":735},[28,117834,706],{"class":34},[28,117836,1579],{"class":42},[28,117838,117839],{"class":38}," --no-upgrade\n",[28,117841,117842],{"class":30,"line":2137},[28,117843,117844],{"class":73},"#只升级，不存在就不安装\n",[28,117846,117847,117849,117851,117853,117855,117857,117859,117861],{"class":30,"line":2143},[28,117848,25063],{"class":2453},[28,117850,117711],{"class":735},[28,117852,24320],{"class":735},[28,117854,29388],{"class":42},[28,117856,117800],{"class":735},[28,117858,706],{"class":34},[28,117860,1579],{"class":42},[28,117862,117863],{"class":38}," --only-upgrade\n",[28,117865,117866],{"class":30,"line":2164},[28,117867,2890],{"emptyLinePlaceholder":562},[28,117869,117870],{"class":30,"line":2169},[28,117871,117872],{"class":73},"#安装指定的软件命令\n",[28,117874,117875,117877,117879,117881,117883,117885,117887],{"class":30,"line":2183},[28,117876,25063],{"class":2453},[28,117878,117711],{"class":735},[28,117880,24320],{"class":735},[28,117882,29388],{"class":42},[28,117884,117800],{"class":735},[28,117886,706],{"class":34},[28,117888,51784],{"class":42},[28,117890,117891],{"class":30,"line":2188},[28,117892,2890],{"emptyLinePlaceholder":562},[28,117894,117895],{"class":30,"line":2217},[28,117896,117897],{"class":73},"#安装多个软件包\n",[28,117899,117900,117902,117904,117906,117908,117911,117914,117916,117918,117921,117923,117925],{"class":30,"line":2222},[28,117901,25063],{"class":2453},[28,117903,117711],{"class":735},[28,117905,24320],{"class":735},[28,117907,29388],{"class":42},[28,117909,117910],{"class":735},"package_",[28,117912,117913],{"class":42},"1>",[28,117915,29388],{"class":42},[28,117917,117910],{"class":735},[28,117919,117920],{"class":42},"2>",[28,117922,29388],{"class":42},[28,117924,117910],{"class":735},[28,117926,117927],{"class":42},"3>\n",[28,117929,117930],{"class":30,"line":2239},[28,117931,2890],{"emptyLinePlaceholder":562},[28,117933,117934],{"class":30,"line":2244},[28,117935,117936],{"class":73},"#更新指定的软件命令\n",[28,117938,117939,117941,117943,117945,117947,117949,117951],{"class":30,"line":2249},[28,117940,25063],{"class":2453},[28,117942,117711],{"class":735},[28,117944,117741],{"class":735},[28,117946,29388],{"class":42},[28,117948,117800],{"class":735},[28,117950,706],{"class":34},[28,117952,51784],{"class":42},[28,117954,117955],{"class":30,"line":2254},[28,117956,2890],{"emptyLinePlaceholder":562},[28,117958,117959],{"class":30,"line":2268},[28,117960,117961],{"class":73},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[28,117963,117964,117966,117969,117971,117973,117975],{"class":30,"line":2273},[28,117965,117762],{"class":2453},[28,117967,117968],{"class":735}," show",[28,117970,29388],{"class":42},[28,117972,117800],{"class":735},[28,117974,706],{"class":34},[28,117976,51784],{"class":42},[28,117978,117979],{"class":30,"line":3067},[28,117980,2890],{"emptyLinePlaceholder":562},[28,117982,117983],{"class":30,"line":3081},[28,117984,117985],{"class":73},"#删除软件包命令\n",[28,117987,117988,117990,117992,117994,117996,117998,118000],{"class":30,"line":3089},[28,117989,25063],{"class":2453},[28,117991,117711],{"class":735},[28,117993,26565],{"class":735},[28,117995,29388],{"class":42},[28,117997,117800],{"class":735},[28,117999,706],{"class":34},[28,118001,51784],{"class":42},[28,118003,118004],{"class":30,"line":3094},[28,118005,2890],{"emptyLinePlaceholder":562},[28,118007,118008],{"class":30,"line":3100},[28,118009,118010],{"class":73},"# 清理旧版本和缓存（释放磁盘空间）\n",[28,118012,118013,118015,118017,118020],{"class":30,"line":3106},[28,118014,25063],{"class":2453},[28,118016,117711],{"class":735},[28,118018,118019],{"class":735}," autoremove",[28,118021,118022],{"class":73},"  # 删除不再需要的依赖和库文件\n",[28,118024,118025,118027,118029,118032],{"class":30,"line":3111},[28,118026,25063],{"class":2453},[28,118028,117711],{"class":735},[28,118030,118031],{"class":735}," clean",[28,118033,118034],{"class":73},"       # 清理下载的缓存包\n",[28,118036,118037],{"class":30,"line":8436},[28,118038,2890],{"emptyLinePlaceholder":562},[28,118040,118041],{"class":30,"line":8460},[28,118042,118043],{"class":73},"#移除软件包及配置文件\n",[28,118045,118046,118048,118050,118053,118055,118057,118059],{"class":30,"line":8465},[28,118047,25063],{"class":2453},[28,118049,117711],{"class":735},[28,118051,118052],{"class":735}," purge",[28,118054,29388],{"class":42},[28,118056,117800],{"class":735},[28,118058,706],{"class":34},[28,118060,51784],{"class":42},[28,118062,118063],{"class":30,"line":8471},[28,118064,2890],{"emptyLinePlaceholder":562},[28,118066,118067],{"class":30,"line":8498},[28,118068,118069],{"class":73},"#查找软件包命令\n",[28,118071,118072,118074,118076,118079,118081,118084,118086],{"class":30,"line":8503},[28,118073,25063],{"class":2453},[28,118075,117711],{"class":735},[28,118077,118078],{"class":735}," search",[28,118080,29388],{"class":42},[28,118082,118083],{"class":735},"keywor",[28,118085,941],{"class":34},[28,118087,51784],{"class":42},[28,118089,118090],{"class":30,"line":8509},[28,118091,2890],{"emptyLinePlaceholder":562},[28,118093,118094],{"class":30,"line":8521},[28,118095,118096],{"class":73},"#列出所有已安装的包\n",[28,118098,118099,118101,118103],{"class":30,"line":8533},[28,118100,117762],{"class":2453},[28,118102,117765],{"class":735},[28,118104,118105],{"class":38}," --installed\n",[28,118107,118108],{"class":30,"line":8545},[28,118109,2890],{"emptyLinePlaceholder":562},[28,118111,118112],{"class":30,"line":10202},[28,118113,118114],{"class":73},"#列出所有已安装的包的版本信息\n",[28,118116,118117,118119,118121],{"class":30,"line":10227},[28,118118,117762],{"class":2453},[28,118120,117765],{"class":735},[28,118122,118123],{"class":38}," --all-versions\n",[547,118125,118126],{},"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":77,"depth":77,"links":118128},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117673,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118135,"title":118136,"body":118137,"description":559,"extension":560,"meta":118878,"navigation":562,"path":118879,"seo":118880,"stem":118881,"__hash__":118882},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118138,"toc":118865},[118139,118142,118146,118149,118155,118159,118163,118169,118174,118179,118184,118189,118194,118197,118200,118203,118206,118210,118213,118218,118221,118226,118229,118234,118241,118244,118247,118250,118253,118256,118267,118271,118275,118280,118285,118289,118294,118298,118303,118307,118311,118316,118319,118364,118369,118373,118377,118382,118388,118393,118403,118408,118418,118423,118428,118455,118459,118462,118467,118470,118495,118499,118504,118507,118512,118517,118537,118542,118545,118560,118564,118617,118620,118625,118629,118632,118647,118650,118653,118658,118662,118666,118669,118673,118677,118680,118685,118690,118694,118701,118709,118712,118719,118724,118729,118732,118737,118744,118749,118756,118760,118762,118767,118771,118774,118777,118782,118785,118790,118793,118798,118803,118808,118812,118817,118821,118862],[10,118140,118136],{"id":118141},"_2-linux装机教程",[60,118143,118145],{"id":118144},"_21-实体机","2.1 实体机",[14,118147,118148],{},"使用清华源：（Ubuntu24.04）",[14,118150,118151],{},[80,118152,118153],{"href":118153,"rel":118154},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24351],[60,118156,118158],{"id":118157},"_22-普通虚拟机","2.2 普通虚拟机",[605,118160,118162],{"id":118161},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118164,118165],{},[80,118166,118167],{"href":118167,"rel":118168},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24351],[14,118170,118171],{},[420,118172],{"alt":23,"src":118173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118175,118176],{},[420,118177],{"alt":23,"src":118178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118180,118181],{},[420,118182],{"alt":23,"src":118183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118185,118186],{},[420,118187],{"alt":23,"src":118188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118190,118191],{},[420,118192],{"alt":23,"src":118193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118195,118196],{},"内存4G（4096MB）；",[14,118198,118199],{},"CPU给4个核；",[14,118201,118202],{},"硬盘动态分配60G；",[14,118204,118205],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[605,118207,118209],{"id":118208},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118211,118212],{},"按照1.1的步骤下载Ubuntu",[14,118214,118215],{},[420,118216],{"alt":23,"src":118217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118219,118220],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118222,118223],{},[420,118224],{"alt":23,"src":118225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118227,118228],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118230,118231],{},[420,118232],{"alt":23,"src":118233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118235,118236,118237,118240],{},"选择“正常安装”(找不到都用Alt+F7)， ",[780,118238,118239],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118242,118243],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118245,118246],{},"将改动写入磁盘吗 继续",[14,118248,118249],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118251,118252],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118254,118255],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118257,118258,118259,118262,118263,118266],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[780,118260,118261],{},"除了"," 选不发送系统信息与不升级之外， ",[780,118264,118265],{},"其它"," 都跳过或前进）",[605,118268,118270],{"id":118269},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22484,118272,118274],{"id":118273},"_2231-全屏","2.2.3.1 全屏",[14,118276,118277],{},[420,118278],{"alt":23,"src":118279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118281,118282],{},[420,118283],{"alt":23,"src":118284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22484,118286,118288],{"id":118287},"_2232-文件交换","2.2.3.2 文件交换",[14,118290,118291],{},[420,118292],{"alt":23,"src":118293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22484,118295,118297],{"id":118296},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118299,118300],{},[420,118301],{"alt":23,"src":118302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[60,118304,118306],{"id":118305},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[605,118308,118310],{"id":118309},"_231-简介与优缺点","2.3.1 简介与优缺点",[588,118312,118313],{},[591,118314,118315],{},"什么情况下推荐？",[14,118317,118318],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[588,118320,118321],{"start":77},[591,118322,118323,118324],{},"优缺点：",[588,118325,118326,118356],{},[591,118327,118328,118329],{},"优点：",[588,118330,118331,118334,118341,118344,118347,118350,118353],{},[591,118332,118333],{},"WSL2是最好的Linux发行版;(bushi)",[591,118335,118336,118337,118340],{},"性能损耗极低。且比在Windows上跑深度性能 ",[780,118338,118339],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[591,118342,118343],{},"非常方便调用USB设备，可以USB直通;",[591,118345,118346],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[591,118348,118349],{},"非常方便Win与WSL2互相传文件等协同操作;",[591,118351,118352],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[591,118354,118355],{},"非常方便使用Windows的VScode远程开发;",[591,118357,118358,118359],{},"缺点：",[588,118360,118361],{},[591,118362,118363],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118365,118366],{},[420,118367],{"alt":23,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[605,118370,118372],{"id":118371},"_232-安装教程","2.3.2 安装教程",[22484,118374,118376],{"id":118375},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[588,118378,118379],{},[591,118380,118381],{},"方法一(图形界面)",[14,118383,118384,118385,25105],{},"用Win+R输入",[25,118386,118387],{},"appwiz.cpl",[14,118389,118390],{},[420,118391],{"alt":23,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118394,118395,118396,118399,118400,26959],{},"点击OK进入 ",[780,118397,118398],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[780,118401,118402],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118404,118405],{},[420,118406],{"alt":23,"src":118407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118409,118410,118411,101412,118414,118417],{},"选择 ",[780,118412,118413],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[780,118415,118416],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118419,118420],{},[420,118421],{"alt":23,"src":118422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[588,118424,118425],{"start":77},[591,118426,118427],{},"方法二(命令行)",[18,118429,118433],{"className":118430,"code":118431,"language":118432,"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,118434,118435,118440,118445,118450],{"__ignoreMap":23},[28,118436,118437],{"class":30,"line":31},[28,118438,118439],{},"# 开启 Linux 子系统\n",[28,118441,118442],{"class":30,"line":77},[28,118443,118444],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[28,118446,118447],{"class":30,"line":114},[28,118448,118449],{},"# 开启虚拟机平台\n",[28,118451,118452],{"class":30,"line":128},[28,118453,118454],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22484,118456,118458],{"id":118457},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118460,118461],{},"用管理员权限打开powershell",[14,118463,118464],{},[420,118465],{"alt":23,"src":118466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118468,118469],{},"升级WSL并设置默认版本为WSL2",[18,118471,118473],{"className":118430,"code":118472,"language":118432,"meta":23,"style":23},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[25,118474,118475,118480,118485,118490],{"__ignoreMap":23},[28,118476,118477],{"class":30,"line":31},[28,118478,118479],{},"# 更新 wsl\n",[28,118481,118482],{"class":30,"line":77},[28,118483,118484],{},"wsl --update\n",[28,118486,118487],{"class":30,"line":114},[28,118488,118489],{},"# 将 wsl 版本设置为 wsl2\n",[28,118491,118492],{"class":30,"line":128},[28,118493,118494],{},"wsl --set-default-version 2\n",[22484,118496,118498],{"id":118497},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[588,118500,118501],{},[591,118502,118503],{},"方式一(商店下载)",[14,118505,118506],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118508,118509],{},[420,118510],{"alt":23,"src":118511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[588,118513,118514],{"start":77},[591,118515,118516],{},"方式二(命令行安装)",[18,118518,118520],{"className":118430,"code":118519,"language":118432,"meta":23,"style":23},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[25,118521,118522,118527,118532],{"__ignoreMap":23},[28,118523,118524],{"class":30,"line":31},[28,118525,118526],{},"# 列出可安装的 Linux 版本\n",[28,118528,118529],{"class":30,"line":77},[28,118530,118531],{},"#（需要科学手段）\n",[28,118533,118534],{"class":30,"line":114},[28,118535,118536],{},"wsl --list --online\n",[14,118538,118539],{},[420,118540],{"alt":23,"src":118541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118543,118544],{},"选择对应发行版并安装",[18,118546,118548],{"className":118430,"code":118547,"language":118432,"meta":23,"style":23},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[25,118549,118550,118555],{"__ignoreMap":23},[28,118551,118552],{"class":30,"line":31},[28,118553,118554],{},"# Ubuntu安装完毕后需要重启系统\n",[28,118556,118557],{"class":30,"line":77},[28,118558,118559],{},"wsl --install -d Ubuntu-24.04\n",[22484,118561,118563],{"id":118562},"_2324-查看系统状态","2.3.2.4 查看系统状态",[18,118565,118567],{"className":118430,"code":118566,"language":118432,"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,118568,118569,118574,118579,118584,118589,118593,118597,118602,118607,118612],{"__ignoreMap":23},[28,118570,118571],{"class":30,"line":31},[28,118572,118573],{},"# 查看 wsl\n",[28,118575,118576],{"class":30,"line":77},[28,118577,118578],{},"wsl -l\n",[28,118580,118581],{"class":30,"line":114},[28,118582,118583],{},"# 查看 wsl 运行版本或模式\n",[28,118585,118586],{"class":30,"line":128},[28,118587,118588],{},"wsl -l -v\n",[28,118590,118591],{"class":30,"line":393},[28,118592,2890],{"emptyLinePlaceholder":562},[28,118594,118595],{"class":30,"line":409},[28,118596,2890],{"emptyLinePlaceholder":562},[28,118598,118599],{"class":30,"line":1711},[28,118600,118601],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[28,118603,118604],{"class":30,"line":1802},[28,118605,118606],{},"wsl --set-version \u003Cdistro> 2\n",[28,118608,118609],{"class":30,"line":1808},[28,118610,118611],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[28,118613,118614],{"class":30,"line":1820},[28,118615,118616],{},"wsl --unregister \u003Cdistro>\n",[14,118618,118619],{},"输出Version为2即正常",[14,118621,118622],{},[420,118623],{"alt":23,"src":118624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22484,118626,118628],{"id":118627},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118630,118631],{},"直接在Powershell里输入wsl命令进入子系统",[18,118633,118635],{"className":118430,"code":118634,"language":118432,"meta":23,"style":23},"# 进入子系统\nwsl\n",[25,118636,118637,118642],{"__ignoreMap":23},[28,118638,118639],{"class":30,"line":31},[28,118640,118641],{},"# 进入子系统\n",[28,118643,118644],{"class":30,"line":77},[28,118645,118646],{},"wsl\n",[14,118648,118649],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118651,118652],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118654,118655],{},[420,118656],{"alt":23,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[605,118659,118661],{"id":118660},"_233-配置各种环境","2.3.3 配置各种环境",[22484,118663,118665],{"id":118664},"_2331-换源","2.3.3.1 换源",[14,118667,118668],{},"(同实体机LINUX，往下找教程)",[22484,118670,118672],{"id":118671},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23396,118674,118676],{"id":118675},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118678,118679],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118681,118682],{},[420,118683],{"alt":23,"src":118684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118686,118687],{},[420,118688],{"alt":23,"src":118689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23396,118691,118693],{"id":118692},"_23322-cuda","2.3.3.2.2 CUDA",[14,118695,118696,118697],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[80,118698,118699],{"href":118699,"rel":118700},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24351],[14,118702,118703,118706],{},[420,118704],{"alt":23,"src":118705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[420,118707],{"alt":23,"src":118708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118710,118711],{},"在下方的网站，选择合适的版本。",[14,118713,118714,118715],{},"WSL2 专属 CUDA 指南：",[80,118716,118717],{"href":118717,"rel":118718},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24351],[14,118720,118721],{},[780,118722,118723],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118725,118726],{},[420,118727],{"alt":23,"src":118728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118730,118731],{},"挨行敲一遍",[14,118733,118734],{},[420,118735],{"alt":23,"src":118736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118738,118739,118740,118743],{},"敲完后，输入",[25,118741,118742],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118745,118746],{},[420,118747],{"alt":23,"src":118748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118750,118751,118752,118755],{},"（请详看下方教程的",[780,118753,118754],{},"安装CUDA的配置环境来看","如何配置环境）",[23396,118757,118759],{"id":118758},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118761,118668],{},[14,118763,118764],{},[420,118765],{"alt":23,"src":118766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22484,118768,118770],{"id":118769},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118772,118773],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118775,118776],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118778,118779],{},[420,118780],{"alt":23,"src":118781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118783,118784],{},"连接WSL2",[14,118786,118787],{},[420,118788],{"alt":23,"src":118789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118791,118792],{},"远程开发成功。",[14,118794,118795],{},[420,118796],{"alt":23,"src":118797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118799,118800],{},[420,118801],{"alt":23,"src":118802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118804,118805],{},[420,118806],{"alt":23,"src":118807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22484,118809,118811],{"id":118810},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118813,118814],{},[420,118815],{"alt":23,"src":118816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22484,118818,118820],{"id":118819},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[18,118822,118824],{"className":117690,"code":118823,"language":117692,"meta":23,"style":23},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[25,118825,118826,118834,118842,118853,118857],{"__ignoreMap":23},[28,118827,118828,118830,118832],{"class":30,"line":31},[28,118829,25063],{"class":2453},[28,118831,117711],{"class":735},[28,118833,26728],{"class":735},[28,118835,118836,118838,118840],{"class":30,"line":77},[28,118837,25063],{"class":2453},[28,118839,117711],{"class":735},[28,118841,117727],{"class":735},[28,118843,118844,118846,118848,118850],{"class":30,"line":114},[28,118845,25063],{"class":2453},[28,118847,117711],{"class":735},[28,118849,24320],{"class":735},[28,118851,118852],{"class":735}," mesa-utils\n",[28,118854,118855],{"class":30,"line":128},[28,118856,2890],{"emptyLinePlaceholder":562},[28,118858,118859],{"class":30,"line":393},[28,118860,118861],{"class":73},"#然后重启wsl2即可\n",[547,118863,118864],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":77,"depth":77,"links":118866},[118867,118868,118873],{"id":118144,"depth":77,"text":118145},{"id":118157,"depth":77,"text":118158,"children":118869},[118870,118871,118872],{"id":118161,"depth":114,"text":118162},{"id":118208,"depth":114,"text":118209},{"id":118269,"depth":114,"text":118270},{"id":118305,"depth":77,"text":118306,"children":118874},[118875,118876,118877],{"id":118309,"depth":114,"text":118310},{"id":118371,"depth":114,"text":118372},{"id":118660,"depth":114,"text":118661},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118136,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118884,"title":118885,"body":118886,"description":559,"extension":560,"meta":121822,"navigation":562,"path":121823,"seo":121824,"stem":121825,"__hash__":121826},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118887,"toc":121794},[118888,118891,118895,118901,118905,118911,118915,119103,119106,119111,119115,119119,119122,119125,119131,119136,119139,119142,119147,119180,119185,119189,119266,119269,119274,119278,119281,119320,119323,119332,119350,119355,119362,119479,119484,119487,119514,119519,119523,119532,119582,119589,119593,119596,119610,119617,119651,119656,119660,119683,119686,119691,119695,119698,119701,119704,119746,119750,119753,119756,119797,119801,119805,119808,119813,119818,119821,119844,119847,119855,119860,119863,119868,119873,119876,119881,119885,119890,119913,119918,119980,119988,119993,119998,120001,120006,120009,120014,120019,120037,120042,120048,120053,120067,120071,120074,120077,120080,120123,120126,120131,120232,120235,120240,120244,120248,120285,120289,120293,120297,120343,120347,120392,120396,120403,120411,120466,120469,120546,120549,120572,120576,120579,120584,120589,120597,120600,120605,120610,120615,120618,120623,120632,120635,120640,120643,120714,120719,120722,120727,120730,120735,120738,120743,120746,120751,120756,120759,120834,120837,120850,120855,120858,120872,120875,120904,120909,120938,120941,120946,120950,120955,120964,120967,120972,120975,120980,120983,120986,120991,120994,120999,121004,121007,121012,121015,121140,121145,121175,121178,121183,121188,121205,121208,121251,121254,121281,121286,121299,121442,121446,121451,121465,121468,121519,121522,121552,121555,121571,121576,121590,121593,121660,121665,121674,121679,121682,121694,121699,121706,121730,121733,121738,121741,121760,121765,121772,121784,121791],[10,118889,118885],{"id":118890},"_3-安装必备配置",[60,118892,118894],{"id":118893},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[18,118896,118899],{"className":118897,"code":118898,"language":5675},[5673],"  打开下方网站（注意，该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,118900,118898],{"__ignoreMap":23},[605,118902,118904],{"id":118903},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[18,118906,118909],{"className":118907,"code":118908,"language":5675},[5673],"  输入以下命令\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,118910,118908],{"__ignoreMap":23},[605,118912,118914],{"id":118913},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[18,118916,118920],{"className":118917,"code":118918,"language":118919,"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,118921,118922,118930,118941,118953,118967,118971,118981,118986,118990,118994,118999,119003,119015,119019,119024,119028,119039,119043,119059,119063,119074,119078,119083,119087,119095],{"__ignoreMap":23},[28,118923,118924,118926,118928],{"class":30,"line":31},[28,118925,25063],{"class":2453},[28,118927,117711],{"class":735},[28,118929,26728],{"class":735},[28,118931,118932,118934,118936,118938],{"class":30,"line":77},[28,118933,25063],{"class":2453},[28,118935,117711],{"class":735},[28,118937,24320],{"class":735},[28,118939,118940],{"class":735}," vim\n",[28,118942,118943,118945,118948,118950],{"class":30,"line":114},[28,118944,25063],{"class":2453},[28,118946,118947],{"class":735}," rm",[28,118949,25812],{"class":38},[28,118951,118952],{"class":735}," \u002Fetc\u002Fapt\u002Fsources.list\n",[28,118954,118955,118957,118959,118961,118964],{"class":30,"line":128},[28,118956,25063],{"class":2453},[28,118958,118947],{"class":735},[28,118960,25812],{"class":38},[28,118962,118963],{"class":735}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[28,118965,118966],{"class":38},"**\n",[28,118968,118969],{"class":30,"line":393},[28,118970,2890],{"emptyLinePlaceholder":562},[28,118972,118973,118975,118978],{"class":30,"line":409},[28,118974,25063],{"class":2453},[28,118976,118977],{"class":735}," vim",[28,118979,118980],{"class":735}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[28,118982,118983],{"class":30,"line":1711},[28,118984,118985],{"class":735},"```\n",[28,118987,118988],{"class":30,"line":1802},[28,118989,2890],{"emptyLinePlaceholder":562},[28,118991,118992],{"class":30,"line":1808},[28,118993,2890],{"emptyLinePlaceholder":562},[28,118995,118996],{"class":30,"line":1820},[28,118997,118998],{"class":2453},"选择好Ubuntu版本后，复制下方的内容。\n",[28,119000,119001],{"class":30,"line":2102},[28,119002,2890],{"emptyLinePlaceholder":562},[28,119004,119005,119007,119010,119013],{"class":30,"line":2107},[28,119006,856],{"class":42},[28,119008,119009],{"class":735},"[](",[28,119011,119012],{"class":2453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[28,119014,228],{"class":735},[28,119016,119017],{"class":30,"line":2113},[28,119018,2890],{"emptyLinePlaceholder":562},[28,119020,119021],{"class":30,"line":2118},[28,119022,119023],{"class":2453},"粘贴进去\n",[28,119025,119026],{"class":30,"line":2132},[28,119027,2890],{"emptyLinePlaceholder":562},[28,119029,119030,119032,119034,119037],{"class":30,"line":2137},[28,119031,856],{"class":42},[28,119033,119009],{"class":735},[28,119035,119036],{"class":2453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[28,119038,228],{"class":735},[28,119040,119041],{"class":30,"line":2143},[28,119042,2890],{"emptyLinePlaceholder":562},[28,119044,119045,119048,119051,119054,119056],{"class":30,"line":2164},[28,119046,119047],{"class":2453},"按一下ESC，然后英文冒号，输入",[28,119049,119050],{"class":735}," `",[28,119052,119053],{"class":2453},":wq!",[28,119055,1591],{"class":735},[28,119057,119058],{"class":2453},"然后回车\n",[28,119060,119061],{"class":30,"line":2169},[28,119062,2890],{"emptyLinePlaceholder":562},[28,119064,119065,119067,119069,119072],{"class":30,"line":2183},[28,119066,856],{"class":42},[28,119068,119009],{"class":735},[28,119070,119071],{"class":2453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[28,119073,228],{"class":735},[28,119075,119076],{"class":30,"line":2188},[28,119077,2890],{"emptyLinePlaceholder":562},[28,119079,119080],{"class":30,"line":2217},[28,119081,119082],{"class":2453},"输入以下命令\n",[28,119084,119085],{"class":30,"line":2222},[28,119086,2890],{"emptyLinePlaceholder":562},[28,119088,119089,119092],{"class":30,"line":2239},[28,119090,119091],{"class":735},"```",[28,119093,119094],{"class":2453},"Bash\n",[28,119096,119097,119099,119101],{"class":30,"line":2244},[28,119098,25063],{"class":2453},[28,119100,117711],{"class":735},[28,119102,26728],{"class":735},[14,119104,119105],{},"这里被替换成对应学校则成功",[14,119107,119108],{},[420,119109],{"alt":23,"src":119110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[60,119112,119114],{"id":119113},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[605,119116,119118],{"id":119117},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119120,119121],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119123,119124],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119126,119127],{},[80,119128,119129],{"href":119129,"rel":119130},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24351],[14,119132,119133],{},[420,119134],{"alt":23,"src":119135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119137,119138],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119140,119141],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119143,119144],{},[420,119145],{"alt":23,"src":119146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[18,119148,119150],{"className":117690,"code":119149,"language":117692,"meta":23,"style":23},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[25,119151,119152,119157,119164,119169],{"__ignoreMap":23},[28,119153,119154],{"class":30,"line":31},[28,119155,119156],{"class":73},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[28,119158,119159,119161],{"class":30,"line":77},[28,119160,101670],{"class":38},[28,119162,119163],{"class":735}," ~\u002FDownloads\n",[28,119165,119166],{"class":30,"line":114},[28,119167,119168],{"class":73},"#下方chrome安装包名不一定是这个，根据名字来看\n",[28,119170,119171,119173,119175,119177],{"class":30,"line":128},[28,119172,25063],{"class":2453},[28,119174,117711],{"class":735},[28,119176,24320],{"class":735},[28,119178,119179],{"class":735}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119181,119182],{},[420,119183],{"alt":23,"src":119184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[605,119186,119188],{"id":119187},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[18,119190,119192],{"className":117690,"code":119191,"language":117692,"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,119193,119194,119199,119207,119218,119223,119227,119232,119242,119250,119261],{"__ignoreMap":23},[28,119195,119196],{"class":30,"line":31},[28,119197,119198],{"class":73},"# 老版\n",[28,119200,119201,119203,119205],{"class":30,"line":77},[28,119202,25063],{"class":2453},[28,119204,117711],{"class":735},[28,119206,26728],{"class":735},[28,119208,119209,119211,119213,119215],{"class":30,"line":114},[28,119210,25063],{"class":2453},[28,119212,117711],{"class":735},[28,119214,24320],{"class":735},[28,119216,119217],{"class":735}," neofetch\n",[28,119219,119220],{"class":30,"line":128},[28,119221,119222],{"class":2453},"neofetch\n",[28,119224,119225],{"class":30,"line":393},[28,119226,2890],{"emptyLinePlaceholder":562},[28,119228,119229],{"class":30,"line":409},[28,119230,119231],{"class":73},"# 新版\n",[28,119233,119234,119236,119239],{"class":30,"line":1711},[28,119235,25063],{"class":2453},[28,119237,119238],{"class":735}," add-apt-repository",[28,119240,119241],{"class":735}," ppa:zhangsongcui3371\u002Ffastfetch\n",[28,119243,119244,119246,119248],{"class":30,"line":1802},[28,119245,25063],{"class":2453},[28,119247,117711],{"class":735},[28,119249,26728],{"class":735},[28,119251,119252,119254,119256,119258],{"class":30,"line":1808},[28,119253,25063],{"class":2453},[28,119255,117711],{"class":735},[28,119257,24320],{"class":735},[28,119259,119260],{"class":735}," fastfetch\n",[28,119262,119263],{"class":30,"line":1820},[28,119264,119265],{"class":2453},"fastfetch\n",[14,119267,119268],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119270,119271],{},[420,119272],{"alt":23,"src":119273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[605,119275,119277],{"id":119276},"_323-移除snap应用","3.2.3 移除snap应用",[14,119279,119280],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[18,119282,119284],{"className":117690,"code":119283,"language":117692,"meta":23,"style":23},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[25,119285,119286,119298,119309],{"__ignoreMap":23},[28,119287,119288,119290,119292,119295],{"class":30,"line":31},[28,119289,25063],{"class":2453},[28,119291,26999],{"class":735},[28,119293,119294],{"class":735}," disable",[28,119296,119297],{"class":735}," snapd.service\n",[28,119299,119300,119302,119304,119306],{"class":30,"line":77},[28,119301,25063],{"class":2453},[28,119303,26999],{"class":735},[28,119305,119294],{"class":735},[28,119307,119308],{"class":735}," snapd.socket\n",[28,119310,119311,119313,119315,119317],{"class":30,"line":114},[28,119312,25063],{"class":2453},[28,119314,26999],{"class":735},[28,119316,119294],{"class":735},[28,119318,119319],{"class":735}," snapd.seeded.service\n",[14,119321,119322],{},"然后查看snap应用列表",[14,119324,119325,119326,119331],{},"根据你安装的选择不同（最小安装或普通安装），有",[80,119327,119330],{"href":119328,"rel":119329},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24351],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[18,119333,119335],{"className":117690,"code":119334,"language":117692,"meta":23,"style":23},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[25,119336,119337,119342],{"__ignoreMap":23},[28,119338,119339],{"class":30,"line":31},[28,119340,119341],{"class":73},"# 查询当前系统上snap安装了哪些app\n",[28,119343,119344,119347],{"class":30,"line":77},[28,119345,119346],{"class":2453},"snap",[28,119348,119349],{"class":735}," list\n",[14,119351,119352],{},[420,119353],{"alt":23,"src":119354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119356,119357,119358,119361],{},"卸载掉图中所有应用，按照 ",[780,119359,119360],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[18,119363,119365],{"className":117690,"code":119364,"language":117692,"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,119366,119367,119372,119384,119389,119400,119405,119416,119421,119432,119437,119441,119446,119457,119468],{"__ignoreMap":23},[28,119368,119369],{"class":30,"line":31},[28,119370,119371],{"class":73},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[28,119373,119374,119376,119379,119381],{"class":30,"line":77},[28,119375,25063],{"class":2453},[28,119377,119378],{"class":735}," snap",[28,119380,26565],{"class":735},[28,119382,119383],{"class":735}," snap-store\n",[28,119385,119386],{"class":30,"line":114},[28,119387,119388],{"class":73},"#移除firefox浏览器\n",[28,119390,119391,119393,119395,119397],{"class":30,"line":128},[28,119392,25063],{"class":2453},[28,119394,119378],{"class":735},[28,119396,26565],{"class":735},[28,119398,119399],{"class":735}," firefox\n",[28,119401,119402],{"class":30,"line":393},[28,119403,119404],{"class":73},"#移除gnome-42-2204\n",[28,119406,119407,119409,119411,119413],{"class":30,"line":409},[28,119408,25063],{"class":2453},[28,119410,119378],{"class":735},[28,119412,26565],{"class":735},[28,119414,119415],{"class":735}," gnome-42-2204\n",[28,119417,119418],{"class":30,"line":1711},[28,119419,119420],{"class":73},"#移除gtk-common-themes\n",[28,119422,119423,119425,119427,119429],{"class":30,"line":1802},[28,119424,25063],{"class":2453},[28,119426,119378],{"class":735},[28,119428,26565],{"class":735},[28,119430,119431],{"class":735}," gtk-common-themes\n",[28,119433,119434],{"class":30,"line":1808},[28,119435,119436],{"class":73},"#移除其它...\n",[28,119438,119439],{"class":30,"line":1820},[28,119440,3164],{"class":34},[28,119442,119443],{"class":30,"line":2102},[28,119444,119445],{"class":73},"#移除core22,bare以及snapd\n",[28,119447,119448,119450,119452,119454],{"class":30,"line":2107},[28,119449,25063],{"class":2453},[28,119451,119378],{"class":735},[28,119453,26565],{"class":735},[28,119455,119456],{"class":735}," core22\n",[28,119458,119459,119461,119463,119465],{"class":30,"line":2113},[28,119460,25063],{"class":2453},[28,119462,119378],{"class":735},[28,119464,26565],{"class":735},[28,119466,119467],{"class":735}," bare\n",[28,119469,119470,119472,119474,119476],{"class":30,"line":2118},[28,119471,25063],{"class":2453},[28,119473,119378],{"class":735},[28,119475,26565],{"class":735},[28,119477,119478],{"class":735}," snapd\n",[14,119480,119481],{},[420,119482],{"alt":23,"src":119483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119485,119486],{},"输入以下命令查看是否还有snap包",[18,119488,119490],{"className":117690,"code":119489,"language":117692,"meta":23,"style":23},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[25,119491,119492,119498,119502,119506,119510],{"__ignoreMap":23},[28,119493,119494,119496],{"class":30,"line":31},[28,119495,119346],{"class":2453},[28,119497,119349],{"class":735},[28,119499,119500],{"class":30,"line":77},[28,119501,119198],{"class":73},[28,119503,119504],{"class":30,"line":114},[28,119505,119222],{"class":2453},[28,119507,119508],{"class":30,"line":128},[28,119509,119231],{"class":73},[28,119511,119512],{"class":30,"line":393},[28,119513,119265],{"class":2453},[14,119515,119516],{},[420,119517],{"alt":23,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[605,119520,119522],{"id":119521},"_324-移除snap","3.2.4 移除snap",[14,119524,119525,119526,119531],{},"在删除掉",[80,119527,119530],{"href":119528,"rel":119529},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24351],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[18,119533,119535],{"className":117690,"code":119534,"language":117692,"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,119536,119537,119542,119555,119560,119571],{"__ignoreMap":23},[28,119538,119539],{"class":30,"line":31},[28,119540,119541],{"class":73}," #使用apt移除掉snap\n",[28,119543,119544,119546,119548,119550,119553],{"class":30,"line":77},[28,119545,25063],{"class":2453},[28,119547,117711],{"class":735},[28,119549,118019],{"class":735},[28,119551,119552],{"class":38}," --purge",[28,119554,119478],{"class":735},[28,119556,119557],{"class":30,"line":114},[28,119558,119559],{"class":73},"#移除snapd的一些目录\n",[28,119561,119562,119564,119566,119568],{"class":30,"line":128},[28,119563,25063],{"class":2453},[28,119565,118947],{"class":735},[28,119567,25812],{"class":38},[28,119569,119570],{"class":735}," \u002Fvar\u002Fcache\u002Fsnapd\n",[28,119572,119573,119575,119577,119579],{"class":30,"line":393},[28,119574,25063],{"class":2453},[28,119576,118947],{"class":735},[28,119578,25812],{"class":38},[28,119580,119581],{"class":735}," ~\u002Fsnap\n",[14,119583,119584,119585,119588],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[25,119586,119587],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[605,119590,119592],{"id":119591},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119594,119595],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[18,119597,119599],{"className":117690,"code":119598,"language":117692,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[25,119600,119601],{"__ignoreMap":23},[28,119602,119603,119605,119607],{"class":30,"line":31},[28,119604,25063],{"class":2453},[28,119606,118977],{"class":735},[28,119608,119609],{"class":735}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119611,119612,119613,119616],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[25,119614,119615],{},":wq"," 回车",[18,119618,119620],{"className":117690,"code":119619,"language":117692,"meta":23,"style":23},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[25,119621,119622,119629,119643],{"__ignoreMap":23},[28,119623,119624,119627],{"class":30,"line":31},[28,119625,119626],{"class":2453},"Package:",[28,119628,119478],{"class":735},[28,119630,119631,119634,119637,119640],{"class":30,"line":77},[28,119632,119633],{"class":2453},"Pin:",[28,119635,119636],{"class":735}," release",[28,119638,119639],{"class":735}," a=",[28,119641,119642],{"class":38},"*\n",[28,119644,119645,119648],{"class":30,"line":114},[28,119646,119647],{"class":2453},"Pin-Priority:",[28,119649,119650],{"class":38}," -10\n",[14,119652,119653],{},[420,119654],{"alt":23,"src":119655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[605,119657,119659],{"id":119658},"_326-测试是否成功","3.2.6 测试是否成功",[18,119661,119663],{"className":117690,"code":119662,"language":117692,"meta":23,"style":23},"sudo apt update\nsudo apt install firefox\n",[25,119664,119665,119673],{"__ignoreMap":23},[28,119666,119667,119669,119671],{"class":30,"line":31},[28,119668,25063],{"class":2453},[28,119670,117711],{"class":735},[28,119672,26728],{"class":735},[28,119674,119675,119677,119679,119681],{"class":30,"line":77},[28,119676,25063],{"class":2453},[28,119678,117711],{"class":735},[28,119680,24320],{"class":735},[28,119682,119399],{"class":735},[14,119684,119685],{},"这里提示snapd无法被安装，就证明成功了",[14,119687,119688],{},[420,119689],{"alt":23,"src":119690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[605,119692,119694],{"id":119693},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119696,119697],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119699,119700],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119702,119703],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[18,119705,119707],{"className":117690,"code":119706,"language":117692,"meta":23,"style":23},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[25,119708,119709,119714,119723,119728,119736],{"__ignoreMap":23},[28,119710,119711],{"class":30,"line":31},[28,119712,119713],{"class":73},"# 添加Mozilla提供的源\n",[28,119715,119716,119718,119720],{"class":30,"line":77},[28,119717,25063],{"class":2453},[28,119719,119238],{"class":735},[28,119721,119722],{"class":735}," ppa:mozillateam\u002Fppa\n",[28,119724,119725],{"class":30,"line":114},[28,119726,119727],{"class":73},"# 安装Firefox\n",[28,119729,119730,119732,119734],{"class":30,"line":128},[28,119731,25063],{"class":2453},[28,119733,117711],{"class":735},[28,119735,26728],{"class":735},[28,119737,119738,119740,119742,119744],{"class":30,"line":393},[28,119739,25063],{"class":2453},[28,119741,117711],{"class":735},[28,119743,24320],{"class":735},[28,119745,119399],{"class":735},[605,119747,119749],{"id":119748},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119751,119752],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119754,119755],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[18,119757,119759],{"className":117690,"code":119758,"language":117692,"meta":23,"style":23},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[25,119760,119761,119766,119776,119784,119788],{"__ignoreMap":23},[28,119762,119763],{"class":30,"line":31},[28,119764,119765],{"class":73},"#删掉禁止安装snap的配置文件\n",[28,119767,119768,119770,119772,119774],{"class":30,"line":77},[28,119769,25063],{"class":2453},[28,119771,118947],{"class":735},[28,119773,25812],{"class":38},[28,119775,119609],{"class":735},[28,119777,119778,119780,119782],{"class":30,"line":114},[28,119779,25063],{"class":2453},[28,119781,117711],{"class":735},[28,119783,26728],{"class":735},[28,119785,119786],{"class":30,"line":128},[28,119787,2890],{"emptyLinePlaceholder":562},[28,119789,119790,119792,119794],{"class":30,"line":393},[28,119791,25063],{"class":2453},[28,119793,117711],{"class":735},[28,119795,119796],{"class":735}," dist-update\n",[60,119798,119800],{"id":119799},"_33-中文输入法","3.3 中文输入法",[605,119802,119804],{"id":119803},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119806,119807],{},"官网下载搜狗输入法",[14,119809,119810],{},[420,119811],{"alt":23,"src":119812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119814,119815],{},[420,119816],{"alt":23,"src":119817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119819,119820],{},"打开终端输入如下",[18,119822,119824],{"className":117690,"code":119823,"language":117692,"meta":23,"style":23},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[25,119825,119826,119833],{"__ignoreMap":23},[28,119827,119828,119830],{"class":30,"line":31},[28,119829,101670],{"class":38},[28,119831,119832],{"class":735}," ~\u002FDownloads\u002F\n",[28,119834,119835,119837,119839,119841],{"class":30,"line":77},[28,119836,25063],{"class":2453},[28,119838,117711],{"class":735},[28,119840,24320],{"class":735},[28,119842,119843],{"class":735}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119845,119846],{},"打开Fcitx",[14,119848,119849,119852],{},[420,119850],{"alt":23,"src":119851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[420,119853],{"alt":23,"src":119854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119856,119857],{},[420,119858],{"alt":23,"src":119859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119861,119862],{},"添加搜狗输入法",[14,119864,119865],{},[420,119866],{"alt":23,"src":119867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119869,119870],{},[420,119871],{"alt":23,"src":119872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119874,119875],{},"将搜狗输入法设置为唯一输入法",[14,119877,119878],{},[420,119879],{"alt":23,"src":119880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[605,119882,119884],{"id":119883},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[588,119886,119887],{},[591,119888,119889],{},"卸载旧输入法",[18,119891,119893],{"className":118917,"code":119892,"language":118919,"meta":23,"style":23},"sudo apt purge fcitx* ibus*\n",[25,119894,119895],{"__ignoreMap":23},[28,119896,119897,119899,119901,119903,119906,119908,119911],{"class":30,"line":31},[28,119898,25063],{"class":2453},[28,119900,117711],{"class":735},[28,119902,118052],{"class":735},[28,119904,119905],{"class":735}," fcitx",[28,119907,256],{"class":38},[28,119909,119910],{"class":735}," ibus",[28,119912,119642],{"class":38},[588,119914,119915],{"start":77},[591,119916,119917],{},"安装Fcitx5",[18,119919,119921],{"className":117690,"code":119920,"language":117692,"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,119922,119923,119928,119942,119946,119951,119960,119968],{"__ignoreMap":23},[28,119924,119925],{"class":30,"line":31},[28,119926,119927],{"class":73},"# Ubuntu22.04及以上、Debian12及以上\n",[28,119929,119930,119932,119934,119936,119939],{"class":30,"line":77},[28,119931,25063],{"class":2453},[28,119933,117711],{"class":735},[28,119935,24320],{"class":735},[28,119937,119938],{"class":735}," fcitx5",[28,119940,119941],{"class":735}," fcitx5-chinese-addons\n",[28,119943,119944],{"class":30,"line":114},[28,119945,2890],{"emptyLinePlaceholder":562},[28,119947,119948],{"class":30,"line":128},[28,119949,119950],{"class":73},"# Ubuntu20.04\n",[28,119952,119953,119955,119957],{"class":30,"line":393},[28,119954,25063],{"class":2453},[28,119956,119238],{"class":735},[28,119958,119959],{"class":735}," ppa:zhsj\u002Ffcitx5\n",[28,119961,119962,119964,119966],{"class":30,"line":409},[28,119963,25063],{"class":2453},[28,119965,117711],{"class":735},[28,119967,26728],{"class":735},[28,119969,119970,119972,119974,119976,119978],{"class":30,"line":1711},[28,119971,25063],{"class":2453},[28,119973,117711],{"class":735},[28,119975,24320],{"class":735},[28,119977,119938],{"class":735},[28,119979,119941],{"class":735},[588,119981,119982,119985],{"start":114},[591,119983,119984],{},"Reboot System",[591,119986,119987],{},"启动Fcitx5",[14,119989,119990],{},[420,119991],{"alt":23,"src":119992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[588,119994,119995],{"start":393},[591,119996,119997],{},"修改一些设置",[14,119999,120000],{},"将Pinyin和Keyboard - English US加入到左边。",[14,120002,120003],{},[420,120004],{"alt":23,"src":120005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120007,120008],{},"添加快捷键以便于更好切换中英文",[14,120010,120011],{},[420,120012],{"alt":23,"src":120013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[588,120015,120016],{"start":409},[591,120017,120018],{},"重启",[18,120020,120022],{"className":118917,"code":120021,"language":118919,"meta":23,"style":23},"sudo shutdown -r now\n",[25,120023,120024],{"__ignoreMap":23},[28,120025,120026,120028,120031,120034],{"class":30,"line":31},[28,120027,25063],{"class":2453},[28,120029,120030],{"class":735}," shutdown",[28,120032,120033],{"class":38}," -r",[28,120035,120036],{"class":735}," now\n",[588,120038,120039],{"start":1711},[591,120040,120041],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120043,120044],{},[80,120045,120046],{"href":120046,"rel":120047},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24351],[588,120049,120050],{"start":1802},[591,120051,120052],{},"再重启",[18,120054,120055],{"className":118917,"code":120021,"language":118919,"meta":23,"style":23},[25,120056,120057],{"__ignoreMap":23},[28,120058,120059,120061,120063,120065],{"class":30,"line":31},[28,120060,25063],{"class":2453},[28,120062,120030],{"class":735},[28,120064,120033],{"class":38},[28,120066,120036],{"class":735},[60,120068,120070],{"id":120069},"_34-pip3源替换","3.4 pip3源替换",[14,120072,120073],{},"非Debian系发行版需要做。",[14,120075,120076],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120078,120079],{},"使用dnf的系统也可能不用做。",[18,120081,120083],{"className":117690,"code":120082,"language":117692,"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,120084,120085,120090,120097,120102,120107],{"__ignoreMap":23},[28,120086,120087],{"class":30,"line":31},[28,120088,120089],{"class":73},"# 检查是否已安装 pip\n",[28,120091,120092,120095],{"class":30,"line":77},[28,120093,120094],{"class":2453},"pip3",[28,120096,26779],{"class":38},[28,120098,120099],{"class":30,"line":114},[28,120100,120101],{"class":73},"# 如果未安装，先安装 pip3（见下方）\n",[28,120103,120104],{"class":30,"line":128},[28,120105,120106],{"class":73},"# 配置 pip 使用清华源\n",[28,120108,120109,120111,120114,120117,120120],{"class":30,"line":393},[28,120110,120094],{"class":2453},[28,120112,120113],{"class":735}," config",[28,120115,120116],{"class":735}," set",[28,120118,120119],{"class":735}," global.index-url",[28,120121,120122],{"class":735}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120124,120125],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120127,120128],{},[420,120129],{"alt":23,"src":120130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[18,120132,120134],{"className":117690,"code":120133,"language":117692,"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,120135,120136,120141,120149,120160,120164,120169,120188,120192,120197,120209,120213,120218],{"__ignoreMap":23},[28,120137,120138],{"class":30,"line":31},[28,120139,120140],{"class":73},"#安装pip3\n",[28,120142,120143,120145,120147],{"class":30,"line":77},[28,120144,25063],{"class":2453},[28,120146,117711],{"class":735},[28,120148,26728],{"class":735},[28,120150,120151,120153,120155,120157],{"class":30,"line":114},[28,120152,25063],{"class":2453},[28,120154,26562],{"class":735},[28,120156,24320],{"class":735},[28,120158,120159],{"class":735}," python3-pip\n",[28,120161,120162],{"class":30,"line":128},[28,120163,2890],{"emptyLinePlaceholder":562},[28,120165,120166],{"class":30,"line":393},[28,120167,120168],{"class":73},"#更新pip3\n",[28,120170,120171,120173,120175,120177,120179,120181,120184,120186],{"class":30,"line":409},[28,120172,101273],{"class":2453},[28,120174,101276],{"class":38},[28,120176,101299],{"class":735},[28,120178,24320],{"class":735},[28,120180,26916],{"class":38},[28,120182,120183],{"class":735}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[28,120185,101304],{"class":38},[28,120187,101307],{"class":735},[28,120189,120190],{"class":30,"line":1711},[28,120191,2890],{"emptyLinePlaceholder":562},[28,120193,120194],{"class":30,"line":1802},[28,120195,120196],{"class":73},"#设置pip源为清华源\n",[28,120198,120199,120201,120203,120205,120207],{"class":30,"line":1808},[28,120200,120094],{"class":2453},[28,120202,120113],{"class":735},[28,120204,120116],{"class":735},[28,120206,120119],{"class":735},[28,120208,120122],{"class":735},[28,120210,120211],{"class":30,"line":1820},[28,120212,2890],{"emptyLinePlaceholder":562},[28,120214,120215],{"class":30,"line":2102},[28,120216,120217],{"class":73},"#测试\n",[28,120219,120220,120222,120224,120226,120228,120230],{"class":30,"line":2107},[28,120221,101273],{"class":2453},[28,120223,101276],{"class":38},[28,120225,101299],{"class":735},[28,120227,24320],{"class":735},[28,120229,101304],{"class":38},[28,120231,101307],{"class":735},[14,120233,120234],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120236,120237],{},[420,120238],{"alt":23,"src":120239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[60,120241,120243],{"id":120242},"_35-显卡驱动安装","3.5 显卡驱动安装",[605,120245,120247],{"id":120246},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[18,120249,120251],{"className":118917,"code":120250,"language":118919,"meta":23,"style":23},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[25,120252,120253,120258,120273,120278],{"__ignoreMap":23},[28,120254,120255],{"class":30,"line":31},[28,120256,120257],{"class":73},"# 如果是使用apt安装的驱动\n",[28,120259,120260,120262,120264,120266,120268,120271],{"class":30,"line":77},[28,120261,25063],{"class":2453},[28,120263,26562],{"class":735},[28,120265,26565],{"class":735},[28,120267,119552],{"class":38},[28,120269,120270],{"class":735}," nvidia",[28,120272,119642],{"class":38},[28,120274,120275],{"class":30,"line":114},[28,120276,120277],{"class":73},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[28,120279,120280,120282],{"class":30,"line":128},[28,120281,25063],{"class":2453},[28,120283,120284],{"class":735}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[605,120286,120288],{"id":120287},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22484,120290,120292],{"id":120291},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23396,120294,120296],{"id":120295},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[18,120298,120300],{"className":118917,"code":120299,"language":118919,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120301,120302,120307,120318,120323,120333,120338],{"__ignoreMap":23},[28,120303,120304],{"class":30,"line":31},[28,120305,120306],{"class":73},"# 安装英伟达驱动\n",[28,120308,120309,120311,120313,120315],{"class":30,"line":77},[28,120310,25063],{"class":2453},[28,120312,117711],{"class":735},[28,120314,24320],{"class":735},[28,120316,120317],{"class":735}," nvidia-driver-版本号\n",[28,120319,120320],{"class":30,"line":114},[28,120321,120322],{"class":73},"# 重启 \n",[28,120324,120325,120327,120329,120331],{"class":30,"line":128},[28,120326,25063],{"class":2453},[28,120328,120030],{"class":735},[28,120330,120033],{"class":38},[28,120332,120036],{"class":735},[28,120334,120335],{"class":30,"line":393},[28,120336,120337],{"class":73},"# 检查驱动是否安装成功\n",[28,120339,120340],{"class":30,"line":409},[28,120341,120342],{"class":2453},"nvidia-smi\n",[23396,120344,120346],{"id":120345},"_35212-debian","3.5.2.1.2 Debian",[18,120348,120350],{"className":118917,"code":120349,"language":118919,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120351,120352,120356,120370,120374,120384,120388],{"__ignoreMap":23},[28,120353,120354],{"class":30,"line":31},[28,120355,120306],{"class":73},[28,120357,120358,120360,120362,120364,120367],{"class":30,"line":77},[28,120359,25063],{"class":2453},[28,120361,117711],{"class":735},[28,120363,24320],{"class":735},[28,120365,120366],{"class":735}," nvidia-driver",[28,120368,120369],{"class":735}," nvidia-settings\n",[28,120371,120372],{"class":30,"line":114},[28,120373,120322],{"class":73},[28,120375,120376,120378,120380,120382],{"class":30,"line":128},[28,120377,25063],{"class":2453},[28,120379,120030],{"class":735},[28,120381,120033],{"class":38},[28,120383,120036],{"class":735},[28,120385,120386],{"class":30,"line":393},[28,120387,120337],{"class":73},[28,120389,120390],{"class":30,"line":409},[28,120391,120342],{"class":2453},[22484,120393,120395],{"id":120394},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120397,120398,120399,120402],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[780,120400,120401],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120404,120405,120406],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24039,120407,120408],{},[780,120409,120410],{},"（也可以不禁用桌面环境，直接进行下一步。）",[18,120412,120414],{"className":118917,"code":120413,"language":118919,"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,120415,120416,120421,120431,120436,120449,120454],{"__ignoreMap":23},[28,120417,120418],{"class":30,"line":31},[28,120419,120420],{"class":73},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[28,120422,120423,120425,120428],{"class":30,"line":77},[28,120424,25063],{"class":2453},[28,120426,120427],{"class":735}," telinit",[28,120429,120430],{"class":38}," 3\n",[28,120432,120433],{"class":30,"line":114},[28,120434,120435],{"class":73},"# ubuntu 使用下方命令\n",[28,120437,120438,120440,120443,120446],{"class":30,"line":128},[28,120439,25063],{"class":2453},[28,120441,120442],{"class":735}," service",[28,120444,120445],{"class":735}," lightdm",[28,120447,120448],{"class":735}," stop\n",[28,120450,120451],{"class":30,"line":393},[28,120452,120453],{"class":73},"# Fedora 使用下方命令\n",[28,120455,120456,120458,120460,120463],{"class":30,"line":409},[28,120457,25063],{"class":2453},[28,120459,26999],{"class":735},[28,120461,120462],{"class":735}," isolate",[28,120464,120465],{"class":735}," multi-user.target\n",[14,120467,120468],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[18,120470,120472],{"className":118917,"code":120471,"language":118919,"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,120473,120474,120479,120490,120495,120502,120507,120519,120524,120531,120536],{"__ignoreMap":23},[28,120475,120476],{"class":30,"line":31},[28,120477,120478],{"class":73},"# 编译环境+准备工作\n",[28,120480,120481,120483,120485,120487],{"class":30,"line":77},[28,120482,25063],{"class":2453},[28,120484,117711],{"class":735},[28,120486,24320],{"class":735},[28,120488,120489],{"class":735}," build-essential\n",[28,120491,120492],{"class":30,"line":114},[28,120493,120494],{"class":73},"# 进入到.run目录中\n",[28,120496,120497,120499],{"class":30,"line":128},[28,120498,101670],{"class":38},[28,120500,120501],{"class":735}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[28,120503,120504],{"class":30,"line":393},[28,120505,120506],{"class":73},"# 给驱动文件增加可执行权限：\n",[28,120508,120509,120511,120513,120516],{"class":30,"line":409},[28,120510,25063],{"class":2453},[28,120512,25066],{"class":735},[28,120514,120515],{"class":735}," a+x",[28,120517,120518],{"class":735}," NVIDIA-Linux-x86_64-550.107.02.run\n",[28,120520,120521],{"class":30,"line":1711},[28,120522,120523],{"class":73},"# 然后执行安装：\n",[28,120525,120526,120528],{"class":30,"line":1802},[28,120527,25063],{"class":2453},[28,120529,120530],{"class":735}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[28,120532,120533],{"class":30,"line":1808},[28,120534,120535],{"class":73},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[28,120537,120538,120540,120543],{"class":30,"line":1820},[28,120539,25063],{"class":2453},[28,120541,120542],{"class":735}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[28,120544,120545],{"class":38},"  --no-opengl-files\n",[14,120547,120548],{},"安装完毕重启即可",[18,120550,120552],{"className":118917,"code":120551,"language":118919,"meta":23,"style":23},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120553,120554,120558,120564,120568],{"__ignoreMap":23},[28,120555,120556],{"class":30,"line":31},[28,120557,120322],{"class":73},[28,120559,120560,120562],{"class":30,"line":77},[28,120561,25063],{"class":2453},[28,120563,27133],{"class":735},[28,120565,120566],{"class":30,"line":114},[28,120567,120337],{"class":73},[28,120569,120570],{"class":30,"line":128},[28,120571,120342],{"class":2453},[605,120573,120575],{"id":120574},"_353-安装cuda","3.5.3 安装CUDA",[14,120577,120578],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120580,120581],{},[420,120582],{"alt":23,"src":120583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[588,120585,120586],{},[591,120587,120588],{},"先查看显卡驱动所支持的最高CUDA版本",[18,120590,120591],{"className":118917,"code":120342,"language":118919,"meta":23,"style":23},[25,120592,120593],{"__ignoreMap":23},[28,120594,120595],{"class":30,"line":31},[28,120596,120342],{"class":2453},[14,120598,120599],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120601,120602],{},[420,120603],{"alt":23,"src":120604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[588,120606,120607],{"start":77},[591,120608,120609],{},"下载CUDA并安装CUDA",[14,120611,118696,120612],{},[80,120613,118699],{"href":118699,"rel":120614},[24351],[14,120616,120617],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120619,120620],{},[420,120621],{"alt":23,"src":120622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120624,120625,120626,120631],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[80,120627,120630],{"href":120628,"rel":120629},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24351],"Vinci机器人队单片机教程","）",[14,120633,120634],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120636,120637],{},[420,120638],{"alt":23,"src":120639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120641,120642],{},"将最下方框框里的命令敲入终端",[18,120644,120646],{"className":118917,"code":120645,"language":118919,"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,120647,120648,120653,120662,120667,120674,120679,120687,120692,120703,120708],{"__ignoreMap":23},[28,120649,120650],{"class":30,"line":31},[28,120651,120652],{"class":73},"# 在当前文件夹下创建一个ttt的子文件夹\n",[28,120654,120655,120657,120659],{"class":30,"line":77},[28,120656,101660],{"class":2453},[28,120658,29702],{"class":38},[28,120660,120661],{"class":735}," .\u002Fttt\n",[28,120663,120664],{"class":30,"line":114},[28,120665,120666],{"class":73},"# 进入ttt文件夹\n",[28,120668,120669,120671],{"class":30,"line":128},[28,120670,101670],{"class":38},[28,120672,120673],{"class":735}," ttt\n",[28,120675,120676],{"class":30,"line":393},[28,120677,120678],{"class":73},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[28,120680,120681,120684],{"class":30,"line":409},[28,120682,120683],{"class":2453},"wget",[28,120685,120686],{"class":735}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120688,120689],{"class":30,"line":1711},[28,120690,120691],{"class":73},"# 给予权限\n",[28,120693,120694,120696,120698,120700],{"class":30,"line":1802},[28,120695,25063],{"class":2453},[28,120697,25066],{"class":735},[28,120699,120515],{"class":735},[28,120701,120702],{"class":735}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120704,120705],{"class":30,"line":1808},[28,120706,120707],{"class":73},"# 运行脚本\n",[28,120709,120710,120712],{"class":30,"line":1820},[28,120711,25063],{"class":2453},[28,120713,120702],{"class":735},[14,120715,120716],{},[420,120717],{"alt":23,"src":120718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120720,120721],{},"正在安装中：",[14,120723,120724],{},[420,120725],{"alt":23,"src":120726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120728,120729],{},"输入accept接受即可",[14,120731,120732],{},[420,120733],{"alt":23,"src":120734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120736,120737],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120739,120740],{},[420,120741],{"alt":23,"src":120742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120744,120745],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120747,120748],{},[420,120749],{"alt":23,"src":120750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[588,120752,120753],{"start":114},[591,120754,120755],{},"配置环境",[14,120757,120758],{},"根据上方确认一下路径，比如我上面红色框起来的为",[18,120760,120762],{"className":118917,"code":120761,"language":118919,"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,120763,120764,120780,120795],{"__ignoreMap":23},[28,120765,120766,120769,120772,120775,120778],{"class":30,"line":31},[28,120767,120768],{"class":2453},"Please",[28,120770,120771],{"class":735}," make",[28,120773,120774],{"class":735}," sure",[28,120776,120777],{"class":735}," that",[28,120779,3164],{"class":34},[28,120781,120782,120784,120787,120790,120793],{"class":30,"line":77},[28,120783,52748],{"class":2453},[28,120785,120786],{"class":735},"   PATH",[28,120788,120789],{"class":735}," includes",[28,120791,120792],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[28,120794,3164],{"class":34},[28,120796,120797,120799,120802,120804,120807,120810,120812,120815,120818,120821,120824,120826,120829,120831],{"class":30,"line":114},[28,120798,52748],{"class":2453},[28,120800,120801],{"class":735},"   LD_LIBRARY_PATH",[28,120803,120789],{"class":735},[28,120805,120806],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[28,120808,120809],{"class":735}," or,",[28,120811,5697],{"class":735},[28,120813,120814],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[28,120816,120817],{"class":735}," to",[28,120819,120820],{"class":735}," \u002Fetc\u002Fld.so.conf",[28,120822,120823],{"class":735}," and",[28,120825,27716],{"class":735},[28,120827,120828],{"class":735}," ldconfig",[28,120830,65081],{"class":735},[28,120832,120833],{"class":735}," root\n",[14,120835,120836],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[18,120838,120840],{"className":118917,"code":120839,"language":118919,"meta":23,"style":23},"which nvcc\n",[25,120841,120842],{"__ignoreMap":23},[28,120843,120844,120847],{"class":30,"line":31},[28,120845,120846],{"class":38},"which",[28,120848,120849],{"class":735}," nvcc\n",[14,120851,120852],{},[420,120853],{"alt":23,"src":120854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120856,120857],{},"所以我进行以下操作：",[18,120859,120861],{"className":118917,"code":120860,"language":118919,"meta":23,"style":23},"sudo vim ~\u002F.bashrc\n",[25,120862,120863],{"__ignoreMap":23},[28,120864,120865,120867,120869],{"class":30,"line":31},[28,120866,25063],{"class":2453},[28,120868,118977],{"class":735},[28,120870,120871],{"class":735}," ~\u002F.bashrc\n",[14,120873,120874],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[18,120876,120878],{"className":118917,"code":120877,"language":118919,"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,120879,120880,120892],{"__ignoreMap":23},[28,120881,120882,120884,120887,120889],{"class":30,"line":31},[28,120883,25529],{"class":42},[28,120885,120886],{"class":34}," PATH",[28,120888,83],{"class":42},[28,120890,120891],{"class":34},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[28,120893,120894,120896,120899,120901],{"class":30,"line":77},[28,120895,25529],{"class":42},[28,120897,120898],{"class":34}," LD_LIBRARY_PATH",[28,120900,83],{"class":42},[28,120902,120903],{"class":34},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120905,120906],{},[420,120907],{"alt":23,"src":120908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[18,120910,120912],{"className":118917,"code":120911,"language":118919,"meta":23,"style":23},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[25,120913,120914,120919,120925,120930],{"__ignoreMap":23},[28,120915,120916],{"class":30,"line":31},[28,120917,120918],{"class":73},"# 刷新当前终端的环境变量\n",[28,120920,120921,120923],{"class":30,"line":77},[28,120922,101287],{"class":38},[28,120924,120871],{"class":735},[28,120926,120927],{"class":30,"line":114},[28,120928,120929],{"class":73},"# 验证CUDA是否安装成功\n",[28,120931,120932,120935],{"class":30,"line":128},[28,120933,120934],{"class":2453},"nvcc",[28,120936,120937],{"class":38}," -V\n",[14,120939,120940],{},"出现下图这种则安装成功。",[14,120942,120943],{},[420,120944],{"alt":23,"src":120945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[605,120947,120949],{"id":120948},"_354-安装cudnn","3.5.4 安装cuDNN",[588,120951,120952],{},[591,120953,120954],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120956,120957,120958,120963],{},"前往 NVIDIA cuDNN 下载页面：",[80,120959,120962],{"href":120960,"rel":120961},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24351],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120965,120966],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120968,120969],{},[420,120970],{"alt":23,"src":120971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120973,120974],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120976,120977],{},[420,120978],{"alt":23,"src":120979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120981,120982],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120984,120985],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120987,120988],{},[780,120989,120990],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120992,120993],{},"下载好的：",[14,120995,120996],{},[420,120997],{"alt":23,"src":120998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[588,121000,121001],{"start":77},[591,121002,121003],{},"安装cuDNN",[14,121005,121006],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121008,121009],{},[420,121010],{"alt":23,"src":121011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121013,121014],{},"解压文件，并复制到对应位置完成安装",[18,121016,121018],{"className":118917,"code":121017,"language":118919,"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,121019,121020,121025,121036,121041,121048,121053,121069,121083,121088,121099,121108,121112,121128],{"__ignoreMap":23},[28,121021,121022],{"class":30,"line":31},[28,121023,121024],{"class":73},"# 解压cuDNN文件\n",[28,121026,121027,121030,121033],{"class":30,"line":77},[28,121028,121029],{"class":2453},"tar",[28,121031,121032],{"class":38}," -xvf",[28,121034,121035],{"class":735}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[28,121037,121038],{"class":30,"line":114},[28,121039,121040],{"class":73},"# cd进文件夹\n",[28,121042,121043,121045],{"class":30,"line":128},[28,121044,101670],{"class":38},[28,121046,121047],{"class":735}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[28,121049,121050],{"class":30,"line":393},[28,121051,121052],{"class":73},"# 复制cuDNN文件到CUDA目录\n",[28,121054,121055,121057,121059,121062,121064,121067],{"class":30,"line":409},[28,121056,25063],{"class":2453},[28,121058,28347],{"class":735},[28,121060,121061],{"class":735}," include\u002Fcudnn",[28,121063,256],{"class":38},[28,121065,121066],{"class":735},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[28,121068,3164],{"class":34},[28,121070,121071,121073,121075,121078,121080],{"class":30,"line":1711},[28,121072,25063],{"class":2453},[28,121074,28347],{"class":735},[28,121076,121077],{"class":735}," lib\u002Flibcudnn",[28,121079,256],{"class":38},[28,121081,121082],{"class":735},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[28,121084,121085],{"class":30,"line":1802},[28,121086,121087],{"class":73},"# 对比一下有没有缺文件\n",[28,121089,121090,121092,121095,121097],{"class":30,"line":1808},[28,121091,27247],{"class":2453},[28,121093,121094],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[28,121096,256],{"class":38},[28,121098,3164],{"class":34},[28,121100,121101,121103,121106],{"class":30,"line":1820},[28,121102,27247],{"class":2453},[28,121104,121105],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[28,121107,119642],{"class":38},[28,121109,121110],{"class":30,"line":2102},[28,121111,120691],{"class":73},[28,121113,121114,121116,121118,121121,121123,121125],{"class":30,"line":2107},[28,121115,25063],{"class":2453},[28,121117,25066],{"class":735},[28,121119,121120],{"class":735}," a+r",[28,121122,121094],{"class":735},[28,121124,256],{"class":38},[28,121126,121127],{"class":34},"   \n",[28,121129,121130,121132,121134,121136,121138],{"class":30,"line":2113},[28,121131,25063],{"class":2453},[28,121133,25066],{"class":735},[28,121135,121120],{"class":735},[28,121137,121105],{"class":735},[28,121139,119642],{"class":38},[588,121141,121142],{"start":114},[591,121143,121144],{},"检查是否安装成功",[18,121146,121148],{"className":118917,"code":121147,"language":118919,"meta":23,"style":23},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[25,121149,121150,121155],{"__ignoreMap":23},[28,121151,121152],{"class":30,"line":31},[28,121153,121154],{"class":73},"# 检查cuDNN版本命令\n",[28,121156,121157,121160,121163,121165,121167,121170,121173],{"class":30,"line":77},[28,121158,121159],{"class":2453},"cat",[28,121161,121162],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[28,121164,25596],{"class":42},[28,121166,30722],{"class":2453},[28,121168,121169],{"class":735}," CUDNN_MAJOR",[28,121171,121172],{"class":38}," -A",[28,121174,48200],{"class":38},[14,121176,121177],{},"出现下图这样的就是安装成功了",[14,121179,121180],{},[420,121181],{"alt":23,"src":121182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[588,121184,121185],{"start":128},[591,121186,121187],{},"软链接(一般不需要)",[18,121189,121191],{"className":118917,"code":121190,"language":118919,"meta":23,"style":23},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[25,121192,121193,121198],{"__ignoreMap":23},[28,121194,121195],{"class":30,"line":31},[28,121196,121197],{"class":73},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[28,121199,121200,121202],{"class":30,"line":77},[28,121201,25063],{"class":2453},[28,121203,121204],{"class":735}," ldconfig\n",[14,121206,121207],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[18,121209,121214],{"className":121210,"code":121211,"language":121212,"meta":121213,"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,121215,121216,121221,121226,121231,121236,121241,121246],{"__ignoreMap":23},[28,121217,121218],{"class":30,"line":31},[28,121219,121220],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[28,121222,121223],{"class":30,"line":77},[28,121224,121225],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[28,121227,121228],{"class":30,"line":114},[28,121229,121230],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[28,121232,121233],{"class":30,"line":128},[28,121234,121235],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[28,121237,121238],{"class":30,"line":393},[28,121239,121240],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[28,121242,121243],{"class":30,"line":409},[28,121244,121245],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[28,121247,121248],{"class":30,"line":1711},[28,121249,121250],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121252,121253],{},"运行下方的命令",[18,121255,121257],{"className":118917,"code":121256,"language":118919,"meta":23,"style":23},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[25,121258,121259,121264,121271,121276],{"__ignoreMap":23},[28,121260,121261],{"class":30,"line":31},[28,121262,121263],{"class":73},"# cd进入CUDA路径\n",[28,121265,121266,121268],{"class":30,"line":77},[28,121267,101670],{"class":38},[28,121269,121270],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[28,121272,121273],{"class":30,"line":114},[28,121274,121275],{"class":73}," # 查看本路径下的需要软链接的文件名\n",[28,121277,121278],{"class":30,"line":128},[28,121279,121280],{"class":2453}," ls\n",[14,121282,121283],{},[420,121284],{"alt":23,"src":121285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121287,121288,121289,18896,121292,18896,121295,121298],{},"如上图，我需要将",[25,121290,121291],{},"libcudnn_xxx_xxxxx.so.8.9.7",[25,121293,121294],{},"libcudnn_xxx_xxxxx.so.8",[25,121296,121297],{},"libcudnn_xxx_xxxxx.so","软链接",[18,121300,121302],{"className":118917,"code":121301,"language":118919,"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,121303,121304,121309,121325,121339,121353,121367,121381,121395,121409,121414,121420,121425],{"__ignoreMap":23},[28,121305,121306],{"class":30,"line":31},[28,121307,121308],{"class":73},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[28,121310,121311,121313,121316,121319,121322],{"class":30,"line":77},[28,121312,25063],{"class":2453},[28,121314,121315],{"class":735}," ln",[28,121317,121318],{"class":38}," -sf",[28,121320,121321],{"class":735}," libcudnn_cnn_train.so.8.9.7",[28,121323,121324],{"class":735}," libcudnn_cnn_train.so.8\n",[28,121326,121327,121329,121331,121333,121336],{"class":30,"line":114},[28,121328,25063],{"class":2453},[28,121330,121315],{"class":735},[28,121332,121318],{"class":38},[28,121334,121335],{"class":735}," libcudnn_adv_infer.so.8.9.7",[28,121337,121338],{"class":735}," libcudnn_adv_infer.so.8\n",[28,121340,121341,121343,121345,121347,121350],{"class":30,"line":128},[28,121342,25063],{"class":2453},[28,121344,121315],{"class":735},[28,121346,121318],{"class":38},[28,121348,121349],{"class":735}," libcudnn_adv_train.so.8.9.7",[28,121351,121352],{"class":735}," libcudnn_adv_train.so.8\n",[28,121354,121355,121357,121359,121361,121364],{"class":30,"line":393},[28,121356,25063],{"class":2453},[28,121358,121315],{"class":735},[28,121360,121318],{"class":38},[28,121362,121363],{"class":735}," libcudnn_cnn_infer.so.8.9.7",[28,121365,121366],{"class":735}," libcudnn_cnn_infer.so.8\n",[28,121368,121369,121371,121373,121375,121378],{"class":30,"line":409},[28,121370,25063],{"class":2453},[28,121372,121315],{"class":735},[28,121374,121318],{"class":38},[28,121376,121377],{"class":735}," libcudnn.so.8.9.7",[28,121379,121380],{"class":735}," libcudnn.so.8\n",[28,121382,121383,121385,121387,121389,121392],{"class":30,"line":1711},[28,121384,25063],{"class":2453},[28,121386,121315],{"class":735},[28,121388,121318],{"class":38},[28,121390,121391],{"class":735}," libcudnn_ops_infer.so.8.9.7",[28,121393,121394],{"class":735}," libcudnn_ops_infer.so.8\n",[28,121396,121397,121399,121401,121403,121406],{"class":30,"line":1802},[28,121398,25063],{"class":2453},[28,121400,121315],{"class":735},[28,121402,121318],{"class":38},[28,121404,121405],{"class":735}," libcudnn_ops_train.so.8.9.7",[28,121407,121408],{"class":735}," libcudnn_ops_train.so.8\n",[28,121410,121411],{"class":30,"line":1808},[28,121412,121413],{"class":73},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[28,121415,121416,121418],{"class":30,"line":1820},[28,121417,25063],{"class":2453},[28,121419,121204],{"class":735},[28,121421,121422],{"class":30,"line":2102},[28,121423,121424],{"class":73},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[28,121426,121427,121429,121432,121435,121437,121440],{"class":30,"line":2107},[28,121428,27247],{"class":2453},[28,121430,121431],{"class":38}," -l",[28,121433,121434],{"class":735}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[28,121436,256],{"class":38},[28,121438,121439],{"class":735},".so",[28,121441,119642],{"class":38},[605,121443,121445],{"id":121444},"_355-常见问题","3.5.5 常见问题",[588,121447,121448],{},[591,121449,121450],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[18,121452,121454],{"className":118917,"code":121453,"language":118919,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[25,121455,121456],{"__ignoreMap":23},[28,121457,121458,121460,121462],{"class":30,"line":31},[28,121459,25063],{"class":2453},[28,121461,118977],{"class":735},[28,121463,121464],{"class":735}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121466,121467],{},"blacklist-nouveau.conf文件内容如下：",[18,121469,121471],{"className":118917,"code":121470,"language":118919,"meta":23,"style":23},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[25,121472,121473,121481,121488,121500,121510],{"__ignoreMap":23},[28,121474,121475,121478],{"class":30,"line":31},[28,121476,121477],{"class":2453},"blacklist",[28,121479,121480],{"class":735}," nouveau\n",[28,121482,121483,121485],{"class":30,"line":77},[28,121484,121477],{"class":2453},[28,121486,121487],{"class":735}," lbm-nouveau\n",[28,121489,121490,121492,121495,121498],{"class":30,"line":114},[28,121491,116324],{"class":2453},[28,121493,121494],{"class":735}," nouveau",[28,121496,121497],{"class":735}," modeset=",[28,121499,3574],{"class":38},[28,121501,121502,121505,121507],{"class":30,"line":128},[28,121503,121504],{"class":38},"alias",[28,121506,121494],{"class":735},[28,121508,121509],{"class":735}," off\n",[28,121511,121512,121514,121517],{"class":30,"line":393},[28,121513,121504],{"class":38},[28,121515,121516],{"class":735}," lbm-nouveau",[28,121518,121509],{"class":735},[14,121520,121521],{},"接着运行下方命令",[18,121523,121525],{"className":118917,"code":121524,"language":118919,"meta":23,"style":23},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[25,121526,121527,121537,121542],{"__ignoreMap":23},[28,121528,121529,121531,121534],{"class":30,"line":31},[28,121530,25063],{"class":2453},[28,121532,121533],{"class":735}," update-initramfs",[28,121535,121536],{"class":38}," -u\n",[28,121538,121539],{"class":30,"line":77},[28,121540,121541],{"class":2453},"或者\n",[28,121543,121544,121546,121549],{"class":30,"line":114},[28,121545,25063],{"class":2453},[28,121547,121548],{"class":735}," dracut",[28,121550,121551],{"class":38}," --force\n",[14,121553,121554],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[18,121556,121558],{"className":118917,"code":121557,"language":118919,"meta":23,"style":23},"lsmod | grep nouveau\n",[25,121559,121560],{"__ignoreMap":23},[28,121561,121562,121565,121567,121569],{"class":30,"line":31},[28,121563,121564],{"class":2453},"lsmod",[28,121566,25596],{"class":42},[28,121568,30722],{"class":2453},[28,121570,121480],{"class":735},[588,121572,121573],{"start":77},[591,121574,121575],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[18,121577,121579],{"className":118917,"code":121578,"language":118919,"meta":23,"style":23},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[25,121580,121581],{"__ignoreMap":23},[28,121582,121583,121585,121587],{"class":30,"line":31},[28,121584,25063],{"class":2453},[28,121586,118977],{"class":735},[28,121588,121589],{"class":735}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121591,121592],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[18,121594,121596],{"className":118917,"code":121595,"language":118919,"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,121597,121598,121606,121614,121622,121629,121637,121647,121655],{"__ignoreMap":23},[28,121599,121600,121603],{"class":30,"line":31},[28,121601,121602],{"class":2453},"Section",[28,121604,121605],{"class":735}," \"OutputClass\"\n",[28,121607,121608,121611],{"class":30,"line":77},[28,121609,121610],{"class":2453},"   Identifier",[28,121612,121613],{"class":735}," \"nvidia\"\n",[28,121615,121616,121619],{"class":30,"line":114},[28,121617,121618],{"class":2453},"   MatchDriver",[28,121620,121621],{"class":735}," \"nvidia-drm\"\n",[28,121623,121624,121627],{"class":30,"line":128},[28,121625,121626],{"class":2453},"   Driver",[28,121628,121613],{"class":735},[28,121630,121631,121634],{"class":30,"line":393},[28,121632,121633],{"class":2453},"   Option",[28,121635,121636],{"class":735}," \"AllowEmptyInitialConfiguration\"\n",[28,121638,121639,121641,121644],{"class":30,"line":409},[28,121640,121633],{"class":2453},[28,121642,121643],{"class":735}," \"PrimaryGPU\"",[28,121645,121646],{"class":735}," \"yes\"\n",[28,121648,121649,121652],{"class":30,"line":1711},[28,121650,121651],{"class":2453},"   ModulePath",[28,121653,121654],{"class":735}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[28,121656,121657],{"class":30,"line":1802},[28,121658,121659],{"class":2453},"EndSection\n",[588,121661,121662],{"start":114},[591,121663,121664],{},"安装N卡驱动提示错误",[18,121666,121668],{"className":121210,"code":121667,"language":121212,"meta":121213,"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,121669,121670],{"__ignoreMap":23},[28,121671,121672],{"class":30,"line":31},[28,121673,121667],{},[588,121675,121676],{},[591,121677,121678],{},"检查当前运行的内核版本：",[14,121680,121681],{},"运行以下命令以查看你当前正在使用的内核版本：",[18,121683,121685],{"className":117690,"code":121684,"language":117692,"meta":23,"style":23},"uname -r\n",[25,121686,121687],{"__ignoreMap":23},[28,121688,121689,121691],{"class":30,"line":31},[28,121690,70681],{"class":2453},[28,121692,121693],{"class":38}," -r\n",[588,121695,121696],{"start":77},[591,121697,121698],{},"安装内核开发文件：",[14,121700,121701,121702,121705],{},"确保你已经安装了与当前内核版本相匹配的 ",[25,121703,121704],{},"kernel-devel"," 包。运行以下命令来安装：",[18,121707,121709],{"className":117690,"code":121708,"language":117692,"meta":23,"style":23},"sudo dnf install kernel-devel-$(uname -r)\n",[25,121710,121711],{"__ignoreMap":23},[28,121712,121713,121715,121717,121719,121722,121724,121726,121728],{"class":30,"line":31},[28,121714,25063],{"class":2453},[28,121716,26801],{"class":735},[28,121718,24320],{"class":735},[28,121720,121721],{"class":735}," kernel-devel-",[28,121723,25586],{"class":34},[28,121725,70681],{"class":2453},[28,121727,120033],{"class":38},[28,121729,228],{"class":34},[14,121731,121732],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[588,121734,121735],{"start":114},[591,121736,121737],{},"安装内核源代码（如果需要）：",[14,121739,121740],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[18,121742,121744],{"className":117690,"code":121743,"language":117692,"meta":23,"style":23},"sudo dnf install kernel-headers kernel-source\n",[25,121745,121746],{"__ignoreMap":23},[28,121747,121748,121750,121752,121754,121757],{"class":30,"line":31},[28,121749,25063],{"class":2453},[28,121751,26801],{"class":735},[28,121753,24320],{"class":735},[28,121755,121756],{"class":735}," kernel-headers",[28,121758,121759],{"class":735}," kernel-source\n",[588,121761,121762],{"start":128},[591,121763,121764],{},"检查安装：",[14,121766,121767,121768,121771],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[25,121769,121770],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[18,121773,121775],{"className":117690,"code":121774,"language":117692,"meta":23,"style":23},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[25,121776,121777],{"__ignoreMap":23},[28,121778,121779,121781],{"class":30,"line":31},[28,121780,27247],{"class":2453},[28,121782,121783],{"class":735}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121785,121786,121787,121790],{},"如果仍然遇到问题，可以通过 ",[25,121788,121789],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[547,121792,121793],{},"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":77,"depth":77,"links":121795},[121796,121800,121810,121814,121815],{"id":118893,"depth":77,"text":118894,"children":121797},[121798,121799],{"id":118903,"depth":114,"text":118904},{"id":118913,"depth":114,"text":118914},{"id":119113,"depth":77,"text":119114,"children":121801},[121802,121803,121804,121805,121806,121807,121808,121809],{"id":119117,"depth":114,"text":119118},{"id":119187,"depth":114,"text":119188},{"id":119276,"depth":114,"text":119277},{"id":119521,"depth":114,"text":119522},{"id":119591,"depth":114,"text":119592},{"id":119658,"depth":114,"text":119659},{"id":119693,"depth":114,"text":119694},{"id":119748,"depth":114,"text":119749},{"id":119799,"depth":77,"text":119800,"children":121811},[121812,121813],{"id":119803,"depth":114,"text":119804},{"id":119883,"depth":114,"text":119884},{"id":120069,"depth":77,"text":120070},{"id":120242,"depth":77,"text":120243,"children":121816},[121817,121818,121819,121820,121821],{"id":120246,"depth":114,"text":120247},{"id":120287,"depth":114,"text":120288},{"id":120574,"depth":114,"text":120575},{"id":120948,"depth":114,"text":120949},{"id":121444,"depth":114,"text":121445},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118885,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121828,"title":121829,"body":121830,"description":559,"extension":560,"meta":122170,"navigation":562,"path":122171,"seo":122172,"stem":122173,"__hash__":122174},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121831,"toc":122168},[121832,121835,121840,121843,122089,122094,122097,122133,122136,122165],[10,121833,121829],{"id":121834},"_4-命令教程长期积累",[588,121836,121837],{},[591,121838,121839],{},"大多数命令",[14,121841,121842],{},"常用 Linux 命令速查：",[18,121844,121846],{"className":117690,"code":121845,"language":117692,"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,121847,121848,121853,121860,121867,121875,121882,121889,121897,121905,121912,121919,121927,121931,121936,121943,121951,121958,121962,121967,121974,121982,121990,121998,122006,122010,122015,122023,122030,122037,122045,122053,122057,122062,122071,122080],{"__ignoreMap":23},[28,121849,121850],{"class":30,"line":31},[28,121851,121852],{"class":73},"# 文件与目录\n",[28,121854,121855,121857],{"class":30,"line":77},[28,121856,27247],{"class":2453},[28,121858,121859],{"class":73},"        # 列出目录内容\n",[28,121861,121862,121864],{"class":30,"line":114},[28,121863,101670],{"class":38},[28,121865,121866],{"class":73},"        # 切换目录\n",[28,121868,121869,121872],{"class":30,"line":128},[28,121870,121871],{"class":38},"pwd",[28,121873,121874],{"class":73},"       # 显示当前路径\n",[28,121876,121877,121879],{"class":30,"line":393},[28,121878,101660],{"class":2453},[28,121880,121881],{"class":73},"     # 创建目录\n",[28,121883,121884,121886],{"class":30,"line":409},[28,121885,25809],{"class":2453},[28,121887,121888],{"class":73},"        # 删除文件或目录\n",[28,121890,121891,121894],{"class":30,"line":1711},[28,121892,121893],{"class":2453},"cp",[28,121895,121896],{"class":73},"        # 复制文件或目录\n",[28,121898,121899,121902],{"class":30,"line":1802},[28,121900,121901],{"class":2453},"mv",[28,121903,121904],{"class":73},"        # 移动\u002F重命名文件或目录\n",[28,121906,121907,121909],{"class":30,"line":1808},[28,121908,101677],{"class":2453},[28,121910,121911],{"class":73},"     # 创建空文件\n",[28,121913,121914,121916],{"class":30,"line":1820},[28,121915,121159],{"class":2453},[28,121917,121918],{"class":73},"       # 查看文件内容\n",[28,121920,121921,121924],{"class":30,"line":2102},[28,121922,121923],{"class":2453},"head\u002Ftail",[28,121925,121926],{"class":73}," # 查看文件头部\u002F尾部\n",[28,121928,121929],{"class":30,"line":2107},[28,121930,2890],{"emptyLinePlaceholder":562},[28,121932,121933],{"class":30,"line":2113},[28,121934,121935],{"class":73},"# 权限管理\n",[28,121937,121938,121940],{"class":30,"line":2118},[28,121939,25098],{"class":2453},[28,121941,121942],{"class":73},"     # 修改文件权限\n",[28,121944,121945,121948],{"class":30,"line":2132},[28,121946,121947],{"class":2453},"chown",[28,121949,121950],{"class":73},"     # 修改文件所有者\n",[28,121952,121953,121955],{"class":30,"line":2137},[28,121954,25063],{"class":2453},[28,121956,121957],{"class":73},"      # 以管理员身份执行\n",[28,121959,121960],{"class":30,"line":2143},[28,121961,2890],{"emptyLinePlaceholder":562},[28,121963,121964],{"class":30,"line":2164},[28,121965,121966],{"class":73},"# 系统信息\n",[28,121968,121969,121971],{"class":30,"line":2169},[28,121970,70681],{"class":2453},[28,121972,121973],{"class":73},"     # 系统信息\n",[28,121975,121976,121979],{"class":30,"line":2183},[28,121977,121978],{"class":2453},"df",[28,121980,121981],{"class":73},"        # 磁盘使用情况\n",[28,121983,121984,121987],{"class":30,"line":2188},[28,121985,121986],{"class":2453},"free",[28,121988,121989],{"class":73},"      # 内存使用情况\n",[28,121991,121992,121995],{"class":30,"line":2217},[28,121993,121994],{"class":2453},"top\u002Fhtop",[28,121996,121997],{"class":73},"  # 进程监控\n",[28,121999,122000,122003],{"class":30,"line":2222},[28,122001,122002],{"class":2453},"ps",[28,122004,122005],{"class":73},"        # 查看进程\n",[28,122007,122008],{"class":30,"line":2239},[28,122009,2890],{"emptyLinePlaceholder":562},[28,122011,122012],{"class":30,"line":2244},[28,122013,122014],{"class":73},"# 网络\n",[28,122016,122017,122020],{"class":30,"line":2249},[28,122018,122019],{"class":2453},"ping",[28,122021,122022],{"class":73},"      # 测试网络连通性\n",[28,122024,122025,122027],{"class":30,"line":2254},[28,122026,27335],{"class":2453},[28,122028,122029],{"class":73},"      # 发送 HTTP 请求\n",[28,122031,122032,122034],{"class":30,"line":2268},[28,122033,120683],{"class":2453},[28,122035,122036],{"class":73},"      # 下载文件\n",[28,122038,122039,122042],{"class":30,"line":2273},[28,122040,122041],{"class":2453},"ssh",[28,122043,122044],{"class":73},"       # 远程登录\n",[28,122046,122047,122050],{"class":30,"line":3067},[28,122048,122049],{"class":2453},"scp",[28,122051,122052],{"class":73},"       # 远程文件传输\n",[28,122054,122055],{"class":30,"line":3081},[28,122056,2890],{"emptyLinePlaceholder":562},[28,122058,122059],{"class":30,"line":3089},[28,122060,122061],{"class":73},"# 包管理（Debian\u002FUbuntu）\n",[28,122063,122064,122066,122068],{"class":30,"line":3094},[28,122065,117762],{"class":2453},[28,122067,117741],{"class":735},[28,122069,122070],{"class":73},"   # 更新软件源\n",[28,122072,122073,122075,122077],{"class":30,"line":3100},[28,122074,117762],{"class":2453},[28,122076,24320],{"class":735},[28,122078,122079],{"class":73},"  # 安装软件包\n",[28,122081,122082,122084,122086],{"class":30,"line":3106},[28,122083,117762],{"class":2453},[28,122085,26565],{"class":735},[28,122087,122088],{"class":73},"   # 卸载软件包\n",[588,122090,122091],{"start":77},[591,122092,122093],{},"KDE Dolphin 以root打开",[14,122095,122096],{},"kde5",[18,122098,122100],{"className":117690,"code":122099,"language":117692,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[25,122101,122102],{"__ignoreMap":23},[28,122103,122104,122107,122110,122113,122115,122117,122120,122123,122125,122128,122130],{"class":30,"line":31},[28,122105,122106],{"class":2453},"pkexec",[28,122108,122109],{"class":735}," env",[28,122111,122112],{"class":735}," DISPLAY=",[28,122114,28629],{"class":34},[28,122116,28687],{"class":735},[28,122118,122119],{"class":34},"$XAUTHORITY ",[28,122121,122122],{"class":735},"KDE_SESSION_VERSION=",[28,122124,108],{"class":38},[28,122126,122127],{"class":735}," KDE_FULL_SESSION=",[28,122129,1853],{"class":38},[28,122131,122132],{"class":735}," dolphin\n",[14,122134,122135],{},"kde6",[18,122137,122139],{"className":117690,"code":122138,"language":117692,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[25,122140,122141],{"__ignoreMap":23},[28,122142,122143,122145,122147,122149,122151,122153,122155,122157,122159,122161,122163],{"class":30,"line":31},[28,122144,122106],{"class":2453},[28,122146,122109],{"class":735},[28,122148,122112],{"class":735},[28,122150,28629],{"class":34},[28,122152,28687],{"class":735},[28,122154,122119],{"class":34},[28,122156,122122],{"class":735},[28,122158,970],{"class":38},[28,122160,122127],{"class":735},[28,122162,1853],{"class":38},[28,122164,122132],{"class":735},[547,122166,122167],{},"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":77,"depth":77,"links":122169},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121829,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122176,"title":122177,"body":122178,"description":559,"extension":560,"meta":122192,"navigation":562,"path":122193,"seo":122194,"stem":122195,"__hash__":122196},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122179,"toc":122190},[122180,122183],[10,122181,122177],{"id":122182},"_5-各种环境配置",[14,122184,122185],{},[80,122186,122189],{"href":122187,"rel":122188},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24351],"电控组环境搭建大全",{"title":23,"searchDepth":77,"depth":77,"links":122191},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122177,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122198,"title":122199,"body":122200,"description":559,"extension":560,"meta":122548,"navigation":562,"path":122549,"seo":122550,"stem":122551,"__hash__":122552},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122201,"toc":122540},[122202,122205,122209,122213,122217,122222,122229,122233,122526,122530,122537],[10,122203,122199],{"id":122204},"_6-拓展功能",[60,122206,122208],{"id":122207},"_61-wine","6.1 Wine",[60,122210,122212],{"id":122211},"_62-android","6.2 Android",[605,122214,122216],{"id":122215},"_621-i卡a卡","6.2.1 I卡、A卡",[588,122218,122219],{},[591,122220,122221],{},"Wayland-Waydroid(体验超级好)",[14,122223,122224,122225],{},"Waydroid 官网与安装指南：",[80,122226,122227],{"href":122227,"rel":122228},"https:\u002F\u002Fwaydro.id\u002F",[24351],[605,122230,122232],{"id":122231},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[588,122234,122235],{},[591,122236,122237,122238,122240,122241,122245,122247,122250,122255,122452],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54193,122239],{},"BlissOS 官网下载：",[80,122242,122243],{"href":122243,"rel":122244},"https:\u002F\u002Fblissos.org\u002F",[24351],[54193,122246],{},[420,122248],{"alt":23,"src":122249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[588,122251,122252],{"start":114},[591,122253,122254],{},"比较推荐的配置",[18,122256,122258],{"className":117690,"code":122257,"language":117692,"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,122259,122260,122267,122277,122287,122297,122309,122319,122326,122336,122345,122354,122364,122374,122383,122393,122403,122415,122425,122434,122444],{"__ignoreMap":23},[28,122261,122262,122265],{"class":30,"line":31},[28,122263,122264],{"class":2453},"qemu-system-x86_64",[28,122266,25165],{"class":38},[28,122268,122269,122272,122275],{"class":30,"line":77},[28,122270,122271],{"class":38},"        -M",[28,122273,122274],{"class":735}," q35,vmport=off",[28,122276,25165],{"class":38},[28,122278,122279,122282,122285],{"class":30,"line":114},[28,122280,122281],{"class":38},"        -accel",[28,122283,122284],{"class":735}," kvm",[28,122286,25165],{"class":38},[28,122288,122289,122292,122295],{"class":30,"line":128},[28,122290,122291],{"class":38},"        -cpu",[28,122293,122294],{"class":735}," qemu64,+sse3,+sse4.2",[28,122296,25165],{"class":38},[28,122298,122299,122302,122305,122307],{"class":30,"line":393},[28,122300,122301],{"class":38},"        -smp",[28,122303,122304],{"class":735}," 8,cores=",[28,122306,103],{"class":38},[28,122308,25165],{"class":38},[28,122310,122311,122314,122317],{"class":30,"line":409},[28,122312,122313],{"class":38},"        -m",[28,122315,122316],{"class":735}," 6G",[28,122318,25165],{"class":38},[28,122320,122321,122324],{"class":30,"line":1711},[28,122322,122323],{"class":38},"        -usb",[28,122325,25165],{"class":38},[28,122327,122328,122331,122334],{"class":30,"line":1802},[28,122329,122330],{"class":38},"        -device",[28,122332,122333],{"class":735}," virtio-tablet",[28,122335,25165],{"class":38},[28,122337,122338,122340,122343],{"class":30,"line":1808},[28,122339,122330],{"class":38},[28,122341,122342],{"class":735}," virtio-keyboard",[28,122344,25165],{"class":38},[28,122346,122347,122349,122352],{"class":30,"line":1820},[28,122348,122330],{"class":38},[28,122350,122351],{"class":735}," usb-tablet",[28,122353,25165],{"class":38},[28,122355,122356,122359,122362],{"class":30,"line":2102},[28,122357,122358],{"class":38},"        -bios",[28,122360,122361],{"class":735}," OVMF-pure-efi64.fd",[28,122363,25165],{"class":38},[28,122365,122366,122369,122372],{"class":30,"line":2107},[28,122367,122368],{"class":38},"        -net",[28,122370,122371],{"class":735}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[28,122373,25165],{"class":38},[28,122375,122376,122378,122381],{"class":30,"line":2113},[28,122377,122368],{"class":38},[28,122379,122380],{"class":735}," nic,model=virtio",[28,122382,25165],{"class":38},[28,122384,122385,122388,122391],{"class":30,"line":2118},[28,122386,122387],{"class":38},"        -audio",[28,122389,122390],{"class":735}," sdl,model=hda",[28,122392,25165],{"class":38},[28,122394,122395,122398,122401],{"class":30,"line":2132},[28,122396,122397],{"class":38},"        -display",[28,122399,122400],{"class":735}," sdl,gl=on,show-cursor=on",[28,122402,25165],{"class":38},[28,122404,122405,122407,122410,122413],{"class":30,"line":2137},[28,122406,122330],{"class":38},[28,122408,122409],{"class":735}," virtio-vga-gl,xres=1920,yres=",[28,122411,122412],{"class":38},"1080",[28,122414,25165],{"class":38},[28,122416,122417,122420,122423],{"class":30,"line":2143},[28,122418,122419],{"class":38},"        -drive",[28,122421,122422],{"class":735}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[28,122424,25165],{"class":38},[28,122426,122427,122429,122432],{"class":30,"line":2164},[28,122428,122419],{"class":38},[28,122430,122431],{"class":735}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[28,122433,25165],{"class":38},[28,122435,122436,122439,122442],{"class":30,"line":2169},[28,122437,122438],{"class":38},"        -monitor",[28,122440,122441],{"class":735}," stdio",[28,122443,25165],{"class":38},[28,122445,122446,122449],{"class":30,"line":2183},[28,122447,122448],{"class":38},"        -serial",[28,122450,122451],{"class":735}," none\n",[588,122453,122454],{"start":393},[591,122455,122456,122457],{},"常用操作：",[588,122458,122459,122462,122518],{},[591,122460,122461],{},"全屏：Ctrl+Alt+F",[591,122463,122464,122465,122470],{},"adb调试",[588,122466,122467],{},[591,122468,122469],{},"使Linux与Android用ADB连接。",[18,122471,122473],{"className":117690,"code":122472,"language":117692,"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,122474,122475,122480,122491,122496,122508,122513],{"__ignoreMap":23},[28,122476,122477],{"class":30,"line":31},[28,122478,122479],{"class":73},"# 连接安卓\n",[28,122481,122482,122485,122488],{"class":30,"line":77},[28,122483,122484],{"class":2453},"adb",[28,122486,122487],{"class":735}," connect",[28,122489,122490],{"class":38}," 127.0.0.1\n",[28,122492,122493],{"class":30,"line":114},[28,122494,122495],{"class":73},"# 打开shell\n",[28,122497,122498,122500,122502,122505],{"class":30,"line":128},[28,122499,122484],{"class":2453},[28,122501,27369],{"class":38},[28,122503,122504],{"class":735}," 127.0.0.1:5555",[28,122506,122507],{"class":735}," shell\n",[28,122509,122510],{"class":30,"line":393},[28,122511,122512],{"class":73},"# 使用root权限\n",[28,122514,122515],{"class":30,"line":409},[28,122516,122517],{"class":2453},"su\n",[591,122519,122520,122521],{},"中文输入法",[588,122522,122523],{},[591,122524,122525],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[60,122527,122529],{"id":122528},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122531,122532,122533],{},"rEFInd 官网与文档：",[80,122534,122535],{"href":122535,"rel":122536},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24351],[547,122538,122539],{},"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":77,"depth":77,"links":122541},[122542,122543,122547],{"id":122207,"depth":77,"text":122208},{"id":122211,"depth":77,"text":122212,"children":122544},[122545,122546],{"id":122215,"depth":114,"text":122216},{"id":122231,"depth":114,"text":122232},{"id":122528,"depth":77,"text":122529},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122199,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122554,"title":122555,"body":122556,"description":559,"extension":560,"meta":125855,"navigation":562,"path":125856,"seo":125857,"stem":125858,"__hash__":125859},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122557,"toc":125829},[122558,122561,122565,122568,122575,122825,122828,122900,122903,122907,122911,122916,122919,122922,122925,122930,122933,122936,122939,122944,122947,122952,122955,122958,122963,122966,122971,122974,122978,122982,122985,122990,122993,123007,123010,123013,123022,123025,123034,123037,123040,123049,123052,123061,123064,123067,123076,123079,123082,123097,123100,123103,123112,123117,123120,123123,123132,123135,123144,123147,123156,123159,123168,123173,123176,123184,123189,123192,123201,123204,123212,123217,123220,123229,123232,123235,123239,123242,123247,123250,123255,123269,123274,123279,123290,123295,123301,123306,123321,123326,123329,123334,123339,123344,123352,123357,123364,123369,123380,123385,123388,123392,123395,123398,123403,123406,123425,123430,123433,123442,123447,123450,123472,123475,123505,123508,123513,123516,123530,123535,123554,123557,123560,123565,123577,123582,123587,123590,123595,123598,123613,123616,123621,123626,123630,123635,123675,123678,123682,123688,123694,123699,123702,123709,123714,123721,123724,123727,123734,123748,123751,123811,123814,123828,123840,123843,123846,123849,123913,123916,123919,123922,123942,123945,123950,123957,123961,123964,123968,123973,123978,123982,123985,123988,124030,124035,124038,124060,124075,124077,124082,124094,124154,124156,124158,124212,124214,124216,124222,124227,124230,124235,124239,124242,124304,124309,124312,124314,124318,124330,124412,124414,124416,124470,124476,124478,124482,124487,124489,124494,124498,124518,124553,124557,124560,124563,124566,124573,124576,124588,124591,124606,124609,124628,124676,124679,124696,124699,124713,124718,124721,124730,124745,124757,124795,124800,124809,124814,124819,124845,124854,124858,124862,124867,124870,124874,124878,124883,124886,124891,124894,124899,124902,124907,124910,124914,124919,124922,124927,124930,124934,124939,124942,124947,124950,124955,124958,124962,124967,124970,124975,124978,124983,124986,124990,124995,124998,125003,125006,125011,125014,125019,125022,125027,125030,125035,125038,125042,125047,125050,125055,125062,125066,125071,125074,125079,125082,125086,125091,125094,125097,125100,125103,125106,125110,125113,125123,125128,125133,125155,125160,125165,125172,125176,125181,125184,125187,125192,125195,125198,125201,125204,125207,125210,125213,125216,125219,125222,125225,125228,125233,125238,125243,125248,125253,125258,125263,125266,125270,125273,125277,125282,125287,125292,125297,125301,125307,125315,125320,125323,125328,125343,125346,125351,125385,125400,125403,125458,125484,125496,125499,125508,125511,125526,125531,125534,125540,125545,125548,125553,125556,125561,125566,125573,125576,125591,125594,125629,125634,125642,125680,125683,125686,125691,125694,125699,125710,125744,125749,125752,125761,125766,125772,125775,125780,125789,125794,125797,125800,125805,125813,125816,125821,125826],[10,122559,122555],{"id":122560},"_7-其他操作",[60,122562,122564],{"id":122563},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122566,122567],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122569,122570,122571,122574],{},"进入工控机的硬盘目录，进入",[25,122572,122573],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[18,122576,122580],{"className":122577,"code":122578,"language":122579,"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,122581,122582,122590,122601,122608,122615,122627,122634,122646,122657,122668,122675,122682,122689,122701,122713,122720,122732,122744,122751,122763,122775,122787,122798,122805,122816],{"__ignoreMap":23},[28,122583,122584,122587],{"class":30,"line":31},[28,122585,122586],{"class":51777},"network",[28,122588,122589],{"class":34},": \n",[28,122591,122592,122595,122597,122599],{"class":30,"line":77},[28,122593,122594],{"class":51777},"  version",[28,122596,51914],{"class":34},[28,122598,93],{"class":38},[28,122600,3164],{"class":34},[28,122602,122603,122606],{"class":30,"line":114},[28,122604,122605],{"class":51777},"  wifis",[28,122607,122589],{"class":34},[28,122609,122610,122613],{"class":30,"line":128},[28,122611,122612],{"class":51777},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[28,122614,122589],{"class":34},[28,122616,122617,122620,122622,122625],{"class":30,"line":393},[28,122618,122619],{"class":51777},"      renderer",[28,122621,51914],{"class":34},[28,122623,122624],{"class":735},"NetworkManager",[28,122626,3164],{"class":34},[28,122628,122629,122632],{"class":30,"line":409},[28,122630,122631],{"class":51777},"      match",[28,122633,122589],{"class":34},[28,122635,122636,122639,122641,122644],{"class":30,"line":1711},[28,122637,122638],{"class":51777},"        name",[28,122640,51914],{"class":34},[28,122642,122643],{"class":735},"\"wlan0\"",[28,122645,3164],{"class":34},[28,122647,122648,122651,122653,122655],{"class":30,"line":1802},[28,122649,122650],{"class":51777},"      dhcp4",[28,122652,51914],{"class":34},[28,122654,1853],{"class":38},[28,122656,3164],{"class":34},[28,122658,122659,122662,122664,122666],{"class":30,"line":1808},[28,122660,122661],{"class":51777},"      dhcp6",[28,122663,51914],{"class":34},[28,122665,1853],{"class":38},[28,122667,3164],{"class":34},[28,122669,122670,122673],{"class":30,"line":1820},[28,122671,122672],{"class":51777},"      access-points",[28,122674,122589],{"class":34},[28,122676,122677,122680],{"class":30,"line":2102},[28,122678,122679],{"class":735},"        \"EMIS_Vinci_Robocon_5G\"",[28,122681,122589],{"class":34},[28,122683,122684,122687],{"class":30,"line":2107},[28,122685,122686],{"class":51777},"          auth",[28,122688,122589],{"class":34},[28,122690,122691,122694,122696,122699],{"class":30,"line":2113},[28,122692,122693],{"class":51777},"            key-management",[28,122695,51914],{"class":34},[28,122697,122698],{"class":735},"\"psk\"",[28,122700,3164],{"class":34},[28,122702,122703,122706,122708,122711],{"class":30,"line":2118},[28,122704,122705],{"class":51777},"            password",[28,122707,51914],{"class":34},[28,122709,122710],{"class":735},"\"vinci666\"",[28,122712,3164],{"class":34},[28,122714,122715,122718],{"class":30,"line":2132},[28,122716,122717],{"class":51777},"          networkmanager",[28,122719,122589],{"class":34},[28,122721,122722,122725,122727,122730],{"class":30,"line":2137},[28,122723,122724],{"class":51777},"            uuid",[28,122726,51914],{"class":34},[28,122728,122729],{"class":735},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[28,122731,3164],{"class":34},[28,122733,122734,122737,122739,122742],{"class":30,"line":2143},[28,122735,122736],{"class":51777},"            name",[28,122738,51914],{"class":34},[28,122740,122741],{"class":735},"\"EMIS_Vinci_Robocon_5G\"",[28,122743,3164],{"class":34},[28,122745,122746,122749],{"class":30,"line":2164},[28,122747,122748],{"class":51777},"            passthrough",[28,122750,122589],{"class":34},[28,122752,122753,122756,122758,122761],{"class":30,"line":2169},[28,122754,122755],{"class":51777},"              wifi-security.auth-alg",[28,122757,51914],{"class":34},[28,122759,122760],{"class":735},"\"open\"",[28,122762,3164],{"class":34},[28,122764,122765,122768,122770,122773],{"class":30,"line":2183},[28,122766,122767],{"class":51777},"              ipv6.addr-gen-mode",[28,122769,51914],{"class":34},[28,122771,122772],{"class":735},"\"default\"",[28,122774,3164],{"class":34},[28,122776,122777,122780,122782,122785],{"class":30,"line":2188},[28,122778,122779],{"class":51777},"              ipv6.ip6-privacy",[28,122781,51914],{"class":34},[28,122783,122784],{"class":735},"\"-1\"",[28,122786,3164],{"class":34},[28,122788,122789,122792,122794,122796],{"class":30,"line":2217},[28,122790,122791],{"class":51777},"              proxy._",[28,122793,51914],{"class":34},[28,122795,8140],{"class":735},[28,122797,3164],{"class":34},[28,122799,122800,122803],{"class":30,"line":2222},[28,122801,122802],{"class":51777},"      networkmanager",[28,122804,122589],{"class":34},[28,122806,122807,122810,122812,122814],{"class":30,"line":2239},[28,122808,122809],{"class":51777},"        uuid",[28,122811,51914],{"class":34},[28,122813,122729],{"class":735},[28,122815,3164],{"class":34},[28,122817,122818,122820,122822],{"class":30,"line":2244},[28,122819,122638],{"class":51777},[28,122821,51914],{"class":34},[28,122823,122824],{"class":735},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122826,122827],{},"将其改为新wifi的名和密码：",[18,122829,122831],{"className":122577,"code":122830,"language":122579,"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,122832,122833,122839,122848,122854,122861,122870,122878,122884,122890],{"__ignoreMap":23},[28,122834,122835,122837],{"class":30,"line":31},[28,122836,122586],{"class":51777},[28,122838,4227],{"class":34},[28,122840,122841,122843,122845],{"class":30,"line":77},[28,122842,122594],{"class":51777},[28,122844,51914],{"class":34},[28,122846,122847],{"class":38},"2\n",[28,122849,122850,122852],{"class":30,"line":114},[28,122851,122605],{"class":51777},[28,122853,4227],{"class":34},[28,122855,122856,122859],{"class":30,"line":128},[28,122857,122858],{"class":51777},"    wlan0",[28,122860,4227],{"class":34},[28,122862,122863,122865,122867],{"class":30,"line":393},[28,122864,122650],{"class":51777},[28,122866,51914],{"class":34},[28,122868,122869],{"class":38},"true\n",[28,122871,122872,122874,122876],{"class":30,"line":409},[28,122873,122661],{"class":51777},[28,122875,51914],{"class":34},[28,122877,122869],{"class":38},[28,122879,122880,122882],{"class":30,"line":1711},[28,122881,122672],{"class":51777},[28,122883,4227],{"class":34},[28,122885,122886,122888],{"class":30,"line":1802},[28,122887,122679],{"class":735},[28,122889,4227],{"class":34},[28,122891,122892,122895,122897],{"class":30,"line":1808},[28,122893,122894],{"class":51777},"          password",[28,122896,51914],{"class":34},[28,122898,122899],{"class":735},"\"vinci666\"\n",[14,122901,122902],{},"工控机开机即可连上网。",[60,122904,122906],{"id":122905},"_72-ssh远程开发","7.2 SSH远程开发",[605,122908,122910],{"id":122909},"_721-环境准备","7.2.1 环境准备",[14,122912,122913],{},[780,122914,122915],{},"1.硬件准备",[14,122917,122918],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122920,122921],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122923,122924],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122926,122927],{},[780,122928,122929],{},"2.设置固定IP",[14,122931,122932],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122934,122935],{},"1.进入设置界面",[14,122937,122938],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122940,122941],{},[420,122942],{"alt":23,"src":122943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122945,122946],{},"2.配置所连接的网络",[14,122948,122949],{},[420,122950],{"alt":23,"src":122951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122953,122954],{},"3.设置固定IP",[14,122956,122957],{},"查看当前IP地址。",[14,122959,122960],{},[420,122961],{"alt":23,"src":122962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122964,122965],{},"设置固定IP。",[14,122967,122968],{},[420,122969],{"alt":23,"src":122970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122972,122973],{},"至此，IP配置完毕。",[605,122975,122977],{"id":122976},"_722-环境搭建","7.2.2 环境搭建",[14,122979,122980],{},[780,122981,26240],{},[14,122983,122984],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122986,122987],{},[780,122988,122989],{},"实现",[14,122991,122992],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[588,122994,122995,122998,123001,123004],{},[591,122996,122997],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[591,122999,123000],{},"远程主机启动SSH服务；",[591,123002,123003],{},"本地主机登陆远程主机；",[591,123005,123006],{},"实现数据传输。",[14,123008,123009],{},"1.安装SSH客户端与服务端",[14,123011,123012],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[18,123014,123016],{"className":121210,"code":123015,"language":121212,"meta":121213,"style":23}," sudo apt install openssh-server\n",[25,123017,123018],{"__ignoreMap":23},[28,123019,123020],{"class":30,"line":31},[28,123021,123015],{},[14,123023,123024],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[18,123026,123028],{"className":121210,"code":123027,"language":121212,"meta":121213,"style":23},"sudo apt install openssh-client\n",[25,123029,123030],{"__ignoreMap":23},[28,123031,123032],{"class":30,"line":31},[28,123033,123027],{},[14,123035,123036],{},"2.远程主机启动SSH服务",[14,123038,123039],{},"远程主机启动 ssh 服务命令如下：",[18,123041,123043],{"className":121210,"code":123042,"language":121212,"meta":121213,"style":23},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[25,123044,123045],{"__ignoreMap":23},[28,123046,123047],{"class":30,"line":31},[28,123048,123042],{},[14,123050,123051],{},"启动后可使用如下命令查看服务是否正常运行：",[18,123053,123055],{"className":121210,"code":123054,"language":121212,"meta":121213,"style":23},"ps -e | grep ssh\n",[25,123056,123057],{"__ignoreMap":23},[28,123058,123059],{"class":30,"line":31},[28,123060,123054],{},[14,123062,123063],{},"如果启动成功，会包含 sshd 程序。",[14,123065,123066],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[18,123068,123070],{"className":121210,"code":123069,"language":121212,"meta":121213,"style":23},"sudo systemctl enable ssh\n",[25,123071,123072],{"__ignoreMap":23},[28,123073,123074],{"class":30,"line":31},[28,123075,123069],{},[14,123077,123078],{},"3.本地远程登录",[14,123080,123081],{},"登录远程主机可以调用如下命令:",[18,123083,123085],{"className":117690,"code":123084,"language":117692,"meta":23,"style":23},"ssh -X 用户名@ip地址\n",[25,123086,123087],{"__ignoreMap":23},[28,123088,123089,123091,123094],{"class":30,"line":31},[28,123090,122041],{"class":2453},[28,123092,123093],{"class":38}," -X",[28,123095,123096],{"class":735}," 用户名@ip地址\n",[14,123098,123099],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123101,123102],{},"如果退出，可以调用exit命令：",[18,123104,123106],{"className":121210,"code":123105,"language":121212,"meta":121213,"style":23},"exit\n",[25,123107,123108],{"__ignoreMap":23},[28,123109,123110],{"class":30,"line":31},[28,123111,123105],{},[14,123113,123114],{},[780,123115,123116],{},"4.实现数据传输",[14,123118,123119],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123121,123122],{},"上传文件指令格式如下：",[18,123124,123126],{"className":121210,"code":123125,"language":121212,"meta":121213,"style":23},"scp 本地文件路径 账号@ip:路径\n",[25,123127,123128],{"__ignoreMap":23},[28,123129,123130],{"class":30,"line":31},[28,123131,123125],{},[14,123133,123134],{},"上传文件夹指令格式如下：",[18,123136,123138],{"className":121210,"code":123137,"language":121212,"meta":121213,"style":23},"scp -r 本地文件夹路径 账号@ip:路径\n",[25,123139,123140],{"__ignoreMap":23},[28,123141,123142],{"class":30,"line":31},[28,123143,123137],{},[14,123145,123146],{},"下载文件指令格式如下：",[18,123148,123150],{"className":121210,"code":123149,"language":121212,"meta":121213,"style":23},"scp 账号@ip:路径 本地文件夹路径\n",[25,123151,123152],{"__ignoreMap":23},[28,123153,123154],{"class":30,"line":31},[28,123155,123149],{},[14,123157,123158],{},"下载文件夹指令格式如下：",[18,123160,123162],{"className":121210,"code":123161,"language":121212,"meta":121213,"style":23},"scp -r 账号@ip:路径 本地文件夹路径\n",[25,123163,123164],{"__ignoreMap":23},[28,123165,123166],{"class":30,"line":31},[28,123167,123161],{},[14,123169,123170],{},[780,123171,123172],{},"优化",[14,123174,123175],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[588,123177,123178,123181],{},[591,123179,123180],{},"本地生成密钥对；",[591,123182,123183],{},"将公钥上传至远程主机。",[14,123185,123186],{},[780,123187,123188],{},"1.生成密钥对",[14,123190,123191],{},"本地客户端生成公私钥：（一路回车默认即可）",[18,123193,123195],{"className":121210,"code":123194,"language":121212,"meta":121213,"style":23},"ssh-keygen\n",[25,123196,123197],{"__ignoreMap":23},[28,123198,123199],{"class":30,"line":31},[28,123200,123194],{},[14,123202,123203],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[588,123205,123206,123209],{},[591,123207,123208],{},"id_rsa （私钥）；",[591,123210,123211],{},"id_rsa.pub (公钥)。",[14,123213,123214],{},[780,123215,123216],{},"2.公钥上传",[14,123218,123219],{},"上传指令如下：",[18,123221,123223],{"className":121210,"code":123222,"language":121212,"meta":121213,"style":23},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[25,123224,123225],{"__ignoreMap":23},[28,123226,123227],{"class":30,"line":31},[28,123228,123222],{},[14,123230,123231],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123233,123234],{},"以后再远程登录就无需录入密码了。",[605,123236,123238],{"id":123237},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123240,123241],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123243,123244],{},[780,123245,123246],{},"1.准备工作",[14,123248,123249],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123251,123252],{},[780,123253,123254],{},"2.为VScode安装远程开发插件",[14,123256,123257,123258,123261,123262,123265,123266,28871],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[25,123259,123260],{},"扩展：商店","的搜索栏输入",[25,123263,123264],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[25,123267,123268],{},"安装",[14,123270,123271],{},[420,123272],{"alt":23,"src":123273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123275,123276],{},[780,123277,123278],{},"3.配置远程连接",[14,123280,123281,123282,123285,123286,123289],{},"步骤1：使用快捷键",[25,123283,123284],{},"ctrl + shift + p","打开命令输入窗口，并输入",[25,123287,123288],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123291,123292],{},[420,123293],{"alt":23,"src":123294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123296,123297,123298,28871],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[25,123299,123300],{},"Add New SSH Host",[14,123302,123303],{},[420,123304],{"alt":23,"src":123305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123307,123308,123309,123312,123313,123316,123317,123320],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[25,123310,123311],{},"ssh +X ubuntu@192.168.43.164","，其中，",[25,123314,123315],{},"ubuntu","需要替换为你的登录用户名，",[25,123318,123319],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123322,123323],{},[420,123324],{"alt":23,"src":123325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123327,123328],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123330,123331],{},[420,123332],{"alt":23,"src":123333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123335,123336],{},[420,123337],{"alt":23,"src":123338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123340,123341],{},[780,123342,123343],{},"4.使用",[14,123345,123346,123347,123285,123349,123351],{},"步骤1：继续使用快捷键",[25,123348,123284],{},[25,123350,123288],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123353,123354],{},[420,123355],{"alt":23,"src":123356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123358,123359,123360,123363],{},"或者，也可以点击侧边栏的",[25,123361,123362],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123365,123366],{},[420,123367],{"alt":23,"src":123368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123370,123371,123372,123375,123376,123379],{},"步骤2：选择菜单栏的",[25,123373,123374],{},"文件","下的",[25,123377,123378],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123381,123382],{},[420,123383],{"alt":23,"src":123384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123386,123387],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[60,123389,123391],{"id":123390},"_73-远程桌面","7.3 远程桌面",[14,123393,123394],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123396,123397],{},"我们选择使用VNC来看。",[588,123399,123400],{},[591,123401,123402],{},"安装VNC服务器：",[14,123404,123405],{},"这里以TigerVNC为例进行安装：",[18,123407,123409],{"className":117690,"code":123408,"language":117692,"meta":23,"style":23},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[25,123410,123411],{"__ignoreMap":23},[28,123412,123413,123415,123417,123419,123422],{"class":30,"line":31},[28,123414,25063],{"class":2453},[28,123416,117711],{"class":735},[28,123418,24320],{"class":735},[28,123420,123421],{"class":735}," tigervnc-standalone-server",[28,123423,123424],{"class":735}," tigervnc-common\n",[588,123426,123427],{"start":77},[591,123428,123429],{},"设置VNC密码：",[14,123431,123432],{},"为VNC用户设置密码，运行以下命令：",[18,123434,123436],{"className":117690,"code":123435,"language":117692,"meta":23,"style":23},"vncpasswd\n",[25,123437,123438],{"__ignoreMap":23},[28,123439,123440],{"class":30,"line":31},[28,123441,123435],{"class":2453},[588,123443,123444],{"start":114},[591,123445,123446],{},"配置VNC启动脚本:",[14,123448,123449],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[18,123451,123453],{"className":117690,"code":123452,"language":117692,"meta":23,"style":23},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[25,123454,123455,123464],{"__ignoreMap":23},[28,123456,123457,123459,123461],{"class":30,"line":31},[28,123458,101660],{"class":2453},[28,123460,29702],{"class":38},[28,123462,123463],{"class":735}," ~\u002F.vnc\n",[28,123465,123466,123469],{"class":30,"line":77},[28,123467,123468],{"class":2453},"nano",[28,123470,123471],{"class":735}," ~\u002F.vnc\u002Fxstartup\n",[14,123473,123474],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[18,123476,123478],{"className":117690,"code":123477,"language":117692,"meta":23,"style":23},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[25,123479,123480,123485,123493,123500],{"__ignoreMap":23},[28,123481,123482],{"class":30,"line":31},[28,123483,123484],{"class":73},"#!\u002Fbin\u002Fsh\n",[28,123486,123487,123490],{"class":30,"line":77},[28,123488,123489],{"class":38},"unset",[28,123491,123492],{"class":735}," SESSION_MANAGER\n",[28,123494,123495,123497],{"class":30,"line":114},[28,123496,123489],{"class":38},[28,123498,123499],{"class":735}," DBUS_SESSION_BUS_ADDRESS\n",[28,123501,123502],{"class":30,"line":128},[28,123503,123504],{"class":2453},"gnome-session\n",[14,123506,123507],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[588,123509,123510],{"start":128},[591,123511,123512],{},"给予执行权限：",[14,123514,123515],{},"为xstartup文件设置执行权限：",[18,123517,123519],{"className":117690,"code":123518,"language":117692,"meta":23,"style":23},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[25,123520,123521],{"__ignoreMap":23},[28,123522,123523,123525,123528],{"class":30,"line":31},[28,123524,25098],{"class":2453},[28,123526,123527],{"class":735}," +x",[28,123529,123471],{"class":735},[588,123531,123532],{"start":393},[591,123533,123534],{},"启动VNC服务器：",[18,123536,123538],{"className":117690,"code":123537,"language":117692,"meta":23,"style":23},"vncserver -geometry 1920x1080 -localhost=0\n",[25,123539,123540],{"__ignoreMap":23},[28,123541,123542,123545,123548,123551],{"class":30,"line":31},[28,123543,123544],{"class":2453},"vncserver",[28,123546,123547],{"class":38}," -geometry",[28,123549,123550],{"class":735}," 1920x1080",[28,123552,123553],{"class":38}," -localhost=0\n",[14,123555,123556],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123558,123559],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[588,123561,123562],{"start":409},[591,123563,123564],{},"查看已开启的VNC服务器：",[18,123566,123568],{"className":117690,"code":123567,"language":117692,"meta":23,"style":23},"vncserver -list\n",[25,123569,123570],{"__ignoreMap":23},[28,123571,123572,123574],{"class":30,"line":31},[28,123573,123544],{"class":2453},[28,123575,123576],{"class":38}," -list\n",[14,123578,123579],{},[420,123580],{"alt":23,"src":123581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[588,123583,123584],{"start":1711},[591,123585,123586],{},"连接到VNC服务器：",[14,123588,123589],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[588,123591,123592],{"start":1802},[591,123593,123594],{},"停止VNC服务器：",[14,123596,123597],{},"如果需要停止VNC服务器，可以使用以下命令：",[18,123599,123601],{"className":117690,"code":123600,"language":117692,"meta":23,"style":23},"vncserver -kill :1\n",[25,123602,123603],{"__ignoreMap":23},[28,123604,123605,123607,123610],{"class":30,"line":31},[28,123606,123544],{"class":2453},[28,123608,123609],{"class":38}," -kill",[28,123611,123612],{"class":735}," :1\n",[14,123614,123615],{},"将:1替换为你实际使用的显示编号。",[14,123617,123618],{},[420,123619],{"alt":23,"src":123620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123622,123623],{},[420,123624],{"alt":23,"src":123625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[60,123627,123629],{"id":123628},"_74-usb端口设置","7.4 USB端口设置",[14,123631,123632],{},[780,123633,123634],{},"首先先配置好权限",[18,123636,123638],{"className":117690,"code":123637,"language":117692,"meta":23,"style":23},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[25,123639,123640,123645,123658,123665,123670],{"__ignoreMap":23},[28,123641,123642],{"class":30,"line":31},[28,123643,123644],{"class":73},"# 将用户权限提高\n",[28,123646,123647,123649,123651,123653,123656],{"class":30,"line":77},[28,123648,25063],{"class":2453},[28,123650,27060],{"class":735},[28,123652,27063],{"class":38},[28,123654,123655],{"class":735}," dialout",[28,123657,27068],{"class":34},[28,123659,123660,123662],{"class":30,"line":114},[28,123661,27087],{"class":2453},[28,123663,123664],{"class":735}," dialout\n",[28,123666,123667],{"class":30,"line":128},[28,123668,123669],{"class":73},"# 查看下面命令是否输出dialout（若输出才正常）\n",[28,123671,123672],{"class":30,"line":393},[28,123673,123674],{"class":2453},"groups\n",[14,123676,123677],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[605,123679,123681],{"id":123680},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123683,123684,123687],{},[780,123685,123686],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123689,123690,123693],{},[780,123691,123692],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123695,123696],{},[780,123697,123698],{},"流程如下：",[14,123700,123701],{},"（1）.查找设备idVendor和idProduct",[14,123703,123704,123705,123708],{},"接入两个USB设备，在终端调用指令",[25,123706,123707],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123710,123711],{},[420,123712],{"alt":23,"src":123713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123715,123716,123717,123720],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[25,123718,123719],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123722,123723],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123725,123726],{},"（2）.编写映射规则",[14,123728,123729,123730,123733],{},"在",[25,123731,123732],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[18,123735,123737],{"className":117690,"code":123736,"language":117692,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[25,123738,123739],{"__ignoreMap":23},[28,123740,123741,123743,123745],{"class":30,"line":31},[28,123742,25063],{"class":2453},[28,123744,118977],{"class":735},[28,123746,123747],{"class":735}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123749,123750],{},"输入如下内容：",[18,123752,123754],{"className":117690,"code":123753,"language":117692,"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,123755,123756,123786],{"__ignoreMap":23},[28,123757,123758,123761,123763,123766,123769,123772,123775,123777,123780,123783],{"class":30,"line":31},[28,123759,123760],{"class":34},"KERNEL",[28,123762,83],{"class":42},[28,123764,123765],{"class":735},"=\"ttyUSB*\",",[28,123767,123768],{"class":2453}," ATTRS",[28,123770,123771],{"class":735},"{idVendor}==",[28,123773,123774],{"class":2453},"\"10c4\"",[28,123776,90],{"class":2453},[28,123778,123779],{"class":735}," ATTRS{idProduct}==\"ea60\",",[28,123781,123782],{"class":735}," MODE:=\"0777\",",[28,123784,123785],{"class":735}," SYMLINK+=\"mylidar\"\n",[28,123787,123788,123790,123792,123794,123796,123798,123801,123803,123806,123808],{"class":30,"line":77},[28,123789,123760],{"class":34},[28,123791,83],{"class":42},[28,123793,123765],{"class":735},[28,123795,123768],{"class":2453},[28,123797,123771],{"class":735},[28,123799,123800],{"class":2453},"\"1a86\"",[28,123802,90],{"class":2453},[28,123804,123805],{"class":735}," ATTRS{idProduct}==\"7523\",",[28,123807,123782],{"class":735},[28,123809,123810],{"class":735}," SYMLINK+=\"mycar\"\n",[14,123812,123813],{},"代码解释：",[1626,123815,123816,123819,123822,123825],{},[591,123817,123818],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[591,123820,123821],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[591,123823,123824],{},"SYMLINK是符号连接，即绑定的别名；",[591,123826,123827],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123829,123830,123831,123834,123837],{},"***小提示：***",[24039,123832,123833],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[25,123835,123836],{},"\u002Fetc\u002Fudev\u002Frule.d",[24039,123838,123839],{},"目录即可。",[14,123841,123842],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123844,123845],{},"（3）.使规则生效",[14,123847,123848],{},"在终端下输入如下指令：",[18,123850,123852],{"className":117690,"code":123851,"language":117692,"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,123853,123854,123859,123871,123882,123886,123891,123904],{"__ignoreMap":23},[28,123855,123856],{"class":30,"line":31},[28,123857,123858],{"class":73},"# Ubuntu用下方命令\n",[28,123860,123861,123863,123865,123868],{"class":30,"line":77},[28,123862,25063],{"class":2453},[28,123864,120442],{"class":735},[28,123866,123867],{"class":735}," udev",[28,123869,123870],{"class":735}," reload\n",[28,123872,123873,123875,123877,123879],{"class":30,"line":114},[28,123874,25063],{"class":2453},[28,123876,120442],{"class":735},[28,123878,123867],{"class":735},[28,123880,123881],{"class":735}," restart\n",[28,123883,123884],{"class":30,"line":128},[28,123885,2890],{"emptyLinePlaceholder":562},[28,123887,123888],{"class":30,"line":393},[28,123889,123890],{"class":73},"#Fedora用下方命令\n",[28,123892,123893,123895,123898,123901],{"class":30,"line":409},[28,123894,25063],{"class":2453},[28,123896,123897],{"class":735}," udevadm",[28,123899,123900],{"class":735}," control",[28,123902,123903],{"class":38}," --reload\n",[28,123905,123906,123908,123910],{"class":30,"line":1711},[28,123907,25063],{"class":2453},[28,123909,123897],{"class":735},[28,123911,123912],{"class":735}," trigger\n",[14,123914,123915],{},"再重新插拔设备即可。",[14,123917,123918],{},"（4）.测试",[14,123920,123921],{},"终端下输入如下指令",[18,123923,123925],{"className":117690,"code":123924,"language":117692,"meta":23,"style":23},"ll \u002Fdev | grep ttyUSB\n",[25,123926,123927],{"__ignoreMap":23},[28,123928,123929,123932,123935,123937,123939],{"class":30,"line":31},[28,123930,123931],{"class":2453},"ll",[28,123933,123934],{"class":735}," \u002Fdev",[28,123936,25596],{"class":42},[28,123938,30722],{"class":2453},[28,123940,123941],{"class":735}," ttyUSB\n",[14,123943,123944],{},"运行结果如下：",[14,123946,123947],{},[420,123948],{"alt":23,"src":123949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123951,123952,123953,123956],{},"也可以多次插拔USB设备，会发现设备端口",[25,123954,123955],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123958,123959],{},[780,123960,118358],{},[14,123962,123963],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[605,123965,123967],{"id":123966},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123969,123970,123972],{},[780,123971,123686],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123974,123975,123977],{},[780,123976,123692],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123979,123980],{},[780,123981,123698],{},[14,123983,123984],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123986,123987],{},"调用如下指令查看第一台雷达的USB信息：",[18,123989,123991],{"className":117690,"code":123990,"language":117692,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[25,123992,123993,124013],{"__ignoreMap":23},[28,123994,123995,123998,124000,124003,124006,124008,124010],{"class":30,"line":31},[28,123996,123997],{"class":2453},"udevadm",[28,123999,70298],{"class":735},[28,124001,124002],{"class":38}," --attribute-walk",[28,124004,124005],{"class":38}," --name=\u002Fdev\u002FttyUSB0",[28,124007,25596],{"class":42},[28,124009,30722],{"class":2453},[28,124011,124012],{"class":735}," KERNELS\n",[28,124014,124015,124017,124019,124021,124024,124026,124028],{"class":30,"line":77},[28,124016,123997],{"class":2453},[28,124018,70298],{"class":735},[28,124020,124002],{"class":38},[28,124022,124023],{"class":38}," --name=\u002Fdev\u002FttyACM0",[28,124025,25596],{"class":42},[28,124027,30722],{"class":2453},[28,124029,124012],{"class":735},[14,124031,124032],{},[420,124033],{"alt":23,"src":124034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124036,124037],{},"调用如下指令查看第二台雷达的USB信息：",[18,124039,124041],{"className":117690,"code":124040,"language":117692,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[25,124042,124043],{"__ignoreMap":23},[28,124044,124045,124047,124049,124051,124054,124056,124058],{"class":30,"line":31},[28,124046,123997],{"class":2453},[28,124048,70298],{"class":735},[28,124050,124002],{"class":38},[28,124052,124053],{"class":38}," --name=\u002Fdev\u002FttyUSB1",[28,124055,25596],{"class":42},[28,124057,30722],{"class":2453},[28,124059,124012],{"class":735},[14,124061,124062,124063,124066,124067,124070,124071,124074],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[25,124064,124065],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[25,124068,124069],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[780,124072,124073],{},"唯一性标识","”。",[14,124076,123726],{},[14,124078,123729,124079,124081],{},[25,124080,123732],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[18,124083,124084],{"className":117690,"code":123736,"language":117692,"meta":23,"style":23},[25,124085,124086],{"__ignoreMap":23},[28,124087,124088,124090,124092],{"class":30,"line":31},[28,124089,25063],{"class":2453},[28,124091,118977],{"class":735},[28,124093,123747],{"class":735},[18,124095,124097],{"className":117690,"code":124096,"language":117692,"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,124098,124099,124128],{"__ignoreMap":23},[28,124100,124101,124103,124105,124107,124110,124112,124115,124118,124120,124123,124125],{"class":30,"line":31},[28,124102,123760],{"class":34},[28,124104,83],{"class":42},[28,124106,123765],{"class":735},[28,124108,124109],{"class":34}," KERNELS",[28,124111,83],{"class":42},[28,124113,124114],{"class":735},"=\"1-1.3:1.0\",",[28,124116,124117],{"class":2453}," MODE:",[28,124119,83],{"class":735},[28,124121,124122],{"class":2453},"\"0777\"",[28,124124,90],{"class":2453},[28,124126,124127],{"class":735}," SYMLINK+=\"rplidar_front\"\n",[28,124129,124130,124132,124134,124136,124138,124140,124143,124145,124147,124149,124151],{"class":30,"line":77},[28,124131,123760],{"class":34},[28,124133,83],{"class":42},[28,124135,123765],{"class":735},[28,124137,124109],{"class":34},[28,124139,83],{"class":42},[28,124141,124142],{"class":735},"=\"1-1.4:1.0\",",[28,124144,124117],{"class":2453},[28,124146,83],{"class":735},[28,124148,124122],{"class":2453},[28,124150,90],{"class":2453},[28,124152,124153],{"class":735}," SYMLINK+=\"rplidar_back\"\n",[14,124155,123845],{},[14,124157,123848],{},[18,124159,124160],{"className":117690,"code":123851,"language":117692,"meta":23,"style":23},[25,124161,124162,124166,124176,124186,124190,124194,124204],{"__ignoreMap":23},[28,124163,124164],{"class":30,"line":31},[28,124165,123858],{"class":73},[28,124167,124168,124170,124172,124174],{"class":30,"line":77},[28,124169,25063],{"class":2453},[28,124171,120442],{"class":735},[28,124173,123867],{"class":735},[28,124175,123870],{"class":735},[28,124177,124178,124180,124182,124184],{"class":30,"line":114},[28,124179,25063],{"class":2453},[28,124181,120442],{"class":735},[28,124183,123867],{"class":735},[28,124185,123881],{"class":735},[28,124187,124188],{"class":30,"line":128},[28,124189,2890],{"emptyLinePlaceholder":562},[28,124191,124192],{"class":30,"line":393},[28,124193,123890],{"class":73},[28,124195,124196,124198,124200,124202],{"class":30,"line":409},[28,124197,25063],{"class":2453},[28,124199,123897],{"class":735},[28,124201,123900],{"class":735},[28,124203,123903],{"class":38},[28,124205,124206,124208,124210],{"class":30,"line":1711},[28,124207,25063],{"class":2453},[28,124209,123897],{"class":735},[28,124211,123912],{"class":735},[14,124213,123915],{},[14,124215,123918],{},[14,124217,123921,124218,124221],{},[25,124219,124220],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124223,124224],{},[420,124225],{"alt":23,"src":124226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124228,124229],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124231,124232,124234],{},[780,124233,118358],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[605,124236,124238],{"id":124237},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124240,124241],{},"（1）.查看所连接的主机USB接口的信息",[18,124243,124245],{"className":117690,"code":124244,"language":117692,"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,124246,124247,124277],{"__ignoreMap":23},[28,124248,124249,124251,124253,124256,124258,124260,124262,124264,124267,124270,124272,124275],{"class":30,"line":31},[28,124250,123997],{"class":2453},[28,124252,70298],{"class":735},[28,124254,124255],{"class":38}," -a",[28,124257,29702],{"class":38},[28,124259,28908],{"class":34},[28,124261,123997],{"class":2453},[28,124263,70298],{"class":735},[28,124265,124266],{"class":38}," -q",[28,124268,124269],{"class":735}," path",[28,124271,25602],{"class":38},[28,124273,124274],{"class":735}," \u002Fdev\u002FttyACM0",[28,124276,228],{"class":34},[28,124278,124279,124281,124283,124285,124287,124289,124291,124293,124295,124297,124299,124302],{"class":30,"line":77},[28,124280,123997],{"class":2453},[28,124282,70298],{"class":735},[28,124284,124255],{"class":38},[28,124286,29702],{"class":38},[28,124288,28908],{"class":34},[28,124290,123997],{"class":2453},[28,124292,70298],{"class":735},[28,124294,124266],{"class":38},[28,124296,124269],{"class":735},[28,124298,25602],{"class":38},[28,124300,124301],{"class":735}," \u002Fdev\u002FttyUSB0",[28,124303,228],{"class":34},[14,124305,124306],{},[420,124307],{"alt":23,"src":124308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124310,124311],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124313,123726],{},[14,124315,123729,124316,124081],{},[25,124317,123732],{},[18,124319,124320],{"className":117690,"code":123736,"language":117692,"meta":23,"style":23},[25,124321,124322],{"__ignoreMap":23},[28,124323,124324,124326,124328],{"class":30,"line":31},[28,124325,25063],{"class":2453},[28,124327,118977],{"class":735},[28,124329,123747],{"class":735},[18,124331,124333],{"className":117690,"code":124332,"language":117692,"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,124334,124335,124363,124389],{"__ignoreMap":23},[28,124336,124337,124339,124341,124344,124346,124348,124350,124352,124355,124358,124360],{"class":30,"line":31},[28,124338,123760],{"class":34},[28,124340,83],{"class":42},[28,124342,124343],{"class":735},"=\"ttyACM*\",",[28,124345,123768],{"class":2453},[28,124347,123771],{"class":735},[28,124349,123800],{"class":2453},[28,124351,90],{"class":2453},[28,124353,124354],{"class":735}," ATTRS{idProduct}==\"55d4\",",[28,124356,124357],{"class":735}," ATTRS{serial}==\"0001\",",[28,124359,123782],{"class":735},[28,124361,124362],{"class":735}," SYMLINK+=\"ttyACM_MCU\"\n",[28,124364,124365,124367,124369,124371,124373,124375,124377,124379,124381,124384,124386],{"class":30,"line":77},[28,124366,123760],{"class":34},[28,124368,83],{"class":42},[28,124370,124343],{"class":735},[28,124372,123768],{"class":2453},[28,124374,123771],{"class":735},[28,124376,123800],{"class":2453},[28,124378,90],{"class":2453},[28,124380,124354],{"class":735},[28,124382,124383],{"class":735}," ATTRS{serial}==\"0002\",",[28,124385,123782],{"class":735},[28,124387,124388],{"class":735}," SYMLINK+=\"ttyACM_Lidar\"\n",[28,124390,124391,124393,124395,124397,124399,124401,124403,124405,124407,124409],{"class":30,"line":114},[28,124392,123760],{"class":34},[28,124394,83],{"class":42},[28,124396,123765],{"class":735},[28,124398,123768],{"class":2453},[28,124400,123771],{"class":735},[28,124402,123800],{"class":2453},[28,124404,90],{"class":2453},[28,124406,123805],{"class":735},[28,124408,123782],{"class":735},[28,124410,124411],{"class":735}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124413,123845],{},[14,124415,123848],{},[18,124417,124418],{"className":117690,"code":123851,"language":117692,"meta":23,"style":23},[25,124419,124420,124424,124434,124444,124448,124452,124462],{"__ignoreMap":23},[28,124421,124422],{"class":30,"line":31},[28,124423,123858],{"class":73},[28,124425,124426,124428,124430,124432],{"class":30,"line":77},[28,124427,25063],{"class":2453},[28,124429,120442],{"class":735},[28,124431,123867],{"class":735},[28,124433,123870],{"class":735},[28,124435,124436,124438,124440,124442],{"class":30,"line":114},[28,124437,25063],{"class":2453},[28,124439,120442],{"class":735},[28,124441,123867],{"class":735},[28,124443,123881],{"class":735},[28,124445,124446],{"class":30,"line":128},[28,124447,2890],{"emptyLinePlaceholder":562},[28,124449,124450],{"class":30,"line":393},[28,124451,123890],{"class":73},[28,124453,124454,124456,124458,124460],{"class":30,"line":409},[28,124455,25063],{"class":2453},[28,124457,123897],{"class":735},[28,124459,123900],{"class":735},[28,124461,123903],{"class":38},[28,124463,124464,124466,124468],{"class":30,"line":1711},[28,124465,25063],{"class":2453},[28,124467,123897],{"class":735},[28,124469,123912],{"class":735},[14,124471,124472,124473],{},"再重新插拔设备即可，或者 ",[780,124474,124475],{},"直接重启系统。",[14,124477,123918],{},[14,124479,123921,124480,124221],{},[25,124481,124220],{},[14,124483,124484],{},[420,124485],{"alt":23,"src":124486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124488,124229],{},[14,124490,124491,124493],{},[780,124492,118358],{}," 一些设备可能没有串口号等。",[605,124495,124497],{"id":124496},"_744-其他注意事项","7.4.4 其他注意事项",[14,124499,124500,124501,124503,124504,124507,124508,18896,124511,124514,124515,124517],{},"并非所有的USB设备端口号都是",[25,124502,123955],{},"的格式，比如Arduino的端口号可能是",[25,124505,124506],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[25,124509,124510],{},"videon",[25,124512,124513],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[25,124516,124510],{},"端口，绑定时需要关联的也是该接口。",[14,124519,124520,124521,124524,124525,124528,124529,124531,124532,124535,124536,124539,124540,124543,124544,124543,124547,124543,124550,28871],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[25,124522,124523],{},"KERNEL==\"ttyUSB*\"","修改为",[25,124526,124527],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[25,124530,124523],{},"修改为类似于",[25,124533,124534],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[25,124537,124538],{},"video[0,2,4,6]","表示可以绑定的端口为",[25,124541,124542],{},"video0","或",[25,124545,124546],{},"video2",[25,124548,124549],{},"video4",[25,124551,124552],{},"video6",[60,124554,124556],{"id":124555},"_75-挂载内网网页","7.5 挂载内网网页",[14,124558,124559],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124561,124562],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124564,124565],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124567,124568,124569],{},"Termux 下载地址（F-Droid）：",[80,124570,124571],{"href":124571,"rel":124572},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24351],[14,124574,124575],{},"首先打开app后，先更新软件缓存：",[18,124577,124579],{"className":117690,"code":124578,"language":117692,"meta":23,"style":23},"pkg update\n",[25,124580,124581],{"__ignoreMap":23},[28,124582,124583,124586],{"class":30,"line":31},[28,124584,124585],{"class":2453},"pkg",[28,124587,26728],{"class":735},[14,124589,124590],{},"然后换源",[18,124592,124594],{"className":117690,"code":124593,"language":117692,"meta":23,"style":23},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[25,124595,124596],{"__ignoreMap":23},[28,124597,124598,124600,124603],{"class":30,"line":31},[28,124599,123468],{"class":2453},[28,124601,124602],{"class":34}," $PREFIX",[28,124604,124605],{"class":735},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124607,124608],{},"将该文件内容替换为下面：",[18,124610,124612],{"className":117690,"code":124611,"language":117692,"meta":23,"style":23},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[25,124613,124614],{"__ignoreMap":23},[28,124615,124616,124619,124622,124625],{"class":30,"line":31},[28,124617,124618],{"class":2453},"deb",[28,124620,124621],{"class":735}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[28,124623,124624],{"class":735}," stable",[28,124626,124627],{"class":735}," main\n",[1626,124629,124630,124657],{},[591,124631,124632,124633,124635,124636],{},"如果你使用的是",[25,124634,123468],{},"编辑器：",[1626,124637,124638,124645,124651],{},[591,124639,124640,124641,124644],{},"按 ",[25,124642,124643],{},"Ctrl+O"," 保存文件。",[591,124646,124640,124647,124650],{},[25,124648,124649],{},"Enter"," 确认文件名。",[591,124652,124640,124653,124656],{},[25,124654,124655],{},"Ctrl+X"," 退出编辑器。",[591,124658,124632,124659,124635,124662],{},[25,124660,124661],{},"vim",[1626,124663,124664,124670],{},[591,124665,124640,124666,124669],{},[25,124667,124668],{},"Esc"," 退出编辑模式。",[591,124671,124672,124673,124675],{},"输入 ",[25,124674,119615],{}," 保存并退出。",[14,124677,124678],{},"接下来重新更新软件源：",[18,124680,124682],{"className":117690,"code":124681,"language":117692,"meta":23,"style":23},"pkg update && pkg upgrade\n",[25,124683,124684],{"__ignoreMap":23},[28,124685,124686,124688,124690,124692,124694],{"class":30,"line":31},[28,124687,124585],{"class":2453},[28,124689,117741],{"class":735},[28,124691,26676],{"class":34},[28,124693,124585],{"class":2453},[28,124695,117727],{"class":735},[14,124697,124698],{},"安装python：",[18,124700,124702],{"className":117690,"code":124701,"language":117692,"meta":23,"style":23},"pkg install python\n",[25,124703,124704],{"__ignoreMap":23},[28,124705,124706,124708,124710],{"class":30,"line":31},[28,124707,124585],{"class":2453},[28,124709,24320],{"class":735},[28,124711,124712],{"class":735}," python\n",[14,124714,124715,26959],{},[780,124716,124717],{},"通过Termux访问设备存储",[14,124719,124720],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[18,124722,124724],{"className":117690,"code":124723,"language":117692,"meta":23,"style":23},"termux-setup-storage\n",[25,124725,124726],{"__ignoreMap":23},[28,124727,124728],{"class":30,"line":31},[28,124729,124723],{"class":2453},[588,124731,124732],{},[591,124733,124734,26959,124737],{},[780,124735,124736],{},"进入HTML文件所在的目录",[588,124738,124739],{},[591,124740,124741,124742,124744],{},"使用",[25,124743,101670],{},"命令进入HTML文件所在的目录：",[18,124746,124748],{"className":117690,"code":124747,"language":117692,"meta":23,"style":23},"cd ~\u002Fyour_html_folder\n",[25,124749,124750],{"__ignoreMap":23},[28,124751,124752,124754],{"class":30,"line":31},[28,124753,101670],{"class":38},[28,124755,124756],{"class":735}," ~\u002Fyour_html_folder\n",[588,124758,124759],{"start":77},[591,124760,124761,26959,124764,124769,124786],{},[780,124762,124763],{},"启动Python HTTP服务器",[588,124765,124766],{},[591,124767,124768],{},"运行以下命令启动一个简单的HTTP服务器：",[18,124770,124772],{"className":117690,"code":124771,"language":117692,"meta":23,"style":23},"python -m http.server 8000\n",[25,124773,124774],{"__ignoreMap":23},[28,124775,124776,124778,124780,124783],{"class":30,"line":31},[28,124777,22],{"class":2453},[28,124779,101276],{"class":38},[28,124781,124782],{"class":735}," http.server",[28,124784,124785],{"class":38}," 8000\n",[588,124787,124788],{"start":114},[591,124789,124790,124791,124794],{},"这会在端口",[25,124792,124793],{},"8000","上启动一个Web服务器。",[1626,124796,124797],{},[591,124798,124799],{},"启动服务器后，Termux会显示日志信息，例如：",[18,124801,124803],{"className":121210,"code":124802,"language":121212,"meta":121213,"style":23},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[25,124804,124805],{"__ignoreMap":23},[28,124806,124807],{"class":30,"line":31},[28,124808,124802],{},[1626,124810,124811],{},[591,124812,124813],{},"这表示服务器已成功启动。",[14,124815,124816],{},[780,124817,124818],{},"在浏览器中访问HTML文件",[588,124820,124821],{},[591,124822,124823,26959,124826,124831],{},[780,124824,124825],{},"在同一设备上访问",[588,124827,124828],{},[591,124829,124830],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[18,124832,124835],{"className":124833,"code":124834,"language":72141,"meta":23,"style":23},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[25,124836,124837],{"__ignoreMap":23},[28,124838,124839,124842],{"class":30,"line":31},[28,124840,124841],{"class":34},"http:",[28,124843,124844],{"class":73},"\u002F\u002Flocalhost:8000\n",[1626,124846,124847],{},[591,124848,124849,124850,124853],{},"如果HTML文件中有",[25,124851,124852],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[60,124855,124857],{"id":124856},"_76-linux重点知识","7.6 Linux重点知识",[605,124859,124861],{"id":124860},"_761-关于点的说明","7.6.1 关于点的说明",[14,124863,124864],{},[420,124865],{"alt":23,"src":124866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124868,124869],{},"一点本目录，两点上目录",[605,124871,124873],{"id":124872},"_762-目录","7.6.2 目录",[22484,124875,124877],{"id":124876},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124879,124880],{},[780,124881,124882],{},"\u002Fboot:",[14,124884,124885],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124887,124888],{},[780,124889,124890],{},"\u002Fetc:",[14,124892,124893],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124895,124896],{},[780,124897,124898],{},"\u002Flib：",[14,124900,124901],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124903,124904],{},[780,124905,124906],{},"\u002Fsys:",[14,124908,124909],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22484,124911,124913],{"id":124912},"_7622-指令集合","7.6.2.2 指令集合",[14,124915,124916],{},[780,124917,124918],{},"\u002Fbin:",[14,124920,124921],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124923,124924],{},[780,124925,124926],{},"\u002Fsbin:",[14,124928,124929],{},"只有系统管理员才能使用的程序和指令",[22484,124931,124933],{"id":124932},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124935,124936],{},[780,124937,124938],{},"\u002Fdev:",[14,124940,124941],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124943,124944],{},[780,124945,124946],{},"\u002Fmedia:",[14,124948,124949],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124951,124952],{},[780,124953,124954],{},"\u002Fmnt:",[14,124956,124957],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22484,124959,124961],{"id":124960},"_7624-临时文件","7.6.2.4 临时文件",[14,124963,124964],{},[780,124965,124966],{},"\u002Frun:",[14,124968,124969],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124971,124972],{},[780,124973,124974],{},"\u002Flost+found:",[14,124976,124977],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124979,124980],{},[780,124981,124982],{},"\u002Ftmp:",[14,124984,124985],{},"这个目录是用来存放一些临时文件的",[22484,124987,124989],{"id":124988},"_7625-账户","7.6.2.5 账户",[14,124991,124992],{},[780,124993,124994],{},"\u002Froot：",[14,124996,124997],{},"系统管理员的用户主目录",[14,124999,125000,26959],{},[780,125001,125002],{},"\u002Fhome",[14,125004,125005],{},"用户的主目录，以用户的账号命名的",[14,125007,125008,26959],{},[780,125009,125010],{},"\u002Fusr",[14,125012,125013],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125015,125016],{},[780,125017,125018],{},"\u002Fusr\u002Fbin：",[14,125020,125021],{},"系统用户使用的应用程序与指令",[14,125023,125024],{},[780,125025,125026],{},"\u002Fusr\u002Fsbin：",[14,125028,125029],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125031,125032],{},[780,125033,125034],{},"\u002Fusr\u002Fsrc：",[14,125036,125037],{},"内核源代码默认的放置目录",[22484,125039,125041],{"id":125040},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125043,125044],{},[780,125045,125046],{},"\u002Fvar：",[14,125048,125049],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125051,125052],{},[780,125053,125054],{},"\u002Fproc:",[14,125056,125057,125058,125061],{},"管理 ",[780,125059,125060],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22484,125063,125065],{"id":125064},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125067,125068],{},[780,125069,125070],{},"\u002Fopt:",[14,125072,125073],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125075,125076],{},[780,125077,125078],{},"\u002Fsrv:",[14,125080,125081],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[605,125083,125085],{"id":125084},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125087,125088],{},[420,125089],{"alt":23,"src":125090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125092,125093],{},"windows-->linux:",[14,125095,125096],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125098,125099],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125101,125102],{},"linux传输文件到windows",[14,125104,125105],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[605,125107,125109],{"id":125108},"_764-易忘知识","7.6.4 易忘知识",[14,125111,125112],{},"操作系统内核查看",[18,125114,125115],{"className":117690,"code":121684,"language":117692,"meta":23,"style":23},[25,125116,125117],{"__ignoreMap":23},[28,125118,125119,125121],{"class":30,"line":31},[28,125120,70681],{"class":2453},[28,125122,121693],{"class":38},[14,125124,125125],{},[420,125126],{"alt":23,"src":125127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125129,125130],{},[420,125131],{"alt":23,"src":125132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[18,125134,125136],{"className":117690,"code":125135,"language":117692,"meta":23,"style":23},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[25,125137,125138,125150],{"__ignoreMap":23},[28,125139,125140,125142,125145,125148],{"class":30,"line":31},[28,125141,121901],{"class":2453},[28,125143,125144],{"class":735}," mvtest",[28,125146,125147],{"class":735}," mvtest2",[28,125149,3164],{"class":34},[28,125151,125152],{"class":30,"line":77},[28,125153,125154],{"class":2453},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125156,125157],{},[420,125158],{"alt":23,"src":125159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125161,125162],{},[420,125163],{"alt":23,"src":125164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125166,125167,125168,125171],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[25,125169,125170],{},"du -a"," 可以快速查看磁盘使用细节。",[605,125173,125175],{"id":125174},"_765-vim","7.6.5 Vim",[14,125177,125178],{},[420,125179],{"alt":23,"src":125180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125182,125183],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125185,125186],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125188,125189],{},[780,125190,125191],{},"1.命令模式：",[14,125193,125194],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125196,125197],{},"x 删除当前光标所在处的字符",[14,125199,125200],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125202,125203],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125205,125206],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125208,125209],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125211,125212],{},"dd 剪切当前行",[14,125214,125215],{},"yy 复制当前行",[14,125217,125218],{},"p 粘贴剪贴板内容到光标下方",[14,125220,125221],{},"P 粘贴剪贴板内容到光标上方",[14,125223,125224],{},"u 撤销上一次操作",[14,125226,125227],{},"ctrl+r 重做上一次操作",[14,125229,125230,125232],{},[1415,125231],{}," 保存文件",[14,125234,125235,125237],{},[1265,125236],{}," 退出Vim编辑器",[14,125239,125240,125242],{},[1265,125241],{},"! 强制退出Vim编辑器，不保存修改",[14,125244,125245],{},[780,125246,125247],{},"2.输入模式：",[14,125249,125250],{},[420,125251],{"alt":23,"src":125252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125254,125255],{},[780,125256,125257],{},"3.底线命令模式：",[14,125259,125260],{},[420,125261],{"alt":23,"src":125262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125264,125265],{},"按下esc可以退出底线命令模式",[605,125267,125269],{"id":125268},"_766-apt","7.6.6 apt",[14,125271,125272],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[605,125274,125276],{"id":125275},"_767-home与root的区别","7.6.7 home与root的区别",[14,125278,125279],{},[420,125280],{"alt":23,"src":125281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125283,125284],{},[420,125285],{"alt":23,"src":125286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125288,125289],{},[420,125290],{"alt":23,"src":125291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125293,125294],{},[420,125295],{"alt":23,"src":125296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[605,125298,125300],{"id":125299},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125302,125303],{},[80,125304,125305],{"href":125305,"rel":125306},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24351],[588,125308,125309,125312],{},[591,125310,125311],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[591,125313,125314],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125316,125317],{},[420,125318],{"alt":23,"src":125319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125321,125322],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125324,125325],{},[420,125326],{"alt":23,"src":125327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[18,125329,125331],{"className":121210,"code":125330,"language":121212,"meta":121213,"style":23},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[25,125332,125333,125338],{"__ignoreMap":23},[28,125334,125335],{"class":30,"line":31},[28,125336,125337],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[28,125339,125340],{"class":30,"line":77},[28,125341,125342],{},".\u002Fpycharm.sh\n",[14,125344,125345],{},"3️⃣创建.desktop文件",[14,125347,125348],{},[780,125349,125350],{},"原理：",[1626,125352,125353,125363],{},[591,125354,125355,125356,125362],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[780,125357,125358,125361],{},[25,125359,125360],{},".desktop"," 文件"," 来识别应用。",[591,125364,125365,125367,125368],{},[25,125366,125360],{}," 文件相当于一个“应用注册表”，告诉系统：",[1626,125369,125370,125373,125376,125379,125382],{},[591,125371,125372],{},"应用名字（Name）",[591,125374,125375],{},"图标（Icon）",[591,125377,125378],{},"执行命令（Exec）",[591,125380,125381],{},"分类（Categories）",[591,125383,125384],{},"是否需要终端（Terminal）",[18,125386,125388],{"className":121210,"code":125387,"language":121212,"meta":121213,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[25,125389,125390,125395],{"__ignoreMap":23},[28,125391,125392],{"class":30,"line":31},[28,125393,125394],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[28,125396,125397],{"class":30,"line":77},[28,125398,125399],{},"nano pycharm.desktop\n",[14,125401,125402],{},"nano是一个命令行下的编辑器，也可以使用vim",[18,125404,125406],{"className":121210,"code":125405,"language":121212,"meta":121213,"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,125407,125408,125413,125418,125423,125428,125433,125438,125443,125448,125453],{"__ignoreMap":23},[28,125409,125410],{"class":30,"line":31},[28,125411,125412],{},"[Desktop Entry]\n",[28,125414,125415],{"class":30,"line":77},[28,125416,125417],{},"Version=1.0\n",[28,125419,125420],{"class":30,"line":114},[28,125421,125422],{},"Type=Application\n",[28,125424,125425],{"class":30,"line":128},[28,125426,125427],{},"Name=PyCharm\n",[28,125429,125430],{"class":30,"line":393},[28,125431,125432],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[28,125434,125435],{"class":30,"line":409},[28,125436,125437],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[28,125439,125440],{"class":30,"line":1711},[28,125441,125442],{},"Comment=JetBrains PyCharm IDE\n",[28,125444,125445],{"class":30,"line":1802},[28,125446,125447],{},"Categories=Development;IDE;\n",[28,125449,125450],{"class":30,"line":1808},[28,125451,125452],{},"Terminal=false\n",[28,125454,125455],{"class":30,"line":1820},[28,125456,125457],{},"StartupWMClass=jetbrains-pycharm\n",[1626,125459,125460,125466,125472,125478],{},[591,125461,125462,125465],{},[25,125463,125464],{},"Exec"," → 点击图标时执行的命令",[591,125467,125468,125471],{},[25,125469,125470],{},"Icon"," → 显示在菜单和桌面上的图标",[591,125473,125474,125477],{},[25,125475,125476],{},"Terminal=false"," → 不打开终端",[591,125479,125480,125483],{},[25,125481,125482],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125485,125486,125487],"blockquote",{},[14,125488,125489,125490,125492,125493],{},"可以理解成 ",[25,125491,125360],{}," 文件是 Linux 的 ",[780,125494,125495],{},"快捷方式配置文件",[14,125497,125498],{},"4️⃣设置可执行权限",[18,125500,125502],{"className":121210,"code":125501,"language":121212,"meta":121213,"style":23},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[25,125503,125504],{"__ignoreMap":23},[28,125505,125506],{"class":30,"line":31},[28,125507,125501],{},[14,125509,125510],{},"5️⃣桌面图标启动的话如下：",[18,125512,125514],{"className":121210,"code":125513,"language":121212,"meta":121213,"style":23},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[25,125515,125516,125521],{"__ignoreMap":23},[28,125517,125518],{"class":30,"line":31},[28,125519,125520],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[28,125522,125523],{"class":30,"line":77},[28,125524,125525],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[588,125527,125528],{"start":114},[591,125529,125530],{},"下载Appimage文件实现软件的安装",[14,125532,125533],{},"1️⃣先下载appimage",[14,125535,125536],{},[80,125537,125538],{"href":125538,"rel":125539},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24351],[14,125541,125542],{},[420,125543],{"alt":23,"src":125544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125546,125547],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125549,125550],{},[420,125551],{"alt":23,"src":125552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125554,125555],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125557,125558],{},[420,125559],{"alt":23,"src":125560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125562,125563],{},[420,125564],{"alt":23,"src":125565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125567,125568,125569,125572],{},"3️⃣给他们放在",[25,125570,125571],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125574,125575],{},"4️⃣给软件执行权限",[18,125577,125579],{"className":121210,"code":125578,"language":121212,"meta":121213,"style":23},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[25,125580,125581,125586],{"__ignoreMap":23},[28,125582,125583],{"class":30,"line":31},[28,125584,125585],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[28,125587,125588],{"class":30,"line":77},[28,125589,125590],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125592,125593],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[18,125595,125597],{"className":117690,"code":125596,"language":117692,"meta":23,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[25,125598,125599,125606,125613,125619],{"__ignoreMap":23},[28,125600,125601,125603],{"class":30,"line":31},[28,125602,101670],{"class":38},[28,125604,125605],{"class":735}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[28,125607,125608,125610],{"class":30,"line":77},[28,125609,101677],{"class":2453},[28,125611,125612],{"class":735}," .\u002Fqqmusic.desktop\n",[28,125614,125615,125617],{"class":30,"line":114},[28,125616,124661],{"class":2453},[28,125618,125612],{"class":735},[28,125620,125621,125623,125625,125627],{"class":30,"line":128},[28,125622,25063],{"class":2453},[28,125624,25066],{"class":735},[28,125626,123527],{"class":735},[28,125628,125612],{"class":735},[14,125630,125631,125633],{},[25,125632,101677],{},"：一个 Linux 命令，主要功能是：",[1626,125635,125636,125639],{},[591,125637,125638],{},"如果文件不存在，就创建一个新的空文件",[591,125640,125641],{},"如果文件已存在，就更新该文件的最后修改时间",[18,125643,125645],{"className":121210,"code":125644,"language":121212,"meta":121213,"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,125646,125647,125651,125656,125661,125666,125670,125675],{"__ignoreMap":23},[28,125648,125649],{"class":30,"line":31},[28,125650,125412],{},[28,125652,125653],{"class":30,"line":77},[28,125654,125655],{},"Name=QQ音乐\n",[28,125657,125658],{"class":30,"line":114},[28,125659,125660],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[28,125662,125663],{"class":30,"line":128},[28,125664,125665],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[28,125667,125668],{"class":30,"line":393},[28,125669,125422],{},[28,125671,125672],{"class":30,"line":409},[28,125673,125674],{},"Categories=Audio;Music;Player;\n",[28,125676,125677],{"class":30,"line":1711},[28,125678,125679],{},"Comment=QQ Music Client for Linux\n",[14,125681,125682],{},"将文件复制进去",[14,125684,125685],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125687,125688],{},[420,125689],{"alt":23,"src":125690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125692,125693],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125695,125696],{},[420,125697],{"alt":23,"src":125698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125700,125701,125702,125705,125706,125709],{},"如果你用的不是KDE，那么也可以直接修改",[25,125703,125704],{},"qqmuic.desktop","：在exec的末尾加上",[25,125707,125708],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[18,125711,125713],{"className":121210,"code":125712,"language":121212,"meta":121213,"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,125714,125715,125719,125723,125728,125732,125736,125740],{"__ignoreMap":23},[28,125716,125717],{"class":30,"line":31},[28,125718,125412],{},[28,125720,125721],{"class":30,"line":77},[28,125722,125655],{},[28,125724,125725],{"class":30,"line":114},[28,125726,125727],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[28,125729,125730],{"class":30,"line":128},[28,125731,125665],{},[28,125733,125734],{"class":30,"line":393},[28,125735,125422],{},[28,125737,125738],{"class":30,"line":409},[28,125739,125674],{},[28,125741,125742],{"class":30,"line":1711},[28,125743,125679],{},[14,125745,125746],{},[420,125747],{"alt":23,"src":125748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125750,125751],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[18,125753,125755],{"className":121210,"code":125754,"language":121212,"meta":121213,"style":23},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[25,125756,125757],{"__ignoreMap":23},[28,125758,125759],{"class":30,"line":31},[28,125760,125754],{},[588,125762,125763],{"start":128},[591,125764,125765],{},"去Flathub上安装软件",[14,125767,125768],{},[80,125769,125770],{"href":125770,"rel":125771},"https:\u002F\u002Fflathub.org\u002F",[24351],[14,125773,125774],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125776,125777],{},[420,125778],{"alt":23,"src":125779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[18,125781,125783],{"className":121210,"code":125782,"language":121212,"meta":121213,"style":23},"flatpak install flathub com.obsproject.Studio\n",[25,125784,125785],{"__ignoreMap":23},[28,125786,125787],{"class":30,"line":31},[28,125788,125782],{},[14,125790,125791],{},[420,125792],{"alt":23,"src":125793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125795,125796],{},"2️⃣运行软件",[14,125798,125799],{},"a.官方方式：",[14,125801,125802],{},[420,125803],{"alt":23,"src":125804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[18,125806,125807],{"className":121210,"code":125782,"language":121212,"meta":121213,"style":23},[25,125808,125809],{"__ignoreMap":23},[28,125810,125811],{"class":30,"line":31},[28,125812,125782],{},[14,125814,125815],{},"b.当普通软件运行：",[14,125817,125818],{},[420,125819],{"alt":23,"src":125820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125822,125823],{},[420,125824],{"alt":23,"src":125825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[547,125827,125828],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":77,"depth":77,"links":125830},[125831,125832,125837,125838,125844,125845],{"id":122563,"depth":77,"text":122564},{"id":122905,"depth":77,"text":122906,"children":125833},[125834,125835,125836],{"id":122909,"depth":114,"text":122910},{"id":122976,"depth":114,"text":122977},{"id":123237,"depth":114,"text":123238},{"id":123390,"depth":77,"text":123391},{"id":123628,"depth":77,"text":123629,"children":125839},[125840,125841,125842,125843],{"id":123680,"depth":114,"text":123681},{"id":123966,"depth":114,"text":123967},{"id":124237,"depth":114,"text":124238},{"id":124496,"depth":114,"text":124497},{"id":124555,"depth":77,"text":124556},{"id":124856,"depth":77,"text":124857,"children":125846},[125847,125848,125849,125850,125851,125852,125853,125854],{"id":124860,"depth":114,"text":124861},{"id":124872,"depth":114,"text":124873},{"id":125084,"depth":114,"text":125085},{"id":125108,"depth":114,"text":125109},{"id":125174,"depth":114,"text":125175},{"id":125268,"depth":114,"text":125269},{"id":125275,"depth":114,"text":125276},{"id":125299,"depth":114,"text":125300},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122555,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125861,"title":125862,"body":125863,"description":559,"extension":560,"meta":125867,"navigation":562,"path":125868,"seo":125869,"stem":125870,"__hash__":125871},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125864,"toc":125865},[],{"title":23,"searchDepth":77,"depth":77,"links":125866},[],{"category":30749},"\u002Fwiki\u002F2025-01-27-linux",{"title":125862,"description":559},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125873,"title":125874,"body":125875,"description":125879,"extension":560,"meta":126270,"navigation":562,"path":126271,"seo":126272,"stem":126273,"__hash__":126274},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125876,"toc":126268},[125877,125880,125884,125901,125904,125957,125961,125963,126003,126012,126016,126019,126260,126265],[14,125878,125879],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125881,125883],{"id":125882},"_1ubuntu环境配置","1.Ubuntu环境配置",[588,125885,125886,125889,125892,125895,125898],{},[591,125887,125888],{},"ubuntu环境换源",[591,125890,125891],{},"安装cuda",[591,125893,125894],{},"安装miniconda",[591,125896,125897],{},"安装pytorch",[591,125899,125900],{},"安装genesis",[14,125902,125903],{},"参考链接：",[18,125905,125907],{"className":24308,"code":125906,"language":24310,"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,125908,125909],{"__ignoreMap":23},[28,125910,125911,125914,125917,125920,125922,125925,125928,125930,125933,125936,125938,125941,125944,125946,125949,125952,125954],{"class":30,"line":31},[28,125912,125913],{"class":2453},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[28,125915,125916],{"class":735},"=blogdetail",[28,125918,125919],{"class":34},"&sharetype",[28,125921,83],{"class":42},[28,125923,125924],{"class":735},"blogdetail",[28,125926,125927],{"class":34},"&sharerId",[28,125929,83],{"class":42},[28,125931,125932],{"class":735},"144728092",[28,125934,125935],{"class":34},"&sharerefer",[28,125937,83],{"class":42},[28,125939,125940],{"class":735},"PC",[28,125942,125943],{"class":34},"&sharesource",[28,125945,83],{"class":42},[28,125947,125948],{"class":735},"qq_69379513",[28,125950,125951],{"class":34},"&sharefrom",[28,125953,83],{"class":42},[28,125955,125956],{"class":735},"from_link\n",[10,125958,125960],{"id":125959},"_2genesis-报错issue","2.Genesis 报错issue",[14,125962,125903],{},[18,125964,125965],{"className":24308,"code":125906,"language":24310,"meta":23,"style":23},[25,125966,125967],{"__ignoreMap":23},[28,125968,125969,125971,125973,125975,125977,125979,125981,125983,125985,125987,125989,125991,125993,125995,125997,125999,126001],{"class":30,"line":31},[28,125970,125913],{"class":2453},[28,125972,125916],{"class":735},[28,125974,125919],{"class":34},[28,125976,83],{"class":42},[28,125978,125924],{"class":735},[28,125980,125927],{"class":34},[28,125982,83],{"class":42},[28,125984,125932],{"class":735},[28,125986,125935],{"class":34},[28,125988,83],{"class":42},[28,125990,125940],{"class":735},[28,125992,125943],{"class":34},[28,125994,83],{"class":42},[28,125996,125948],{"class":735},[28,125998,125951],{"class":34},[28,126000,83],{"class":42},[28,126002,125956],{"class":735},[18,126004,126006],{"className":24308,"code":126005,"language":24310,"meta":23,"style":23},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[25,126007,126008],{"__ignoreMap":23},[28,126009,126010],{"class":30,"line":31},[28,126011,126005],{"class":2453},[10,126013,126015],{"id":126014},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126017,126018],{},"hello_robot.py",[18,126020,126022],{"className":20,"code":126021,"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,126023,126024,126030,126045,126049,126061,126073,126077,126090,126094,126113,126123,126133,126147,126151,126155,126160,126164,126174,126181,126195,126202,126212,126217,126221,126239,126244,126248,126255],{"__ignoreMap":23},[28,126025,126026,126028],{"class":30,"line":31},[28,126027,536],{"class":42},[28,126029,45782],{"class":34},[28,126031,126032,126035,126038,126040,126042],{"class":30,"line":77},[28,126033,126034],{"class":34},"os.environ[",[28,126036,126037],{"class":735},"'PYOPENGL_PLATFORM'",[28,126039,4931],{"class":34},[28,126041,83],{"class":42},[28,126043,126044],{"class":735}," 'glx'\n",[28,126046,126047],{"class":30,"line":114},[28,126048,2890],{"emptyLinePlaceholder":562},[28,126050,126051,126053,126056,126058],{"class":30,"line":128},[28,126052,536],{"class":42},[28,126054,126055],{"class":34}," genesis ",[28,126057,542],{"class":42},[28,126059,126060],{"class":34}," gs\n",[28,126062,126063,126065,126068,126070],{"class":30,"line":393},[28,126064,530],{"class":42},[28,126066,126067],{"class":34}," pynput ",[28,126069,536],{"class":42},[28,126071,126072],{"class":34}," keyboard\n",[28,126074,126075],{"class":30,"line":409},[28,126076,2890],{"emptyLinePlaceholder":562},[28,126078,126079,126082,126085,126087],{"class":30,"line":1711},[28,126080,126081],{"class":34},"gs.init(",[28,126083,126084],{"class":5704},"backend",[28,126086,83],{"class":42},[28,126088,126089],{"class":34},"gs.gpu)\n",[28,126091,126092],{"class":30,"line":1802},[28,126093,2890],{"emptyLinePlaceholder":562},[28,126095,126096,126099,126101,126104,126107,126109,126111],{"class":30,"line":1808},[28,126097,126098],{"class":34},"scene ",[28,126100,83],{"class":42},[28,126102,126103],{"class":34}," gs.Scene(",[28,126105,126106],{"class":5704},"show_viewer",[28,126108,83],{"class":42},[28,126110,31955],{"class":38},[28,126112,228],{"class":34},[28,126114,126115,126118,126120],{"class":30,"line":1820},[28,126116,126117],{"class":34},"plane ",[28,126119,83],{"class":42},[28,126121,126122],{"class":34}," scene.add_entity(gs.morphs.Plane())\n",[28,126124,126125,126128,126130],{"class":30,"line":2102},[28,126126,126127],{"class":34},"franka ",[28,126129,83],{"class":42},[28,126131,126132],{"class":34}," scene.add_entity(\n",[28,126134,126135,126138,126140,126142,126145],{"class":30,"line":2107},[28,126136,126137],{"class":34},"    gs.morphs.MJCF(",[28,126139,45831],{"class":5704},[28,126141,83],{"class":42},[28,126143,126144],{"class":735},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[28,126146,38524],{"class":34},[28,126148,126149],{"class":30,"line":2113},[28,126150,228],{"class":34},[28,126152,126153],{"class":30,"line":2118},[28,126154,2890],{"emptyLinePlaceholder":562},[28,126156,126157],{"class":30,"line":2132},[28,126158,126159],{"class":34},"scene.build()\n",[28,126161,126162],{"class":30,"line":2137},[28,126163,2890],{"emptyLinePlaceholder":562},[28,126165,126166,126168,126171],{"class":30,"line":2143},[28,126167,32426],{"class":42},[28,126169,126170],{"class":2453}," on_press",[28,126172,126173],{"class":34},"(key):\n",[28,126175,126176,126179],{"class":30,"line":2164},[28,126177,126178],{"class":42},"    try",[28,126180,4227],{"class":34},[28,126182,126183,126185,126188,126190,126193],{"class":30,"line":2169},[28,126184,2987],{"class":42},[28,126186,126187],{"class":34}," key.char ",[28,126189,3439],{"class":42},[28,126191,126192],{"class":735}," 'q'",[28,126194,4227],{"class":34},[28,126196,126197,126199],{"class":30,"line":2183},[28,126198,16218],{"class":42},[28,126200,126201],{"class":38}," False\n",[28,126203,126204,126207,126210],{"class":30,"line":2188},[28,126205,126206],{"class":42},"    except",[28,126208,126209],{"class":38}," AttributeError",[28,126211,4227],{"class":34},[28,126213,126214],{"class":30,"line":2217},[28,126215,126216],{"class":42},"        pass\n",[28,126218,126219],{"class":30,"line":2222},[28,126220,2890],{"emptyLinePlaceholder":562},[28,126222,126223,126226,126228,126231,126234,126236],{"class":30,"line":2239},[28,126224,126225],{"class":34},"listener ",[28,126227,83],{"class":42},[28,126229,126230],{"class":34}," keyboard.Listener(",[28,126232,126233],{"class":5704},"on_press",[28,126235,83],{"class":42},[28,126237,126238],{"class":34},"on_press)\n",[28,126240,126241],{"class":30,"line":2244},[28,126242,126243],{"class":34},"listener.start()\n",[28,126245,126246],{"class":30,"line":2249},[28,126247,2890],{"emptyLinePlaceholder":562},[28,126249,126250,126252],{"class":30,"line":2254},[28,126251,109057],{"class":42},[28,126253,126254],{"class":34}," listener.running:\n",[28,126256,126257],{"class":30,"line":2268},[28,126258,126259],{"class":34},"    scene.step()\n",[14,126261,126262],{},[420,126263],{"alt":23,"src":126264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[547,126266,126267],{},"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":77,"depth":77,"links":126269},[],{"category":23864},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125874,"description":125879},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126276,"title":126277,"body":126278,"description":559,"extension":560,"meta":126293,"navigation":562,"path":126294,"seo":126295,"stem":126296,"__hash__":126297},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126279,"toc":126290},[126280,126283,126287],[10,126281,126277],{"id":126282},"_1-基础知识",[60,126284,126286],{"id":126285},"_11-js的组成","1.1 js的组成",[14,126288,126289],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":23,"searchDepth":77,"depth":77,"links":126291},[126292],{"id":126285,"depth":77,"text":126286},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126277,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126299,"title":126300,"body":126301,"description":559,"extension":560,"meta":126440,"navigation":562,"path":126441,"seo":126442,"stem":126443,"__hash__":126444},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126302,"toc":126428},[126303,126306,126310,126313,126317,126327,126331,126334,126337,126340,126344,126351,126357,126361,126367,126378,126382,126385,126389,126392,126396,126399,126403,126406,126410,126413,126416,126419,126422,126425],[10,126304,126300],{"id":126305},"_2-vscode必备内容",[60,126307,126309],{"id":126308},"_21-标签分类","2.1 标签分类",[14,126311,126312],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[60,126314,126316],{"id":126315},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126318,126319,126320,126322,126323,126326],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[25,126321,856],{}," 然后按 ",[25,126324,126325],{},"Tab","，快速自动生成基本结构。",[60,126328,126330],{"id":126329},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126332,126333],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126335,126336],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126338,126339],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[60,126341,126343],{"id":126342},"_24-视图缩放","2.4 视图缩放",[14,126345,126346,126347,126350],{},"缩放视图 ",[25,126348,126349],{},"ctrl+"," 可实现代码增大。",[14,126352,126353,126356],{},[25,126354,126355],{},"ctrl-"," 可实现代码减小。",[60,126358,126360],{"id":126359},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126362,126363,126364,28871],{},"VSCode 新建文件快捷键为 ",[25,126365,126366],{},"ctrl+N",[14,126368,126369,126370,126373,126374,126377],{},"保存快捷键为 ",[25,126371,126372],{},"ctrl+S","，将文本保存为 ",[25,126375,126376],{},".html"," 文件。",[60,126379,126381],{"id":126380},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126383,126384],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[60,126386,126388],{"id":126387},"_27-vscode-icons","2.7 vscode-icons",[14,126390,126391],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[60,126393,126395],{"id":126394},"_28-easy-less","2.8 Easy LESS",[14,126397,126398],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[60,126400,126402],{"id":126401},"_29-会了吧插件","2.9 会了吧插件",[14,126404,126405],{},"会了吧插件可以展示代码中英语单词的意思。",[60,126407,126409],{"id":126408},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126411,126412],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126414,126415],{},"②选定多个相同的单词:ctrl+D",[14,126417,126418],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126420,126421],{},"④全局替换某些单词:ctrl+h",[14,126423,126424],{},"⑤快速定位到某一行:ctrl+g",[14,126426,126427],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":23,"searchDepth":77,"depth":77,"links":126429},[126430,126431,126432,126433,126434,126435,126436,126437,126438,126439],{"id":126308,"depth":77,"text":126309},{"id":126315,"depth":77,"text":126316},{"id":126329,"depth":77,"text":126330},{"id":126342,"depth":77,"text":126343},{"id":126359,"depth":77,"text":126360},{"id":126380,"depth":77,"text":126381},{"id":126387,"depth":77,"text":126388},{"id":126394,"depth":77,"text":126395},{"id":126401,"depth":77,"text":126402},{"id":126408,"depth":77,"text":126409},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126300,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126446,"title":126447,"body":126448,"description":559,"extension":560,"meta":126607,"navigation":562,"path":126608,"seo":126609,"stem":126610,"__hash__":126611},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126449,"toc":126599},[126450,126453,126457,126467,126473,126479,126483,126492,126496,126501,126504,126507,126511,126514,126524,126533,126542,126551,126561,126568,126573,126578,126591],[10,126451,126447],{"id":126452},"_3-html文本与容器标签",[60,126454,126456],{"id":126455},"_31-标题标签","3.1 标题标签",[14,126458,126459,126462,126463,126466],{},[25,126460,126461],{},"\u003Ch1>","我是一级标签",[25,126464,126465],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126468,126469,126462,126471],{},[25,126470,126461],{},[25,126472,126465],{},[14,126474,123729,126475,126478],{},[25,126476,126477],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[60,126480,126482],{"id":126481},"_32-段落标签","3.2 段落标签",[14,126484,126485,126488,126489],{},[25,126486,126487],{},"\u003Cp>","....",[25,126490,126491],{},"\u003C\u002Fp>",[60,126493,126495],{"id":126494},"_33-换行标签","3.3 换行标签",[14,126497,126498],{},[25,126499,126500],{},"\u003Cbr \u002F>",[14,126502,126503],{},"具有强制换行的作用",[14,126505,126506],{},"单标签",[60,126508,126510],{"id":126509},"_34-文本格式化标签","3.4 文本格式化标签",[14,126512,126513],{},"提供粗体、斜体和下划线等效果",[14,126515,126516,126517,83016,126520,126523],{},"加粗：",[25,126518,126519],{},"\u003Cstrong>...\u003C\u002Fstrong>",[25,126521,126522],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126525,126526,126527,83016,126530,126523],{},"斜体：",[25,126528,126529],{},"\u003Cem>...\u003C\u002Fem>",[25,126531,126532],{},"\u003Ci>...\u003C\u002Fi>",[14,126534,126535,126536,83016,126539,126523],{},"删除线：",[25,126537,126538],{},"\u003Cdel>...\u003C\u002Fdel>",[25,126540,126541],{},"\u003Cs>...\u003C\u002Fs>",[14,126543,126544,126545,83016,126548,126523],{},"下划线：",[25,126546,126547],{},"\u003Cins>...\u003C\u002Fins>",[25,126549,126550],{},"\u003Cu>...\u003C\u002Fu>",[60,126552,126554,126555,18896,126558,103087],{"id":126553},"_35-div和span标签","3.5 ",[25,126556,126557],{},"\u003Cdiv>",[25,126559,126560],{},"\u003Cspan>",[14,126562,126563,101412,126565,126567],{},[25,126564,126557],{},[25,126566,126560],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126569,126570],{},[25,126571,126572],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126574,126575],{},[25,126576,126577],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126579,126580,126581,126583,126584,126586,126587,126590],{},"两者特点：①",[25,126582,126557],{}," 标签用来布局，但一行通常只放一个 ",[25,126585,126557],{},"。可以理解为一个大盒子，独占一行，在 ",[25,126588,126589],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126592,77726,126593,126595,126596,126598],{},[25,126594,126560],{}," 标签也可用于布局，一行可以放多个 ",[25,126597,126560],{},"，可理解为小盒子。",{"title":23,"searchDepth":77,"depth":77,"links":126600},[126601,126602,126603,126604,126605],{"id":126455,"depth":77,"text":126456},{"id":126481,"depth":77,"text":126482},{"id":126494,"depth":77,"text":126495},{"id":126509,"depth":77,"text":126510},{"id":126553,"depth":77,"text":126606},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126447,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126613,"title":126614,"body":126615,"description":559,"extension":560,"meta":126812,"navigation":562,"path":126813,"seo":126814,"stem":126815,"__hash__":126816},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126616,"toc":126804},[126617,126620,126624,126627,126633,126640,126646,126652,126655,126658,126661,126664,126667,126670,126673,126677,126680,126683,126686,126692,126698,126704,126711,126715,126721,126727,126730,126733,126739,126745,126751,126754,126757,126761,126764,126774,126780,126784,126793,126797,126800],[10,126618,126614],{"id":126619},"_4-html图像与链接",[60,126621,126623],{"id":126622},"_41-图像标签","4.1 图像标签",[14,126625,126626],{},"（1）标签",[14,126628,126629,126632],{},[25,126630,126631],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126634,126635,126636,126639],{},"src是",[25,126637,126638],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126641,126642,126643],{},"alt:文本，替换文本。图像不能显示的文字 ",[25,126644,126645],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126647,126648,126649],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[25,126650,126651],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126653,126654],{},"width:像素，设置图像的宽度",[14,126656,126657],{},"height:像素，设置图像的高度",[14,126659,126660],{},"border：像素，设置图像的边框粗细",[14,126662,126663],{},"（2）图像标签属性的注意点：",[14,126665,126666],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126668,126669],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126671,126672],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[60,126674,126676],{"id":126675},"_42-路径注意要点","4.2 路径注意要点：",[14,126678,126679],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126681,126682],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126684,126685],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126687,126688,126689],{},"①同一级路径：图像文件位于HTML文件同一级，如",[25,126690,126691],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126693,126694,126695],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[25,126696,126697],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126699,126700,126701],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[25,126702,126703],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126705,126706,126707,880],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[80,126708,126709],{"href":126709,"rel":126710},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24351],[60,126712,126714],{"id":126713},"_43-超链接标签","4.3 超链接标签",[14,126716,126717,126720],{},[25,126718,126719],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126722,126723,126724],{},"①语法格式：",[25,126725,126726],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126728,126729],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126731,126732],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126734,126735,126736],{},"③链接分类：外部链接：",[25,126737,126738],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126740,126741,126742],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[25,126743,126744],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126746,126747,126748],{},"空链接：如果当时没有确定链接目标时，",[25,126749,126750],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126752,126753],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126755,126756],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[60,126758,126760],{"id":126759},"_44-锚点链接","4.4 锚点链接",[14,126762,126763],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126765,126766,126767,126770,126771],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[25,126768,126769],{},"\u003Ca href=\"#two\">","第二级",[25,126772,126773],{},"\u003C\u002Fa>",[14,126775,126776,126777],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[25,126778,126779],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[60,126781,126783],{"id":126782},"_45-注释标签","4.5 注释标签",[14,126785,126786,126789,126790],{},[25,126787,126788],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[25,126791,126792],{},"ctrl+\u002F",[60,126794,126796],{"id":126795},"_46-特殊字符","4.6 特殊字符",[14,126798,126799],{},"可以实现添加多个空格",[420,126801],{"style":126802,"src":126803},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":23,"searchDepth":77,"depth":77,"links":126805},[126806,126807,126808,126809,126810,126811],{"id":126622,"depth":77,"text":126623},{"id":126675,"depth":77,"text":126676},{"id":126713,"depth":77,"text":126714},{"id":126759,"depth":77,"text":126760},{"id":126782,"depth":77,"text":126783},{"id":126795,"depth":77,"text":126796},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126614,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126818,"title":126819,"body":126820,"description":559,"extension":560,"meta":127113,"navigation":562,"path":127114,"seo":127115,"stem":127116,"__hash__":127117},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126821,"toc":127104},[126822,126825,126829,126832,126835,126838,126841,126844,126847,126850,126853,126856,126876,126882,126886,126889,126892,126895,126898,126901,126904,126908,126911,126914,126917,126920,126933,126938,126941,126944,126959,126962,126965,126968,126971,126974,126978,126981,126988,126991,126994,126997,127000,127003,127009,127012,127015,127021,127024,127027,127030,127036,127039,127042,127056,127063,127066,127069,127076,127085,127088,127091,127094,127098,127101],[10,126823,126819],{"id":126824},"_5-html表格列表与表单",[60,126826,126828],{"id":126827},"_51-表格标签","5.1 表格标签",[14,126830,126831],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126833,126834],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126836,126837],{},"②表格基本语法：",[420,126839],{"style":126802,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126842,126843],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[420,126845],{"style":126802,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126848,126849],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[420,126851],{"style":126802,"src":126852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126854,126855],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126857,126858,126861,126862,126864,126865,126868,126869,126871,126872,126875],{},[25,126859,126860],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[25,126863,126860],{},"内部必须拥有",[25,126866,126867],{},"\u003Ctr>","标签，一般位于第一行，",[25,126870,126860],{},"比",[25,126873,126874],{},"\u003Cth>","范围广",[14,126877,126878,126881],{},[25,126879,126880],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[60,126883,126885],{"id":126884},"_52-合并单元格","5.2 合并单元格",[14,126887,126888],{},"（1）合并单元格方式：",[14,126890,126891],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126893,126894],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126896,126897],{},"（2）目标单元格：",[14,126899,126900],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126902,126903],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[60,126905,126907],{"id":126906},"_53-列表标签","5.3 列表标签",[14,126909,126910],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126912,126913],{},"①无序列表：",[420,126915],{"style":126802,"src":126916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126918,126919],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126921,126922,126925,126926,126929,126930,126932],{},[25,126923,126924],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[25,126927,126928],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[25,126931,126924],{},"中输入其他标签或文字是不对的",[14,126934,126935,126937],{},[25,126936,126928],{},"之间相当于一个容器，可以容纳所有元素",[14,126939,126940],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126942,126943],{},"在css中去除前边的小圆点采用如下代码:",[18,126945,126949],{"className":126946,"code":126947,"language":126948,"meta":23,"style":23},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[25,126950,126951],{"__ignoreMap":23},[28,126952,126953,126956],{"class":30,"line":31},[28,126954,126955],{"class":51777},"list-style",[28,126957,126958],{"class":34},": none;\n",[14,126960,126961],{},"②有序列表：",[420,126963],{"style":126802,"src":126964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126966,126967],{},"③自定义列表：",[420,126969],{"style":126802,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[420,126972],{"style":126802,"src":126973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[60,126975,126977],{"id":126976},"_54-表单标签","5.4 表单标签",[14,126979,126980],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126982,126983,126984,126987],{},"（1）表单域：包含单元素的区域，",[25,126985,126986],{},"\u003Cform>","标签可以实现信息的收集和传递。",[420,126989],{"style":126802,"src":126990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126992,126993],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126995,126996],{},"表单元素提交必须有name属性",[14,126998,126999],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,127001,127002],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,127004,77703,127005,127008],{},[25,127006,127007],{},"\u003Cinput>","输入表单元素",[420,127010],{"style":126802,"src":127011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[420,127013],{"style":126802,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127016,127017,127018],{},"单选按钮：",[25,127019,127020],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[420,127022],{"style":126802,"src":127023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127025,127026],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[420,127028],{"style":126802,"src":127029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127031,127032,127035],{},[780,127033,127034],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127037,127038],{},"②select下拉表单元素：可以节约页面控件",[420,127040],{"style":126802,"src":127041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127043,127044,14281,127046,127049,127050,127052,127053,127055],{},[780,127045,665],{},[25,127047,127048],{},"\u003Cselect>","中至少包含一对",[25,127051,103108],{},"；在",[25,127054,103108],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127057,127058,127059,127062],{},"③",[25,127060,127061],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[420,127064],{"style":126802,"src":127065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127067,127068],{},"3行20列",[60,127070,127072,127073,103087],{"id":127071},"_55-lable标签","5.5 ",[25,127074,127075],{},"\u003Clable>",[14,127077,127078,127079,127081,127082,127084],{},"它不是表单标签，但常常与表单标签搭配使用，",[25,127080,127075],{},"标签用于绑定一个表单标签，当点击",[25,127083,127075],{},"标签内的文本",[14,127086,127087],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[420,127089],{"style":126802,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[420,127092],{"style":126802,"src":127093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[60,127095,127097],{"id":127096},"_56-实例","5.6 实例",[420,127099],{"style":126802,"src":127100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[547,127102,127103],{},"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":77,"depth":77,"links":127105},[127106,127107,127108,127109,127110,127112],{"id":126827,"depth":77,"text":126828},{"id":126884,"depth":77,"text":126885},{"id":126906,"depth":77,"text":126907},{"id":126976,"depth":77,"text":126977},{"id":127071,"depth":77,"text":127111},"5.5 \u003Clable>标签",{"id":127096,"depth":77,"text":127097},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126819,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127119,"title":127120,"body":127121,"description":559,"extension":560,"meta":127670,"navigation":562,"path":127671,"seo":127672,"stem":127673,"__hash__":127674},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127122,"toc":127645},[127123,127126,127130,127133,127136,127140,127143,127146,127149,127152,127155,127158,127161,127165,127168,127172,127175,127178,127181,127185,127188,127191,127194,127200,127203,127206,127209,127212,127215,127218,127221,127254,127258,127261,127264,127267,127271,127274,127277,127280,127283,127286,127290,127293,127296,127299,127303,127306,127310,127313,127317,127320,127325,127329,127332,127336,127339,127342,127345,127348,127375,127378,127382,127385,127388,127393,127396,127399,127403,127406,127411,127414,127417,127420,127424,127427,127430,127433,127437,127440,127443,127446,127450,127454,127457,127497,127500,127504,127511,127514,127518,127521,127567,127571,127574,127577,127580,127608,127612,127615,127642],[10,127124,127120],{"id":127125},"_6-css语法与文本样式",[60,127127,127129],{"id":127128},"_61-css语法规范","6.1 css语法规范",[14,127131,127132],{},"由两部分组成，选择器及一条或多条声明",[420,127134],{"style":126802,"src":127135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127137,127138],{},[780,127139,665],{},[14,127141,127142],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127144,127145],{},"②属性与属性值以“键值对”的形式出现",[14,127147,127148],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127150,127151],{},"④属性和属性值之间用英文“;”分开",[420,127153],{"style":126802,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[420,127156],{"style":126802,"src":127157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[420,127159],{"style":126802,"src":127160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[60,127162,127164],{"id":127163},"_62-css选择器","6.2 css选择器",[14,127166,127167],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[605,127169,127171],{"id":127170},"_621-标签选择器","6.2.1 标签选择器",[14,127173,127174],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127176,127177],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[420,127179],{"style":126802,"src":127180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[605,127182,127184],{"id":127183},"_622-类选择器","6.2.2 类选择器",[14,127186,127187],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127189,127190],{},"②样例",[420,127192],{"style":126802,"src":127193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127195,127196,127197,127199],{},"③ ",[780,127198,127034],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127201,127202],{},"可以理解为给这个标签起了个名字，来表示；",[14,127204,127205],{},"长名称或词组可以使用横线来为选择器命名；",[14,127207,127208],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127210,127211],{},"命名要有意义；",[420,127213],{"style":126802,"src":127214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127216,127217],{},"类选择器也可以指定特殊的元素p.center{}",[14,127219,127220],{},"p.center和.center都对",[18,127222,127224],{"className":126946,"code":127223,"language":126948,"meta":23,"style":23},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[25,127225,127226,127231,127240,127250],{"__ignoreMap":23},[28,127227,127228],{"class":30,"line":31},[28,127229,127230],{"class":73},"\u002F* 类选择器指定特殊元素 *\u002F\n",[28,127232,127233,127235,127238],{"class":30,"line":77},[28,127234,14],{"class":51777},[28,127236,127237],{"class":2453},".center",[28,127239,16058],{"class":34},[28,127241,127242,127244,127246,127248],{"class":30,"line":114},[28,127243,71003],{"class":38},[28,127245,51914],{"class":34},[28,127247,52069],{"class":38},[28,127249,1781],{"class":34},[28,127251,127252],{"class":30,"line":128},[28,127253,2055],{"class":34},[605,127255,127257],{"id":127256},"_623-多类名使用","6.2.3 多类名使用",[14,127259,127260],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[420,127262],{"style":126802,"src":127263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127265,127266],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[605,127268,127270],{"id":127269},"_624-id选择器","6.2.4 id选择器",[14,127272,127273],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127275,127276],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[420,127278],{"style":126802,"src":127279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127281,127282],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127284,127285],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[605,127287,127289],{"id":127288},"_625-通配符选择器","6.2.5 通配符选择器",[14,127291,127292],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127294,127295],{},"* {",[14,127297,127298],{},"color=\"red\"}",[605,127300,127302],{"id":127301},"_626-总结","6.2.6 总结",[420,127304],{"style":126802,"src":127305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[60,127307,127309],{"id":127308},"_63-css字体属性","6.3 css字体属性",[14,127311,127312],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[605,127314,127316],{"id":127315},"_631-字体系列","6.3.1 字体系列",[14,127318,127319],{},"font-family: '宋体';",[14,127321,127322,127324],{},[780,127323,665],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[605,127326,127328],{"id":127327},"_632-字体大小","6.3.2 字体大小",[14,127330,127331],{},"font-size: 20px",[14,127333,127334,26959],{},[780,127335,127034],{},[14,127337,127338],{},"①px（像素）大小是网页的最常用单位",[14,127340,127341],{},"②谷歌浏览器默认为16px",[14,127343,127344],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127346,127347],{},"④可以给body指定整个页面的大小：会自动引用",[18,127349,127351],{"className":126946,"code":127350,"language":126948,"meta":23,"style":23},"body {\n  font-size: 16px;\n}\n",[25,127352,127353,127359,127371],{"__ignoreMap":23},[28,127354,127355,127357],{"class":30,"line":31},[28,127356,52277],{"class":51777},[28,127358,16058],{"class":34},[28,127360,127361,127363,127365,127367,127369],{"class":30,"line":77},[28,127362,71103],{"class":38},[28,127364,51914],{"class":34},[28,127366,1221],{"class":38},[28,127368,51969],{"class":42},[28,127370,1781],{"class":34},[28,127372,127373],{"class":30,"line":114},[28,127374,2055],{"class":34},[14,127376,127377],{},"⑤标题标签比较特殊，需要单独指定大小",[605,127379,127381],{"id":127380},"_633-字体粗细","6.3.3 字体粗细",[14,127383,127384],{},"font-weight: bold;",[14,127386,127387],{},"font-weight: 100；",[14,127389,127390,127392],{},[780,127391,665],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127394,127395],{},"font-weight= 400;",[14,127397,127398],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[605,127400,127402],{"id":127401},"_634-文字样式","6.3.4 文字样式",[14,127404,127405],{},"font-style: normal；",[14,127407,127408,26959],{},[780,127409,127410],{},"属性值",[14,127412,127413],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127415,127416],{},"②italic：浏览器会显示斜体的字体样式",[420,127418],{"style":126802,"src":127419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[605,127421,127423],{"id":127422},"_635-字体符合属性","6.3.5 字体符合属性",[420,127425],{"style":126802,"src":127426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[420,127428],{"style":126802,"src":127429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127431,127432],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127434,127435,26959],{},[780,127436,127034],{},[14,127438,127439],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127441,127442],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127444,127445],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[60,127447,127449],{"id":127448},"_64-css-test文本属性","6.4 css test文本属性",[605,127451,127453],{"id":127452},"_641-文本颜色","6.4.1 文本颜色",[14,127455,127456],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[18,127458,127460],{"className":126946,"code":127459,"language":126948,"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,127461,127462,127467,127473,127483,127488,127493],{"__ignoreMap":23},[28,127463,127464],{"class":30,"line":31},[28,127465,127466],{"class":73},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[28,127468,127469,127471],{"class":30,"line":77},[28,127470,14],{"class":51777},[28,127472,16058],{"class":34},[28,127474,127475,127477,127479,127481],{"class":30,"line":114},[28,127476,71382],{"class":38},[28,127478,51914],{"class":34},[28,127480,57898],{"class":38},[28,127482,1781],{"class":34},[28,127484,127485],{"class":30,"line":128},[28,127486,127487],{"class":73},"  \u002F* color: #ff0000; *\u002F\n",[28,127489,127490],{"class":30,"line":393},[28,127491,127492],{"class":73},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[28,127494,127495],{"class":30,"line":409},[28,127496,2055],{"class":34},[420,127498],{"style":126802,"src":127499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[605,127501,127503],{"id":127502},"_642-对齐文本","6.4.2 对齐文本",[14,127505,127506,127507,127510],{},"text-align属于用于设置元素内文本内容的 ",[780,127508,127509],{},"水平对齐"," 方式",[14,127512,127513],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[605,127515,127517],{"id":127516},"_643-装饰文本","6.4.3 装饰文本",[14,127519,127520],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[18,127522,127524],{"className":126946,"code":127523,"language":126948,"meta":23,"style":23},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[25,127525,127526,127532,127542,127546,127552,127563],{"__ignoreMap":23},[28,127527,127528,127530],{"class":30,"line":31},[28,127529,80],{"class":51777},[28,127531,16058],{"class":34},[28,127533,127534,127536,127538,127540],{"class":30,"line":77},[28,127535,70979],{"class":38},[28,127537,51914],{"class":34},[28,127539,55214],{"class":38},[28,127541,1781],{"class":34},[28,127543,127544],{"class":30,"line":114},[28,127545,2055],{"class":34},[28,127547,127548,127550],{"class":30,"line":128},[28,127549,14],{"class":51777},[28,127551,16058],{"class":34},[28,127553,127554,127556,127558,127561],{"class":30,"line":393},[28,127555,70979],{"class":38},[28,127557,51914],{"class":34},[28,127559,127560],{"class":38},"underline",[28,127562,1781],{"class":34},[28,127564,127565],{"class":30,"line":409},[28,127566,2055],{"class":34},[605,127568,127570],{"id":127569},"_644-文本缩进","6.4.4 文本缩进",[14,127572,127573],{},"实现文本的第一行首行缩进自己指定的距离",[14,127575,127576],{},"20px往右边走；-20px往左边走",[14,127578,127579],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[18,127581,127583],{"className":126946,"code":127582,"language":126948,"meta":23,"style":23},"p {\n  text-indent: 2em;\n}\n",[25,127584,127585,127591,127604],{"__ignoreMap":23},[28,127586,127587,127589],{"class":30,"line":31},[28,127588,14],{"class":51777},[28,127590,16058],{"class":34},[28,127592,127593,127596,127598,127600,127602],{"class":30,"line":77},[28,127594,127595],{"class":38},"  text-indent",[28,127597,51914],{"class":34},[28,127599,93],{"class":38},[28,127601,24039],{"class":42},[28,127603,1781],{"class":34},[28,127605,127606],{"class":30,"line":114},[28,127607,2055],{"class":34},[605,127609,127611],{"id":127610},"_645-行间距","6.4.5 行间距",[14,127613,127614],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[18,127616,127618],{"className":126946,"code":127617,"language":126948,"meta":23,"style":23},"p {\n  line-height: 1.6;\n}\n",[25,127619,127620,127626,127638],{"__ignoreMap":23},[28,127621,127622,127624],{"class":30,"line":31},[28,127623,14],{"class":51777},[28,127625,16058],{"class":34},[28,127627,127628,127631,127633,127636],{"class":30,"line":77},[28,127629,127630],{"class":38},"  line-height",[28,127632,51914],{"class":34},[28,127634,127635],{"class":38},"1.6",[28,127637,1781],{"class":34},[28,127639,127640],{"class":30,"line":114},[28,127641,2055],{"class":34},[547,127643,127644],{},"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":77,"depth":77,"links":127646},[127647,127648,127656,127663],{"id":127128,"depth":77,"text":127129},{"id":127163,"depth":77,"text":127164,"children":127649},[127650,127651,127652,127653,127654,127655],{"id":127170,"depth":114,"text":127171},{"id":127183,"depth":114,"text":127184},{"id":127256,"depth":114,"text":127257},{"id":127269,"depth":114,"text":127270},{"id":127288,"depth":114,"text":127289},{"id":127301,"depth":114,"text":127302},{"id":127308,"depth":77,"text":127309,"children":127657},[127658,127659,127660,127661,127662],{"id":127315,"depth":114,"text":127316},{"id":127327,"depth":114,"text":127328},{"id":127380,"depth":114,"text":127381},{"id":127401,"depth":114,"text":127402},{"id":127422,"depth":114,"text":127423},{"id":127448,"depth":77,"text":127449,"children":127664},[127665,127666,127667,127668,127669],{"id":127452,"depth":114,"text":127453},{"id":127502,"depth":114,"text":127503},{"id":127516,"depth":114,"text":127517},{"id":127569,"depth":114,"text":127570},{"id":127610,"depth":114,"text":127611},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127120,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127676,"title":127677,"body":127678,"description":559,"extension":560,"meta":128327,"navigation":562,"path":128328,"seo":128329,"stem":128330,"__hash__":128331},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127679,"toc":128308},[127680,127683,127687,127691,127751,127755,127765,127768,127771,127775,127800,127804,127807,127810,127813,127816,127819,127823,127826,127829,127871,127874,127900,127906,127909,127913,127917,127923,127926,127929,127932,127935,127938,127941,127986,127990,127993,127996,128000,128004,128033,128036,128041,128044,128047,128050,128053,128057,128061,128064,128066,128069,128073,128076,128080,128083,128086,128089,128093,128097,128103,128113,128116,128119,128122,128125,128128,128251,128259,128267,128305],[10,127681,127677],{"id":127682},"_7-css引入方式与选择器进阶",[60,127684,127686],{"id":127685},"_71-css引入方式","7.1 css引入方式",[605,127688,127690],{"id":127689},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[18,127692,127696],{"className":127693,"code":127694,"language":127695,"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,127697,127698,127706,127713,127725,127738,127743],{"__ignoreMap":23},[28,127699,127700,127702,127704],{"class":30,"line":31},[28,127701,1529],{"class":34},[28,127703,547],{"class":51777},[28,127705,51784],{"class":34},[28,127707,127708,127711],{"class":30,"line":77},[28,127709,127710],{"class":51777},"  h1",[28,127712,16058],{"class":34},[28,127714,127715,127718,127720,127723],{"class":30,"line":114},[28,127716,127717],{"class":38},"    color",[28,127719,51914],{"class":34},[28,127721,127722],{"class":38},"blue",[28,127724,1781],{"class":34},[28,127726,127727,127730,127732,127734,127736],{"class":30,"line":128},[28,127728,127729],{"class":38},"    font-size",[28,127731,51914],{"class":34},[28,127733,1420],{"class":38},[28,127735,51969],{"class":42},[28,127737,1781],{"class":34},[28,127739,127740],{"class":30,"line":393},[28,127741,127742],{"class":34},"  }\n",[28,127744,127745,127747,127749],{"class":30,"line":409},[28,127746,52262],{"class":34},[28,127748,547],{"class":51777},[28,127750,51784],{"class":34},[14,127752,127753,26959],{},[780,127754,127034],{},[14,127756,77703,127757,127760,127761,127764],{},[25,127758,127759],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[25,127762,127763],{},"\u003Chead>","标签中",[14,127766,127767],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127769,127770],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[605,127772,127774],{"id":127773},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[18,127776,127778],{"className":127693,"code":127777,"language":127695,"meta":23,"style":23},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[25,127779,127780],{"__ignoreMap":23},[28,127781,127782,127784,127786,127788,127790,127793,127796,127798],{"class":30,"line":31},[28,127783,1529],{"class":34},[28,127785,14],{"class":51777},[28,127787,63103],{"class":2453},[28,127789,83],{"class":34},[28,127791,127792],{"class":735},"\"color: red; font-size: 16px;\"",[28,127794,127795],{"class":34},">这是一个段落\u003C\u002F",[28,127797,14],{"class":51777},[28,127799,51784],{"class":34},[14,127801,127802,26959],{},[780,127803,127034],{},[14,127805,127806],{},"①style其实就是标签的属性",[14,127808,127809],{},"②在双引号中间，写法要符合css规范",[14,127811,127812],{},"③可以控制当前的标签设置样式",[14,127814,127815],{},"④书写繁琐，简单时才用",[14,127817,127818],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[605,127820,127822],{"id":127821},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127824,127825],{},"使用最多，单独建一个css文件，然后html引用",[14,127827,127828],{},"①css文件部分： style.css",[18,127830,127832],{"className":126946,"code":127831,"language":126948,"meta":23,"style":23},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[25,127833,127834,127839,127845,127855,127867],{"__ignoreMap":23},[28,127835,127836],{"class":30,"line":31},[28,127837,127838],{"class":73},"\u002F* style.css *\u002F\n",[28,127840,127841,127843],{"class":30,"line":77},[28,127842,10],{"class":51777},[28,127844,16058],{"class":34},[28,127846,127847,127849,127851,127853],{"class":30,"line":114},[28,127848,71382],{"class":38},[28,127850,51914],{"class":34},[28,127852,127722],{"class":38},[28,127854,1781],{"class":34},[28,127856,127857,127859,127861,127863,127865],{"class":30,"line":128},[28,127858,71103],{"class":38},[28,127860,51914],{"class":34},[28,127862,1420],{"class":38},[28,127864,51969],{"class":42},[28,127866,1781],{"class":34},[28,127868,127869],{"class":30,"line":393},[28,127870,2055],{"class":34},[14,127872,127873],{},"②html部分",[18,127875,127877],{"className":127693,"code":127876,"language":127695,"meta":23,"style":23},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[25,127878,127879],{"__ignoreMap":23},[28,127880,127881,127883,127885,127887,127889,127891,127893,127895,127898],{"class":30,"line":31},[28,127882,1529],{"class":34},[28,127884,69482],{"class":51777},[28,127886,69485],{"class":2453},[28,127888,83],{"class":34},[28,127890,69490],{"class":735},[28,127892,61534],{"class":2453},[28,127894,83],{"class":34},[28,127896,127897],{"class":735},"\"style.css\"",[28,127899,51784],{"class":34},[14,127901,127902,127905],{},[25,127903,127904],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127907,127908],{},"ctrl+0回到页面原来大小",[60,127910,127912],{"id":127911},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[605,127914,127916],{"id":127915},"_721-快速生成html","7.2.1 快速生成html",[14,127918,127919,127920],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[25,127921,127922],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127924,127925],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127927,127928],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127930,127931],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127933,127934],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127936,127937],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127939,127940],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[18,127942,127944],{"className":127693,"code":127943,"language":127695,"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,127945,127946,127951,127956,127961,127966,127971,127976,127981],{"__ignoreMap":23},[28,127947,127948],{"class":30,"line":31},[28,127949,127950],{"class":73},"\u003C!-- Emmet 语法示例 -->\n",[28,127952,127953],{"class":30,"line":77},[28,127954,127955],{"class":73},"\u003C!-- div*3        → 生成3个div -->\n",[28,127957,127958],{"class":30,"line":114},[28,127959,127960],{"class":73},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[28,127962,127963],{"class":30,"line":128},[28,127964,127965],{"class":73},"\u003C!-- div+p        → 兄弟div和p -->\n",[28,127967,127968],{"class":30,"line":393},[28,127969,127970],{"class":73},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[28,127972,127973],{"class":30,"line":409},[28,127974,127975],{"class":73},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[28,127977,127978],{"class":30,"line":1711},[28,127979,127980],{"class":73},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[28,127982,127983],{"class":30,"line":1802},[28,127984,127985],{"class":73},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[605,127987,127989],{"id":127988},"_722-快速生成css","7.2.2 快速生成css",[14,127991,127992],{},"简写开头",[14,127994,127995],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[60,127997,127999],{"id":127998},"_73-css复合选择器","7.3 css复合选择器",[605,128001,128003],{"id":128002},"_731-后代选择器","7.3.1 后代选择器",[18,128005,128007],{"className":126946,"code":128006,"language":126948,"meta":23,"style":23},".parent .child {\n  color: blue;\n}\n",[25,128008,128009,128019,128029],{"__ignoreMap":23},[28,128010,128011,128014,128017],{"class":30,"line":31},[28,128012,128013],{"class":2453},".parent",[28,128015,128016],{"class":2453}," .child",[28,128018,16058],{"class":34},[28,128020,128021,128023,128025,128027],{"class":30,"line":77},[28,128022,71382],{"class":38},[28,128024,51914],{"class":34},[28,128026,127722],{"class":38},[28,128028,1781],{"class":34},[28,128030,128031],{"class":30,"line":114},[28,128032,2055],{"class":34},[14,128034,128035],{},"元素1 元素2 {样式声明}",[14,128037,128038],{},[780,128039,128040],{},"注意点:",[14,128042,128043],{},"①元素1和元素2中间用空格隔开",[14,128045,128046],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128048,128049],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128051,128052],{},"④元素1和元素2可以是任意基础选择器",[605,128054,128056],{"id":128055},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128058,128059],{},[780,128060,128040],{},[14,128062,128063],{},"①元素1和元素2中间用大于号隔开",[14,128065,128046],{},[14,128067,128068],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[605,128070,128072],{"id":128071},"_733-并集选择器","7.3.3 并集选择器",[14,128074,128075],{},"元素1，元素2 {样式声明}",[14,128077,128078],{},[780,128079,128040],{},[14,128081,128082],{},"①元素1和元素2中间用逗号隔开",[14,128084,128085],{},"②逗号可以理解为和的意思",[14,128087,128088],{},"③并集选择器通常用于集体声明",[605,128090,128092],{"id":128091},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128094,128095],{},[780,128096,128040],{},[14,128098,128099,128100,128102],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69482,128101],{},"－:visited－:hover－:active。",[14,128104,128105,128106,128109,128110,26227],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128107,128108],"hover",{}," 、 ",[128111,128112],"first-child",{},[14,128114,128115],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128117,128118],{},"link对没访问的进行设置",[14,128120,128121],{},"vistied对已访问的进行改变",[14,128123,128124],{},"hover鼠标经过就会变",[14,128126,128127],{},"active常按(点)就会变",[18,128129,128131],{"className":126946,"code":128130,"language":126948,"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,128132,128133,128138,128147,128157,128167,128171,128180,128191,128195,128203,128213,128223,128227,128236,128247],{"__ignoreMap":23},[28,128134,128135],{"class":30,"line":31},[28,128136,128137],{"class":73},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[28,128139,128140,128142,128145],{"class":30,"line":77},[28,128141,80],{"class":51777},[28,128143,128144],{"class":2453},":link",[28,128146,16058],{"class":34},[28,128148,128149,128151,128153,128155],{"class":30,"line":114},[28,128150,71382],{"class":38},[28,128152,51914],{"class":34},[28,128154,62846],{"class":38},[28,128156,1781],{"class":34},[28,128158,128159,128161,128163,128165],{"class":30,"line":128},[28,128160,70979],{"class":38},[28,128162,51914],{"class":34},[28,128164,55214],{"class":38},[28,128166,1781],{"class":34},[28,128168,128169],{"class":30,"line":393},[28,128170,2055],{"class":34},[28,128172,128173,128175,128178],{"class":30,"line":409},[28,128174,80],{"class":51777},[28,128176,128177],{"class":2453},":visited",[28,128179,16058],{"class":34},[28,128181,128182,128184,128186,128189],{"class":30,"line":1711},[28,128183,71382],{"class":38},[28,128185,51914],{"class":34},[28,128187,128188],{"class":38},"purple",[28,128190,1781],{"class":34},[28,128192,128193],{"class":30,"line":1802},[28,128194,2055],{"class":34},[28,128196,128197,128199,128201],{"class":30,"line":1808},[28,128198,80],{"class":51777},[28,128200,61417],{"class":2453},[28,128202,16058],{"class":34},[28,128204,128205,128207,128209,128211],{"class":30,"line":1820},[28,128206,71382],{"class":38},[28,128208,51914],{"class":34},[28,128210,55366],{"class":38},[28,128212,1781],{"class":34},[28,128214,128215,128217,128219,128221],{"class":30,"line":2102},[28,128216,70979],{"class":38},[28,128218,51914],{"class":34},[28,128220,127560],{"class":38},[28,128222,1781],{"class":34},[28,128224,128225],{"class":30,"line":2107},[28,128226,2055],{"class":34},[28,128228,128229,128231,128234],{"class":30,"line":2113},[28,128230,80],{"class":51777},[28,128232,128233],{"class":2453},":active",[28,128235,16058],{"class":34},[28,128237,128238,128240,128242,128245],{"class":30,"line":2118},[28,128239,71382],{"class":38},[28,128241,51914],{"class":34},[28,128243,128244],{"class":38},"green",[28,128246,1781],{"class":34},[28,128248,128249],{"class":30,"line":2132},[28,128250,2055],{"class":34},[605,128252,128254,128255,128258],{"id":128253},"_735-伪类选择器","7.3.5 ",[128256,128257],"focus",{},"伪类选择器",[14,128260,128261,128263,128264,128266],{},[128256,128262],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[25,128265,127007],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[18,128268,128270],{"className":126946,"code":128269,"language":126948,"meta":23,"style":23},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[25,128271,128272,128280,128291,128301],{"__ignoreMap":23},[28,128273,128274,128276,128278],{"class":30,"line":31},[28,128275,54298],{"class":51777},[28,128277,62377],{"class":2453},[28,128279,16058],{"class":34},[28,128281,128282,128285,128287,128289],{"class":30,"line":77},[28,128283,128284],{"class":38},"  border-color",[28,128286,51914],{"class":34},[28,128288,55366],{"class":38},[28,128290,1781],{"class":34},[28,128292,128293,128295,128297,128299],{"class":30,"line":114},[28,128294,71275],{"class":38},[28,128296,51914],{"class":34},[28,128298,55214],{"class":38},[28,128300,1781],{"class":34},[28,128302,128303],{"class":30,"line":128},[28,128304,2055],{"class":34},[547,128306,128307],{},"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":77,"depth":77,"links":128309},[128310,128315,128319],{"id":127685,"depth":77,"text":127686,"children":128311},[128312,128313,128314],{"id":127689,"depth":114,"text":127690},{"id":127773,"depth":114,"text":127774},{"id":127821,"depth":114,"text":127822},{"id":127911,"depth":77,"text":127912,"children":128316},[128317,128318],{"id":127915,"depth":114,"text":127916},{"id":127988,"depth":114,"text":127989},{"id":127998,"depth":77,"text":127999,"children":128320},[128321,128322,128323,128324,128325],{"id":128002,"depth":114,"text":128003},{"id":128055,"depth":114,"text":128056},{"id":128071,"depth":114,"text":128072},{"id":128091,"depth":114,"text":128092},{"id":128253,"depth":114,"text":128326},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127677,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128333,"title":128334,"body":128335,"description":559,"extension":560,"meta":130258,"navigation":562,"path":130259,"seo":130260,"stem":130261,"__hash__":130262},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128336,"toc":130232},[128337,128340,128344,128353,128357,128383,128388,128391,128394,128397,128400,128404,128407,128417,128425,128429,128464,128469,128472,128475,128478,128481,128485,128488,128497,128501,128514,128519,128522,128525,128528,128532,128535,128539,128542,128597,128600,128631,128634,128688,128692,128695,128861,128984,128987,128990,128993,128996,129000,129003,129007,129010,129013,129017,129020,129051,129078,129106,129109,129113,129139,129182,129186,129280,129283,129310,129313,129316,129319,129322,129325,129328,129331,129334,129337,129341,129398,129425,129429,129477,129481,129522,129524,129527,129530,129533,129536,129540,129632,129635,129638,129641,129645,129768,129969,129973,129977,129980,129983,129986,129990,129993,129996,130021,130024,130027,130030,130033,130036,130040,130048,130110,130113,130171,130174,130177,130180,130183,130186,130189,130192,130229],[10,128338,128334],{"id":128339},"_8-css显示模式与背景特性",[60,128341,128343],{"id":128342},"_81-css元素显示模式","8.1 css元素显示模式",[14,128345,128346,128347,128349,128350,128352],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[25,128348,126557],{},"自己占一行，比如一行可以放多个",[25,128351,126560],{},"，HTML 元素一般分为块元素和行内元素两种类型",[605,128354,128356],{"id":128355},"_811-块元素","8.1.1 块元素",[14,128358,128359,128360,128362,128363,843,128366,843,128368,843,128370,843,128373,843,128376,128379,128380,128382],{},"常见的块元素有",[25,128361,126461],{},"~",[25,128364,128365],{},"\u003Ch6>",[25,128367,126487],{},[25,128369,126557],{},[25,128371,128372],{},"\u003Cul>",[25,128374,128375],{},"\u003Col>",[25,128377,128378],{},"\u003Cli>","等，其中 ",[25,128381,126557],{}," 标签是最典型的块元素",[14,128384,128385],{},[780,128386,128387],{},"块级元素的特点：",[14,128389,128390],{},"① 比较霸道，自己独占一行。",[14,128392,128393],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128395,128396],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128398,128399],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128401,128402],{},[780,128403,665],{},[14,128405,128406],{},"①文字类的元素内不能使用块级元素",[14,128408,77726,128409,128411,128412,128414,128415],{},[25,128410,126487],{}," 标签主要用于存放文字，因此 ",[25,128413,126487],{}," 里面不能放块级元素，特别是不能放",[25,128416,126557],{},[14,128418,128419,128420,128362,128422,128424],{},"⑥同理， ",[25,128421,126461],{},[25,128423,128365],{},"等都是文字类块级标签，里面也不能放其他块级元素",[605,128426,128428],{"id":128427},"_812-行内元素","8.1.2 行内元素",[14,128430,128431,128432,843,128434,843,128437,843,128440,843,128443,843,128446,843,128449,843,128452,843,128455,843,128458,128460,128461,128463],{},"常见的行内元素有 ",[25,128433,126719],{},[25,128435,128436],{},"\u003Cstrong>",[25,128438,128439],{},"\u003Cb>",[25,128441,128442],{},"\u003Cem>",[25,128444,128445],{},"\u003Ci>",[25,128447,128448],{},"\u003Cdel>",[25,128450,128451],{},"\u003Cs>",[25,128453,128454],{},"\u003Cins>",[25,128456,128457],{},"\u003Cu>",[25,128459,126560],{}," 等，其中 ",[25,128462,126560],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128465,128466],{},[780,128467,128468],{},"特点：",[14,128470,128471],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128473,128474],{},"② 高、宽直接设置是无效的。",[14,128476,128477],{},"③ 默认宽度就是它本身内容的宽度。",[14,128479,128480],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128482,128483],{},[780,128484,665],{},[14,128486,128487],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128489,128490,128491,128493,128494,128496],{},"②特殊情况链接 ",[25,128492,126719],{}," 里面可以放块级元素，但是给 ",[25,128495,126719],{}," 转换一下块级模式最安全",[605,128498,128500],{"id":128499},"_813-行内块元素","8.1.3 行内块元素",[14,128502,128503,128504,843,128507,843,128510,128513],{},"在行内元素中有几个特殊的标签 —— ",[25,128505,128506],{},"\u003Cimg \u002F>",[25,128508,128509],{},"\u003Cinput \u002F>",[25,128511,128512],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128515,128516],{},[780,128517,128518],{},"行内块元素的特点：",[14,128520,128521],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128523,128524],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128526,128527],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[605,128529,128531],{"id":128530},"_814-总结","8.1.4 总结",[420,128533],{"style":126802,"src":128534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[605,128536,128538],{"id":128537},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128540,128541],{},"①转换为块元素：display:block;",[18,128543,128545],{"className":126946,"code":128544,"language":126948,"meta":23,"style":23},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[25,128546,128547,128552,128558,128569,128581,128593],{"__ignoreMap":23},[28,128548,128549],{"class":30,"line":31},[28,128550,128551],{"class":73},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[28,128553,128554,128556],{"class":30,"line":77},[28,128555,80],{"class":51777},[28,128557,16058],{"class":34},[28,128559,128560,128563,128565,128567],{"class":30,"line":114},[28,128561,128562],{"class":38},"  display",[28,128564,51914],{"class":34},[28,128566,61346],{"class":38},[28,128568,1781],{"class":34},[28,128570,128571,128573,128575,128577,128579],{"class":30,"line":128},[28,128572,71045],{"class":38},[28,128574,51914],{"class":34},[28,128576,938],{"class":38},[28,128578,51969],{"class":42},[28,128580,1781],{"class":34},[28,128582,128583,128585,128587,128589,128591],{"class":30,"line":393},[28,128584,71265],{"class":38},[28,128586,51914],{"class":34},[28,128588,1026],{"class":38},[28,128590,51969],{"class":42},[28,128592,1781],{"class":34},[28,128594,128595],{"class":30,"line":409},[28,128596,2055],{"class":34},[14,128598,128599],{},"②转换为行内元素：display:inline;",[18,128601,128603],{"className":126946,"code":128602,"language":126948,"meta":23,"style":23},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[25,128604,128605,128610,128616,128627],{"__ignoreMap":23},[28,128606,128607],{"class":30,"line":31},[28,128608,128609],{"class":73},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[28,128611,128612,128614],{"class":30,"line":77},[28,128613,52088],{"class":51777},[28,128615,16058],{"class":34},[28,128617,128618,128620,128622,128625],{"class":30,"line":114},[28,128619,128562],{"class":38},[28,128621,51914],{"class":34},[28,128623,128624],{"class":38},"inline",[28,128626,1781],{"class":34},[28,128628,128629],{"class":30,"line":128},[28,128630,2055],{"class":34},[14,128632,128633],{},"③转换为行内块：display:inline-block;",[18,128635,128637],{"className":126946,"code":128636,"language":126948,"meta":23,"style":23},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[25,128638,128639,128644,128650,128660,128672,128684],{"__ignoreMap":23},[28,128640,128641],{"class":30,"line":31},[28,128642,128643],{"class":73},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[28,128645,128646,128648],{"class":30,"line":77},[28,128647,28],{"class":51777},[28,128649,16058],{"class":34},[28,128651,128652,128654,128656,128658],{"class":30,"line":114},[28,128653,128562],{"class":38},[28,128655,51914],{"class":34},[28,128657,72860],{"class":38},[28,128659,1781],{"class":34},[28,128661,128662,128664,128666,128668,128670],{"class":30,"line":128},[28,128663,71045],{"class":38},[28,128665,51914],{"class":34},[28,128667,1232],{"class":38},[28,128669,51969],{"class":42},[28,128671,1781],{"class":34},[28,128673,128674,128676,128678,128680,128682],{"class":30,"line":393},[28,128675,71265],{"class":38},[28,128677,51914],{"class":34},[28,128679,1570],{"class":38},[28,128681,51969],{"class":42},[28,128683,1781],{"class":34},[28,128685,128686],{"class":30,"line":409},[28,128687,2055],{"class":34},[605,128689,128691],{"id":128690},"_816-小米侧边栏","8.1.6 小米侧边栏",[420,128693],{"style":126802,"src":128694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[18,128696,128698],{"className":127693,"code":128697,"language":127695,"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,128699,128700,128705,128720,128739,128758,128777,128796,128815,128834,128853],{"__ignoreMap":23},[28,128701,128702],{"class":30,"line":31},[28,128703,128704],{"class":73},"\u003C!-- 小米侧边栏案例 -->\n",[28,128706,128707,128709,128711,128713,128715,128718],{"class":30,"line":77},[28,128708,1529],{"class":34},[28,128710,52088],{"class":51777},[28,128712,53963],{"class":2453},[28,128714,83],{"class":34},[28,128716,128717],{"class":735},"\"sidebar\"",[28,128719,51784],{"class":34},[28,128721,128722,128724,128726,128728,128730,128732,128735,128737],{"class":30,"line":114},[28,128723,52621],{"class":34},[28,128725,80],{"class":51777},[28,128727,61534],{"class":2453},[28,128729,83],{"class":34},[28,128731,61539],{"class":735},[28,128733,128734],{"class":34},">手机 电话卡\u003C\u002F",[28,128736,80],{"class":51777},[28,128738,51784],{"class":34},[28,128740,128741,128743,128745,128747,128749,128751,128754,128756],{"class":30,"line":128},[28,128742,52621],{"class":34},[28,128744,80],{"class":51777},[28,128746,61534],{"class":2453},[28,128748,83],{"class":34},[28,128750,61539],{"class":735},[28,128752,128753],{"class":34},">电视 盒子\u003C\u002F",[28,128755,80],{"class":51777},[28,128757,51784],{"class":34},[28,128759,128760,128762,128764,128766,128768,128770,128773,128775],{"class":30,"line":393},[28,128761,52621],{"class":34},[28,128763,80],{"class":51777},[28,128765,61534],{"class":2453},[28,128767,83],{"class":34},[28,128769,61539],{"class":735},[28,128771,128772],{"class":34},">笔记本 平板\u003C\u002F",[28,128774,80],{"class":51777},[28,128776,51784],{"class":34},[28,128778,128779,128781,128783,128785,128787,128789,128792,128794],{"class":30,"line":409},[28,128780,52621],{"class":34},[28,128782,80],{"class":51777},[28,128784,61534],{"class":2453},[28,128786,83],{"class":34},[28,128788,61539],{"class":735},[28,128790,128791],{"class":34},">出行 穿戴\u003C\u002F",[28,128793,80],{"class":51777},[28,128795,51784],{"class":34},[28,128797,128798,128800,128802,128804,128806,128808,128811,128813],{"class":30,"line":1711},[28,128799,52621],{"class":34},[28,128801,80],{"class":51777},[28,128803,61534],{"class":2453},[28,128805,83],{"class":34},[28,128807,61539],{"class":735},[28,128809,128810],{"class":34},">智能 路由器\u003C\u002F",[28,128812,80],{"class":51777},[28,128814,51784],{"class":34},[28,128816,128817,128819,128821,128823,128825,128827,128830,128832],{"class":30,"line":1802},[28,128818,52621],{"class":34},[28,128820,80],{"class":51777},[28,128822,61534],{"class":2453},[28,128824,83],{"class":34},[28,128826,61539],{"class":735},[28,128828,128829],{"class":34},">健康 儿童\u003C\u002F",[28,128831,80],{"class":51777},[28,128833,51784],{"class":34},[28,128835,128836,128838,128840,128842,128844,128846,128849,128851],{"class":30,"line":1808},[28,128837,52621],{"class":34},[28,128839,80],{"class":51777},[28,128841,61534],{"class":2453},[28,128843,83],{"class":34},[28,128845,61539],{"class":735},[28,128847,128848],{"class":34},">耳机 音响\u003C\u002F",[28,128850,80],{"class":51777},[28,128852,51784],{"class":34},[28,128854,128855,128857,128859],{"class":30,"line":1820},[28,128856,52262],{"class":34},[28,128858,52088],{"class":51777},[28,128860,51784],{"class":34},[18,128862,128864],{"className":126946,"code":128863,"language":126948,"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,128865,128866,128875,128885,128898,128910,128922,128934,128944,128955,128959,128969,128980],{"__ignoreMap":23},[28,128867,128868,128871,128873],{"class":30,"line":31},[28,128869,128870],{"class":2453},".sidebar",[28,128872,1889],{"class":51777},[28,128874,16058],{"class":34},[28,128876,128877,128879,128881,128883],{"class":30,"line":77},[28,128878,128562],{"class":38},[28,128880,51914],{"class":34},[28,128882,61346],{"class":38},[28,128884,1781],{"class":34},[28,128886,128887,128889,128891,128894,128896],{"class":30,"line":114},[28,128888,71045],{"class":38},[28,128890,51914],{"class":34},[28,128892,128893],{"class":38},"234",[28,128895,51969],{"class":42},[28,128897,1781],{"class":34},[28,128899,128900,128902,128904,128906,128908],{"class":30,"line":128},[28,128901,71265],{"class":38},[28,128903,51914],{"class":34},[28,128905,1076],{"class":38},[28,128907,51969],{"class":42},[28,128909,1781],{"class":34},[28,128911,128912,128914,128916,128918,128920],{"class":30,"line":393},[28,128913,127630],{"class":38},[28,128915,51914],{"class":34},[28,128917,1076],{"class":38},[28,128919,51969],{"class":42},[28,128921,1781],{"class":34},[28,128923,128924,128926,128928,128930,128932],{"class":30,"line":409},[28,128925,71300],{"class":38},[28,128927,51914],{"class":34},[28,128929,1570],{"class":38},[28,128931,51969],{"class":42},[28,128933,1781],{"class":34},[28,128935,128936,128938,128940,128942],{"class":30,"line":1711},[28,128937,71382],{"class":38},[28,128939,51914],{"class":34},[28,128941,61319],{"class":38},[28,128943,1781],{"class":34},[28,128945,128946,128948,128950,128953],{"class":30,"line":1802},[28,128947,71355],{"class":38},[28,128949,51914],{"class":34},[28,128951,128952],{"class":38},"#55585a",[28,128954,1781],{"class":34},[28,128956,128957],{"class":30,"line":1808},[28,128958,2055],{"class":34},[28,128960,128961,128963,128965,128967],{"class":30,"line":1820},[28,128962,128870],{"class":2453},[28,128964,1889],{"class":51777},[28,128966,61417],{"class":2453},[28,128968,16058],{"class":34},[28,128970,128971,128973,128975,128978],{"class":30,"line":2102},[28,128972,71355],{"class":38},[28,128974,51914],{"class":34},[28,128976,128977],{"class":38},"#ff6700",[28,128979,1781],{"class":34},[28,128981,128982],{"class":30,"line":2107},[28,128983,2055],{"class":34},[420,128985],{"style":126802,"src":128986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128988,128989],{},"行高=盒子高度：实现文字的垂直居中",[14,128991,128992],{},"原理讲解：",[420,128994],{"style":126802,"src":128995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[60,128997,128999],{"id":128998},"_82-css背景","8.2 css背景",[14,129001,129002],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[605,129004,129006],{"id":129005},"_821-背景颜色","8.2.1 背景颜色",[14,129008,129009],{},"background-color:颜色值;",[14,129011,129012],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[605,129014,129016],{"id":129015},"_822-背景图片","8.2.2 背景图片",[14,129018,129019],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[18,129021,129023],{"className":126946,"code":129022,"language":126948,"meta":23,"style":23},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[25,129024,129025,129031,129047],{"__ignoreMap":23},[28,129026,129027,129029],{"class":30,"line":31},[28,129028,52088],{"class":51777},[28,129030,16058],{"class":34},[28,129032,129033,129036,129038,129040,129042,129045],{"class":30,"line":77},[28,129034,129035],{"class":38},"  background-image",[28,129037,51914],{"class":34},[28,129039,62203],{"class":38},[28,129041,367],{"class":34},[28,129043,129044],{"class":5704},"images\u002Fbg.png",[28,129046,3209],{"class":34},[28,129048,129049],{"class":30,"line":114},[28,129050,2055],{"class":34},[768,129052,129053,129062],{},[771,129054,129055],{},[774,129056,129057,129060],{},[777,129058,129059],{"align":24222},"参数值",[777,129061,103090],{"align":24222},[815,129063,129064,129071],{},[774,129065,129066,129068],{},[820,129067,55214],{"align":24222},[820,129069,129070],{"align":24222},"无背景图（默认的）",[774,129072,129073,129075],{},[820,129074,62203],{"align":24222},[820,129076,129077],{"align":24222},"使用绝对或相对地址指定背景图像",[18,129079,129080],{"className":126946,"code":129022,"language":126948,"meta":23,"style":23},[25,129081,129082,129088,129102],{"__ignoreMap":23},[28,129083,129084,129086],{"class":30,"line":31},[28,129085,52088],{"class":51777},[28,129087,16058],{"class":34},[28,129089,129090,129092,129094,129096,129098,129100],{"class":30,"line":77},[28,129091,129035],{"class":38},[28,129093,51914],{"class":34},[28,129095,62203],{"class":38},[28,129097,367],{"class":34},[28,129099,129044],{"class":5704},[28,129101,3209],{"class":34},[28,129103,129104],{"class":30,"line":114},[28,129105,2055],{"class":34},[14,129107,129108],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[605,129110,129112],{"id":129111},"_823-背景平铺","8.2.3 背景平铺",[18,129114,129116],{"className":126946,"code":129115,"language":126948,"meta":23,"style":23},"div {\n  background-repeat: no-repeat;\n}\n",[25,129117,129118,129124,129135],{"__ignoreMap":23},[28,129119,129120,129122],{"class":30,"line":31},[28,129121,52088],{"class":51777},[28,129123,16058],{"class":34},[28,129125,129126,129129,129131,129133],{"class":30,"line":77},[28,129127,129128],{"class":38},"  background-repeat",[28,129130,51914],{"class":34},[28,129132,62213],{"class":38},[28,129134,1781],{"class":34},[28,129136,129137],{"class":30,"line":114},[28,129138,2055],{"class":34},[768,129140,129141,129149],{},[771,129142,129143],{},[774,129144,129145,129147],{},[777,129146,129059],{"align":24222},[777,129148,103090],{"align":24222},[815,129150,129151,129159,129166,129174],{},[774,129152,129153,129156],{},[820,129154,129155],{"align":24222},"repeat",[820,129157,129158],{"align":24222},"背景图像在纵向和横向上平铺（默认的）",[774,129160,129161,129163],{},[820,129162,62213],{"align":24222},[820,129164,129165],{"align":24222},"背景图像不平铺",[774,129167,129168,129171],{},[820,129169,129170],{"align":24222},"repeat-x",[820,129172,129173],{"align":24222},"背景图像在横向上平铺",[774,129175,129176,129179],{},[820,129177,129178],{"align":24222},"repeat-y",[820,129180,129181],{"align":24222},"背景图像在纵向平铺",[605,129183,129185],{"id":129184},"_824-背景图片位置","8.2.4 背景图片位置",[18,129187,129189],{"className":126946,"code":129188,"language":126948,"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,129190,129191,129196,129202,129216,129220,129225,129231,129247,129251,129256,129262,129276],{"__ignoreMap":23},[28,129192,129193],{"class":30,"line":31},[28,129194,129195],{"class":73},"\u002F* 方位名词 *\u002F\n",[28,129197,129198,129200],{"class":30,"line":77},[28,129199,52088],{"class":51777},[28,129201,16058],{"class":34},[28,129203,129204,129207,129209,129211,129214],{"class":30,"line":114},[28,129205,129206],{"class":38},"  background-position",[28,129208,51914],{"class":34},[28,129210,52069],{"class":38},[28,129212,129213],{"class":38}," top",[28,129215,1781],{"class":34},[28,129217,129218],{"class":30,"line":128},[28,129219,2055],{"class":34},[28,129221,129222],{"class":30,"line":393},[28,129223,129224],{"class":73},"\u002F* 精确单位 *\u002F\n",[28,129226,129227,129229],{"class":30,"line":409},[28,129228,52088],{"class":51777},[28,129230,16058],{"class":34},[28,129232,129233,129235,129237,129239,129241,129243,129245],{"class":30,"line":1711},[28,129234,129206],{"class":38},[28,129236,51914],{"class":34},[28,129238,1320],{"class":38},[28,129240,51969],{"class":42},[28,129242,57981],{"class":38},[28,129244,51969],{"class":42},[28,129246,1781],{"class":34},[28,129248,129249],{"class":30,"line":1802},[28,129250,2055],{"class":34},[28,129252,129253],{"class":30,"line":1808},[28,129254,129255],{"class":73},"\u002F* 混合单位 *\u002F\n",[28,129257,129258,129260],{"class":30,"line":1820},[28,129259,52088],{"class":51777},[28,129261,16058],{"class":34},[28,129263,129264,129266,129268,129270,129272,129274],{"class":30,"line":2102},[28,129265,129206],{"class":38},[28,129267,51914],{"class":34},[28,129269,1320],{"class":38},[28,129271,51969],{"class":42},[28,129273,17630],{"class":38},[28,129275,1781],{"class":34},[28,129277,129278],{"class":30,"line":2107},[28,129279,2055],{"class":34},[14,129281,129282],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[768,129284,129285,129293],{},[771,129286,129287],{},[774,129288,129289,129291],{},[777,129290,129059],{"align":24222},[777,129292,26356],{"align":24222},[815,129294,129295,129302],{},[774,129296,129297,129299],{},[820,129298,52445],{"align":24222},[820,129300,129301],{"align":24222},"百分数|由浮点数和单位标识符组成的长度值",[774,129303,129304,129307],{},[820,129305,129306],{"align":24222},"position",[820,129308,129309],{"align":24222},"top|center|bottom|left|center|right 方位名词",[14,129311,129312],{},"其他说明：",[14,129314,129315],{},"①参数是方位名词",[14,129317,129318],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129320,129321],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129323,129324],{},"②参数是精确单位",[14,129326,129327],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129329,129330],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129332,129333],{},"③参数是混合单位",[14,129335,129336],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[605,129338,129340],{"id":129339},"_825-背景图片固定","8.2.5 背景图片固定",[18,129342,129344],{"className":126946,"code":129343,"language":126948,"meta":23,"style":23},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[25,129345,129346,129351,129357,129369,129373,129378,129384,129394],{"__ignoreMap":23},[28,129347,129348],{"class":30,"line":31},[28,129349,129350],{"class":73},"\u002F* 背景滚动（默认） *\u002F\n",[28,129352,129353,129355],{"class":30,"line":77},[28,129354,52088],{"class":51777},[28,129356,16058],{"class":34},[28,129358,129359,129362,129364,129367],{"class":30,"line":114},[28,129360,129361],{"class":38},"  background-attachment",[28,129363,51914],{"class":34},[28,129365,129366],{"class":38},"scroll",[28,129368,1781],{"class":34},[28,129370,129371],{"class":30,"line":128},[28,129372,2055],{"class":34},[28,129374,129375],{"class":30,"line":393},[28,129376,129377],{"class":73},"\u002F* 背景固定 *\u002F\n",[28,129379,129380,129382],{"class":30,"line":409},[28,129381,52088],{"class":51777},[28,129383,16058],{"class":34},[28,129385,129386,129388,129390,129392],{"class":30,"line":1711},[28,129387,129361],{"class":38},[28,129389,51914],{"class":34},[28,129391,86710],{"class":38},[28,129393,1781],{"class":34},[28,129395,129396],{"class":30,"line":1802},[28,129397,2055],{"class":34},[768,129399,129400,129409],{},[771,129401,129402],{},[774,129403,129404,129407],{},[777,129405,129406],{"align":24222},"参数",[777,129408,103090],{"align":24222},[815,129410,129411,129418],{},[774,129412,129413,129415],{},[820,129414,129366],{"align":24222},[820,129416,129417],{"align":24222},"背景图像是随对象内容滚动",[774,129419,129420,129422],{},[820,129421,86710],{"align":24222},[820,129423,129424],{"align":24222},"背景图像固定",[605,129426,129428],{"id":129427},"_826-背景样式合写","8.2.6 背景样式合写",[18,129430,129432],{"className":126946,"code":129431,"language":126948,"meta":23,"style":23},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[25,129433,129434,129439,129445,129473],{"__ignoreMap":23},[28,129435,129436],{"class":30,"line":31},[28,129437,129438],{"class":73},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[28,129440,129441,129443],{"class":30,"line":77},[28,129442,52088],{"class":51777},[28,129444,16058],{"class":34},[28,129446,129447,129449,129451,129453,129456,129458,129460,129462,129464,129467,129469,129471],{"class":30,"line":114},[28,129448,71088],{"class":38},[28,129450,51914],{"class":34},[28,129452,61319],{"class":38},[28,129454,129455],{"class":38}," url",[28,129457,367],{"class":34},[28,129459,129044],{"class":5704},[28,129461,14200],{"class":34},[28,129463,62213],{"class":38},[28,129465,129466],{"class":38}," fixed",[28,129468,17630],{"class":38},[28,129470,129213],{"class":38},[28,129472,1781],{"class":34},[28,129474,129475],{"class":30,"line":128},[28,129476,2055],{"class":34},[605,129478,129480],{"id":129479},"_827-背景色半透明","8.2.7 背景色半透明",[18,129482,129484],{"className":126946,"code":129483,"language":126948,"meta":23,"style":23},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[25,129485,129486,129492,129518],{"__ignoreMap":23},[28,129487,129488,129490],{"class":30,"line":31},[28,129489,52088],{"class":51777},[28,129491,16058],{"class":34},[28,129493,129494,129496,129498,129500,129502,129504,129506,129508,129510,129512,129514,129516],{"class":30,"line":77},[28,129495,71088],{"class":38},[28,129497,51914],{"class":34},[28,129499,55587],{"class":38},[28,129501,367],{"class":34},[28,129503,822],{"class":38},[28,129505,12921],{"class":34},[28,129507,822],{"class":38},[28,129509,12921],{"class":34},[28,129511,822],{"class":38},[28,129513,12921],{"class":34},[28,129515,456],{"class":38},[28,129517,3209],{"class":34},[28,129519,129520],{"class":30,"line":114},[28,129521,2055],{"class":34},[14,129523,99866],{},[14,129525,129526],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129528,129529],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129531,129532],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129534,129535],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[605,129537,129539],{"id":129538},"_828-总结","8.2.8 总结",[768,129541,129542,129553],{},[771,129543,129544],{},[774,129545,129546,129549,129551],{},[777,129547,129548],{"align":24222},"属性",[777,129550,103090],{"align":24222},[777,129552,783],{"align":24222},[815,129554,129555,129566,129577,129588,129599,129610,129621],{},[774,129556,129557,129560,129563],{},[820,129558,129559],{"align":24222},"background-color",[820,129561,129562],{"align":24222},"背景颜色",[820,129564,129565],{"align":24222},"预定义的颜色值\u002F十六进制\u002FRGB代码",[774,129567,129568,129571,129574],{},[820,129569,129570],{"align":24222},"background-image",[820,129572,129573],{"align":24222},"背景图片",[820,129575,129576],{"align":24222},"url(图片路径)",[774,129578,129579,129582,129585],{},[820,129580,129581],{"align":24222},"background-repeat",[820,129583,129584],{"align":24222},"是否平铺",[820,129586,129587],{"align":24222},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[774,129589,129590,129593,129596],{},[820,129591,129592],{"align":24222},"background-position",[820,129594,129595],{"align":24222},"背景位置",[820,129597,129598],{"align":24222},"length\u002Fposition 分别是x和y坐标",[774,129600,129601,129604,129607],{},[820,129602,129603],{"align":24222},"background-attachment",[820,129605,129606],{"align":24222},"背景附着",[820,129608,129609],{"align":24222},"scroll(背景滚动) \u002Ffixed (背景固定)",[774,129611,129612,129615,129618],{},[820,129613,129614],{"align":24222},"背景简写",[820,129616,129617],{"align":24222},"书写更简单",[820,129619,129620],{"align":24222},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[774,129622,129623,129626,129629],{},[820,129624,129625],{"align":24222},"背景半透明",[820,129627,129628],{"align":24222},"背景颜色半透明",[820,129630,129631],{"align":24222},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129633,129634],{},"颜色渐变：",[420,129636],{"style":126802,"src":129637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[420,129639],{"style":126802,"src":129640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[605,129642,129644],{"id":129643},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[18,129646,129648],{"className":127693,"code":129647,"language":127695,"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,129649,129650,129665,129684,129703,129722,129741,129760],{"__ignoreMap":23},[28,129651,129652,129654,129656,129658,129660,129663],{"class":30,"line":31},[28,129653,1529],{"class":34},[28,129655,52088],{"class":51777},[28,129657,53963],{"class":2453},[28,129659,83],{"class":34},[28,129661,129662],{"class":735},"\"nav\"",[28,129664,51784],{"class":34},[28,129666,129667,129669,129671,129673,129675,129677,129680,129682],{"class":30,"line":77},[28,129668,52621],{"class":34},[28,129670,80],{"class":51777},[28,129672,61534],{"class":2453},[28,129674,83],{"class":34},[28,129676,61539],{"class":735},[28,129678,129679],{"class":34},">五彩导航1\u003C\u002F",[28,129681,80],{"class":51777},[28,129683,51784],{"class":34},[28,129685,129686,129688,129690,129692,129694,129696,129699,129701],{"class":30,"line":114},[28,129687,52621],{"class":34},[28,129689,80],{"class":51777},[28,129691,61534],{"class":2453},[28,129693,83],{"class":34},[28,129695,61539],{"class":735},[28,129697,129698],{"class":34},">五彩导航2\u003C\u002F",[28,129700,80],{"class":51777},[28,129702,51784],{"class":34},[28,129704,129705,129707,129709,129711,129713,129715,129718,129720],{"class":30,"line":128},[28,129706,52621],{"class":34},[28,129708,80],{"class":51777},[28,129710,61534],{"class":2453},[28,129712,83],{"class":34},[28,129714,61539],{"class":735},[28,129716,129717],{"class":34},">五彩导航3\u003C\u002F",[28,129719,80],{"class":51777},[28,129721,51784],{"class":34},[28,129723,129724,129726,129728,129730,129732,129734,129737,129739],{"class":30,"line":393},[28,129725,52621],{"class":34},[28,129727,80],{"class":51777},[28,129729,61534],{"class":2453},[28,129731,83],{"class":34},[28,129733,61539],{"class":735},[28,129735,129736],{"class":34},">五彩导航4\u003C\u002F",[28,129738,80],{"class":51777},[28,129740,51784],{"class":34},[28,129742,129743,129745,129747,129749,129751,129753,129756,129758],{"class":30,"line":409},[28,129744,52621],{"class":34},[28,129746,80],{"class":51777},[28,129748,61534],{"class":2453},[28,129750,83],{"class":34},[28,129752,61539],{"class":735},[28,129754,129755],{"class":34},">五彩导航5\u003C\u002F",[28,129757,80],{"class":51777},[28,129759,51784],{"class":34},[28,129761,129762,129764,129766],{"class":30,"line":1711},[28,129763,52262],{"class":34},[28,129765,52088],{"class":51777},[28,129767,51784],{"class":34},[18,129769,129771],{"className":126946,"code":129770,"language":126948,"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,129772,129773,129782,129792,129804,129816,129826,129838,129848,129852,129877,129900,129923,129946],{"__ignoreMap":23},[28,129774,129775,129778,129780],{"class":30,"line":31},[28,129776,129777],{"class":2453},".nav",[28,129779,1889],{"class":51777},[28,129781,16058],{"class":34},[28,129783,129784,129786,129788,129790],{"class":30,"line":77},[28,129785,128562],{"class":38},[28,129787,51914],{"class":34},[28,129789,72860],{"class":38},[28,129791,1781],{"class":34},[28,129793,129794,129796,129798,129800,129802],{"class":30,"line":114},[28,129795,71045],{"class":38},[28,129797,51914],{"class":34},[28,129799,1437],{"class":38},[28,129801,51969],{"class":42},[28,129803,1781],{"class":34},[28,129805,129806,129808,129810,129812,129814],{"class":30,"line":128},[28,129807,71265],{"class":38},[28,129809,51914],{"class":34},[28,129811,1476],{"class":38},[28,129813,51969],{"class":42},[28,129815,1781],{"class":34},[28,129817,129818,129820,129822,129824],{"class":30,"line":393},[28,129819,71003],{"class":38},[28,129821,51914],{"class":34},[28,129823,52069],{"class":38},[28,129825,1781],{"class":34},[28,129827,129828,129830,129832,129834,129836],{"class":30,"line":409},[28,129829,127630],{"class":38},[28,129831,51914],{"class":34},[28,129833,1476],{"class":38},[28,129835,51969],{"class":42},[28,129837,1781],{"class":34},[28,129839,129840,129842,129844,129846],{"class":30,"line":1711},[28,129841,71382],{"class":38},[28,129843,51914],{"class":34},[28,129845,61319],{"class":38},[28,129847,1781],{"class":34},[28,129849,129850],{"class":30,"line":1802},[28,129851,2055],{"class":34},[28,129853,129854,129856,129858,129861,129863,129865,129868,129870,129872,129874],{"class":30,"line":1808},[28,129855,129777],{"class":2453},[28,129857,1889],{"class":51777},[28,129859,129860],{"class":2453},":nth-child",[28,129862,367],{"class":34},[28,129864,39],{"class":38},[28,129866,129867],{"class":34},") { ",[28,129869,129559],{"class":38},[28,129871,51914],{"class":34},[28,129873,128977],{"class":38},[28,129875,129876],{"class":34},"; }\n",[28,129878,129879,129881,129883,129885,129887,129889,129891,129893,129895,129898],{"class":30,"line":1820},[28,129880,129777],{"class":2453},[28,129882,1889],{"class":51777},[28,129884,129860],{"class":2453},[28,129886,367],{"class":34},[28,129888,93],{"class":38},[28,129890,129867],{"class":34},[28,129892,129559],{"class":38},[28,129894,51914],{"class":34},[28,129896,129897],{"class":38},"#ff0000",[28,129899,129876],{"class":34},[28,129901,129902,129904,129906,129908,129910,129912,129914,129916,129918,129921],{"class":30,"line":2102},[28,129903,129777],{"class":2453},[28,129905,1889],{"class":51777},[28,129907,129860],{"class":2453},[28,129909,367],{"class":34},[28,129911,98],{"class":38},[28,129913,129867],{"class":34},[28,129915,129559],{"class":38},[28,129917,51914],{"class":34},[28,129919,129920],{"class":38},"#00a4ff",[28,129922,129876],{"class":34},[28,129924,129925,129927,129929,129931,129933,129935,129937,129939,129941,129944],{"class":30,"line":2107},[28,129926,129777],{"class":2453},[28,129928,1889],{"class":51777},[28,129930,129860],{"class":2453},[28,129932,367],{"class":34},[28,129934,103],{"class":38},[28,129936,129867],{"class":34},[28,129938,129559],{"class":38},[28,129940,51914],{"class":34},[28,129942,129943],{"class":38},"#ff00ff",[28,129945,129876],{"class":34},[28,129947,129948,129950,129952,129954,129956,129958,129960,129962,129964,129967],{"class":30,"line":2113},[28,129949,129777],{"class":2453},[28,129951,1889],{"class":51777},[28,129953,129860],{"class":2453},[28,129955,367],{"class":34},[28,129957,108],{"class":38},[28,129959,129867],{"class":34},[28,129961,129559],{"class":38},[28,129963,51914],{"class":34},[28,129965,129966],{"class":38},"#00ff00",[28,129968,129876],{"class":34},[60,129970,129972],{"id":129971},"_83-css三大特性","8.3 css三大特性",[605,129974,129976],{"id":129975},"_831-层叠性","8.3.1 层叠性",[14,129978,129979],{},"为了解决样式冲突问题",[14,129981,129982],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129984,129985],{},"   ②样式不冲突，不会层叠",[605,129987,129989],{"id":129988},"_832-继承性","8.3.2 继承性",[14,129991,129992],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129994,129995],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[18,129997,129999],{"className":126946,"code":129998,"language":126948,"meta":23,"style":23},"p {\n  color: #333;\n}\n",[25,130000,130001,130007,130017],{"__ignoreMap":23},[28,130002,130003,130005],{"class":30,"line":31},[28,130004,14],{"class":51777},[28,130006,16058],{"class":34},[28,130008,130009,130011,130013,130015],{"class":30,"line":77},[28,130010,71382],{"class":38},[28,130012,51914],{"class":34},[28,130014,62846],{"class":38},[28,130016,1781],{"class":34},[28,130018,130019],{"class":30,"line":114},[28,130020,2055],{"class":34},[420,130022],{"style":126802,"src":130023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130025,130026],{},"解释：①行高可以跟单位也可以不跟单位",[14,130028,130029],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130031,130032],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130034,130035],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[605,130037,130039],{"id":130038},"_833-优先级","8.3.3 优先级",[588,130041,130042,130045],{},[591,130043,130044],{},"选择器相同，则执行层叠性",[591,130046,130047],{},"选择器不同，则根据选择器权重执行",[768,130049,130050,130060],{},[771,130051,130052],{},[774,130053,130054,130057],{},[777,130055,130056],{"align":24222},"选择器",[777,130058,130059],{"align":24222},"选择器权重",[815,130061,130062,130070,130078,130086,130094,130102],{},[774,130063,130064,130067],{},[820,130065,130066],{"align":24222},"继承 或者*",[820,130068,130069],{"align":24222},"0，0，0，0",[774,130071,130072,130075],{},[820,130073,130074],{"align":24222},"标签选择器",[820,130076,130077],{"align":24222},"0，0，0，1",[774,130079,130080,130083],{},[820,130081,130082],{"align":24222},"类选择器，伪类选择器",[820,130084,130085],{"align":24222},"0，0，1，0",[774,130087,130088,130091],{},[820,130089,130090],{"align":24222},"ID选择器",[820,130092,130093],{"align":24222},"0，1，0，0",[774,130095,130096,130099],{},[820,130097,130098],{"align":24222},"行内样式",[820,130100,130101],{"align":24222},"1，0，0，0",[774,130103,130104,130107],{},[820,130105,130106],{"align":24222},"！important",[820,130108,130109],{"align":24222},"无穷大",[14,130111,130112],{},"! important用法：",[18,130114,130116],{"className":126946,"code":130115,"language":126948,"meta":23,"style":23},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[25,130117,130118,130123,130129,130142,130146,130151,130157,130167],{"__ignoreMap":23},[28,130119,130120],{"class":30,"line":31},[28,130121,130122],{"class":73},"\u002F* !important 拥有最高优先级 *\u002F\n",[28,130124,130125,130127],{"class":30,"line":77},[28,130126,52088],{"class":51777},[28,130128,16058],{"class":34},[28,130130,130131,130133,130135,130137,130140],{"class":30,"line":114},[28,130132,71382],{"class":38},[28,130134,51914],{"class":34},[28,130136,52122],{"class":38},[28,130138,130139],{"class":42}," !important",[28,130141,1781],{"class":34},[28,130143,130144],{"class":30,"line":128},[28,130145,2055],{"class":34},[28,130147,130148],{"class":30,"line":393},[28,130149,130150],{"class":73},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[28,130152,130153,130155],{"class":30,"line":409},[28,130154,52088],{"class":51777},[28,130156,16058],{"class":34},[28,130158,130159,130161,130163,130165],{"class":30,"line":1711},[28,130160,71382],{"class":38},[28,130162,51914],{"class":34},[28,130164,57898],{"class":38},[28,130166,1781],{"class":34},[28,130168,130169],{"class":30,"line":1802},[28,130170,2055],{"class":34},[14,130172,130173],{},"优先级注意点：",[14,130175,130176],{},"①权重是有4组数字组成,但是不会有进位",[14,130178,130179],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130181,130182],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130184,130185],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130187,130188],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130190,130191],{},"⑥复合选择器",[768,130193,130194,130204],{},[771,130195,130196],{},[774,130197,130198,130201],{},[777,130199,130200],{"align":24222},"div ul li",[777,130202,130203],{"align":24222},"0,0,0,3",[815,130205,130206,130214,130222],{},[774,130207,130208,130211],{},[820,130209,130210],{"align":24222},".nav ul li",[820,130212,130213],{"align":24222},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[774,130215,130216,130219],{},[820,130217,130218],{"align":24222},"a:hover",[820,130220,130221],{"align":24222},"0,0,1,1",[774,130223,130224,130227],{},[820,130225,130226],{"align":24222},".nav a",[820,130228,130221],{"align":24222},[547,130230,130231],{},"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":77,"depth":77,"links":130233},[130234,130242,130253],{"id":128342,"depth":77,"text":128343,"children":130235},[130236,130237,130238,130239,130240,130241],{"id":128355,"depth":114,"text":128356},{"id":128427,"depth":114,"text":128428},{"id":128499,"depth":114,"text":128500},{"id":128530,"depth":114,"text":128531},{"id":128537,"depth":114,"text":128538},{"id":128690,"depth":114,"text":128691},{"id":128998,"depth":77,"text":128999,"children":130243},[130244,130245,130246,130247,130248,130249,130250,130251,130252],{"id":129005,"depth":114,"text":129006},{"id":129015,"depth":114,"text":129016},{"id":129111,"depth":114,"text":129112},{"id":129184,"depth":114,"text":129185},{"id":129339,"depth":114,"text":129340},{"id":129427,"depth":114,"text":129428},{"id":129479,"depth":114,"text":129480},{"id":129538,"depth":114,"text":129539},{"id":129643,"depth":114,"text":129644},{"id":129971,"depth":77,"text":129972,"children":130254},[130255,130256,130257],{"id":129975,"depth":114,"text":129976},{"id":129988,"depth":114,"text":129989},{"id":130038,"depth":114,"text":130039},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128334,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130264,"title":130265,"body":130266,"description":559,"extension":560,"meta":131856,"navigation":562,"path":131857,"seo":131858,"stem":131859,"__hash__":131860},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130267,"toc":131835},[130268,130271,130275,130278,130281,130284,130287,130290,130293,130296,130300,130308,130345,130381,130384,130398,130403,130437,130440,130533,130538,130541,130571,130574,130579,130587,130591,130598,130644,130688,130693,130696,130699,130702,130705,130708,130711,130713,130716,130720,130725,130769,130774,130777,130780,130817,130822,130825,130828,130831,130834,130866,130869,130872,130875,130907,130910,130913,130916,130920,130923,130955,130958,130962,130982,130985,130993,130996,131000,131005,131008,131040,131045,131048,131086,131090,131095,131098,131101,131132,131135,131152,131157,131209,131269,131274,131328,131366,131370,131374,131377,131381,131389,131392,131394,131405,131410,131458,131492,131495,131498,131501,131504,131548,131551,131554,131557,131560,131563,131566,131610,131613,131616,131619,131622,131625,131628,131634,131637,131681,131684,131687,131690,131693,131696,131740,131743,131745,131748,131752,131756,131794,131798,131801,131804,131808,131816,131820,131823,131826,131829,131832],[10,130269,130265],{"id":130270},"_9-css盒模型浮动与切图",[60,130272,130274],{"id":130273},"_91-盒子模型","9.1 盒子模型",[14,130276,130277],{},"利用盒子来设计网页",[14,130279,130280],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130282,130283],{},"网页布局设置：",[14,130285,130286],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130288,130289],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130291,130292],{},"③往盒子里装内容",[420,130294],{"style":126802,"src":130295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[605,130297,130299],{"id":130298},"_911-边框border","9.1.1 边框（border）",[588,130301,130302,130305],{},[591,130303,130304],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[591,130306,130307],{},"语法",[18,130309,130311],{"className":126946,"code":130310,"language":126948,"meta":23,"style":23},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[25,130312,130313,130318,130324,130341],{"__ignoreMap":23},[28,130314,130315],{"class":30,"line":31},[28,130316,130317],{"class":73},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[28,130319,130320,130322],{"class":30,"line":77},[28,130321,52088],{"class":51777},[28,130323,16058],{"class":34},[28,130325,130326,130328,130330,130332,130334,130336,130339],{"class":30,"line":114},[28,130327,71373],{"class":38},[28,130329,51914],{"class":34},[28,130331,39],{"class":38},[28,130333,51969],{"class":42},[28,130335,51998],{"class":38},[28,130337,130338],{"class":38}," #ccc",[28,130340,1781],{"class":34},[28,130342,130343],{"class":30,"line":128},[28,130344,2055],{"class":34},[768,130346,130347,130355],{},[771,130348,130349],{},[774,130350,130351,130353],{},[777,130352,129548],{"align":24222},[777,130354,103090],{"align":24222},[815,130356,130357,130365,130373],{},[774,130358,130359,130362],{},[820,130360,130361],{"align":24222},"border-width",[820,130363,130364],{"align":24222},"定义边框粗细，单位是px",[774,130366,130367,130370],{},[820,130368,130369],{"align":24222},"border-style",[820,130371,130372],{"align":24222},"边框的样式",[774,130374,130375,130378],{},[820,130376,130377],{"align":24222},"border-color",[820,130379,130380],{"align":24222},"边框的颜色",[14,130382,130383],{},"边框样式 border-style 可以设置如下值：",[1626,130385,130386,130389,130392,130395],{},[591,130387,130388],{},"none：没有边框即忽略所有边框的宽度（默认值）",[591,130390,130391],{},"solid：边框为单实线(最为常用的)",[591,130393,130394],{},"dashed：边框为虚线",[591,130396,130397],{},"dotted：边框为点线",[588,130399,130400],{"start":114},[591,130401,130402],{},"边框的合写分写",[18,130404,130405],{"className":126946,"code":130310,"language":126948,"meta":23,"style":23},[25,130406,130407,130411,130417,130433],{"__ignoreMap":23},[28,130408,130409],{"class":30,"line":31},[28,130410,130317],{"class":73},[28,130412,130413,130415],{"class":30,"line":77},[28,130414,52088],{"class":51777},[28,130416,16058],{"class":34},[28,130418,130419,130421,130423,130425,130427,130429,130431],{"class":30,"line":114},[28,130420,71373],{"class":38},[28,130422,51914],{"class":34},[28,130424,39],{"class":38},[28,130426,51969],{"class":42},[28,130428,51998],{"class":38},[28,130430,130338],{"class":38},[28,130432,1781],{"class":34},[28,130434,130435],{"class":30,"line":128},[28,130436,2055],{"class":34},[14,130438,130439],{},"边框分开写法：",[18,130441,130443],{"className":126946,"code":130442,"language":126948,"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,130444,130445,130450,130456,130474,130492,130511,130529],{"__ignoreMap":23},[28,130446,130447],{"class":30,"line":31},[28,130448,130449],{"class":73},"\u002F* 边框分开写法 *\u002F\n",[28,130451,130452,130454],{"class":30,"line":77},[28,130453,52088],{"class":51777},[28,130455,16058],{"class":34},[28,130457,130458,130461,130463,130465,130467,130469,130472],{"class":30,"line":114},[28,130459,130460],{"class":38},"  border-top",[28,130462,51914],{"class":34},[28,130464,39],{"class":38},[28,130466,51969],{"class":42},[28,130468,51998],{"class":38},[28,130470,130471],{"class":38}," #000",[28,130473,1781],{"class":34},[28,130475,130476,130479,130481,130483,130485,130487,130490],{"class":30,"line":128},[28,130477,130478],{"class":38},"  border-right",[28,130480,51914],{"class":34},[28,130482,93],{"class":38},[28,130484,51969],{"class":42},[28,130486,62718],{"class":38},[28,130488,130489],{"class":38}," #333",[28,130491,1781],{"class":34},[28,130493,130494,130497,130499,130501,130503,130506,130509],{"class":30,"line":393},[28,130495,130496],{"class":38},"  border-bottom",[28,130498,51914],{"class":34},[28,130500,98],{"class":38},[28,130502,51969],{"class":42},[28,130504,130505],{"class":38}," dotted",[28,130507,130508],{"class":38}," #666",[28,130510,1781],{"class":34},[28,130512,130513,130516,130518,130520,130522,130524,130527],{"class":30,"line":409},[28,130514,130515],{"class":38},"  border-left",[28,130517,51914],{"class":34},[28,130519,39],{"class":38},[28,130521,51969],{"class":42},[28,130523,51998],{"class":38},[28,130525,130526],{"class":38}," #999",[28,130528,1781],{"class":34},[28,130530,130531],{"class":30,"line":1711},[28,130532,2055],{"class":34},[588,130534,130535],{"start":128},[591,130536,130537],{},"表格的细线边框",[14,130539,130540],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[18,130542,130544],{"className":126946,"code":130543,"language":126948,"meta":23,"style":23},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[25,130545,130546,130551,130557,130567],{"__ignoreMap":23},[28,130547,130548],{"class":30,"line":31},[28,130549,130550],{"class":73},"\u002F* 表格细线边框合并 *\u002F\n",[28,130552,130553,130555],{"class":30,"line":77},[28,130554,768],{"class":51777},[28,130556,16058],{"class":34},[28,130558,130559,130561,130563,130565],{"class":30,"line":114},[28,130560,71055],{"class":38},[28,130562,51914],{"class":34},[28,130564,65512],{"class":38},[28,130566,1781],{"class":34},[28,130568,130569],{"class":30,"line":128},[28,130570,2055],{"class":34},[14,130572,130573],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[588,130575,130576],{"start":393},[591,130577,130578],{},"解决边框额外增加盒子的实际大小的方法：",[1626,130580,130581,130584],{},[591,130582,130583],{},"测量盒子大小的时候,不量边框",[591,130585,130586],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[605,130588,130590],{"id":130589},"_912-内边距","9.1.2 内边距",[588,130592,130593,130596],{},[591,130594,130595],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[591,130597,130307],{},[768,130599,130600,130610],{},[771,130601,130602],{},[774,130603,130604,130607],{},[777,130605,130606],{"align":24222},"值的个数",[777,130608,130609],{"align":24222},"表达意思",[815,130611,130612,130620,130628,130636],{},[774,130613,130614,130617],{},[820,130615,130616],{"align":24222},"padding: 5px;",[820,130618,130619],{"align":24222},"1个值，代表上下左右都有5个元素",[774,130621,130622,130625],{},[820,130623,130624],{"align":24222},"padding: 5px 10px;",[820,130626,130627],{"align":24222},"2个值，代表上下内边距为5像素，左右内边距为10像素",[774,130629,130630,130633],{},[820,130631,130632],{"align":24222},"padding: 5px 10px 20px;",[820,130634,130635],{"align":24222},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[774,130637,130638,130641],{},[820,130639,130640],{"align":24222},"padding: 5px 10px 20px 30px;",[820,130642,130643],{"align":24222},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[768,130645,130646,130654],{},[771,130647,130648],{},[774,130649,130650,130652],{},[777,130651,129548],{"align":24222},[777,130653,103090],{"align":24222},[815,130655,130656,130664,130672,130680],{},[774,130657,130658,130661],{},[820,130659,130660],{"align":24222},"padding-left",[820,130662,130663],{"align":24222},"左内边距",[774,130665,130666,130669],{},[820,130667,130668],{"align":24222},"padding-right",[820,130670,130671],{"align":24222},"右内边距",[774,130673,130674,130677],{},[820,130675,130676],{"align":24222},"padding-top",[820,130678,130679],{"align":24222},"上内边距",[774,130681,130682,130685],{},[820,130683,130684],{"align":24222},"padding-bottom",[820,130686,130687],{"align":24222},"下内边距",[588,130689,130690],{"start":114},[591,130691,130692],{},"内边距会影响盒子的实际大小",[14,130694,130695],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130697,130698],{},"①内容和边框有了距离，添加了内边距",[14,130700,130701],{},"②padding影响了盒子实际大小",[14,130703,130704],{},"内边距对盒子大小的影响：",[14,130706,130707],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130709,130710],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130712,95691],{},[14,130714,130715],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[605,130717,130719],{"id":130718},"_913-外边距","9.1.3 外边距",[588,130721,130722],{},[591,130723,130724],{},"控制盒子与盒子之间的距离",[768,130726,130727,130735],{},[771,130728,130729],{},[774,130730,130731,130733],{},[777,130732,129548],{"align":24222},[777,130734,103090],{"align":24222},[815,130736,130737,130745,130753,130761],{},[774,130738,130739,130742],{},[820,130740,130741],{"align":24222},"margin-left",[820,130743,130744],{"align":24222},"左外边距",[774,130746,130747,130750],{},[820,130748,130749],{"align":24222},"margin-right",[820,130751,130752],{"align":24222},"右外边距",[774,130754,130755,130758],{},[820,130756,130757],{"align":24222},"margin-top",[820,130759,130760],{"align":24222},"上外边距",[774,130762,130763,130766],{},[820,130764,130765],{"align":24222},"margin-bottom",[820,130767,130768],{"align":24222},"下外边距",[588,130770,130771],{"start":77},[591,130772,130773],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130775,130776],{},"①盒子必须指定了宽度（width）",[14,130778,130779],{},"②盒子左右的外边距都设置为 auto",[18,130781,130783],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,130784,130785,130790,130797,130813],{"__ignoreMap":23},[28,130786,130787],{"class":30,"line":31},[28,130788,130789],{"class":73},"\u002F* margin 复合写法（同上） *\u002F\n",[28,130791,130792,130795],{"class":30,"line":77},[28,130793,130794],{"class":2453},".box",[28,130796,16058],{"class":34},[28,130798,130799,130801,130803,130805,130807,130810],{"class":30,"line":114},[28,130800,70947],{"class":38},[28,130802,51914],{"class":34},[28,130804,822],{"class":38},[28,130806,52033],{"class":38},[28,130808,130809],{"class":34},";  ",[28,130811,130812],{"class":73},"\u002F* 块级盒子水平居中 *\u002F\n",[28,130814,130815],{"class":30,"line":128},[28,130816,2055],{"class":34},[588,130818,130819],{"start":114},[591,130820,130821],{},"外边距塌陷问题",[14,130823,130824],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[420,130826],{"style":126802,"src":130827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130829,130830],{},"解决方案：",[14,130832,130833],{},"①可以为父亲元素定义上边距",[18,130835,130836],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,130837,130838,130842,130848,130862],{"__ignoreMap":23},[28,130839,130840],{"class":30,"line":31},[28,130841,130789],{"class":73},[28,130843,130844,130846],{"class":30,"line":77},[28,130845,130794],{"class":2453},[28,130847,16058],{"class":34},[28,130849,130850,130852,130854,130856,130858,130860],{"class":30,"line":114},[28,130851,70947],{"class":38},[28,130853,51914],{"class":34},[28,130855,822],{"class":38},[28,130857,52033],{"class":38},[28,130859,130809],{"class":34},[28,130861,130812],{"class":73},[28,130863,130864],{"class":30,"line":128},[28,130865,2055],{"class":34},[14,130867,130868],{},"②可以为父亲元素定义上内边距",[14,130870,130871],{},"③可以为父亲元素添加overflow:hidden",[420,130873],{"style":126802,"src":130874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[18,130876,130877],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,130878,130879,130883,130889,130903],{"__ignoreMap":23},[28,130880,130881],{"class":30,"line":31},[28,130882,130789],{"class":73},[28,130884,130885,130887],{"class":30,"line":77},[28,130886,130794],{"class":2453},[28,130888,16058],{"class":34},[28,130890,130891,130893,130895,130897,130899,130901],{"class":30,"line":114},[28,130892,70947],{"class":38},[28,130894,51914],{"class":34},[28,130896,822],{"class":38},[28,130898,52033],{"class":38},[28,130900,130809],{"class":34},[28,130902,130812],{"class":73},[28,130904,130905],{"class":30,"line":128},[28,130906,2055],{"class":34},[420,130908],{"style":126802,"src":130909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130911,130912],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130914,130915],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[605,130917,130919],{"id":130918},"_914-清除内外边距","9.1.4 清除内外边距",[14,130921,130922],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[18,130924,130925],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,130926,130927,130931,130937,130951],{"__ignoreMap":23},[28,130928,130929],{"class":30,"line":31},[28,130930,130789],{"class":73},[28,130932,130933,130935],{"class":30,"line":77},[28,130934,130794],{"class":2453},[28,130936,16058],{"class":34},[28,130938,130939,130941,130943,130945,130947,130949],{"class":30,"line":114},[28,130940,70947],{"class":38},[28,130942,51914],{"class":34},[28,130944,822],{"class":38},[28,130946,52033],{"class":38},[28,130948,130809],{"class":34},[28,130950,130812],{"class":73},[28,130952,130953],{"class":30,"line":128},[28,130954,2055],{"class":34},[14,130956,130957],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[605,130959,130961],{"id":130960},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1626,130963,130964,130967,130970,130973,130976,130979],{},[591,130965,130966],{},"文件→打开 ：可以打开我们要测量的图片",[591,130968,130969],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[591,130971,130972],{},"右击标尺，把里面的单位改为像素",[591,130974,130975],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[591,130977,130978],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[591,130980,130981],{},"用选区拖动 可以测量大小",[420,130983],{"style":126802,"src":130984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1626,130986,130987,130990],{},[591,130988,130989],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[591,130991,130992],{},"吸管取色工具",[420,130994],{"style":126802,"src":130995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[605,130997,130999],{"id":130998},"_916-案例","9.1.6 案例",[588,131001,131002],{},[591,131003,131004],{},"小米商品",[420,131006],{"style":126802,"src":131007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[18,131009,131010],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,131011,131012,131016,131022,131036],{"__ignoreMap":23},[28,131013,131014],{"class":30,"line":31},[28,131015,130789],{"class":73},[28,131017,131018,131020],{"class":30,"line":77},[28,131019,130794],{"class":2453},[28,131021,16058],{"class":34},[28,131023,131024,131026,131028,131030,131032,131034],{"class":30,"line":114},[28,131025,70947],{"class":38},[28,131027,51914],{"class":34},[28,131029,822],{"class":38},[28,131031,52033],{"class":38},[28,131033,130809],{"class":34},[28,131035,130812],{"class":73},[28,131037,131038],{"class":30,"line":128},[28,131039,2055],{"class":34},[588,131041,131042],{"start":77},[591,131043,131044],{},"快报模块",[420,131046],{"style":126802,"src":131047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[18,131049,131051],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[25,131052,131053,131058,131073,131078],{"__ignoreMap":23},[28,131054,131055],{"class":30,"line":31},[28,131056,131057],{"class":73},"\u003C!-- HTML 代码示例 -->\n",[28,131059,131060,131062,131064,131066,131068,131071],{"class":30,"line":77},[28,131061,1529],{"class":34},[28,131063,52088],{"class":51777},[28,131065,53963],{"class":2453},[28,131067,83],{"class":34},[28,131069,131070],{"class":735},"\"example\"",[28,131072,51784],{"class":34},[28,131074,131075],{"class":30,"line":114},[28,131076,131077],{"class":34},"  示例内容\n",[28,131079,131080,131082,131084],{"class":30,"line":128},[28,131081,52262],{"class":34},[28,131083,52088],{"class":51777},[28,131085,51784],{"class":34},[605,131087,131089],{"id":131088},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[588,131091,131092],{},[591,131093,131094],{},"圆角边框",[14,131096,131097],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[420,131099],{"style":126802,"src":131100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[18,131102,131104],{"className":126946,"code":131103,"language":126948,"meta":23,"style":23},"div {\n  border: 1px solid #ccc;\n}\n",[25,131105,131106,131112,131128],{"__ignoreMap":23},[28,131107,131108,131110],{"class":30,"line":31},[28,131109,52088],{"class":51777},[28,131111,16058],{"class":34},[28,131113,131114,131116,131118,131120,131122,131124,131126],{"class":30,"line":77},[28,131115,71373],{"class":38},[28,131117,51914],{"class":34},[28,131119,39],{"class":38},[28,131121,51969],{"class":42},[28,131123,51998],{"class":38},[28,131125,130338],{"class":38},[28,131127,1781],{"class":34},[28,131129,131130],{"class":30,"line":114},[28,131131,2055],{"class":34},[14,131133,131134],{},"解释:",[1626,131136,131137,131140,131143,131146,131149],{},[591,131138,131139],{},"参数值可以为数值或百分比的形式",[591,131141,131142],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[591,131144,131145],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[591,131147,131148],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[591,131150,131151],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[588,131153,131154],{"start":77},[591,131155,131156],{},"盒子阴影",[18,131158,131160],{"className":126946,"code":131159,"language":126948,"meta":23,"style":23},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[25,131161,131162,131168,131205],{"__ignoreMap":23},[28,131163,131164,131166],{"class":30,"line":31},[28,131165,52088],{"class":51777},[28,131167,16058],{"class":34},[28,131169,131170,131173,131175,131177,131179,131181,131183,131185,131187,131189,131191,131193,131195,131197,131199,131201,131203],{"class":30,"line":77},[28,131171,131172],{"class":38},"  box-shadow",[28,131174,51914],{"class":34},[28,131176,822],{"class":38},[28,131178,15241],{"class":38},[28,131180,51969],{"class":42},[28,131182,2528],{"class":38},[28,131184,51969],{"class":42},[28,131186,79244],{"class":38},[28,131188,367],{"class":34},[28,131190,822],{"class":38},[28,131192,12921],{"class":34},[28,131194,822],{"class":38},[28,131196,12921],{"class":34},[28,131198,822],{"class":38},[28,131200,12921],{"class":34},[28,131202,86687],{"class":38},[28,131204,3209],{"class":34},[28,131206,131207],{"class":30,"line":114},[28,131208,2055],{"class":34},[768,131210,131211,131219],{},[771,131212,131213],{},[774,131214,131215,131217],{},[777,131216,783],{"align":24222},[777,131218,27975],{"align":24222},[815,131220,131221,131229,131237,131245,131253,131261],{},[774,131222,131223,131226],{},[820,131224,131225],{"align":24222},"h-shadow",[820,131227,131228],{"align":24222},"必需,水平阴影的位置,允许负值",[774,131230,131231,131234],{},[820,131232,131233],{"align":24222},"v-shadow",[820,131235,131236],{"align":24222},"必需,垂直阴影的位置,允许负值",[774,131238,131239,131242],{},[820,131240,131241],{"align":24222},"blur",[820,131243,131244],{"align":24222},"可选,模糊距离,就是影子的虚实",[774,131246,131247,131250],{},[820,131248,131249],{"align":24222},"spread",[820,131251,131252],{"align":24222},"可选,阴影尺寸",[774,131254,131255,131258],{},[820,131256,131257],{"align":24222},"color",[820,131259,131260],{"align":24222},"可选,阴影的颜色",[774,131262,131263,131266],{},[820,131264,131265],{"align":24222},"inset",[820,131267,131268],{"align":24222},"可选,将外部阴影(outset)改为内部阴影",[588,131270,131271],{"start":114},[591,131272,131273],{},"文字阴影",[18,131275,131277],{"className":126946,"code":131276,"language":126948,"meta":23,"style":23},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[25,131278,131279,131285,131324],{"__ignoreMap":23},[28,131280,131281,131283],{"class":30,"line":31},[28,131282,14],{"class":51777},[28,131284,16058],{"class":34},[28,131286,131287,131290,131292,131294,131296,131298,131300,131302,131304,131306,131308,131310,131312,131314,131316,131318,131320,131322],{"class":30,"line":77},[28,131288,131289],{"class":38},"  text-shadow",[28,131291,51914],{"class":34},[28,131293,39],{"class":38},[28,131295,51969],{"class":42},[28,131297,25605],{"class":38},[28,131299,51969],{"class":42},[28,131301,15241],{"class":38},[28,131303,51969],{"class":42},[28,131305,79244],{"class":38},[28,131307,367],{"class":34},[28,131309,822],{"class":38},[28,131311,12921],{"class":34},[28,131313,822],{"class":38},[28,131315,12921],{"class":34},[28,131317,822],{"class":38},[28,131319,12921],{"class":34},[28,131321,456],{"class":38},[28,131323,3209],{"class":34},[28,131325,131326],{"class":30,"line":114},[28,131327,2055],{"class":34},[768,131329,131330,131338],{},[771,131331,131332],{},[774,131333,131334,131336],{},[777,131335,783],{"align":24222},[777,131337,27975],{"align":24222},[815,131339,131340,131346,131353,131360],{},[774,131341,131342,131344],{},[820,131343,131225],{"align":24222},[820,131345,131228],{"align":24222},[774,131347,131348,131350],{},[820,131349,131233],{"align":24222},[820,131351,131352],{"align":24222},"必需,垂直阴影位置,允许负值",[774,131354,131355,131357],{},[820,131356,131241],{"align":24222},[820,131358,131359],{"align":24222},"可选,模糊的距离",[774,131361,131362,131364],{},[820,131363,131257],{"align":24222},[820,131365,131260],{"align":24222},[60,131367,131369],{"id":131368},"_92-浮动","9.2 浮动",[605,131371,131373],{"id":131372},"_921-浮动介绍","9.2.1 浮动介绍",[14,131375,131376],{},"在16.2中详细介绍",[605,131378,131380],{"id":131379},"_922-清除浮动","9.2.2 清除浮动",[588,131382,131383,131386],{},[591,131384,131385],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[591,131387,131388],{},"清除浮动的本质",[14,131390,131391],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131393,9513],{},[1626,131395,131396,131399,131402],{},[591,131397,131398],{},"如果父盒子本身有高度，则不需要清除浮动",[591,131400,131401],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[591,131403,131404],{},"父级有了高度，就不会影响下面的标准流了",[588,131406,131407],{"start":114},[591,131408,131409],{},"清除浮动样式",[18,131411,131413],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[25,131414,131415,131422,131433,131437,131444,131454],{"__ignoreMap":23},[28,131416,131417,131420],{"class":30,"line":31},[28,131418,131419],{"class":2453},".left",[28,131421,16058],{"class":34},[28,131423,131424,131427,131429,131431],{"class":30,"line":77},[28,131425,131426],{"class":38},"  float",[28,131428,51914],{"class":34},[28,131430,24222],{"class":38},[28,131432,1781],{"class":34},[28,131434,131435],{"class":30,"line":114},[28,131436,2055],{"class":34},[28,131438,131439,131442],{"class":30,"line":128},[28,131440,131441],{"class":2453},".right",[28,131443,16058],{"class":34},[28,131445,131446,131448,131450,131452],{"class":30,"line":393},[28,131447,131426],{"class":38},[28,131449,51914],{"class":34},[28,131451,72999],{"class":38},[28,131453,1781],{"class":34},[28,131455,131456],{"class":30,"line":409},[28,131457,2055],{"class":34},[768,131459,131460,131468],{},[771,131461,131462],{},[774,131463,131464,131466],{},[777,131465,127410],{"align":24222},[777,131467,27975],{"align":24222},[815,131469,131470,131477,131484],{},[774,131471,131472,131474],{},[820,131473,24222],{"align":24222},[820,131475,131476],{"align":24222},"不允许左侧有浮动元素（清除左侧浮动的影响）",[774,131478,131479,131481],{},[820,131480,72999],{"align":24222},[820,131482,131483],{"align":24222},"不允许右侧有浮动元素（清除右侧浮动的影响）",[774,131485,131486,131489],{},[820,131487,131488],{"align":24222},"both",[820,131490,131491],{"align":24222},"同时清除左右侧浮动的影响",[14,131493,131494],{},"法一",[14,131496,131497],{},"额外标签法也称为隔墙法",[14,131499,131500],{},"使用方式：",[14,131502,131503],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[18,131505,131506],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,131507,131508,131514,131524,131528,131534,131544],{"__ignoreMap":23},[28,131509,131510,131512],{"class":30,"line":31},[28,131511,131419],{"class":2453},[28,131513,16058],{"class":34},[28,131515,131516,131518,131520,131522],{"class":30,"line":77},[28,131517,131426],{"class":38},[28,131519,51914],{"class":34},[28,131521,24222],{"class":38},[28,131523,1781],{"class":34},[28,131525,131526],{"class":30,"line":114},[28,131527,2055],{"class":34},[28,131529,131530,131532],{"class":30,"line":128},[28,131531,131441],{"class":2453},[28,131533,16058],{"class":34},[28,131535,131536,131538,131540,131542],{"class":30,"line":393},[28,131537,131426],{"class":38},[28,131539,51914],{"class":34},[28,131541,72999],{"class":38},[28,131543,1781],{"class":34},[28,131545,131546],{"class":30,"line":409},[28,131547,2055],{"class":34},[14,131549,131550],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131552,131553],{},"优点： 通俗易懂，书写方便",[14,131555,131556],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131558,131559],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131561,131562],{},"法二",[14,131564,131565],{},"父级添加overflow属性",[18,131567,131568],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,131569,131570,131576,131586,131590,131596,131606],{"__ignoreMap":23},[28,131571,131572,131574],{"class":30,"line":31},[28,131573,131419],{"class":2453},[28,131575,16058],{"class":34},[28,131577,131578,131580,131582,131584],{"class":30,"line":77},[28,131579,131426],{"class":38},[28,131581,51914],{"class":34},[28,131583,24222],{"class":38},[28,131585,1781],{"class":34},[28,131587,131588],{"class":30,"line":114},[28,131589,2055],{"class":34},[28,131591,131592,131594],{"class":30,"line":128},[28,131593,131441],{"class":2453},[28,131595,16058],{"class":34},[28,131597,131598,131600,131602,131604],{"class":30,"line":393},[28,131599,131426],{"class":38},[28,131601,51914],{"class":34},[28,131603,72999],{"class":38},[28,131605,1781],{"class":34},[28,131607,131608],{"class":30,"line":409},[28,131609,2055],{"class":34},[14,131611,131612],{},"overflow: hidden;",[14,131614,131615],{},"优点：代码简洁",[14,131617,131618],{},"缺点：无法显示溢出的部分",[14,131620,131621],{},"注意：是给父元素添加代码",[14,131623,131624],{},"法三",[14,131626,131627],{},"父级添加after伪元素",[14,131629,131630,131633],{},[131631,131632],"after",{}," 方式是额外标签法的升级版",[14,131635,131636],{},"使用的时候复制就可以",[18,131638,131639],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,131640,131641,131647,131657,131661,131667,131677],{"__ignoreMap":23},[28,131642,131643,131645],{"class":30,"line":31},[28,131644,131419],{"class":2453},[28,131646,16058],{"class":34},[28,131648,131649,131651,131653,131655],{"class":30,"line":77},[28,131650,131426],{"class":38},[28,131652,51914],{"class":34},[28,131654,24222],{"class":38},[28,131656,1781],{"class":34},[28,131658,131659],{"class":30,"line":114},[28,131660,2055],{"class":34},[28,131662,131663,131665],{"class":30,"line":128},[28,131664,131441],{"class":2453},[28,131666,16058],{"class":34},[28,131668,131669,131671,131673,131675],{"class":30,"line":393},[28,131670,131426],{"class":38},[28,131672,51914],{"class":34},[28,131674,72999],{"class":38},[28,131676,1781],{"class":34},[28,131678,131679],{"class":30,"line":409},[28,131680,2055],{"class":34},[14,131682,131683],{},"优点：没有增加标签，结构更简单",[14,131685,131686],{},"缺点：照顾低版本浏览器",[14,131688,131689],{},"代表网站： 百度、淘宝网、网易等",[14,131691,131692],{},"法四",[14,131694,131695],{},"父级添加双伪元素",[18,131697,131698],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,131699,131700,131706,131716,131720,131726,131736],{"__ignoreMap":23},[28,131701,131702,131704],{"class":30,"line":31},[28,131703,131419],{"class":2453},[28,131705,16058],{"class":34},[28,131707,131708,131710,131712,131714],{"class":30,"line":77},[28,131709,131426],{"class":38},[28,131711,51914],{"class":34},[28,131713,24222],{"class":38},[28,131715,1781],{"class":34},[28,131717,131718],{"class":30,"line":114},[28,131719,2055],{"class":34},[28,131721,131722,131724],{"class":30,"line":128},[28,131723,131441],{"class":2453},[28,131725,16058],{"class":34},[28,131727,131728,131730,131732,131734],{"class":30,"line":393},[28,131729,131426],{"class":38},[28,131731,51914],{"class":34},[28,131733,72999],{"class":38},[28,131735,1781],{"class":34},[28,131737,131738],{"class":30,"line":409},[28,131739,2055],{"class":34},[14,131741,131742],{},"优点：代码更简洁",[14,131744,131686],{},[14,131746,131747],{},"代表网站：小米、腾讯等",[60,131749,131751],{"id":131750},"_93-ps切图","9.3 PS切图",[605,131753,131755],{"id":131754},"_931-常见图片格式","9.3.1 常见图片格式",[768,131757,131758,131768],{},[771,131759,131760],{},[774,131761,131762,131765],{},[777,131763,131764],{"align":24222},"jpg图像格式",[777,131766,131767],{"align":24222},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[815,131769,131770,131778,131786],{},[774,131771,131772,131775],{},[820,131773,131774],{"align":24222},"gif图像格式",[820,131776,131777],{"align":24222},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[774,131779,131780,131783],{},[820,131781,131782],{"align":24222},"png图像格式",[820,131784,131785],{"align":24222},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[774,131787,131788,131791],{},[820,131789,131790],{"align":24222},"PSD图像格式",[820,131792,131793],{"align":24222},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[605,131795,131797],{"id":131796},"_932-图层切图","9.3.2 图层切图",[14,131799,131800],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131802,131803],{},"按住shift选中两个图层->图层菜单->合并图层",[605,131805,131807],{"id":131806},"_933-切片切图","9.3.3 切片切图",[1626,131809,131810,131813],{},[591,131811,131812],{},"利用切片工具手动划出",[591,131814,131815],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[605,131817,131819],{"id":131818},"_934-切图步骤","9.3.4 切图步骤",[14,131821,131822],{},"用切片工具选中：",[420,131824],{"style":126802,"src":131825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131827,131828],{},"文件 -> 导出",[420,131830],{"style":126802,"src":131831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[547,131833,131834],{},"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":77,"depth":77,"links":131836},[131837,131846,131850],{"id":130273,"depth":77,"text":130274,"children":131838},[131839,131840,131841,131842,131843,131844,131845],{"id":130298,"depth":114,"text":130299},{"id":130589,"depth":114,"text":130590},{"id":130718,"depth":114,"text":130719},{"id":130918,"depth":114,"text":130919},{"id":130960,"depth":114,"text":130961},{"id":130998,"depth":114,"text":130999},{"id":131088,"depth":114,"text":131089},{"id":131368,"depth":77,"text":131369,"children":131847},[131848,131849],{"id":131372,"depth":114,"text":131373},{"id":131379,"depth":114,"text":131380},{"id":131750,"depth":77,"text":131751,"children":131851},[131852,131853,131854,131855],{"id":131754,"depth":114,"text":131755},{"id":131796,"depth":114,"text":131797},{"id":131806,"depth":114,"text":131807},{"id":131818,"depth":114,"text":131819},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130265,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131862,"title":131863,"body":131864,"description":559,"extension":560,"meta":132505,"navigation":562,"path":132506,"seo":132507,"stem":132508,"__hash__":132509},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131865,"toc":132493},[131866,131869,131873,131899,131933,131937,131941,131944,131986,131993,132003,132011,132013,132016,132019,132022,132029,132043,132047,132050,132079,132083,132086,132100,132104,132107,132135,132139,132142,132168,132172,132177,132210,132215,132243,132247,132264,132310,132315,132359,132376,132483,132491],[10,131867,131863],{"id":131868},"_10-css规范与学成在线案例",[60,131870,131872],{"id":131871},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[588,131874,131875,131881,131887,131893],{},[591,131876,131877,131880],{},[780,131878,131879],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[591,131882,131883,131886],{},[780,131884,131885],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[591,131888,131889,131892],{},[780,131890,131891],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[591,131894,131895,131898],{},[780,131896,131897],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[18,131900,131901],{"className":126946,"code":130310,"language":126948,"meta":23,"style":23},[25,131902,131903,131907,131913,131929],{"__ignoreMap":23},[28,131904,131905],{"class":30,"line":31},[28,131906,130317],{"class":73},[28,131908,131909,131911],{"class":30,"line":77},[28,131910,52088],{"class":51777},[28,131912,16058],{"class":34},[28,131914,131915,131917,131919,131921,131923,131925,131927],{"class":30,"line":114},[28,131916,71373],{"class":38},[28,131918,51914],{"class":34},[28,131920,39],{"class":38},[28,131922,51969],{"class":42},[28,131924,51998],{"class":38},[28,131926,130338],{"class":38},[28,131928,1781],{"class":34},[28,131930,131931],{"class":30,"line":128},[28,131932,2055],{"class":34},[60,131934,131936],{"id":131935},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[605,131938,131940],{"id":131939},"_1021-header头部制作","10.2.1 header头部制作",[420,131942],{"style":126802,"src":131943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1626,131945,131946,131953,131960,131966,131973,131980],{},[591,131947,131948,131949,131952],{},"1号是版心盒子 ",[780,131950,131951],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[591,131954,131955,131956,131959],{},"版心盒子 里面包含 2号盒子 ",[780,131957,131958],{},"logo"," 图标",[591,131961,131962,131963,131965],{},"版心盒子 里面包含 3号盒子 ",[780,131964,54190],{}," 导航栏",[591,131967,131968,131969,131972],{},"版心盒子 里面包含 4号盒子 ",[780,131970,131971],{},"search"," 搜索框",[591,131974,131975,131976,131979],{},"版心盒子 里面包含 5号盒子 ",[780,131977,131978],{},"user"," 个人信息",[591,131981,131982,131983],{},"注意，要求里面的 ",[780,131984,131985],{},"4个子盒子 必须都浮动",[588,131987,131988],{},[591,131989,131990],{},[780,131991,131992],{},"导航栏注意点:",[14,131994,131995,131996,131999,132000],{},"实际开发中， ",[780,131997,131998],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[780,132001,132002],{},"用 li 包含链接(li+a)的做法",[1626,132004,132005,132008],{},[591,132006,132007],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[591,132009,132010],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132012,9513],{},[14,132014,132015],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132017,132018],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132020,132021],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[588,132023,132024],{"start":77},[591,132025,132026],{},[780,132027,132028],{},"4号盒子search的细节：",[1626,132030,132031,132034,132037],{},[591,132032,132033],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[591,132035,132036],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[591,132038,132039,132042],{},[25,132040,132041],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[605,132044,132046],{"id":132045},"_1022-banner制作","10.2.2 banner制作",[420,132048],{"style":126802,"src":132049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1626,132051,132052,132059,132065,132072],{},[591,132053,132054,132055,132058],{},"1号盒子是通栏的大盒子 ",[780,132056,132057],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[591,132060,132061,132062,132064],{},"2号盒子是版心 ",[780,132063,1415],{}," ， 要水平居中对齐",[591,132066,132067,132068,132071],{},"3号盒子版心内，左对齐 ",[780,132069,132070],{},"subnav"," 侧导航栏",[591,132073,132074,132075,132078],{},"4号盒子版心内，右对齐 ",[780,132076,132077],{},"course"," 课程",[605,132080,132082],{"id":132081},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[420,132084],{"style":126802,"src":132085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1626,132087,132088,132091,132094,132097],{},[591,132089,132090],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[591,132092,132093],{},"1号盒子是标题 H3 左侧浮动",[591,132095,132096],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[591,132098,132099],{},"3号盒子 右浮动 mod 修改",[605,132101,132103],{"id":132102},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[420,132105],{"style":126802,"src":132106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1626,132108,132109,132115,132122,132129,132132],{},[591,132110,132111,132112,132114],{},"1号盒子为最大的盒子 ",[780,132113,54191],{}," 版心水平居中对齐",[591,132116,132117,132118,132121],{},"2号盒子为上面部分 ",[780,132119,132120],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[591,132123,132124,132125,132128],{},"3号盒子为底下部分 ",[780,132126,132127],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[591,132130,132131],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[591,132133,132134],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[605,132136,132138],{"id":132137},"_1025-底部模块制作","10.2.5 底部模块制作",[420,132140],{"style":126802,"src":132141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1626,132143,132144,132151,132154,132161],{},[591,132145,132146,132147,132150],{},"1号盒子通栏大盒子 底部 ",[780,132148,132149],{},"footer"," 给高度 底色是白色",[591,132152,132153],{},"2号盒子版心水平居中",[591,132155,132156,132157,132160],{},"3号盒子版权 ",[780,132158,132159],{},"copyright"," 左对齐",[591,132162,132163,132164,132167],{},"4号盒子 链接组 ",[780,132165,132166],{},"links"," 右对齐",[605,132169,132171],{"id":132170},"_1026-代码模块","10.2.6 代码模块",[588,132173,132174],{},[591,132175,132176],{},"html部分",[18,132178,132180],{"className":127693,"code":132179,"language":127695,"meta":23,"style":23},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[25,132181,132182],{"__ignoreMap":23},[28,132183,132184,132186,132188,132190,132192,132195,132198,132200,132203,132206,132208],{"class":30,"line":31},[28,132185,1529],{"class":34},[28,132187,80],{"class":51777},[28,132189,61534],{"class":2453},[28,132191,83],{"class":34},[28,132193,132194],{"class":735},"\"https:\u002F\u002Fexample.com\"",[28,132196,132197],{"class":2453}," target",[28,132199,83],{"class":34},[28,132201,132202],{"class":735},"\"_blank\"",[28,132204,132205],{"class":34},">链接文字\u003C\u002F",[28,132207,80],{"class":51777},[28,132209,51784],{"class":34},[588,132211,132212],{"start":77},[591,132213,132214],{},"css部分",[18,132216,132217],{"className":127693,"code":132179,"language":127695,"meta":23,"style":23},[25,132218,132219],{"__ignoreMap":23},[28,132220,132221,132223,132225,132227,132229,132231,132233,132235,132237,132239,132241],{"class":30,"line":31},[28,132222,1529],{"class":34},[28,132224,80],{"class":51777},[28,132226,61534],{"class":2453},[28,132228,83],{"class":34},[28,132230,132194],{"class":735},[28,132232,132197],{"class":2453},[28,132234,83],{"class":34},[28,132236,132202],{"class":735},[28,132238,132205],{"class":34},[28,132240,80],{"class":51777},[28,132242,51784],{"class":34},[605,132244,132246],{"id":132245},"_1027-收获","10.2.7 收获",[588,132248,132249,132252,132255,132258,132261],{},[591,132250,132251],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[591,132253,132254],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[591,132256,132257],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[591,132259,132260],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[591,132262,132263],{},"遗忘代码",[18,132265,132267],{"className":126946,"code":132266,"language":126948,"meta":23,"style":23},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[25,132268,132269,132291,132296,132306],{"__ignoreMap":23},[28,132270,132271,132273,132275,132277,132279,132281,132283,132285,132287,132289],{"class":30,"line":31},[28,132272,52088],{"class":51777},[28,132274,12921],{"class":34},[28,132276,14],{"class":51777},[28,132278,12921],{"class":34},[28,132280,10],{"class":51777},[28,132282,12921],{"class":34},[28,132284,1626],{"class":51777},[28,132286,12921],{"class":34},[28,132288,591],{"class":51777},[28,132290,16058],{"class":34},[28,132292,132293],{"class":30,"line":77},[28,132294,132295],{"class":73},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[28,132297,132298,132300,132302,132304],{"class":30,"line":114},[28,132299,128562],{"class":38},[28,132301,51914],{"class":34},[28,132303,61346],{"class":38},[28,132305,1781],{"class":34},[28,132307,132308],{"class":30,"line":128},[28,132309,2055],{"class":34},[588,132311,132312],{"start":409},[591,132313,132314],{},"html引css的程序",[18,132316,132317],{"className":126946,"code":132266,"language":126948,"meta":23,"style":23},[25,132318,132319,132341,132345,132355],{"__ignoreMap":23},[28,132320,132321,132323,132325,132327,132329,132331,132333,132335,132337,132339],{"class":30,"line":31},[28,132322,52088],{"class":51777},[28,132324,12921],{"class":34},[28,132326,14],{"class":51777},[28,132328,12921],{"class":34},[28,132330,10],{"class":51777},[28,132332,12921],{"class":34},[28,132334,1626],{"class":51777},[28,132336,12921],{"class":34},[28,132338,591],{"class":51777},[28,132340,16058],{"class":34},[28,132342,132343],{"class":30,"line":77},[28,132344,132295],{"class":73},[28,132346,132347,132349,132351,132353],{"class":30,"line":114},[28,132348,128562],{"class":38},[28,132350,51914],{"class":34},[28,132352,61346],{"class":38},[28,132354,1781],{"class":34},[28,132356,132357],{"class":30,"line":128},[28,132358,2055],{"class":34},[588,132360,132361,132364,132367,132370,132373],{"start":1711},[591,132362,132363],{},"浮动的盒子不会有外边距合并问题",[591,132365,132366],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[591,132368,132369],{},"ctrl+g快速定位行；shift+alt多个光标",[591,132371,132372],{},"学习上方各个模块的选择器起名方法，以后就这样用",[591,132374,132375],{},"在写选择器时尽量写全一些，例如",[18,132377,132379],{"className":126946,"code":132378,"language":126948,"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,132380,132381,132386,132402,132407,132422,132427,132442,132447,132462,132467],{"__ignoreMap":23},[28,132382,132383],{"class":30,"line":31},[28,132384,132385],{"class":73},"\u002F* 静态定位（默认） *\u002F\n",[28,132387,132388,132391,132393,132395,132397,132400],{"class":30,"line":77},[28,132389,132390],{"class":2453},".static",[28,132392,80284],{"class":34},[28,132394,129306],{"class":38},[28,132396,51914],{"class":34},[28,132398,132399],{"class":38},"static",[28,132401,129876],{"class":34},[28,132403,132404],{"class":30,"line":114},[28,132405,132406],{"class":73},"\u002F* 相对定位 *\u002F\n",[28,132408,132409,132412,132414,132416,132418,132420],{"class":30,"line":128},[28,132410,132411],{"class":2453},".relative",[28,132413,80284],{"class":34},[28,132415,129306],{"class":38},[28,132417,51914],{"class":34},[28,132419,55241],{"class":38},[28,132421,129876],{"class":34},[28,132423,132424],{"class":30,"line":393},[28,132425,132426],{"class":73},"\u002F* 绝对定位 *\u002F\n",[28,132428,132429,132432,132434,132436,132438,132440],{"class":30,"line":409},[28,132430,132431],{"class":2453},".absolute",[28,132433,80284],{"class":34},[28,132435,129306],{"class":38},[28,132437,51914],{"class":34},[28,132439,55308],{"class":38},[28,132441,129876],{"class":34},[28,132443,132444],{"class":30,"line":1711},[28,132445,132446],{"class":73},"\u002F* 固定定位 *\u002F\n",[28,132448,132449,132452,132454,132456,132458,132460],{"class":30,"line":1802},[28,132450,132451],{"class":2453},".fixed",[28,132453,80284],{"class":34},[28,132455,129306],{"class":38},[28,132457,51914],{"class":34},[28,132459,86710],{"class":38},[28,132461,129876],{"class":34},[28,132463,132464],{"class":30,"line":1808},[28,132465,132466],{"class":73},"\u002F* 粘性定位 *\u002F\n",[28,132468,132469,132472,132474,132476,132478,132481],{"class":30,"line":1820},[28,132470,132471],{"class":2453},".sticky",[28,132473,80284],{"class":34},[28,132475,129306],{"class":38},[28,132477,51914],{"class":34},[28,132479,132480],{"class":38},"sticky",[28,132482,129876],{"class":34},[588,132484,132485,132488],{"start":2107},[591,132486,132487],{},"一定要用好注释",[591,132489,132490],{},"浮动的盒子不会有外边距合并的问题",[547,132492,131834],{},{"title":23,"searchDepth":77,"depth":77,"links":132494},[132495,132496],{"id":131871,"depth":77,"text":131872},{"id":131935,"depth":77,"text":131936,"children":132497},[132498,132499,132500,132501,132502,132503,132504],{"id":131939,"depth":114,"text":131940},{"id":132045,"depth":114,"text":132046},{"id":132081,"depth":114,"text":132082},{"id":132102,"depth":114,"text":132103},{"id":132137,"depth":114,"text":132138},{"id":132170,"depth":114,"text":132171},{"id":132245,"depth":114,"text":132246},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131863,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132511,"title":132512,"body":132513,"description":559,"extension":560,"meta":133999,"navigation":562,"path":134000,"seo":134001,"stem":134002,"__hash__":134003},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132514,"toc":133991},[132515,132518,132522,132526,132537,132541,132558,132602,132635,132638,132655,132658,132661,132705,132709,132713,132716,132719,132723,132726,132737,132800,132841,132844,132859,132913,132921,132924,132935,132989,133015,133018,133031,133085,133117,133171,133194,133248,133251,133254,133261,133315,133336,133390,133393,133396,133481,133489,133546,133569,133573,133576,133594,133598,133617,133671,133709,133713,133716,133719,133741,133745,133753,133756,133761,133772,133775,133779,133793,133837,133840,133844,133847,133852,133878,133883,133960,133963,133967,133970,133973,133976,133979,133982,133985,133988],[10,132516,132512],{"id":132517},"_11-传统布局与定位体系",[60,132519,132521],{"id":132520},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[605,132523,132525],{"id":132524},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1626,132527,132528,132531,132534],{},[591,132529,132530],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[591,132532,132533],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[591,132535,132536],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[605,132538,132540],{"id":132539},"_1112-浮动","11.1.2 浮动",[1626,132542,132543,132546,132549,132552,132555],{},[591,132544,132545],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[591,132547,132548],{},"浮动可以改变元素标签默认的排列方式",[591,132550,132551],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[591,132553,132554],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[591,132556,132557],{},"在使用行内块转换时盒子之间是有空隙的",[18,132559,132560],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,132561,132562,132568,132578,132582,132588,132598],{"__ignoreMap":23},[28,132563,132564,132566],{"class":30,"line":31},[28,132565,131419],{"class":2453},[28,132567,16058],{"class":34},[28,132569,132570,132572,132574,132576],{"class":30,"line":77},[28,132571,131426],{"class":38},[28,132573,51914],{"class":34},[28,132575,24222],{"class":38},[28,132577,1781],{"class":34},[28,132579,132580],{"class":30,"line":114},[28,132581,2055],{"class":34},[28,132583,132584,132586],{"class":30,"line":128},[28,132585,131441],{"class":2453},[28,132587,16058],{"class":34},[28,132589,132590,132592,132594,132596],{"class":30,"line":393},[28,132591,131426],{"class":38},[28,132593,51914],{"class":34},[28,132595,72999],{"class":38},[28,132597,1781],{"class":34},[28,132599,132600],{"class":30,"line":409},[28,132601,2055],{"class":34},[768,132603,132604,132612],{},[771,132605,132606],{},[774,132607,132608,132610],{},[777,132609,127410],{"align":24222},[777,132611,27975],{"align":24222},[815,132613,132614,132621,132628],{},[774,132615,132616,132618],{},[820,132617,55214],{"align":24222},[820,132619,132620],{"align":24222},"元素不浮动（默认值）",[774,132622,132623,132625],{},[820,132624,24222],{"align":24222},[820,132626,132627],{"align":24222},"元素向左浮动",[774,132629,132630,132632],{},[820,132631,72999],{"align":24222},[820,132633,132634],{"align":24222},"元素向右浮动",[14,132636,132637],{},"浮动重点：",[1626,132639,132640,132643,132646,132649,132652],{},[591,132641,132642],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[591,132644,132645],{},"浮动的元素会一行内显示并且元素顶部对齐",[591,132647,132648],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[591,132650,132651],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[591,132653,132654],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132656,132657],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132659,132660],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[18,132662,132663],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,132664,132665,132671,132681,132685,132691,132701],{"__ignoreMap":23},[28,132666,132667,132669],{"class":30,"line":31},[28,132668,131419],{"class":2453},[28,132670,16058],{"class":34},[28,132672,132673,132675,132677,132679],{"class":30,"line":77},[28,132674,131426],{"class":38},[28,132676,51914],{"class":34},[28,132678,24222],{"class":38},[28,132680,1781],{"class":34},[28,132682,132683],{"class":30,"line":114},[28,132684,2055],{"class":34},[28,132686,132687,132689],{"class":30,"line":128},[28,132688,131441],{"class":2453},[28,132690,16058],{"class":34},[28,132692,132693,132695,132697,132699],{"class":30,"line":393},[28,132694,131426],{"class":38},[28,132696,51914],{"class":34},[28,132698,72999],{"class":38},[28,132700,1781],{"class":34},[28,132702,132703],{"class":30,"line":409},[28,132704,2055],{"class":34},[605,132706,132708],{"id":132707},"_1113-定位","11.1.3 定位",[22484,132710,132712],{"id":132711},"_11131-使用场景","11.1.3.1 使用场景",[14,132714,132715],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132717,132718],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22484,132720,132722],{"id":132721},"_11132-定位组成","11.1.3.2 定位组成",[14,132724,132725],{},"定位 = 定位模式 + 边偏移",[588,132727,132728],{},[591,132729,132730,132733,132734],{},[780,132731,132732],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[780,132735,132736],{},"定位模式",[18,132738,132740],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[25,132741,132742,132748,132762,132779,132796],{"__ignoreMap":23},[28,132743,132744,132746],{"class":30,"line":31},[28,132745,130794],{"class":2453},[28,132747,16058],{"class":34},[28,132749,132750,132753,132755,132757,132759],{"class":30,"line":77},[28,132751,132752],{"class":38},"  position",[28,132754,51914],{"class":34},[28,132756,55241],{"class":38},[28,132758,130809],{"class":34},[28,132760,132761],{"class":73},"\u002F* 定位模式 *\u002F\n",[28,132763,132764,132767,132769,132771,132773,132776],{"class":30,"line":114},[28,132765,132766],{"class":38},"  top",[28,132768,51914],{"class":34},[28,132770,225],{"class":38},[28,132772,51969],{"class":42},[28,132774,132775],{"class":34},";           ",[28,132777,132778],{"class":73},"\u002F* 边偏移：上 *\u002F\n",[28,132780,132781,132784,132786,132788,132790,132793],{"class":30,"line":128},[28,132782,132783],{"class":38},"  left",[28,132785,51914],{"class":34},[28,132787,1320],{"class":38},[28,132789,51969],{"class":42},[28,132791,132792],{"class":34},";          ",[28,132794,132795],{"class":73},"\u002F* 边偏移：左 *\u002F\n",[28,132797,132798],{"class":30,"line":393},[28,132799,2055],{"class":34},[768,132801,132802,132811],{},[771,132803,132804],{},[774,132805,132806,132808],{},[777,132807,783],{"align":24222},[777,132809,132810],{"align":24222},"语义",[815,132812,132813,132820,132827,132834],{},[774,132814,132815,132817],{},[820,132816,132399],{"align":24222},[820,132818,132819],{"align":24222},"静态定位",[774,132821,132822,132824],{},[820,132823,55241],{"align":24222},[820,132825,132826],{"align":24222},"相对定位",[774,132828,132829,132831],{},[820,132830,55308],{"align":24222},[820,132832,132833],{"align":24222},"绝对定位",[774,132835,132836,132838],{},[820,132837,86710],{"align":24222},[820,132839,132840],{"align":24222},"固定定位",[14,132842,132843],{},"（1）静态定位：",[1626,132845,132846,132857],{},[591,132847,132848,132849,132852,132853,132856],{},"静态定位是元素的 ",[780,132850,132851],{},"默认定位方式"," ， ",[780,132854,132855],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[591,132858,5669],{},[18,132860,132861],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,132862,132863,132869,132881,132895,132909],{"__ignoreMap":23},[28,132864,132865,132867],{"class":30,"line":31},[28,132866,130794],{"class":2453},[28,132868,16058],{"class":34},[28,132870,132871,132873,132875,132877,132879],{"class":30,"line":77},[28,132872,132752],{"class":38},[28,132874,51914],{"class":34},[28,132876,55241],{"class":38},[28,132878,130809],{"class":34},[28,132880,132761],{"class":73},[28,132882,132883,132885,132887,132889,132891,132893],{"class":30,"line":114},[28,132884,132766],{"class":38},[28,132886,51914],{"class":34},[28,132888,225],{"class":38},[28,132890,51969],{"class":42},[28,132892,132775],{"class":34},[28,132894,132778],{"class":73},[28,132896,132897,132899,132901,132903,132905,132907],{"class":30,"line":128},[28,132898,132783],{"class":38},[28,132900,51914],{"class":34},[28,132902,1320],{"class":38},[28,132904,51969],{"class":42},[28,132906,132792],{"class":34},[28,132908,132795],{"class":73},[28,132910,132911],{"class":30,"line":393},[28,132912,2055],{"class":34},[1626,132914,132915,132918],{},[591,132916,132917],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[591,132919,132920],{},"静态定位在布局时我们几乎不用的",[14,132922,132923],{},"（2）相对定位",[1626,132925,132926,132933],{},[591,132927,132928,132929,132932],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[780,132930,132931],{},"原来的位置"," 来说的（自恋型）",[591,132934,5669],{},[18,132936,132937],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,132938,132939,132945,132957,132971,132985],{"__ignoreMap":23},[28,132940,132941,132943],{"class":30,"line":31},[28,132942,130794],{"class":2453},[28,132944,16058],{"class":34},[28,132946,132947,132949,132951,132953,132955],{"class":30,"line":77},[28,132948,132752],{"class":38},[28,132950,51914],{"class":34},[28,132952,55241],{"class":38},[28,132954,130809],{"class":34},[28,132956,132761],{"class":73},[28,132958,132959,132961,132963,132965,132967,132969],{"class":30,"line":114},[28,132960,132766],{"class":38},[28,132962,51914],{"class":34},[28,132964,225],{"class":38},[28,132966,51969],{"class":42},[28,132968,132775],{"class":34},[28,132970,132778],{"class":73},[28,132972,132973,132975,132977,132979,132981,132983],{"class":30,"line":128},[28,132974,132783],{"class":38},[28,132976,51914],{"class":34},[28,132978,1320],{"class":38},[28,132980,51969],{"class":42},[28,132982,132792],{"class":34},[28,132984,132795],{"class":73},[28,132986,132987],{"class":30,"line":393},[28,132988,2055],{"class":34},[1626,132990,132991],{},[591,132992,132993,132994,132996,132997,132999,133000,133003,133004,133007,133008,133010,133011,133014],{},"相对定位的特点：",[54193,132995],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54193,132998],{},"  ② ",[780,133001,133002],{},"原来"," 在标准流的 ",[780,133005,133006],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54193,133009],{},"  ③因此， ",[780,133012,133013],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133016,133017],{},"（3）绝对定位",[1626,133019,133020,133029],{},[591,133021,133022,133024,133025,133028],{},[780,133023,132833],{}," 是元素在移动位置的时候，是相对于它 ",[780,133026,133027],{},"祖先元素"," 来说的（拼爹型）",[591,133030,5669],{},[18,133032,133033],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133034,133035,133041,133053,133067,133081],{"__ignoreMap":23},[28,133036,133037,133039],{"class":30,"line":31},[28,133038,130794],{"class":2453},[28,133040,16058],{"class":34},[28,133042,133043,133045,133047,133049,133051],{"class":30,"line":77},[28,133044,132752],{"class":38},[28,133046,51914],{"class":34},[28,133048,55241],{"class":38},[28,133050,130809],{"class":34},[28,133052,132761],{"class":73},[28,133054,133055,133057,133059,133061,133063,133065],{"class":30,"line":114},[28,133056,132766],{"class":38},[28,133058,51914],{"class":34},[28,133060,225],{"class":38},[28,133062,51969],{"class":42},[28,133064,132775],{"class":34},[28,133066,132778],{"class":73},[28,133068,133069,133071,133073,133075,133077,133079],{"class":30,"line":128},[28,133070,132783],{"class":38},[28,133072,51914],{"class":34},[28,133074,1320],{"class":38},[28,133076,51969],{"class":42},[28,133078,132792],{"class":34},[28,133080,132795],{"class":73},[28,133082,133083],{"class":30,"line":393},[28,133084,2055],{"class":34},[1626,133086,133087,133102,133111,133114],{},[591,133088,133089,133090,133092,133093,133095,133096,133098,133099,133101],{},"绝对定位的特点：",[54193,133091],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54193,133094],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54193,133097],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54193,133100],{},"  (4)固定定位",[591,133103,133104,133106,133107,133110],{},[780,133105,132840],{}," 是元素 ",[780,133108,133109],{},"固定于浏览器可视区的位置"," 。（认死理型）",[591,133112,133113],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[591,133115,133116],{},"语法:",[18,133118,133119],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133120,133121,133127,133139,133153,133167],{"__ignoreMap":23},[28,133122,133123,133125],{"class":30,"line":31},[28,133124,130794],{"class":2453},[28,133126,16058],{"class":34},[28,133128,133129,133131,133133,133135,133137],{"class":30,"line":77},[28,133130,132752],{"class":38},[28,133132,51914],{"class":34},[28,133134,55241],{"class":38},[28,133136,130809],{"class":34},[28,133138,132761],{"class":73},[28,133140,133141,133143,133145,133147,133149,133151],{"class":30,"line":114},[28,133142,132766],{"class":38},[28,133144,51914],{"class":34},[28,133146,225],{"class":38},[28,133148,51969],{"class":42},[28,133150,132775],{"class":34},[28,133152,132778],{"class":73},[28,133154,133155,133157,133159,133161,133163,133165],{"class":30,"line":128},[28,133156,132783],{"class":38},[28,133158,51914],{"class":34},[28,133160,1320],{"class":38},[28,133162,51969],{"class":42},[28,133164,132792],{"class":34},[28,133166,132795],{"class":73},[28,133168,133169],{"class":30,"line":393},[28,133170,2055],{"class":34},[1626,133172,133173,133182],{},[591,133174,133175,133176,133178,133179,133181],{},"特点:",[54193,133177],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54193,133180],{},"  ②固定定位不再占有原先的位置,完全脱标",[591,133183,133184,133185,133187,133188,133190,133191,133193],{},"固定在版心位置的方法:",[54193,133186],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54193,133189],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54193,133192],{},"  实例：",[18,133195,133196],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133197,133198,133204,133216,133230,133244],{"__ignoreMap":23},[28,133199,133200,133202],{"class":30,"line":31},[28,133201,130794],{"class":2453},[28,133203,16058],{"class":34},[28,133205,133206,133208,133210,133212,133214],{"class":30,"line":77},[28,133207,132752],{"class":38},[28,133209,51914],{"class":34},[28,133211,55241],{"class":38},[28,133213,130809],{"class":34},[28,133215,132761],{"class":73},[28,133217,133218,133220,133222,133224,133226,133228],{"class":30,"line":114},[28,133219,132766],{"class":38},[28,133221,51914],{"class":34},[28,133223,225],{"class":38},[28,133225,51969],{"class":42},[28,133227,132775],{"class":34},[28,133229,132778],{"class":73},[28,133231,133232,133234,133236,133238,133240,133242],{"class":30,"line":128},[28,133233,132783],{"class":38},[28,133235,51914],{"class":34},[28,133237,1320],{"class":38},[28,133239,51969],{"class":42},[28,133241,132792],{"class":34},[28,133243,132795],{"class":73},[28,133245,133246],{"class":30,"line":393},[28,133247,2055],{"class":34},[420,133249],{"style":126802,"src":133250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133252,133253],{},"(5)粘性定位",[1626,133255,133256,133259],{},[591,133257,133258],{},"粘性定位可以被认为是相对定位和固定定位的混合",[591,133260,5669],{},[18,133262,133263],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133264,133265,133271,133283,133297,133311],{"__ignoreMap":23},[28,133266,133267,133269],{"class":30,"line":31},[28,133268,130794],{"class":2453},[28,133270,16058],{"class":34},[28,133272,133273,133275,133277,133279,133281],{"class":30,"line":77},[28,133274,132752],{"class":38},[28,133276,51914],{"class":34},[28,133278,55241],{"class":38},[28,133280,130809],{"class":34},[28,133282,132761],{"class":73},[28,133284,133285,133287,133289,133291,133293,133295],{"class":30,"line":114},[28,133286,132766],{"class":38},[28,133288,51914],{"class":34},[28,133290,225],{"class":38},[28,133292,51969],{"class":42},[28,133294,132775],{"class":34},[28,133296,132778],{"class":73},[28,133298,133299,133301,133303,133305,133307,133309],{"class":30,"line":128},[28,133300,132783],{"class":38},[28,133302,51914],{"class":34},[28,133304,1320],{"class":38},[28,133306,51969],{"class":42},[28,133308,132792],{"class":34},[28,133310,132795],{"class":73},[28,133312,133313],{"class":30,"line":393},[28,133314,2055],{"class":34},[1626,133316,133317],{},[591,133318,133319,133320,133322,133323,133325,133326,133328,133329,133332,133333,133335],{},"粘性定位的特点：",[54193,133321],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54193,133324],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54193,133327],{},"  ③必须添加 top 、left、right、bottom ",[780,133330,133331],{},"其中一个"," 才有效",[54193,133334],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[18,133337,133338],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133339,133340,133346,133358,133372,133386],{"__ignoreMap":23},[28,133341,133342,133344],{"class":30,"line":31},[28,133343,130794],{"class":2453},[28,133345,16058],{"class":34},[28,133347,133348,133350,133352,133354,133356],{"class":30,"line":77},[28,133349,132752],{"class":38},[28,133351,51914],{"class":34},[28,133353,55241],{"class":38},[28,133355,130809],{"class":34},[28,133357,132761],{"class":73},[28,133359,133360,133362,133364,133366,133368,133370],{"class":30,"line":114},[28,133361,132766],{"class":38},[28,133363,51914],{"class":34},[28,133365,225],{"class":38},[28,133367,51969],{"class":42},[28,133369,132775],{"class":34},[28,133371,132778],{"class":73},[28,133373,133374,133376,133378,133380,133382,133384],{"class":30,"line":128},[28,133375,132783],{"class":38},[28,133377,51914],{"class":34},[28,133379,1320],{"class":38},[28,133381,51969],{"class":42},[28,133383,132792],{"class":34},[28,133385,132795],{"class":73},[28,133387,133388],{"class":30,"line":393},[28,133389,2055],{"class":34},[420,133391],{"style":126802,"src":133392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133394,133395],{},"(6)总结",[768,133397,133398,133413],{},[771,133399,133400],{},[774,133401,133402,133404,133407,133410],{},[777,133403,132736],{"align":24222},[777,133405,133406],{"align":24222},"是否脱标",[777,133408,133409],{"align":24222},"移动位置",[777,133411,133412],{"align":24222},"是否常用",[815,133414,133415,133428,133442,133456,133469],{},[774,133416,133417,133420,133422,133425],{},[820,133418,133419],{"align":24222},"Static 静态定位",[820,133421,105072],{"align":24222},[820,133423,133424],{"align":24222},"不能使用边偏移",[820,133426,133427],{"align":24222},"很少",[774,133429,133430,133433,133436,133439],{},[820,133431,133432],{"align":24222},"Relative 相对定位",[820,133434,133435],{"align":24222},"否(占有位置)",[820,133437,133438],{"align":24222},"相对于自身位置移动",[820,133440,133441],{"align":24222},"基本单独使用",[774,133443,133444,133447,133450,133453],{},[820,133445,133446],{"align":24222},"Absolute 绝对定位",[820,133448,133449],{"align":24222},"是(不占有位置)",[820,133451,133452],{"align":24222},"带有定位的父级",[820,133454,133455],{"align":24222},"要和定位父级元素搭配使用",[774,133457,133458,133461,133463,133466],{},[820,133459,133460],{"align":24222},"Fixed 固定定位",[820,133462,133449],{"align":24222},[820,133464,133465],{"align":24222},"浏览器可视区",[820,133467,133468],{"align":24222},"单独使用,不需要父级",[774,133470,133471,133474,133476,133478],{},[820,133472,133473],{"align":24222},"Sticky 粘性定位",[820,133475,133435],{"align":24222},[820,133477,133465],{"align":24222},[820,133479,133480],{"align":24222},"当前阶段少",[588,133482,133483],{"start":77},[591,133484,133485,133488],{},[780,133486,133487],{},"边偏移"," 则决定了该元素的最终位置",[768,133490,133491,133502],{},[771,133492,133493],{},[774,133494,133495,133498,133500],{},[777,133496,133497],{"align":24222},"边偏移属性",[777,133499,27978],{"align":24222},[777,133501,27975],{"align":24222},[815,133503,133504,133515,133526,133536],{},[774,133505,133506,133509,133512],{},[820,133507,133508],{"align":24222},"top",[820,133510,133511],{"align":24222},"top: 80px;",[820,133513,133514],{"align":24222},"顶端偏移量，定义元素相对于父元素上边线的距离",[774,133516,133517,133520,133523],{},[820,133518,133519],{"align":24222},"bottom",[820,133521,133522],{"align":24222},"bottom: 80px ;",[820,133524,133525],{"align":24222},"底部偏移量，定义元素相对于其父元素下边线的距离",[774,133527,133528,133530,133533],{},[820,133529,24222],{"align":24222},[820,133531,133532],{"align":24222},"left: 80px ;",[820,133534,133535],{"align":24222},"左侧偏移量，定义元素相对于其父元素左边线的距离",[774,133537,133538,133540,133543],{},[820,133539,72999],{"align":24222},[820,133541,133542],{"align":24222},"right: 80px ;",[820,133544,133545],{"align":24222},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1626,133547,133548],{},[591,133549,9513,133550,133552,133553,133555,133556,133558,133559,133562,133563,133565,133566,133568],{},[54193,133551],{},"  ① ",[780,133554,133487],{}," 需要和 ",[780,133557,132736],{}," 联合使用， ",[780,133560,133561],{},"单独使用无效"," ；",[54193,133564],{},"  ②top和bottom不要同时使用",[54193,133567],{},"  ③left和right不要同时使用",[22484,133570,133572],{"id":133571},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133574,133575],{},"子级是绝对定位的话，父级要用相对定位",[1626,133577,133578,133581,133584,133587],{},[591,133579,133580],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[591,133582,133583],{},"父盒子需要加定位限制子盒子在父盒子内显示",[591,133585,133586],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[591,133588,133589,133590,133593],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[780,133591,133592],{},"子绝父绝"," 也会遇到",[22484,133595,133597],{"id":133596},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1626,133599,133600,133615],{},[591,133601,133602,133603,133606,133607,133610,133611,133614],{},"在使用 ",[780,133604,133605],{},"定位"," 布局时，可能会 ",[780,133608,133609],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[780,133612,133613],{},"z-index"," 来控制盒子的前后次序 (z轴)",[591,133616,5669],{},[18,133618,133619],{"className":126946,"code":132739,"language":126948,"meta":23,"style":23},[25,133620,133621,133627,133639,133653,133667],{"__ignoreMap":23},[28,133622,133623,133625],{"class":30,"line":31},[28,133624,130794],{"class":2453},[28,133626,16058],{"class":34},[28,133628,133629,133631,133633,133635,133637],{"class":30,"line":77},[28,133630,132752],{"class":38},[28,133632,51914],{"class":34},[28,133634,55241],{"class":38},[28,133636,130809],{"class":34},[28,133638,132761],{"class":73},[28,133640,133641,133643,133645,133647,133649,133651],{"class":30,"line":114},[28,133642,132766],{"class":38},[28,133644,51914],{"class":34},[28,133646,225],{"class":38},[28,133648,51969],{"class":42},[28,133650,132775],{"class":34},[28,133652,132778],{"class":73},[28,133654,133655,133657,133659,133661,133663,133665],{"class":30,"line":128},[28,133656,132783],{"class":38},[28,133658,51914],{"class":34},[28,133660,1320],{"class":38},[28,133662,51969],{"class":42},[28,133664,132792],{"class":34},[28,133666,132795],{"class":73},[28,133668,133669],{"class":30,"line":393},[28,133670,2055],{"class":34},[1626,133672,133673],{},[591,133674,133675,133676,133552,133678,133680,133681,128109,133684,83016,133687,133689,133690,133692,133693,133696,133697,133562,133700,133702,133703,133706,133708],{},"z-index的特性",[54193,133677],{},[780,133679,127410],{}," ： ",[780,133682,133683],{},"正整数",[780,133685,133686],{},"负整数",[780,133688,822],{}," ，默认值是 0，数值越大，盒子越靠上；",[54193,133691],{},"  ②如果 ",[780,133694,133695],{},"属性值相同"," ，则按照书写顺序， ",[780,133698,133699],{},"后来居上",[54193,133701],{},"  ③数字后面 ",[780,133704,133705],{},"不能加单位",[54193,133707],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22484,133710,133712],{"id":133711},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133714,133715],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133717,133718],{},"方法:",[1626,133720,133721,133731],{},[591,133722,133723,133724,133727,133728],{},"left: 50%; 让 ",[780,133725,133726],{},"盒子的左侧"," 移动到 ",[780,133729,133730],{},"父级元素的水平中心位置",[591,133732,133733,133734,133737,133738],{},"margin-left: -100px; 让盒子 ",[780,133735,133736],{},"向左"," 移动 ",[780,133739,133740],{},"自身宽度的一半",[22484,133742,133744],{"id":133743},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[588,133746,133747,133750],{},[591,133748,133749],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[591,133751,133752],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133754,133755],{},"也就是说绝对定位和固定定位和浮动类似",[588,133757,133758],{"start":114},[591,133759,133760],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1626,133762,133763,133766,133769],{},[591,133764,133765],{},"可以用inline-block 转换为行内块",[591,133767,133768],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[591,133770,133771],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133773,133774],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22484,133776,133778],{"id":133777},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[588,133780,133781,133784,133787,133790],{},[591,133782,133783],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[591,133785,133786],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[591,133788,133789],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[591,133791,133792],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[18,133794,133795],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,133796,133797,133803,133813,133817,133823,133833],{"__ignoreMap":23},[28,133798,133799,133801],{"class":30,"line":31},[28,133800,131419],{"class":2453},[28,133802,16058],{"class":34},[28,133804,133805,133807,133809,133811],{"class":30,"line":77},[28,133806,131426],{"class":38},[28,133808,51914],{"class":34},[28,133810,24222],{"class":38},[28,133812,1781],{"class":34},[28,133814,133815],{"class":30,"line":114},[28,133816,2055],{"class":34},[28,133818,133819,133821],{"class":30,"line":128},[28,133820,131441],{"class":2453},[28,133822,16058],{"class":34},[28,133824,133825,133827,133829,133831],{"class":30,"line":393},[28,133826,131426],{"class":38},[28,133828,51914],{"class":34},[28,133830,72999],{"class":38},[28,133832,1781],{"class":34},[28,133834,133835],{"class":30,"line":409},[28,133836,2055],{"class":34},[420,133838],{"style":126802,"src":133839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22484,133841,133843],{"id":133842},"_11138-轮播图","11.1.3.8 轮播图",[420,133845],{"style":126802,"src":133846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[588,133848,133849],{},[591,133850,133851],{},"制作顺序:",[1626,133853,133854,133857,133860,133869],{},[591,133855,133856],{},"大盒子我们类名为： tb-promo 淘宝广告",[591,133858,133859],{},"里面先放一张图片",[591,133861,133862,133863,133865,133866,133868],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54193,133864],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54193,133867],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[591,133870,133871,133872,133874,133875,133877],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54193,133873],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54193,133876],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[588,133879,133880],{"start":77},[591,133881,133882],{},"代码模块",[18,133884,133886],{"className":126946,"code":133885,"language":126948,"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,133887,133888,133893,133900,133910,133920,133930,133934,133939,133946,133956],{"__ignoreMap":23},[28,133889,133890],{"class":30,"line":31},[28,133891,133892],{"class":73},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[28,133894,133895,133898],{"class":30,"line":77},[28,133896,133897],{"class":2453},".son",[28,133899,16058],{"class":34},[28,133901,133902,133904,133906,133908],{"class":30,"line":114},[28,133903,132752],{"class":38},[28,133905,51914],{"class":34},[28,133907,55308],{"class":38},[28,133909,1781],{"class":34},[28,133911,133912,133914,133916,133918],{"class":30,"line":128},[28,133913,132766],{"class":38},[28,133915,51914],{"class":34},[28,133917,822],{"class":38},[28,133919,1781],{"class":34},[28,133921,133922,133924,133926,133928],{"class":30,"line":393},[28,133923,132783],{"class":38},[28,133925,51914],{"class":34},[28,133927,822],{"class":38},[28,133929,1781],{"class":34},[28,133931,133932],{"class":30,"line":409},[28,133933,2055],{"class":34},[28,133935,133936],{"class":30,"line":1711},[28,133937,133938],{"class":73},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[28,133940,133941,133944],{"class":30,"line":1802},[28,133942,133943],{"class":2453},".father",[28,133945,16058],{"class":34},[28,133947,133948,133950,133952,133954],{"class":30,"line":1808},[28,133949,132752],{"class":38},[28,133951,51914],{"class":34},[28,133953,55241],{"class":38},[28,133955,1781],{"class":34},[28,133957,133958],{"class":30,"line":1820},[28,133959,2055],{"class":34},[14,133961,133962],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[605,133964,133966],{"id":133965},"_1114-定位数值的移动","11.1.4 定位数值的移动",[420,133968],{"style":126802,"src":133969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133971,133972],{},"✨ 黄金口诀：",[14,133974,133975],{},"\"TOP正下负上，LEFT正右负左\"",[14,133977,133978],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133980,133981],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133983,133984],{},"✨ 简单记：",[14,133986,133987],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[547,133989,133990],{},"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":77,"depth":77,"links":133992},[133993],{"id":132520,"depth":77,"text":132521,"children":133994},[133995,133996,133997,133998],{"id":132524,"depth":114,"text":132525},{"id":132539,"depth":114,"text":132540},{"id":132707,"depth":114,"text":132708},{"id":133965,"depth":114,"text":133966},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132512,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134005,"title":134006,"body":134007,"description":559,"extension":560,"meta":135430,"navigation":562,"path":135431,"seo":135432,"stem":135433,"__hash__":135434},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134008,"toc":135409},[134009,134012,134016,134024,134028,134033,134041,134053,134057,134062,134070,134081,134085,134090,134131,134139,134143,134146,134149,134152,134246,134249,134343,134346,134440,134443,134446,134481,134484,134487,134517,134520,134523,134526,134529,134532,134535,134538,134608,134611,134615,134619,134660,134664,134670,134673,134676,134680,134683,134686,134689,134770,134773,134776,134780,134784,134787,134790,134793,134796,134799,134805,134814,134818,134837,134841,134851,134854,134857,134860,134863,134866,134869,134872,134875,134884,134888,134897,134900,134905,134958,134963,135129,135132,135135,135140,135143,135146,135149,135152,135157,135305,135308,135311,135316,135319,135324,135358,135361,135364,135368,135371,135378,135381,135384,135387,135390,135393,135396,135399,135403,135406],[10,134010,134006],{"id":134011},"_12-显示隐藏与图形资源",[60,134013,134015],{"id":134014},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1626,134017,134018,134021],{},[591,134019,134020],{},"目的:让一个元素在页面中消失或者显示出来",[591,134022,134023],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[605,134025,134027],{"id":134026},"_1211-display-显示","12.1.1 display 显示",[588,134029,134030],{},[591,134031,134032],{},"display 设置或检索对象是否及如何显示",[1626,134034,134035,134038],{},[591,134036,134037],{},"display: none;隐藏对象",[591,134039,134040],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[588,134042,134043,134050],{"start":77},[591,134044,134045,134046,134049],{},"特点： display 隐藏元素后， ",[780,134047,134048],{},"不再占"," 有原来的位置",[591,134051,134052],{},"在js中使用非常的广泛",[605,134054,134056],{"id":134055},"_1212-visibility可见性","12.1.2 visibility可见性",[588,134058,134059],{},[591,134060,134061],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1626,134063,134064,134067],{},[591,134065,134066],{},"visibility： visible；元素可见",[591,134068,134069],{},"visibility：hidden；元素隐藏",[588,134071,134072,134075,134078],{"start":77},[591,134073,134074],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[591,134076,134077],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[591,134079,134080],{},"隐藏后继续占有原有位置",[605,134082,134084],{"id":134083},"_1213-overflow溢出","12.1.3 overflow溢出",[1626,134086,134087],{},[591,134088,134089],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[768,134091,134092,134100],{},[771,134093,134094],{},[774,134095,134096,134098],{},[777,134097,127410],{"align":24222},[777,134099,27975],{"align":24222},[815,134101,134102,134110,134117,134124],{},[774,134103,134104,134107],{},[820,134105,134106],{"align":24222},"visible",[820,134108,134109],{"align":24222},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[774,134111,134112,134114],{},[820,134113,62191],{"align":24222},[820,134115,134116],{"align":24222},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[774,134118,134119,134121],{},[820,134120,129366],{"align":24222},[820,134122,134123],{"align":24222},"不管超出内容否，总是显示滚动条",[774,134125,134126,134128],{},[820,134127,73140],{"align":24222},[820,134129,134130],{"align":24222},"超出自动显示滚动条，不超出不显示滚动条",[1626,134132,134133,134136],{},[591,134134,134135],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[591,134137,134138],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[605,134140,134142],{"id":134141},"_1214-案例收获","12.1.4 案例收获",[420,134144],{"style":126802,"src":134145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134147,134148],{},"问题：没做出来动态效果，使用hover没实现",[14,134150,134151],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[18,134153,134154],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,134155,134156,134160,134174,134178,134192,134196,134210,134214,134228,134232],{"__ignoreMap":23},[28,134157,134158],{"class":30,"line":31},[28,134159,132385],{"class":73},[28,134161,134162,134164,134166,134168,134170,134172],{"class":30,"line":77},[28,134163,132390],{"class":2453},[28,134165,80284],{"class":34},[28,134167,129306],{"class":38},[28,134169,51914],{"class":34},[28,134171,132399],{"class":38},[28,134173,129876],{"class":34},[28,134175,134176],{"class":30,"line":114},[28,134177,132406],{"class":73},[28,134179,134180,134182,134184,134186,134188,134190],{"class":30,"line":128},[28,134181,132411],{"class":2453},[28,134183,80284],{"class":34},[28,134185,129306],{"class":38},[28,134187,51914],{"class":34},[28,134189,55241],{"class":38},[28,134191,129876],{"class":34},[28,134193,134194],{"class":30,"line":393},[28,134195,132426],{"class":73},[28,134197,134198,134200,134202,134204,134206,134208],{"class":30,"line":409},[28,134199,132431],{"class":2453},[28,134201,80284],{"class":34},[28,134203,129306],{"class":38},[28,134205,51914],{"class":34},[28,134207,55308],{"class":38},[28,134209,129876],{"class":34},[28,134211,134212],{"class":30,"line":1711},[28,134213,132446],{"class":73},[28,134215,134216,134218,134220,134222,134224,134226],{"class":30,"line":1802},[28,134217,132451],{"class":2453},[28,134219,80284],{"class":34},[28,134221,129306],{"class":38},[28,134223,51914],{"class":34},[28,134225,86710],{"class":38},[28,134227,129876],{"class":34},[28,134229,134230],{"class":30,"line":1808},[28,134231,132466],{"class":73},[28,134233,134234,134236,134238,134240,134242,134244],{"class":30,"line":1820},[28,134235,132471],{"class":2453},[28,134237,80284],{"class":34},[28,134239,129306],{"class":38},[28,134241,51914],{"class":34},[28,134243,132480],{"class":38},[28,134245,129876],{"class":34},[14,134247,134248],{},"完整代码：",[18,134250,134251],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,134252,134253,134257,134271,134275,134289,134293,134307,134311,134325,134329],{"__ignoreMap":23},[28,134254,134255],{"class":30,"line":31},[28,134256,132385],{"class":73},[28,134258,134259,134261,134263,134265,134267,134269],{"class":30,"line":77},[28,134260,132390],{"class":2453},[28,134262,80284],{"class":34},[28,134264,129306],{"class":38},[28,134266,51914],{"class":34},[28,134268,132399],{"class":38},[28,134270,129876],{"class":34},[28,134272,134273],{"class":30,"line":114},[28,134274,132406],{"class":73},[28,134276,134277,134279,134281,134283,134285,134287],{"class":30,"line":128},[28,134278,132411],{"class":2453},[28,134280,80284],{"class":34},[28,134282,129306],{"class":38},[28,134284,51914],{"class":34},[28,134286,55241],{"class":38},[28,134288,129876],{"class":34},[28,134290,134291],{"class":30,"line":393},[28,134292,132426],{"class":73},[28,134294,134295,134297,134299,134301,134303,134305],{"class":30,"line":409},[28,134296,132431],{"class":2453},[28,134298,80284],{"class":34},[28,134300,129306],{"class":38},[28,134302,51914],{"class":34},[28,134304,55308],{"class":38},[28,134306,129876],{"class":34},[28,134308,134309],{"class":30,"line":1711},[28,134310,132446],{"class":73},[28,134312,134313,134315,134317,134319,134321,134323],{"class":30,"line":1802},[28,134314,132451],{"class":2453},[28,134316,80284],{"class":34},[28,134318,129306],{"class":38},[28,134320,51914],{"class":34},[28,134322,86710],{"class":38},[28,134324,129876],{"class":34},[28,134326,134327],{"class":30,"line":1808},[28,134328,132466],{"class":73},[28,134330,134331,134333,134335,134337,134339,134341],{"class":30,"line":1820},[28,134332,132471],{"class":2453},[28,134334,80284],{"class":34},[28,134336,129306],{"class":38},[28,134338,51914],{"class":34},[28,134340,132480],{"class":38},[28,134342,129876],{"class":34},[14,134344,134345],{},"分布思路重点详解：",[18,134347,134348],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,134349,134350,134354,134368,134372,134386,134390,134404,134408,134422,134426],{"__ignoreMap":23},[28,134351,134352],{"class":30,"line":31},[28,134353,132385],{"class":73},[28,134355,134356,134358,134360,134362,134364,134366],{"class":30,"line":77},[28,134357,132390],{"class":2453},[28,134359,80284],{"class":34},[28,134361,129306],{"class":38},[28,134363,51914],{"class":34},[28,134365,132399],{"class":38},[28,134367,129876],{"class":34},[28,134369,134370],{"class":30,"line":114},[28,134371,132406],{"class":73},[28,134373,134374,134376,134378,134380,134382,134384],{"class":30,"line":128},[28,134375,132411],{"class":2453},[28,134377,80284],{"class":34},[28,134379,129306],{"class":38},[28,134381,51914],{"class":34},[28,134383,55241],{"class":38},[28,134385,129876],{"class":34},[28,134387,134388],{"class":30,"line":393},[28,134389,132426],{"class":73},[28,134391,134392,134394,134396,134398,134400,134402],{"class":30,"line":409},[28,134393,132431],{"class":2453},[28,134395,80284],{"class":34},[28,134397,129306],{"class":38},[28,134399,51914],{"class":34},[28,134401,55308],{"class":38},[28,134403,129876],{"class":34},[28,134405,134406],{"class":30,"line":1711},[28,134407,132446],{"class":73},[28,134409,134410,134412,134414,134416,134418,134420],{"class":30,"line":1802},[28,134411,132451],{"class":2453},[28,134413,80284],{"class":34},[28,134415,129306],{"class":38},[28,134417,51914],{"class":34},[28,134419,86710],{"class":38},[28,134421,129876],{"class":34},[28,134423,134424],{"class":30,"line":1808},[28,134425,132466],{"class":73},[28,134427,134428,134430,134432,134434,134436,134438],{"class":30,"line":1820},[28,134429,132471],{"class":2453},[28,134431,80284],{"class":34},[28,134433,129306],{"class":38},[28,134435,51914],{"class":34},[28,134437,132480],{"class":38},[28,134439,129876],{"class":34},[420,134441],{"style":126802,"src":134442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134444,134445],{},"图片太大，盒子太小，此时需要修改图片的大小",[18,134447,134449],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[25,134450,134451],{"__ignoreMap":23},[28,134452,134453,134455,134457,134459,134461,134464,134466,134468,134471,134474,134476,134479],{"class":30,"line":31},[28,134454,1529],{"class":34},[28,134456,420],{"class":51777},[28,134458,55716],{"class":2453},[28,134460,83],{"class":34},[28,134462,134463],{"class":735},"\"images\u002Fpic.jpg\"",[28,134465,55724],{"class":2453},[28,134467,83],{"class":34},[28,134469,134470],{"class":735},"\"描述文字\"",[28,134472,134473],{"class":2453}," title",[28,134475,83],{"class":34},[28,134477,134478],{"class":735},"\"悬停提示\"",[28,134480,51784],{"class":34},[420,134482],{"style":126802,"src":134483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134485,134486],{},"制造遮罩层",[18,134488,134489],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,134490,134491],{"__ignoreMap":23},[28,134492,134493,134495,134497,134499,134501,134503,134505,134507,134509,134511,134513,134515],{"class":30,"line":31},[28,134494,1529],{"class":34},[28,134496,420],{"class":51777},[28,134498,55716],{"class":2453},[28,134500,83],{"class":34},[28,134502,134463],{"class":735},[28,134504,55724],{"class":2453},[28,134506,83],{"class":34},[28,134508,134470],{"class":735},[28,134510,134473],{"class":2453},[28,134512,83],{"class":34},[28,134514,134478],{"class":735},[28,134516,51784],{"class":34},[14,134518,134519],{},"此时是这样的为标准流",[420,134521],{"style":126802,"src":134522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134524,134525],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134527,134528],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134530,134531],{},"让他在中间，用center(background-position)",[14,134533,134534],{},"将需要变的尽可能放到一个盒子中",[14,134536,134537],{},"放大盒子上内部盒子发生变化",[18,134539,134541],{"className":126946,"code":134540,"language":126948,"meta":23,"style":23},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[25,134542,134543,134549,134559,134563,134570,134580,134592,134604],{"__ignoreMap":23},[28,134544,134545,134547],{"class":30,"line":31},[28,134546,128013],{"class":2453},[28,134548,16058],{"class":34},[28,134550,134551,134553,134555,134557],{"class":30,"line":77},[28,134552,132752],{"class":38},[28,134554,51914],{"class":34},[28,134556,55241],{"class":38},[28,134558,1781],{"class":34},[28,134560,134561],{"class":30,"line":114},[28,134562,2055],{"class":34},[28,134564,134565,134568],{"class":30,"line":128},[28,134566,134567],{"class":2453},".child",[28,134569,16058],{"class":34},[28,134571,134572,134574,134576,134578],{"class":30,"line":393},[28,134573,132752],{"class":38},[28,134575,51914],{"class":34},[28,134577,55308],{"class":38},[28,134579,1781],{"class":34},[28,134581,134582,134584,134586,134588,134590],{"class":30,"line":409},[28,134583,132766],{"class":38},[28,134585,51914],{"class":34},[28,134587,1276],{"class":38},[28,134589,954],{"class":42},[28,134591,1781],{"class":34},[28,134593,134594,134596,134598,134600,134602],{"class":30,"line":1711},[28,134595,132783],{"class":38},[28,134597,51914],{"class":34},[28,134599,1276],{"class":38},[28,134601,954],{"class":42},[28,134603,1781],{"class":34},[28,134605,134606],{"class":30,"line":1802},[28,134607,2055],{"class":34},[14,134609,134610],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[60,134612,134614],{"id":134613},"_122-精灵图","12.2 精灵图",[605,134616,134618],{"id":134617},"_1221-理解","12.2.1 理解",[588,134620,134621,134639],{},[591,134622,134623,134624,132852,134627,134630,134631,134634,134635,134638],{},"目的： ",[780,134625,134626],{},"为了有效地减少服务器接收和发送请求的次数",[780,134628,134629],{},"提高"," 页面的 ",[780,134632,134633],{},"加载速度"," ，出现了 ",[780,134636,134637],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[591,134640,134641,134642,134644,134645,134647,134648,134650,134651,134653,134654,134656,134657,134659],{},"使用精灵图核心：",[54193,134643],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54193,134646],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54193,134649],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54193,134652],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54193,134655],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54193,134658],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[605,134661,134663],{"id":134662},"_1222-扒图","12.2.2 扒图",[18,134665,134668],{"className":134666,"code":134667,"language":5675},[5673],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[25,134669,134667],{"__ignoreMap":23},[420,134671],{"style":126802,"src":134672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[420,134674],{"style":126802,"src":134675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[605,134677,134679],{"id":134678},"_1223-精灵图的实现","12.2.3 精灵图的实现",[420,134681],{"style":126802,"src":134682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134684,134685],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[420,134687],{"style":126802,"src":134688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[18,134690,134692],{"className":126946,"code":134691,"language":126948,"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,134693,134694,134699,134706,134718,134730,134749,134766],{"__ignoreMap":23},[28,134695,134696],{"class":30,"line":31},[28,134697,134698],{"class":73},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[28,134700,134701,134704],{"class":30,"line":77},[28,134702,134703],{"class":2453},".icon",[28,134705,16058],{"class":34},[28,134707,134708,134710,134712,134714,134716],{"class":30,"line":114},[28,134709,71045],{"class":38},[28,134711,51914],{"class":34},[28,134713,1320],{"class":38},[28,134715,51969],{"class":42},[28,134717,1781],{"class":34},[28,134719,134720,134722,134724,134726,134728],{"class":30,"line":128},[28,134721,71265],{"class":38},[28,134723,51914],{"class":34},[28,134725,1320],{"class":38},[28,134727,51969],{"class":42},[28,134729,1781],{"class":34},[28,134731,134732,134734,134736,134738,134740,134743,134745,134747],{"class":30,"line":393},[28,134733,71088],{"class":38},[28,134735,51914],{"class":34},[28,134737,62203],{"class":38},[28,134739,367],{"class":34},[28,134741,134742],{"class":5704},"sprites.png",[28,134744,14200],{"class":34},[28,134746,62213],{"class":38},[28,134748,1781],{"class":34},[28,134750,134751,134753,134755,134757,134759,134762,134764],{"class":30,"line":409},[28,134752,129206],{"class":38},[28,134754,51914],{"class":34},[28,134756,52240],{"class":38},[28,134758,51969],{"class":42},[28,134760,134761],{"class":38}," -20",[28,134763,51969],{"class":42},[28,134765,1781],{"class":34},[28,134767,134768],{"class":30,"line":1711},[28,134769,2055],{"class":34},[420,134771],{"style":126802,"src":134772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134774,134775],{},"在前端中坐标轴的正方向是右和下",[60,134777,134779],{"id":134778},"_123-字体图标","12.3 字体图标",[605,134781,134783],{"id":134782},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134785,134786],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134788,134789],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134791,134792],{},"1.图片文件还是比较大的。",[14,134794,134795],{},"2.图片本身放大和缩小会失真。",[14,134797,134798],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134800,134801,134802,26227],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[780,134803,134804],{},"字体图标 iconfont",[14,134806,134807,134810,134811,28871],{},[780,134808,134809],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[780,134812,134813],{},"展示的是图标，本质属于字体",[605,134815,134817],{"id":134816},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1626,134819,134820,134825,134828,134831,134834],{},[591,134821,134822,134824],{},[780,134823,26363],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[591,134826,134827],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[591,134829,134830],{},"兼容性：几乎支持所有的浏览器，请放心使用",[591,134832,134833],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[591,134835,134836],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[605,134838,134840],{"id":134839},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1626,134842,134843],{},[591,134844,134845,134846],{},"icomoon字体库：",[80,134847,134850],{"href":134848,"rel":134849},"http:\u002F\u002Ficomoon.io\u002F",[24351],"http:\u002F\u002Ficomoon.io",[14,134852,134853],{},"进去之后点icomoon app",[420,134855],{"style":126802,"src":134856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134858,134859],{},"可以对其编辑：",[420,134861],{"style":126802,"src":134862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134864,134865],{},"生成字体：",[420,134867],{"style":126802,"src":134868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134870,134871],{},"下载：",[420,134873],{"style":126802,"src":134874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1626,134876,134877],{},[591,134878,134879,134880],{},"阿里iconfont字体库： ",[80,134881,134882],{"href":134882,"rel":134883},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24351],[605,134885,134887],{"id":134886},"_1234-字体图标的引入","12.3.4 字体图标的引入",[588,134889,134890],{},[591,134891,134892,134893,134896],{},"把下载包里面的 ",[780,134894,134895],{},"fonts"," 文件夹放入页面根目录下",[420,134898],{"style":126802,"src":134899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[588,134901,134902],{"start":77},[591,134903,134904],{},"字体文件格式",[768,134906,134907,134916],{},[771,134908,134909],{},[774,134910,134911,134914],{},[777,134912,134913],{"align":24222},"格式",[777,134915,24226],{"align":24222},[815,134917,134918,134928,134938,134948],{},[774,134919,134920,134925],{},[820,134921,134922],{"align":24222},[780,134923,134924],{},".ttf",[820,134926,134927],{"align":24222},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[774,134929,134930,134935],{},[820,134931,134932],{"align":24222},[780,134933,134934],{},".woff",[820,134936,134937],{"align":24222},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[774,134939,134940,134945],{},[820,134941,134942],{"align":24222},[780,134943,134944],{},".eot",[820,134946,134947],{"align":24222},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[774,134949,134950,134955],{},[820,134951,134952],{"align":24222},[780,134953,134954],{},"svg",[820,134956,134957],{"align":24222},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[588,134959,134960],{"start":114},[591,134961,134962],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[18,134964,134966],{"className":126946,"code":134965,"language":126948,"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,134967,134968,134973,134980,134992,135008,135033,135054,135074,135094,135098,135104,135114,135125],{"__ignoreMap":23},[28,134969,134970],{"class":30,"line":31},[28,134971,134972],{"class":73},"\u002F* 引入字体图标 *\u002F\n",[28,134974,134975,134978],{"class":30,"line":77},[28,134976,134977],{"class":42},"@font-face",[28,134979,16058],{"class":34},[28,134981,134982,134985,134987,134990],{"class":30,"line":114},[28,134983,134984],{"class":38},"  font-family",[28,134986,51914],{"class":34},[28,134988,134989],{"class":735},"'icomoon'",[28,134991,1781],{"class":34},[28,134993,134994,134997,134999,135001,135003,135006],{"class":30,"line":128},[28,134995,134996],{"class":38},"  src",[28,134998,51914],{"class":34},[28,135000,62203],{"class":38},[28,135002,367],{"class":34},[28,135004,135005],{"class":735},"'fonts\u002Ficomoon.eot'",[28,135007,3209],{"class":34},[28,135009,135010,135012,135014,135016,135018,135021,135023,135026,135028,135031],{"class":30,"line":393},[28,135011,134996],{"class":38},[28,135013,51914],{"class":34},[28,135015,62203],{"class":38},[28,135017,367],{"class":34},[28,135019,135020],{"class":735},"'fonts\u002Ficomoon.eot?#iefix'",[28,135022,14200],{"class":34},[28,135024,135025],{"class":38},"format",[28,135027,367],{"class":34},[28,135029,135030],{"class":735},"'embedded-opentype'",[28,135032,38524],{"class":34},[28,135034,135035,135038,135040,135043,135045,135047,135049,135052],{"class":30,"line":409},[28,135036,135037],{"class":38},"       url",[28,135039,367],{"class":34},[28,135041,135042],{"class":735},"'fonts\u002Ficomoon.woff'",[28,135044,14200],{"class":34},[28,135046,135025],{"class":38},[28,135048,367],{"class":34},[28,135050,135051],{"class":735},"'woff'",[28,135053,38524],{"class":34},[28,135055,135056,135058,135060,135063,135065,135067,135069,135072],{"class":30,"line":1711},[28,135057,135037],{"class":38},[28,135059,367],{"class":34},[28,135061,135062],{"class":735},"'fonts\u002Ficomoon.ttf'",[28,135064,14200],{"class":34},[28,135066,135025],{"class":38},[28,135068,367],{"class":34},[28,135070,135071],{"class":735},"'truetype'",[28,135073,38524],{"class":34},[28,135075,135076,135078,135080,135083,135085,135087,135089,135092],{"class":30,"line":1802},[28,135077,135037],{"class":38},[28,135079,367],{"class":34},[28,135081,135082],{"class":735},"'fonts\u002Ficomoon.svg#icomoon'",[28,135084,14200],{"class":34},[28,135086,135025],{"class":38},[28,135088,367],{"class":34},[28,135090,135091],{"class":735},"'svg'",[28,135093,3209],{"class":34},[28,135095,135096],{"class":30,"line":1808},[28,135097,2055],{"class":34},[28,135099,135100,135102],{"class":30,"line":1820},[28,135101,134703],{"class":2453},[28,135103,16058],{"class":34},[28,135105,135106,135108,135110,135112],{"class":30,"line":2102},[28,135107,134984],{"class":38},[28,135109,51914],{"class":34},[28,135111,134989],{"class":735},[28,135113,1781],{"class":34},[28,135115,135116,135119,135121,135123],{"class":30,"line":2107},[28,135117,135118],{"class":38},"  font-style",[28,135120,51914],{"class":34},[28,135122,64318],{"class":38},[28,135124,1781],{"class":34},[28,135126,135127],{"class":30,"line":2113},[28,135128,2055],{"class":34},[14,135130,135131],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[420,135133],{"style":126802,"src":135134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[588,135136,135137],{"start":128},[591,135138,135139],{},"添加字体",[420,135141],{"style":126802,"src":135142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135144,135145],{},"复制：",[420,135147],{"style":126802,"src":135148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135150,135151],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[588,135153,135154],{"start":393},[591,135155,135156],{},"代码展示：",[18,135158,135159],{"className":126946,"code":134965,"language":126948,"meta":23,"style":23},[25,135160,135161,135165,135171,135181,135195,135217,135235,135253,135271,135275,135281,135291,135301],{"__ignoreMap":23},[28,135162,135163],{"class":30,"line":31},[28,135164,134972],{"class":73},[28,135166,135167,135169],{"class":30,"line":77},[28,135168,134977],{"class":42},[28,135170,16058],{"class":34},[28,135172,135173,135175,135177,135179],{"class":30,"line":114},[28,135174,134984],{"class":38},[28,135176,51914],{"class":34},[28,135178,134989],{"class":735},[28,135180,1781],{"class":34},[28,135182,135183,135185,135187,135189,135191,135193],{"class":30,"line":128},[28,135184,134996],{"class":38},[28,135186,51914],{"class":34},[28,135188,62203],{"class":38},[28,135190,367],{"class":34},[28,135192,135005],{"class":735},[28,135194,3209],{"class":34},[28,135196,135197,135199,135201,135203,135205,135207,135209,135211,135213,135215],{"class":30,"line":393},[28,135198,134996],{"class":38},[28,135200,51914],{"class":34},[28,135202,62203],{"class":38},[28,135204,367],{"class":34},[28,135206,135020],{"class":735},[28,135208,14200],{"class":34},[28,135210,135025],{"class":38},[28,135212,367],{"class":34},[28,135214,135030],{"class":735},[28,135216,38524],{"class":34},[28,135218,135219,135221,135223,135225,135227,135229,135231,135233],{"class":30,"line":409},[28,135220,135037],{"class":38},[28,135222,367],{"class":34},[28,135224,135042],{"class":735},[28,135226,14200],{"class":34},[28,135228,135025],{"class":38},[28,135230,367],{"class":34},[28,135232,135051],{"class":735},[28,135234,38524],{"class":34},[28,135236,135237,135239,135241,135243,135245,135247,135249,135251],{"class":30,"line":1711},[28,135238,135037],{"class":38},[28,135240,367],{"class":34},[28,135242,135062],{"class":735},[28,135244,14200],{"class":34},[28,135246,135025],{"class":38},[28,135248,367],{"class":34},[28,135250,135071],{"class":735},[28,135252,38524],{"class":34},[28,135254,135255,135257,135259,135261,135263,135265,135267,135269],{"class":30,"line":1802},[28,135256,135037],{"class":38},[28,135258,367],{"class":34},[28,135260,135082],{"class":735},[28,135262,14200],{"class":34},[28,135264,135025],{"class":38},[28,135266,367],{"class":34},[28,135268,135091],{"class":735},[28,135270,3209],{"class":34},[28,135272,135273],{"class":30,"line":1808},[28,135274,2055],{"class":34},[28,135276,135277,135279],{"class":30,"line":1820},[28,135278,134703],{"class":2453},[28,135280,16058],{"class":34},[28,135282,135283,135285,135287,135289],{"class":30,"line":2102},[28,135284,134984],{"class":38},[28,135286,51914],{"class":34},[28,135288,134989],{"class":735},[28,135290,1781],{"class":34},[28,135292,135293,135295,135297,135299],{"class":30,"line":2107},[28,135294,135118],{"class":38},[28,135296,51914],{"class":34},[28,135298,64318],{"class":38},[28,135300,1781],{"class":34},[28,135302,135303],{"class":30,"line":2113},[28,135304,2055],{"class":34},[420,135306],{"style":126802,"src":135307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135309,135310],{},"更加细节展示：",[588,135312,135313],{},[591,135314,135315],{},"html 标签内添加小图标",[420,135317],{"style":126802,"src":135318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[588,135320,135321],{"start":77},[591,135322,135323],{},"给标签定义字体",[18,135325,135326],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,135327,135328,135332,135346,135350],{"__ignoreMap":23},[28,135329,135330],{"class":30,"line":31},[28,135331,131057],{"class":73},[28,135333,135334,135336,135338,135340,135342,135344],{"class":30,"line":77},[28,135335,1529],{"class":34},[28,135337,52088],{"class":51777},[28,135339,53963],{"class":2453},[28,135341,83],{"class":34},[28,135343,131070],{"class":735},[28,135345,51784],{"class":34},[28,135347,135348],{"class":30,"line":114},[28,135349,131077],{"class":34},[28,135351,135352,135354,135356],{"class":30,"line":128},[28,135353,52262],{"class":34},[28,135355,52088],{"class":51777},[28,135357,51784],{"class":34},[14,135359,135360],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[420,135362],{"style":126802,"src":135363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[605,135365,135367],{"id":135366},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135369,135370],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135372,135373,135374,135377],{},"把压缩包里面的 ",[780,135375,135376],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135379,135380],{},"打开网站，点下方：",[420,135382],{"style":126802,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[420,135385],{"style":126802,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[420,135388],{"style":126802,"src":135389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135391,135392],{},"点yes重新加载",[14,135394,135395],{},"然后重复之前的操作就可以实现了",[14,135397,135398],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[605,135400,135402],{"id":135401},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[420,135404],{"style":126802,"src":135405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[547,135407,135408],{},"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":77,"depth":77,"links":135410},[135411,135417,135422],{"id":134014,"depth":77,"text":134015,"children":135412},[135413,135414,135415,135416],{"id":134026,"depth":114,"text":134027},{"id":134055,"depth":114,"text":134056},{"id":134083,"depth":114,"text":134084},{"id":134141,"depth":114,"text":134142},{"id":134613,"depth":77,"text":134614,"children":135418},[135419,135420,135421],{"id":134617,"depth":114,"text":134618},{"id":134662,"depth":114,"text":134663},{"id":134678,"depth":114,"text":134679},{"id":134778,"depth":77,"text":134779,"children":135423},[135424,135425,135426,135427,135428,135429],{"id":134782,"depth":114,"text":134783},{"id":134816,"depth":114,"text":134817},{"id":134839,"depth":114,"text":134840},{"id":134886,"depth":114,"text":134887},{"id":135366,"depth":114,"text":135367},{"id":135401,"depth":114,"text":135402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134006,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135436,"title":135437,"body":135438,"description":559,"extension":560,"meta":136665,"navigation":562,"path":136666,"seo":136667,"stem":136668,"__hash__":136669},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135439,"toc":136646},[135440,135443,135447,135450,135464,135532,135562,135565,135569,135573,135675,135722,135726,135729,135732,135766,135769,135772,135775,135778,135781,135784,135787,135789,135792,135795,135798,135801,135804,135807,135810,135838,135841,135845,135848,135855,135858,135861,135887,135890,135894,135897,135900,135907,135911,135914,135916,135948,135951,135954,135966,135972,135975,135978,135981,135983,135987,135990,135993,135996,136041,136045,136047,136050,136057,136099,136102,136106,136111,136125,136129,136132,136135,136138,136141,136144,136178,136181,136184,136238,136241,136244,136247,136250,136302,136305,136308,136357,136361,136363,136366,136369,136372,136375,136378,136436,136439,136445,136448,136451,136483,136486,136490,136494,136497,136529,136533,136536,136580,136584,136587,136590,136593,136596,136599,136602,136605,136607,136610,136612,136615,136618,136621,136624,136629,136632,136634,136637,136640,136643],[10,135441,135437],{"id":135442},"_13-界面样式与布局技巧",[60,135444,135446],{"id":135445},"_131-css三角","13.1 css三角",[14,135448,135449],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1626,135451,135452,135455,135458,135461],{},[591,135453,135454],{},"用css 边框可以模拟三角效果",[591,135456,135457],{},"宽度高度为0",[591,135459,135460],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[591,135462,135463],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[18,135465,135467],{"className":126946,"code":135466,"language":126948,"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,135468,135469,135474,135481,135491,135501,135517,135528],{"__ignoreMap":23},[28,135470,135471],{"class":30,"line":31},[28,135472,135473],{"class":73},"\u002F* CSS 实现三角形 *\u002F\n",[28,135475,135476,135479],{"class":30,"line":77},[28,135477,135478],{"class":2453},".triangle",[28,135480,16058],{"class":34},[28,135482,135483,135485,135487,135489],{"class":30,"line":114},[28,135484,71045],{"class":38},[28,135486,51914],{"class":34},[28,135488,822],{"class":38},[28,135490,1781],{"class":34},[28,135492,135493,135495,135497,135499],{"class":30,"line":128},[28,135494,71265],{"class":38},[28,135496,51914],{"class":34},[28,135498,822],{"class":38},[28,135500,1781],{"class":34},[28,135502,135503,135505,135507,135509,135511,135513,135515],{"class":30,"line":393},[28,135504,71373],{"class":38},[28,135506,51914],{"class":34},[28,135508,225],{"class":38},[28,135510,51969],{"class":42},[28,135512,51998],{"class":38},[28,135514,64468],{"class":38},[28,135516,1781],{"class":34},[28,135518,135519,135522,135524,135526],{"class":30,"line":409},[28,135520,135521],{"class":38},"  border-bottom-color",[28,135523,51914],{"class":34},[28,135525,62846],{"class":38},[28,135527,1781],{"class":34},[28,135529,135530],{"class":30,"line":1711},[28,135531,2055],{"class":34},[18,135533,135534],{"className":126946,"code":131103,"language":126948,"meta":23,"style":23},[25,135535,135536,135542,135558],{"__ignoreMap":23},[28,135537,135538,135540],{"class":30,"line":31},[28,135539,52088],{"class":51777},[28,135541,16058],{"class":34},[28,135543,135544,135546,135548,135550,135552,135554,135556],{"class":30,"line":77},[28,135545,71373],{"class":38},[28,135547,51914],{"class":34},[28,135549,39],{"class":38},[28,135551,51969],{"class":42},[28,135553,51998],{"class":38},[28,135555,130338],{"class":38},[28,135557,1781],{"class":34},[28,135559,135560],{"class":30,"line":114},[28,135561,2055],{"class":34},[420,135563],{"style":126802,"src":135564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[60,135566,135568],{"id":135567},"_132-css用户界面样式","13.2 css用户界面样式",[605,135570,135572],{"id":135571},"_1321-鼠标样式","13.2.1 鼠标样式",[18,135574,135576],{"className":126946,"code":135575,"language":126948,"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,135577,135578,135583,135602,135620,135639,135656],{"__ignoreMap":23},[28,135579,135580],{"class":30,"line":31},[28,135581,135582],{"class":73},"\u002F* 鼠标样式 *\u002F\n",[28,135584,135585,135587,135589,135592,135594,135596,135599],{"class":30,"line":77},[28,135586,52088],{"class":51777},[28,135588,80284],{"class":34},[28,135590,135591],{"class":38},"cursor",[28,135593,51914],{"class":34},[28,135595,62507],{"class":38},[28,135597,135598],{"class":34},"; }   ",[28,135600,135601],{"class":73},"\u002F* 手型 *\u002F\n",[28,135603,135604,135606,135608,135610,135612,135615,135617],{"class":30,"line":114},[28,135605,52088],{"class":51777},[28,135607,80284],{"class":34},[28,135609,135591],{"class":38},[28,135611,51914],{"class":34},[28,135613,135614],{"class":38},"default",[28,135616,135598],{"class":34},[28,135618,135619],{"class":73},"\u002F* 默认 *\u002F\n",[28,135621,135622,135624,135626,135628,135630,135633,135636],{"class":30,"line":128},[28,135623,52088],{"class":51777},[28,135625,80284],{"class":34},[28,135627,135591],{"class":38},[28,135629,51914],{"class":34},[28,135631,135632],{"class":38},"move",[28,135634,135635],{"class":34},"; }      ",[28,135637,135638],{"class":73},"\u002F* 移动 *\u002F\n",[28,135640,135641,135643,135645,135647,135649,135651,135653],{"class":30,"line":393},[28,135642,52088],{"class":51777},[28,135644,80284],{"class":34},[28,135646,135591],{"class":38},[28,135648,51914],{"class":34},[28,135650,5675],{"class":38},[28,135652,135635],{"class":34},[28,135654,135655],{"class":73},"\u002F* 文本 *\u002F\n",[28,135657,135658,135660,135662,135664,135666,135669,135672],{"class":30,"line":409},[28,135659,52088],{"class":51777},[28,135661,80284],{"class":34},[28,135663,135591],{"class":38},[28,135665,51914],{"class":34},[28,135667,135668],{"class":38},"not-allowed",[28,135670,135671],{"class":34},"; } ",[28,135673,135674],{"class":73},"\u002F* 禁止 *\u002F\n",[768,135676,135677,135685],{},[771,135678,135679],{},[774,135680,135681,135683],{},[777,135682,127410],{"align":24222},[777,135684,27975],{"align":24222},[815,135686,135687,135694,135701,135708,135715],{},[774,135688,135689,135691],{},[820,135690,135614],{"align":24222},[820,135692,135693],{"align":24222},"小白 默认",[774,135695,135696,135698],{},[820,135697,62507],{"align":24222},[820,135699,135700],{"align":24222},"小手",[774,135702,135703,135705],{},[820,135704,135632],{"align":24222},[820,135706,135707],{"align":24222},"移动",[774,135709,135710,135712],{},[820,135711,5675],{"align":24222},[820,135713,135714],{"align":24222},"文本",[774,135716,135717,135719],{},[820,135718,135668],{"align":24222},[820,135720,135721],{"align":24222},"禁止",[605,135723,135725],{"id":135724},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135727,135728],{},"去除表单轮廓线",[14,135730,135731],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[18,135733,135734],{"className":126946,"code":130310,"language":126948,"meta":23,"style":23},[25,135735,135736,135740,135746,135762],{"__ignoreMap":23},[28,135737,135738],{"class":30,"line":31},[28,135739,130317],{"class":73},[28,135741,135742,135744],{"class":30,"line":77},[28,135743,52088],{"class":51777},[28,135745,16058],{"class":34},[28,135747,135748,135750,135752,135754,135756,135758,135760],{"class":30,"line":114},[28,135749,71373],{"class":38},[28,135751,51914],{"class":34},[28,135753,39],{"class":38},[28,135755,51969],{"class":42},[28,135757,51998],{"class":38},[28,135759,130338],{"class":38},[28,135761,1781],{"class":34},[28,135763,135764],{"class":30,"line":128},[28,135765,2055],{"class":34},[14,135767,135768],{},"文本域：",[420,135770],{"style":126802,"src":135771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135773,135774],{},"此时会有一个空白区域",[420,135776],{"style":126802,"src":135777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135779,135780],{},"写在同一行就不会出现这个问题",[420,135782],{"style":126802,"src":135783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135785,135786],{},"文本域是行内块元素，一定记住！！！",[14,135788,98703],{},[420,135790],{"style":126802,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135793,135794],{},"文本域尽量放在一行",[14,135796,135797],{},"知识回顾：cols是列，rols是行",[420,135799],{"style":126802,"src":135800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135802,135803],{},"它可以进行拖动，显然这是我们不愿意看到的",[420,135805],{"style":126802,"src":135806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135808,135809],{},"使用resize进行解决",[18,135811,135813],{"className":126946,"code":135812,"language":126948,"meta":23,"style":23},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[25,135814,135815,135821,135834],{"__ignoreMap":23},[28,135816,135817,135819],{"class":30,"line":31},[28,135818,54298],{"class":51777},[28,135820,16058],{"class":34},[28,135822,135823,135825,135827,135829,135831],{"class":30,"line":77},[28,135824,71275],{"class":38},[28,135826,51914],{"class":34},[28,135828,55214],{"class":38},[28,135830,130809],{"class":34},[28,135832,135833],{"class":73},"\u002F* 取消表单轮廓线 *\u002F\n",[28,135835,135836],{"class":30,"line":114},[28,135837,2055],{"class":34},[14,135839,135840],{},"此时就无法通过右下方实现拖动了",[605,135842,135844],{"id":135843},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135846,135847],{},"实现一个盒子中的文字和图片对齐",[14,135849,135850,135851,135854],{},"用于设置一个元素的 ",[780,135852,135853],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135856,135857],{},"图片和文字默认是基线对齐",[420,135859],{"style":126802,"src":135860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[18,135862,135863],{"className":126946,"code":135812,"language":126948,"meta":23,"style":23},[25,135864,135865,135871,135883],{"__ignoreMap":23},[28,135866,135867,135869],{"class":30,"line":31},[28,135868,54298],{"class":51777},[28,135870,16058],{"class":34},[28,135872,135873,135875,135877,135879,135881],{"class":30,"line":77},[28,135874,71275],{"class":38},[28,135876,51914],{"class":34},[28,135878,55214],{"class":38},[28,135880,130809],{"class":34},[28,135882,135833],{"class":73},[28,135884,135885],{"class":30,"line":114},[28,135886,2055],{"class":34},[420,135888],{"style":126802,"src":135889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22484,135891,135893],{"id":135892},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135895,135896],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[420,135898],{"style":126802,"src":135899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135901,135902,135903,135906],{},"此时可以给图片、表单这些行内块元素的 ",[780,135904,135905],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22484,135908,135910],{"id":135909},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135912,135913],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135915,15119],{},[18,135917,135919],{"className":126946,"code":135918,"language":126948,"meta":23,"style":23},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[25,135920,135921,135926,135932,135944],{"__ignoreMap":23},[28,135922,135923],{"class":30,"line":31},[28,135924,135925],{"class":73},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[28,135927,135928,135930],{"class":30,"line":77},[28,135929,420],{"class":51777},[28,135931,16058],{"class":34},[28,135933,135934,135937,135939,135942],{"class":30,"line":114},[28,135935,135936],{"class":38},"  vertical-align",[28,135938,51914],{"class":34},[28,135940,135941],{"class":38},"middle",[28,135943,1781],{"class":34},[28,135945,135946],{"class":30,"line":128},[28,135947,2055],{"class":34},[420,135949],{"style":126802,"src":135950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135952,135953],{},"主要解决方法有两种：",[588,135955,135956],{},[591,135957,135958,135961,135962,135965],{},[780,135959,135960],{},"给图片"," 添加 ",[780,135963,135964],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135967,135968,135969],{},"2.把图片转换为块级元素 ",[780,135970,135971],{},"display: block",[14,135973,135974],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135976,135977],{},"img {",[14,135979,135980],{},"vertical-align:middle;",[14,135982,1565],{},[605,135984,135986],{"id":135985},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135988,135989],{},"效果：",[420,135991],{"style":126802,"src":135992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135994,135995],{},"单行文本溢出显示省略号--必须满足三个条件：",[18,135997,135999],{"className":126946,"code":135998,"language":126948,"meta":23,"style":23},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[25,136000,136001,136006,136012,136022,136027,136037],{"__ignoreMap":23},[28,136002,136003],{"class":30,"line":31},[28,136004,136005],{"class":73},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[28,136007,136008,136010],{"class":30,"line":77},[28,136009,420],{"class":51777},[28,136011,16058],{"class":34},[28,136013,136014,136016,136018,136020],{"class":30,"line":114},[28,136015,135936],{"class":38},[28,136017,51914],{"class":34},[28,136019,135941],{"class":38},[28,136021,1781],{"class":34},[28,136023,136024],{"class":30,"line":128},[28,136025,136026],{"class":73},"  \u002F* 或 *\u002F\n",[28,136028,136029,136031,136033,136035],{"class":30,"line":393},[28,136030,128562],{"class":38},[28,136032,51914],{"class":34},[28,136034,61346],{"class":38},[28,136036,1781],{"class":34},[28,136038,136039],{"class":30,"line":409},[28,136040,2055],{"class":34},[605,136042,136044],{"id":136043},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136046,135989],{},[420,136048],{"style":126802,"src":136049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136051,136052,136053,136056],{},"多行文本溢出显示省略号， ",[780,136054,136055],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[18,136058,136059],{"className":126946,"code":135998,"language":126948,"meta":23,"style":23},[25,136060,136061,136065,136071,136081,136085,136095],{"__ignoreMap":23},[28,136062,136063],{"class":30,"line":31},[28,136064,136005],{"class":73},[28,136066,136067,136069],{"class":30,"line":77},[28,136068,420],{"class":51777},[28,136070,16058],{"class":34},[28,136072,136073,136075,136077,136079],{"class":30,"line":114},[28,136074,135936],{"class":38},[28,136076,51914],{"class":34},[28,136078,135941],{"class":38},[28,136080,1781],{"class":34},[28,136082,136083],{"class":30,"line":128},[28,136084,136026],{"class":73},[28,136086,136087,136089,136091,136093],{"class":30,"line":393},[28,136088,128562],{"class":38},[28,136090,51914],{"class":34},[28,136092,61346],{"class":38},[28,136094,1781],{"class":34},[28,136096,136097],{"class":30,"line":409},[28,136098,2055],{"class":34},[14,136100,136101],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[60,136103,136105],{"id":136104},"_133-常见布局技巧","13.3 常见布局技巧",[14,136107,136108],{},[780,136109,136110],{},"巧妙利用一个技术更快更好的布局：",[588,136112,136113,136116,136119,136122],{},[591,136114,136115],{},"margin负值的运用",[591,136117,136118],{},"文字围绕浮动元素",[591,136120,136121],{},"行内块的巧妙运用",[591,136123,136124],{},"CSS三角强化",[605,136126,136128],{"id":136127},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136130,136131],{},"应用场景：",[420,136133],{"style":126802,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[420,136136],{"style":126802,"src":136137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136139,136140],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136142,136143],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[18,136145,136146],{"className":126946,"code":130310,"language":126948,"meta":23,"style":23},[25,136147,136148,136152,136158,136174],{"__ignoreMap":23},[28,136149,136150],{"class":30,"line":31},[28,136151,130317],{"class":73},[28,136153,136154,136156],{"class":30,"line":77},[28,136155,52088],{"class":51777},[28,136157,16058],{"class":34},[28,136159,136160,136162,136164,136166,136168,136170,136172],{"class":30,"line":114},[28,136161,71373],{"class":38},[28,136163,51914],{"class":34},[28,136165,39],{"class":38},[28,136167,51969],{"class":42},[28,136169,51998],{"class":38},[28,136171,130338],{"class":38},[28,136173,1781],{"class":34},[28,136175,136176],{"class":30,"line":128},[28,136177,2055],{"class":34},[420,136179],{"style":126802,"src":136180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136182,136183],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[18,136185,136187],{"className":126946,"code":136186,"language":126948,"meta":23,"style":23},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,136188,136189,136194,136200,136210,136222,136234],{"__ignoreMap":23},[28,136190,136191],{"class":30,"line":31},[28,136192,136193],{"class":73},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[28,136195,136196,136198],{"class":30,"line":77},[28,136197,130794],{"class":2453},[28,136199,16058],{"class":34},[28,136201,136202,136204,136206,136208],{"class":30,"line":114},[28,136203,132752],{"class":38},[28,136205,51914],{"class":34},[28,136207,55241],{"class":38},[28,136209,1781],{"class":34},[28,136211,136212,136214,136216,136218,136220],{"class":30,"line":128},[28,136213,132766],{"class":38},[28,136215,51914],{"class":34},[28,136217,225],{"class":38},[28,136219,51969],{"class":42},[28,136221,1781],{"class":34},[28,136223,136224,136226,136228,136230,136232],{"class":30,"line":393},[28,136225,132783],{"class":38},[28,136227,51914],{"class":34},[28,136229,1320],{"class":38},[28,136231,51969],{"class":42},[28,136233,1781],{"class":34},[28,136235,136236],{"class":30,"line":409},[28,136237,2055],{"class":34},[14,136239,136240],{},"加上上述代码会发现：",[420,136242],{"style":126802,"src":136243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136245,136246],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136248,136249],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[18,136251,136252],{"className":126946,"code":136186,"language":126948,"meta":23,"style":23},[25,136253,136254,136258,136264,136274,136286,136298],{"__ignoreMap":23},[28,136255,136256],{"class":30,"line":31},[28,136257,136193],{"class":73},[28,136259,136260,136262],{"class":30,"line":77},[28,136261,130794],{"class":2453},[28,136263,16058],{"class":34},[28,136265,136266,136268,136270,136272],{"class":30,"line":114},[28,136267,132752],{"class":38},[28,136269,51914],{"class":34},[28,136271,55241],{"class":38},[28,136273,1781],{"class":34},[28,136275,136276,136278,136280,136282,136284],{"class":30,"line":128},[28,136277,132766],{"class":38},[28,136279,51914],{"class":34},[28,136281,225],{"class":38},[28,136283,51969],{"class":42},[28,136285,1781],{"class":34},[28,136287,136288,136290,136292,136294,136296],{"class":30,"line":393},[28,136289,132783],{"class":38},[28,136291,51914],{"class":34},[28,136293,1320],{"class":38},[28,136295,51969],{"class":42},[28,136297,1781],{"class":34},[28,136299,136300],{"class":30,"line":409},[28,136301,2055],{"class":34},[14,136303,136304],{},"解决方式2：",[14,136306,136307],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[18,136309,136311],{"className":126946,"code":136310,"language":126948,"meta":23,"style":23},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,136312,136313,136319,136329,136341,136353],{"__ignoreMap":23},[28,136314,136315,136317],{"class":30,"line":31},[28,136316,52088],{"class":51777},[28,136318,16058],{"class":34},[28,136320,136321,136323,136325,136327],{"class":30,"line":77},[28,136322,132752],{"class":38},[28,136324,51914],{"class":34},[28,136326,55241],{"class":38},[28,136328,1781],{"class":34},[28,136330,136331,136333,136335,136337,136339],{"class":30,"line":114},[28,136332,132766],{"class":38},[28,136334,51914],{"class":34},[28,136336,225],{"class":38},[28,136338,51969],{"class":42},[28,136340,1781],{"class":34},[28,136342,136343,136345,136347,136349,136351],{"class":30,"line":128},[28,136344,132783],{"class":38},[28,136346,51914],{"class":34},[28,136348,1320],{"class":38},[28,136350,51969],{"class":42},[28,136352,1781],{"class":34},[28,136354,136355],{"class":30,"line":393},[28,136356,2055],{"class":34},[605,136358,136360],{"id":136359},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136362,136131],{},[420,136364],{"style":126802,"src":136365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136367,136368],{},"实现结构图：",[420,136370],{"style":126802,"src":136371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136373,136374],{},"巧妙运用浮动元素不会压住文字的特性",[14,136376,136377],{},"代码显示：",[18,136379,136381],{"className":126946,"code":136380,"language":126948,"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,136382,136383,136389,136399,136403,136408,136412,136418,136432],{"__ignoreMap":23},[28,136384,136385,136387],{"class":30,"line":31},[28,136386,130794],{"class":2453},[28,136388,16058],{"class":34},[28,136390,136391,136393,136395,136397],{"class":30,"line":77},[28,136392,131426],{"class":38},[28,136394,51914],{"class":34},[28,136396,24222],{"class":38},[28,136398,1781],{"class":34},[28,136400,136401],{"class":30,"line":114},[28,136402,2055],{"class":34},[28,136404,136405],{"class":30,"line":128},[28,136406,136407],{"class":34},"```Css\n",[28,136409,136410],{"class":30,"line":393},[28,136411,130789],{"class":73},[28,136413,136414,136416],{"class":30,"line":409},[28,136415,130794],{"class":2453},[28,136417,16058],{"class":34},[28,136419,136420,136422,136424,136426,136428,136430],{"class":30,"line":1711},[28,136421,70947],{"class":38},[28,136423,51914],{"class":34},[28,136425,822],{"class":38},[28,136427,52033],{"class":38},[28,136429,130809],{"class":34},[28,136431,130812],{"class":73},[28,136433,136434],{"class":30,"line":1802},[28,136435,2055],{"class":34},[14,136437,136438],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[18,136440,136443],{"className":136441,"code":136442,"language":5675},[5673],"\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,136444,136442],{"__ignoreMap":23},[420,136446],{"style":126802,"src":136447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136449,136450],{},"最终展示结果：",[18,136452,136453],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,136454,136455,136459,136465,136479],{"__ignoreMap":23},[28,136456,136457],{"class":30,"line":31},[28,136458,130789],{"class":73},[28,136460,136461,136463],{"class":30,"line":77},[28,136462,130794],{"class":2453},[28,136464,16058],{"class":34},[28,136466,136467,136469,136471,136473,136475,136477],{"class":30,"line":114},[28,136468,70947],{"class":38},[28,136470,51914],{"class":34},[28,136472,822],{"class":38},[28,136474,52033],{"class":38},[28,136476,130809],{"class":34},[28,136478,130812],{"class":73},[28,136480,136481],{"class":30,"line":128},[28,136482,2055],{"class":34},[420,136484],{"style":126802,"src":136485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[60,136487,136489],{"id":136488},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[605,136491,136493],{"id":136492},"_1341-原理","13.4.1 原理",[420,136495],{"style":126802,"src":136496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[18,136498,136499],{"className":126946,"code":130782,"language":126948,"meta":23,"style":23},[25,136500,136501,136505,136511,136525],{"__ignoreMap":23},[28,136502,136503],{"class":30,"line":31},[28,136504,130789],{"class":73},[28,136506,136507,136509],{"class":30,"line":77},[28,136508,130794],{"class":2453},[28,136510,16058],{"class":34},[28,136512,136513,136515,136517,136519,136521,136523],{"class":30,"line":114},[28,136514,70947],{"class":38},[28,136516,51914],{"class":34},[28,136518,822],{"class":38},[28,136520,52033],{"class":38},[28,136522,130809],{"class":34},[28,136524,130812],{"class":73},[28,136526,136527],{"class":30,"line":128},[28,136528,2055],{"class":34},[605,136530,136532],{"id":136531},"_1342-实例","13.4.2 实例",[420,136534],{"style":126802,"src":136535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[18,136537,136538],{"className":126946,"code":131412,"language":126948,"meta":23,"style":23},[25,136539,136540,136546,136556,136560,136566,136576],{"__ignoreMap":23},[28,136541,136542,136544],{"class":30,"line":31},[28,136543,131419],{"class":2453},[28,136545,16058],{"class":34},[28,136547,136548,136550,136552,136554],{"class":30,"line":77},[28,136549,131426],{"class":38},[28,136551,51914],{"class":34},[28,136553,24222],{"class":38},[28,136555,1781],{"class":34},[28,136557,136558],{"class":30,"line":114},[28,136559,2055],{"class":34},[28,136561,136562,136564],{"class":30,"line":128},[28,136563,131441],{"class":2453},[28,136565,16058],{"class":34},[28,136567,136568,136570,136572,136574],{"class":30,"line":393},[28,136569,131426],{"class":38},[28,136571,51914],{"class":34},[28,136573,72999],{"class":38},[28,136575,1781],{"class":34},[28,136577,136578],{"class":30,"line":409},[28,136579,2055],{"class":34},[60,136581,136583],{"id":136582},"_135-css的初始化","13.5 css的初始化",[14,136585,136586],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136588,136589],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136591,136592],{},"每个网页都必须首先进行 CSS初始化。",[14,136594,136595],{},"这里我们以 京东CSS初始化代码为例。",[14,136597,136598],{},"在网页右键查看网页源代码",[14,136600,136601],{},"找到css的link引入语句",[14,136603,136604],{},"然后ctrl+f 输入body",[14,136606,77703],{},[420,136608],{"style":126802,"src":136609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136611,77726],{},[420,136613],{"style":126802,"src":136614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136616,136617],{},"③打开了网页上传压缩的代码",[420,136619],{"style":126802,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136622,136623],{},"④从body前可以查看这个网页的初始化代码",[14,136625,136626],{},[780,136627,136628],{},"Unicode编码字体：",[14,136630,136631],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136633,83684],{},[14,136635,136636],{},"黑体 \\9ED1\\4F53",[14,136638,136639],{},"宋体 \\5B8B\\4F53",[14,136641,136642],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[547,136644,136645],{},"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":77,"depth":77,"links":136647},[136648,136649,136656,136660,136664],{"id":135445,"depth":77,"text":135446},{"id":135567,"depth":77,"text":135568,"children":136650},[136651,136652,136653,136654,136655],{"id":135571,"depth":114,"text":135572},{"id":135724,"depth":114,"text":135725},{"id":135843,"depth":114,"text":135844},{"id":135985,"depth":114,"text":135986},{"id":136043,"depth":114,"text":136044},{"id":136104,"depth":77,"text":136105,"children":136657},[136658,136659],{"id":136127,"depth":114,"text":136128},{"id":136359,"depth":114,"text":136360},{"id":136488,"depth":77,"text":136489,"children":136661},[136662,136663],{"id":136492,"depth":114,"text":136493},{"id":136531,"depth":114,"text":136532},{"id":136582,"depth":77,"text":136583},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135437,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136671,"title":136672,"body":136673,"description":559,"extension":560,"meta":138359,"navigation":562,"path":138360,"seo":138361,"stem":138362,"__hash__":138363},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136674,"toc":138348},[136675,136678,136682,136686,136689,136696,136699,136702,136740,136743,136745,136759,136763,136772,136776,136781,136784,136787,136790,136825,136830,136833,136863,136866,136871,136874,136877,136907,136910,136964,136967,136971,136976,136988,136991,136995,137025,137028,137033,137036,137066,137069,137073,137090,137094,137098,137101,137134,137137,137141,137144,137147,137150,137153,137156,137267,137270,137273,137276,137378,137381,137385,137389,137393,137396,137436,137439,137441,137457,137461,137464,137469,137550,137553,137556,137682,137687,137690,137698,137701,137706,137791,137794,137798,137801,137804,137808,137828,137833,137917,137920,137925,137928,137931,138009,138012,138015,138018,138021,138024,138029,138032,138035,138107,138110,138115,138118,138215,138218,138224,138227,138230,138233,138236,138239,138242,138245,138248,138252,138257,138260,138293,138298,138301,138342,138345],[10,136676,136672],{"id":136677},"_14-html5与css3新特性",[60,136679,136681],{"id":136680},"_141-html5的新特性","14.1 HTML5的新特性",[605,136683,136685],{"id":136684},"_1411-基本标签","14.1.1 基本标签",[14,136687,136688],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136690,136691,136692,136695],{},"这些新特性都有兼容性问题，基本是 ",[780,136693,136694],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136697,136698],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136700,136701],{},"现在使用的是新特性：",[1626,136703,136704,136710,136716,136722,136728,136734],{},[591,136705,136706,136709],{},[25,136707,136708],{},"\u003Cheader>"," 头部标签",[591,136711,136712,136715],{},[25,136713,136714],{},"\u003Cnav>"," 导航标签",[591,136717,136718,136721],{},[25,136719,136720],{},"\u003Carticle>"," 内容标签",[591,136723,136724,136727],{},[25,136725,136726],{},"\u003Csection>"," 定义文档某个区域",[591,136729,136730,136733],{},[25,136731,136732],{},"\u003Caside>"," 侧边栏标签",[591,136735,136736,136739],{},[25,136737,136738],{},"\u003Cfooter>"," 尾部标签",[420,136741],{"style":126802,"src":136742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136744,665],{},[1626,136746,136747,136750,136753,136756],{},[591,136748,136749],{},"这种语义化标准主要是针对搜索引擎的",[591,136751,136752],{},"这些标签页面中可以经常使用",[591,136754,136755],{},"在IE9中，需要把这些元素转换为块级元素",[591,136757,136758],{},"移动端更喜欢使用这些标签",[605,136760,136762],{"id":136761},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136764,136765,136766,136768,136769,136771],{},"音频 ",[780,136767,28660],{}," 和视频 ",[780,136770,28669],{}," 两个标签",[22484,136773,136775],{"id":136774},"_14121-视频标签-video","14.1.2.1 视频标签- video",[588,136777,136778],{},[591,136779,136780],{},"支持格式：",[420,136782],{"style":126802,"src":136783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136785,136786],{},"尽量使用MP4，兼容性好",[14,136788,136789],{},"用MP4就可以",[18,136791,136793],{"className":127693,"code":136792,"language":127695,"meta":23,"style":23},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[25,136794,136795],{"__ignoreMap":23},[28,136796,136797,136799,136801,136803,136805,136808,136810,136813,136816,136819,136821,136823],{"class":30,"line":31},[28,136798,1529],{"class":34},[28,136800,28669],{"class":51777},[28,136802,55716],{"class":2453},[28,136804,83],{"class":34},[28,136806,136807],{"class":735},"\"movie.mp4\"",[28,136809,92900],{"class":2453},[28,136811,136812],{"class":2453}," autoplay",[28,136814,136815],{"class":2453}," muted",[28,136817,136818],{"class":2453}," loop",[28,136820,55791],{"class":34},[28,136822,28669],{"class":51777},[28,136824,51784],{"class":34},[588,136826,136827],{"start":77},[591,136828,136829],{},"兼容写法",[14,136831,136832],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[18,136834,136835],{"className":127693,"code":136792,"language":127695,"meta":23,"style":23},[25,136836,136837],{"__ignoreMap":23},[28,136838,136839,136841,136843,136845,136847,136849,136851,136853,136855,136857,136859,136861],{"class":30,"line":31},[28,136840,1529],{"class":34},[28,136842,28669],{"class":51777},[28,136844,55716],{"class":2453},[28,136846,83],{"class":34},[28,136848,136807],{"class":735},[28,136850,92900],{"class":2453},[28,136852,136812],{"class":2453},[28,136854,136815],{"class":2453},[28,136856,136818],{"class":2453},[28,136858,55791],{"class":34},[28,136860,28669],{"class":51777},[28,136862,51784],{"class":34},[14,136864,136865],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[588,136867,136868],{"start":114},[591,136869,136870],{},"video常用属性",[420,136872],{"style":126802,"src":136873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136875,136876],{},"poster属性后面是跟的等待加载图片的地址",[18,136878,136879],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,136880,136881],{"__ignoreMap":23},[28,136882,136883,136885,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905],{"class":30,"line":31},[28,136884,1529],{"class":34},[28,136886,420],{"class":51777},[28,136888,55716],{"class":2453},[28,136890,83],{"class":34},[28,136892,134463],{"class":735},[28,136894,55724],{"class":2453},[28,136896,83],{"class":34},[28,136898,134470],{"class":735},[28,136900,134473],{"class":2453},[28,136902,83],{"class":34},[28,136904,134478],{"class":735},[28,136906,51784],{"class":34},[14,136908,136909],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[18,136911,136913],{"className":126946,"code":136912,"language":126948,"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,136914,136915,136920,136926,136950,136955,136960],{"__ignoreMap":23},[28,136916,136917],{"class":30,"line":31},[28,136918,136919],{"class":73},"\u002F* 2D 位移 *\u002F\n",[28,136921,136922,136924],{"class":30,"line":77},[28,136923,52088],{"class":51777},[28,136925,16058],{"class":34},[28,136927,136928,136931,136933,136936,136938,136940,136942,136944,136946,136948],{"class":30,"line":114},[28,136929,136930],{"class":38},"  transform",[28,136932,51914],{"class":34},[28,136934,136935],{"class":38},"translate",[28,136937,367],{"class":34},[28,136939,938],{"class":38},[28,136941,51969],{"class":42},[28,136943,12921],{"class":34},[28,136945,1276],{"class":38},[28,136947,51969],{"class":42},[28,136949,3209],{"class":34},[28,136951,136952],{"class":30,"line":128},[28,136953,136954],{"class":73},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[28,136956,136957],{"class":30,"line":393},[28,136958,136959],{"class":73},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[28,136961,136962],{"class":30,"line":409},[28,136963,2055],{"class":34},[14,136965,136966],{},"muted:自动静音属性",[22484,136968,136970],{"id":136969},"_14122-音频标签audio","14.1.2.2 音频标签audio",[588,136972,136973],{},[591,136974,136975],{},"基本使用",[14,136977,136978,136979,136984,136985],{},"当前 ",[780,136980,136981],{},[25,136982,136983],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[780,136986,136987],{},"mp3格式",[420,136989],{"style":126802,"src":136990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[588,136992,136993],{"start":77},[591,136994,136829],{},[18,136996,136997],{"className":127693,"code":136792,"language":127695,"meta":23,"style":23},[25,136998,136999],{"__ignoreMap":23},[28,137000,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019,137021,137023],{"class":30,"line":31},[28,137002,1529],{"class":34},[28,137004,28669],{"class":51777},[28,137006,55716],{"class":2453},[28,137008,83],{"class":34},[28,137010,136807],{"class":735},[28,137012,92900],{"class":2453},[28,137014,136812],{"class":2453},[28,137016,136815],{"class":2453},[28,137018,136818],{"class":2453},[28,137020,55791],{"class":34},[28,137022,28669],{"class":51777},[28,137024,51784],{"class":34},[14,137026,137027],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[588,137029,137030],{"start":114},[591,137031,137032],{},"常用属性",[420,137034],{"style":126802,"src":137035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[18,137037,137038],{"className":127693,"code":136792,"language":127695,"meta":23,"style":23},[25,137039,137040],{"__ignoreMap":23},[28,137041,137042,137044,137046,137048,137050,137052,137054,137056,137058,137060,137062,137064],{"class":30,"line":31},[28,137043,1529],{"class":34},[28,137045,28669],{"class":51777},[28,137047,55716],{"class":2453},[28,137049,83],{"class":34},[28,137051,136807],{"class":735},[28,137053,92900],{"class":2453},[28,137055,136812],{"class":2453},[28,137057,136815],{"class":2453},[28,137059,136818],{"class":2453},[28,137061,55791],{"class":34},[28,137063,28669],{"class":51777},[28,137065,51784],{"class":34},[14,137067,137068],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22484,137070,137072],{"id":137071},"_14123-总结","14.1.2.3 总结",[1626,137074,137075,137078,137081,137084,137087],{},[591,137076,137077],{},"音频标签和视频标签使用方式基本一致",[591,137079,137080],{},"浏览器支持情况不同",[591,137082,137083],{},"谷歌浏览器把音频和视频自动播放禁止了",[591,137085,137086],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[591,137088,137089],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[605,137091,137093],{"id":137092},"_1413-表单元素","14.1.3 表单元素",[22484,137095,137097],{"id":137096},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[420,137099],{"style":126802,"src":137100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[18,137102,137104],{"className":127693,"code":137103,"language":127695,"meta":23,"style":23},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[25,137105,137106],{"__ignoreMap":23},[28,137107,137108,137110,137112,137114,137116,137118,137120,137122,137125,137127,137129,137132],{"class":30,"line":31},[28,137109,1529],{"class":34},[28,137111,54298],{"class":51777},[28,137113,54301],{"class":2453},[28,137115,83],{"class":34},[28,137117,63176],{"class":735},[28,137119,15406],{"class":2453},[28,137121,83],{"class":34},[28,137123,137124],{"class":735},"\"username\"",[28,137126,61497],{"class":2453},[28,137128,83],{"class":34},[28,137130,137131],{"class":735},"\"请输入用户名\"",[28,137133,51784],{"class":34},[420,137135],{"style":126802,"src":137136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22484,137138,137140],{"id":137139},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[420,137142],{"style":126802,"src":137143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137145,137146],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137148,137149],{},"快捷操作：",[420,137151],{"style":126802,"src":137152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137154,137155],{},"例子1：",[18,137157,137159],{"className":127693,"code":137158,"language":127695,"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,137160,137161,137184,137211,137240,137259],{"__ignoreMap":23},[28,137162,137163,137165,137167,137169,137171,137174,137177,137179,137182],{"class":30,"line":31},[28,137164,1529],{"class":34},[28,137166,67102],{"class":51777},[28,137168,67105],{"class":2453},[28,137170,83],{"class":34},[28,137172,137173],{"class":735},"\"\u002Fsubmit\"",[28,137175,137176],{"class":2453}," method",[28,137178,83],{"class":34},[28,137180,137181],{"class":735},"\"post\"",[28,137183,51784],{"class":34},[28,137185,137186,137188,137190,137192,137194,137196,137198,137200,137202,137204,137206,137209],{"class":30,"line":77},[28,137187,52621],{"class":34},[28,137189,54298],{"class":51777},[28,137191,54301],{"class":2453},[28,137193,83],{"class":34},[28,137195,63176],{"class":735},[28,137197,15406],{"class":2453},[28,137199,83],{"class":34},[28,137201,137124],{"class":735},[28,137203,61497],{"class":2453},[28,137205,83],{"class":34},[28,137207,137208],{"class":735},"\"用户名\"",[28,137210,51784],{"class":34},[28,137212,137213,137215,137217,137219,137221,137224,137226,137228,137231,137233,137235,137238],{"class":30,"line":114},[28,137214,52621],{"class":34},[28,137216,54298],{"class":51777},[28,137218,54301],{"class":2453},[28,137220,83],{"class":34},[28,137222,137223],{"class":735},"\"password\"",[28,137225,15406],{"class":2453},[28,137227,83],{"class":34},[28,137229,137230],{"class":735},"\"pwd\"",[28,137232,61497],{"class":2453},[28,137234,83],{"class":34},[28,137236,137237],{"class":735},"\"密码\"",[28,137239,51784],{"class":34},[28,137241,137242,137244,137246,137248,137250,137252,137255,137257],{"class":30,"line":128},[28,137243,52621],{"class":34},[28,137245,54364],{"class":51777},[28,137247,54301],{"class":2453},[28,137249,83],{"class":34},[28,137251,67125],{"class":735},[28,137253,137254],{"class":34},">提交\u003C\u002F",[28,137256,54364],{"class":51777},[28,137258,51784],{"class":34},[28,137260,137261,137263,137265],{"class":30,"line":393},[28,137262,52262],{"class":34},[28,137264,67102],{"class":51777},[28,137266,51784],{"class":34},[420,137268],{"style":126802,"src":137269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137271,137272],{},"value是表单域的内容",[14,137274,137275],{},"例子2：",[18,137277,137278],{"className":127693,"code":137158,"language":127695,"meta":23,"style":23},[25,137279,137280,137300,137326,137352,137370],{"__ignoreMap":23},[28,137281,137282,137284,137286,137288,137290,137292,137294,137296,137298],{"class":30,"line":31},[28,137283,1529],{"class":34},[28,137285,67102],{"class":51777},[28,137287,67105],{"class":2453},[28,137289,83],{"class":34},[28,137291,137173],{"class":735},[28,137293,137176],{"class":2453},[28,137295,83],{"class":34},[28,137297,137181],{"class":735},[28,137299,51784],{"class":34},[28,137301,137302,137304,137306,137308,137310,137312,137314,137316,137318,137320,137322,137324],{"class":30,"line":77},[28,137303,52621],{"class":34},[28,137305,54298],{"class":51777},[28,137307,54301],{"class":2453},[28,137309,83],{"class":34},[28,137311,63176],{"class":735},[28,137313,15406],{"class":2453},[28,137315,83],{"class":34},[28,137317,137124],{"class":735},[28,137319,61497],{"class":2453},[28,137321,83],{"class":34},[28,137323,137208],{"class":735},[28,137325,51784],{"class":34},[28,137327,137328,137330,137332,137334,137336,137338,137340,137342,137344,137346,137348,137350],{"class":30,"line":114},[28,137329,52621],{"class":34},[28,137331,54298],{"class":51777},[28,137333,54301],{"class":2453},[28,137335,83],{"class":34},[28,137337,137223],{"class":735},[28,137339,15406],{"class":2453},[28,137341,83],{"class":34},[28,137343,137230],{"class":735},[28,137345,61497],{"class":2453},[28,137347,83],{"class":34},[28,137349,137237],{"class":735},[28,137351,51784],{"class":34},[28,137353,137354,137356,137358,137360,137362,137364,137366,137368],{"class":30,"line":128},[28,137355,52621],{"class":34},[28,137357,54364],{"class":51777},[28,137359,54301],{"class":2453},[28,137361,83],{"class":34},[28,137363,67125],{"class":735},[28,137365,137254],{"class":34},[28,137367,54364],{"class":51777},[28,137369,51784],{"class":34},[28,137371,137372,137374,137376],{"class":30,"line":393},[28,137373,52262],{"class":34},[28,137375,67102],{"class":51777},[28,137377,51784],{"class":34},[420,137379],{"style":126802,"src":137380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[60,137382,137384],{"id":137383},"_142-css新特性","14.2 CSS新特性",[605,137386,137388],{"id":137387},"_1421-新增选择器","14.2.1 新增选择器",[22484,137390,137392],{"id":137391},"_14211-属性选择器","14.2.1.1 属性选择器",[420,137394],{"style":126802,"src":137395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[18,137397,137399],{"className":126946,"code":137398,"language":126948,"meta":23,"style":23},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[25,137400,137401,137416,137432],{"__ignoreMap":23},[28,137402,137403,137405,137407,137409,137411,137413],{"class":30,"line":31},[28,137404,54298],{"class":51777},[28,137406,35],{"class":34},[28,137408,103501],{"class":2453},[28,137410,83],{"class":42},[28,137412,63176],{"class":735},[28,137414,137415],{"class":34},"] {\n",[28,137417,137418,137420,137422,137424,137426,137428,137430],{"class":30,"line":77},[28,137419,71373],{"class":38},[28,137421,51914],{"class":34},[28,137423,39],{"class":38},[28,137425,51969],{"class":42},[28,137427,51998],{"class":38},[28,137429,130526],{"class":38},[28,137431,1781],{"class":34},[28,137433,137434],{"class":30,"line":114},[28,137435,2055],{"class":34},[420,137437],{"style":126802,"src":137438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137440,665],{},[1626,137442,137443,137446,137449,137452],{},[591,137444,137445],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[591,137447,137448],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[591,137450,137451],{},"属性选择器也可以选择出来自定义的属性",[591,137453,137454,137456],{},[780,137455,9513],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22484,137458,137460],{"id":137459},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[420,137462],{"style":126802,"src":137463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[588,137465,137466],{},[591,137467,137468],{},"fist-child",[18,137470,137472],{"className":126946,"code":137471,"language":126948,"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,137473,137474,137479,137494,137514,137532],{"__ignoreMap":23},[28,137475,137476],{"class":30,"line":31},[28,137477,137478],{"class":73},"\u002F* 属性选择器 *\u002F\n",[28,137480,137481,137483,137485,137487,137489,137491],{"class":30,"line":77},[28,137482,54298],{"class":51777},[28,137484,35],{"class":34},[28,137486,103501],{"class":2453},[28,137488,83],{"class":42},[28,137490,63176],{"class":735},[28,137492,137493],{"class":34},"] { }\n",[28,137495,137496,137498,137500,137502,137505,137508,137511],{"class":30,"line":114},[28,137497,54298],{"class":51777},[28,137499,35],{"class":34},[28,137501,15180],{"class":2453},[28,137503,137504],{"class":42},"^=",[28,137506,137507],{"class":735},"\"icon\"",[28,137509,137510],{"class":34},"] { }  ",[28,137512,137513],{"class":73},"\u002F* 以 icon 开头 *\u002F\n",[28,137515,137516,137518,137520,137522,137525,137527,137529],{"class":30,"line":128},[28,137517,54298],{"class":51777},[28,137519,35],{"class":34},[28,137521,15180],{"class":2453},[28,137523,137524],{"class":42},"$=",[28,137526,137507],{"class":735},[28,137528,137510],{"class":34},[28,137530,137531],{"class":73},"\u002F* 以 icon 结尾 *\u002F\n",[28,137533,137534,137536,137538,137540,137543,137545,137547],{"class":30,"line":393},[28,137535,54298],{"class":51777},[28,137537,35],{"class":34},[28,137539,15180],{"class":2453},[28,137541,137542],{"class":42},"*=",[28,137544,137507],{"class":735},[28,137546,137510],{"class":34},[28,137548,137549],{"class":73},"\u002F* 包含 icon *\u002F\n",[14,137551,137552],{},"ul的第一个儿子文本为红色",[14,137554,137555],{},"一定要在冒号前加空格，不然就是选中所有的了",[18,137557,137559],{"className":126946,"code":137558,"language":126948,"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,137560,137561,137567,137577,137581,137585,137590,137603,137616,137632,137649,137666],{"__ignoreMap":23},[28,137562,137563,137565],{"class":30,"line":31},[28,137564,127237],{"class":2453},[28,137566,16058],{"class":34},[28,137568,137569,137571,137573,137575],{"class":30,"line":77},[28,137570,71382],{"class":38},[28,137572,51914],{"class":34},[28,137574,57898],{"class":38},[28,137576,1781],{"class":34},[28,137578,137579],{"class":30,"line":114},[28,137580,2055],{"class":34},[28,137582,137583],{"class":30,"line":128},[28,137584,136407],{"class":34},[28,137586,137587],{"class":30,"line":393},[28,137588,137589],{"class":73},"\u002F* 结构伪类选择器 *\u002F\n",[28,137591,137592,137594,137597,137600],{"class":30,"line":409},[28,137593,591],{"class":51777},[28,137595,137596],{"class":2453},":first-child",[28,137598,137599],{"class":34}," { }           ",[28,137601,137602],{"class":73},"\u002F* 第一个 *\u002F\n",[28,137604,137605,137607,137610,137613],{"class":30,"line":1711},[28,137606,591],{"class":51777},[28,137608,137609],{"class":2453},":last-child",[28,137611,137612],{"class":34}," { }            ",[28,137614,137615],{"class":73},"\u002F* 最后一个 *\u002F\n",[28,137617,137618,137620,137622,137624,137626,137629],{"class":30,"line":1802},[28,137619,591],{"class":51777},[28,137621,129860],{"class":2453},[28,137623,367],{"class":34},[28,137625,93],{"class":38},[28,137627,137628],{"class":34},") { }          ",[28,137630,137631],{"class":73},"\u002F* 第2个 *\u002F\n",[28,137633,137634,137636,137638,137640,137643,137646],{"class":30,"line":1808},[28,137635,591],{"class":51777},[28,137637,129860],{"class":2453},[28,137639,367],{"class":34},[28,137641,137642],{"class":38},"2n",[28,137644,137645],{"class":34},") { }         ",[28,137647,137648],{"class":73},"\u002F* 偶数 *\u002F\n",[28,137650,137651,137653,137655,137657,137660,137663],{"class":30,"line":1820},[28,137652,591],{"class":51777},[28,137654,129860],{"class":2453},[28,137656,367],{"class":34},[28,137658,137659],{"class":38},"2n+1",[28,137661,137662],{"class":34},") { }       ",[28,137664,137665],{"class":73},"\u002F* 奇数 *\u002F\n",[28,137667,137668,137670,137672,137674,137677,137679],{"class":30,"line":2102},[28,137669,591],{"class":51777},[28,137671,129860],{"class":2453},[28,137673,367],{"class":34},[28,137675,137676],{"class":38},"-n+3",[28,137678,137662],{"class":34},[28,137680,137681],{"class":73},"\u002F* 前3个 *\u002F\n",[52088,137683,137686],{"className":137684},[137685],"example","\n  示例内容\n",[14,137688,137689],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1626,137691,137692],{},[591,137693,137694,137697],{},[25,137695,137696],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137699,137700],{},"也就是说它选择的是熊大",[588,137702,137703],{"start":409},[591,137704,137705],{},"权重",[18,137707,137709],{"className":126946,"code":137708,"language":126948,"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,137710,137711,137715,137725,137735,137749,137763,137777],{"__ignoreMap":23},[28,137712,137713],{"class":30,"line":31},[28,137714,137589],{"class":73},[28,137716,137717,137719,137721,137723],{"class":30,"line":77},[28,137718,591],{"class":51777},[28,137720,137596],{"class":2453},[28,137722,137599],{"class":34},[28,137724,137602],{"class":73},[28,137726,137727,137729,137731,137733],{"class":30,"line":114},[28,137728,591],{"class":51777},[28,137730,137609],{"class":2453},[28,137732,137612],{"class":34},[28,137734,137615],{"class":73},[28,137736,137737,137739,137741,137743,137745,137747],{"class":30,"line":128},[28,137738,591],{"class":51777},[28,137740,129860],{"class":2453},[28,137742,367],{"class":34},[28,137744,93],{"class":38},[28,137746,137628],{"class":34},[28,137748,137631],{"class":73},[28,137750,137751,137753,137755,137757,137759,137761],{"class":30,"line":393},[28,137752,591],{"class":51777},[28,137754,129860],{"class":2453},[28,137756,367],{"class":34},[28,137758,137642],{"class":38},[28,137760,137645],{"class":34},[28,137762,137648],{"class":73},[28,137764,137765,137767,137769,137771,137773,137775],{"class":30,"line":409},[28,137766,591],{"class":51777},[28,137768,129860],{"class":2453},[28,137770,367],{"class":34},[28,137772,137659],{"class":38},[28,137774,137662],{"class":34},[28,137776,137665],{"class":73},[28,137778,137779,137781,137783,137785,137787,137789],{"class":30,"line":1711},[28,137780,591],{"class":51777},[28,137782,129860],{"class":2453},[28,137784,367],{"class":34},[28,137786,137676],{"class":38},[28,137788,137662],{"class":34},[28,137790,137681],{"class":73},[14,137792,137793],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22484,137795,137797],{"id":137796},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137799,137800],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[420,137802],{"style":126802,"src":137803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[588,137805,137806],{},[591,137807,665],{},[1626,137809,137810,137813,137816,137819,137822,137825],{},[591,137811,137812],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[591,137814,137815],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[591,137817,137818],{},"语法： element::before {}",[591,137820,137821],{},"before 和 after 必须有 content 属性",[591,137823,137824],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[591,137826,137827],{},"伪元素选择器和标签选择器一样，权重为 1",[588,137829,137830],{"start":77},[591,137831,137832],{},"实例",[18,137834,137835],{"className":126946,"code":137708,"language":126948,"meta":23,"style":23},[25,137836,137837,137841,137851,137861,137875,137889,137903],{"__ignoreMap":23},[28,137838,137839],{"class":30,"line":31},[28,137840,137589],{"class":73},[28,137842,137843,137845,137847,137849],{"class":30,"line":77},[28,137844,591],{"class":51777},[28,137846,137596],{"class":2453},[28,137848,137599],{"class":34},[28,137850,137602],{"class":73},[28,137852,137853,137855,137857,137859],{"class":30,"line":114},[28,137854,591],{"class":51777},[28,137856,137609],{"class":2453},[28,137858,137612],{"class":34},[28,137860,137615],{"class":73},[28,137862,137863,137865,137867,137869,137871,137873],{"class":30,"line":128},[28,137864,591],{"class":51777},[28,137866,129860],{"class":2453},[28,137868,367],{"class":34},[28,137870,93],{"class":38},[28,137872,137628],{"class":34},[28,137874,137631],{"class":73},[28,137876,137877,137879,137881,137883,137885,137887],{"class":30,"line":393},[28,137878,591],{"class":51777},[28,137880,129860],{"class":2453},[28,137882,367],{"class":34},[28,137884,137642],{"class":38},[28,137886,137645],{"class":34},[28,137888,137648],{"class":73},[28,137890,137891,137893,137895,137897,137899,137901],{"class":30,"line":409},[28,137892,591],{"class":51777},[28,137894,129860],{"class":2453},[28,137896,367],{"class":34},[28,137898,137659],{"class":38},[28,137900,137662],{"class":34},[28,137902,137665],{"class":73},[28,137904,137905,137907,137909,137911,137913,137915],{"class":30,"line":1711},[28,137906,591],{"class":51777},[28,137908,129860],{"class":2453},[28,137910,367],{"class":34},[28,137912,137676],{"class":38},[28,137914,137662],{"class":34},[28,137916,137681],{"class":73},[420,137918],{"style":126802,"src":137919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[588,137921,137922],{"start":114},[591,137923,137924],{},"使用场景1",[420,137926],{"style":126802,"src":137927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137929,137930],{},"不需要再加盒子来整红色那部分了",[18,137932,137934],{"className":126946,"code":137933,"language":126948,"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,137935,137936,137941,137950,137961,137971,137975,137984,137995,138005],{"__ignoreMap":23},[28,137937,137938],{"class":30,"line":31},[28,137939,137940],{"class":73},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[28,137942,137943,137945,137948],{"class":30,"line":77},[28,137944,52088],{"class":51777},[28,137946,137947],{"class":2453},"::before",[28,137949,16058],{"class":34},[28,137951,137952,137955,137957,137959],{"class":30,"line":114},[28,137953,137954],{"class":38},"  content",[28,137956,51914],{"class":34},[28,137958,8140],{"class":735},[28,137960,1781],{"class":34},[28,137962,137963,137965,137967,137969],{"class":30,"line":128},[28,137964,128562],{"class":38},[28,137966,51914],{"class":34},[28,137968,61346],{"class":38},[28,137970,1781],{"class":34},[28,137972,137973],{"class":30,"line":393},[28,137974,2055],{"class":34},[28,137976,137977,137979,137982],{"class":30,"line":409},[28,137978,52088],{"class":51777},[28,137980,137981],{"class":2453},"::after",[28,137983,16058],{"class":34},[28,137985,137986,137988,137990,137993],{"class":30,"line":1711},[28,137987,137954],{"class":38},[28,137989,51914],{"class":34},[28,137991,137992],{"class":735},"\"→\"",[28,137994,1781],{"class":34},[28,137996,137997,137999,138001,138003],{"class":30,"line":1802},[28,137998,71382],{"class":38},[28,138000,51914],{"class":34},[28,138002,62547],{"class":38},[28,138004,1781],{"class":34},[28,138006,138007],{"class":30,"line":1808},[28,138008,2055],{"class":34},[420,138010],{"style":126802,"src":138011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138013,138014],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[420,138016],{"style":126802,"src":138017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138019,138020],{},"但是在引用时需要先转义一下",[14,138022,138023],{},"content='\\e930'",[588,138025,138026],{"start":128},[591,138027,138028],{},"使用场景2",[14,138030,138031],{},"仿土豆效果",[14,138033,138034],{},"通过使用伪元素选择器可以减少body中盒子的数量",[18,138036,138037],{"className":126946,"code":137933,"language":126948,"meta":23,"style":23},[25,138038,138039,138043,138051,138061,138071,138075,138083,138093,138103],{"__ignoreMap":23},[28,138040,138041],{"class":30,"line":31},[28,138042,137940],{"class":73},[28,138044,138045,138047,138049],{"class":30,"line":77},[28,138046,52088],{"class":51777},[28,138048,137947],{"class":2453},[28,138050,16058],{"class":34},[28,138052,138053,138055,138057,138059],{"class":30,"line":114},[28,138054,137954],{"class":38},[28,138056,51914],{"class":34},[28,138058,8140],{"class":735},[28,138060,1781],{"class":34},[28,138062,138063,138065,138067,138069],{"class":30,"line":128},[28,138064,128562],{"class":38},[28,138066,51914],{"class":34},[28,138068,61346],{"class":38},[28,138070,1781],{"class":34},[28,138072,138073],{"class":30,"line":393},[28,138074,2055],{"class":34},[28,138076,138077,138079,138081],{"class":30,"line":409},[28,138078,52088],{"class":51777},[28,138080,137981],{"class":2453},[28,138082,16058],{"class":34},[28,138084,138085,138087,138089,138091],{"class":30,"line":1711},[28,138086,137954],{"class":38},[28,138088,51914],{"class":34},[28,138090,137992],{"class":735},[28,138092,1781],{"class":34},[28,138094,138095,138097,138099,138101],{"class":30,"line":1802},[28,138096,71382],{"class":38},[28,138098,51914],{"class":34},[28,138100,62547],{"class":38},[28,138102,1781],{"class":34},[28,138104,138105],{"class":30,"line":1808},[28,138106,2055],{"class":34},[420,138108],{"style":126802,"src":138109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[588,138111,138112],{"start":393},[591,138113,138114],{},"使用场景3",[14,138116,138117],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[18,138119,138121],{"className":126946,"code":138120,"language":126948,"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,138122,138123,138129,138139,138143,138147,138151,138159,138169,138179,138183,138191,138201,138211],{"__ignoreMap":23},[28,138124,138125,138127],{"class":30,"line":31},[28,138126,130794],{"class":2453},[28,138128,16058],{"class":34},[28,138130,138131,138133,138135,138137],{"class":30,"line":77},[28,138132,131426],{"class":38},[28,138134,51914],{"class":34},[28,138136,24222],{"class":38},[28,138138,1781],{"class":34},[28,138140,138141],{"class":30,"line":114},[28,138142,2055],{"class":34},[28,138144,138145],{"class":30,"line":128},[28,138146,136407],{"class":34},[28,138148,138149],{"class":30,"line":393},[28,138150,137940],{"class":73},[28,138152,138153,138155,138157],{"class":30,"line":409},[28,138154,52088],{"class":51777},[28,138156,137947],{"class":2453},[28,138158,16058],{"class":34},[28,138160,138161,138163,138165,138167],{"class":30,"line":1711},[28,138162,137954],{"class":38},[28,138164,51914],{"class":34},[28,138166,8140],{"class":735},[28,138168,1781],{"class":34},[28,138170,138171,138173,138175,138177],{"class":30,"line":1802},[28,138172,128562],{"class":38},[28,138174,51914],{"class":34},[28,138176,61346],{"class":38},[28,138178,1781],{"class":34},[28,138180,138181],{"class":30,"line":1808},[28,138182,2055],{"class":34},[28,138184,138185,138187,138189],{"class":30,"line":1820},[28,138186,52088],{"class":51777},[28,138188,137981],{"class":2453},[28,138190,16058],{"class":34},[28,138192,138193,138195,138197,138199],{"class":30,"line":2102},[28,138194,137954],{"class":38},[28,138196,51914],{"class":34},[28,138198,137992],{"class":735},[28,138200,1781],{"class":34},[28,138202,138203,138205,138207,138209],{"class":30,"line":2107},[28,138204,71382],{"class":38},[28,138206,51914],{"class":34},[28,138208,62547],{"class":38},[28,138210,1781],{"class":34},[28,138212,138213],{"class":30,"line":2113},[28,138214,2055],{"class":34},[14,138216,138217],{},"div {\nmargin: 0 auto;\n}",[18,138219,138222],{"className":138220,"code":138221,"language":5675},[5673],"\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,138223,138221],{"__ignoreMap":23},[14,138225,138226],{},"如果想让多个元素都发生变化",[14,138228,138229],{},"不能如下操作：",[14,138231,138232],{},"transition: width 2s ease 0.5s;",[14,138234,138235],{},"transition: height 2s ease 0.5s;不对！！！",[14,138237,138238],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138240,138241],{},"使用如下：加逗号隔开",[14,138243,138244],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138246,138247],{},"transition all 2s ease;",[605,138249,138251],{"id":138250},"_1426-过渡练习","14.2.6 过渡练习",[588,138253,138254],{},[591,138255,138256],{},"进度条",[420,138258],{"style":126802,"src":138259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[18,138261,138263],{"className":126946,"code":138262,"language":126948,"meta":23,"style":23},"div {\n  transition: all 0.3s ease;\n}\n",[25,138264,138265,138271,138289],{"__ignoreMap":23},[28,138266,138267,138269],{"class":30,"line":31},[28,138268,52088],{"class":51777},[28,138270,16058],{"class":34},[28,138272,138273,138276,138278,138280,138283,138285,138287],{"class":30,"line":77},[28,138274,138275],{"class":38},"  transition",[28,138277,51914],{"class":34},[28,138279,28607],{"class":38},[28,138281,138282],{"class":38}," 0.3",[28,138284,1315],{"class":42},[28,138286,79157],{"class":38},[28,138288,1781],{"class":34},[28,138290,138291],{"class":30,"line":114},[28,138292,2055],{"class":34},[588,138294,138295],{"start":77},[591,138296,138297],{},"小米logo",[14,138299,138300],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[18,138302,138304],{"className":126946,"code":138303,"language":126948,"meta":23,"style":23},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[25,138305,138306,138311,138317,138333,138338],{"__ignoreMap":23},[28,138307,138308],{"class":30,"line":31},[28,138309,138310],{"class":73},"\u002F* CSS3 过渡 *\u002F\n",[28,138312,138313,138315],{"class":30,"line":77},[28,138314,52088],{"class":51777},[28,138316,16058],{"class":34},[28,138318,138319,138321,138323,138325,138327,138329,138331],{"class":30,"line":114},[28,138320,138275],{"class":38},[28,138322,51914],{"class":34},[28,138324,28607],{"class":38},[28,138326,138282],{"class":38},[28,138328,1315],{"class":42},[28,138330,79157],{"class":38},[28,138332,1781],{"class":34},[28,138334,138335],{"class":30,"line":128},[28,138336,138337],{"class":73},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[28,138339,138340],{"class":30,"line":393},[28,138341,2055],{"class":34},[14,138343,138344],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[547,138346,138347],{},"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":77,"depth":77,"links":138349},[138350,138355],{"id":136680,"depth":77,"text":136681,"children":138351},[138352,138353,138354],{"id":136684,"depth":114,"text":136685},{"id":136761,"depth":114,"text":136762},{"id":137092,"depth":114,"text":137093},{"id":137383,"depth":77,"text":137384,"children":138356},[138357,138358],{"id":137387,"depth":114,"text":137388},{"id":138250,"depth":114,"text":138251},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136672,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138365,"title":138366,"body":138367,"description":559,"extension":560,"meta":140111,"navigation":562,"path":140112,"seo":140113,"stem":140114,"__hash__":140115},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138368,"toc":140092},[138369,138372,138376,138379,138385,138391,138395,138397,138400,138403,138406,138409,138412,138415,138418,138422,138426,138429,138432,138435,138439,138442,138445,138450,138453,138456,138459,138463,138466,138475,138478,138481,138485,138488,138491,138496,138503,138517,138525,138532,138537,138540,138543,138546,138553,138557,138563,138569,138572,138575,138580,138586,138588,138596,138601,138604,138610,138612,138617,138622,138625,138627,138632,138635,138640,138645,138679,138683,138687,138690,138694,138697,138783,138786,138823,138826,138862,138866,138871,138884,138938,138940,138968,138970,138998,139004,139018,139020,139064,139066,139110,139113,139120,139131,139133,139160,139162,139188,139195,139211,139213,139307,139309,139403,139410,139413,139418,139424,139498,139501,139503,139539,139541,139577,139580,139587,139606,139609,139612,139614,139639,139641,139665,139668,139671,139701,139705,139708,139771,139773,139839,139841,139905,139908,139940,139942,139968,139970,139996,139999,140030,140032,140058,140060,140086,140089],[10,138370,138366],{"id":138371},"_15-品优购项目上篇-搭建与公共模块",[60,138373,138375],{"id":138374},"_151-项目规划","15.1 项目规划",[420,138377],{"style":126802,"src":138378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138380,138381,138384],{},[780,138382,138383],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138386,138387,138390],{},[780,138388,138389],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[60,138392,138394],{"id":138393},"_152-项目介绍","15.2 项目介绍",[14,138396,138383],{},[420,138398],{"style":126802,"src":138399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138401,138402],{},"主页：",[420,138404],{"style":126802,"src":138405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138407,138408],{},"列表页：",[420,138410],{"style":126802,"src":138411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138413,138414],{},"注册页：",[420,138416],{"style":126802,"src":138417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[60,138419,138421],{"id":138420},"_153-项目搭建工作","15.3 项目搭建工作",[605,138423,138425],{"id":138424},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[420,138427],{"style":126802,"src":138428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138430,138431],{},"经常更换的图片要放到upload文件夹中",[14,138433,138434],{},"不经常换的放到images文件夹中",[605,138436,138438],{"id":138437},"_1532-创建文件如下","15.3.2 创建文件如下",[420,138440],{"style":126802,"src":138441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[420,138443],{"style":126802,"src":138444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138446,138447],{},[780,138448,138449],{},"初始化样式：",[14,138451,138452],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138454,138455],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138457,138458],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[605,138460,138462],{"id":138461},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138464,138465],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138467,138468,138469,138474],{},"这里最典型的应用就是 ",[780,138470,138471],{},[25,138472,138473],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[420,138476],{"style":126802,"src":138477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138479,138480],{},"通过link方法来引入",[605,138482,138484],{"id":138483},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[420,138486],{"style":126802,"src":138487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138489,138490],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[588,138492,138493],{},[591,138494,138495],{},"制作favicon图标",[14,138497,138498,138499,138502],{},"①把品优购图标切成 ",[25,138500,138501],{},"png"," 图片",[14,138504,138505,138506,138508,138509,138512,138513],{},"②把 ",[25,138507,138501],{}," 图片转换为 ",[25,138510,138511],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[80,138514,138515],{"href":138515,"rel":138516},"http:\u002F\u002Fwww.bitbug.net\u002F",[24351],[588,138518,138519,138522],{"start":77},[591,138520,138521],{},"favicon图标放到网站根目录下",[591,138523,138524],{},"HTML页面引入favicon",[14,138526,138527,138528,138531],{},"在html 页面里面的 ",[25,138529,138530],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138533,138534],{},[25,138535,138536],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138538,138539],{},"复制这行代码或者在生成这个的网站进行复制",[420,138541],{"style":126802,"src":138542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138544,138545],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138547,138548,138549],{},"例如:",[80,138550,138551],{"href":138551,"rel":138552},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24351],[605,138554,138556],{"id":138555},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138558,138559,138562],{},[780,138560,138561],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138564,138565,138568],{},[780,138566,138567],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138570,138571],{},"页面必须有三个标签用来符合 SEO 优化",[420,138573],{"style":126802,"src":138574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[588,138576,138577],{},[591,138578,138579],{},"title网站标题",[14,138581,138582,138585],{},[780,138583,138584],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138587,69267],{},[1626,138589,138590,138593],{},[591,138591,138592],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[591,138594,138595],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[588,138597,138598],{"start":77},[591,138599,138600],{},"description网站描述",[14,138602,138603],{},"简要说明我们网站主要是做什么的",[14,138605,138606,138609],{},[780,138607,138608],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138611,69267],{},[14,138613,138614],{},[25,138615,138616],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[588,138618,138619],{"start":114},[591,138620,138621],{},"keywords关键词",[14,138623,138624],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138626,69267],{},[14,138628,138629],{},[25,138630,138631],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138633,138634],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138636,138637],{},[780,138638,138639],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[588,138641,138642],{"start":128},[591,138643,138644],{},"代码总结",[18,138646,138647],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,138648,138649,138653,138667,138671],{"__ignoreMap":23},[28,138650,138651],{"class":30,"line":31},[28,138652,131057],{"class":73},[28,138654,138655,138657,138659,138661,138663,138665],{"class":30,"line":77},[28,138656,1529],{"class":34},[28,138658,52088],{"class":51777},[28,138660,53963],{"class":2453},[28,138662,83],{"class":34},[28,138664,131070],{"class":735},[28,138666,51784],{"class":34},[28,138668,138669],{"class":30,"line":114},[28,138670,131077],{"class":34},[28,138672,138673,138675,138677],{"class":30,"line":128},[28,138674,52262],{"class":34},[28,138676,52088],{"class":51777},[28,138678,51784],{"class":34},[60,138680,138682],{"id":138681},"_154-项目公共部分制作","15.4 项目公共部分制作",[605,138684,138686],{"id":138685},"_1541-常用模块类命名","15.4.1 常用模块类命名",[420,138688],{"style":126802,"src":138689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[605,138691,138693],{"id":138692},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138695,138696],{},"布局思路：",[1626,138698,138699,138702,138705,138727,138760],{},[591,138700,138701],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[591,138703,138704],{},"里面包含版心的盒子",[591,138706,138707,138708],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1626,138709,138710,138718,138724],{},[591,138711,138712,138713,21986,138715,138717],{},"1 号盒子 里面包含一个",[25,138714,1626],{},[25,138716,1626],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[591,138719,138720,138721,138723],{},"里面的内容是水平排列，所以需要给",[25,138722,591],{},"设置浮动",[591,138725,138726],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[591,138728,138729,138730],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1626,138731,138732,138746,138751],{},[591,138733,138734,138735,21986,138737,138739,138740,138742,138743,138745],{},"2 号盒子 里面包含一个",[25,138736,1626],{},[25,138738,1626],{},"包裹",[25,138741,591],{},"，中间的",[25,138744,1540],{},"可以用样式去设置，也可以用字符 |",[591,138747,138748,138749,138723],{},"里面内容水平排列，给",[25,138750,591],{},[591,138752,138753,138754,138756,138757,138759],{},"找到里面所有偶数的 ",[25,138755,591],{}," 设置样式（偶数的 ",[25,138758,591],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[591,138761,138762,138763],{},"需要用到字体图标",[1626,138764,138765,138771,138774,138777,138780],{},[591,138766,138767,138768],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[25,138769,138770],{},"arrow-icon",[591,138772,138773],{},"先要引入字体图片的资源",[591,138775,138776],{},"在样式里面利用 font-face 来进行声明",[591,138778,138779],{},"在伪元素的 content属性设置 图标的编码",[591,138781,138782],{},"给伪元素设置font-family属性",[14,138784,138785],{},"结构实例代码：",[18,138787,138789],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},"div::before {\n  content: \"\";\n  display: block;\n}\n",[25,138790,138791,138799,138809,138819],{"__ignoreMap":23},[28,138792,138793,138795,138797],{"class":30,"line":31},[28,138794,52088],{"class":51777},[28,138796,137947],{"class":2453},[28,138798,16058],{"class":34},[28,138800,138801,138803,138805,138807],{"class":30,"line":77},[28,138802,137954],{"class":38},[28,138804,51914],{"class":34},[28,138806,8140],{"class":735},[28,138808,1781],{"class":34},[28,138810,138811,138813,138815,138817],{"class":30,"line":114},[28,138812,128562],{"class":38},[28,138814,51914],{"class":34},[28,138816,61346],{"class":38},[28,138818,1781],{"class":34},[28,138820,138821],{"class":30,"line":128},[28,138822,2055],{"class":34},[14,138824,138825],{},"样式实例代码：",[18,138827,138828],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,138829,138830,138838,138848,138858],{"__ignoreMap":23},[28,138831,138832,138834,138836],{"class":30,"line":31},[28,138833,52088],{"class":51777},[28,138835,137947],{"class":2453},[28,138837,16058],{"class":34},[28,138839,138840,138842,138844,138846],{"class":30,"line":77},[28,138841,137954],{"class":38},[28,138843,51914],{"class":34},[28,138845,8140],{"class":735},[28,138847,1781],{"class":34},[28,138849,138850,138852,138854,138856],{"class":30,"line":114},[28,138851,128562],{"class":38},[28,138853,51914],{"class":34},[28,138855,61346],{"class":38},[28,138857,1781],{"class":34},[28,138859,138860],{"class":30,"line":128},[28,138861,2055],{"class":34},[605,138863,138865],{"id":138864},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1626,138867,138868],{},[591,138869,138870],{},"header 盒子必须要有高度",[14,138872,138873,138874,138876,138877],{},"1 号盒子是 ",[25,138875,131958],{}," 标志定位，在正常开发过程中， ",[780,138878,138879,138880,138883],{},"logo的布局其实是有讲究的，需要进行 ",[25,138881,138882],{},"logoSEO","的优化 （★★★）",[1626,138885,138886,138894,138902,138929],{},[591,138887,138888,138890,138891,138893],{},[25,138889,131958],{}," 里面首先放一个 ",[25,138892,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[591,138895,138896,138898,138899,138901],{},[25,138897,10],{}," 里面再放一个链接，可以返回首页的，把 ",[25,138900,131958],{}," 的背景图片给链接即可",[591,138903,138904,138905],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1626,138906,138907,138922],{},[591,138908,138909,138910,138913,138914,138917,138918,138921],{},"方法1：",[25,138911,138912],{},"text-indent"," 移到盒子外面（",[25,138915,138916],{},"text-indent: -9999px",") ，然后 ",[25,138919,138920],{},"overflow:hidden"," ，淘宝的做法",[591,138923,138924,138925,138928],{},"方法2：直接给 ",[25,138926,138927],{},"font-size: 0;"," 就看不到文字了，京东的做法",[591,138930,138931,138932,138934,138935,138937],{},"最后给链接一个 ",[25,138933,51884],{}," 属性，这样鼠标放到 ",[25,138936,131958],{}," 上就可以看到提示文字了",[14,138939,138785],{},[18,138941,138942],{"className":127693,"code":132179,"language":127695,"meta":23,"style":23},[25,138943,138944],{"__ignoreMap":23},[28,138945,138946,138948,138950,138952,138954,138956,138958,138960,138962,138964,138966],{"class":30,"line":31},[28,138947,1529],{"class":34},[28,138949,80],{"class":51777},[28,138951,61534],{"class":2453},[28,138953,83],{"class":34},[28,138955,132194],{"class":735},[28,138957,132197],{"class":2453},[28,138959,83],{"class":34},[28,138961,132202],{"class":735},[28,138963,132205],{"class":34},[28,138965,80],{"class":51777},[28,138967,51784],{"class":34},[14,138969,138825],{},[18,138971,138972],{"className":127693,"code":132179,"language":127695,"meta":23,"style":23},[25,138973,138974],{"__ignoreMap":23},[28,138975,138976,138978,138980,138982,138984,138986,138988,138990,138992,138994,138996],{"class":30,"line":31},[28,138977,1529],{"class":34},[28,138979,80],{"class":51777},[28,138981,61534],{"class":2453},[28,138983,83],{"class":34},[28,138985,132194],{"class":735},[28,138987,132197],{"class":2453},[28,138989,83],{"class":34},[28,138991,132202],{"class":735},[28,138993,132205],{"class":34},[28,138995,80],{"class":51777},[28,138997,51784],{"class":34},[14,138999,139000,139001,139003],{},"2 号盒子是 ",[25,139002,131971],{}," 搜索模块定位",[1626,139005,139006,139009,139012,139015],{},[591,139007,139008],{},"search盒子利用定位的方式放在对应的位置",[591,139010,139011],{},"search盒子设置绝对定位，header盒子设置相对定位",[591,139013,139014],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[591,139016,139017],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139019,138785],{},[18,139021,139022],{"className":126946,"code":132266,"language":126948,"meta":23,"style":23},[25,139023,139024,139046,139050,139060],{"__ignoreMap":23},[28,139025,139026,139028,139030,139032,139034,139036,139038,139040,139042,139044],{"class":30,"line":31},[28,139027,52088],{"class":51777},[28,139029,12921],{"class":34},[28,139031,14],{"class":51777},[28,139033,12921],{"class":34},[28,139035,10],{"class":51777},[28,139037,12921],{"class":34},[28,139039,1626],{"class":51777},[28,139041,12921],{"class":34},[28,139043,591],{"class":51777},[28,139045,16058],{"class":34},[28,139047,139048],{"class":30,"line":77},[28,139049,132295],{"class":73},[28,139051,139052,139054,139056,139058],{"class":30,"line":114},[28,139053,128562],{"class":38},[28,139055,51914],{"class":34},[28,139057,61346],{"class":38},[28,139059,1781],{"class":34},[28,139061,139062],{"class":30,"line":128},[28,139063,2055],{"class":34},[14,139065,138825],{},[18,139067,139068],{"className":126946,"code":132266,"language":126948,"meta":23,"style":23},[25,139069,139070,139092,139096,139106],{"__ignoreMap":23},[28,139071,139072,139074,139076,139078,139080,139082,139084,139086,139088,139090],{"class":30,"line":31},[28,139073,52088],{"class":51777},[28,139075,12921],{"class":34},[28,139077,14],{"class":51777},[28,139079,12921],{"class":34},[28,139081,10],{"class":51777},[28,139083,12921],{"class":34},[28,139085,1626],{"class":51777},[28,139087,12921],{"class":34},[28,139089,591],{"class":51777},[28,139091,16058],{"class":34},[28,139093,139094],{"class":30,"line":77},[28,139095,132295],{"class":73},[28,139097,139098,139100,139102,139104],{"class":30,"line":114},[28,139099,128562],{"class":38},[28,139101,51914],{"class":34},[28,139103,61346],{"class":38},[28,139105,1781],{"class":34},[28,139107,139108],{"class":30,"line":128},[28,139109,2055],{"class":34},[14,139111,139112],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139114,139115,139116,139119],{},"3 号盒子是 ",[25,139117,139118],{},"hotwords"," 热词模块定位",[1626,139121,139122,139125,139128],{},[591,139123,139124],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[591,139126,139127],{},"给里面所有的a标签设置 左右10px的外边距",[591,139129,139130],{},"给第一个a标签设置文字变红色（#c81623）",[14,139132,138785],{},[18,139134,139136],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},"div {\n  margin: 0 auto;\n}\n",[25,139137,139138,139144,139156],{"__ignoreMap":23},[28,139139,139140,139142],{"class":30,"line":31},[28,139141,52088],{"class":51777},[28,139143,16058],{"class":34},[28,139145,139146,139148,139150,139152,139154],{"class":30,"line":77},[28,139147,70947],{"class":38},[28,139149,51914],{"class":34},[28,139151,822],{"class":38},[28,139153,52033],{"class":38},[28,139155,1781],{"class":34},[28,139157,139158],{"class":30,"line":114},[28,139159,2055],{"class":34},[14,139161,138825],{},[18,139163,139164],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,139165,139166,139172,139184],{"__ignoreMap":23},[28,139167,139168,139170],{"class":30,"line":31},[28,139169,52088],{"class":51777},[28,139171,16058],{"class":34},[28,139173,139174,139176,139178,139180,139182],{"class":30,"line":77},[28,139175,70947],{"class":38},[28,139177,51914],{"class":34},[28,139179,822],{"class":38},[28,139181,52033],{"class":38},[28,139183,1781],{"class":34},[28,139185,139186],{"class":30,"line":114},[28,139187,2055],{"class":34},[14,139189,139190,139191,139194],{},"4 号盒子是 ",[25,139192,139193],{},"shopcar"," 购物车模块",[1626,139196,139197,139202,139205,139208],{},[591,139198,123729,139199,139201],{},[25,139200,139193],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[591,139203,139204],{},"count 统计部分用绝对定位做",[591,139206,139207],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[591,139209,139210],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139212,138785],{},[18,139214,139215],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,139216,139217,139221,139235,139239,139253,139257,139271,139275,139289,139293],{"__ignoreMap":23},[28,139218,139219],{"class":30,"line":31},[28,139220,132385],{"class":73},[28,139222,139223,139225,139227,139229,139231,139233],{"class":30,"line":77},[28,139224,132390],{"class":2453},[28,139226,80284],{"class":34},[28,139228,129306],{"class":38},[28,139230,51914],{"class":34},[28,139232,132399],{"class":38},[28,139234,129876],{"class":34},[28,139236,139237],{"class":30,"line":114},[28,139238,132406],{"class":73},[28,139240,139241,139243,139245,139247,139249,139251],{"class":30,"line":128},[28,139242,132411],{"class":2453},[28,139244,80284],{"class":34},[28,139246,129306],{"class":38},[28,139248,51914],{"class":34},[28,139250,55241],{"class":38},[28,139252,129876],{"class":34},[28,139254,139255],{"class":30,"line":393},[28,139256,132426],{"class":73},[28,139258,139259,139261,139263,139265,139267,139269],{"class":30,"line":409},[28,139260,132431],{"class":2453},[28,139262,80284],{"class":34},[28,139264,129306],{"class":38},[28,139266,51914],{"class":34},[28,139268,55308],{"class":38},[28,139270,129876],{"class":34},[28,139272,139273],{"class":30,"line":1711},[28,139274,132446],{"class":73},[28,139276,139277,139279,139281,139283,139285,139287],{"class":30,"line":1802},[28,139278,132451],{"class":2453},[28,139280,80284],{"class":34},[28,139282,129306],{"class":38},[28,139284,51914],{"class":34},[28,139286,86710],{"class":38},[28,139288,129876],{"class":34},[28,139290,139291],{"class":30,"line":1808},[28,139292,132466],{"class":73},[28,139294,139295,139297,139299,139301,139303,139305],{"class":30,"line":1820},[28,139296,132471],{"class":2453},[28,139298,80284],{"class":34},[28,139300,129306],{"class":38},[28,139302,51914],{"class":34},[28,139304,132480],{"class":38},[28,139306,129876],{"class":34},[14,139308,138825],{},[18,139310,139311],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,139312,139313,139317,139331,139335,139349,139353,139367,139371,139385,139389],{"__ignoreMap":23},[28,139314,139315],{"class":30,"line":31},[28,139316,132385],{"class":73},[28,139318,139319,139321,139323,139325,139327,139329],{"class":30,"line":77},[28,139320,132390],{"class":2453},[28,139322,80284],{"class":34},[28,139324,129306],{"class":38},[28,139326,51914],{"class":34},[28,139328,132399],{"class":38},[28,139330,129876],{"class":34},[28,139332,139333],{"class":30,"line":114},[28,139334,132406],{"class":73},[28,139336,139337,139339,139341,139343,139345,139347],{"class":30,"line":128},[28,139338,132411],{"class":2453},[28,139340,80284],{"class":34},[28,139342,129306],{"class":38},[28,139344,51914],{"class":34},[28,139346,55241],{"class":38},[28,139348,129876],{"class":34},[28,139350,139351],{"class":30,"line":393},[28,139352,132426],{"class":73},[28,139354,139355,139357,139359,139361,139363,139365],{"class":30,"line":409},[28,139356,132431],{"class":2453},[28,139358,80284],{"class":34},[28,139360,129306],{"class":38},[28,139362,51914],{"class":34},[28,139364,55308],{"class":38},[28,139366,129876],{"class":34},[28,139368,139369],{"class":30,"line":1711},[28,139370,132446],{"class":73},[28,139372,139373,139375,139377,139379,139381,139383],{"class":30,"line":1802},[28,139374,132451],{"class":2453},[28,139376,80284],{"class":34},[28,139378,129306],{"class":38},[28,139380,51914],{"class":34},[28,139382,86710],{"class":38},[28,139384,129876],{"class":34},[28,139386,139387],{"class":30,"line":1808},[28,139388,132466],{"class":73},[28,139390,139391,139393,139395,139397,139399,139401],{"class":30,"line":1820},[28,139392,132471],{"class":2453},[28,139394,80284],{"class":34},[28,139396,129306],{"class":38},[28,139398,51914],{"class":34},[28,139400,132480],{"class":38},[28,139402,129876],{"class":34},[605,139404,139406,139407,139409],{"id":139405},"_1544-nav导航模块制作","15.4.4 ",[25,139408,54190],{},"导航模块制作",[420,139411],{"style":126802,"src":139412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139414,139415,139417],{},[25,139416,54190],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139419,139420,139421],{},"1 号盒子左侧浮动，",[25,139422,139423],{},"dropdown",[1626,139425,139426,139436,139444,139450,139458,139468,139476,139487],{},[591,139427,139428,139429,101412,139432,139435],{},"1号盒子有讲究，根据相关性 里面包含 ",[25,139430,139431],{},".dt",[25,139433,139434],{},".dd"," 两个盒子",[591,139437,139438,139440,139441,139443],{},[25,139439,139431],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[25,139442,139434],{}," 挤到下面去了",[591,139445,139446,139447,139449],{},"给 ",[25,139448,139434],{}," 盒子设置宽度 和 高度，以及背景颜色",[591,139451,139446,139452,139454,139455,120631],{},[25,139453,139434],{}," 盒子里面定义 无序列表 （",[25,139456,139457],{},"ul > li > a",[591,139459,139460,139461,139463,139464,139467],{},"每个 ",[25,139462,591],{}," 都有一个高度（",[25,139465,139466],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[591,139469,139446,139470,139472,139473,120631],{},[25,139471,591],{}," 里面的a设置文字大小（",[25,139474,139475],{},"14px",[591,139477,139446,139478,139480,139481,139483,139484,139486],{},[25,139479,591],{}," 设置 ",[25,139482,128107],{},"，当鼠标移入的时候，让",[25,139485,591],{},"的背景变成白色，让里面的文字变成红色",[591,139488,139489,139491,139492,139494,139495,139497],{},[25,139490,591],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[25,139493,591],{},"的右侧，那么给",[25,139496,591],{},"设置相对定位",[14,139499,139500],{},"一定要注意相关性",[14,139502,138785],{},[18,139504,139505],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,139506,139507,139515,139525,139535],{"__ignoreMap":23},[28,139508,139509,139511,139513],{"class":30,"line":31},[28,139510,52088],{"class":51777},[28,139512,137947],{"class":2453},[28,139514,16058],{"class":34},[28,139516,139517,139519,139521,139523],{"class":30,"line":77},[28,139518,137954],{"class":38},[28,139520,51914],{"class":34},[28,139522,8140],{"class":735},[28,139524,1781],{"class":34},[28,139526,139527,139529,139531,139533],{"class":30,"line":114},[28,139528,128562],{"class":38},[28,139530,51914],{"class":34},[28,139532,61346],{"class":38},[28,139534,1781],{"class":34},[28,139536,139537],{"class":30,"line":128},[28,139538,2055],{"class":34},[14,139540,138825],{},[18,139542,139543],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,139544,139545,139553,139563,139573],{"__ignoreMap":23},[28,139546,139547,139549,139551],{"class":30,"line":31},[28,139548,52088],{"class":51777},[28,139550,137947],{"class":2453},[28,139552,16058],{"class":34},[28,139554,139555,139557,139559,139561],{"class":30,"line":77},[28,139556,137954],{"class":38},[28,139558,51914],{"class":34},[28,139560,8140],{"class":735},[28,139562,1781],{"class":34},[28,139564,139565,139567,139569,139571],{"class":30,"line":114},[28,139566,128562],{"class":38},[28,139568,51914],{"class":34},[28,139570,61346],{"class":38},[28,139572,1781],{"class":34},[28,139574,139575],{"class":30,"line":128},[28,139576,2055],{"class":34},[14,139578,139579],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139581,139582,139583,139586],{},"2 号盒子左侧浮动，",[25,139584,139585],{},"navitems"," 导航栏组",[1626,139588,139589,139594,139603],{},[591,139590,139591,139592],{},"里面结构是 ",[25,139593,139457],{},[591,139595,139596,139597,139599,139600,139602],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[25,139598,80],{},"左右的",[25,139601,31364],{},"把两侧撑开",[591,139604,139605],{},"让文字垂直居中（行高等于高度）",[420,139607],{"style":126802,"src":139608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139610,139611],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139613,138785],{},[18,139615,139617],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},".box {\n  float: left;\n}\n",[25,139618,139619,139625,139635],{"__ignoreMap":23},[28,139620,139621,139623],{"class":30,"line":31},[28,139622,130794],{"class":2453},[28,139624,16058],{"class":34},[28,139626,139627,139629,139631,139633],{"class":30,"line":77},[28,139628,131426],{"class":38},[28,139630,51914],{"class":34},[28,139632,24222],{"class":38},[28,139634,1781],{"class":34},[28,139636,139637],{"class":30,"line":114},[28,139638,2055],{"class":34},[14,139640,138825],{},[18,139642,139643],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,139644,139645,139651,139661],{"__ignoreMap":23},[28,139646,139647,139649],{"class":30,"line":31},[28,139648,130794],{"class":2453},[28,139650,16058],{"class":34},[28,139652,139653,139655,139657,139659],{"class":30,"line":77},[28,139654,131426],{"class":38},[28,139656,51914],{"class":34},[28,139658,24222],{"class":38},[28,139660,1781],{"class":34},[28,139662,139663],{"class":30,"line":114},[28,139664,2055],{"class":34},[14,139666,139667],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[420,139669],{"style":126802,"src":139670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[18,139672,139673],{"className":126946,"code":131103,"language":126948,"meta":23,"style":23},[25,139674,139675,139681,139697],{"__ignoreMap":23},[28,139676,139677,139679],{"class":30,"line":31},[28,139678,52088],{"class":51777},[28,139680,16058],{"class":34},[28,139682,139683,139685,139687,139689,139691,139693,139695],{"class":30,"line":77},[28,139684,71373],{"class":38},[28,139686,51914],{"class":34},[28,139688,39],{"class":38},[28,139690,51969],{"class":42},[28,139692,51998],{"class":38},[28,139694,130338],{"class":38},[28,139696,1781],{"class":34},[28,139698,139699],{"class":30,"line":114},[28,139700,2055],{"class":34},[605,139702,139704],{"id":139703},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[420,139706],{"style":126802,"src":139707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1626,139709,139710,139715,139720],{},[591,139711,139712,139714],{},[25,139713,132149],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[591,139716,139717,139719],{},[25,139718,132149],{}," 里面有一个大的版心",[591,139721,139722,139723,139726,139727],{},"版心里面包含 1 号盒子，",[25,139724,139725],{},"mod_service"," 是服务模块，mod 是模块的意思",[1626,139728,139729,139734,139747,139763,139768],{},[591,139730,139446,139731,139733],{},[25,139732,139725],{}," 设置高度（80px）和下边框",[591,139735,139736,139737,139740,139741,139743,139744,139746],{},"在里面定义 ",[25,139738,139739],{},"ul > li"," ,每个",[25,139742,591],{}," 宽度是300px 高度是 50px，给每个",[25,139745,591],{},"设置35px的左内边距",[591,139748,139749,139750,139752,139753,139755,139756,139758,139759,18896,139761,120631],{},"在每个",[25,139751,591],{},"里面，放一个 ",[25,139754,23396],{},"（里面放图标），一个",[25,139757,52088],{},"（里面放",[25,139760,52088],{},[25,139762,14],{},[591,139764,139446,139765,139767],{},[25,139766,23396],{},"设置浮动，让h5与这个div左右排列",[591,139769,139770],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139772,138785],{},[18,139774,139776],{"className":126946,"code":139775,"language":126948,"meta":23,"style":23},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[25,139777,139778,139784,139796,139808,139835],{"__ignoreMap":23},[28,139779,139780,139782],{"class":30,"line":31},[28,139781,134703],{"class":2453},[28,139783,16058],{"class":34},[28,139785,139786,139788,139790,139792,139794],{"class":30,"line":77},[28,139787,71045],{"class":38},[28,139789,51914],{"class":34},[28,139791,1320],{"class":38},[28,139793,51969],{"class":42},[28,139795,1781],{"class":34},[28,139797,139798,139800,139802,139804,139806],{"class":30,"line":114},[28,139799,71265],{"class":38},[28,139801,51914],{"class":34},[28,139803,1320],{"class":38},[28,139805,51969],{"class":42},[28,139807,1781],{"class":34},[28,139809,139810,139812,139814,139816,139818,139820,139822,139824,139827,139829,139831,139833],{"class":30,"line":128},[28,139811,71088],{"class":38},[28,139813,51914],{"class":34},[28,139815,62203],{"class":38},[28,139817,367],{"class":34},[28,139819,134742],{"class":5704},[28,139821,14200],{"class":34},[28,139823,62213],{"class":38},[28,139825,139826],{"class":38}," -10",[28,139828,51969],{"class":42},[28,139830,134761],{"class":38},[28,139832,51969],{"class":42},[28,139834,1781],{"class":34},[28,139836,139837],{"class":30,"line":393},[28,139838,2055],{"class":34},[14,139840,138825],{},[18,139842,139843],{"className":126946,"code":139775,"language":126948,"meta":23,"style":23},[25,139844,139845,139851,139863,139875,139901],{"__ignoreMap":23},[28,139846,139847,139849],{"class":30,"line":31},[28,139848,134703],{"class":2453},[28,139850,16058],{"class":34},[28,139852,139853,139855,139857,139859,139861],{"class":30,"line":77},[28,139854,71045],{"class":38},[28,139856,51914],{"class":34},[28,139858,1320],{"class":38},[28,139860,51969],{"class":42},[28,139862,1781],{"class":34},[28,139864,139865,139867,139869,139871,139873],{"class":30,"line":114},[28,139866,71265],{"class":38},[28,139868,51914],{"class":34},[28,139870,1320],{"class":38},[28,139872,51969],{"class":42},[28,139874,1781],{"class":34},[28,139876,139877,139879,139881,139883,139885,139887,139889,139891,139893,139895,139897,139899],{"class":30,"line":128},[28,139878,71088],{"class":38},[28,139880,51914],{"class":34},[28,139882,62203],{"class":38},[28,139884,367],{"class":34},[28,139886,134742],{"class":5704},[28,139888,14200],{"class":34},[28,139890,62213],{"class":38},[28,139892,139826],{"class":38},[28,139894,51969],{"class":42},[28,139896,134761],{"class":38},[28,139898,51969],{"class":42},[28,139900,1781],{"class":34},[28,139902,139903],{"class":30,"line":393},[28,139904,2055],{"class":34},[14,139906,139907],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1626,139909,139910,139913,139919,139925,139937],{},[591,139911,139912],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[591,139914,139915,139916,120631],{},"里面的布局利用 自定义列表来实现（",[25,139917,139918],{},"dl > dt + dd",[591,139920,139446,139921,139924],{},[25,139922,139923],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[591,139926,139446,139927,139930,139931,18896,139933,139936],{},[25,139928,139929],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[25,139932,139929],{},[25,139934,139935],{},"dd","之间有些距离",[591,139938,139939],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139941,138785],{},[18,139943,139944],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,139945,139946,139952,139964],{"__ignoreMap":23},[28,139947,139948,139950],{"class":30,"line":31},[28,139949,52088],{"class":51777},[28,139951,16058],{"class":34},[28,139953,139954,139956,139958,139960,139962],{"class":30,"line":77},[28,139955,70947],{"class":38},[28,139957,51914],{"class":34},[28,139959,822],{"class":38},[28,139961,52033],{"class":38},[28,139963,1781],{"class":34},[28,139965,139966],{"class":30,"line":114},[28,139967,2055],{"class":34},[14,139969,138825],{},[18,139971,139972],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,139973,139974,139980,139992],{"__ignoreMap":23},[28,139975,139976,139978],{"class":30,"line":31},[28,139977,52088],{"class":51777},[28,139979,16058],{"class":34},[28,139981,139982,139984,139986,139988,139990],{"class":30,"line":77},[28,139983,70947],{"class":38},[28,139985,51914],{"class":34},[28,139987,822],{"class":38},[28,139989,52033],{"class":38},[28,139991,1781],{"class":34},[28,139993,139994],{"class":30,"line":114},[28,139995,2055],{"class":34},[14,139997,139998],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1626,140000,140001,140010,140013,140024],{},[591,140002,140003,140004,140006,140007,140009],{},"分为上下两块，上面是 ",[25,140005,132166],{}," 友情链接，下面是 ",[25,140008,132159],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[591,140011,140012],{},"把内容分别复制到相应模块中",[591,140014,139446,140015,140017,140018,140020,140021,140023],{},[25,140016,132166],{}," 设置 15px 的下外边距，给",[25,140019,132166],{}," 里面 的 ",[25,140022,80],{}," 标签设置 左右 3px 的外边距",[591,140025,140026,140027,140029],{},"给",[25,140028,132159],{}," 设置 20px 的行高",[14,140031,138785],{},[18,140033,140034],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,140035,140036,140042,140054],{"__ignoreMap":23},[28,140037,140038,140040],{"class":30,"line":31},[28,140039,52088],{"class":51777},[28,140041,16058],{"class":34},[28,140043,140044,140046,140048,140050,140052],{"class":30,"line":77},[28,140045,70947],{"class":38},[28,140047,51914],{"class":34},[28,140049,822],{"class":38},[28,140051,52033],{"class":38},[28,140053,1781],{"class":34},[28,140055,140056],{"class":30,"line":114},[28,140057,2055],{"class":34},[14,140059,138825],{},[18,140061,140062],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,140063,140064,140070,140082],{"__ignoreMap":23},[28,140065,140066,140068],{"class":30,"line":31},[28,140067,52088],{"class":51777},[28,140069,16058],{"class":34},[28,140071,140072,140074,140076,140078,140080],{"class":30,"line":77},[28,140073,70947],{"class":38},[28,140075,51914],{"class":34},[28,140077,822],{"class":38},[28,140079,52033],{"class":38},[28,140081,1781],{"class":34},[28,140083,140084],{"class":30,"line":114},[28,140085,2055],{"class":34},[14,140087,140088],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[547,140090,140091],{},"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":77,"depth":77,"links":140093},[140094,140095,140096,140103],{"id":138374,"depth":77,"text":138375},{"id":138393,"depth":77,"text":138394},{"id":138420,"depth":77,"text":138421,"children":140097},[140098,140099,140100,140101,140102],{"id":138424,"depth":114,"text":138425},{"id":138437,"depth":114,"text":138438},{"id":138461,"depth":114,"text":138462},{"id":138483,"depth":114,"text":138484},{"id":138555,"depth":114,"text":138556},{"id":138681,"depth":77,"text":138682,"children":140104},[140105,140106,140107,140108,140110],{"id":138685,"depth":114,"text":138686},{"id":138692,"depth":114,"text":138693},{"id":138864,"depth":114,"text":138865},{"id":139405,"depth":114,"text":140109},"15.4.4 nav导航模块制作",{"id":139703,"depth":114,"text":139704},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138366,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140117,"title":140118,"body":140119,"description":559,"extension":560,"meta":142521,"navigation":562,"path":142522,"seo":142523,"stem":142524,"__hash__":142525},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140120,"toc":142498},[140121,140124,140128,140132,140144,140147,140150,140153,140164,140166,140190,140192,140216,140221,140224,140226,140262,140264,140300,140303,140308,140311,140314,140317,140347,140354,140357,140367,140369,140403,140406,140440,140446,140463,140465,140501,140503,140539,140544,140569,140571,140597,140599,140623,140630,140633,140697,140699,140741,140743,140783,140790,140795,140797,140827,140829,140859,140863,140866,140873,140885,140887,140913,140915,140939,140942,140944,140968,140974,140984,140986,141016,141018,141048,141055,141096,141098,141134,141136,141172,141176,141179,141182,141185,141191,141196,141199,141222,141225,141249,141252,141276,141281,141284,141287,141290,141293,141296,141370,141372,141402,141404,141434,141437,141440,141472,141476,141480,141494,141503,141506,141511,141513,141607,141609,141703,141726,141728,141752,141754,141778,141785,141788,141798,141800,141824,141829,141837,141839,141869,141874,141914,141916,141942,141944,141970,141974,141977,141982,141985,141989,141997,142004,142012,142014,142044,142046,142076,142084,142087,142090,142092,142122,142124,142154,142157,142162,142164,142188,142190,142214,142217,142302,142304,142328,142330,142354,142358,142360,142384,142386,142420,142424,142438,142441,142446,142449,142454,142457,142487,142495],[10,140122,140118],{"id":140123},"_16-品优购项目下篇-主体与页面开发",[60,140125,140127],{"id":140126},"_161-项目主体模块制作","16.1 项目主体模块制作",[605,140129,140131],{"id":140130},"_1611-首页制作","16.1.1 首页制作",[14,140133,140134,140136,140137,140139,140140,140143],{},[780,140135,102452],{}," 主体模块是 ",[780,140138,74535],{}," 里面专有的，注意需要新的样式文件 ",[780,140141,140142],{},"index.css，"," 就不要写在common.css中了",[420,140145],{"style":126802,"src":140146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[420,140148],{"style":126802,"src":140149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140151,140152],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1626,140154,140155,140158,140161],{},[591,140156,140157],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[591,140159,140160],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[591,140162,140163],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140165,138785],{},[18,140167,140168],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,140169,140170,140176,140186],{"__ignoreMap":23},[28,140171,140172,140174],{"class":30,"line":31},[28,140173,130794],{"class":2453},[28,140175,16058],{"class":34},[28,140177,140178,140180,140182,140184],{"class":30,"line":77},[28,140179,131426],{"class":38},[28,140181,51914],{"class":34},[28,140183,24222],{"class":38},[28,140185,1781],{"class":34},[28,140187,140188],{"class":30,"line":114},[28,140189,2055],{"class":34},[14,140191,138825],{},[18,140193,140194],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,140195,140196,140202,140212],{"__ignoreMap":23},[28,140197,140198,140200],{"class":30,"line":31},[28,140199,130794],{"class":2453},[28,140201,16058],{"class":34},[28,140203,140204,140206,140208,140210],{"class":30,"line":77},[28,140205,131426],{"class":38},[28,140207,51914],{"class":34},[28,140209,24222],{"class":38},[28,140211,1781],{"class":34},[28,140213,140214],{"class":30,"line":114},[28,140215,2055],{"class":34},[588,140217,140218],{},[591,140219,140220],{},"左侧focus模块制作",[420,140222],{"style":126802,"src":140223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140225,138785],{},[18,140227,140228],{"className":126946,"code":128269,"language":126948,"meta":23,"style":23},[25,140229,140230,140238,140248,140258],{"__ignoreMap":23},[28,140231,140232,140234,140236],{"class":30,"line":31},[28,140233,54298],{"class":51777},[28,140235,62377],{"class":2453},[28,140237,16058],{"class":34},[28,140239,140240,140242,140244,140246],{"class":30,"line":77},[28,140241,128284],{"class":38},[28,140243,51914],{"class":34},[28,140245,55366],{"class":38},[28,140247,1781],{"class":34},[28,140249,140250,140252,140254,140256],{"class":30,"line":114},[28,140251,71275],{"class":38},[28,140253,51914],{"class":34},[28,140255,55214],{"class":38},[28,140257,1781],{"class":34},[28,140259,140260],{"class":30,"line":128},[28,140261,2055],{"class":34},[14,140263,138825],{},[18,140265,140266],{"className":126946,"code":128269,"language":126948,"meta":23,"style":23},[25,140267,140268,140276,140286,140296],{"__ignoreMap":23},[28,140269,140270,140272,140274],{"class":30,"line":31},[28,140271,54298],{"class":51777},[28,140273,62377],{"class":2453},[28,140275,16058],{"class":34},[28,140277,140278,140280,140282,140284],{"class":30,"line":77},[28,140279,128284],{"class":38},[28,140281,51914],{"class":34},[28,140283,55366],{"class":38},[28,140285,1781],{"class":34},[28,140287,140288,140290,140292,140294],{"class":30,"line":114},[28,140289,71275],{"class":38},[28,140291,51914],{"class":34},[28,140293,55214],{"class":38},[28,140295,1781],{"class":34},[28,140297,140298],{"class":30,"line":128},[28,140299,2055],{"class":34},[14,140301,140302],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[588,140304,140305],{"start":77},[591,140306,140307],{},"右侧newsflash模块制作",[420,140309],{"style":126802,"src":140310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140312,140313],{},"右侧的模块 分为上中下三个盒子",[14,140315,140316],{},"结构代码：",[18,140318,140319],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,140320,140321],{"__ignoreMap":23},[28,140322,140323,140325,140327,140329,140331,140333,140335,140337,140339,140341,140343,140345],{"class":30,"line":31},[28,140324,1529],{"class":34},[28,140326,420],{"class":51777},[28,140328,55716],{"class":2453},[28,140330,83],{"class":34},[28,140332,134463],{"class":735},[28,140334,55724],{"class":2453},[28,140336,83],{"class":34},[28,140338,134470],{"class":735},[28,140340,134473],{"class":2453},[28,140342,83],{"class":34},[28,140344,134478],{"class":735},[28,140346,51784],{"class":34},[14,140348,140349,140350,140353],{},"1 号盒子为 ",[25,140351,140352],{},"news"," 新闻模块 高度为 165px",[420,140355],{"style":126802,"src":140356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140358,140359,140360,140363,140364],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[25,140361,140362],{},"news-hd","，下面是 ",[25,140365,140366],{},"news-bd",[14,140368,140316],{},[18,140370,140371],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,140372,140373,140377,140391,140395],{"__ignoreMap":23},[28,140374,140375],{"class":30,"line":31},[28,140376,131057],{"class":73},[28,140378,140379,140381,140383,140385,140387,140389],{"class":30,"line":77},[28,140380,1529],{"class":34},[28,140382,52088],{"class":51777},[28,140384,53963],{"class":2453},[28,140386,83],{"class":34},[28,140388,131070],{"class":735},[28,140390,51784],{"class":34},[28,140392,140393],{"class":30,"line":114},[28,140394,131077],{"class":34},[28,140396,140397,140399,140401],{"class":30,"line":128},[28,140398,52262],{"class":34},[28,140400,52088],{"class":51777},[28,140402,51784],{"class":34},[14,140404,140405],{},"样式代码：",[18,140407,140408],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,140409,140410,140414,140428,140432],{"__ignoreMap":23},[28,140411,140412],{"class":30,"line":31},[28,140413,131057],{"class":73},[28,140415,140416,140418,140420,140422,140424,140426],{"class":30,"line":77},[28,140417,1529],{"class":34},[28,140419,52088],{"class":51777},[28,140421,53963],{"class":2453},[28,140423,83],{"class":34},[28,140425,131070],{"class":735},[28,140427,51784],{"class":34},[28,140429,140430],{"class":30,"line":114},[28,140431,131077],{"class":34},[28,140433,140434,140436,140438],{"class":30,"line":128},[28,140435,52262],{"class":34},[28,140437,52088],{"class":51777},[28,140439,51784],{"class":34},[14,140441,140442,140443,140445],{},"上面是",[25,140444,140362],{},"，设置高度是 33px，设置下边框",[1626,140447,140448,140454],{},[591,140449,140450,140451,140453],{},"里面放一个",[25,140452,23396],{}," 标题",[591,140455,140456,140457,140459,140460,140462],{},"放一个a",[25,140458,103087],{},"，内容是 更多，然后让 ",[25,140461,80],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140464,140316],{},[18,140466,140467],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,140468,140469,140477,140487,140497],{"__ignoreMap":23},[28,140470,140471,140473,140475],{"class":30,"line":31},[28,140472,52088],{"class":51777},[28,140474,137947],{"class":2453},[28,140476,16058],{"class":34},[28,140478,140479,140481,140483,140485],{"class":30,"line":77},[28,140480,137954],{"class":38},[28,140482,51914],{"class":34},[28,140484,8140],{"class":735},[28,140486,1781],{"class":34},[28,140488,140489,140491,140493,140495],{"class":30,"line":114},[28,140490,128562],{"class":38},[28,140492,51914],{"class":34},[28,140494,61346],{"class":38},[28,140496,1781],{"class":34},[28,140498,140499],{"class":30,"line":128},[28,140500,2055],{"class":34},[14,140502,140405],{},[18,140504,140505],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,140506,140507,140515,140525,140535],{"__ignoreMap":23},[28,140508,140509,140511,140513],{"class":30,"line":31},[28,140510,52088],{"class":51777},[28,140512,137947],{"class":2453},[28,140514,16058],{"class":34},[28,140516,140517,140519,140521,140523],{"class":30,"line":77},[28,140518,137954],{"class":38},[28,140520,51914],{"class":34},[28,140522,8140],{"class":735},[28,140524,1781],{"class":34},[28,140526,140527,140529,140531,140533],{"class":30,"line":114},[28,140528,128562],{"class":38},[28,140530,51914],{"class":34},[28,140532,61346],{"class":38},[28,140534,1781],{"class":34},[28,140536,140537],{"class":30,"line":128},[28,140538,2055],{"class":34},[14,140540,140541,140542],{},"下面是",[25,140543,140366],{},[1626,140545,140546,140554],{},[591,140547,140548,140549,101412,140551,140553],{},"里面包含 ",[25,140550,1626],{},[25,140552,591],{}," 还有链接",[591,140555,140026,140556,140558,140559,140561,140562,140565,140566],{},[25,140557,591],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[25,140560,131612],{}," 2.设置 ",[25,140563,140564],{},"white-space: nowrap;"," 3. 设置 ",[25,140567,140568],{},"text-overflow: ellipsis;",[14,140570,140316],{},[18,140572,140574],{"className":126946,"code":140573,"language":126948,"meta":23,"style":23},"div {\n  overflow: hidden;\n}\n",[25,140575,140576,140582,140593],{"__ignoreMap":23},[28,140577,140578,140580],{"class":30,"line":31},[28,140579,52088],{"class":51777},[28,140581,16058],{"class":34},[28,140583,140584,140587,140589,140591],{"class":30,"line":77},[28,140585,140586],{"class":38},"  overflow",[28,140588,51914],{"class":34},[28,140590,62191],{"class":38},[28,140592,1781],{"class":34},[28,140594,140595],{"class":30,"line":114},[28,140596,2055],{"class":34},[14,140598,140405],{},[18,140600,140601],{"className":126946,"code":140573,"language":126948,"meta":23,"style":23},[25,140602,140603,140609,140619],{"__ignoreMap":23},[28,140604,140605,140607],{"class":30,"line":31},[28,140606,52088],{"class":51777},[28,140608,16058],{"class":34},[28,140610,140611,140613,140615,140617],{"class":30,"line":77},[28,140612,140586],{"class":38},[28,140614,51914],{"class":34},[28,140616,62191],{"class":38},[28,140618,1781],{"class":34},[28,140620,140621],{"class":30,"line":114},[28,140622,2055],{"class":34},[14,140624,140625,140626,140629],{},"2 号盒子为 ",[25,140627,140628],{},"lifeservice"," 生活服务模块 高度为 209px",[420,140631],{"style":126802,"src":140632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1626,140634,140635,140638,140648,140672,140683],{},[591,140636,140637],{},"设置边框（左右下边框）",[591,140639,140640,140641,140644,140645,140647],{},"里面的内容 是 ",[25,140642,140643],{},"ul > 12*li","，给",[25,140646,591],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[591,140649,140650,140651],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1626,140652,140653,140658,140667],{},[591,140654,140655,140657],{},[25,140656,140628],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[591,140659,140660,140661,140663,140664,140666],{},"可以让 ",[25,140662,140628],{}," 里面的 ",[25,140665,1626],{}," 宽度为 252，就可以装的下 4 个 小 li",[591,140668,140669,140671],{},[25,140670,140628],{}," 盒子 overflow 隐藏多余的部分就可以了",[591,140673,116861,140674,140676,140677,140679,140680,140682],{},[25,140675,591],{}," 里面放一个 ",[25,140678,1066],{},"（里面放图标），下面的文本用 ",[25,140681,14],{}," 标签包裹",[591,140684,139446,140685,140687,140688,140690,140691,139480,140693,140696],{},[25,140686,1066],{}," 设置 24px宽和28px的高（注意 ",[25,140689,1066],{}," 是行内元素， 转成行内块），给 ",[25,140692,591],{},[25,140694,140695],{},"text-align:center"," 让里面内容居中显示",[14,140698,140316],{},[18,140700,140702],{"className":126946,"code":140701,"language":126948,"meta":23,"style":23},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[25,140703,140704,140722,140727,140737],{"__ignoreMap":23},[28,140705,140706,140708,140710,140712,140714,140716,140718,140720],{"class":30,"line":31},[28,140707,28],{"class":51777},[28,140709,12921],{"class":34},[28,140711,80],{"class":51777},[28,140713,12921],{"class":34},[28,140715,24039],{"class":51777},[28,140717,12921],{"class":34},[28,140719,780],{"class":51777},[28,140721,16058],{"class":34},[28,140723,140724],{"class":30,"line":77},[28,140725,140726],{"class":73},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[28,140728,140729,140731,140733,140735],{"class":30,"line":114},[28,140730,128562],{"class":38},[28,140732,51914],{"class":34},[28,140734,128624],{"class":38},[28,140736,1781],{"class":34},[28,140738,140739],{"class":30,"line":128},[28,140740,2055],{"class":34},[14,140742,140405],{},[18,140744,140745],{"className":126946,"code":140701,"language":126948,"meta":23,"style":23},[25,140746,140747,140765,140769,140779],{"__ignoreMap":23},[28,140748,140749,140751,140753,140755,140757,140759,140761,140763],{"class":30,"line":31},[28,140750,28],{"class":51777},[28,140752,12921],{"class":34},[28,140754,80],{"class":51777},[28,140756,12921],{"class":34},[28,140758,24039],{"class":51777},[28,140760,12921],{"class":34},[28,140762,780],{"class":51777},[28,140764,16058],{"class":34},[28,140766,140767],{"class":30,"line":77},[28,140768,140726],{"class":73},[28,140770,140771,140773,140775,140777],{"class":30,"line":114},[28,140772,128562],{"class":38},[28,140774,51914],{"class":34},[28,140776,128624],{"class":38},[28,140778,1781],{"class":34},[28,140780,140781],{"class":30,"line":128},[28,140782,2055],{"class":34},[14,140784,140785,140786,140789],{},"3 号盒子为 ",[25,140787,140788],{},"bargain"," 特价商品",[1626,140791,140792],{},[591,140793,140794],{},"这个比较简单，直接插入一张图片即可",[14,140796,140316],{},[18,140798,140799],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,140800,140801],{"__ignoreMap":23},[28,140802,140803,140805,140807,140809,140811,140813,140815,140817,140819,140821,140823,140825],{"class":30,"line":31},[28,140804,1529],{"class":34},[28,140806,420],{"class":51777},[28,140808,55716],{"class":2453},[28,140810,83],{"class":34},[28,140812,134463],{"class":735},[28,140814,55724],{"class":2453},[28,140816,83],{"class":34},[28,140818,134470],{"class":735},[28,140820,134473],{"class":2453},[28,140822,83],{"class":34},[28,140824,134478],{"class":735},[28,140826,51784],{"class":34},[14,140828,140405],{},[18,140830,140831],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,140832,140833],{"__ignoreMap":23},[28,140834,140835,140837,140839,140841,140843,140845,140847,140849,140851,140853,140855,140857],{"class":30,"line":31},[28,140836,1529],{"class":34},[28,140838,420],{"class":51777},[28,140840,55716],{"class":2453},[28,140842,83],{"class":34},[28,140844,134463],{"class":735},[28,140846,55724],{"class":2453},[28,140848,83],{"class":34},[28,140850,134470],{"class":735},[28,140852,134473],{"class":2453},[28,140854,83],{"class":34},[28,140856,134478],{"class":735},[28,140858,51784],{"class":34},[605,140860,140862],{"id":140861},"_1612-推荐模块制作","16.1.2 推荐模块制作",[420,140864],{"style":126802,"src":140865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140867,140868,140869,140872],{},"大盒子 ",[25,140870,140871],{},"recom"," 推荐模块 recommend",[1626,140874,140875],{},[591,140876,140877,140878,140880,140881,140884],{},"给这个 ",[25,140879,140871],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[25,140882,140883],{},"#ebebeb","），设置距离上边 12px",[14,140886,140316],{},[18,140888,140890],{"className":126946,"code":140889,"language":126948,"meta":23,"style":23},"div {\n  background-color: #f0f0f0;\n}\n",[25,140891,140892,140898,140909],{"__ignoreMap":23},[28,140893,140894,140896],{"class":30,"line":31},[28,140895,52088],{"class":51777},[28,140897,16058],{"class":34},[28,140899,140900,140902,140904,140907],{"class":30,"line":77},[28,140901,71355],{"class":38},[28,140903,51914],{"class":34},[28,140905,140906],{"class":38},"#f0f0f0",[28,140908,1781],{"class":34},[28,140910,140911],{"class":30,"line":114},[28,140912,2055],{"class":34},[14,140914,140405],{},[18,140916,140917],{"className":126946,"code":140889,"language":126948,"meta":23,"style":23},[25,140918,140919,140925,140935],{"__ignoreMap":23},[28,140920,140921,140923],{"class":30,"line":31},[28,140922,52088],{"class":51777},[28,140924,16058],{"class":34},[28,140926,140927,140929,140931,140933],{"class":30,"line":77},[28,140928,71355],{"class":38},[28,140930,51914],{"class":34},[28,140932,140906],{"class":38},[28,140934,1781],{"class":34},[28,140936,140937],{"class":30,"line":114},[28,140938,2055],{"class":34},[14,140940,140941],{},"里面包含 2 个盒子， 浮动即可",[14,140943,140316],{},[18,140945,140946],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,140947,140948,140954,140964],{"__ignoreMap":23},[28,140949,140950,140952],{"class":30,"line":31},[28,140951,130794],{"class":2453},[28,140953,16058],{"class":34},[28,140955,140956,140958,140960,140962],{"class":30,"line":77},[28,140957,131426],{"class":38},[28,140959,51914],{"class":34},[28,140961,24222],{"class":38},[28,140963,1781],{"class":34},[28,140965,140966],{"class":30,"line":114},[28,140967,2055],{"class":34},[14,140969,140970,140971],{},"1 号盒子 ",[25,140972,140973],{},"recom_hd",[1626,140975,140976,140979],{},[591,140977,140978],{},"设置宽度205px，高度163px",[591,140980,140450,140981,140983],{},[25,140982,420],{},"标签，插入图片即可",[14,140985,140316],{},[18,140987,140988],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,140989,140990],{"__ignoreMap":23},[28,140991,140992,140994,140996,140998,141000,141002,141004,141006,141008,141010,141012,141014],{"class":30,"line":31},[28,140993,1529],{"class":34},[28,140995,420],{"class":51777},[28,140997,55716],{"class":2453},[28,140999,83],{"class":34},[28,141001,134463],{"class":735},[28,141003,55724],{"class":2453},[28,141005,83],{"class":34},[28,141007,134470],{"class":735},[28,141009,134473],{"class":2453},[28,141011,83],{"class":34},[28,141013,134478],{"class":735},[28,141015,51784],{"class":34},[14,141017,140405],{},[18,141019,141020],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,141021,141022],{"__ignoreMap":23},[28,141023,141024,141026,141028,141030,141032,141034,141036,141038,141040,141042,141044,141046],{"class":30,"line":31},[28,141025,1529],{"class":34},[28,141027,420],{"class":51777},[28,141029,55716],{"class":2453},[28,141031,83],{"class":34},[28,141033,134463],{"class":735},[28,141035,55724],{"class":2453},[28,141037,83],{"class":34},[28,141039,134470],{"class":735},[28,141041,134473],{"class":2453},[28,141043,83],{"class":34},[28,141045,134478],{"class":735},[28,141047,51784],{"class":34},[14,141049,141050,141051,141054],{},"2 号盒子 ",[25,141052,141053],{},"recom_bd"," ，注意里面的小竖线",[1626,141056,141057,141068,141071,141076,141081],{},[591,141058,141059,141060,141062,141063,141065,141066],{},"右侧结构里面放 ",[25,141061,1626],{}," 包含 4个 ",[25,141064,591],{},"，每个li里面包含一个",[25,141067,420],{},[591,141069,141070],{},"直接利用切片工具把里面的内容当成一张图片",[591,141072,139446,141073,141075],{},[25,141074,591],{}," 设置浮动",[591,141077,139446,141078,141080],{},[25,141079,420],{}," 设置宽高，宽度 248px，高度 163px",[591,141082,141083,141084,140644,141087,141089,141090,141092,141093],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[25,141085,141086],{},"top 10px",[25,141088,591],{},"设置相对定位（注意，最后一个",[25,141091,591],{},"不用设置伪元素），可以利用 ",[25,141094,141095],{},"nth-child(-n+3){...}",[14,141097,140316],{},[18,141099,141100],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,141101,141102,141110,141120,141130],{"__ignoreMap":23},[28,141103,141104,141106,141108],{"class":30,"line":31},[28,141105,52088],{"class":51777},[28,141107,137947],{"class":2453},[28,141109,16058],{"class":34},[28,141111,141112,141114,141116,141118],{"class":30,"line":77},[28,141113,137954],{"class":38},[28,141115,51914],{"class":34},[28,141117,8140],{"class":735},[28,141119,1781],{"class":34},[28,141121,141122,141124,141126,141128],{"class":30,"line":114},[28,141123,128562],{"class":38},[28,141125,51914],{"class":34},[28,141127,61346],{"class":38},[28,141129,1781],{"class":34},[28,141131,141132],{"class":30,"line":128},[28,141133,2055],{"class":34},[14,141135,140405],{},[18,141137,141138],{"className":126946,"code":138788,"language":126948,"meta":23,"style":23},[25,141139,141140,141148,141158,141168],{"__ignoreMap":23},[28,141141,141142,141144,141146],{"class":30,"line":31},[28,141143,52088],{"class":51777},[28,141145,137947],{"class":2453},[28,141147,16058],{"class":34},[28,141149,141150,141152,141154,141156],{"class":30,"line":77},[28,141151,137954],{"class":38},[28,141153,51914],{"class":34},[28,141155,8140],{"class":735},[28,141157,1781],{"class":34},[28,141159,141160,141162,141164,141166],{"class":30,"line":114},[28,141161,128562],{"class":38},[28,141163,51914],{"class":34},[28,141165,61346],{"class":38},[28,141167,1781],{"class":34},[28,141169,141170],{"class":30,"line":128},[28,141171,2055],{"class":34},[605,141173,141175],{"id":141174},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[420,141177],{"style":126802,"src":141178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141180,141181],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141183,141184],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141186,141187,141190],{},[25,141188,141189],{},"box_hd"," 制作",[14,141192,140970,141193,141195],{},[25,141194,141189],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[420,141197],{"style":126802,"src":141198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1626,141200,141201,141206,141211,141214],{},[591,141202,141203,141205],{},[25,141204,141189],{}," 给 30px 的高度，2个像素的下边框",[591,141207,141208,141209],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[25,141210,139457],{},[591,141212,141213],{},"左侧盒左浮动，右侧盒子右浮动",[591,141215,141216,141218,141219,141221],{},[25,141217,80],{},"标签之间的距离用左右的",[25,141220,31364],{},"撑开即可",[14,141223,141224],{},"结构代码",[18,141226,141227],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,141228,141229,141235,141245],{"__ignoreMap":23},[28,141230,141231,141233],{"class":30,"line":31},[28,141232,130794],{"class":2453},[28,141234,16058],{"class":34},[28,141236,141237,141239,141241,141243],{"class":30,"line":77},[28,141238,131426],{"class":38},[28,141240,51914],{"class":34},[28,141242,24222],{"class":38},[28,141244,1781],{"class":34},[28,141246,141247],{"class":30,"line":114},[28,141248,2055],{"class":34},[14,141250,141251],{},"样式代码",[18,141253,141254],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,141255,141256,141262,141272],{"__ignoreMap":23},[28,141257,141258,141260],{"class":30,"line":31},[28,141259,130794],{"class":2453},[28,141261,16058],{"class":34},[28,141263,141264,141266,141268,141270],{"class":30,"line":77},[28,141265,131426],{"class":38},[28,141267,51914],{"class":34},[28,141269,24222],{"class":38},[28,141271,1781],{"class":34},[28,141273,141274],{"class":30,"line":114},[28,141275,2055],{"class":34},[14,141277,141278,141190],{},[25,141279,141280],{},"box_bd",[14,141282,141283],{},"2 号盒子 box_bd，不要给高度",[420,141285],{"style":126802,"src":141286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141288,141289],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141291,141292],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141294,141295],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1626,141297,141298,141310,141326],{},[591,141299,141300,141302,141303,141306,141307,141309],{},[25,141301,141280],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[25,141304,141305],{},"tab_content","，在",[25,141308,141305],{}," 里面包裹tab选项卡对应的内容",[591,141311,141312,141313,141316,141317,141319,141320,141322,141323,141325],{},"内容被一个大盒子包裹（",[25,141314,141315],{},"tab_list_item","），里面是 ",[25,141318,1626],{}," 包裹 5个 ",[25,141321,591],{},"，每个",[25,141324,591],{},"设置对应的宽度，然后设置浮动",[591,141327,141328,141329,141331,141332,141334,141335],{},"而这5个",[25,141330,591],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[25,141333,591],{},"设置",[1626,141336,141337,141355,141358],{},[591,141338,141339,141340,141342,141343,141345,141346,141348,141349,141351,141352,141354],{},"第一个小 ",[25,141341,591],{}," 分为上下结构，上面是 ",[25,141344,1626],{}," 包裹 ",[25,141347,591],{}," ，",[25,141350,591],{},"里面包裹 ",[25,141353,80],{},"，下面插入一张图片",[591,141356,141357],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[591,141359,141360,141361,141363,141364,141366,141367,141369],{},"后面的小 ",[25,141362,591],{}," 里面先放一个",[25,141365,80],{},"标签，然后在",[25,141368,80],{},"标签里面插入图片即可",[14,141371,141224],{},[18,141373,141374],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,141375,141376],{"__ignoreMap":23},[28,141377,141378,141380,141382,141384,141386,141388,141390,141392,141394,141396,141398,141400],{"class":30,"line":31},[28,141379,1529],{"class":34},[28,141381,420],{"class":51777},[28,141383,55716],{"class":2453},[28,141385,83],{"class":34},[28,141387,134463],{"class":735},[28,141389,55724],{"class":2453},[28,141391,83],{"class":34},[28,141393,134470],{"class":735},[28,141395,134473],{"class":2453},[28,141397,83],{"class":34},[28,141399,134478],{"class":735},[28,141401,51784],{"class":34},[14,141403,141251],{},[18,141405,141406],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,141407,141408],{"__ignoreMap":23},[28,141409,141410,141412,141414,141416,141418,141420,141422,141424,141426,141428,141430,141432],{"class":30,"line":31},[28,141411,1529],{"class":34},[28,141413,420],{"class":51777},[28,141415,55716],{"class":2453},[28,141417,83],{"class":34},[28,141419,134463],{"class":735},[28,141421,55724],{"class":2453},[28,141423,83],{"class":34},[28,141425,134470],{"class":735},[28,141427,134473],{"class":2453},[28,141429,83],{"class":34},[28,141431,134478],{"class":735},[28,141433,51784],{"class":34},[14,141435,141436],{},"tab栏切换需求！！！！！！介绍：",[420,141438],{"style":126802,"src":141439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1626,141441,141442,141450,141456,141459],{},[591,141443,141444,141447,141448],{},[25,141445,141446],{},"tab","栏的布局是 ",[25,141449,139457],{},[591,141451,141452,141453,141455],{},"有多少个",[25,141454,141446],{},"选项卡，那么对应就有多少个内容",[591,141457,141458],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[591,141460,141461,141462,141465,141466,141468,141469,141471],{},"等后面我们学习了",[25,141463,141464],{},"js","之后，我们就会配合",[25,141467,141464],{},"来实现，",[25,141470,141446],{},"栏的切换",[60,141473,141475],{"id":141474},"_162-列表制作","16.2 列表制作",[605,141477,141479],{"id":141478},"_1621-准备工作","16.2.1 准备工作",[1626,141481,141482,141485,141488,141491],{},[591,141483,141484],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[591,141486,141487],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[591,141489,141490],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[591,141492,141493],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[605,141495,141497,141498,101412,141500,141502],{"id":141496},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[25,141499,131951],{},[25,141501,54190],{}," 修改",[420,141504],{"style":126802,"src":141505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1626,141507,141508],{},[591,141509,141510],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141512,140316],{},[18,141514,141515],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,141516,141517,141521,141535,141539,141553,141557,141571,141575,141589,141593],{"__ignoreMap":23},[28,141518,141519],{"class":30,"line":31},[28,141520,132385],{"class":73},[28,141522,141523,141525,141527,141529,141531,141533],{"class":30,"line":77},[28,141524,132390],{"class":2453},[28,141526,80284],{"class":34},[28,141528,129306],{"class":38},[28,141530,51914],{"class":34},[28,141532,132399],{"class":38},[28,141534,129876],{"class":34},[28,141536,141537],{"class":30,"line":114},[28,141538,132406],{"class":73},[28,141540,141541,141543,141545,141547,141549,141551],{"class":30,"line":128},[28,141542,132411],{"class":2453},[28,141544,80284],{"class":34},[28,141546,129306],{"class":38},[28,141548,51914],{"class":34},[28,141550,55241],{"class":38},[28,141552,129876],{"class":34},[28,141554,141555],{"class":30,"line":393},[28,141556,132426],{"class":73},[28,141558,141559,141561,141563,141565,141567,141569],{"class":30,"line":409},[28,141560,132431],{"class":2453},[28,141562,80284],{"class":34},[28,141564,129306],{"class":38},[28,141566,51914],{"class":34},[28,141568,55308],{"class":38},[28,141570,129876],{"class":34},[28,141572,141573],{"class":30,"line":1711},[28,141574,132446],{"class":73},[28,141576,141577,141579,141581,141583,141585,141587],{"class":30,"line":1802},[28,141578,132451],{"class":2453},[28,141580,80284],{"class":34},[28,141582,129306],{"class":38},[28,141584,51914],{"class":34},[28,141586,86710],{"class":38},[28,141588,129876],{"class":34},[28,141590,141591],{"class":30,"line":1808},[28,141592,132466],{"class":73},[28,141594,141595,141597,141599,141601,141603,141605],{"class":30,"line":1820},[28,141596,132471],{"class":2453},[28,141598,80284],{"class":34},[28,141600,129306],{"class":38},[28,141602,51914],{"class":34},[28,141604,132480],{"class":38},[28,141606,129876],{"class":34},[14,141608,140405],{},[18,141610,141611],{"className":126946,"code":132378,"language":126948,"meta":23,"style":23},[25,141612,141613,141617,141631,141635,141649,141653,141667,141671,141685,141689],{"__ignoreMap":23},[28,141614,141615],{"class":30,"line":31},[28,141616,132385],{"class":73},[28,141618,141619,141621,141623,141625,141627,141629],{"class":30,"line":77},[28,141620,132390],{"class":2453},[28,141622,80284],{"class":34},[28,141624,129306],{"class":38},[28,141626,51914],{"class":34},[28,141628,132399],{"class":38},[28,141630,129876],{"class":34},[28,141632,141633],{"class":30,"line":114},[28,141634,132406],{"class":73},[28,141636,141637,141639,141641,141643,141645,141647],{"class":30,"line":128},[28,141638,132411],{"class":2453},[28,141640,80284],{"class":34},[28,141642,129306],{"class":38},[28,141644,51914],{"class":34},[28,141646,55241],{"class":38},[28,141648,129876],{"class":34},[28,141650,141651],{"class":30,"line":393},[28,141652,132426],{"class":73},[28,141654,141655,141657,141659,141661,141663,141665],{"class":30,"line":409},[28,141656,132431],{"class":2453},[28,141658,80284],{"class":34},[28,141660,129306],{"class":38},[28,141662,51914],{"class":34},[28,141664,55308],{"class":38},[28,141666,129876],{"class":34},[28,141668,141669],{"class":30,"line":1711},[28,141670,132446],{"class":73},[28,141672,141673,141675,141677,141679,141681,141683],{"class":30,"line":1802},[28,141674,132451],{"class":2453},[28,141676,80284],{"class":34},[28,141678,129306],{"class":38},[28,141680,51914],{"class":34},[28,141682,86710],{"class":38},[28,141684,129876],{"class":34},[28,141686,141687],{"class":30,"line":1808},[28,141688,132466],{"class":73},[28,141690,141691,141693,141695,141697,141699,141701],{"class":30,"line":1820},[28,141692,132471],{"class":2453},[28,141694,80284],{"class":34},[28,141696,129306],{"class":38},[28,141698,51914],{"class":34},[28,141700,132480],{"class":38},[28,141702,129876],{"class":34},[1626,141704,141705,141716],{},[591,141706,141707,141708,141711,141712,101412,141714],{},"1 号盒子左侧浮动 ",[25,141709,141710],{},"sk_list"," 里面包含 ",[25,141713,1626],{},[25,141715,591],{},[591,141717,141718,141719,141711,141722,101412,141724],{},"2 号盒子左侧浮动 ",[25,141720,141721],{},"sk_con",[25,141723,1626],{},[25,141725,591],{},[14,141727,140316],{},[18,141729,141730],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,141731,141732,141738,141748],{"__ignoreMap":23},[28,141733,141734,141736],{"class":30,"line":31},[28,141735,130794],{"class":2453},[28,141737,16058],{"class":34},[28,141739,141740,141742,141744,141746],{"class":30,"line":77},[28,141741,131426],{"class":38},[28,141743,51914],{"class":34},[28,141745,24222],{"class":38},[28,141747,1781],{"class":34},[28,141749,141750],{"class":30,"line":114},[28,141751,2055],{"class":34},[14,141753,140405],{},[18,141755,141756],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,141757,141758,141764,141774],{"__ignoreMap":23},[28,141759,141760,141762],{"class":30,"line":31},[28,141761,130794],{"class":2453},[28,141763,16058],{"class":34},[28,141765,141766,141768,141770,141772],{"class":30,"line":77},[28,141767,131426],{"class":38},[28,141769,51914],{"class":34},[28,141771,24222],{"class":38},[28,141773,1781],{"class":34},[28,141775,141776],{"class":30,"line":114},[28,141777,2055],{"class":34},[605,141779,141781,141782],{"id":141780},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[25,141783,141784],{},"sk_container",[420,141786],{"style":126802,"src":141787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1626,141789,141790,141795],{},[591,141791,140970,141792,141794],{},[25,141793,141784],{}," 给宽度 1200，不要给高度",[591,141796,141797],{},"一定不要忘记清除浮动",[14,141799,140316],{},[18,141801,141802],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,141803,141804,141810,141820],{"__ignoreMap":23},[28,141805,141806,141808],{"class":30,"line":31},[28,141807,130794],{"class":2453},[28,141809,16058],{"class":34},[28,141811,141812,141814,141816,141818],{"class":30,"line":77},[28,141813,131426],{"class":38},[28,141815,51914],{"class":34},[28,141817,24222],{"class":38},[28,141819,1781],{"class":34},[28,141821,141822],{"class":30,"line":114},[28,141823,2055],{"class":34},[588,141825,141826],{},[591,141827,141828],{},"sk_hd制作",[1626,141830,141831],{},[591,141832,141050,141833,141836],{},[25,141834,141835],{},"sk_hd"," ，插入图片即可",[14,141838,140316],{},[18,141840,141841],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,141842,141843],{"__ignoreMap":23},[28,141844,141845,141847,141849,141851,141853,141855,141857,141859,141861,141863,141865,141867],{"class":30,"line":31},[28,141846,1529],{"class":34},[28,141848,420],{"class":51777},[28,141850,55716],{"class":2453},[28,141852,83],{"class":34},[28,141854,134463],{"class":735},[28,141856,55724],{"class":2453},[28,141858,83],{"class":34},[28,141860,134470],{"class":735},[28,141862,134473],{"class":2453},[28,141864,83],{"class":34},[28,141866,134478],{"class":735},[28,141868,51784],{"class":34},[588,141870,141871],{"start":77},[591,141872,141873],{},"sk_bd制作",[1626,141875,141876],{},[591,141877,141878,141879,141882,141883,101412,141885,141887],{},"3 号盒子 ",[25,141880,141881],{},"sk_bd"," ，里面包含很多的 ",[25,141884,1626],{},[25,141886,591],{},[1626,141888,141889,141898],{},[591,141890,141891,141892,141894,141895,141897],{},"当鼠标移入到 ",[25,141893,591],{}," 上面的时候显示红色的边框，在这里先给 ",[25,141896,591],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[591,141899,141900,141901,141903,141904,141906,141907,141910,141911,141913],{},"由于给每个 ",[25,141902,591],{}," 都设置了外边距，导致一行的最后一个 ",[25,141905,591],{}," 掉了下来，在这里我们利用 ",[25,141908,141909],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[25,141912,591],{},"，去掉外边距就好了",[14,141915,140316],{},[18,141917,141918],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,141919,141920,141926,141938],{"__ignoreMap":23},[28,141921,141922,141924],{"class":30,"line":31},[28,141923,52088],{"class":51777},[28,141925,16058],{"class":34},[28,141927,141928,141930,141932,141934,141936],{"class":30,"line":77},[28,141929,70947],{"class":38},[28,141931,51914],{"class":34},[28,141933,822],{"class":38},[28,141935,52033],{"class":38},[28,141937,1781],{"class":34},[28,141939,141940],{"class":30,"line":114},[28,141941,2055],{"class":34},[14,141943,140405],{},[18,141945,141946],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,141947,141948,141954,141966],{"__ignoreMap":23},[28,141949,141950,141952],{"class":30,"line":31},[28,141951,52088],{"class":51777},[28,141953,16058],{"class":34},[28,141955,141956,141958,141960,141962,141964],{"class":30,"line":77},[28,141957,70947],{"class":38},[28,141959,51914],{"class":34},[28,141961,822],{"class":38},[28,141963,52033],{"class":38},[28,141965,1781],{"class":34},[28,141967,141968],{"class":30,"line":114},[28,141969,2055],{"class":34},[60,141971,141973],{"id":141972},"_163-注册页面制作","16.3 注册页面制作",[420,141975],{"style":126802,"src":141976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141978,141979,141981],{},[780,141980,9513],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[420,141983],{"style":126802,"src":141984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[605,141986,141988],{"id":141987},"_1631-准备工作","16.3.1 准备工作",[1626,141990,141991,141994],{},[591,141992,141993],{},"创建register.html，引入 base.css，引入favicon图标",[591,141995,141996],{},"创建register.css ，在html页面进行引入",[605,141998,142000,142001,142003],{"id":141999},"_1632-header-头部实现","16.3.2 ",[25,142002,131951],{}," 头部实现",[1626,142005,142006,142009],{},[591,142007,142008],{},"整个内容用 版心 进行包裹",[591,142010,142011],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142013,140316],{},[18,142015,142016],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,142017,142018],{"__ignoreMap":23},[28,142019,142020,142022,142024,142026,142028,142030,142032,142034,142036,142038,142040,142042],{"class":30,"line":31},[28,142021,1529],{"class":34},[28,142023,420],{"class":51777},[28,142025,55716],{"class":2453},[28,142027,83],{"class":34},[28,142029,134463],{"class":735},[28,142031,55724],{"class":2453},[28,142033,83],{"class":34},[28,142035,134470],{"class":735},[28,142037,134473],{"class":2453},[28,142039,83],{"class":34},[28,142041,134478],{"class":735},[28,142043,51784],{"class":34},[14,142045,140405],{},[18,142047,142048],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,142049,142050],{"__ignoreMap":23},[28,142051,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072,142074],{"class":30,"line":31},[28,142053,1529],{"class":34},[28,142055,420],{"class":51777},[28,142057,55716],{"class":2453},[28,142059,83],{"class":34},[28,142061,134463],{"class":735},[28,142063,55724],{"class":2453},[28,142065,83],{"class":34},[28,142067,134470],{"class":735},[28,142069,134473],{"class":2453},[28,142071,83],{"class":34},[28,142073,134478],{"class":735},[28,142075,51784],{"class":34},[605,142077,142079,142080,142083],{"id":142078},"_1633-registerarea-主体模块实现","16.3.3 ",[25,142081,142082],{},"registerarea"," 主体模块实现",[420,142085],{"style":126802,"src":142086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142088,142089],{},"整个大盒子 高度为 522px，设置4个边框",[14,142091,140316],{},[18,142093,142094],{"className":126946,"code":131103,"language":126948,"meta":23,"style":23},[25,142095,142096,142102,142118],{"__ignoreMap":23},[28,142097,142098,142100],{"class":30,"line":31},[28,142099,52088],{"class":51777},[28,142101,16058],{"class":34},[28,142103,142104,142106,142108,142110,142112,142114,142116],{"class":30,"line":77},[28,142105,71373],{"class":38},[28,142107,51914],{"class":34},[28,142109,39],{"class":38},[28,142111,51969],{"class":42},[28,142113,51998],{"class":38},[28,142115,130338],{"class":38},[28,142117,1781],{"class":34},[28,142119,142120],{"class":30,"line":114},[28,142121,2055],{"class":34},[14,142123,140405],{},[18,142125,142126],{"className":126946,"code":131103,"language":126948,"meta":23,"style":23},[25,142127,142128,142134,142150],{"__ignoreMap":23},[28,142129,142130,142132],{"class":30,"line":31},[28,142131,52088],{"class":51777},[28,142133,16058],{"class":34},[28,142135,142136,142138,142140,142142,142144,142146,142148],{"class":30,"line":77},[28,142137,71373],{"class":38},[28,142139,51914],{"class":34},[28,142141,39],{"class":38},[28,142143,51969],{"class":42},[28,142145,51998],{"class":38},[28,142147,130338],{"class":38},[28,142149,1781],{"class":34},[28,142151,142152],{"class":30,"line":114},[28,142153,2055],{"class":34},[14,142155,142156],{},"1号盒子 是一个 h3 标签，放标题",[1626,142158,142159],{},[591,142160,142161],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142163,140316],{},[18,142165,142166],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,142167,142168,142174,142184],{"__ignoreMap":23},[28,142169,142170,142172],{"class":30,"line":31},[28,142171,130794],{"class":2453},[28,142173,16058],{"class":34},[28,142175,142176,142178,142180,142182],{"class":30,"line":77},[28,142177,131426],{"class":38},[28,142179,51914],{"class":34},[28,142181,24222],{"class":38},[28,142183,1781],{"class":34},[28,142185,142186],{"class":30,"line":114},[28,142187,2055],{"class":34},[14,142189,140405],{},[18,142191,142192],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,142193,142194,142200,142210],{"__ignoreMap":23},[28,142195,142196,142198],{"class":30,"line":31},[28,142197,130794],{"class":2453},[28,142199,16058],{"class":34},[28,142201,142202,142204,142206,142208],{"class":30,"line":77},[28,142203,131426],{"class":38},[28,142205,51914],{"class":34},[28,142207,24222],{"class":38},[28,142209,1781],{"class":34},[28,142211,142212],{"class":30,"line":114},[28,142213,2055],{"class":34},[14,142215,142216],{},"2号盒子 里面放注册的内容",[1626,142218,142219,142222,142231,142245,142258,142261,142264,142282,142296],{},[591,142220,142221],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[591,142223,142224,142225,142227,142228,142230],{},"里面的内容利用 ",[25,142226,1626],{}," 包含 ",[25,142229,591],{}," 来实现的（不需要用表格）",[591,142232,139460,142233,142235,142236,142238,142239,142241,142242,142244],{},[25,142234,591],{}," 里面，左侧放 ",[25,142237,34085],{}," 标签， 中间放",[25,142240,54298],{}," 标签， 右侧放 ",[25,142243,28],{}," 提示信息",[591,142246,142247,142248,142250,142251,142253,142254,142257],{},"左侧 ",[25,142249,34085],{},"里面的文字都是右对齐，我们可以给",[25,142252,34085],{},"设置一个宽度（88px），然后利用",[25,142255,142256],{},"text-align"," 来设置右对齐",[591,142259,142260],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[591,142262,142263],{},"右侧 span修饰一下文字颜色",[591,142265,142266,142267],{},"提示信息的样式优化",[1626,142268,142269,142272,142275],{},[591,142270,142271],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[591,142273,142274],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[591,142276,142277,142278,142281],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[25,142279,142280],{},"vertical-algin"," 来设置 图片与文字对齐方式",[591,142283,142284,142285],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1626,142286,142287,142293],{},[591,142288,142289,142290,142292],{},"设置 ",[25,142291,24039],{}," 的 左右 12px 的内边距，设置一下文字颜色",[591,142294,142295],{},"分别设置 背景颜色",[591,142297,142298,142299,142301],{},"同意协议 和 完成注册 都是用 ",[25,142300,591],{}," 进行包裹",[14,142303,140316],{},[18,142305,142306],{"className":126946,"code":140889,"language":126948,"meta":23,"style":23},[25,142307,142308,142314,142324],{"__ignoreMap":23},[28,142309,142310,142312],{"class":30,"line":31},[28,142311,52088],{"class":51777},[28,142313,16058],{"class":34},[28,142315,142316,142318,142320,142322],{"class":30,"line":77},[28,142317,71355],{"class":38},[28,142319,51914],{"class":34},[28,142321,140906],{"class":38},[28,142323,1781],{"class":34},[28,142325,142326],{"class":30,"line":114},[28,142327,2055],{"class":34},[14,142329,140405],{},[18,142331,142332],{"className":126946,"code":140889,"language":126948,"meta":23,"style":23},[25,142333,142334,142340,142350],{"__ignoreMap":23},[28,142335,142336,142338],{"class":30,"line":31},[28,142337,52088],{"class":51777},[28,142339,16058],{"class":34},[28,142341,142342,142344,142346,142348],{"class":30,"line":77},[28,142343,71355],{"class":38},[28,142345,51914],{"class":34},[28,142347,140906],{"class":38},[28,142349,1781],{"class":34},[28,142351,142352],{"class":30,"line":114},[28,142353,2055],{"class":34},[605,142355,142357],{"id":142356},"_1634-底部实现","16.3.4 底部实现",[14,142359,140316],{},[18,142361,142362],{"className":126946,"code":140889,"language":126948,"meta":23,"style":23},[25,142363,142364,142370,142380],{"__ignoreMap":23},[28,142365,142366,142368],{"class":30,"line":31},[28,142367,52088],{"class":51777},[28,142369,16058],{"class":34},[28,142371,142372,142374,142376,142378],{"class":30,"line":77},[28,142373,71355],{"class":38},[28,142375,51914],{"class":34},[28,142377,140906],{"class":38},[28,142379,1781],{"class":34},[28,142381,142382],{"class":30,"line":114},[28,142383,2055],{"class":34},[14,142385,140405],{},[18,142387,142388],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,142389,142390,142394,142408,142412],{"__ignoreMap":23},[28,142391,142392],{"class":30,"line":31},[28,142393,131057],{"class":73},[28,142395,142396,142398,142400,142402,142404,142406],{"class":30,"line":77},[28,142397,1529],{"class":34},[28,142399,52088],{"class":51777},[28,142401,53963],{"class":2453},[28,142403,83],{"class":34},[28,142405,131070],{"class":735},[28,142407,51784],{"class":34},[28,142409,142410],{"class":30,"line":114},[28,142411,131077],{"class":34},[28,142413,142414,142416,142418],{"class":30,"line":128},[28,142415,52262],{"class":34},[28,142417,52088],{"class":51777},[28,142419,51784],{"class":34},[60,142421,142423],{"id":142422},"_164-项目总结","16.4 项目总结",[588,142425,142426,142429,142432,142435],{},[591,142427,142428],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[591,142430,142431],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[591,142433,142434],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[591,142436,142437],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[420,142439],{"style":126802,"src":142440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[588,142442,142443],{"start":393},[591,142444,142445],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[420,142447],{"style":126802,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[588,142450,142451],{"start":409},[591,142452,142453],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[420,142455],{"style":126802,"src":142456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[18,142458,142459],{"className":127693,"code":137103,"language":127695,"meta":23,"style":23},[25,142460,142461],{"__ignoreMap":23},[28,142462,142463,142465,142467,142469,142471,142473,142475,142477,142479,142481,142483,142485],{"class":30,"line":31},[28,142464,1529],{"class":34},[28,142466,54298],{"class":51777},[28,142468,54301],{"class":2453},[28,142470,83],{"class":34},[28,142472,63176],{"class":735},[28,142474,15406],{"class":2453},[28,142476,83],{"class":34},[28,142478,137124],{"class":735},[28,142480,61497],{"class":2453},[28,142482,83],{"class":34},[28,142484,137131],{"class":735},[28,142486,51784],{"class":34},[588,142488,142489,142492],{"start":1711},[591,142490,142491],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[591,142493,142494],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[547,142496,142497],{},"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":77,"depth":77,"links":142499},[142500,142505,142512,142520],{"id":140126,"depth":77,"text":140127,"children":142501},[142502,142503,142504],{"id":140130,"depth":114,"text":140131},{"id":140861,"depth":114,"text":140862},{"id":141174,"depth":114,"text":141175},{"id":141474,"depth":77,"text":141475,"children":142506},[142507,142508,142510],{"id":141478,"depth":114,"text":141479},{"id":141496,"depth":114,"text":142509},"16.2.2 列表页 header 和 nav 修改",{"id":141780,"depth":114,"text":142511},"16.2.3 列表页主体 sk_container",{"id":141972,"depth":77,"text":141973,"children":142513},[142514,142515,142517,142519],{"id":141987,"depth":114,"text":141988},{"id":141999,"depth":114,"text":142516},"16.3.2 header 头部实现",{"id":142078,"depth":114,"text":142518},"16.3.3 registerarea 主体模块实现",{"id":142356,"depth":114,"text":142357},{"id":142422,"depth":77,"text":142423},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140118,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142527,"title":142528,"body":142529,"description":559,"extension":560,"meta":142637,"navigation":562,"path":142638,"seo":142639,"stem":142640,"__hash__":142641},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142530,"toc":142632},[142531,142534,142538,142541,142544,142553,142562,142566,142571,142578,142596,142599,142602,142605,142608,142611,142614,142617,142620,142623,142626,142629],[10,142532,142528],{"id":142533},"_17-web服务器与网站发布",[60,142535,142537],{"id":142536},"_171-web服务器","17.1 Web服务器",[14,142539,142540],{},"把自己网站上传到服务器上，可以让其他人访问",[420,142542],{"style":126802,"src":142543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142545,142546,142549,142550],{},[780,142547,142548],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[780,142551,142552],{},"Web 服务器等",[14,142554,142555,142556,101412,142559,26227],{},"根据服务器在网络中所在的位置不同，又可分为 ",[780,142557,142558],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[780,142560,142561],{},"远程服务器",[605,142563,142565],{"id":142564},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142567,142568],{},[780,142569,142570],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142572,142573,142574],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[80,142575,142576],{"href":142576,"rel":142577},"http:\u002F\u002Ffree.3v.do\u002F",[24351],[1626,142579,142580,142583,142586,142593],{},[591,142581,142582],{},"去免费空间网站注册账号。",[591,142584,142585],{},"记录下主机名、用户名、密码、域名。",[591,142587,142588,142589,142592],{},"利用 ",[25,142590,142591],{},"utftp"," 软件 上传网站到远程服务器",[591,142594,142595],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142597,142598],{},"使用软件上传，对上传软件文件进行解压",[420,142600],{"style":126802,"src":142601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[420,142603],{"style":126802,"src":142604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142606,142607],{},"输入刚刚申请的服务器账号信息：",[420,142609],{"style":126802,"src":142610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[420,142612],{"style":126802,"src":142613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[420,142615],{"style":126802,"src":142616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[420,142618],{"style":126802,"src":142619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142621,142622],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[420,142624],{"style":126802,"src":142625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142627,142628],{},"浏览器输入域名即可访问",[14,142630,142631],{},"首页一定必须是index",{"title":23,"searchDepth":77,"depth":77,"links":142633},[142634],{"id":142536,"depth":77,"text":142537,"children":142635},[142636],{"id":142564,"depth":114,"text":142565},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142528,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142643,"title":142644,"body":142645,"description":559,"extension":560,"meta":143572,"navigation":562,"path":143573,"seo":143574,"stem":143575,"__hash__":143576},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142646,"toc":143555},[142647,142650,142654,142657,142660,142671,142674,142678,142682,142687,142690,142693,142696,142699,142703,142729,142733,142737,142740,142743,142747,142780,142784,142787,142790,142854,142858,142862,142865,142868,142871,142875,142920,142924,142927,142957,142961,142965,142968,142971,142975,142978,143047,143050,143158,143160,143166,143170,143173,143176,143272,143275,143279,143303,143307,143310,143314,143317,143321,143324,143327,143330,143333,143337,143340,143343,143347,143351,143354,143357,143360,143363,143367,143370,143374,143377,143380,143425,143429,143433,143436,143439,143442,143474,143478,143481,143515,143519,143522,143552],[10,142648,142644],{"id":142649},"_18-2d动画与3d转换",[60,142651,142653],{"id":142652},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142655,142656],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142658,142659],{},"转换（transform）你可以简单理解为变形",[1626,142661,142662,142665,142668],{},[591,142663,142664],{},"移动：translate",[591,142666,142667],{},"旋转：rotate",[591,142669,142670],{},"缩放：scale",[420,142672],{"style":126802,"src":142673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[605,142675,142677],{"id":142676},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22484,142679,142681],{"id":142680},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142683,142684,142685],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[780,142686,133605],{},[420,142688],{"style":126802,"src":142689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142691,142692],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142694,142695],{},"对于行内元素无效",[14,142697,142698],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22484,142700,142702],{"id":142701},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[18,142704,142705],{"className":126946,"code":139135,"language":126948,"meta":23,"style":23},[25,142706,142707,142713,142725],{"__ignoreMap":23},[28,142708,142709,142711],{"class":30,"line":31},[28,142710,52088],{"class":51777},[28,142712,16058],{"class":34},[28,142714,142715,142717,142719,142721,142723],{"class":30,"line":77},[28,142716,70947],{"class":38},[28,142718,51914],{"class":34},[28,142720,822],{"class":38},[28,142722,52033],{"class":38},[28,142724,1781],{"class":34},[28,142726,142727],{"class":30,"line":114},[28,142728,2055],{"class":34},[605,142730,142732],{"id":142731},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22484,142734,142736],{"id":142735},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142738,142739],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[420,142741],{"style":126802,"src":142742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22484,142744,142746],{"id":142745},"_18122-旋转效果","18.1.2.2 旋转效果",[18,142748,142750],{"className":126946,"code":142749,"language":126948,"meta":23,"style":23},"div {\n  transform: rotate(45deg);\n}\n",[25,142751,142752,142758,142776],{"__ignoreMap":23},[28,142753,142754,142756],{"class":30,"line":31},[28,142755,52088],{"class":51777},[28,142757,16058],{"class":34},[28,142759,142760,142762,142764,142767,142769,142771,142774],{"class":30,"line":77},[28,142761,136930],{"class":38},[28,142763,51914],{"class":34},[28,142765,142766],{"class":38},"rotate",[28,142768,367],{"class":34},[28,142770,1151],{"class":38},[28,142772,142773],{"class":42},"deg",[28,142775,3209],{"class":34},[28,142777,142778],{"class":30,"line":114},[28,142779,2055],{"class":34},[22484,142781,142783],{"id":142782},"_18123-三角做法","18.1.2.3 三角做法",[14,142785,142786],{},"该下标当经过最外层大盒子时会实现向上反转",[420,142788],{"style":126802,"src":142789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[18,142791,142792],{"className":126946,"code":135466,"language":126948,"meta":23,"style":23},[25,142793,142794,142798,142804,142814,142824,142840,142850],{"__ignoreMap":23},[28,142795,142796],{"class":30,"line":31},[28,142797,135473],{"class":73},[28,142799,142800,142802],{"class":30,"line":77},[28,142801,135478],{"class":2453},[28,142803,16058],{"class":34},[28,142805,142806,142808,142810,142812],{"class":30,"line":114},[28,142807,71045],{"class":38},[28,142809,51914],{"class":34},[28,142811,822],{"class":38},[28,142813,1781],{"class":34},[28,142815,142816,142818,142820,142822],{"class":30,"line":128},[28,142817,71265],{"class":38},[28,142819,51914],{"class":34},[28,142821,822],{"class":38},[28,142823,1781],{"class":34},[28,142825,142826,142828,142830,142832,142834,142836,142838],{"class":30,"line":393},[28,142827,71373],{"class":38},[28,142829,51914],{"class":34},[28,142831,225],{"class":38},[28,142833,51969],{"class":42},[28,142835,51998],{"class":38},[28,142837,64468],{"class":38},[28,142839,1781],{"class":34},[28,142841,142842,142844,142846,142848],{"class":30,"line":409},[28,142843,135521],{"class":38},[28,142845,51914],{"class":34},[28,142847,62846],{"class":38},[28,142849,1781],{"class":34},[28,142851,142852],{"class":30,"line":1711},[28,142853,2055],{"class":34},[605,142855,142857],{"id":142856},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22484,142859,142861],{"id":142860},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142863,142864],{},"设置中心点",[420,142866],{"style":126802,"src":142867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142869,142870],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22484,142872,142874],{"id":142873},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[18,142876,142878],{"className":126946,"code":142877,"language":126948,"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,142879,142880,142885,142891,142906,142911,142916],{"__ignoreMap":23},[28,142881,142882],{"class":30,"line":31},[28,142883,142884],{"class":73},"\u002F* 转换中心点 *\u002F\n",[28,142886,142887,142889],{"class":30,"line":77},[28,142888,52088],{"class":51777},[28,142890,16058],{"class":34},[28,142892,142893,142896,142898,142900,142902,142904],{"class":30,"line":114},[28,142894,142895],{"class":38},"  transform-origin",[28,142897,51914],{"class":34},[28,142899,52069],{"class":38},[28,142901,17630],{"class":38},[28,142903,130809],{"class":34},[28,142905,135619],{"class":73},[28,142907,142908],{"class":30,"line":128},[28,142909,142910],{"class":73},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[28,142912,142913],{"class":30,"line":393},[28,142914,142915],{"class":73},"  \u002F* transform-origin: left top; *\u002F\n",[28,142917,142918],{"class":30,"line":409},[28,142919,2055],{"class":34},[22484,142921,142923],{"id":142922},"_18133-旋转案例","18.1.3.3 旋转案例",[420,142925],{"style":126802,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[18,142928,142929],{"className":126946,"code":142749,"language":126948,"meta":23,"style":23},[25,142930,142931,142937,142953],{"__ignoreMap":23},[28,142932,142933,142935],{"class":30,"line":31},[28,142934,52088],{"class":51777},[28,142936,16058],{"class":34},[28,142938,142939,142941,142943,142945,142947,142949,142951],{"class":30,"line":77},[28,142940,136930],{"class":38},[28,142942,51914],{"class":34},[28,142944,142766],{"class":38},[28,142946,367],{"class":34},[28,142948,1151],{"class":38},[28,142950,142773],{"class":42},[28,142952,3209],{"class":34},[28,142954,142955],{"class":30,"line":114},[28,142956,2055],{"class":34},[605,142958,142960],{"id":142959},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22484,142962,142964],{"id":142963},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142966,142967],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[420,142969],{"style":126802,"src":142970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22484,142972,142974],{"id":142973},"_18142-分页按钮","18.1.4.2 分页按钮",[420,142976],{"style":126802,"src":142977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[18,142979,142981],{"className":126946,"code":142980,"language":126948,"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,142982,142983,142989,143005,143009,143013,143018,143024,143038,143043],{"__ignoreMap":23},[28,142984,142985,142987],{"class":30,"line":31},[28,142986,52088],{"class":51777},[28,142988,16058],{"class":34},[28,142990,142991,142993,142995,142998,143000,143003],{"class":30,"line":77},[28,142992,136930],{"class":38},[28,142994,51914],{"class":34},[28,142996,142997],{"class":38},"scale",[28,142999,367],{"class":34},[28,143001,143002],{"class":38},"1.2",[28,143004,3209],{"class":34},[28,143006,143007],{"class":30,"line":114},[28,143008,2055],{"class":34},[28,143010,143011],{"class":30,"line":128},[28,143012,136407],{"class":34},[28,143014,143015],{"class":30,"line":393},[28,143016,143017],{"class":73},"\u002F* 2D 缩放 *\u002F\n",[28,143019,143020,143022],{"class":30,"line":409},[28,143021,52088],{"class":51777},[28,143023,16058],{"class":34},[28,143025,143026,143028,143030,143032,143034,143036],{"class":30,"line":1711},[28,143027,136930],{"class":38},[28,143029,51914],{"class":34},[28,143031,142997],{"class":38},[28,143033,367],{"class":34},[28,143035,143002],{"class":38},[28,143037,3209],{"class":34},[28,143039,143040],{"class":30,"line":1802},[28,143041,143042],{"class":73},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[28,143044,143045],{"class":30,"line":1808},[28,143046,2055],{"class":34},[14,143048,143049],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[18,143051,143053],{"className":126946,"code":143052,"language":126948,"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,143054,143055,143060,143070,143091,143112,143116,143121,143127,143154],{"__ignoreMap":23},[28,143056,143057],{"class":30,"line":31},[28,143058,143059],{"class":73},"\u002F* 定义动画 *\u002F\n",[28,143061,143062,143065,143068],{"class":30,"line":77},[28,143063,143064],{"class":42},"@keyframes",[28,143066,143067],{"class":5704}," move",[28,143069,16058],{"class":34},[28,143071,143072,143075,143077,143079,143081,143084,143086,143088],{"class":30,"line":114},[28,143073,143074],{"class":2453},"  0%",[28,143076,80284],{"class":34},[28,143078,48611],{"class":38},[28,143080,51914],{"class":34},[28,143082,143083],{"class":38},"translateX",[28,143085,367],{"class":34},[28,143087,822],{"class":38},[28,143089,143090],{"class":34},"); }\n",[28,143092,143093,143096,143098,143100,143102,143104,143106,143108,143110],{"class":30,"line":128},[28,143094,143095],{"class":2453},"  100%",[28,143097,80284],{"class":34},[28,143099,48611],{"class":38},[28,143101,51914],{"class":34},[28,143103,143083],{"class":38},[28,143105,367],{"class":34},[28,143107,938],{"class":38},[28,143109,51969],{"class":42},[28,143111,143090],{"class":34},[28,143113,143114],{"class":30,"line":393},[28,143115,2055],{"class":34},[28,143117,143118],{"class":30,"line":409},[28,143119,143120],{"class":73},"\u002F* 调用动画 *\u002F\n",[28,143122,143123,143125],{"class":30,"line":1711},[28,143124,52088],{"class":51777},[28,143126,16058],{"class":34},[28,143128,143129,143132,143134,143136,143138,143140,143142,143144,143146,143149,143152],{"class":30,"line":1802},[28,143130,143131],{"class":38},"  animation",[28,143133,51914],{"class":34},[28,143135,135632],{"class":38},[28,143137,25605],{"class":38},[28,143139,1315],{"class":42},[28,143141,79157],{"class":38},[28,143143,4581],{"class":38},[28,143145,1315],{"class":42},[28,143147,143148],{"class":38}," infinite",[28,143150,143151],{"class":38}," alternate",[28,143153,1781],{"class":34},[28,143155,143156],{"class":30,"line":1808},[28,143157,2055],{"class":34},[14,143159,143049],{},[18,143161,143164],{"className":143162,"code":143163,"language":5675},[5673],"\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,143165,143163],{"__ignoreMap":23},[22484,143167,143169],{"id":143168},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143171,143172],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[420,143174],{"style":126802,"src":143175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[18,143177,143178],{"className":126946,"code":143052,"language":126948,"meta":23,"style":23},[25,143179,143180,143184,143192,143210,143230,143234,143238,143244,143268],{"__ignoreMap":23},[28,143181,143182],{"class":30,"line":31},[28,143183,143059],{"class":73},[28,143185,143186,143188,143190],{"class":30,"line":77},[28,143187,143064],{"class":42},[28,143189,143067],{"class":5704},[28,143191,16058],{"class":34},[28,143193,143194,143196,143198,143200,143202,143204,143206,143208],{"class":30,"line":114},[28,143195,143074],{"class":2453},[28,143197,80284],{"class":34},[28,143199,48611],{"class":38},[28,143201,51914],{"class":34},[28,143203,143083],{"class":38},[28,143205,367],{"class":34},[28,143207,822],{"class":38},[28,143209,143090],{"class":34},[28,143211,143212,143214,143216,143218,143220,143222,143224,143226,143228],{"class":30,"line":128},[28,143213,143095],{"class":2453},[28,143215,80284],{"class":34},[28,143217,48611],{"class":38},[28,143219,51914],{"class":34},[28,143221,143083],{"class":38},[28,143223,367],{"class":34},[28,143225,938],{"class":38},[28,143227,51969],{"class":42},[28,143229,143090],{"class":34},[28,143231,143232],{"class":30,"line":393},[28,143233,2055],{"class":34},[28,143235,143236],{"class":30,"line":409},[28,143237,143120],{"class":73},[28,143239,143240,143242],{"class":30,"line":1711},[28,143241,52088],{"class":51777},[28,143243,16058],{"class":34},[28,143245,143246,143248,143250,143252,143254,143256,143258,143260,143262,143264,143266],{"class":30,"line":1802},[28,143247,143131],{"class":38},[28,143249,51914],{"class":34},[28,143251,135632],{"class":38},[28,143253,25605],{"class":38},[28,143255,1315],{"class":42},[28,143257,79157],{"class":38},[28,143259,4581],{"class":38},[28,143261,1315],{"class":42},[28,143263,143148],{"class":38},[28,143265,143151],{"class":38},[28,143267,1781],{"class":34},[28,143269,143270],{"class":30,"line":1808},[28,143271,2055],{"class":34},[14,143273,143274],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[605,143276,143278],{"id":143277},"_1823-知识点回顾","18.2.3 知识点回顾",[18,143280,143281],{"className":126946,"code":129115,"language":126948,"meta":23,"style":23},[25,143282,143283,143289,143299],{"__ignoreMap":23},[28,143284,143285,143287],{"class":30,"line":31},[28,143286,52088],{"class":51777},[28,143288,16058],{"class":34},[28,143290,143291,143293,143295,143297],{"class":30,"line":77},[28,143292,129128],{"class":38},[28,143294,51914],{"class":34},[28,143296,62213],{"class":38},[28,143298,1781],{"class":34},[28,143300,143301],{"class":30,"line":114},[28,143302,2055],{"class":34},[60,143304,143306],{"id":143305},"_183-3d-转换","18.3 3D 转换",[14,143308,143309],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[605,143311,143313],{"id":143312},"_1831-坐标轴认识","18.3.1 坐标轴认识",[420,143315],{"style":126802,"src":143316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[605,143318,143320],{"id":143319},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[420,143322],{"style":126802,"src":143323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143325,143326],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143328,143329],{},"translate3d的效果需要搭配透视perspective来使用",[420,143331],{"style":126802,"src":143332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[605,143334,143336],{"id":143335},"_1833-透视-perspective","18.3.3 透视 perspective",[420,143338],{"style":126802,"src":143339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143341,143342],{},"透视写在父盒子上，单位为像素",[605,143344,143346],{"id":143345},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22484,143348,143350],{"id":143349},"_18341-分开解释","18.3.4.1 分开解释",[420,143352],{"style":126802,"src":143353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[420,143355],{"style":126802,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[420,143358],{"style":126802,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143361,143362],{},"总结来说就是左手原则",[22484,143364,143366],{"id":143365},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[420,143368],{"style":126802,"src":143369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[605,143371,143373],{"id":143372},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[420,143375],{"style":126802,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[420,143378],{"style":126802,"src":143379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[18,143381,143383],{"className":126946,"code":143382,"language":126948,"meta":23,"style":23},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[25,143384,143385,143391,143404,143421],{"__ignoreMap":23},[28,143386,143387,143389],{"class":30,"line":31},[28,143388,52088],{"class":51777},[28,143390,16058],{"class":34},[28,143392,143393,143396,143398,143400,143402],{"class":30,"line":77},[28,143394,143395],{"class":38},"  perspective",[28,143397,51914],{"class":34},[28,143399,65551],{"class":38},[28,143401,51969],{"class":42},[28,143403,1781],{"class":34},[28,143405,143406,143408,143410,143413,143415,143417,143419],{"class":30,"line":114},[28,143407,136930],{"class":38},[28,143409,51914],{"class":34},[28,143411,143412],{"class":38},"rotateX",[28,143414,367],{"class":34},[28,143416,1151],{"class":38},[28,143418,142773],{"class":42},[28,143420,3209],{"class":34},[28,143422,143423],{"class":30,"line":128},[28,143424,2055],{"class":34},[605,143426,143428],{"id":143427},"_1836-案例","18.3.6 案例",[22484,143430,143432],{"id":143431},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[420,143434],{"style":126802,"src":143435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[420,143437],{"style":126802,"src":143438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[420,143440],{"style":126802,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[18,143443,143445],{"className":126946,"code":143444,"language":126948,"meta":23,"style":23},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[25,143446,143447,143452,143458,143470],{"__ignoreMap":23},[28,143448,143449],{"class":30,"line":31},[28,143450,143451],{"class":73},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[28,143453,143454,143456],{"class":30,"line":77},[28,143455,133943],{"class":2453},[28,143457,16058],{"class":34},[28,143459,143460,143462,143464,143466,143468],{"class":30,"line":114},[28,143461,143395],{"class":38},[28,143463,51914],{"class":34},[28,143465,65551],{"class":38},[28,143467,51969],{"class":42},[28,143469,1781],{"class":34},[28,143471,143472],{"class":30,"line":128},[28,143473,2055],{"class":34},[22484,143475,143477],{"id":143476},"_18362-3d导航栏","18.3.6.2 3D导航栏",[420,143479],{"style":126802,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[18,143482,143483],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,143484,143485,143489,143503,143507],{"__ignoreMap":23},[28,143486,143487],{"class":30,"line":31},[28,143488,131057],{"class":73},[28,143490,143491,143493,143495,143497,143499,143501],{"class":30,"line":77},[28,143492,1529],{"class":34},[28,143494,52088],{"class":51777},[28,143496,53963],{"class":2453},[28,143498,83],{"class":34},[28,143500,131070],{"class":735},[28,143502,51784],{"class":34},[28,143504,143505],{"class":30,"line":114},[28,143506,131077],{"class":34},[28,143508,143509,143511,143513],{"class":30,"line":128},[28,143510,52262],{"class":34},[28,143512,52088],{"class":51777},[28,143514,51784],{"class":34},[22484,143516,143518],{"id":143517},"_18363-旋转木马","18.3.6.3 旋转木马",[420,143520],{"style":126802,"src":143521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[18,143523,143524],{"className":126946,"code":142749,"language":126948,"meta":23,"style":23},[25,143525,143526,143532,143548],{"__ignoreMap":23},[28,143527,143528,143530],{"class":30,"line":31},[28,143529,52088],{"class":51777},[28,143531,16058],{"class":34},[28,143533,143534,143536,143538,143540,143542,143544,143546],{"class":30,"line":77},[28,143535,136930],{"class":38},[28,143537,51914],{"class":34},[28,143539,142766],{"class":38},[28,143541,367],{"class":34},[28,143543,1151],{"class":38},[28,143545,142773],{"class":42},[28,143547,3209],{"class":34},[28,143549,143550],{"class":30,"line":114},[28,143551,2055],{"class":34},[547,143553,143554],{},"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":77,"depth":77,"links":143556},[143557,143564],{"id":142652,"depth":77,"text":142653,"children":143558},[143559,143560,143561,143562,143563],{"id":142676,"depth":114,"text":142677},{"id":142731,"depth":114,"text":142732},{"id":142856,"depth":114,"text":142857},{"id":142959,"depth":114,"text":142960},{"id":143277,"depth":114,"text":143278},{"id":143305,"depth":77,"text":143306,"children":143565},[143566,143567,143568,143569,143570,143571],{"id":143312,"depth":114,"text":143313},{"id":143319,"depth":114,"text":143320},{"id":143335,"depth":114,"text":143336},{"id":143345,"depth":114,"text":143346},{"id":143372,"depth":114,"text":143373},{"id":143427,"depth":114,"text":143428},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142644,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143578,"title":143579,"body":143580,"description":559,"extension":560,"meta":143783,"navigation":562,"path":143784,"seo":143785,"stem":143786,"__hash__":143787},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143581,"toc":143772},[143582,143585,143589,143592,143595,143599,143602,143605,143608,143612,143615,143619,143622,143626,143629,143633,143647,143651,143676,143679,143682,143699,143703,143707,143710,143713,143717,143720,143723,143741,143745,143748,143762,143766,143769],[10,143583,143579],{"id":143584},"_19-移动端基础-前缀现状与视口",[60,143586,143588],{"id":143587},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[420,143590],{"style":126802,"src":143591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143593,143594],{},"意思就是加个前缀，增加兼容性",[60,143596,143598],{"id":143597},"_192-移动端现状认识","19.2 移动端现状认识",[420,143600],{"style":126802,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143603,143604],{},"调试方法：",[420,143606],{"style":126802,"src":143607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[60,143609,143611],{"id":143610},"_193-视口","19.3 视口",[14,143613,143614],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[605,143616,143618],{"id":143617},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[420,143620],{"style":126802,"src":143621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[605,143623,143625],{"id":143624},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[420,143627],{"style":126802,"src":143628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[605,143630,143632],{"id":143631},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1626,143634,143635,143638,143641,143644],{},[591,143636,143637],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[591,143639,143640],{},"理想视口，对设备来讲，是最理想的视口尺寸",[591,143642,143643],{},"需要手动添写meta视口标签通知浏览器操作",[591,143645,143646],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[605,143648,143650],{"id":143649},"_1934-meta视口标签","19.3.4 meta视口标签",[18,143652,143654],{"className":127693,"code":143653,"language":127695,"meta":23,"style":23},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[25,143655,143656],{"__ignoreMap":23},[28,143657,143658,143660,143662,143664,143666,143668,143670,143672,143674],{"class":30,"line":31},[28,143659,1529],{"class":34},[28,143661,51821],{"class":51777},[28,143663,15406],{"class":2453},[28,143665,83],{"class":34},[28,143667,51868],{"class":735},[28,143669,51848],{"class":2453},[28,143671,83],{"class":34},[28,143673,51875],{"class":735},[28,143675,51784],{"class":34},[420,143677],{"style":126802,"src":143678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143680,143681],{},"标准视口设置：",[588,143683,143684,143687,143690,143693,143696],{},[591,143685,143686],{},"视口宽度和设备保持一致",[591,143688,143689],{},"视口的默认缩放比例1.0",[591,143691,143692],{},"不允许用户自行缩放",[591,143694,143695],{},"最大允许的缩放比例1.0",[591,143697,143698],{},"最小允许的缩放比例1.0",[605,143700,143702],{"id":143701},"_1935-二倍图","19.3.5 二倍图",[22484,143704,143706],{"id":143705},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[420,143708],{"style":126802,"src":143709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[420,143711],{"style":126802,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22484,143714,143716],{"id":143715},"_19352-多倍图","19.3.5.2 多倍图",[420,143718],{"style":126802,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143721,143722],{},"二倍图法，代码如下：",[18,143724,143726],{"className":126946,"code":143725,"language":126948,"meta":23,"style":23},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[25,143727,143728,143733],{"__ignoreMap":23},[28,143729,143730],{"class":30,"line":31},[28,143731,143732],{"class":73},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[28,143734,143735,143738],{"class":30,"line":77},[28,143736,143737],{"class":51777},"background-size",[28,143739,143740],{"class":34},": 50% 50%;\n",[22484,143742,143744],{"id":143743},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[420,143746],{"style":126802,"src":143747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[588,143749,143750,143753,143756,143759],{},[591,143751,143752],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[591,143754,143755],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[591,143757,143758],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[591,143760,143761],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22484,143763,143765],{"id":143764},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[420,143767],{"style":126802,"src":143768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[547,143770,143771],{},"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":77,"depth":77,"links":143773},[143774,143775,143776],{"id":143587,"depth":77,"text":143588},{"id":143597,"depth":77,"text":143598},{"id":143610,"depth":77,"text":143611,"children":143777},[143778,143779,143780,143781,143782],{"id":143617,"depth":114,"text":143618},{"id":143624,"depth":114,"text":143625},{"id":143631,"depth":114,"text":143632},{"id":143649,"depth":114,"text":143650},{"id":143701,"depth":114,"text":143702},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143579,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143789,"title":143790,"body":143791,"description":559,"extension":560,"meta":144668,"navigation":562,"path":144669,"seo":144670,"stem":144671,"__hash__":144672},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143792,"toc":144652},[143793,143796,143800,143807,143810,143817,143820,143825,143828,143832,143836,143843,143846,143849,143853,143856,143859,143862,143865,143868,143872,143875,143879,143881,143884,143887,143890,143893,143895,143898,143900,143930,143932,143962,143966,143969,143973,143976,143993,143996,143999,144075,144077,144080,144083,144086,144089,144091,144094,144097,144101,144123,144126,144129,144133,144136,144142,144145,144149,144152,144155,144159,144162,144165,144168,144172,144175,144178,144181,144184,144188,144191,144195,144202,144205,144208,144211,144214,144224,144227,144230,144237,144240,144244,144247,144250,144254,144257,144260,144263,144308,144311,144314,144317,144319,144448,144450,144488,144491,144494,144496,144614,144616,144650],[10,143794,143790],{"id":143795},"_20-移动端布局实战上篇",[60,143797,143799],{"id":143798},"_201-移动端主流方案","20.1 移动端主流方案",[588,143801,143802],{},[591,143803,143804],{},[780,143805,143806],{},"单独移动端页面（主流）",[420,143808],{"style":126802,"src":143809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[588,143811,143812],{"start":77},[591,143813,143814],{},[780,143815,143816],{},"响应式兼容PC移动端",[420,143818],{"style":126802,"src":143819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[588,143821,143822],{"start":114},[591,143823,143824],{},"两种页面选型布局方式",[420,143826],{"style":126802,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[60,143829,143831],{"id":143830},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[605,143833,143835],{"id":143834},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143837,143838,143839],{},"官网地址： ",[80,143840,143841],{"href":143841,"rel":143842},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24351],[420,143844],{"style":126802,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[420,143847],{"style":126802,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[605,143850,143852],{"id":143851},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[420,143854],{"style":126802,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[420,143857],{"style":126802,"src":143858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143860,143861],{},"去除高亮：",[14,143863,143864],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143866,143867],{},"-webkit- tap-highlight-color: transparent;",[60,143869,143871],{"id":143870},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[420,143873],{"style":126802,"src":143874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[60,143876,143878],{"id":143877},"_204-流式布局案例","20.4 流式布局案例",[14,143880,665],{},[14,143882,143883],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143885,143886],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143888,143889],{},"图片格式：",[420,143891],{"style":126802,"src":143892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143894,135989],{},[420,143896],{"style":126802,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143899,140316],{},[18,143901,143902],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,143903,143904],{"__ignoreMap":23},[28,143905,143906,143908,143910,143912,143914,143916,143918,143920,143922,143924,143926,143928],{"class":30,"line":31},[28,143907,1529],{"class":34},[28,143909,420],{"class":51777},[28,143911,55716],{"class":2453},[28,143913,83],{"class":34},[28,143915,134463],{"class":735},[28,143917,55724],{"class":2453},[28,143919,83],{"class":34},[28,143921,134470],{"class":735},[28,143923,134473],{"class":2453},[28,143925,83],{"class":34},[28,143927,134478],{"class":735},[28,143929,51784],{"class":34},[14,143931,140405],{},[18,143933,143934],{"className":127693,"code":134448,"language":127695,"meta":23,"style":23},[25,143935,143936],{"__ignoreMap":23},[28,143937,143938,143940,143942,143944,143946,143948,143950,143952,143954,143956,143958,143960],{"class":30,"line":31},[28,143939,1529],{"class":34},[28,143941,420],{"class":51777},[28,143943,55716],{"class":2453},[28,143945,83],{"class":34},[28,143947,134463],{"class":735},[28,143949,55724],{"class":2453},[28,143951,83],{"class":34},[28,143953,134470],{"class":735},[28,143955,134473],{"class":2453},[28,143957,83],{"class":34},[28,143959,134478],{"class":735},[28,143961,51784],{"class":34},[60,143963,143965],{"id":143964},"_205-flex布局","20.5 flex布局",[420,143967],{"style":126802,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[605,143970,143972],{"id":143971},"_2051-布局原理","20.5.1 布局原理",[14,143974,143975],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1626,143977,143978,143981,143984,143987,143990],{},[591,143979,143980],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[591,143982,143983],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[591,143985,143986],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[591,143988,143989],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[591,143991,143992],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143994,143995],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143997,143998],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[18,144000,144002],{"className":126946,"code":144001,"language":126948,"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,144003,144004,144009,144016,144026,144038,144049,144060,144071],{"__ignoreMap":23},[28,144005,144006],{"class":30,"line":31},[28,144007,144008],{"class":73},"\u002F* Flex 弹性布局 *\u002F\n",[28,144010,144011,144014],{"class":30,"line":77},[28,144012,144013],{"class":2453},".container",[28,144015,16058],{"class":34},[28,144017,144018,144020,144022,144024],{"class":30,"line":114},[28,144019,128562],{"class":38},[28,144021,51914],{"class":34},[28,144023,51954],{"class":38},[28,144025,1781],{"class":34},[28,144027,144028,144031,144033,144036],{"class":30,"line":128},[28,144029,144030],{"class":38},"  flex-direction",[28,144032,51914],{"class":34},[28,144034,144035],{"class":38},"row",[28,144037,1781],{"class":34},[28,144039,144040,144043,144045,144047],{"class":30,"line":393},[28,144041,144042],{"class":38},"  justify-content",[28,144044,51914],{"class":34},[28,144046,52145],{"class":38},[28,144048,1781],{"class":34},[28,144050,144051,144054,144056,144058],{"class":30,"line":409},[28,144052,144053],{"class":38},"  align-items",[28,144055,51914],{"class":34},[28,144057,52069],{"class":38},[28,144059,1781],{"class":34},[28,144061,144062,144065,144067,144069],{"class":30,"line":1711},[28,144063,144064],{"class":38},"  flex-wrap",[28,144066,51914],{"class":34},[28,144068,79087],{"class":38},[28,144070,1781],{"class":34},[28,144072,144073],{"class":30,"line":1802},[28,144074,2055],{"class":34},[14,144076,70930],{},[14,144078,144079],{},".form-item .male-label {",[14,144081,144082],{},"   margin-right: 20px;",[14,144084,144085],{},"   display: inline-flex;",[14,144087,144088],{},"   align-items: center;",[14,144090,1565],{},[420,144092],{"style":126802,"src":144093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[420,144095],{"style":126802,"src":144096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[605,144098,144100],{"id":144099},"_2052-常见父项属性","20.5.2 常见父项属性",[588,144102,144103,144106,144109,144112,144115,144118,144121],{},[591,144104,144105],{},"flex-direction：设置主轴的方向",[591,144107,144108],{},"justify-content：设置主轴上的子元素排列方式",[591,144110,144111],{},"flex-wrap：设置子元素是否换行",[591,144113,144114],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[591,144116,144117],{},"align-items：设置侧轴上的子元素排列方式（单行）",[591,144119,144120],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[591,144122,144105],{},[420,144124],{"style":126802,"src":144125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[420,144127],{"style":126802,"src":144128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[588,144130,144131],{"start":77},[591,144132,144108],{},[420,144134],{"style":126802,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144137,144138,144141],{},[25,144139,144140],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144143,144144],{},"跟着主轴走",[588,144146,144147],{"start":114},[591,144148,144111],{},[420,144150],{"style":126802,"src":144151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144153,144154],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[588,144156,144157],{"start":128},[591,144158,144114],{},[420,144160],{"style":126802,"src":144161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144163,144164],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144166,144167],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[588,144169,144170],{"start":393},[591,144171,144117],{},[420,144173],{"style":126802,"src":144174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144176,144177],{},"align-items与align-content之间的区别：",[14,144179,144180],{},"单找items，多找content",[420,144182],{"style":126802,"src":144183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[588,144185,144186],{"start":409},[591,144187,144120],{},[420,144189],{"style":126802,"src":144190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[605,144192,144194],{"id":144193},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[588,144196,144197],{},[591,144198,144199],{},[780,144200,144201],{},"flex 属性",[14,144203,144204],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[420,144206],{"style":126802,"src":144207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144209,144210],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144212,144213],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[588,144215,144216],{"start":77},[591,144217,144218,14281,144221],{},[780,144219,144220],{},"align-self",[780,144222,144223],{},"控制子项自己在侧轴上的排列方式",[420,144225],{"style":126802,"src":144226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144228,144229],{},"单个子盒子在父盒子侧轴上的排列方式",[588,144231,144232],{"start":114},[591,144233,144234,144236],{},[780,144235,95768],{}," 属性定义项目的排列顺序",[420,144238],{"style":126802,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[605,144241,144243],{"id":144242},"_2054-背景线性渐变","20.5.4 背景线性渐变",[420,144245],{"style":126802,"src":144246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144248,144249],{},"必须要添加浏览器的私有前缀",[605,144251,144253],{"id":144252},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144255,144256],{},"学到最重要的知识：",[14,144258,144259],{},"flex处理这样的布局思路",[420,144261],{"style":126802,"src":144262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[18,144264,144266],{"className":126946,"code":144265,"language":126948,"meta":23,"style":23},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[25,144267,144268,144274,144284,144294,144304],{"__ignoreMap":23},[28,144269,144270,144272],{"class":30,"line":31},[28,144271,144013],{"class":2453},[28,144273,16058],{"class":34},[28,144275,144276,144278,144280,144282],{"class":30,"line":77},[28,144277,128562],{"class":38},[28,144279,51914],{"class":34},[28,144281,51954],{"class":38},[28,144283,1781],{"class":34},[28,144285,144286,144288,144290,144292],{"class":30,"line":114},[28,144287,144042],{"class":38},[28,144289,51914],{"class":34},[28,144291,52069],{"class":38},[28,144293,1781],{"class":34},[28,144295,144296,144298,144300,144302],{"class":30,"line":128},[28,144297,144053],{"class":38},[28,144299,51914],{"class":34},[28,144301,52069],{"class":38},[28,144303,1781],{"class":34},[28,144305,144306],{"class":30,"line":393},[28,144307,2055],{"class":34},[14,144309,144310],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144312,144313],{},"使用属性选择器",[420,144315],{"style":126802,"src":144316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144318,69366],{},[18,144320,144322],{"className":127693,"code":144321,"language":127695,"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,144323,144324,144329,144343,144348,144368,144373,144392,144397,144416,144421,144440],{"__ignoreMap":23},[28,144325,144326],{"class":30,"line":31},[28,144327,144328],{"class":73},"\u003C!-- 携程网移动端案例结构 -->\n",[28,144330,144331,144333,144335,144337,144339,144341],{"class":30,"line":77},[28,144332,1529],{"class":34},[28,144334,52088],{"class":51777},[28,144336,53963],{"class":2453},[28,144338,83],{"class":34},[28,144340,92800],{"class":735},[28,144342,51784],{"class":34},[28,144344,144345],{"class":30,"line":114},[28,144346,144347],{"class":73},"  \u003C!-- 搜索栏 -->\n",[28,144349,144350,144352,144354,144356,144358,144361,144364,144366],{"class":30,"line":128},[28,144351,52621],{"class":34},[28,144353,52088],{"class":51777},[28,144355,53963],{"class":2453},[28,144357,83],{"class":34},[28,144359,144360],{"class":735},"\"search-index\"",[28,144362,144363],{"class":34},">...\u003C\u002F",[28,144365,52088],{"class":51777},[28,144367,51784],{"class":34},[28,144369,144370],{"class":30,"line":393},[28,144371,144372],{"class":73},"  \u003C!-- 焦点图 -->\n",[28,144374,144375,144377,144379,144381,144383,144386,144388,144390],{"class":30,"line":409},[28,144376,52621],{"class":34},[28,144378,52088],{"class":51777},[28,144380,53963],{"class":2453},[28,144382,83],{"class":34},[28,144384,144385],{"class":735},"\"focus\"",[28,144387,144363],{"class":34},[28,144389,52088],{"class":51777},[28,144391,51784],{"class":34},[28,144393,144394],{"class":30,"line":1711},[28,144395,144396],{"class":73},"  \u003C!-- 主导航 -->\n",[28,144398,144399,144401,144403,144405,144407,144410,144412,144414],{"class":30,"line":1802},[28,144400,52621],{"class":34},[28,144402,52088],{"class":51777},[28,144404,53963],{"class":2453},[28,144406,83],{"class":34},[28,144408,144409],{"class":735},"\"local-nav\"",[28,144411,144363],{"class":34},[28,144413,52088],{"class":51777},[28,144415,51784],{"class":34},[28,144417,144418],{"class":30,"line":1808},[28,144419,144420],{"class":73},"  \u003C!-- 子导航 -->\n",[28,144422,144423,144425,144427,144429,144431,144434,144436,144438],{"class":30,"line":1820},[28,144424,52621],{"class":34},[28,144426,52088],{"class":51777},[28,144428,53963],{"class":2453},[28,144430,83],{"class":34},[28,144432,144433],{"class":735},"\"nav-common\"",[28,144435,144363],{"class":34},[28,144437,52088],{"class":51777},[28,144439,51784],{"class":34},[28,144441,144442,144444,144446],{"class":30,"line":2102},[28,144443,52262],{"class":34},[28,144445,52088],{"class":51777},[28,144447,51784],{"class":34},[14,144449,70930],{},[18,144451,144452],{"className":126946,"code":137398,"language":126948,"meta":23,"style":23},[25,144453,144454,144468,144484],{"__ignoreMap":23},[28,144455,144456,144458,144460,144462,144464,144466],{"class":30,"line":31},[28,144457,54298],{"class":51777},[28,144459,35],{"class":34},[28,144461,103501],{"class":2453},[28,144463,83],{"class":42},[28,144465,63176],{"class":735},[28,144467,137415],{"class":34},[28,144469,144470,144472,144474,144476,144478,144480,144482],{"class":30,"line":77},[28,144471,71373],{"class":38},[28,144473,51914],{"class":34},[28,144475,39],{"class":38},[28,144477,51969],{"class":42},[28,144479,51998],{"class":38},[28,144481,130526],{"class":38},[28,144483,1781],{"class":34},[28,144485,144486],{"class":30,"line":114},[28,144487,2055],{"class":34},[14,144489,144490],{},"总代码和效果展示：",[420,144492],{"style":126802,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144495,69366],{},[18,144497,144498],{"className":127693,"code":144321,"language":127695,"meta":23,"style":23},[25,144499,144500,144504,144518,144522,144540,144544,144562,144566,144584,144588,144606],{"__ignoreMap":23},[28,144501,144502],{"class":30,"line":31},[28,144503,144328],{"class":73},[28,144505,144506,144508,144510,144512,144514,144516],{"class":30,"line":77},[28,144507,1529],{"class":34},[28,144509,52088],{"class":51777},[28,144511,53963],{"class":2453},[28,144513,83],{"class":34},[28,144515,92800],{"class":735},[28,144517,51784],{"class":34},[28,144519,144520],{"class":30,"line":114},[28,144521,144347],{"class":73},[28,144523,144524,144526,144528,144530,144532,144534,144536,144538],{"class":30,"line":128},[28,144525,52621],{"class":34},[28,144527,52088],{"class":51777},[28,144529,53963],{"class":2453},[28,144531,83],{"class":34},[28,144533,144360],{"class":735},[28,144535,144363],{"class":34},[28,144537,52088],{"class":51777},[28,144539,51784],{"class":34},[28,144541,144542],{"class":30,"line":393},[28,144543,144372],{"class":73},[28,144545,144546,144548,144550,144552,144554,144556,144558,144560],{"class":30,"line":409},[28,144547,52621],{"class":34},[28,144549,52088],{"class":51777},[28,144551,53963],{"class":2453},[28,144553,83],{"class":34},[28,144555,144385],{"class":735},[28,144557,144363],{"class":34},[28,144559,52088],{"class":51777},[28,144561,51784],{"class":34},[28,144563,144564],{"class":30,"line":1711},[28,144565,144396],{"class":73},[28,144567,144568,144570,144572,144574,144576,144578,144580,144582],{"class":30,"line":1802},[28,144569,52621],{"class":34},[28,144571,52088],{"class":51777},[28,144573,53963],{"class":2453},[28,144575,83],{"class":34},[28,144577,144409],{"class":735},[28,144579,144363],{"class":34},[28,144581,52088],{"class":51777},[28,144583,51784],{"class":34},[28,144585,144586],{"class":30,"line":1808},[28,144587,144420],{"class":73},[28,144589,144590,144592,144594,144596,144598,144600,144602,144604],{"class":30,"line":1820},[28,144591,52621],{"class":34},[28,144593,52088],{"class":51777},[28,144595,53963],{"class":2453},[28,144597,83],{"class":34},[28,144599,144433],{"class":735},[28,144601,144363],{"class":34},[28,144603,52088],{"class":51777},[28,144605,51784],{"class":34},[28,144607,144608,144610,144612],{"class":30,"line":2102},[28,144609,52262],{"class":34},[28,144611,52088],{"class":51777},[28,144613,51784],{"class":34},[14,144615,70930],{},[18,144617,144618],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,144619,144620,144624,144638,144642],{"__ignoreMap":23},[28,144621,144622],{"class":30,"line":31},[28,144623,131057],{"class":73},[28,144625,144626,144628,144630,144632,144634,144636],{"class":30,"line":77},[28,144627,1529],{"class":34},[28,144629,52088],{"class":51777},[28,144631,53963],{"class":2453},[28,144633,83],{"class":34},[28,144635,131070],{"class":735},[28,144637,51784],{"class":34},[28,144639,144640],{"class":30,"line":114},[28,144641,131077],{"class":34},[28,144643,144644,144646,144648],{"class":30,"line":128},[28,144645,52262],{"class":34},[28,144647,52088],{"class":51777},[28,144649,51784],{"class":34},[547,144651,138347],{},{"title":23,"searchDepth":77,"depth":77,"links":144653},[144654,144655,144659,144660,144661],{"id":143798,"depth":77,"text":143799},{"id":143830,"depth":77,"text":143831,"children":144656},[144657,144658],{"id":143834,"depth":114,"text":143835},{"id":143851,"depth":114,"text":143852},{"id":143870,"depth":77,"text":143871},{"id":143877,"depth":77,"text":143878},{"id":143964,"depth":77,"text":143965,"children":144662},[144663,144664,144665,144666,144667],{"id":143971,"depth":114,"text":143972},{"id":144099,"depth":114,"text":144100},{"id":144193,"depth":114,"text":144194},{"id":144242,"depth":114,"text":144243},{"id":144252,"depth":114,"text":144253},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143790,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144674,"title":144675,"body":144676,"description":559,"extension":560,"meta":145903,"navigation":562,"path":145904,"seo":145905,"stem":145906,"__hash__":145907},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144677,"toc":145881},[144678,144681,144685,144689,144692,144695,144699,144704,144707,144710,144713,144716,144719,144776,144779,144784,144787,144790,144794,144805,144809,144812,144815,144822,144827,144831,144834,144840,144843,144847,144850,144857,144860,144863,144870,144873,144880,144883,144886,144893,144896,144899,144901,144918,144922,144925,144928,144931,144935,144938,144941,144944,144947,144950,144953,144955,144958,144961,145023,145026,145136,145143,145149,145152,145155,145159,145162,145166,145171,145174,145181,145184,145190,145195,145198,145201,145204,145207,145210,145213,145216,145219,145275,145277,145303,145307,145310,145313,145316,145324,145327,145330,145334,145390,145393,145397,145403,145414,145417,145422,145425,145428,145434,145437,145440,145443,145446,145449,145452,145455,145458,145483,145489,145492,145495,145498,145501,145504,145507,145512,145515,145518,145521,145529,145532,145539,145542,145545,145547,145571,145573,145576,145579,145582,145585,145588,145591,145594,145628,145631,145634,145668,145675,145678,145681,145684,145687,145690,145693,145700,145703,145706,145709,145712,145719,145722,145725,145732,145735,145738,145742,145745,145748,145751,145754,145757,145760,145763,145766,145768,145792,145794,145818,145822,145833,145836,145839,145842,145845,145848,145851,145854,145857,145860,145863,145866,145869,145872,145875,145878],[10,144679,144675],{"id":144680},"_21-移动端布局实战下篇",[60,144682,144684],{"id":144683},"_211-rem适配布局","21.1 rem适配布局",[605,144686,144688],{"id":144687},"_2111-rem单位","21.1.1 rem单位",[420,144690],{"style":126802,"src":144691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144693,144694],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[605,144696,144698],{"id":144697},"_2112-媒体查询","21.1.2 媒体查询",[588,144700,144701],{},[591,144702,144703],{},"参数介绍",[420,144705],{"style":126802,"src":144706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[420,144708],{"style":126802,"src":144709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[420,144711],{"style":126802,"src":144712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[420,144714],{"style":126802,"src":144715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[420,144717],{"style":126802,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[18,144720,144722],{"className":126946,"code":144721,"language":126948,"meta":23,"style":23},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[25,144723,144724,144729,144748,144755,144768,144772],{"__ignoreMap":23},[28,144725,144726],{"class":30,"line":31},[28,144727,144728],{"class":73},"\u002F* 媒体查询 *\u002F\n",[28,144730,144731,144734,144736,144739,144741,144744,144746],{"class":30,"line":77},[28,144732,144733],{"class":42},"@media",[28,144735,2148],{"class":34},[28,144737,144738],{"class":38},"max-width",[28,144740,51914],{"class":34},[28,144742,144743],{"class":38},"768",[28,144745,51969],{"class":42},[28,144747,12928],{"class":34},[28,144749,144750,144753],{"class":30,"line":114},[28,144751,144752],{"class":2453},"  .container",[28,144754,16058],{"class":34},[28,144756,144757,144760,144762,144764,144766],{"class":30,"line":128},[28,144758,144759],{"class":38},"    width",[28,144761,51914],{"class":34},[28,144763,938],{"class":38},[28,144765,954],{"class":42},[28,144767,1781],{"class":34},[28,144769,144770],{"class":30,"line":393},[28,144771,127742],{"class":34},[28,144773,144774],{"class":30,"line":409},[28,144775,2055],{"class":34},[14,144777,144778],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[588,144780,144781],{"start":77},[591,144782,144783],{},"引入资源",[420,144785],{"style":126802,"src":144786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144788,144789],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[605,144791,144793],{"id":144792},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1626,144795,144796,144799,144802],{},[591,144797,144798],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[591,144800,144801],{},"媒体查询可以根据不同设备宽度来修改样式",[591,144803,144804],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[60,144806,144808],{"id":144807},"_212-less基础","21.2 Less基础",[14,144810,144811],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144813,144814],{},"Less可以解决该问题，它是css的扩展语言",[14,144816,144817,144818],{},"Less中文网址： ",[80,144819,144820],{"href":144820,"rel":144821},"http:\u002F\u002Flesscss.cn\u002F",[24351],[14,144823,144824],{},[780,144825,144826],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[605,144828,144830],{"id":144829},"_2121-less安装","21.2.1 less安装",[14,144832,144833],{},"如果使用vscode，则无需进行下方安装步骤",[14,144835,144836],{},[80,144837,144838],{"href":144838,"rel":144839},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24351],[420,144841],{"style":126802,"src":144842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[605,144844,144846],{"id":144845},"_2122-less使用","21.2.2 less使用",[14,144848,144849],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[588,144851,144852],{},[591,144853,144854],{},[780,144855,144856],{},"Less 变量",[420,144858],{"style":126802,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[420,144861],{"style":126802,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[588,144864,144865],{"start":77},[591,144866,144867],{},[780,144868,144869],{},"Less 编译",[420,144871],{"style":126802,"src":144872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[588,144874,144875],{"start":114},[591,144876,144877],{},[780,144878,144879],{},"Less 嵌套",[420,144881],{"style":126802,"src":144882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[420,144884],{"style":126802,"src":144885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[588,144887,144888],{"start":128},[591,144889,144890],{},[780,144891,144892],{},"Less 运算",[420,144894],{"style":126802,"src":144895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144897,144898],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144900,665],{},[1626,144902,144903,144906,144909,144912,144915],{},[591,144904,144905],{},"乘号（*）和除号（\u002F）的写法",[591,144907,144908],{},"运算符中间左右有个空格隔开 1px + 5",[591,144910,144911],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[591,144913,144914],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[591,144916,144917],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[60,144919,144921],{"id":144920},"_213-rem-适配方案","21.3 rem 适配方案",[14,144923,144924],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144926,144927],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[420,144929],{"style":126802,"src":144930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[605,144932,144934],{"id":144933},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144936,144937],{},"rem + 媒体查询 + less 技术",[420,144939],{"style":126802,"src":144940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144942,144943],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144945,144946],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[420,144948],{"style":126802,"src":144949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144951,144952],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144954,15119],{},[420,144956],{"style":126802,"src":144957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144959,144960],{},"index.html:",[18,144962,144964],{"className":126946,"code":144963,"language":126948,"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,144965,144966,144971,144977,144993,144997,145003,145019],{"__ignoreMap":23},[28,144967,144968],{"class":30,"line":31},[28,144969,144970],{"class":73},"\u002F* rem 适配方案 *\u002F\n",[28,144972,144973,144975],{"class":30,"line":77},[28,144974,51112],{"class":51777},[28,144976,16058],{"class":34},[28,144978,144979,144981,144983,144986,144988,144990],{"class":30,"line":114},[28,144980,71103],{"class":38},[28,144982,51914],{"class":34},[28,144984,144985],{"class":38},"62.5",[28,144987,954],{"class":42},[28,144989,130809],{"class":34},[28,144991,144992],{"class":73},"\u002F* 1rem = 10px *\u002F\n",[28,144994,144995],{"class":30,"line":128},[28,144996,2055],{"class":34},[28,144998,144999,145001],{"class":30,"line":393},[28,145000,130794],{"class":2453},[28,145002,16058],{"class":34},[28,145004,145005,145007,145009,145011,145014,145016],{"class":30,"line":409},[28,145006,71045],{"class":38},[28,145008,51914],{"class":34},[28,145010,225],{"class":38},[28,145012,145013],{"class":42},"rem",[28,145015,130809],{"class":34},[28,145017,145018],{"class":73},"\u002F* 100px *\u002F\n",[28,145020,145021],{"class":30,"line":1711},[28,145022,2055],{"class":34},[14,145024,145025],{},"common.less",[18,145027,145029],{"className":126946,"code":145028,"language":126948,"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,145030,145031,145037,145052,145056,145062,145076,145080,145084,145088,145094,145108,145112,145118,145132],{"__ignoreMap":23},[28,145032,145033,145035],{"class":30,"line":31},[28,145034,51112],{"class":51777},[28,145036,16058],{"class":34},[28,145038,145039,145041,145043,145045,145047,145049],{"class":30,"line":77},[28,145040,71103],{"class":38},[28,145042,51914],{"class":34},[28,145044,144985],{"class":38},[28,145046,954],{"class":42},[28,145048,26553],{"class":34},[28,145050,145051],{"class":73},"\u002F* 10px *\u002F\n",[28,145053,145054],{"class":30,"line":114},[28,145055,2055],{"class":34},[28,145057,145058,145060],{"class":30,"line":128},[28,145059,52088],{"class":51777},[28,145061,16058],{"class":34},[28,145063,145064,145066,145068,145070,145072,145074],{"class":30,"line":393},[28,145065,71045],{"class":38},[28,145067,51914],{"class":34},[28,145069,225],{"class":38},[28,145071,145013],{"class":42},[28,145073,26553],{"class":34},[28,145075,145018],{"class":73},[28,145077,145078],{"class":30,"line":409},[28,145079,2055],{"class":34},[28,145081,145082],{"class":30,"line":1711},[28,145083,136407],{"class":34},[28,145085,145086],{"class":30,"line":1802},[28,145087,144970],{"class":73},[28,145089,145090,145092],{"class":30,"line":1808},[28,145091,51112],{"class":51777},[28,145093,16058],{"class":34},[28,145095,145096,145098,145100,145102,145104,145106],{"class":30,"line":1820},[28,145097,71103],{"class":38},[28,145099,51914],{"class":34},[28,145101,144985],{"class":38},[28,145103,954],{"class":42},[28,145105,130809],{"class":34},[28,145107,144992],{"class":73},[28,145109,145110],{"class":30,"line":2102},[28,145111,2055],{"class":34},[28,145113,145114,145116],{"class":30,"line":2107},[28,145115,130794],{"class":2453},[28,145117,16058],{"class":34},[28,145119,145120,145122,145124,145126,145128,145130],{"class":30,"line":2113},[28,145121,71045],{"class":38},[28,145123,51914],{"class":34},[28,145125,225],{"class":38},[28,145127,145013],{"class":42},[28,145129,130809],{"class":34},[28,145131,145018],{"class":73},[28,145133,145134],{"class":30,"line":2118},[28,145135,2055],{"class":34},[14,145137,145138,145139,145142],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24039,145140,145141],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[18,145144,145147],{"className":145145,"code":145146,"language":5675},[5673],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[25,145148,145146],{"__ignoreMap":23},[14,145150,145151],{},"less保存时会自动变成.css文件",[14,145153,145154],{},"好好搞懂上述代码写法",[605,145156,145158],{"id":145157},"_2132-样式导入样式","21.3.2 样式导入样式",[420,145160],{"style":126802,"src":145161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[605,145163,145165],{"id":145164},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[588,145167,145168],{},[591,145169,145170],{},"准备工作",[420,145172],{"style":126802,"src":145173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145175,145176,145177],{},"github地址：",[80,145178,145179],{"href":145179,"rel":145180},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24351],[14,145182,145183],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145185,145186,145187],{},"js文件引入到index.html中使用的是",[25,145188,145189],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[588,145191,145192],{"start":77},[591,145193,145194],{},"vscode插件",[420,145196],{"style":126802,"src":145197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145199,145200],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145202,145203],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[420,145205],{"style":126802,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145208,145209],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[420,145211],{"style":126802,"src":145212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145214,145215],{},"修改成75就可以，alt+z为快捷键",[14,145217,145218],{},"index.css：",[18,145220,145221],{"className":126946,"code":144963,"language":126948,"meta":23,"style":23},[25,145222,145223,145227,145233,145247,145251,145257,145271],{"__ignoreMap":23},[28,145224,145225],{"class":30,"line":31},[28,145226,144970],{"class":73},[28,145228,145229,145231],{"class":30,"line":77},[28,145230,51112],{"class":51777},[28,145232,16058],{"class":34},[28,145234,145235,145237,145239,145241,145243,145245],{"class":30,"line":114},[28,145236,71103],{"class":38},[28,145238,51914],{"class":34},[28,145240,144985],{"class":38},[28,145242,954],{"class":42},[28,145244,130809],{"class":34},[28,145246,144992],{"class":73},[28,145248,145249],{"class":30,"line":128},[28,145250,2055],{"class":34},[28,145252,145253,145255],{"class":30,"line":393},[28,145254,130794],{"class":2453},[28,145256,16058],{"class":34},[28,145258,145259,145261,145263,145265,145267,145269],{"class":30,"line":409},[28,145260,71045],{"class":38},[28,145262,51914],{"class":34},[28,145264,225],{"class":38},[28,145266,145013],{"class":42},[28,145268,130809],{"class":34},[28,145270,145018],{"class":73},[28,145272,145273],{"class":30,"line":1711},[28,145274,2055],{"class":34},[14,145276,144960],{},[18,145278,145279],{"className":126946,"code":127350,"language":126948,"meta":23,"style":23},[25,145280,145281,145287,145299],{"__ignoreMap":23},[28,145282,145283,145285],{"class":30,"line":31},[28,145284,52277],{"class":51777},[28,145286,16058],{"class":34},[28,145288,145289,145291,145293,145295,145297],{"class":30,"line":77},[28,145290,71103],{"class":38},[28,145292,51914],{"class":34},[28,145294,1221],{"class":38},[28,145296,51969],{"class":42},[28,145298,1781],{"class":34},[28,145300,145301],{"class":30,"line":114},[28,145302,2055],{"class":34},[60,145304,145306],{"id":145305},"_214-响应式开发","21.4 响应式开发",[14,145308,145309],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[420,145311],{"style":126802,"src":145312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145314,145315],{},"做法：",[1626,145317,145318,145321],{},[591,145319,145320],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[591,145322,145323],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[420,145325],{"style":126802,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145328,145329],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[605,145331,145333],{"id":145332},"_2141-简单代码示范","21.4.1 简单代码示范",[18,145335,145336],{"className":126946,"code":144963,"language":126948,"meta":23,"style":23},[25,145337,145338,145342,145348,145362,145366,145372,145386],{"__ignoreMap":23},[28,145339,145340],{"class":30,"line":31},[28,145341,144970],{"class":73},[28,145343,145344,145346],{"class":30,"line":77},[28,145345,51112],{"class":51777},[28,145347,16058],{"class":34},[28,145349,145350,145352,145354,145356,145358,145360],{"class":30,"line":114},[28,145351,71103],{"class":38},[28,145353,51914],{"class":34},[28,145355,144985],{"class":38},[28,145357,954],{"class":42},[28,145359,130809],{"class":34},[28,145361,144992],{"class":73},[28,145363,145364],{"class":30,"line":128},[28,145365,2055],{"class":34},[28,145367,145368,145370],{"class":30,"line":393},[28,145369,130794],{"class":2453},[28,145371,16058],{"class":34},[28,145373,145374,145376,145378,145380,145382,145384],{"class":30,"line":409},[28,145375,71045],{"class":38},[28,145377,51914],{"class":34},[28,145379,225],{"class":38},[28,145381,145013],{"class":42},[28,145383,130809],{"class":34},[28,145385,145018],{"class":73},[28,145387,145388],{"class":30,"line":1711},[28,145389,2055],{"class":34},[14,145391,145392],{},"父盒子一般命名为container",[605,145394,145396],{"id":145395},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145398,145399,145400],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[780,145401,145402],{},"使得 Web 开发更加快捷",[1626,145404,145405],{},[591,145406,145407,145408],{},"官网：",[780,145409,145410],{},[80,145411,145412],{"href":145412,"rel":145413},"http:\u002F\u002Fgetbootstrap.com\u002F",[24351],[14,145415,145416],{},"可以直接去官网拿现成的东西",[588,145418,145419],{},[591,145420,145421],{},"Bootstrap的使用",[14,145423,145424],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145426,145427],{},"Bootstrap 使用四步曲：",[14,145429,145430,145433],{},[780,145431,145432],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[420,145435],{"style":126802,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145438,145439],{},"打开Bootstrap官网，然后下载",[420,145441],{"style":126802,"src":145442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[420,145444],{"style":126802,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145447,145448],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145450,145451],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145453,145454],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[420,145456],{"style":126802,"src":145457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[18,145459,145461],{"className":126946,"code":145460,"language":126948,"meta":23,"style":23},".center {\n  color: red;\n}\n",[25,145462,145463,145469,145479],{"__ignoreMap":23},[28,145464,145465,145467],{"class":30,"line":31},[28,145466,127237],{"class":2453},[28,145468,16058],{"class":34},[28,145470,145471,145473,145475,145477],{"class":30,"line":77},[28,145472,71382],{"class":38},[28,145474,51914],{"class":34},[28,145476,57898],{"class":38},[28,145478,1781],{"class":34},[28,145480,145481],{"class":30,"line":114},[28,145482,2055],{"class":34},[14,145484,145485,145488],{},[25,145486,145487],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[420,145490],{"style":126802,"src":145491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[420,145493],{"style":126802,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[420,145496],{"style":126802,"src":145497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145499,145500],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[420,145502],{"style":126802,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145505,145506],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[588,145508,145509],{"start":77},[591,145510,145511],{},"布局容器",[420,145513],{"style":126802,"src":145514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145516,145517],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145519,145520],{},"container-fluid用于移动式布局比较方便",[588,145522,145523],{"start":114},[591,145524,145525,145526],{},"bootstrap ",[780,145527,145528],{},"栅格系统原理",[420,145530],{"style":126802,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[588,145533,145534],{"start":128},[591,145535,145536],{},[780,145537,145538],{},"栅格选项参数",[420,145540],{"style":126802,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145543,145544],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145546,15119],{},[18,145548,145549],{"className":126946,"code":145460,"language":126948,"meta":23,"style":23},[25,145550,145551,145557,145567],{"__ignoreMap":23},[28,145552,145553,145555],{"class":30,"line":31},[28,145554,127237],{"class":2453},[28,145556,16058],{"class":34},[28,145558,145559,145561,145563,145565],{"class":30,"line":77},[28,145560,71382],{"class":38},[28,145562,51914],{"class":34},[28,145564,57898],{"class":38},[28,145566,1781],{"class":34},[28,145568,145569],{"class":30,"line":114},[28,145570,2055],{"class":34},[14,145572,135989],{},[420,145574],{"style":126802,"src":145575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145577,145578],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145580,145581],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145583,145584],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145586,145587],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145589,145590],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145592,145593],{},"汇总展示说明：",[18,145595,145596],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,145597,145598,145602,145616,145620],{"__ignoreMap":23},[28,145599,145600],{"class":30,"line":31},[28,145601,131057],{"class":73},[28,145603,145604,145606,145608,145610,145612,145614],{"class":30,"line":77},[28,145605,1529],{"class":34},[28,145607,52088],{"class":51777},[28,145609,53963],{"class":2453},[28,145611,83],{"class":34},[28,145613,131070],{"class":735},[28,145615,51784],{"class":34},[28,145617,145618],{"class":30,"line":114},[28,145619,131077],{"class":34},[28,145621,145622,145624,145626],{"class":30,"line":128},[28,145623,52262],{"class":34},[28,145625,52088],{"class":51777},[28,145627,51784],{"class":34},[420,145629],{"style":126802,"src":145630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145632,145633],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[18,145635,145636],{"className":127693,"code":131050,"language":127695,"meta":23,"style":23},[25,145637,145638,145642,145656,145660],{"__ignoreMap":23},[28,145639,145640],{"class":30,"line":31},[28,145641,131057],{"class":73},[28,145643,145644,145646,145648,145650,145652,145654],{"class":30,"line":77},[28,145645,1529],{"class":34},[28,145647,52088],{"class":51777},[28,145649,53963],{"class":2453},[28,145651,83],{"class":34},[28,145653,131070],{"class":735},[28,145655,51784],{"class":34},[28,145657,145658],{"class":30,"line":114},[28,145659,131077],{"class":34},[28,145661,145662,145664,145666],{"class":30,"line":128},[28,145663,52262],{"class":34},[28,145665,52088],{"class":51777},[28,145667,51784],{"class":34},[588,145669,145670],{"start":393},[591,145671,145672],{},[780,145673,145674],{},"列嵌套",[420,145676],{"style":126802,"src":145677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145679,145680],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145682,145683],{},"没加row内部这样：",[420,145685],{"style":126802,"src":145686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145688,145689],{},"加上row之后内部为：",[420,145691],{"style":126802,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[588,145694,145695],{"start":409},[591,145696,145697],{},[780,145698,145699],{},"列偏移",[420,145701],{"style":126802,"src":145702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145704,145705],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145707,145708],{},"要加偏移量，即偏移份数",[14,145710,145711],{},"偏移的份数=12-两个盒子的份数",[588,145713,145714],{"start":1711},[591,145715,145716],{},[780,145717,145718],{},"列排序",[420,145720],{"style":126802,"src":145721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145723,145724],{},"pull拉左；push推右",[588,145726,145727],{"start":1802},[591,145728,145729],{},[780,145730,145731],{},"响应式工具",[420,145733],{"style":126802,"src":145734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145736,145737],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[605,145739,145741],{"id":145740},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145743,145744],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145746,145747],{},"ul {",[14,145749,145750],{},"list-style: none;",[14,145752,145753],{},"margin:0;",[14,145755,145756],{},"padding:0; }",[420,145758],{"style":126802,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[420,145761],{"style":126802,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145764,145765],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145767,69366],{},[18,145769,145770],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,145771,145772,145778,145788],{"__ignoreMap":23},[28,145773,145774,145776],{"class":30,"line":31},[28,145775,130794],{"class":2453},[28,145777,16058],{"class":34},[28,145779,145780,145782,145784,145786],{"class":30,"line":77},[28,145781,131426],{"class":38},[28,145783,51914],{"class":34},[28,145785,24222],{"class":38},[28,145787,1781],{"class":34},[28,145789,145790],{"class":30,"line":114},[28,145791,2055],{"class":34},[14,145793,70930],{},[18,145795,145796],{"className":126946,"code":139616,"language":126948,"meta":23,"style":23},[25,145797,145798,145804,145814],{"__ignoreMap":23},[28,145799,145800,145802],{"class":30,"line":31},[28,145801,130794],{"class":2453},[28,145803,16058],{"class":34},[28,145805,145806,145808,145810,145812],{"class":30,"line":77},[28,145807,131426],{"class":38},[28,145809,51914],{"class":34},[28,145811,24222],{"class":38},[28,145813,1781],{"class":34},[28,145815,145816],{"class":30,"line":114},[28,145817,2055],{"class":34},[60,145819,145821],{"id":145820},"_215-swiper-插件使用","21.5 swiper 插件使用",[1626,145823,145824,145827,145830],{},[591,145825,145826],{},"下载需要的css和js文件html页面中 引入相关文件",[591,145828,145829],{},"官网找到类似案例，复制html结构，css样式 js 语法",[591,145831,145832],{},"根据需求定制修改模块",[420,145834],{"style":126802,"src":145835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145837,145838],{},"解压后将这两部分放到项目中",[420,145840],{"style":126802,"src":145841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145843,145844],{},"这个插件可以帮助我们实现轮播图效果",[14,145846,145847],{},"用法：",[420,145849],{"style":126802,"src":145850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145852,145853],{},"找到自己喜欢的",[420,145855],{"style":126802,"src":145856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145858,145859],{},"右键，查看网页源代码",[420,145861],{"style":126802,"src":145862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145864,145865],{},"复制人家的结构内容",[14,145867,145868],{},"然后去看API文档：",[420,145870],{"style":126802,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145873,145874],{},"可以看看如何修改样式",[14,145876,145877],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[547,145879,145880],{},"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":77,"depth":77,"links":145882},[145883,145888,145892,145897,145902],{"id":144683,"depth":77,"text":144684,"children":145884},[145885,145886,145887],{"id":144687,"depth":114,"text":144688},{"id":144697,"depth":114,"text":144698},{"id":144792,"depth":114,"text":144793},{"id":144807,"depth":77,"text":144808,"children":145889},[145890,145891],{"id":144829,"depth":114,"text":144830},{"id":144845,"depth":114,"text":144846},{"id":144920,"depth":77,"text":144921,"children":145893},[145894,145895,145896],{"id":144933,"depth":114,"text":144934},{"id":145157,"depth":114,"text":145158},{"id":145164,"depth":114,"text":145165},{"id":145305,"depth":77,"text":145306,"children":145898},[145899,145900,145901],{"id":145332,"depth":114,"text":145333},{"id":145395,"depth":114,"text":145396},{"id":145740,"depth":114,"text":145741},{"id":145820,"depth":77,"text":145821},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144675,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145909,"title":145910,"body":145911,"description":559,"extension":560,"meta":146131,"navigation":562,"path":146132,"seo":146133,"stem":146134,"__hash__":146135},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145912,"toc":146127},[145913,145916,145920,145923,145938,145943,145946,145951,145986,145991,146003,146008,146021,146026,146043,146048,146068,146073,146091,146094,146097,146100,146103,146107,146110,146113,146116,146119,146122,146125],[10,145914,145910],{"id":145915},"_22-代码提交与新型相对单位",[60,145917,145919],{"id":145918},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145921,145922],{},"法1：",[588,145924,145925,145932,145935],{},[591,145926,145927,145928],{},"登录网站注册：",[80,145929,145930],{"href":145930,"rel":145931},"https:\u002F\u002Fgitee.com\u002F",[24351],[591,145933,145934],{},"码云创建新的仓库",[591,145936,145937],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1626,145939,145940],{},[591,145941,145942],{},"在网站根目录右键-- Git Bash Here",[420,145944],{"style":126802,"src":145945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1626,145947,145948],{},[591,145949,145950],{},"如果是第一次利用git提交，请配置好全局选项",[18,145952,145954],{"className":117690,"code":145953,"language":117692,"meta":23,"style":23},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[25,145955,145956,145972],{"__ignoreMap":23},[28,145957,145958,145961,145963,145966,145969],{"class":30,"line":31},[28,145959,145960],{"class":2453},"git",[28,145962,120113],{"class":735},[28,145964,145965],{"class":38}," --global",[28,145967,145968],{"class":735}," user.name",[28,145970,145971],{"class":735}," \"你的名字\"\n",[28,145973,145974,145976,145978,145980,145983],{"class":30,"line":77},[28,145975,145960],{"class":2453},[28,145977,120113],{"class":735},[28,145979,145965],{"class":38},[28,145981,145982],{"class":735}," user.email",[28,145984,145985],{"class":735}," \"你的邮箱\"\n",[1626,145987,145988],{},[591,145989,145990],{},"初始化仓库",[18,145992,145994],{"className":117690,"code":145993,"language":117692,"meta":23,"style":23},"git init\n",[25,145995,145996],{"__ignoreMap":23},[28,145997,145998,146000],{"class":30,"line":31},[28,145999,145960],{"class":2453},[28,146001,146002],{"class":735}," init\n",[1626,146004,146005],{},[591,146006,146007],{},"把本地文件放到暂存区",[18,146009,146011],{"className":117690,"code":146010,"language":117692,"meta":23,"style":23},"git add .\n",[25,146012,146013],{"__ignoreMap":23},[28,146014,146015,146017,146019],{"class":30,"line":31},[28,146016,145960],{"class":2453},[28,146018,5697],{"class":735},[28,146020,29227],{"class":735},[1626,146022,146023],{},[591,146024,146025],{},"把本地文件放到本地仓库里面",[18,146027,146029],{"className":117690,"code":146028,"language":117692,"meta":23,"style":23},"git commit -m \"first commit\"\n",[25,146030,146031],{"__ignoreMap":23},[28,146032,146033,146035,146038,146040],{"class":30,"line":31},[28,146034,145960],{"class":2453},[28,146036,146037],{"class":735}," commit",[28,146039,101276],{"class":38},[28,146041,146042],{"class":735}," \"first commit\"\n",[1626,146044,146045],{},[591,146046,146047],{},"链接远程仓库",[18,146049,146051],{"className":117690,"code":146050,"language":117692,"meta":23,"style":23},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[25,146052,146053],{"__ignoreMap":23},[28,146054,146055,146057,146060,146062,146065],{"class":30,"line":31},[28,146056,145960],{"class":2453},[28,146058,146059],{"class":735}," remote",[28,146061,5697],{"class":735},[28,146063,146064],{"class":735}," origin",[28,146066,146067],{"class":735}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1626,146069,146070],{},[591,146071,146072],{},"把本地仓库的文件推送到远程仓库 push",[18,146074,146076],{"className":117690,"code":146075,"language":117692,"meta":23,"style":23},"git push -u origin master\n",[25,146077,146078],{"__ignoreMap":23},[28,146079,146080,146082,146084,146086,146088],{"class":30,"line":31},[28,146081,145960],{"class":2453},[28,146083,29502],{"class":735},[28,146085,28776],{"class":38},[28,146087,146064],{"class":735},[28,146089,146090],{"class":735}," master\n",[420,146092],{"style":126802,"src":146093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146095,146096],{},"上方方法暂未实现，后边学完git后在整",[14,146098,146099],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[420,146101],{"style":126802,"src":146102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[60,146104,146106],{"id":146105},"_222-新型相对单位","22.2 新型相对单位",[420,146108],{"style":126802,"src":146109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[420,146111],{"style":126802,"src":146112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146114,146115],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146117,146118],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[420,146120],{"style":126802,"src":146121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146123,146124],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[547,146126,24444],{},{"title":23,"searchDepth":77,"depth":77,"links":146128},[146129,146130],{"id":145918,"depth":77,"text":145919},{"id":146105,"depth":77,"text":146106},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145910,"description":559},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146137,"title":146138,"body":146139,"description":146143,"extension":560,"meta":146144,"navigation":562,"path":146145,"seo":146146,"stem":146147,"__hash__":146148},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146140,"toc":146141},[],{"title":23,"searchDepth":77,"depth":77,"links":146142},[],"自己正经开始学编程的第一门语言！",{"category":93316},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146138,"description":146143},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146150,"title":146151,"body":146152,"description":559,"extension":560,"meta":147299,"navigation":562,"path":147300,"seo":147301,"stem":147302,"__hash__":147303},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146153,"toc":147275},[146154,146157,146161,146164,146167,146192,146195,146201,146205,146208,146235,146238,146278,146281,146293,146296,146302,146306,146310,146337,146354,146361,146365,146368,146394,146397,146401,146404,146444,146447,146464,146470,146474,146479,146523,146526,146544,146547,146615,146619,146626,146629,146644,146647,146656,146659,146670,146673,146682,146685,146702,146705,146720,146724,146728,146731,146733,146753,146757,146760,146763,146774,146777,146783,146787,146793,146820,146823,146835,146838,146849,146852,146858,146862,146868,146918,146921,146963,146966,146999,147002,147036,147040,147043,147063,147066,147102,147105,147118,147122,147126,147132,147135,147148,147152,147155,147161,147164,147168,147171,147174,147223,147227,147243,147249,147256,147262,147272],[10,146155,146151],{"id":146156},"_1-python环境与第一个程序",[60,146158,146160],{"id":146159},"_11-什么是python","1.1 什么是Python",[14,146162,146163],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146165,146166],{},"理解 Python 时抓住三个关键词：",[588,146168,146169,146172,146175],{},[591,146170,146171],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[591,146173,146174],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[591,146176,146177,146178,843,146181,843,146184,843,146187,843,146189,28871],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[25,146179,146180],{},"os",[25,146182,146183],{},"sys",[25,146185,146186],{},"json",[25,146188,58337],{},[25,146190,146191],{},"datetime",[14,146193,146194],{},"Python 程序的运行链路：",[18,146196,146199],{"className":146197,"code":146198,"language":5675,"meta":23},[5673],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[25,146200,146198],{"__ignoreMap":23},[60,146202,146204],{"id":146203},"_12-python解释器","1.2 Python解释器",[14,146206,146207],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[18,146209,146211],{"className":24308,"code":146210,"language":24310,"meta":23,"style":23},"python --version\npython3 --version\npython\npython3\n",[25,146212,146213,146219,146225,146230],{"__ignoreMap":23},[28,146214,146215,146217],{"class":30,"line":31},[28,146216,22],{"class":2453},[28,146218,26779],{"class":38},[28,146220,146221,146223],{"class":30,"line":77},[28,146222,101273],{"class":2453},[28,146224,26779],{"class":38},[28,146226,146227],{"class":30,"line":114},[28,146228,146229],{"class":2453},"python\n",[28,146231,146232],{"class":30,"line":128},[28,146233,146234],{"class":2453},"python3\n",[14,146236,146237],{},"进入交互模式后，可以直接输入表达式：",[18,146239,146241],{"className":20,"code":146240,"language":22,"meta":23,"style":23},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[25,146242,146243,146254,146259,146273],{"__ignoreMap":23},[28,146244,146245,146248,146250,146252],{"class":30,"line":31},[28,146246,146247],{"class":42},">>>",[28,146249,25605],{"class":38},[28,146251,46043],{"class":42},[28,146253,48200],{"class":38},[28,146255,146256],{"class":30,"line":77},[28,146257,146258],{"class":38},"3\n",[28,146260,146261,146263,146266,146268,146271],{"class":30,"line":114},[28,146262,146247],{"class":42},[28,146264,146265],{"class":38}," print",[28,146267,367],{"class":34},[28,146269,146270],{"class":735},"\"hello python\"",[28,146272,228],{"class":34},[28,146274,146275],{"class":30,"line":128},[28,146276,146277],{"class":34},"hello python\n",[14,146279,146280],{},"退出交互模式：",[18,146282,146284],{"className":20,"code":146283,"language":22,"meta":23,"style":23},"exit()\n",[25,146285,146286],{"__ignoreMap":23},[28,146287,146288,146291],{"class":30,"line":31},[28,146289,146290],{"class":38},"exit",[28,146292,2466],{"class":34},[14,146294,146295],{},"或使用快捷键：",[18,146297,146300],{"className":146298,"code":146299,"language":5675,"meta":23},[5673],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[25,146301,146299],{"__ignoreMap":23},[60,146303,146305],{"id":146304},"_13-安装python","1.3 安装Python",[605,146307,146309],{"id":146308},"_131-windows安装","1.3.1 Windows安装",[588,146311,146312,146319,146322,146328,146334],{},[591,146313,146314,146315],{},"打开 Python 官网：",[80,146316,146317],{"href":146317,"rel":146318},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24351],[591,146320,146321],{},"下载 Windows Installer。",[591,146323,146324,146325,28871],{},"安装时勾选 ",[25,146326,146327],{},"Add Python to PATH",[591,146329,146330,146331,28871],{},"点击 ",[25,146332,146333],{},"Install Now",[591,146335,146336],{},"安装完成后打开命令提示符验证：",[18,146338,146340],{"className":24308,"code":146339,"language":24310,"meta":23,"style":23},"python --version\npip --version\n",[25,146341,146342,146348],{"__ignoreMap":23},[28,146343,146344,146346],{"class":30,"line":31},[28,146345,22],{"class":2453},[28,146347,26779],{"class":38},[28,146349,146350,146352],{"class":30,"line":77},[28,146351,24317],{"class":2453},[28,146353,26779],{"class":38},[14,146355,146356,146357,146360],{},"如果提示 ",[25,146358,146359],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[605,146362,146364],{"id":146363},"_132-macos安装","1.3.2 macOS安装",[14,146366,146367],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[18,146369,146371],{"className":24308,"code":146370,"language":24310,"meta":23,"style":23},"brew install python\npython3 --version\npip3 --version\n",[25,146372,146373,146382,146388],{"__ignoreMap":23},[28,146374,146375,146378,146380],{"class":30,"line":31},[28,146376,146377],{"class":2453},"brew",[28,146379,24320],{"class":735},[28,146381,124712],{"class":735},[28,146383,146384,146386],{"class":30,"line":77},[28,146385,101273],{"class":2453},[28,146387,26779],{"class":38},[28,146389,146390,146392],{"class":30,"line":114},[28,146391,120094],{"class":2453},[28,146393,26779],{"class":38},[14,146395,146396],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[605,146398,146400],{"id":146399},"_133-linux安装","1.3.3 Linux安装",[14,146402,146403],{},"Ubuntu\u002FDebian：",[18,146405,146407],{"className":24308,"code":146406,"language":24310,"meta":23,"style":23},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[25,146408,146409,146417,146432,146438],{"__ignoreMap":23},[28,146410,146411,146413,146415],{"class":30,"line":31},[28,146412,25063],{"class":2453},[28,146414,117711],{"class":735},[28,146416,26728],{"class":735},[28,146418,146419,146421,146423,146425,146427,146429],{"class":30,"line":77},[28,146420,25063],{"class":2453},[28,146422,117711],{"class":735},[28,146424,24320],{"class":735},[28,146426,104797],{"class":735},[28,146428,101192],{"class":735},[28,146430,146431],{"class":735}," python3-venv\n",[28,146433,146434,146436],{"class":30,"line":114},[28,146435,101273],{"class":2453},[28,146437,26779],{"class":38},[28,146439,146440,146442],{"class":30,"line":128},[28,146441,120094],{"class":2453},[28,146443,26779],{"class":38},[14,146445,146446],{},"Fedora：",[18,146448,146450],{"className":24308,"code":146449,"language":24310,"meta":23,"style":23},"sudo dnf install python3 python3-pip\n",[25,146451,146452],{"__ignoreMap":23},[28,146453,146454,146456,146458,146460,146462],{"class":30,"line":31},[28,146455,25063],{"class":2453},[28,146457,26801],{"class":735},[28,146459,24320],{"class":735},[28,146461,104797],{"class":735},[28,146463,120159],{"class":735},[14,146465,146466,146467,146469],{},"Linux 上通常使用 ",[25,146468,101273],{}," 命令，避免和系统旧版本 Python 冲突。",[60,146471,146473],{"id":146472},"_14-pip包管理器","1.4 pip包管理器",[14,146475,146476,146478],{},[25,146477,24317],{}," 用来安装第三方库。",[18,146480,146482],{"className":24308,"code":146481,"language":24310,"meta":23,"style":23},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[25,146483,146484,146493,146502,146510,146516],{"__ignoreMap":23},[28,146485,146486,146488,146490],{"class":30,"line":31},[28,146487,24317],{"class":2453},[28,146489,24320],{"class":735},[28,146491,146492],{"class":735}," requests\n",[28,146494,146495,146497,146500],{"class":30,"line":77},[28,146496,24317],{"class":2453},[28,146498,146499],{"class":735}," uninstall",[28,146501,146492],{"class":735},[28,146503,146504,146506,146508],{"class":30,"line":114},[28,146505,24317],{"class":2453},[28,146507,117968],{"class":735},[28,146509,146492],{"class":735},[28,146511,146512,146514],{"class":30,"line":128},[28,146513,24317],{"class":2453},[28,146515,119349],{"class":735},[28,146517,146518,146520],{"class":30,"line":393},[28,146519,24317],{"class":2453},[28,146521,146522],{"class":735}," freeze\n",[14,146524,146525],{},"国内网络较慢时可以临时使用镜像：",[18,146527,146529],{"className":24308,"code":146528,"language":24310,"meta":23,"style":23},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,146530,146531],{"__ignoreMap":23},[28,146532,146533,146535,146537,146540,146542],{"class":30,"line":31},[28,146534,24317],{"class":2453},[28,146536,24320],{"class":735},[28,146538,146539],{"class":735}," requests",[28,146541,26916],{"class":38},[28,146543,120122],{"class":735},[14,146545,146546],{},"常见第三方库：",[768,146548,146549,146558],{},[771,146550,146551],{},[774,146552,146553,146556],{},[777,146554,146555],{},"库",[777,146557,103090],{},[815,146559,146560,146568,146575,146583,146591,146599,146607],{},[774,146561,146562,146565],{},[820,146563,146564],{},"requests",[820,146566,146567],{},"网络请求",[774,146569,146570,146572],{},[820,146571,101020],{},[820,146573,146574],{},"数值计算",[774,146576,146577,146580],{},[820,146578,146579],{},"pandas",[820,146581,146582],{},"表格数据处理",[774,146584,146585,146588],{},[820,146586,146587],{},"matplotlib",[820,146589,146590],{},"绘图",[774,146592,146593,146596],{},[820,146594,146595],{},"pyecharts",[820,146597,146598],{},"ECharts 图表",[774,146600,146601,146604],{},[820,146602,146603],{},"flask",[820,146605,146606],{},"Web 后端",[774,146608,146609,146612],{},[820,146610,146611],{},"pytest",[820,146613,146614],{},"自动化测试",[60,146616,146618],{"id":146617},"_15-虚拟环境","1.5 虚拟环境",[14,146620,146621,146622,146625],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[25,146623,146624],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146627,146628],{},"创建虚拟环境：",[18,146630,146632],{"className":24308,"code":146631,"language":24310,"meta":23,"style":23},"python -m venv .venv\n",[25,146633,146634],{"__ignoreMap":23},[28,146635,146636,146638,146640,146642],{"class":30,"line":31},[28,146637,22],{"class":2453},[28,146639,101276],{"class":38},[28,146641,101279],{"class":735},[28,146643,101282],{"class":735},[14,146645,146646],{},"Windows 激活：",[18,146648,146650],{"className":24308,"code":146649,"language":24310,"meta":23,"style":23},".venv\\Scripts\\activate\n",[25,146651,146652],{"__ignoreMap":23},[28,146653,146654],{"class":30,"line":31},[28,146655,146649],{"class":2453},[14,146657,146658],{},"macOS\u002FLinux 激活：",[18,146660,146662],{"className":24308,"code":146661,"language":24310,"meta":23,"style":23},"source .venv\u002Fbin\u002Factivate\n",[25,146663,146664],{"__ignoreMap":23},[28,146665,146666,146668],{"class":30,"line":31},[28,146667,101287],{"class":38},[28,146669,101290],{"class":735},[14,146671,146672],{},"退出虚拟环境：",[18,146674,146676],{"className":24308,"code":146675,"language":24310,"meta":23,"style":23},"deactivate\n",[25,146677,146678],{"__ignoreMap":23},[28,146679,146680],{"class":30,"line":31},[28,146681,146675],{"class":2453},[14,146683,146684],{},"保存依赖：",[18,146686,146688],{"className":24308,"code":146687,"language":24310,"meta":23,"style":23},"pip freeze > requirements.txt\n",[25,146689,146690],{"__ignoreMap":23},[28,146691,146692,146694,146697,146699],{"class":30,"line":31},[28,146693,24317],{"class":2453},[28,146695,146696],{"class":735}," freeze",[28,146698,26708],{"class":42},[28,146700,146701],{"class":735}," requirements.txt\n",[14,146703,146704],{},"安装依赖：",[18,146706,146708],{"className":24308,"code":146707,"language":24310,"meta":23,"style":23},"pip install -r requirements.txt\n",[25,146709,146710],{"__ignoreMap":23},[28,146711,146712,146714,146716,146718],{"class":30,"line":31},[28,146713,24317],{"class":2453},[28,146715,24320],{"class":735},[28,146717,120033],{"class":38},[28,146719,146701],{"class":735},[60,146721,146723],{"id":146722},"_16-开发工具","1.6 开发工具",[605,146725,146727],{"id":146726},"_161-pycharm","1.6.1 PyCharm",[14,146729,146730],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146732,122456],{},[588,146734,146735,146738,146741,146747,146750],{},[591,146736,146737],{},"New Project：创建项目。",[591,146739,146740],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[591,146742,146743,146744,126377],{},"New Python File：创建 ",[25,146745,146746],{},".py",[591,146748,146749],{},"Run：运行当前文件。",[591,146751,146752],{},"Debug：断点调试。",[605,146754,146756],{"id":146755},"_162-vs-code","1.6.2 VS Code",[14,146758,146759],{},"VS Code 轻量，适合后续多语言开发。",[14,146761,146762],{},"建议安装插件：",[588,146764,146765,146768,146771],{},[591,146766,146767],{},"Python。",[591,146769,146770],{},"Pylance。",[591,146772,146773],{},"Jupyter。",[14,146775,146776],{},"选择解释器：",[18,146778,146781],{"className":146779,"code":146780,"language":5675,"meta":23},[5673],"Ctrl + Shift + P -> Python: Select Interpreter\n",[25,146782,146780],{"__ignoreMap":23},[60,146784,146786],{"id":146785},"_17-第一个python程序","1.7 第一个Python程序",[14,146788,146789,146790,25105],{},"创建文件 ",[25,146791,146792],{},"hello.py",[18,146794,146796],{"className":20,"code":146795,"language":22,"meta":23,"style":23},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[25,146797,146798,146809],{"__ignoreMap":23},[28,146799,146800,146802,146804,146807],{"class":30,"line":31},[28,146801,30898],{"class":38},[28,146803,367],{"class":34},[28,146805,146806],{"class":735},"\"Hello World\"",[28,146808,228],{"class":34},[28,146810,146811,146813,146815,146818],{"class":30,"line":77},[28,146812,30898],{"class":38},[28,146814,367],{"class":34},[28,146816,146817],{"class":735},"\"你好，Python\"",[28,146819,228],{"class":34},[14,146821,146822],{},"在终端运行：",[18,146824,146826],{"className":24308,"code":146825,"language":24310,"meta":23,"style":23},"python hello.py\n",[25,146827,146828],{"__ignoreMap":23},[28,146829,146830,146832],{"class":30,"line":31},[28,146831,22],{"class":2453},[28,146833,146834],{"class":735}," hello.py\n",[14,146836,146837],{},"或：",[18,146839,146841],{"className":24308,"code":146840,"language":24310,"meta":23,"style":23},"python3 hello.py\n",[25,146842,146843],{"__ignoreMap":23},[28,146844,146845,146847],{"class":30,"line":31},[28,146846,101273],{"class":2453},[28,146848,146834],{"class":735},[14,146850,146851],{},"输出：",[18,146853,146856],{"className":146854,"code":146855,"language":5675,"meta":23},[5673],"Hello World\n你好，Python\n",[25,146857,146855],{"__ignoreMap":23},[60,146859,146861],{"id":146860},"_18-print函数","1.8 print函数",[14,146863,146864,146867],{},[25,146865,146866],{},"print()"," 用来输出内容。",[18,146869,146871],{"className":20,"code":146870,"language":22,"meta":23,"style":23},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[25,146872,146873,146883,146893,146903],{"__ignoreMap":23},[28,146874,146875,146877,146879,146881],{"class":30,"line":31},[28,146876,30898],{"class":38},[28,146878,367],{"class":34},[28,146880,6332],{"class":735},[28,146882,228],{"class":34},[28,146884,146885,146887,146889,146891],{"class":30,"line":77},[28,146886,30898],{"class":38},[28,146888,367],{"class":34},[28,146890,938],{"class":38},[28,146892,228],{"class":34},[28,146894,146895,146897,146899,146901],{"class":30,"line":114},[28,146896,30898],{"class":38},[28,146898,367],{"class":34},[28,146900,683],{"class":38},[28,146902,228],{"class":34},[28,146904,146905,146907,146909,146912,146914,146916],{"class":30,"line":128},[28,146906,30898],{"class":38},[28,146908,367],{"class":34},[28,146910,146911],{"class":735},"\"年龄:\"",[28,146913,12921],{"class":34},[28,146915,1270],{"class":38},[28,146917,228],{"class":34},[14,146919,146920],{},"多个内容用逗号隔开，默认中间加空格：",[18,146922,146924],{"className":20,"code":146923,"language":22,"meta":23,"style":23},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[25,146925,146926,146936,146946],{"__ignoreMap":23},[28,146927,146928,146931,146933],{"class":30,"line":31},[28,146929,146930],{"class":34},"name ",[28,146932,83],{"class":42},[28,146934,146935],{"class":735}," \"张三\"\n",[28,146937,146938,146941,146943],{"class":30,"line":77},[28,146939,146940],{"class":34},"age ",[28,146942,83],{"class":42},[28,146944,146945],{"class":38}," 18\n",[28,146947,146948,146950,146952,146955,146958,146960],{"class":30,"line":114},[28,146949,30898],{"class":38},[28,146951,367],{"class":34},[28,146953,146954],{"class":735},"\"姓名:\"",[28,146956,146957],{"class":34},", name, ",[28,146959,146911],{"class":735},[28,146961,146962],{"class":34},", age)\n",[14,146964,146965],{},"修改分隔符：",[18,146967,146969],{"className":20,"code":146968,"language":22,"meta":23,"style":23},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[25,146970,146971],{"__ignoreMap":23},[28,146972,146973,146975,146977,146980,146982,146984,146986,146988,146990,146993,146995,146997],{"class":30,"line":31},[28,146974,30898],{"class":38},[28,146976,367],{"class":34},[28,146978,146979],{"class":735},"\"2024\"",[28,146981,12921],{"class":34},[28,146983,54793],{"class":735},[28,146985,12921],{"class":34},[28,146987,54793],{"class":735},[28,146989,12921],{"class":34},[28,146991,146992],{"class":5704},"sep",[28,146994,83],{"class":42},[28,146996,32961],{"class":735},[28,146998,228],{"class":34},[14,147000,147001],{},"修改结尾符：",[18,147003,147005],{"className":20,"code":147004,"language":22,"meta":23,"style":23},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[25,147006,147007,147025],{"__ignoreMap":23},[28,147008,147009,147011,147013,147015,147017,147019,147021,147023],{"class":30,"line":31},[28,147010,30898],{"class":38},[28,147012,367],{"class":34},[28,147014,6332],{"class":735},[28,147016,12921],{"class":34},[28,147018,46278],{"class":5704},[28,147020,83],{"class":42},[28,147022,4847],{"class":735},[28,147024,228],{"class":34},[28,147026,147027,147029,147031,147034],{"class":30,"line":77},[28,147028,30898],{"class":38},[28,147030,367],{"class":34},[28,147032,147033],{"class":735},"\"python\"",[28,147035,228],{"class":34},[60,147037,147039],{"id":147038},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147041,147042],{},"交互运行适合临时验证：",[18,147044,147046],{"className":20,"code":147045,"language":22,"meta":23,"style":23},">>> 10 * 3\n30\n",[25,147047,147048,147058],{"__ignoreMap":23},[28,147049,147050,147052,147054,147056],{"class":30,"line":31},[28,147051,146247],{"class":42},[28,147053,2528],{"class":38},[28,147055,7006],{"class":42},[28,147057,120430],{"class":38},[28,147059,147060],{"class":30,"line":77},[28,147061,147062],{"class":38},"30\n",[14,147064,147065],{},"脚本运行适合保存程序：",[18,147067,147069],{"className":20,"code":147068,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(price * count)\n",[25,147070,147071,147081,147090],{"__ignoreMap":23},[28,147072,147073,147076,147078],{"class":30,"line":31},[28,147074,147075],{"class":34},"price ",[28,147077,83],{"class":42},[28,147079,147080],{"class":38}," 8\n",[28,147082,147083,147086,147088],{"class":30,"line":77},[28,147084,147085],{"class":34},"count ",[28,147087,83],{"class":42},[28,147089,54904],{"class":38},[28,147091,147092,147094,147097,147099],{"class":30,"line":114},[28,147093,30898],{"class":38},[28,147095,147096],{"class":34},"(price ",[28,147098,256],{"class":42},[28,147100,147101],{"class":34}," count)\n",[14,147103,147104],{},"实际学习中推荐：",[588,147106,147107,147110,147115],{},[591,147108,147109],{},"临时试一个语法，用交互模式。",[591,147111,147112,147113,126377],{},"写完整练习，用 ",[25,147114,146746],{},[591,147116,147117],{},"写项目，用独立目录和虚拟环境。",[60,147119,147121],{"id":147120},"_110-常见错误","1.10 常见错误",[605,147123,147125],{"id":147124},"_1101-命令找不到","1.10.1 命令找不到",[18,147127,147130],{"className":147128,"code":147129,"language":5675,"meta":23},[5673],"python: command not found\n",[25,147131,147129],{"__ignoreMap":23},[14,147133,147134],{},"原因：",[588,147136,147137,147140,147143],{},[591,147138,147139],{},"没安装 Python。",[591,147141,147142],{},"PATH 没配置。",[591,147144,147145,147146,28871],{},"Linux\u002FmacOS 应该使用 ",[25,147147,101273],{},[605,147149,147151],{"id":147150},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147153,147154],{},"不要把文件命名为：",[18,147156,147159],{"className":147157,"code":147158,"language":5675,"meta":23},[5673],"random.py\njson.py\ntime.py\nrequests.py\n",[25,147160,147158],{"__ignoreMap":23},[14,147162,147163],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[605,147165,147167],{"id":147166},"_1103-中文乱码","1.10.3 中文乱码",[14,147169,147170],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147172,147173],{},"如果读写文件出现乱码，要明确指定编码：",[18,147175,147177],{"className":20,"code":147176,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[25,147178,147179,147213],{"__ignoreMap":23},[28,147180,147181,147183,147186,147188,147191,147193,147196,147198,147201,147203,147206,147208,147210],{"class":30,"line":31},[28,147182,108227],{"class":42},[28,147184,147185],{"class":38}," open",[28,147187,367],{"class":34},[28,147189,147190],{"class":735},"\"data.txt\"",[28,147192,12921],{"class":34},[28,147194,147195],{"class":735},"\"r\"",[28,147197,12921],{"class":34},[28,147199,147200],{"class":5704},"encoding",[28,147202,83],{"class":42},[28,147204,147205],{"class":735},"\"utf-8\"",[28,147207,14200],{"class":34},[28,147209,542],{"class":42},[28,147211,147212],{"class":34}," f:\n",[28,147214,147215,147218,147220],{"class":30,"line":77},[28,147216,147217],{"class":34},"    content ",[28,147219,83],{"class":42},[28,147221,147222],{"class":34}," f.read()\n",[60,147224,147226],{"id":147225},"_111-本章练习","1.11 本章练习",[588,147228,147229,147232,147238],{},[591,147230,147231],{},"安装 Python，并在终端输出版本号。",[591,147233,147234,147235,147237],{},"新建 ",[25,147236,146792],{},"，输出自己的姓名、年龄、学习目标。",[591,147239,104760,147240,147242],{},[25,147241,146866],{}," 输出下面格式：",[18,147244,147247],{"className":147245,"code":147246,"language":5675,"meta":23},[5673],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[25,147248,147246],{"__ignoreMap":23},[588,147250,147251],{"start":128},[591,147252,104760,147253,147255],{},[25,147254,146992],{}," 输出日期：",[18,147257,147260],{"className":147258,"code":147259,"language":5675,"meta":23},[5673],"2024-10-10\n",[25,147261,147259],{"__ignoreMap":23},[588,147263,147264],{"start":393},[591,147265,104760,147266,147268,147269,147271],{},[25,147267,46278],{}," 让两次 ",[25,147270,146866],{}," 输出在同一行。",[547,147273,147274],{},"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":77,"depth":77,"links":147276},[147277,147278,147279,147284,147285,147286,147290,147291,147292,147293,147298],{"id":146159,"depth":77,"text":146160},{"id":146203,"depth":77,"text":146204},{"id":146304,"depth":77,"text":146305,"children":147280},[147281,147282,147283],{"id":146308,"depth":114,"text":146309},{"id":146363,"depth":114,"text":146364},{"id":146399,"depth":114,"text":146400},{"id":146472,"depth":77,"text":146473},{"id":146617,"depth":77,"text":146618},{"id":146722,"depth":77,"text":146723,"children":147287},[147288,147289],{"id":146726,"depth":114,"text":146727},{"id":146755,"depth":114,"text":146756},{"id":146785,"depth":77,"text":146786},{"id":146860,"depth":77,"text":146861},{"id":147038,"depth":77,"text":147039},{"id":147120,"depth":77,"text":147121,"children":147294},[147295,147296,147297],{"id":147124,"depth":114,"text":147125},{"id":147150,"depth":114,"text":147151},{"id":147166,"depth":114,"text":147167},{"id":147225,"depth":77,"text":147226},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146151,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147305,"title":147306,"body":147307,"description":559,"extension":560,"meta":149711,"navigation":562,"path":149712,"seo":149713,"stem":149714,"__hash__":149715},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147308,"toc":149696},[147309,147312,147316,147319,147322,147339,147342,147384,147387,147391,147394,147397,147434,147437,147471,147474,147566,147570,147584,147587,147614,147617,147621,147724,147731,147734,147751,147755,147762,147951,147954,148027,148031,148034,148118,148121,148153,148157,148361,148364,148368,148374,148476,148479,148735,148739,148742,148745,148759,148761,148947,148951,149313,149319,149323,149326,149450,149453,149632,149635,149639,149672,149676,149693],[10,147310,147306],{"id":147311},"_10-json与pyecharts折线图",[60,147313,147315],{"id":147314},"_101-数据可视化","10.1 数据可视化",[14,147317,147318],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147320,147321],{},"常见图表：",[588,147323,147324,147327,147330,147333,147336],{},[591,147325,147326],{},"折线图：看趋势。",[591,147328,147329],{},"柱状图：看分类对比。",[591,147331,147332],{},"饼图：看占比。",[591,147334,147335],{},"地图：看地域分布。",[591,147337,147338],{},"散点图：看两个变量之间的关系。",[14,147340,147341],{},"Python 可视化常用库：",[768,147343,147344,147352],{},[771,147345,147346],{},[774,147347,147348,147350],{},[777,147349,146555],{},[777,147351,24226],{},[815,147353,147354,147361,147369,147376],{},[774,147355,147356,147358],{},[820,147357,146587],{},[820,147359,147360],{},"基础、经典、可定制",[774,147362,147363,147366],{},[820,147364,147365],{},"seaborn",[820,147367,147368],{},"统计图表更美观",[774,147370,147371,147373],{},[820,147372,146595],{},[820,147374,147375],{},"生成交互式网页图表",[774,147377,147378,147381],{},[820,147379,147380],{},"plotly",[820,147382,147383],{},"交互图表能力强",[14,147385,147386],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[60,147388,147390],{"id":147389},"_102-json回顾","10.2 JSON回顾",[14,147392,147393],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147395,147396],{},"Python 字典：",[18,147398,147400],{"className":20,"code":147399,"language":22,"meta":23,"style":23},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[25,147401,147402,147410,147421,147430],{"__ignoreMap":23},[28,147403,147404,147406,147408],{"class":30,"line":31},[28,147405,102052],{"class":34},[28,147407,83],{"class":42},[28,147409,16058],{"class":34},[28,147411,147412,147415,147417,147419],{"class":30,"line":77},[28,147413,147414],{"class":735},"    \"name\"",[28,147416,51914],{"class":34},[28,147418,69746],{"class":735},[28,147420,31945],{"class":34},[28,147422,147423,147426,147428],{"class":30,"line":114},[28,147424,147425],{"class":735},"    \"value\"",[28,147427,51914],{"class":34},[28,147429,97929],{"class":38},[28,147431,147432],{"class":30,"line":128},[28,147433,2055],{"class":34},[14,147435,147436],{},"JSON 字符串：",[18,147438,147441],{"className":147439,"code":147440,"language":146186,"meta":23,"style":23},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[25,147442,147443,147447,147458,147467],{"__ignoreMap":23},[28,147444,147445],{"class":30,"line":31},[28,147446,2036],{"class":34},[28,147448,147449,147452,147454,147456],{"class":30,"line":77},[28,147450,147451],{"class":38},"  \"name\"",[28,147453,51914],{"class":34},[28,147455,69746],{"class":735},[28,147457,31945],{"class":34},[28,147459,147460,147463,147465],{"class":30,"line":114},[28,147461,147462],{"class":38},"  \"value\"",[28,147464,51914],{"class":34},[28,147466,97929],{"class":38},[28,147468,147469],{"class":30,"line":128},[28,147470,2055],{"class":34},[14,147472,147473],{},"Python 与 JSON 的转换：",[18,147475,147477],{"className":20,"code":147476,"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,147478,147479,147486,147490,147515,147519,147538,147545,147549,147559],{"__ignoreMap":23},[28,147480,147481,147483],{"class":30,"line":31},[28,147482,536],{"class":42},[28,147484,147485],{"class":34}," json\n",[28,147487,147488],{"class":30,"line":77},[28,147489,2890],{"emptyLinePlaceholder":562},[28,147491,147492,147494,147496,147498,147500,147502,147504,147506,147509,147511,147513],{"class":30,"line":114},[28,147493,102052],{"class":34},[28,147495,83],{"class":42},[28,147497,4936],{"class":34},[28,147499,63156],{"class":735},[28,147501,51914],{"class":34},[28,147503,69746],{"class":735},[28,147505,12921],{"class":34},[28,147507,147508],{"class":735},"\"value\"",[28,147510,51914],{"class":34},[28,147512,938],{"class":38},[28,147514,2055],{"class":34},[28,147516,147517],{"class":30,"line":128},[28,147518,2890],{"emptyLinePlaceholder":562},[28,147520,147521,147524,147526,147529,147532,147534,147536],{"class":30,"line":393},[28,147522,147523],{"class":34},"json_text ",[28,147525,83],{"class":42},[28,147527,147528],{"class":34}," json.dumps(data, ",[28,147530,147531],{"class":5704},"ensure_ascii",[28,147533,83],{"class":42},[28,147535,34464],{"class":38},[28,147537,228],{"class":34},[28,147539,147540,147542],{"class":30,"line":409},[28,147541,30898],{"class":38},[28,147543,147544],{"class":34},"(json_text)\n",[28,147546,147547],{"class":30,"line":1711},[28,147548,2890],{"emptyLinePlaceholder":562},[28,147550,147551,147554,147556],{"class":30,"line":1802},[28,147552,147553],{"class":34},"new_data ",[28,147555,83],{"class":42},[28,147557,147558],{"class":34}," json.loads(json_text)\n",[28,147560,147561,147563],{"class":30,"line":1808},[28,147562,30898],{"class":38},[28,147564,147565],{"class":34},"(new_data)\n",[60,147567,147569],{"id":147568},"_103-安装pyecharts","10.3 安装pyecharts",[18,147571,147573],{"className":24308,"code":147572,"language":24310,"meta":23,"style":23},"pip install pyecharts\n",[25,147574,147575],{"__ignoreMap":23},[28,147576,147577,147579,147581],{"class":30,"line":31},[28,147578,24317],{"class":2453},[28,147580,24320],{"class":735},[28,147582,147583],{"class":735}," pyecharts\n",[14,147585,147586],{},"验证：",[18,147588,147590],{"className":20,"code":147589,"language":22,"meta":23,"style":23},"import pyecharts\n\nprint(pyecharts.__version__)\n",[25,147591,147592,147598,147602],{"__ignoreMap":23},[28,147593,147594,147596],{"class":30,"line":31},[28,147595,536],{"class":42},[28,147597,147583],{"class":34},[28,147599,147600],{"class":30,"line":77},[28,147601,2890],{"emptyLinePlaceholder":562},[28,147603,147604,147606,147609,147612],{"class":30,"line":114},[28,147605,30898],{"class":38},[28,147607,147608],{"class":34},"(pyecharts.",[28,147610,147611],{"class":38},"__version__",[28,147613,228],{"class":34},[14,147615,147616],{},"如果使用虚拟环境，要先激活环境再安装。",[60,147618,147620],{"id":147619},"_104-第一个折线图","10.4 第一个折线图",[18,147622,147624],{"className":20,"code":147623,"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,147625,147626,147638,147642,147652,147682,147714],{"__ignoreMap":23},[28,147627,147628,147630,147633,147635],{"class":30,"line":31},[28,147629,530],{"class":42},[28,147631,147632],{"class":34}," pyecharts.charts ",[28,147634,536],{"class":42},[28,147636,147637],{"class":34}," Line\n",[28,147639,147640],{"class":30,"line":77},[28,147641,2890],{"emptyLinePlaceholder":562},[28,147643,147644,147647,147649],{"class":30,"line":114},[28,147645,147646],{"class":34},"line ",[28,147648,83],{"class":42},[28,147650,147651],{"class":34}," Line()\n",[28,147653,147654,147657,147660,147662,147665,147667,147670,147672,147675,147677,147680],{"class":30,"line":128},[28,147655,147656],{"class":34},"line.add_xaxis([",[28,147658,147659],{"class":735},"\"周一\"",[28,147661,12921],{"class":34},[28,147663,147664],{"class":735},"\"周二\"",[28,147666,12921],{"class":34},[28,147668,147669],{"class":735},"\"周三\"",[28,147671,12921],{"class":34},[28,147673,147674],{"class":735},"\"周四\"",[28,147676,12921],{"class":34},[28,147678,147679],{"class":735},"\"周五\"",[28,147681,5145],{"class":34},[28,147683,147684,147687,147690,147692,147694,147696,147698,147700,147702,147704,147707,147709,147712],{"class":30,"line":393},[28,147685,147686],{"class":34},"line.add_yaxis(",[28,147688,147689],{"class":735},"\"销售额\"",[28,147691,77995],{"class":34},[28,147693,938],{"class":38},[28,147695,12921],{"class":34},[28,147697,1437],{"class":38},[28,147699,12921],{"class":34},[28,147701,1482],{"class":38},[28,147703,12921],{"class":34},[28,147705,147706],{"class":38},"150",[28,147708,12921],{"class":34},[28,147710,147711],{"class":38},"180",[28,147713,5145],{"class":34},[28,147715,147716,147719,147722],{"class":30,"line":409},[28,147717,147718],{"class":34},"line.render(",[28,147720,147721],{"class":735},"\"line.html\"",[28,147723,228],{"class":34},[14,147725,147726,147727,147730],{},"运行后会生成 ",[25,147728,147729],{},"line.html","，用浏览器打开即可看到图表。",[14,147732,147733],{},"核心步骤：",[588,147735,147736,147739,147742,147745,147748],{},[591,147737,147738],{},"导入图表类。",[591,147740,147741],{},"创建图表对象。",[591,147743,147744],{},"添加 x 轴数据。",[591,147746,147747],{},"添加 y 轴数据。",[591,147749,147750],{},"渲染为 HTML。",[60,147752,147754],{"id":147753},"_105-全局配置","10.5 全局配置",[14,147756,147757,147758,147761],{},"常用配置在 ",[25,147759,147760],{},"pyecharts.options"," 中。",[18,147763,147765],{"className":20,"code":147764,"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,147766,147767,147784,147794,147798,147806,147830,147858,147863,147882,147901,147919,147939,147943],{"__ignoreMap":23},[28,147768,147769,147771,147774,147776,147779,147781],{"class":30,"line":31},[28,147770,530],{"class":42},[28,147772,147773],{"class":34}," pyecharts ",[28,147775,536],{"class":42},[28,147777,147778],{"class":34}," options ",[28,147780,542],{"class":42},[28,147782,147783],{"class":34}," opts\n",[28,147785,147786,147788,147790,147792],{"class":30,"line":77},[28,147787,530],{"class":42},[28,147789,147632],{"class":34},[28,147791,536],{"class":42},[28,147793,147637],{"class":34},[28,147795,147796],{"class":30,"line":114},[28,147797,2890],{"emptyLinePlaceholder":562},[28,147799,147800,147802,147804],{"class":30,"line":128},[28,147801,147646],{"class":34},[28,147803,83],{"class":42},[28,147805,147651],{"class":34},[28,147807,147808,147810,147812,147814,147816,147818,147820,147822,147824,147826,147828],{"class":30,"line":393},[28,147809,147656],{"class":34},[28,147811,147659],{"class":735},[28,147813,12921],{"class":34},[28,147815,147664],{"class":735},[28,147817,12921],{"class":34},[28,147819,147669],{"class":735},[28,147821,12921],{"class":34},[28,147823,147674],{"class":735},[28,147825,12921],{"class":34},[28,147827,147679],{"class":735},[28,147829,5145],{"class":34},[28,147831,147832,147834,147836,147838,147840,147842,147844,147846,147848,147850,147852,147854,147856],{"class":30,"line":409},[28,147833,147686],{"class":34},[28,147835,147689],{"class":735},[28,147837,77995],{"class":34},[28,147839,938],{"class":38},[28,147841,12921],{"class":34},[28,147843,1437],{"class":38},[28,147845,12921],{"class":34},[28,147847,1482],{"class":38},[28,147849,12921],{"class":34},[28,147851,147706],{"class":38},[28,147853,12921],{"class":34},[28,147855,147711],{"class":38},[28,147857,5145],{"class":34},[28,147859,147860],{"class":30,"line":1711},[28,147861,147862],{"class":34},"line.set_global_opts(\n",[28,147864,147865,147868,147870,147873,147875,147877,147880],{"class":30,"line":1802},[28,147866,147867],{"class":5704},"    title_opts",[28,147869,83],{"class":42},[28,147871,147872],{"class":34},"opts.TitleOpts(",[28,147874,51884],{"class":5704},[28,147876,83],{"class":42},[28,147878,147879],{"class":735},"\"一周销售额\"",[28,147881,38524],{"class":34},[28,147883,147884,147887,147889,147892,147894,147896,147899],{"class":30,"line":1808},[28,147885,147886],{"class":5704},"    xaxis_opts",[28,147888,83],{"class":42},[28,147890,147891],{"class":34},"opts.AxisOpts(",[28,147893,80287],{"class":5704},[28,147895,83],{"class":42},[28,147897,147898],{"class":735},"\"日期\"",[28,147900,38524],{"class":34},[28,147902,147903,147906,147908,147910,147912,147914,147917],{"class":30,"line":1820},[28,147904,147905],{"class":5704},"    yaxis_opts",[28,147907,83],{"class":42},[28,147909,147891],{"class":34},[28,147911,80287],{"class":5704},[28,147913,83],{"class":42},[28,147915,147916],{"class":735},"\"金额\"",[28,147918,38524],{"class":34},[28,147920,147921,147924,147926,147929,147932,147934,147937],{"class":30,"line":2102},[28,147922,147923],{"class":5704},"    tooltip_opts",[28,147925,83],{"class":42},[28,147927,147928],{"class":34},"opts.TooltipOpts(",[28,147930,147931],{"class":5704},"trigger",[28,147933,83],{"class":42},[28,147935,147936],{"class":735},"\"axis\"",[28,147938,38524],{"class":34},[28,147940,147941],{"class":30,"line":2107},[28,147942,228],{"class":34},[28,147944,147945,147947,147949],{"class":30,"line":2113},[28,147946,147718],{"class":34},[28,147948,147721],{"class":735},[28,147950,228],{"class":34},[14,147952,147953],{},"常见全局配置：",[768,147955,147956,147965],{},[771,147957,147958],{},[774,147959,147960,147963],{},[777,147961,147962],{},"配置",[777,147964,103090],{},[815,147966,147967,147977,147987,147997,148007,148017],{},[774,147968,147969,147974],{},[820,147970,147971],{},[25,147972,147973],{},"TitleOpts",[820,147975,147976],{},"标题",[774,147978,147979,147984],{},[820,147980,147981],{},[25,147982,147983],{},"LegendOpts",[820,147985,147986],{},"图例",[774,147988,147989,147994],{},[820,147990,147991],{},[25,147992,147993],{},"TooltipOpts",[820,147995,147996],{},"提示框",[774,147998,147999,148004],{},[820,148000,148001],{},[25,148002,148003],{},"AxisOpts",[820,148005,148006],{},"坐标轴",[774,148008,148009,148014],{},[820,148010,148011],{},[25,148012,148013],{},"VisualMapOpts",[820,148015,148016],{},"视觉映射",[774,148018,148019,148024],{},[820,148020,148021],{},[25,148022,148023],{},"DataZoomOpts",[820,148025,148026],{},"区域缩放",[60,148028,148030],{"id":148029},"_106-系列配置","10.6 系列配置",[14,148032,148033],{},"系列配置作用于某一组数据。",[18,148035,148037],{"className":20,"code":148036,"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,148038,148039,148044,148055,148084,148095,148114],{"__ignoreMap":23},[28,148040,148041],{"class":30,"line":31},[28,148042,148043],{"class":34},"line.add_yaxis(\n",[28,148045,148046,148049,148051,148053],{"class":30,"line":77},[28,148047,148048],{"class":5704},"    series_name",[28,148050,83],{"class":42},[28,148052,147689],{"class":735},[28,148054,31945],{"class":34},[28,148056,148057,148060,148062,148064,148066,148068,148070,148072,148074,148076,148078,148080,148082],{"class":30,"line":114},[28,148058,148059],{"class":5704},"    y_axis",[28,148061,83],{"class":42},[28,148063,35],{"class":34},[28,148065,938],{"class":38},[28,148067,12921],{"class":34},[28,148069,1437],{"class":38},[28,148071,12921],{"class":34},[28,148073,1482],{"class":38},[28,148075,12921],{"class":34},[28,148077,147706],{"class":38},[28,148079,12921],{"class":34},[28,148081,147711],{"class":38},[28,148083,88313],{"class":34},[28,148085,148086,148089,148091,148093],{"class":30,"line":128},[28,148087,148088],{"class":5704},"    is_smooth",[28,148090,83],{"class":42},[28,148092,31955],{"class":38},[28,148094,31945],{"class":34},[28,148096,148097,148100,148102,148105,148108,148110,148112],{"class":30,"line":393},[28,148098,148099],{"class":5704},"    label_opts",[28,148101,83],{"class":42},[28,148103,148104],{"class":34},"opts.LabelOpts(",[28,148106,148107],{"class":5704},"is_show",[28,148109,83],{"class":42},[28,148111,31955],{"class":38},[28,148113,38524],{"class":34},[28,148115,148116],{"class":30,"line":409},[28,148117,228],{"class":34},[14,148119,148120],{},"常用参数：",[588,148122,148123,148129,148135,148141,148147],{},[591,148124,148125,148128],{},[25,148126,148127],{},"series_name","：系列名称。",[591,148130,148131,148134],{},[25,148132,148133],{},"y_axis","：y 轴数据。",[591,148136,148137,148140],{},[25,148138,148139],{},"is_smooth","：是否平滑曲线。",[591,148142,148143,148146],{},[25,148144,148145],{},"label_opts","：标签配置。",[591,148148,148149,148152],{},[25,148150,148151],{},"symbol_size","：标记点大小。",[60,148154,148156],{"id":148155},"_107-多条折线","10.7 多条折线",[18,148158,148160],{"className":20,"code":148159,"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,148161,148162,148176,148186,148190,148219,148223,148231,148236,148274,148311,148315,148332,148348,148352],{"__ignoreMap":23},[28,148163,148164,148166,148168,148170,148172,148174],{"class":30,"line":31},[28,148165,530],{"class":42},[28,148167,147773],{"class":34},[28,148169,536],{"class":42},[28,148171,147778],{"class":34},[28,148173,542],{"class":42},[28,148175,147783],{"class":34},[28,148177,148178,148180,148182,148184],{"class":30,"line":77},[28,148179,530],{"class":42},[28,148181,147632],{"class":34},[28,148183,536],{"class":42},[28,148185,147637],{"class":34},[28,148187,148188],{"class":30,"line":114},[28,148189,2890],{"emptyLinePlaceholder":562},[28,148191,148192,148195,148197,148199,148201,148203,148205,148207,148209,148211,148213,148215,148217],{"class":30,"line":128},[28,148193,148194],{"class":34},"dates ",[28,148196,83],{"class":42},[28,148198,52703],{"class":34},[28,148200,147659],{"class":735},[28,148202,12921],{"class":34},[28,148204,147664],{"class":735},[28,148206,12921],{"class":34},[28,148208,147669],{"class":735},[28,148210,12921],{"class":34},[28,148212,147674],{"class":735},[28,148214,12921],{"class":34},[28,148216,147679],{"class":735},[28,148218,111],{"class":34},[28,148220,148221],{"class":30,"line":393},[28,148222,2890],{"emptyLinePlaceholder":562},[28,148224,148225,148227,148229],{"class":30,"line":409},[28,148226,147646],{"class":34},[28,148228,83],{"class":42},[28,148230,147651],{"class":34},[28,148232,148233],{"class":30,"line":1711},[28,148234,148235],{"class":34},"line.add_xaxis(dates)\n",[28,148237,148238,148240,148243,148245,148247,148249,148252,148254,148256,148258,148260,148262,148264,148266,148268,148270,148272],{"class":30,"line":1802},[28,148239,147686],{"class":34},[28,148241,148242],{"class":735},"\"线上销售\"",[28,148244,77995],{"class":34},[28,148246,938],{"class":38},[28,148248,12921],{"class":34},[28,148250,148251],{"class":38},"130",[28,148253,12921],{"class":34},[28,148255,1437],{"class":38},[28,148257,12921],{"class":34},[28,148259,21534],{"class":38},[28,148261,12921],{"class":34},[28,148263,2212],{"class":38},[28,148265,112596],{"class":34},[28,148267,148139],{"class":5704},[28,148269,83],{"class":42},[28,148271,31955],{"class":38},[28,148273,228],{"class":34},[28,148275,148276,148278,148281,148283,148285,148287,148289,148291,148293,148295,148297,148299,148301,148303,148305,148307,148309],{"class":30,"line":1808},[28,148277,147686],{"class":34},[28,148279,148280],{"class":735},"\"线下销售\"",[28,148282,77995],{"class":34},[28,148284,1232],{"class":38},[28,148286,12921],{"class":34},[28,148288,1482],{"class":38},[28,148290,12921],{"class":34},[28,148292,938],{"class":38},[28,148294,12921],{"class":34},[28,148296,1437],{"class":38},[28,148298,12921],{"class":34},[28,148300,147706],{"class":38},[28,148302,112596],{"class":34},[28,148304,148139],{"class":5704},[28,148306,83],{"class":42},[28,148308,31955],{"class":38},[28,148310,228],{"class":34},[28,148312,148313],{"class":30,"line":1820},[28,148314,147862],{"class":34},[28,148316,148317,148319,148321,148323,148325,148327,148330],{"class":30,"line":2102},[28,148318,147867],{"class":5704},[28,148320,83],{"class":42},[28,148322,147872],{"class":34},[28,148324,51884],{"class":5704},[28,148326,83],{"class":42},[28,148328,148329],{"class":735},"\"线上线下销售趋势\"",[28,148331,38524],{"class":34},[28,148333,148334,148336,148338,148340,148342,148344,148346],{"class":30,"line":2107},[28,148335,147923],{"class":5704},[28,148337,83],{"class":42},[28,148339,147928],{"class":34},[28,148341,147931],{"class":5704},[28,148343,83],{"class":42},[28,148345,147936],{"class":735},[28,148347,38524],{"class":34},[28,148349,148350],{"class":30,"line":2113},[28,148351,228],{"class":34},[28,148353,148354,148356,148359],{"class":30,"line":2118},[28,148355,147718],{"class":34},[28,148357,148358],{"class":735},"\"sales.html\"",[28,148360,228],{"class":34},[14,148362,148363],{},"多条折线适合比较不同指标或不同地区。",[60,148365,148367],{"id":148366},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148369,148370,148371,25105],{},"假设 ",[25,148372,148373],{},"sales.json",[18,148375,148377],{"className":147439,"code":148376,"language":146186,"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,148378,148379,148384,148416,148444,148472],{"__ignoreMap":23},[28,148380,148381],{"class":30,"line":31},[28,148382,148383],{"class":34},"[\n",[28,148385,148386,148389,148392,148394,148396,148398,148401,148403,148405,148407,148410,148412,148414],{"class":30,"line":77},[28,148387,148388],{"class":34},"  {",[28,148390,148391],{"class":38},"\"date\"",[28,148393,51914],{"class":34},[28,148395,147659],{"class":735},[28,148397,12921],{"class":34},[28,148399,148400],{"class":38},"\"online\"",[28,148402,51914],{"class":34},[28,148404,938],{"class":38},[28,148406,12921],{"class":34},[28,148408,148409],{"class":38},"\"offline\"",[28,148411,51914],{"class":34},[28,148413,1232],{"class":38},[28,148415,5418],{"class":34},[28,148417,148418,148420,148422,148424,148426,148428,148430,148432,148434,148436,148438,148440,148442],{"class":30,"line":114},[28,148419,148388],{"class":34},[28,148421,148391],{"class":38},[28,148423,51914],{"class":34},[28,148425,147664],{"class":735},[28,148427,12921],{"class":34},[28,148429,148400],{"class":38},[28,148431,51914],{"class":34},[28,148433,148251],{"class":38},[28,148435,12921],{"class":34},[28,148437,148409],{"class":38},[28,148439,51914],{"class":34},[28,148441,1482],{"class":38},[28,148443,5418],{"class":34},[28,148445,148446,148448,148450,148452,148454,148456,148458,148460,148462,148464,148466,148468,148470],{"class":30,"line":128},[28,148447,148388],{"class":34},[28,148449,148391],{"class":38},[28,148451,51914],{"class":34},[28,148453,147669],{"class":735},[28,148455,12921],{"class":34},[28,148457,148400],{"class":38},[28,148459,51914],{"class":34},[28,148461,1437],{"class":38},[28,148463,12921],{"class":34},[28,148465,148409],{"class":38},[28,148467,51914],{"class":34},[28,148469,938],{"class":38},[28,148471,2055],{"class":34},[28,148473,148474],{"class":30,"line":393},[28,148475,111],{"class":34},[14,148477,148478],{},"读取并绘图：",[18,148480,148482],{"className":20,"code":148481,"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,148483,148484,148490,148504,148514,148518,148550,148563,148567,148575,148584,148593,148597,148609,148618,148627,148636,148640,148648,148652,148669,148686,148690,148707,148723,148727],{"__ignoreMap":23},[28,148485,148486,148488],{"class":30,"line":31},[28,148487,536],{"class":42},[28,148489,147485],{"class":34},[28,148491,148492,148494,148496,148498,148500,148502],{"class":30,"line":77},[28,148493,530],{"class":42},[28,148495,147773],{"class":34},[28,148497,536],{"class":42},[28,148499,147778],{"class":34},[28,148501,542],{"class":42},[28,148503,147783],{"class":34},[28,148505,148506,148508,148510,148512],{"class":30,"line":114},[28,148507,530],{"class":42},[28,148509,147632],{"class":34},[28,148511,536],{"class":42},[28,148513,147637],{"class":34},[28,148515,148516],{"class":30,"line":128},[28,148517,2890],{"emptyLinePlaceholder":562},[28,148519,148520,148522,148524,148526,148529,148531,148533,148535,148537,148539,148541,148543,148545,148548],{"class":30,"line":393},[28,148521,108227],{"class":42},[28,148523,147185],{"class":38},[28,148525,367],{"class":34},[28,148527,148528],{"class":735},"\"sales.json\"",[28,148530,12921],{"class":34},[28,148532,147195],{"class":735},[28,148534,12921],{"class":34},[28,148536,147200],{"class":5704},[28,148538,83],{"class":42},[28,148540,147205],{"class":735},[28,148542,14200],{"class":34},[28,148544,542],{"class":42},[28,148546,148547],{"class":5704}," file",[28,148549,4227],{"class":34},[28,148551,148552,148554,148556,148559,148561],{"class":30,"line":409},[28,148553,101815],{"class":34},[28,148555,83],{"class":42},[28,148557,148558],{"class":34}," json.load(",[28,148560,45831],{"class":5704},[28,148562,228],{"class":34},[28,148564,148565],{"class":30,"line":1711},[28,148566,2890],{"emptyLinePlaceholder":562},[28,148568,148569,148571,148573],{"class":30,"line":1802},[28,148570,148194],{"class":34},[28,148572,83],{"class":42},[28,148574,52315],{"class":34},[28,148576,148577,148580,148582],{"class":30,"line":1808},[28,148578,148579],{"class":34},"online_sales ",[28,148581,83],{"class":42},[28,148583,52315],{"class":34},[28,148585,148586,148589,148591],{"class":30,"line":1820},[28,148587,148588],{"class":34},"offline_sales ",[28,148590,83],{"class":42},[28,148592,52315],{"class":34},[28,148594,148595],{"class":30,"line":2102},[28,148596,2890],{"emptyLinePlaceholder":562},[28,148598,148599,148601,148604,148606],{"class":30,"line":2107},[28,148600,49],{"class":42},[28,148602,148603],{"class":34}," item ",[28,148605,55],{"class":42},[28,148607,148608],{"class":34}," data:\n",[28,148610,148611,148614,148616],{"class":30,"line":2113},[28,148612,148613],{"class":34},"    dates.append(item[",[28,148615,148391],{"class":735},[28,148617,5145],{"class":34},[28,148619,148620,148623,148625],{"class":30,"line":2118},[28,148621,148622],{"class":34},"    online_sales.append(item[",[28,148624,148400],{"class":735},[28,148626,5145],{"class":34},[28,148628,148629,148632,148634],{"class":30,"line":2132},[28,148630,148631],{"class":34},"    offline_sales.append(item[",[28,148633,148409],{"class":735},[28,148635,5145],{"class":34},[28,148637,148638],{"class":30,"line":2137},[28,148639,2890],{"emptyLinePlaceholder":562},[28,148641,148642,148644,148646],{"class":30,"line":2143},[28,148643,147646],{"class":34},[28,148645,83],{"class":42},[28,148647,147651],{"class":34},[28,148649,148650],{"class":30,"line":2164},[28,148651,148235],{"class":34},[28,148653,148654,148656,148658,148661,148663,148665,148667],{"class":30,"line":2169},[28,148655,147686],{"class":34},[28,148657,148242],{"class":735},[28,148659,148660],{"class":34},", online_sales, ",[28,148662,148139],{"class":5704},[28,148664,83],{"class":42},[28,148666,31955],{"class":38},[28,148668,228],{"class":34},[28,148670,148671,148673,148675,148678,148680,148682,148684],{"class":30,"line":2183},[28,148672,147686],{"class":34},[28,148674,148280],{"class":735},[28,148676,148677],{"class":34},", offline_sales, ",[28,148679,148139],{"class":5704},[28,148681,83],{"class":42},[28,148683,31955],{"class":38},[28,148685,228],{"class":34},[28,148687,148688],{"class":30,"line":2188},[28,148689,147862],{"class":34},[28,148691,148692,148694,148696,148698,148700,148702,148705],{"class":30,"line":2217},[28,148693,147867],{"class":5704},[28,148695,83],{"class":42},[28,148697,147872],{"class":34},[28,148699,51884],{"class":5704},[28,148701,83],{"class":42},[28,148703,148704],{"class":735},"\"销售趋势\"",[28,148706,38524],{"class":34},[28,148708,148709,148711,148713,148715,148717,148719,148721],{"class":30,"line":2222},[28,148710,147923],{"class":5704},[28,148712,83],{"class":42},[28,148714,147928],{"class":34},[28,148716,147931],{"class":5704},[28,148718,83],{"class":42},[28,148720,147936],{"class":735},[28,148722,38524],{"class":34},[28,148724,148725],{"class":30,"line":2239},[28,148726,228],{"class":34},[28,148728,148729,148731,148733],{"class":30,"line":2244},[28,148730,147718],{"class":34},[28,148732,148358],{"class":735},[28,148734,228],{"class":34},[60,148736,148738],{"id":148737},"_109-数据清洗","10.9 数据清洗",[14,148740,148741],{},"真实数据经常不整齐，需要清洗。",[14,148743,148744],{},"常见问题：",[588,148746,148747,148750,148753,148756],{},[591,148748,148749],{},"数字是字符串。",[591,148751,148752],{},"字段缺失。",[591,148754,148755],{},"空值。",[591,148757,148758],{},"日期格式不统一。",[14,148760,15621],{},[18,148762,148764],{"className":20,"code":148763,"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,148765,148766,148775,148798,148818,148839,148843,148847,148855,148864,148868,148879,148893,148902,148907,148911,148919,148929,148933,148940],{"__ignoreMap":23},[28,148767,148768,148771,148773],{"class":30,"line":31},[28,148769,148770],{"class":34},"raw_data ",[28,148772,83],{"class":42},[28,148774,55924],{"class":34},[28,148776,148777,148780,148782,148784,148786,148788,148791,148793,148796],{"class":30,"line":77},[28,148778,148779],{"class":34},"    {",[28,148781,148391],{"class":735},[28,148783,51914],{"class":34},[28,148785,147659],{"class":735},[28,148787,12921],{"class":34},[28,148789,148790],{"class":735},"\"sales\"",[28,148792,51914],{"class":34},[28,148794,148795],{"class":735},"\"100\"",[28,148797,5418],{"class":34},[28,148799,148800,148802,148804,148806,148808,148810,148812,148814,148816],{"class":30,"line":114},[28,148801,148779],{"class":34},[28,148803,148391],{"class":735},[28,148805,51914],{"class":34},[28,148807,147664],{"class":735},[28,148809,12921],{"class":34},[28,148811,148790],{"class":735},[28,148813,51914],{"class":34},[28,148815,8140],{"class":735},[28,148817,5418],{"class":34},[28,148819,148820,148822,148824,148826,148828,148830,148832,148834,148837],{"class":30,"line":128},[28,148821,148779],{"class":34},[28,148823,148391],{"class":735},[28,148825,51914],{"class":34},[28,148827,147669],{"class":735},[28,148829,12921],{"class":34},[28,148831,148790],{"class":735},[28,148833,51914],{"class":34},[28,148835,148836],{"class":735},"\"120\"",[28,148838,5418],{"class":34},[28,148840,148841],{"class":30,"line":393},[28,148842,111],{"class":34},[28,148844,148845],{"class":30,"line":409},[28,148846,2890],{"emptyLinePlaceholder":562},[28,148848,148849,148851,148853],{"class":30,"line":1711},[28,148850,148194],{"class":34},[28,148852,83],{"class":42},[28,148854,52315],{"class":34},[28,148856,148857,148860,148862],{"class":30,"line":1802},[28,148858,148859],{"class":34},"sales ",[28,148861,83],{"class":42},[28,148863,52315],{"class":34},[28,148865,148866],{"class":30,"line":1808},[28,148867,2890],{"emptyLinePlaceholder":562},[28,148869,148870,148872,148874,148876],{"class":30,"line":1820},[28,148871,49],{"class":42},[28,148873,148603],{"class":34},[28,148875,55],{"class":42},[28,148877,148878],{"class":34}," raw_data:\n",[28,148880,148881,148884,148886,148889,148891],{"class":30,"line":2102},[28,148882,148883],{"class":34},"    value ",[28,148885,83],{"class":42},[28,148887,148888],{"class":34}," item.get(",[28,148890,148790],{"class":735},[28,148892,228],{"class":34},[28,148894,148895,148897,148899],{"class":30,"line":2107},[28,148896,3590],{"class":42},[28,148898,39407],{"class":42},[28,148900,148901],{"class":34}," value:\n",[28,148903,148904],{"class":30,"line":2113},[28,148905,148906],{"class":42},"        continue\n",[28,148908,148909],{"class":30,"line":2118},[28,148910,2890],{"emptyLinePlaceholder":562},[28,148912,148913,148915,148917],{"class":30,"line":2132},[28,148914,148613],{"class":34},[28,148916,148391],{"class":735},[28,148918,5145],{"class":34},[28,148920,148921,148924,148926],{"class":30,"line":2137},[28,148922,148923],{"class":34},"    sales.append(",[28,148925,640],{"class":38},[28,148927,148928],{"class":34},"(value))\n",[28,148930,148931],{"class":30,"line":2143},[28,148932,2890],{"emptyLinePlaceholder":562},[28,148934,148935,148937],{"class":30,"line":2164},[28,148936,30898],{"class":38},[28,148938,148939],{"class":34},"(dates)\n",[28,148941,148942,148944],{"class":30,"line":2169},[28,148943,30898],{"class":38},[28,148945,148946],{"class":34},"(sales)\n",[60,148948,148950],{"id":148949},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[18,148952,148954],{"className":20,"code":148953,"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,148955,148956,148970,148980,148984,148992,149013,149035,149057,149079,149101,149105,149109,149131,149152,149156,149164,149168,149172,149182,149191,149201,149217,149221,149225,149242,149258,149274,149290,149300,149304],{"__ignoreMap":23},[28,148957,148958,148960,148962,148964,148966,148968],{"class":30,"line":31},[28,148959,530],{"class":42},[28,148961,147773],{"class":34},[28,148963,536],{"class":42},[28,148965,147778],{"class":34},[28,148967,542],{"class":42},[28,148969,147783],{"class":34},[28,148971,148972,148974,148976,148978],{"class":30,"line":77},[28,148973,530],{"class":42},[28,148975,147632],{"class":34},[28,148977,536],{"class":42},[28,148979,147637],{"class":34},[28,148981,148982],{"class":30,"line":114},[28,148983,2890],{"emptyLinePlaceholder":562},[28,148985,148986,148988,148990],{"class":30,"line":128},[28,148987,148859],{"class":34},[28,148989,83],{"class":42},[28,148991,55924],{"class":34},[28,148993,148994,148996,148998,149000,149003,149005,149007,149009,149011],{"class":30,"line":393},[28,148995,148779],{"class":34},[28,148997,148391],{"class":735},[28,148999,51914],{"class":34},[28,149001,149002],{"class":735},"\"2024-10-01\"",[28,149004,12921],{"class":34},[28,149006,84561],{"class":735},[28,149008,51914],{"class":34},[28,149010,92500],{"class":38},[28,149012,5418],{"class":34},[28,149014,149015,149017,149019,149021,149024,149026,149028,149030,149033],{"class":30,"line":409},[28,149016,148779],{"class":34},[28,149018,148391],{"class":735},[28,149020,51914],{"class":34},[28,149022,149023],{"class":735},"\"2024-10-02\"",[28,149025,12921],{"class":34},[28,149027,84561],{"class":735},[28,149029,51914],{"class":34},[28,149031,149032],{"class":38},"1800",[28,149034,5418],{"class":34},[28,149036,149037,149039,149041,149043,149046,149048,149050,149052,149055],{"class":30,"line":1711},[28,149038,148779],{"class":34},[28,149040,148391],{"class":735},[28,149042,51914],{"class":34},[28,149044,149045],{"class":735},"\"2024-10-03\"",[28,149047,12921],{"class":34},[28,149049,84561],{"class":735},[28,149051,51914],{"class":34},[28,149053,149054],{"class":38},"1500",[28,149056,5418],{"class":34},[28,149058,149059,149061,149063,149065,149068,149070,149072,149074,149077],{"class":30,"line":1802},[28,149060,148779],{"class":34},[28,149062,148391],{"class":735},[28,149064,51914],{"class":34},[28,149066,149067],{"class":735},"\"2024-10-04\"",[28,149069,12921],{"class":34},[28,149071,84561],{"class":735},[28,149073,51914],{"class":34},[28,149075,149076],{"class":38},"2100",[28,149078,5418],{"class":34},[28,149080,149081,149083,149085,149087,149090,149092,149094,149096,149099],{"class":30,"line":1808},[28,149082,148779],{"class":34},[28,149084,148391],{"class":735},[28,149086,51914],{"class":34},[28,149088,149089],{"class":735},"\"2024-10-05\"",[28,149091,12921],{"class":34},[28,149093,84561],{"class":735},[28,149095,51914],{"class":34},[28,149097,149098],{"class":38},"2600",[28,149100,5418],{"class":34},[28,149102,149103],{"class":30,"line":1820},[28,149104,111],{"class":34},[28,149106,149107],{"class":30,"line":2102},[28,149108,2890],{"emptyLinePlaceholder":562},[28,149110,149111,149113,149115,149118,149120,149122,149124,149126,149128],{"class":30,"line":2107},[28,149112,148194],{"class":34},[28,149114,83],{"class":42},[28,149116,149117],{"class":34}," [item[",[28,149119,148391],{"class":735},[28,149121,4931],{"class":34},[28,149123,49],{"class":42},[28,149125,148603],{"class":34},[28,149127,55],{"class":42},[28,149129,149130],{"class":34}," sales]\n",[28,149132,149133,149136,149138,149140,149142,149144,149146,149148,149150],{"class":30,"line":2113},[28,149134,149135],{"class":34},"amounts ",[28,149137,83],{"class":42},[28,149139,149117],{"class":34},[28,149141,84561],{"class":735},[28,149143,4931],{"class":34},[28,149145,49],{"class":42},[28,149147,148603],{"class":34},[28,149149,55],{"class":42},[28,149151,149130],{"class":34},[28,149153,149154],{"class":30,"line":2118},[28,149155,2890],{"emptyLinePlaceholder":562},[28,149157,149158,149160,149162],{"class":30,"line":2132},[28,149159,147646],{"class":34},[28,149161,83],{"class":42},[28,149163,147651],{"class":34},[28,149165,149166],{"class":30,"line":2137},[28,149167,148235],{"class":34},[28,149169,149170],{"class":30,"line":2143},[28,149171,148043],{"class":34},[28,149173,149174,149176,149178,149180],{"class":30,"line":2164},[28,149175,148048],{"class":5704},[28,149177,83],{"class":42},[28,149179,147689],{"class":735},[28,149181,31945],{"class":34},[28,149183,149184,149186,149188],{"class":30,"line":2169},[28,149185,148059],{"class":5704},[28,149187,83],{"class":42},[28,149189,149190],{"class":34},"amounts,\n",[28,149192,149193,149195,149197,149199],{"class":30,"line":2183},[28,149194,148088],{"class":5704},[28,149196,83],{"class":42},[28,149198,31955],{"class":38},[28,149200,31945],{"class":34},[28,149202,149203,149205,149207,149209,149211,149213,149215],{"class":30,"line":2188},[28,149204,148099],{"class":5704},[28,149206,83],{"class":42},[28,149208,148104],{"class":34},[28,149210,148107],{"class":5704},[28,149212,83],{"class":42},[28,149214,31955],{"class":38},[28,149216,38524],{"class":34},[28,149218,149219],{"class":30,"line":2217},[28,149220,228],{"class":34},[28,149222,149223],{"class":30,"line":2222},[28,149224,147862],{"class":34},[28,149226,149227,149229,149231,149233,149235,149237,149240],{"class":30,"line":2239},[28,149228,147867],{"class":5704},[28,149230,83],{"class":42},[28,149232,147872],{"class":34},[28,149234,51884],{"class":5704},[28,149236,83],{"class":42},[28,149238,149239],{"class":735},"\"每日销售额\"",[28,149241,38524],{"class":34},[28,149243,149244,149246,149248,149250,149252,149254,149256],{"class":30,"line":2244},[28,149245,147886],{"class":5704},[28,149247,83],{"class":42},[28,149249,147891],{"class":34},[28,149251,80287],{"class":5704},[28,149253,83],{"class":42},[28,149255,147898],{"class":735},[28,149257,38524],{"class":34},[28,149259,149260,149262,149264,149266,149268,149270,149272],{"class":30,"line":2249},[28,149261,147905],{"class":5704},[28,149263,83],{"class":42},[28,149265,147891],{"class":34},[28,149267,80287],{"class":5704},[28,149269,83],{"class":42},[28,149271,147916],{"class":735},[28,149273,38524],{"class":34},[28,149275,149276,149278,149280,149282,149284,149286,149288],{"class":30,"line":2254},[28,149277,147923],{"class":5704},[28,149279,83],{"class":42},[28,149281,147928],{"class":34},[28,149283,147931],{"class":5704},[28,149285,83],{"class":42},[28,149287,147936],{"class":735},[28,149289,38524],{"class":34},[28,149291,149292,149295,149297],{"class":30,"line":2268},[28,149293,149294],{"class":5704},"    datazoom_opts",[28,149296,83],{"class":42},[28,149298,149299],{"class":34},"[opts.DataZoomOpts()],\n",[28,149301,149302],{"class":30,"line":2273},[28,149303,228],{"class":34},[28,149305,149306,149308,149311],{"class":30,"line":3067},[28,149307,147718],{"class":34},[28,149309,149310],{"class":735},"\"daily_sales.html\"",[28,149312,228],{"class":34},[14,149314,149315,149318],{},[25,149316,149317],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[60,149320,149322],{"id":149321},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149324,149325],{},"如果数据结构如下：",[18,149327,149329],{"className":20,"code":149328,"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,149330,149331,149339,149347,149369,149390,149395,149402,149422,149442,149446],{"__ignoreMap":23},[28,149332,149333,149335,149337],{"class":30,"line":31},[28,149334,102052],{"class":34},[28,149336,83],{"class":42},[28,149338,16058],{"class":34},[28,149340,149341,149344],{"class":30,"line":77},[28,149342,149343],{"class":735},"    \"北京\"",[28,149345,149346],{"class":34},": [\n",[28,149348,149349,149351,149353,149355,149358,149360,149363,149365,149367],{"class":30,"line":114},[28,149350,5405],{"class":34},[28,149352,148391],{"class":735},[28,149354,51914],{"class":34},[28,149356,149357],{"class":735},"\"2024-01-01\"",[28,149359,12921],{"class":34},[28,149361,149362],{"class":735},"\"confirm\"",[28,149364,51914],{"class":34},[28,149366,225],{"class":38},[28,149368,5418],{"class":34},[28,149370,149371,149373,149375,149377,149380,149382,149384,149386,149388],{"class":30,"line":128},[28,149372,5405],{"class":34},[28,149374,148391],{"class":735},[28,149376,51914],{"class":34},[28,149378,149379],{"class":735},"\"2024-01-02\"",[28,149381,12921],{"class":34},[28,149383,149362],{"class":735},[28,149385,51914],{"class":34},[28,149387,1121],{"class":38},[28,149389,5418],{"class":34},[28,149391,149392],{"class":30,"line":393},[28,149393,149394],{"class":34},"    ],\n",[28,149396,149397,149400],{"class":30,"line":409},[28,149398,149399],{"class":735},"    \"上海\"",[28,149401,149346],{"class":34},[28,149403,149404,149406,149408,149410,149412,149414,149416,149418,149420],{"class":30,"line":1711},[28,149405,5405],{"class":34},[28,149407,148391],{"class":735},[28,149409,51914],{"class":34},[28,149411,149357],{"class":735},[28,149413,12921],{"class":34},[28,149415,149362],{"class":735},[28,149417,51914],{"class":34},[28,149419,1020],{"class":38},[28,149421,5418],{"class":34},[28,149423,149424,149426,149428,149430,149432,149434,149436,149438,149440],{"class":30,"line":1802},[28,149425,5405],{"class":34},[28,149427,148391],{"class":735},[28,149429,51914],{"class":34},[28,149431,149379],{"class":735},[28,149433,12921],{"class":34},[28,149435,149362],{"class":735},[28,149437,51914],{"class":34},[28,149439,317],{"class":38},[28,149441,5418],{"class":34},[28,149443,149444],{"class":30,"line":1808},[28,149445,149394],{"class":34},[28,149447,149448],{"class":30,"line":1820},[28,149449,2055],{"class":34},[14,149451,149452],{},"绘制多地区趋势：",[18,149454,149456],{"className":20,"code":149455,"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,149457,149458,149472,149482,149486,149511,149515,149523,149527,149531,149543,149565,149578,149582,149586,149603,149619,149623],{"__ignoreMap":23},[28,149459,149460,149462,149464,149466,149468,149470],{"class":30,"line":31},[28,149461,530],{"class":42},[28,149463,147773],{"class":34},[28,149465,536],{"class":42},[28,149467,147778],{"class":34},[28,149469,542],{"class":42},[28,149471,147783],{"class":34},[28,149473,149474,149476,149478,149480],{"class":30,"line":77},[28,149475,530],{"class":42},[28,149477,147632],{"class":34},[28,149479,536],{"class":42},[28,149481,147637],{"class":34},[28,149483,149484],{"class":30,"line":114},[28,149485,2890],{"emptyLinePlaceholder":562},[28,149487,149488,149490,149492,149494,149496,149498,149500,149502,149504,149507,149509],{"class":30,"line":128},[28,149489,148194],{"class":34},[28,149491,83],{"class":42},[28,149493,149117],{"class":34},[28,149495,148391],{"class":735},[28,149497,4931],{"class":34},[28,149499,49],{"class":42},[28,149501,148603],{"class":34},[28,149503,55],{"class":42},[28,149505,149506],{"class":34}," data[",[28,149508,69746],{"class":735},[28,149510,78004],{"class":34},[28,149512,149513],{"class":30,"line":393},[28,149514,2890],{"emptyLinePlaceholder":562},[28,149516,149517,149519,149521],{"class":30,"line":409},[28,149518,147646],{"class":34},[28,149520,83],{"class":42},[28,149522,147651],{"class":34},[28,149524,149525],{"class":30,"line":1711},[28,149526,148235],{"class":34},[28,149528,149529],{"class":30,"line":1802},[28,149530,2890],{"emptyLinePlaceholder":562},[28,149532,149533,149535,149538,149540],{"class":30,"line":1808},[28,149534,49],{"class":42},[28,149536,149537],{"class":34}," city, records ",[28,149539,55],{"class":42},[28,149541,149542],{"class":34}," data.items():\n",[28,149544,149545,149548,149550,149552,149554,149556,149558,149560,149562],{"class":30,"line":1820},[28,149546,149547],{"class":34},"    values ",[28,149549,83],{"class":42},[28,149551,149117],{"class":34},[28,149553,149362],{"class":735},[28,149555,4931],{"class":34},[28,149557,49],{"class":42},[28,149559,148603],{"class":34},[28,149561,55],{"class":42},[28,149563,149564],{"class":34}," records]\n",[28,149566,149567,149570,149572,149574,149576],{"class":30,"line":2102},[28,149568,149569],{"class":34},"    line.add_yaxis(city, values, ",[28,149571,148139],{"class":5704},[28,149573,83],{"class":42},[28,149575,31955],{"class":38},[28,149577,228],{"class":34},[28,149579,149580],{"class":30,"line":2107},[28,149581,2890],{"emptyLinePlaceholder":562},[28,149583,149584],{"class":30,"line":2113},[28,149585,147862],{"class":34},[28,149587,149588,149590,149592,149594,149596,149598,149601],{"class":30,"line":2118},[28,149589,147867],{"class":5704},[28,149591,83],{"class":42},[28,149593,147872],{"class":34},[28,149595,51884],{"class":5704},[28,149597,83],{"class":42},[28,149599,149600],{"class":735},"\"多地区趋势图\"",[28,149602,38524],{"class":34},[28,149604,149605,149607,149609,149611,149613,149615,149617],{"class":30,"line":2132},[28,149606,147923],{"class":5704},[28,149608,83],{"class":42},[28,149610,147928],{"class":34},[28,149612,147931],{"class":5704},[28,149614,83],{"class":42},[28,149616,147936],{"class":735},[28,149618,38524],{"class":34},[28,149620,149621],{"class":30,"line":2137},[28,149622,228],{"class":34},[28,149624,149625,149627,149630],{"class":30,"line":2143},[28,149626,147718],{"class":34},[28,149628,149629],{"class":735},"\"trend.html\"",[28,149631,228],{"class":34},[14,149633,149634],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[60,149636,149638],{"id":149637},"_1012-易错点","10.12 易错点",[588,149640,149641,149647,149653,149663,149669],{},[591,149642,149643,149646],{},[25,149644,149645],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[591,149648,149649,149652],{},[25,149650,149651],{},"render()"," 生成的是 HTML，不是图片。",[591,149654,149655,149656,149659,149660,28871],{},"JSON 字符串用 ",[25,149657,149658],{},"json.loads()","，JSON 文件用 ",[25,149661,149662],{},"json.load()",[591,149664,149665,149666,28871],{},"中文 JSON 保存时加 ",[25,149667,149668],{},"ensure_ascii=False",[591,149670,149671],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[60,149673,149675],{"id":149674},"_1013-本章练习","10.13 本章练习",[588,149677,149678,149681,149684,149687,149690],{},[591,149679,149680],{},"安装 pyecharts 并生成第一个折线图。",[591,149682,149683],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[591,149685,149686],{},"绘制两条折线，对比线上和线下销售额。",[591,149688,149689],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[591,149691,149692],{},"对含有空值的销售数据进行清洗后再绘图。",[547,149694,149695],{},"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":77,"depth":77,"links":149697},[149698,149699,149700,149701,149702,149703,149704,149705,149706,149707,149708,149709,149710],{"id":147314,"depth":77,"text":147315},{"id":147389,"depth":77,"text":147390},{"id":147568,"depth":77,"text":147569},{"id":147619,"depth":77,"text":147620},{"id":147753,"depth":77,"text":147754},{"id":148029,"depth":77,"text":148030},{"id":148155,"depth":77,"text":148156},{"id":148366,"depth":77,"text":148367},{"id":148737,"depth":77,"text":148738},{"id":148949,"depth":77,"text":148950},{"id":149321,"depth":77,"text":149322},{"id":149637,"depth":77,"text":149638},{"id":149674,"depth":77,"text":149675},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147306,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149717,"title":149718,"body":149719,"description":559,"extension":560,"meta":152079,"navigation":562,"path":152080,"seo":152081,"stem":152082,"__hash__":152083},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149720,"toc":152056},[149721,149724,149728,149731,149734,149810,149813,149904,149907,149911,149914,149958,149971,149975,149978,150045,150048,150052,150055,150139,150147,150151,150156,150297,150300,150311,150317,150323,150437,150441,150444,150447,150700,150703,150707,150710,150814,150817,150821,150972,150976,150983,151096,151100,151103,151209,151212,151216,151219,151250,151253,151358,151361,151365,151369,151379,151447,151451,151458,151522,151525,151529,151535,151631,151640,151644,151968,151977,151981,152009,152013,152053],[10,149722,149718],{"id":149723},"_11-面向对象基础",[60,149725,149727],{"id":149726},"_111-什么是面向对象","11.1 什么是面向对象",[14,149729,149730],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149732,149733],{},"面向过程：",[18,149735,149737],{"className":20,"code":149736,"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,149738,149739,149748,149756,149760,149770,149801,149805],{"__ignoreMap":23},[28,149740,149741,149743,149745],{"class":30,"line":31},[28,149742,146930],{"class":34},[28,149744,83],{"class":42},[28,149746,149747],{"class":735}," \"小明\"\n",[28,149749,149750,149752,149754],{"class":30,"line":77},[28,149751,146940],{"class":34},[28,149753,83],{"class":42},[28,149755,146945],{"class":38},[28,149757,149758],{"class":30,"line":114},[28,149759,2890],{"emptyLinePlaceholder":562},[28,149761,149762,149764,149767],{"class":30,"line":128},[28,149763,32426],{"class":42},[28,149765,149766],{"class":2453}," introduce",[28,149768,149769],{"class":34},"(name, age):\n",[28,149771,149772,149774,149776,149778,149781,149783,149785,149787,149790,149792,149794,149796,149799],{"class":30,"line":393},[28,149773,31780],{"class":38},[28,149775,367],{"class":34},[28,149777,686],{"class":42},[28,149779,149780],{"class":735},"\"我叫",[28,149782,1515],{"class":38},[28,149784,80287],{"class":34},[28,149786,1565],{"class":38},[28,149788,149789],{"class":735},"，今年",[28,149791,1515],{"class":38},[28,149793,70698],{"class":34},[28,149795,1565],{"class":38},[28,149797,149798],{"class":735},"岁\"",[28,149800,228],{"class":34},[28,149802,149803],{"class":30,"line":409},[28,149804,2890],{"emptyLinePlaceholder":562},[28,149806,149807],{"class":30,"line":1711},[28,149808,149809],{"class":34},"introduce(name, age)\n",[14,149811,149812],{},"面向对象：",[18,149814,149816],{"className":20,"code":149815,"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,149817,149818,149826,149834,149863,149867,149871,149881,149890,149899],{"__ignoreMap":23},[28,149819,149820,149822,149824],{"class":30,"line":31},[28,149821,15180],{"class":42},[28,149823,8386],{"class":2453},[28,149825,4227],{"class":34},[28,149827,149828,149830,149832],{"class":30,"line":77},[28,149829,31282],{"class":42},[28,149831,149766],{"class":2453},[28,149833,31288],{"class":34},[28,149835,149836,149838,149840,149842,149844,149847,149849,149851,149853,149855,149857,149859,149861],{"class":30,"line":114},[28,149837,32929],{"class":38},[28,149839,367],{"class":34},[28,149841,686],{"class":42},[28,149843,149780],{"class":735},[28,149845,149846],{"class":38},"{self",[28,149848,80778],{"class":34},[28,149850,1565],{"class":38},[28,149852,149789],{"class":735},[28,149854,149846],{"class":38},[28,149856,80790],{"class":34},[28,149858,1565],{"class":38},[28,149860,149798],{"class":735},[28,149862,228],{"class":34},[28,149864,149865],{"class":30,"line":128},[28,149866,2890],{"emptyLinePlaceholder":562},[28,149868,149869],{"class":30,"line":393},[28,149870,2890],{"emptyLinePlaceholder":562},[28,149872,149873,149876,149878],{"class":30,"line":409},[28,149874,149875],{"class":34},"student ",[28,149877,83],{"class":42},[28,149879,149880],{"class":34}," Student()\n",[28,149882,149883,149886,149888],{"class":30,"line":1711},[28,149884,149885],{"class":34},"student.name ",[28,149887,83],{"class":42},[28,149889,149747],{"class":735},[28,149891,149892,149895,149897],{"class":30,"line":1802},[28,149893,149894],{"class":34},"student.age ",[28,149896,83],{"class":42},[28,149898,146945],{"class":38},[28,149900,149901],{"class":30,"line":1808},[28,149902,149903],{"class":34},"student.introduce()\n",[14,149905,149906],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[60,149908,149910],{"id":149909},"_112-类和对象","11.2 类和对象",[14,149912,149913],{},"类是模板，对象是根据模板创建出来的具体实例。",[18,149915,149917],{"className":20,"code":149916,"language":22,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[25,149918,149919,149927,149932,149936,149940,149949],{"__ignoreMap":23},[28,149920,149921,149923,149925],{"class":30,"line":31},[28,149922,15180],{"class":42},[28,149924,8386],{"class":2453},[28,149926,4227],{"class":34},[28,149928,149929],{"class":30,"line":77},[28,149930,149931],{"class":42},"    pass\n",[28,149933,149934],{"class":30,"line":114},[28,149935,2890],{"emptyLinePlaceholder":562},[28,149937,149938],{"class":30,"line":128},[28,149939,2890],{"emptyLinePlaceholder":562},[28,149941,149942,149945,149947],{"class":30,"line":393},[28,149943,149944],{"class":34},"student1 ",[28,149946,83],{"class":42},[28,149948,149880],{"class":34},[28,149950,149951,149954,149956],{"class":30,"line":409},[28,149952,149953],{"class":34},"student2 ",[28,149955,83],{"class":42},[28,149957,149880],{"class":34},[14,149959,149960,149963,149964,101412,149967,149970],{},[25,149961,149962],{},"Student"," 是类，",[25,149965,149966],{},"student1",[25,149968,149969],{},"student2"," 是对象。",[60,149972,149974],{"id":149973},"_113-属性","11.3 属性",[14,149976,149977],{},"属性是对象保存的数据。",[18,149979,149981],{"className":20,"code":149980,"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,149982,149983,149991,149995,149999,150003,150011,150019,150027,150031,150038],{"__ignoreMap":23},[28,149984,149985,149987,149989],{"class":30,"line":31},[28,149986,15180],{"class":42},[28,149988,8386],{"class":2453},[28,149990,4227],{"class":34},[28,149992,149993],{"class":30,"line":77},[28,149994,149931],{"class":42},[28,149996,149997],{"class":30,"line":114},[28,149998,2890],{"emptyLinePlaceholder":562},[28,150000,150001],{"class":30,"line":128},[28,150002,2890],{"emptyLinePlaceholder":562},[28,150004,150005,150007,150009],{"class":30,"line":393},[28,150006,149875],{"class":34},[28,150008,83],{"class":42},[28,150010,149880],{"class":34},[28,150012,150013,150015,150017],{"class":30,"line":409},[28,150014,149885],{"class":34},[28,150016,83],{"class":42},[28,150018,149747],{"class":735},[28,150020,150021,150023,150025],{"class":30,"line":1711},[28,150022,149894],{"class":34},[28,150024,83],{"class":42},[28,150026,146945],{"class":38},[28,150028,150029],{"class":30,"line":1802},[28,150030,2890],{"emptyLinePlaceholder":562},[28,150032,150033,150035],{"class":30,"line":1808},[28,150034,30898],{"class":38},[28,150036,150037],{"class":34},"(student.name)\n",[28,150039,150040,150042],{"class":30,"line":1820},[28,150041,30898],{"class":38},[28,150043,150044],{"class":34},"(student.age)\n",[14,150046,150047],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[60,150049,150051],{"id":150050},"_114-方法","11.4 方法",[14,150053,150054],{},"类中的函数叫方法。",[18,150056,150057],{"className":20,"code":149815,"language":22,"meta":23,"style":23},[25,150058,150059,150067,150075,150103,150107,150111,150119,150127,150135],{"__ignoreMap":23},[28,150060,150061,150063,150065],{"class":30,"line":31},[28,150062,15180],{"class":42},[28,150064,8386],{"class":2453},[28,150066,4227],{"class":34},[28,150068,150069,150071,150073],{"class":30,"line":77},[28,150070,31282],{"class":42},[28,150072,149766],{"class":2453},[28,150074,31288],{"class":34},[28,150076,150077,150079,150081,150083,150085,150087,150089,150091,150093,150095,150097,150099,150101],{"class":30,"line":114},[28,150078,32929],{"class":38},[28,150080,367],{"class":34},[28,150082,686],{"class":42},[28,150084,149780],{"class":735},[28,150086,149846],{"class":38},[28,150088,80778],{"class":34},[28,150090,1565],{"class":38},[28,150092,149789],{"class":735},[28,150094,149846],{"class":38},[28,150096,80790],{"class":34},[28,150098,1565],{"class":38},[28,150100,149798],{"class":735},[28,150102,228],{"class":34},[28,150104,150105],{"class":30,"line":128},[28,150106,2890],{"emptyLinePlaceholder":562},[28,150108,150109],{"class":30,"line":393},[28,150110,2890],{"emptyLinePlaceholder":562},[28,150112,150113,150115,150117],{"class":30,"line":409},[28,150114,149875],{"class":34},[28,150116,83],{"class":42},[28,150118,149880],{"class":34},[28,150120,150121,150123,150125],{"class":30,"line":1711},[28,150122,149885],{"class":34},[28,150124,83],{"class":42},[28,150126,149747],{"class":735},[28,150128,150129,150131,150133],{"class":30,"line":1802},[28,150130,149894],{"class":34},[28,150132,83],{"class":42},[28,150134,146945],{"class":38},[28,150136,150137],{"class":30,"line":1808},[28,150138,149903],{"class":34},[14,150140,150141,150143,150144,150146],{},[25,150142,31304],{}," 表示当前对象。调用方法时不需要手动传入 ",[25,150145,31304],{},"，Python 会自动传。",[60,150148,150150],{"id":150149},"_115-构造方法__init__","11.5 构造方法__init__",[14,150152,150153,150155],{},[25,150154,31310],{}," 在对象创建时自动执行，用于初始化属性。",[18,150157,150159],{"className":20,"code":150158,"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,150160,150161,150169,150178,150190,150202,150213,150217,150225,150263,150267,150271,150293],{"__ignoreMap":23},[28,150162,150163,150165,150167],{"class":30,"line":31},[28,150164,15180],{"class":42},[28,150166,8386],{"class":2453},[28,150168,4227],{"class":34},[28,150170,150171,150173,150175],{"class":30,"line":77},[28,150172,31282],{"class":42},[28,150174,31285],{"class":38},[28,150176,150177],{"class":34},"(self, name, age, score):\n",[28,150179,150180,150182,150185,150187],{"class":30,"line":114},[28,150181,31326],{"class":38},[28,150183,150184],{"class":34},".name ",[28,150186,83],{"class":42},[28,150188,150189],{"class":34}," name\n",[28,150191,150192,150194,150197,150199],{"class":30,"line":128},[28,150193,31326],{"class":38},[28,150195,150196],{"class":34},".age ",[28,150198,83],{"class":42},[28,150200,150201],{"class":34}," age\n",[28,150203,150204,150206,150209,150211],{"class":30,"line":393},[28,150205,31326],{"class":38},[28,150207,150208],{"class":34},".score ",[28,150210,83],{"class":42},[28,150212,2069],{"class":34},[28,150214,150215],{"class":30,"line":409},[28,150216,2890],{"emptyLinePlaceholder":562},[28,150218,150219,150221,150223],{"class":30,"line":1711},[28,150220,31282],{"class":42},[28,150222,149766],{"class":2453},[28,150224,31288],{"class":34},[28,150226,150227,150229,150231,150233,150235,150237,150239,150241,150243,150245,150247,150249,150252,150254,150257,150259,150261],{"class":30,"line":1802},[28,150228,32929],{"class":38},[28,150230,367],{"class":34},[28,150232,686],{"class":42},[28,150234,149780],{"class":735},[28,150236,149846],{"class":38},[28,150238,80778],{"class":34},[28,150240,1565],{"class":38},[28,150242,149789],{"class":735},[28,150244,149846],{"class":38},[28,150246,80790],{"class":34},[28,150248,1565],{"class":38},[28,150250,150251],{"class":735},"岁，成绩",[28,150253,149846],{"class":38},[28,150255,150256],{"class":34},".score",[28,150258,1565],{"class":38},[28,150260,880],{"class":735},[28,150262,228],{"class":34},[28,150264,150265],{"class":30,"line":1808},[28,150266,2890],{"emptyLinePlaceholder":562},[28,150268,150269],{"class":30,"line":1820},[28,150270,2890],{"emptyLinePlaceholder":562},[28,150272,150273,150275,150277,150280,150283,150285,150287,150289,150291],{"class":30,"line":2102},[28,150274,149875],{"class":34},[28,150276,83],{"class":42},[28,150278,150279],{"class":34}," Student(",[28,150281,150282],{"class":735},"\"小明\"",[28,150284,12921],{"class":34},[28,150286,1270],{"class":38},[28,150288,12921],{"class":34},[28,150290,1608],{"class":38},[28,150292,228],{"class":34},[28,150294,150295],{"class":30,"line":2107},[28,150296,149903],{"class":34},[14,150298,150299],{},"构造方法的好处：",[588,150301,150302,150305,150308],{},[591,150303,150304],{},"创建对象时必须提供必要数据。",[591,150306,150307],{},"属性初始化集中，不容易漏。",[591,150309,150310],{},"对象状态更完整。",[60,150312,150314,150315],{"id":150313},"_116-str","11.6 ",[780,150316,1790],{},[14,150318,150319,150320,28871],{},"直接打印对象时，默认输出不直观。可以定义 ",[25,150321,150322],{},"__str__",[18,150324,150326],{"className":20,"code":150325,"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,150327,150328,150336,150345,150355,150365,150369,150378,150406,150410,150414,150430],{"__ignoreMap":23},[28,150329,150330,150332,150334],{"class":30,"line":31},[28,150331,15180],{"class":42},[28,150333,8386],{"class":2453},[28,150335,4227],{"class":34},[28,150337,150338,150340,150342],{"class":30,"line":77},[28,150339,31282],{"class":42},[28,150341,31285],{"class":38},[28,150343,150344],{"class":34},"(self, name, age):\n",[28,150346,150347,150349,150351,150353],{"class":30,"line":114},[28,150348,31326],{"class":38},[28,150350,150184],{"class":34},[28,150352,83],{"class":42},[28,150354,150189],{"class":34},[28,150356,150357,150359,150361,150363],{"class":30,"line":128},[28,150358,31326],{"class":38},[28,150360,150196],{"class":34},[28,150362,83],{"class":42},[28,150364,150201],{"class":34},[28,150366,150367],{"class":30,"line":393},[28,150368,2890],{"emptyLinePlaceholder":562},[28,150370,150371,150373,150376],{"class":30,"line":409},[28,150372,31282],{"class":42},[28,150374,150375],{"class":38}," __str__",[28,150377,31288],{"class":34},[28,150379,150380,150382,150385,150388,150390,150392,150394,150397,150399,150401,150403],{"class":30,"line":1711},[28,150381,15238],{"class":42},[28,150383,150384],{"class":42}," f",[28,150386,150387],{"class":735},"\"Student(name=",[28,150389,149846],{"class":38},[28,150391,80778],{"class":34},[28,150393,1565],{"class":38},[28,150395,150396],{"class":735},", age=",[28,150398,149846],{"class":38},[28,150400,80790],{"class":34},[28,150402,1565],{"class":38},[28,150404,150405],{"class":735},")\"\n",[28,150407,150408],{"class":30,"line":1802},[28,150409,2890],{"emptyLinePlaceholder":562},[28,150411,150412],{"class":30,"line":1808},[28,150413,2890],{"emptyLinePlaceholder":562},[28,150415,150416,150418,150420,150422,150424,150426,150428],{"class":30,"line":1820},[28,150417,149875],{"class":34},[28,150419,83],{"class":42},[28,150421,150279],{"class":34},[28,150423,150282],{"class":735},[28,150425,12921],{"class":34},[28,150427,1270],{"class":38},[28,150429,228],{"class":34},[28,150431,150432,150434],{"class":30,"line":2102},[28,150433,30898],{"class":38},[28,150435,150436],{"class":34},"(student)\n",[60,150438,150440],{"id":150439},"_117-封装","11.7 封装",[14,150442,150443],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150445,150446],{},"Python 中以双下划线开头的属性通常视为私有属性。",[18,150448,150450],{"className":20,"code":150449,"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,150451,150452,150461,150470,150482,150494,150498,150507,150516,150520,150530,150543,150554,150559,150570,150574,150583,150595,150606,150610,150623,150634,150638,150649,150653,150657,150675,150684,150693],{"__ignoreMap":23},[28,150453,150454,150456,150459],{"class":30,"line":31},[28,150455,15180],{"class":42},[28,150457,150458],{"class":2453}," Account",[28,150460,4227],{"class":34},[28,150462,150463,150465,150467],{"class":30,"line":77},[28,150464,31282],{"class":42},[28,150466,31285],{"class":38},[28,150468,150469],{"class":34},"(self, owner, balance):\n",[28,150471,150472,150474,150477,150479],{"class":30,"line":114},[28,150473,31326],{"class":38},[28,150475,150476],{"class":34},".owner ",[28,150478,83],{"class":42},[28,150480,150481],{"class":34}," owner\n",[28,150483,150484,150486,150489,150491],{"class":30,"line":128},[28,150485,31326],{"class":38},[28,150487,150488],{"class":34},".__balance ",[28,150490,83],{"class":42},[28,150492,150493],{"class":34}," balance\n",[28,150495,150496],{"class":30,"line":393},[28,150497,2890],{"emptyLinePlaceholder":562},[28,150499,150500,150502,150505],{"class":30,"line":409},[28,150501,31282],{"class":42},[28,150503,150504],{"class":2453}," get_balance",[28,150506,31288],{"class":34},[28,150508,150509,150511,150513],{"class":30,"line":1711},[28,150510,15238],{"class":42},[28,150512,39350],{"class":38},[28,150514,150515],{"class":34},".__balance\n",[28,150517,150518],{"class":30,"line":1802},[28,150519,2890],{"emptyLinePlaceholder":562},[28,150521,150522,150524,150527],{"class":30,"line":1808},[28,150523,31282],{"class":42},[28,150525,150526],{"class":2453}," deposit",[28,150528,150529],{"class":34},"(self, money):\n",[28,150531,150532,150534,150537,150539,150541],{"class":30,"line":1820},[28,150533,2987],{"class":42},[28,150535,150536],{"class":34}," money ",[28,150538,2078],{"class":42},[28,150540,4581],{"class":38},[28,150542,4227],{"class":34},[28,150544,150545,150547,150549,150552],{"class":30,"line":2102},[28,150546,35127],{"class":38},[28,150548,367],{"class":34},[28,150550,150551],{"class":735},"\"存款金额必须大于0\"",[28,150553,228],{"class":34},[28,150555,150556],{"class":30,"line":2107},[28,150557,150558],{"class":42},"            return\n",[28,150560,150561,150563,150565,150567],{"class":30,"line":2113},[28,150562,31326],{"class":38},[28,150564,150488],{"class":34},[28,150566,9964],{"class":42},[28,150568,150569],{"class":34}," money\n",[28,150571,150572],{"class":30,"line":2118},[28,150573,2890],{"emptyLinePlaceholder":562},[28,150575,150576,150578,150581],{"class":30,"line":2132},[28,150577,31282],{"class":42},[28,150579,150580],{"class":2453}," withdraw",[28,150582,150529],{"class":34},[28,150584,150585,150587,150589,150591,150593],{"class":30,"line":2137},[28,150586,2987],{"class":42},[28,150588,150536],{"class":34},[28,150590,2078],{"class":42},[28,150592,4581],{"class":38},[28,150594,4227],{"class":34},[28,150596,150597,150599,150601,150604],{"class":30,"line":2143},[28,150598,35127],{"class":38},[28,150600,367],{"class":34},[28,150602,150603],{"class":735},"\"取款金额必须大于0\"",[28,150605,228],{"class":34},[28,150607,150608],{"class":30,"line":2164},[28,150609,150558],{"class":42},[28,150611,150612,150614,150616,150618,150620],{"class":30,"line":2169},[28,150613,2987],{"class":42},[28,150615,150536],{"class":34},[28,150617,1579],{"class":42},[28,150619,39350],{"class":38},[28,150621,150622],{"class":34},".__balance:\n",[28,150624,150625,150627,150629,150632],{"class":30,"line":2183},[28,150626,35127],{"class":38},[28,150628,367],{"class":34},[28,150630,150631],{"class":735},"\"余额不足\"",[28,150633,228],{"class":34},[28,150635,150636],{"class":30,"line":2188},[28,150637,150558],{"class":42},[28,150639,150640,150642,150644,150647],{"class":30,"line":2217},[28,150641,31326],{"class":38},[28,150643,150488],{"class":34},[28,150645,150646],{"class":42},"-=",[28,150648,150569],{"class":34},[28,150650,150651],{"class":30,"line":2222},[28,150652,2890],{"emptyLinePlaceholder":562},[28,150654,150655],{"class":30,"line":2239},[28,150656,2890],{"emptyLinePlaceholder":562},[28,150658,150659,150662,150664,150667,150669,150671,150673],{"class":30,"line":2244},[28,150660,150661],{"class":34},"account ",[28,150663,83],{"class":42},[28,150665,150666],{"class":34}," Account(",[28,150668,150282],{"class":735},[28,150670,12921],{"class":34},[28,150672,6898],{"class":38},[28,150674,228],{"class":34},[28,150676,150677,150680,150682],{"class":30,"line":2249},[28,150678,150679],{"class":34},"account.deposit(",[28,150681,2212],{"class":38},[28,150683,228],{"class":34},[28,150685,150686,150689,150691],{"class":30,"line":2254},[28,150687,150688],{"class":34},"account.withdraw(",[28,150690,938],{"class":38},[28,150692,228],{"class":34},[28,150694,150695,150697],{"class":30,"line":2268},[28,150696,30898],{"class":38},[28,150698,150699],{"class":34},"(account.get_balance())\n",[14,150701,150702],{},"封装的意义是避免外部随意修改内部状态。",[60,150704,150706],{"id":150705},"_118-继承","11.8 继承",[14,150708,150709],{},"继承可以让子类复用父类的属性和方法。",[18,150711,150713],{"className":20,"code":150712,"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,150714,150715,150724,150733,150744,150748,150752,150766,150775,150786,150790,150794,150804,150809],{"__ignoreMap":23},[28,150716,150717,150719,150722],{"class":30,"line":31},[28,150718,15180],{"class":42},[28,150720,150721],{"class":2453}," Animal",[28,150723,4227],{"class":34},[28,150725,150726,150728,150731],{"class":30,"line":77},[28,150727,31282],{"class":42},[28,150729,150730],{"class":2453}," eat",[28,150732,31288],{"class":34},[28,150734,150735,150737,150739,150742],{"class":30,"line":114},[28,150736,32929],{"class":38},[28,150738,367],{"class":34},[28,150740,150741],{"class":735},"\"吃东西\"",[28,150743,228],{"class":34},[28,150745,150746],{"class":30,"line":128},[28,150747,2890],{"emptyLinePlaceholder":562},[28,150749,150750],{"class":30,"line":393},[28,150751,2890],{"emptyLinePlaceholder":562},[28,150753,150754,150756,150759,150761,150764],{"class":30,"line":409},[28,150755,15180],{"class":42},[28,150757,150758],{"class":2453}," Dog",[28,150760,367],{"class":34},[28,150762,150763],{"class":2453},"Animal",[28,150765,372],{"class":34},[28,150767,150768,150770,150773],{"class":30,"line":1711},[28,150769,31282],{"class":42},[28,150771,150772],{"class":2453}," bark",[28,150774,31288],{"class":34},[28,150776,150777,150779,150781,150784],{"class":30,"line":1802},[28,150778,32929],{"class":38},[28,150780,367],{"class":34},[28,150782,150783],{"class":735},"\"汪汪\"",[28,150785,228],{"class":34},[28,150787,150788],{"class":30,"line":1808},[28,150789,2890],{"emptyLinePlaceholder":562},[28,150791,150792],{"class":30,"line":1820},[28,150793,2890],{"emptyLinePlaceholder":562},[28,150795,150796,150799,150801],{"class":30,"line":2102},[28,150797,150798],{"class":34},"dog ",[28,150800,83],{"class":42},[28,150802,150803],{"class":34}," Dog()\n",[28,150805,150806],{"class":30,"line":2107},[28,150807,150808],{"class":34},"dog.eat()\n",[28,150810,150811],{"class":30,"line":2113},[28,150812,150813],{"class":34},"dog.bark()\n",[14,150815,150816],{},"子类可以扩展新方法，也可以重写父类方法。",[60,150818,150820],{"id":150819},"_119-方法重写","11.9 方法重写",[18,150822,150824],{"className":20,"code":150823,"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,150825,150826,150834,150843,150854,150858,150862,150874,150882,150892,150896,150900,150913,150921,150932,150936,150940,150948,150958,150962,150967],{"__ignoreMap":23},[28,150827,150828,150830,150832],{"class":30,"line":31},[28,150829,15180],{"class":42},[28,150831,150721],{"class":2453},[28,150833,4227],{"class":34},[28,150835,150836,150838,150841],{"class":30,"line":77},[28,150837,31282],{"class":42},[28,150839,150840],{"class":2453}," speak",[28,150842,31288],{"class":34},[28,150844,150845,150847,150849,150852],{"class":30,"line":114},[28,150846,32929],{"class":38},[28,150848,367],{"class":34},[28,150850,150851],{"class":735},"\"动物叫\"",[28,150853,228],{"class":34},[28,150855,150856],{"class":30,"line":128},[28,150857,2890],{"emptyLinePlaceholder":562},[28,150859,150860],{"class":30,"line":393},[28,150861,2890],{"emptyLinePlaceholder":562},[28,150863,150864,150866,150868,150870,150872],{"class":30,"line":409},[28,150865,15180],{"class":42},[28,150867,150758],{"class":2453},[28,150869,367],{"class":34},[28,150871,150763],{"class":2453},[28,150873,372],{"class":34},[28,150875,150876,150878,150880],{"class":30,"line":1711},[28,150877,31282],{"class":42},[28,150879,150840],{"class":2453},[28,150881,31288],{"class":34},[28,150883,150884,150886,150888,150890],{"class":30,"line":1802},[28,150885,32929],{"class":38},[28,150887,367],{"class":34},[28,150889,150783],{"class":735},[28,150891,228],{"class":34},[28,150893,150894],{"class":30,"line":1808},[28,150895,2890],{"emptyLinePlaceholder":562},[28,150897,150898],{"class":30,"line":1820},[28,150899,2890],{"emptyLinePlaceholder":562},[28,150901,150902,150904,150907,150909,150911],{"class":30,"line":2102},[28,150903,15180],{"class":42},[28,150905,150906],{"class":2453}," Cat",[28,150908,367],{"class":34},[28,150910,150763],{"class":2453},[28,150912,372],{"class":34},[28,150914,150915,150917,150919],{"class":30,"line":2107},[28,150916,31282],{"class":42},[28,150918,150840],{"class":2453},[28,150920,31288],{"class":34},[28,150922,150923,150925,150927,150930],{"class":30,"line":2113},[28,150924,32929],{"class":38},[28,150926,367],{"class":34},[28,150928,150929],{"class":735},"\"喵喵\"",[28,150931,228],{"class":34},[28,150933,150934],{"class":30,"line":2118},[28,150935,2890],{"emptyLinePlaceholder":562},[28,150937,150938],{"class":30,"line":2132},[28,150939,2890],{"emptyLinePlaceholder":562},[28,150941,150942,150944,150946],{"class":30,"line":2137},[28,150943,150798],{"class":34},[28,150945,83],{"class":42},[28,150947,150803],{"class":34},[28,150949,150950,150953,150955],{"class":30,"line":2143},[28,150951,150952],{"class":34},"cat ",[28,150954,83],{"class":42},[28,150956,150957],{"class":34}," Cat()\n",[28,150959,150960],{"class":30,"line":2164},[28,150961,2890],{"emptyLinePlaceholder":562},[28,150963,150964],{"class":30,"line":2169},[28,150965,150966],{"class":34},"dog.speak()\n",[28,150968,150969],{"class":30,"line":2183},[28,150970,150971],{"class":34},"cat.speak()\n",[60,150973,150975],{"id":150974},"_1110-super","11.10 super",[14,150977,150978,150979,150982],{},"子类可以通过 ",[25,150980,150981],{},"super()"," 调用父类方法。",[18,150984,150986],{"className":20,"code":150985,"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,150987,150988,150996,151005,151015,151019,151023,151035,151044,151055,151065,151069,151073,151089],{"__ignoreMap":23},[28,150989,150990,150992,150994],{"class":30,"line":31},[28,150991,15180],{"class":42},[28,150993,16055],{"class":2453},[28,150995,4227],{"class":34},[28,150997,150998,151000,151002],{"class":30,"line":77},[28,150999,31282],{"class":42},[28,151001,31285],{"class":38},[28,151003,151004],{"class":34},"(self, name):\n",[28,151006,151007,151009,151011,151013],{"class":30,"line":114},[28,151008,31326],{"class":38},[28,151010,150184],{"class":34},[28,151012,83],{"class":42},[28,151014,150189],{"class":34},[28,151016,151017],{"class":30,"line":128},[28,151018,2890],{"emptyLinePlaceholder":562},[28,151020,151021],{"class":30,"line":393},[28,151022,2890],{"emptyLinePlaceholder":562},[28,151024,151025,151027,151029,151031,151033],{"class":30,"line":409},[28,151026,15180],{"class":42},[28,151028,8386],{"class":2453},[28,151030,367],{"class":34},[28,151032,19532],{"class":2453},[28,151034,372],{"class":34},[28,151036,151037,151039,151041],{"class":30,"line":1711},[28,151038,31282],{"class":42},[28,151040,31285],{"class":38},[28,151042,151043],{"class":34},"(self, name, score):\n",[28,151045,151046,151048,151050,151052],{"class":30,"line":1802},[28,151047,31298],{"class":38},[28,151049,17747],{"class":34},[28,151051,31310],{"class":38},[28,151053,151054],{"class":34},"(name)\n",[28,151056,151057,151059,151061,151063],{"class":30,"line":1808},[28,151058,31326],{"class":38},[28,151060,150208],{"class":34},[28,151062,83],{"class":42},[28,151064,2069],{"class":34},[28,151066,151067],{"class":30,"line":1820},[28,151068,2890],{"emptyLinePlaceholder":562},[28,151070,151071],{"class":30,"line":2102},[28,151072,2890],{"emptyLinePlaceholder":562},[28,151074,151075,151077,151079,151081,151083,151085,151087],{"class":30,"line":2107},[28,151076,149875],{"class":34},[28,151078,83],{"class":42},[28,151080,150279],{"class":34},[28,151082,150282],{"class":735},[28,151084,12921],{"class":34},[28,151086,1608],{"class":38},[28,151088,228],{"class":34},[28,151090,151091,151093],{"class":30,"line":2113},[28,151092,30898],{"class":38},[28,151094,151095],{"class":34},"(student.name, student.score)\n",[60,151097,151099],{"id":151098},"_1111-多态","11.11 多态",[14,151101,151102],{},"多态指不同对象响应同一个方法，表现出不同结果。",[18,151104,151106],{"className":20,"code":151105,"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,151107,151108,151116,151124,151134,151138,151142,151150,151158,151168,151172,151176,151186,151191,151195,151199,151204],{"__ignoreMap":23},[28,151109,151110,151112,151114],{"class":30,"line":31},[28,151111,15180],{"class":42},[28,151113,150758],{"class":2453},[28,151115,4227],{"class":34},[28,151117,151118,151120,151122],{"class":30,"line":77},[28,151119,31282],{"class":42},[28,151121,150840],{"class":2453},[28,151123,31288],{"class":34},[28,151125,151126,151128,151130,151132],{"class":30,"line":114},[28,151127,32929],{"class":38},[28,151129,367],{"class":34},[28,151131,150783],{"class":735},[28,151133,228],{"class":34},[28,151135,151136],{"class":30,"line":128},[28,151137,2890],{"emptyLinePlaceholder":562},[28,151139,151140],{"class":30,"line":393},[28,151141,2890],{"emptyLinePlaceholder":562},[28,151143,151144,151146,151148],{"class":30,"line":409},[28,151145,15180],{"class":42},[28,151147,150906],{"class":2453},[28,151149,4227],{"class":34},[28,151151,151152,151154,151156],{"class":30,"line":1711},[28,151153,31282],{"class":42},[28,151155,150840],{"class":2453},[28,151157,31288],{"class":34},[28,151159,151160,151162,151164,151166],{"class":30,"line":1802},[28,151161,32929],{"class":38},[28,151163,367],{"class":34},[28,151165,150929],{"class":735},[28,151167,228],{"class":34},[28,151169,151170],{"class":30,"line":1808},[28,151171,2890],{"emptyLinePlaceholder":562},[28,151173,151174],{"class":30,"line":1820},[28,151175,2890],{"emptyLinePlaceholder":562},[28,151177,151178,151180,151183],{"class":30,"line":2102},[28,151179,32426],{"class":42},[28,151181,151182],{"class":2453}," make_sound",[28,151184,151185],{"class":34},"(animal):\n",[28,151187,151188],{"class":30,"line":2107},[28,151189,151190],{"class":34},"    animal.speak()\n",[28,151192,151193],{"class":30,"line":2113},[28,151194,2890],{"emptyLinePlaceholder":562},[28,151196,151197],{"class":30,"line":2118},[28,151198,2890],{"emptyLinePlaceholder":562},[28,151200,151201],{"class":30,"line":2132},[28,151202,151203],{"class":34},"make_sound(Dog())\n",[28,151205,151206],{"class":30,"line":2137},[28,151207,151208],{"class":34},"make_sound(Cat())\n",[14,151210,151211],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[60,151213,151215],{"id":151214},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151217,151218],{},"实例属性属于对象：",[18,151220,151222],{"className":20,"code":151221,"language":22,"meta":23,"style":23},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[25,151223,151224,151232,151240],{"__ignoreMap":23},[28,151225,151226,151228,151230],{"class":30,"line":31},[28,151227,15180],{"class":42},[28,151229,8386],{"class":2453},[28,151231,4227],{"class":34},[28,151233,151234,151236,151238],{"class":30,"line":77},[28,151235,31282],{"class":42},[28,151237,31285],{"class":38},[28,151239,151004],{"class":34},[28,151241,151242,151244,151246,151248],{"class":30,"line":114},[28,151243,31326],{"class":38},[28,151245,150184],{"class":34},[28,151247,83],{"class":42},[28,151249,150189],{"class":34},[14,151251,151252],{},"类属性属于类，所有对象共享：",[18,151254,151256],{"className":20,"code":151255,"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,151257,151258,151266,151276,151280,151288,151298,151302,151306,151319,151333,151337,151344,151351],{"__ignoreMap":23},[28,151259,151260,151262,151264],{"class":30,"line":31},[28,151261,15180],{"class":42},[28,151263,8386],{"class":2453},[28,151265,4227],{"class":34},[28,151267,151268,151271,151273],{"class":30,"line":77},[28,151269,151270],{"class":34},"    school ",[28,151272,83],{"class":42},[28,151274,151275],{"class":735}," \"黑马学校\"\n",[28,151277,151278],{"class":30,"line":114},[28,151279,2890],{"emptyLinePlaceholder":562},[28,151281,151282,151284,151286],{"class":30,"line":128},[28,151283,31282],{"class":42},[28,151285,31285],{"class":38},[28,151287,151004],{"class":34},[28,151289,151290,151292,151294,151296],{"class":30,"line":393},[28,151291,31326],{"class":38},[28,151293,150184],{"class":34},[28,151295,83],{"class":42},[28,151297,150189],{"class":34},[28,151299,151300],{"class":30,"line":409},[28,151301,2890],{"emptyLinePlaceholder":562},[28,151303,151304],{"class":30,"line":1711},[28,151305,2890],{"emptyLinePlaceholder":562},[28,151307,151308,151311,151313,151315,151317],{"class":30,"line":1802},[28,151309,151310],{"class":34},"s1 ",[28,151312,83],{"class":42},[28,151314,150279],{"class":34},[28,151316,150282],{"class":735},[28,151318,228],{"class":34},[28,151320,151321,151324,151326,151328,151331],{"class":30,"line":1808},[28,151322,151323],{"class":34},"s2 ",[28,151325,83],{"class":42},[28,151327,150279],{"class":34},[28,151329,151330],{"class":735},"\"小红\"",[28,151332,228],{"class":34},[28,151334,151335],{"class":30,"line":1820},[28,151336,2890],{"emptyLinePlaceholder":562},[28,151338,151339,151341],{"class":30,"line":2102},[28,151340,30898],{"class":38},[28,151342,151343],{"class":34},"(s1.school)\n",[28,151345,151346,151348],{"class":30,"line":2107},[28,151347,30898],{"class":38},[28,151349,151350],{"class":34},"(s2.school)\n",[28,151352,151353,151355],{"class":30,"line":2113},[28,151354,30898],{"class":38},[28,151356,151357],{"class":34},"(Student.school)\n",[14,151359,151360],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[60,151362,151364],{"id":151363},"_1113-类方法和静态方法","11.13 类方法和静态方法",[605,151366,151368],{"id":151367},"_11131-类方法","11.13.1 类方法",[14,151370,151371,151372,151375,151376,28871],{},"类方法使用 ",[25,151373,151374],{},"@classmethod","，第一个参数通常是 ",[25,151377,151378],{},"cls",[18,151380,151382],{"className":20,"code":151381,"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,151383,151384,151392,151400,151404,151412,151422,151432,151436,151440],{"__ignoreMap":23},[28,151385,151386,151388,151390],{"class":30,"line":31},[28,151387,15180],{"class":42},[28,151389,8386],{"class":2453},[28,151391,4227],{"class":34},[28,151393,151394,151396,151398],{"class":30,"line":77},[28,151395,151270],{"class":34},[28,151397,83],{"class":42},[28,151399,151275],{"class":735},[28,151401,151402],{"class":30,"line":114},[28,151403,2890],{"emptyLinePlaceholder":562},[28,151405,151406,151409],{"class":30,"line":128},[28,151407,151408],{"class":2453},"    @",[28,151410,151411],{"class":38},"classmethod\n",[28,151413,151414,151416,151419],{"class":30,"line":393},[28,151415,31282],{"class":42},[28,151417,151418],{"class":2453}," get_school",[28,151420,151421],{"class":34},"(cls):\n",[28,151423,151424,151426,151429],{"class":30,"line":409},[28,151425,15238],{"class":42},[28,151427,151428],{"class":38}," cls",[28,151430,151431],{"class":34},".school\n",[28,151433,151434],{"class":30,"line":1711},[28,151435,2890],{"emptyLinePlaceholder":562},[28,151437,151438],{"class":30,"line":1802},[28,151439,2890],{"emptyLinePlaceholder":562},[28,151441,151442,151444],{"class":30,"line":1808},[28,151443,30898],{"class":38},[28,151445,151446],{"class":34},"(Student.get_school())\n",[605,151448,151450],{"id":151449},"_11132-静态方法","11.13.2 静态方法",[14,151452,151453,151454,151457],{},"静态方法使用 ",[25,151455,151456],{},"@staticmethod","，不需要访问实例和类。",[18,151459,151461],{"className":20,"code":151460,"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,151462,151463,151472,151479,151488,151499,151503,151507],{"__ignoreMap":23},[28,151464,151465,151467,151470],{"class":30,"line":31},[28,151466,15180],{"class":42},[28,151468,151469],{"class":2453}," MathUtils",[28,151471,4227],{"class":34},[28,151473,151474,151476],{"class":30,"line":77},[28,151475,151408],{"class":2453},[28,151477,151478],{"class":38},"staticmethod\n",[28,151480,151481,151483,151485],{"class":30,"line":114},[28,151482,31282],{"class":42},[28,151484,5697],{"class":2453},[28,151486,151487],{"class":34},"(a, b):\n",[28,151489,151490,151492,151494,151496],{"class":30,"line":128},[28,151491,15238],{"class":42},[28,151493,11355],{"class":34},[28,151495,1104],{"class":42},[28,151497,151498],{"class":34}," b\n",[28,151500,151501],{"class":30,"line":393},[28,151502,2890],{"emptyLinePlaceholder":562},[28,151504,151505],{"class":30,"line":409},[28,151506,2890],{"emptyLinePlaceholder":562},[28,151508,151509,151511,151514,151516,151518,151520],{"class":30,"line":1711},[28,151510,30898],{"class":38},[28,151512,151513],{"class":34},"(MathUtils.add(",[28,151515,39],{"class":38},[28,151517,12921],{"class":34},[28,151519,93],{"class":38},[28,151521,30980],{"class":34},[14,151523,151524],{},"静态方法本质上是放在类命名空间里的普通函数。",[60,151526,151528],{"id":151527},"_1114-dataclass","11.14 dataclass",[14,151530,151531,151534],{},[25,151532,151533],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[18,151536,151538],{"className":20,"code":151537,"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,151539,151540,151552,151556,151560,151565,151573,151581,151589,151597,151601,151605,151625],{"__ignoreMap":23},[28,151541,151542,151544,151547,151549],{"class":30,"line":31},[28,151543,530],{"class":42},[28,151545,151546],{"class":34}," dataclasses ",[28,151548,536],{"class":42},[28,151550,151551],{"class":34}," dataclass\n",[28,151553,151554],{"class":30,"line":77},[28,151555,2890],{"emptyLinePlaceholder":562},[28,151557,151558],{"class":30,"line":114},[28,151559,2890],{"emptyLinePlaceholder":562},[28,151561,151562],{"class":30,"line":128},[28,151563,151564],{"class":2453},"@dataclass\n",[28,151566,151567,151569,151571],{"class":30,"line":393},[28,151568,15180],{"class":42},[28,151570,8386],{"class":2453},[28,151572,4227],{"class":34},[28,151574,151575,151578],{"class":30,"line":409},[28,151576,151577],{"class":34},"    name: ",[28,151579,151580],{"class":38},"str\n",[28,151582,151583,151586],{"class":30,"line":1711},[28,151584,151585],{"class":34},"    age: ",[28,151587,151588],{"class":38},"int\n",[28,151590,151591,151594],{"class":30,"line":1802},[28,151592,151593],{"class":34},"    score: ",[28,151595,151596],{"class":38},"float\n",[28,151598,151599],{"class":30,"line":1808},[28,151600,2890],{"emptyLinePlaceholder":562},[28,151602,151603],{"class":30,"line":1820},[28,151604,2890],{"emptyLinePlaceholder":562},[28,151606,151607,151609,151611,151613,151615,151617,151619,151621,151623],{"class":30,"line":2102},[28,151608,149875],{"class":34},[28,151610,83],{"class":42},[28,151612,150279],{"class":34},[28,151614,150282],{"class":735},[28,151616,12921],{"class":34},[28,151618,1270],{"class":38},[28,151620,12921],{"class":34},[28,151622,1608],{"class":38},[28,151624,228],{"class":34},[28,151626,151627,151629],{"class":30,"line":2107},[28,151628,30898],{"class":38},[28,151630,150436],{"class":34},[14,151632,151633,151634,843,151636,151639],{},"它会自动生成 ",[25,151635,31310],{},[25,151637,151638],{},"__repr__"," 等方法。适合数据模型类。",[60,151641,151643],{"id":151642},"_1115-小案例学生类","11.15 小案例：学生类",[18,151645,151647],{"className":20,"code":151646,"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,151648,151649,151657,151666,151678,151688,151698,151708,151712,151721,151734,151738,151747,151753,151765,151777,151789,151801,151805,151809,151815,151825,151834,151844,151852,151860,151869,151873,151877,151885,151921,151925,151929,151954,151961],{"__ignoreMap":23},[28,151650,151651,151653,151655],{"class":30,"line":31},[28,151652,15180],{"class":42},[28,151654,8386],{"class":2453},[28,151656,4227],{"class":34},[28,151658,151659,151661,151663],{"class":30,"line":77},[28,151660,31282],{"class":42},[28,151662,31285],{"class":38},[28,151664,151665],{"class":34},"(self, student_id, name, age, score):\n",[28,151667,151668,151670,151673,151675],{"class":30,"line":114},[28,151669,31326],{"class":38},[28,151671,151672],{"class":34},".student_id ",[28,151674,83],{"class":42},[28,151676,151677],{"class":34}," student_id\n",[28,151679,151680,151682,151684,151686],{"class":30,"line":128},[28,151681,31326],{"class":38},[28,151683,150184],{"class":34},[28,151685,83],{"class":42},[28,151687,150189],{"class":34},[28,151689,151690,151692,151694,151696],{"class":30,"line":393},[28,151691,31326],{"class":38},[28,151693,150196],{"class":34},[28,151695,83],{"class":42},[28,151697,150201],{"class":34},[28,151699,151700,151702,151704,151706],{"class":30,"line":409},[28,151701,31326],{"class":38},[28,151703,150208],{"class":34},[28,151705,83],{"class":42},[28,151707,2069],{"class":34},[28,151709,151710],{"class":30,"line":1711},[28,151711,2890],{"emptyLinePlaceholder":562},[28,151713,151714,151716,151719],{"class":30,"line":1802},[28,151715,31282],{"class":42},[28,151717,151718],{"class":2453}," is_passed",[28,151720,31288],{"class":34},[28,151722,151723,151725,151727,151729,151731],{"class":30,"line":1808},[28,151724,15238],{"class":42},[28,151726,39350],{"class":38},[28,151728,150208],{"class":34},[28,151730,2200],{"class":42},[28,151732,151733],{"class":38}," 60\n",[28,151735,151736],{"class":30,"line":1820},[28,151737,2890],{"emptyLinePlaceholder":562},[28,151739,151740,151742,151745],{"class":30,"line":2102},[28,151741,31282],{"class":42},[28,151743,151744],{"class":2453}," to_dict",[28,151746,31288],{"class":34},[28,151748,151749,151751],{"class":30,"line":2107},[28,151750,15238],{"class":42},[28,151752,16058],{"class":34},[28,151754,151755,151758,151760,151762],{"class":30,"line":2113},[28,151756,151757],{"class":735},"            \"student_id\"",[28,151759,51914],{"class":34},[28,151761,31304],{"class":38},[28,151763,151764],{"class":34},".student_id,\n",[28,151766,151767,151770,151772,151774],{"class":30,"line":2118},[28,151768,151769],{"class":735},"            \"name\"",[28,151771,51914],{"class":34},[28,151773,31304],{"class":38},[28,151775,151776],{"class":34},".name,\n",[28,151778,151779,151782,151784,151786],{"class":30,"line":2132},[28,151780,151781],{"class":735},"            \"age\"",[28,151783,51914],{"class":34},[28,151785,31304],{"class":38},[28,151787,151788],{"class":34},".age,\n",[28,151790,151791,151794,151796,151798],{"class":30,"line":2137},[28,151792,151793],{"class":735},"            \"score\"",[28,151795,51914],{"class":34},[28,151797,31304],{"class":38},[28,151799,151800],{"class":34},".score,\n",[28,151802,151803],{"class":30,"line":2143},[28,151804,3019],{"class":34},[28,151806,151807],{"class":30,"line":2164},[28,151808,2890],{"emptyLinePlaceholder":562},[28,151810,151811,151813],{"class":30,"line":2169},[28,151812,151408],{"class":2453},[28,151814,151411],{"class":38},[28,151816,151817,151819,151822],{"class":30,"line":2183},[28,151818,31282],{"class":42},[28,151820,151821],{"class":2453}," from_dict",[28,151823,151824],{"class":34},"(cls, data):\n",[28,151826,151827,151829,151831],{"class":30,"line":2188},[28,151828,15238],{"class":42},[28,151830,151428],{"class":38},[28,151832,151833],{"class":34},"(\n",[28,151835,151836,151839,151842],{"class":30,"line":2217},[28,151837,151838],{"class":34},"            data[",[28,151840,151841],{"class":735},"\"student_id\"",[28,151843,88313],{"class":34},[28,151845,151846,151848,151850],{"class":30,"line":2222},[28,151847,151838],{"class":34},[28,151849,63156],{"class":735},[28,151851,88313],{"class":34},[28,151853,151854,151856,151858],{"class":30,"line":2239},[28,151855,151838],{"class":34},[28,151857,69601],{"class":735},[28,151859,88313],{"class":34},[28,151861,151862,151864,151867],{"class":30,"line":2244},[28,151863,151838],{"class":34},[28,151865,151866],{"class":735},"\"score\"",[28,151868,88313],{"class":34},[28,151870,151871],{"class":30,"line":2249},[28,151872,38603],{"class":34},[28,151874,151875],{"class":30,"line":2254},[28,151876,2890],{"emptyLinePlaceholder":562},[28,151878,151879,151881,151883],{"class":30,"line":2268},[28,151880,31282],{"class":42},[28,151882,150375],{"class":38},[28,151884,31288],{"class":34},[28,151886,151887,151889,151891,151893,151895,151898,151900,151903,151905,151907,151909,151911,151913,151915,151917,151919],{"class":30,"line":2273},[28,151888,15238],{"class":42},[28,151890,150384],{"class":42},[28,151892,880],{"class":735},[28,151894,149846],{"class":38},[28,151896,151897],{"class":34},".student_id",[28,151899,1565],{"class":38},[28,151901,151902],{"class":38}," {self",[28,151904,80778],{"class":34},[28,151906,1565],{"class":38},[28,151908,151902],{"class":38},[28,151910,80790],{"class":34},[28,151912,1565],{"class":38},[28,151914,151902],{"class":38},[28,151916,150256],{"class":34},[28,151918,1565],{"class":38},[28,151920,25620],{"class":735},[28,151922,151923],{"class":30,"line":3067},[28,151924,2890],{"emptyLinePlaceholder":562},[28,151926,151927],{"class":30,"line":3081},[28,151928,2890],{"emptyLinePlaceholder":562},[28,151930,151931,151933,151935,151937,151940,151942,151944,151946,151948,151950,151952],{"class":30,"line":3089},[28,151932,149875],{"class":34},[28,151934,83],{"class":42},[28,151936,150279],{"class":34},[28,151938,151939],{"class":735},"\"001\"",[28,151941,12921],{"class":34},[28,151943,150282],{"class":735},[28,151945,12921],{"class":34},[28,151947,1270],{"class":38},[28,151949,12921],{"class":34},[28,151951,1608],{"class":38},[28,151953,228],{"class":34},[28,151955,151956,151958],{"class":30,"line":3094},[28,151957,30898],{"class":38},[28,151959,151960],{"class":34},"(student.is_passed())\n",[28,151962,151963,151965],{"class":30,"line":3100},[28,151964,30898],{"class":38},[28,151966,151967],{"class":34},"(student.to_dict())\n",[14,151969,151970,101412,151973,151976],{},[25,151971,151972],{},"to_dict()",[25,151974,151975],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[60,151978,151980],{"id":151979},"_1116-易错点","11.16 易错点",[588,151982,151983,151989,151995,152000,152003,152006],{},[591,151984,151985,151986,28871],{},"类名推荐使用大驼峰，如 ",[25,151987,151988],{},"StudentManager",[591,151990,151991,151992,151994],{},"方法第一个参数必须写 ",[25,151993,31304],{},"，调用时不用传。",[591,151996,151997,151999],{},[25,151998,31310],{}," 不是普通方法，它在创建对象时自动执行。",[591,152001,152002],{},"私有属性不是绝对安全，只是约定和名称改写。",[591,152004,152005],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[591,152007,152008],{},"类中方法太多时，说明职责可能过重。",[60,152010,152012],{"id":152011},"_1117-本章练习","11.17 本章练习",[588,152014,152015,152021,152027,152032,152045],{},[591,152016,152017,152018,152020],{},"定义 ",[25,152019,149962],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[591,152022,152017,152023,152026],{},[25,152024,152025],{},"Account"," 类，实现存款、取款、查询余额。",[591,152028,152017,152029,152031],{},[25,152030,17712],{}," 类，计算圆的周长和面积。",[591,152033,152017,152034,843,152037,152040,152041,152044],{},[25,152035,152036],{},"Dog",[25,152038,152039],{},"Cat"," 类，并用同一个函数调用它们的 ",[25,152042,152043],{},"speak()"," 方法。",[591,152046,104760,152047,152049,152050,28871],{},[25,152048,151533],{}," 定义一个商品类 ",[25,152051,152052],{},"Product",[547,152054,152055],{},"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":77,"depth":77,"links":152057},[152058,152059,152060,152061,152062,152063,152065,152066,152067,152068,152069,152070,152071,152075,152076,152077,152078],{"id":149726,"depth":77,"text":149727},{"id":149909,"depth":77,"text":149910},{"id":149973,"depth":77,"text":149974},{"id":150050,"depth":77,"text":150051},{"id":150149,"depth":77,"text":150150},{"id":150313,"depth":77,"text":152064},"11.6 str",{"id":150439,"depth":77,"text":150440},{"id":150705,"depth":77,"text":150706},{"id":150819,"depth":77,"text":150820},{"id":150974,"depth":77,"text":150975},{"id":151098,"depth":77,"text":151099},{"id":151214,"depth":77,"text":151215},{"id":151363,"depth":77,"text":151364,"children":152072},[152073,152074],{"id":151367,"depth":114,"text":151368},{"id":151449,"depth":114,"text":151450},{"id":151527,"depth":77,"text":151528},{"id":151642,"depth":77,"text":151643},{"id":151979,"depth":77,"text":151980},{"id":152011,"depth":77,"text":152012},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149718,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152085,"title":152086,"body":152087,"description":559,"extension":560,"meta":155400,"navigation":562,"path":155401,"seo":155402,"stem":155403,"__hash__":155404},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152088,"toc":155376},[152089,152092,152096,152099,152102,152131,152134,152142,152146,152150,152153,152176,152179,152185,152189,153635,153638,153659,153663,153666,153678,153681,153865,153868,153994,153997,154001,154005,154141,154145,154231,154235,154317,154321,154358,154362,154551,154555,154558,154788,154792,154795,154976,154979,154983,154986,154992,154995,155021,155025,155028,155042,155045,155070,155073,155087,155090,155107,155110,155127,155130,155147,155151,155177,155181,155204,155208,155211,155213,155219,155221,155242,155245,155251,155257,155261,155264,155340,155343,155347,155373],[10,152090,152086],{"id":152091},"_12-综合案例与复习路线",[60,152093,152095],{"id":152094},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152097,152098],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152100,152101],{},"一个合格的入门综合项目最好覆盖：",[588,152103,152104,152107,152110,152113,152116,152119,152122,152125,152128],{},[591,152105,152106],{},"输入输出。",[591,152108,152109],{},"判断和循环。",[591,152111,152112],{},"函数拆分。",[591,152114,152115],{},"列表、字典等容器。",[591,152117,152118],{},"文件持久化。",[591,152120,152121],{},"异常处理。",[591,152123,152124],{},"模块拆分。",[591,152126,152127],{},"可选：面向对象。",[591,152129,152130],{},"可选：数据可视化。",[14,152132,152133],{},"本章整理两个方向：",[588,152135,152136,152139],{},[591,152137,152138],{},"学生管理系统。",[591,152140,152141],{},"销售数据统计和可视化。",[60,152143,152145],{"id":152144},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[605,152147,152149],{"id":152148},"_1221-需求","12.2.1 需求",[14,152151,152152],{},"实现一个命令行学生管理系统：",[588,152154,152155,152158,152161,152164,152167,152170,152173],{},[591,152156,152157],{},"添加学生。",[591,152159,152160],{},"删除学生。",[591,152162,152163],{},"修改学生。",[591,152165,152166],{},"查询学生。",[591,152168,152169],{},"显示所有学生。",[591,152171,152172],{},"保存到 JSON 文件。",[591,152174,152175],{},"程序启动时自动读取 JSON 文件。",[14,152177,152178],{},"学生字段：",[18,152180,152183],{"className":152181,"code":152182,"language":5675,"meta":23},[5673],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[25,152184,152182],{"__ignoreMap":23},[60,152186,152188],{"id":152187},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[18,152190,152192],{"className":20,"code":152191,"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,152193,152194,152200,152210,152214,152228,152232,152236,152245,152257,152263,152267,152273,152304,152314,152321,152332,152338,152342,152346,152356,152387,152413,152417,152421,152430,152441,152452,152463,152474,152485,152496,152507,152511,152515,152525,152537,152553,152560,152567,152571,152575,152585,152593,152600,152613,152623,152634,152638,152642,152651,152659,152665,152677,152685,152696,152700,152704,152713,152729,152733,152740,152751,152756,152760,152776,152791,152806,152810,152815,152823,152831,152839,152847,152851,152856,152867,152871,152875,152884,152899,152909,152913,152925,152936,152940,152944,152949,152953,152964,152968,152972,152981,152996,153004,153008,153020,153030,153034,153038,153053,153066,153079,153083,153096,153108,153120,153124,153128,153139,153143,153147,153156,153171,153179,153183,153195,153205,153209,153213,153218,153222,153226,153236,153242,153264,153283,153302,153321,153326,153330,153334,153343,153351,153362,153366,153370,153396,153406,153411,153415,153419,153427,153437,153441,153449,153454,153470,153474,153488,153493,153507,153512,153525,153530,153543,153548,153561,153566,153579,153590,153594,153600,153611,153615,153619,153631],{"__ignoreMap":23},[28,152195,152196,152198],{"class":30,"line":31},[28,152197,536],{"class":42},[28,152199,147485],{"class":34},[28,152201,152202,152204,152206,152208],{"class":30,"line":77},[28,152203,530],{"class":42},[28,152205,108705],{"class":34},[28,152207,536],{"class":42},[28,152209,108710],{"class":34},[28,152211,152212],{"class":30,"line":114},[28,152213,2890],{"emptyLinePlaceholder":562},[28,152215,152216,152219,152221,152223,152226],{"class":30,"line":128},[28,152217,152218],{"class":38},"DATA_FILE",[28,152220,14050],{"class":42},[28,152222,108939],{"class":34},[28,152224,152225],{"class":735},"\"students.json\"",[28,152227,228],{"class":34},[28,152229,152230],{"class":30,"line":393},[28,152231,2890],{"emptyLinePlaceholder":562},[28,152233,152234],{"class":30,"line":409},[28,152235,2890],{"emptyLinePlaceholder":562},[28,152237,152238,152240,152243],{"class":30,"line":1711},[28,152239,32426],{"class":42},[28,152241,152242],{"class":2453}," load_students",[28,152244,32432],{"class":34},[28,152246,152247,152249,152251,152254],{"class":30,"line":1802},[28,152248,3590],{"class":42},[28,152250,39407],{"class":42},[28,152252,152253],{"class":38}," DATA_FILE",[28,152255,152256],{"class":34},".exists():\n",[28,152258,152259,152261],{"class":30,"line":1808},[28,152260,15238],{"class":42},[28,152262,52315],{"class":34},[28,152264,152265],{"class":30,"line":1820},[28,152266,2890],{"emptyLinePlaceholder":562},[28,152268,152269,152271],{"class":30,"line":2102},[28,152270,126178],{"class":42},[28,152272,4227],{"class":34},[28,152274,152275,152278,152280,152282,152284,152286,152288,152290,152292,152294,152296,152298,152300,152302],{"class":30,"line":2107},[28,152276,152277],{"class":42},"        with",[28,152279,147185],{"class":38},[28,152281,367],{"class":34},[28,152283,152218],{"class":38},[28,152285,12921],{"class":34},[28,152287,147195],{"class":735},[28,152289,12921],{"class":34},[28,152291,147200],{"class":5704},[28,152293,83],{"class":42},[28,152295,147205],{"class":735},[28,152297,14200],{"class":34},[28,152299,542],{"class":42},[28,152301,148547],{"class":5704},[28,152303,4227],{"class":34},[28,152305,152306,152308,152310,152312],{"class":30,"line":2113},[28,152307,16218],{"class":42},[28,152309,148558],{"class":34},[28,152311,45831],{"class":5704},[28,152313,228],{"class":34},[28,152315,152316,152318],{"class":30,"line":2118},[28,152317,126206],{"class":42},[28,152319,152320],{"class":34}," json.JSONDecodeError:\n",[28,152322,152323,152325,152327,152330],{"class":30,"line":2132},[28,152324,32929],{"class":38},[28,152326,367],{"class":34},[28,152328,152329],{"class":735},"\"数据文件格式错误，已使用空数据启动\"",[28,152331,228],{"class":34},[28,152333,152334,152336],{"class":30,"line":2137},[28,152335,15238],{"class":42},[28,152337,52315],{"class":34},[28,152339,152340],{"class":30,"line":2143},[28,152341,2890],{"emptyLinePlaceholder":562},[28,152343,152344],{"class":30,"line":2164},[28,152345,2890],{"emptyLinePlaceholder":562},[28,152347,152348,152350,152353],{"class":30,"line":2169},[28,152349,32426],{"class":42},[28,152351,152352],{"class":2453}," save_students",[28,152354,152355],{"class":34},"(students):\n",[28,152357,152358,152360,152362,152364,152366,152368,152371,152373,152375,152377,152379,152381,152383,152385],{"class":30,"line":2183},[28,152359,34655],{"class":42},[28,152361,147185],{"class":38},[28,152363,367],{"class":34},[28,152365,152218],{"class":38},[28,152367,12921],{"class":34},[28,152369,152370],{"class":735},"\"w\"",[28,152372,12921],{"class":34},[28,152374,147200],{"class":5704},[28,152376,83],{"class":42},[28,152378,147205],{"class":735},[28,152380,14200],{"class":34},[28,152382,542],{"class":42},[28,152384,148547],{"class":5704},[28,152386,4227],{"class":34},[28,152388,152389,152392,152394,152396,152398,152400,152402,152404,152407,152409,152411],{"class":30,"line":2188},[28,152390,152391],{"class":34},"        json.dump(students, ",[28,152393,45831],{"class":5704},[28,152395,12921],{"class":34},[28,152397,147531],{"class":5704},[28,152399,83],{"class":42},[28,152401,34464],{"class":38},[28,152403,12921],{"class":34},[28,152405,152406],{"class":5704},"indent",[28,152408,83],{"class":42},[28,152410,93],{"class":38},[28,152412,228],{"class":34},[28,152414,152415],{"class":30,"line":2217},[28,152416,2890],{"emptyLinePlaceholder":562},[28,152418,152419],{"class":30,"line":2222},[28,152420,2890],{"emptyLinePlaceholder":562},[28,152422,152423,152425,152428],{"class":30,"line":2239},[28,152424,32426],{"class":42},[28,152426,152427],{"class":2453}," show_menu",[28,152429,32432],{"class":34},[28,152431,152432,152434,152436,152439],{"class":30,"line":2244},[28,152433,31780],{"class":38},[28,152435,367],{"class":34},[28,152437,152438],{"class":735},"\"====== 学生管理系统 ======\"",[28,152440,228],{"class":34},[28,152442,152443,152445,152447,152450],{"class":30,"line":2249},[28,152444,31780],{"class":38},[28,152446,367],{"class":34},[28,152448,152449],{"class":735},"\"1. 添加学生\"",[28,152451,228],{"class":34},[28,152453,152454,152456,152458,152461],{"class":30,"line":2254},[28,152455,31780],{"class":38},[28,152457,367],{"class":34},[28,152459,152460],{"class":735},"\"2. 删除学生\"",[28,152462,228],{"class":34},[28,152464,152465,152467,152469,152472],{"class":30,"line":2268},[28,152466,31780],{"class":38},[28,152468,367],{"class":34},[28,152470,152471],{"class":735},"\"3. 修改学生\"",[28,152473,228],{"class":34},[28,152475,152476,152478,152480,152483],{"class":30,"line":2273},[28,152477,31780],{"class":38},[28,152479,367],{"class":34},[28,152481,152482],{"class":735},"\"4. 查询学生\"",[28,152484,228],{"class":34},[28,152486,152487,152489,152491,152494],{"class":30,"line":3067},[28,152488,31780],{"class":38},[28,152490,367],{"class":34},[28,152492,152493],{"class":735},"\"5. 显示所有学生\"",[28,152495,228],{"class":34},[28,152497,152498,152500,152502,152505],{"class":30,"line":3081},[28,152499,31780],{"class":38},[28,152501,367],{"class":34},[28,152503,152504],{"class":735},"\"0. 退出系统\"",[28,152506,228],{"class":34},[28,152508,152509],{"class":30,"line":3089},[28,152510,2890],{"emptyLinePlaceholder":562},[28,152512,152513],{"class":30,"line":3094},[28,152514,2890],{"emptyLinePlaceholder":562},[28,152516,152517,152519,152522],{"class":30,"line":3100},[28,152518,32426],{"class":42},[28,152520,152521],{"class":2453}," find_student",[28,152523,152524],{"class":34},"(students, student_id):\n",[28,152526,152527,152529,152532,152534],{"class":30,"line":3106},[28,152528,377],{"class":42},[28,152530,152531],{"class":34}," student ",[28,152533,55],{"class":42},[28,152535,152536],{"class":34}," students:\n",[28,152538,152539,152541,152544,152546,152548,152550],{"class":30,"line":3111},[28,152540,2987],{"class":42},[28,152542,152543],{"class":34}," student[",[28,152545,151841],{"class":735},[28,152547,4931],{"class":34},[28,152549,3439],{"class":42},[28,152551,152552],{"class":34}," student_id:\n",[28,152554,152555,152557],{"class":30,"line":8436},[28,152556,16218],{"class":42},[28,152558,152559],{"class":34}," student\n",[28,152561,152562,152564],{"class":30,"line":8460},[28,152563,4578],{"class":42},[28,152565,152566],{"class":38}," None\n",[28,152568,152569],{"class":30,"line":8465},[28,152570,2890],{"emptyLinePlaceholder":562},[28,152572,152573],{"class":30,"line":8471},[28,152574,2890],{"emptyLinePlaceholder":562},[28,152576,152577,152579,152582],{"class":30,"line":8498},[28,152578,32426],{"class":42},[28,152580,152581],{"class":2453}," input_int",[28,152583,152584],{"class":34},"(prompt):\n",[28,152586,152587,152589,152591],{"class":30,"line":8503},[28,152588,2741],{"class":42},[28,152590,95763],{"class":38},[28,152592,4227],{"class":34},[28,152594,152595,152598],{"class":30,"line":8509},[28,152596,152597],{"class":42},"        try",[28,152599,4227],{"class":34},[28,152601,152602,152604,152606,152608,152610],{"class":30,"line":8521},[28,152603,16218],{"class":42},[28,152605,2872],{"class":38},[28,152607,367],{"class":34},[28,152609,54298],{"class":38},[28,152611,152612],{"class":34},"(prompt))\n",[28,152614,152615,152618,152621],{"class":30,"line":8533},[28,152616,152617],{"class":42},"        except",[28,152619,152620],{"class":38}," ValueError",[28,152622,4227],{"class":34},[28,152624,152625,152627,152629,152632],{"class":30,"line":8545},[28,152626,35127],{"class":38},[28,152628,367],{"class":34},[28,152630,152631],{"class":735},"\"请输入整数\"",[28,152633,228],{"class":34},[28,152635,152636],{"class":30,"line":10202},[28,152637,2890],{"emptyLinePlaceholder":562},[28,152639,152640],{"class":30,"line":10227},[28,152641,2890],{"emptyLinePlaceholder":562},[28,152643,152644,152646,152649],{"class":30,"line":10250},[28,152645,32426],{"class":42},[28,152647,152648],{"class":2453}," input_float",[28,152650,152584],{"class":34},[28,152652,152653,152655,152657],{"class":30,"line":10274},[28,152654,2741],{"class":42},[28,152656,95763],{"class":38},[28,152658,4227],{"class":34},[28,152660,152661,152663],{"class":30,"line":10279},[28,152662,152597],{"class":42},[28,152664,4227],{"class":34},[28,152666,152667,152669,152671,152673,152675],{"class":30,"line":10284},[28,152668,16218],{"class":42},[28,152670,110191],{"class":38},[28,152672,367],{"class":34},[28,152674,54298],{"class":38},[28,152676,152612],{"class":34},[28,152678,152679,152681,152683],{"class":30,"line":10289},[28,152680,152617],{"class":42},[28,152682,152620],{"class":38},[28,152684,4227],{"class":34},[28,152686,152687,152689,152691,152694],{"class":30,"line":10298},[28,152688,35127],{"class":38},[28,152690,367],{"class":34},[28,152692,152693],{"class":735},"\"请输入数字\"",[28,152695,228],{"class":34},[28,152697,152698],{"class":30,"line":10303},[28,152699,2890],{"emptyLinePlaceholder":562},[28,152701,152702],{"class":30,"line":10309},[28,152703,2890],{"emptyLinePlaceholder":562},[28,152705,152706,152708,152711],{"class":30,"line":10330},[28,152707,32426],{"class":42},[28,152709,152710],{"class":2453}," add_student",[28,152712,152355],{"class":34},[28,152714,152715,152718,152720,152722,152724,152727],{"class":30,"line":10336},[28,152716,152717],{"class":34},"    student_id ",[28,152719,83],{"class":42},[28,152721,61082],{"class":38},[28,152723,367],{"class":34},[28,152725,152726],{"class":735},"\"请输入学号:\"",[28,152728,228],{"class":34},[28,152730,152731],{"class":30,"line":10350},[28,152732,2890],{"emptyLinePlaceholder":562},[28,152734,152735,152737],{"class":30,"line":10356},[28,152736,3590],{"class":42},[28,152738,152739],{"class":34}," find_student(students, student_id):\n",[28,152741,152742,152744,152746,152749],{"class":30,"line":10383},[28,152743,32929],{"class":38},[28,152745,367],{"class":34},[28,152747,152748],{"class":735},"\"学号已存在\"",[28,152750,228],{"class":34},[28,152752,152753],{"class":30,"line":10392},[28,152754,152755],{"class":42},"        return\n",[28,152757,152758],{"class":30,"line":10398},[28,152759,2890],{"emptyLinePlaceholder":562},[28,152761,152762,152765,152767,152769,152771,152774],{"class":30,"line":10406},[28,152763,152764],{"class":34},"    name ",[28,152766,83],{"class":42},[28,152768,61082],{"class":38},[28,152770,367],{"class":34},[28,152772,152773],{"class":735},"\"请输入姓名:\"",[28,152775,228],{"class":34},[28,152777,152778,152781,152783,152786,152789],{"class":30,"line":10411},[28,152779,152780],{"class":34},"    age ",[28,152782,83],{"class":42},[28,152784,152785],{"class":34}," input_int(",[28,152787,152788],{"class":735},"\"请输入年龄:\"",[28,152790,228],{"class":34},[28,152792,152793,152796,152798,152801,152804],{"class":30,"line":17090},[28,152794,152795],{"class":34},"    score ",[28,152797,83],{"class":42},[28,152799,152800],{"class":34}," input_float(",[28,152802,152803],{"class":735},"\"请输入成绩:\"",[28,152805,228],{"class":34},[28,152807,152808],{"class":30,"line":17096},[28,152809,2890],{"emptyLinePlaceholder":562},[28,152811,152812],{"class":30,"line":17119},[28,152813,152814],{"class":34},"    students.append({\n",[28,152816,152817,152820],{"class":30,"line":17125},[28,152818,152819],{"class":735},"        \"student_id\"",[28,152821,152822],{"class":34},": student_id,\n",[28,152824,152825,152828],{"class":30,"line":17148},[28,152826,152827],{"class":735},"        \"name\"",[28,152829,152830],{"class":34},": name,\n",[28,152832,152833,152836],{"class":30,"line":17162},[28,152834,152835],{"class":735},"        \"age\"",[28,152837,152838],{"class":34},": age,\n",[28,152840,152841,152844],{"class":30,"line":17182},[28,152842,152843],{"class":735},"        \"score\"",[28,152845,152846],{"class":34},": score,\n",[28,152848,152849],{"class":30,"line":17188},[28,152850,33938],{"class":34},[28,152852,152853],{"class":30,"line":17199},[28,152854,152855],{"class":34},"    save_students(students)\n",[28,152857,152858,152860,152862,152865],{"class":30,"line":17222},[28,152859,31780],{"class":38},[28,152861,367],{"class":34},[28,152863,152864],{"class":735},"\"添加成功\"",[28,152866,228],{"class":34},[28,152868,152869],{"class":30,"line":17244},[28,152870,2890],{"emptyLinePlaceholder":562},[28,152872,152873],{"class":30,"line":17249},[28,152874,2890],{"emptyLinePlaceholder":562},[28,152876,152877,152879,152882],{"class":30,"line":17255},[28,152878,32426],{"class":42},[28,152880,152881],{"class":2453}," delete_student",[28,152883,152355],{"class":34},[28,152885,152886,152888,152890,152892,152894,152897],{"class":30,"line":17269},[28,152887,152717],{"class":34},[28,152889,83],{"class":42},[28,152891,61082],{"class":38},[28,152893,367],{"class":34},[28,152895,152896],{"class":735},"\"请输入要删除的学号:\"",[28,152898,228],{"class":34},[28,152900,152901,152904,152906],{"class":30,"line":17282},[28,152902,152903],{"class":34},"    student ",[28,152905,83],{"class":42},[28,152907,152908],{"class":34}," find_student(students, student_id)\n",[28,152910,152911],{"class":30,"line":17287},[28,152912,2890],{"emptyLinePlaceholder":562},[28,152914,152915,152917,152919,152921,152923],{"class":30,"line":17301},[28,152916,3590],{"class":42},[28,152918,152531],{"class":34},[28,152920,39404],{"class":42},[28,152922,39410],{"class":38},[28,152924,4227],{"class":34},[28,152926,152927,152929,152931,152934],{"class":30,"line":17306},[28,152928,32929],{"class":38},[28,152930,367],{"class":34},[28,152932,152933],{"class":735},"\"学生不存在\"",[28,152935,228],{"class":34},[28,152937,152938],{"class":30,"line":17312},[28,152939,152755],{"class":42},[28,152941,152942],{"class":30,"line":17317},[28,152943,2890],{"emptyLinePlaceholder":562},[28,152945,152946],{"class":30,"line":17331},[28,152947,152948],{"class":34},"    students.remove(student)\n",[28,152950,152951],{"class":30,"line":17336},[28,152952,152855],{"class":34},[28,152954,152955,152957,152959,152962],{"class":30,"line":17341},[28,152956,31780],{"class":38},[28,152958,367],{"class":34},[28,152960,152961],{"class":735},"\"删除成功\"",[28,152963,228],{"class":34},[28,152965,152966],{"class":30,"line":17355},[28,152967,2890],{"emptyLinePlaceholder":562},[28,152969,152970],{"class":30,"line":17367},[28,152971,2890],{"emptyLinePlaceholder":562},[28,152973,152974,152976,152979],{"class":30,"line":17372},[28,152975,32426],{"class":42},[28,152977,152978],{"class":2453}," update_student",[28,152980,152355],{"class":34},[28,152982,152983,152985,152987,152989,152991,152994],{"class":30,"line":17385},[28,152984,152717],{"class":34},[28,152986,83],{"class":42},[28,152988,61082],{"class":38},[28,152990,367],{"class":34},[28,152992,152993],{"class":735},"\"请输入要修改的学号:\"",[28,152995,228],{"class":34},[28,152997,152998,153000,153002],{"class":30,"line":17390},[28,152999,152903],{"class":34},[28,153001,83],{"class":42},[28,153003,152908],{"class":34},[28,153005,153006],{"class":30,"line":17395},[28,153007,2890],{"emptyLinePlaceholder":562},[28,153009,153010,153012,153014,153016,153018],{"class":30,"line":17400},[28,153011,3590],{"class":42},[28,153013,152531],{"class":34},[28,153015,39404],{"class":42},[28,153017,39410],{"class":38},[28,153019,4227],{"class":34},[28,153021,153022,153024,153026,153028],{"class":30,"line":17413},[28,153023,32929],{"class":38},[28,153025,367],{"class":34},[28,153027,152933],{"class":735},[28,153029,228],{"class":34},[28,153031,153032],{"class":30,"line":17418},[28,153033,152755],{"class":42},[28,153035,153036],{"class":30,"line":33111},[28,153037,2890],{"emptyLinePlaceholder":562},[28,153039,153040,153042,153044,153046,153048,153051],{"class":30,"line":33117},[28,153041,152764],{"class":34},[28,153043,83],{"class":42},[28,153045,61082],{"class":38},[28,153047,367],{"class":34},[28,153049,153050],{"class":735},"\"请输入新姓名:\"",[28,153052,228],{"class":34},[28,153054,153055,153057,153059,153061,153064],{"class":30,"line":33123},[28,153056,152780],{"class":34},[28,153058,83],{"class":42},[28,153060,152785],{"class":34},[28,153062,153063],{"class":735},"\"请输入新年龄:\"",[28,153065,228],{"class":34},[28,153067,153068,153070,153072,153074,153077],{"class":30,"line":33129},[28,153069,152795],{"class":34},[28,153071,83],{"class":42},[28,153073,152800],{"class":34},[28,153075,153076],{"class":735},"\"请输入新成绩:\"",[28,153078,228],{"class":34},[28,153080,153081],{"class":30,"line":33135},[28,153082,2890],{"emptyLinePlaceholder":562},[28,153084,153085,153088,153090,153092,153094],{"class":30,"line":33146},[28,153086,153087],{"class":34},"    student[",[28,153089,63156],{"class":735},[28,153091,4931],{"class":34},[28,153093,83],{"class":42},[28,153095,150189],{"class":34},[28,153097,153098,153100,153102,153104,153106],{"class":30,"line":33152},[28,153099,153087],{"class":34},[28,153101,69601],{"class":735},[28,153103,4931],{"class":34},[28,153105,83],{"class":42},[28,153107,150201],{"class":34},[28,153109,153110,153112,153114,153116,153118],{"class":30,"line":33172},[28,153111,153087],{"class":34},[28,153113,151866],{"class":735},[28,153115,4931],{"class":34},[28,153117,83],{"class":42},[28,153119,2069],{"class":34},[28,153121,153122],{"class":30,"line":33178},[28,153123,2890],{"emptyLinePlaceholder":562},[28,153125,153126],{"class":30,"line":33189},[28,153127,152855],{"class":34},[28,153129,153130,153132,153134,153137],{"class":30,"line":33195},[28,153131,31780],{"class":38},[28,153133,367],{"class":34},[28,153135,153136],{"class":735},"\"修改成功\"",[28,153138,228],{"class":34},[28,153140,153141],{"class":30,"line":33201},[28,153142,2890],{"emptyLinePlaceholder":562},[28,153144,153145],{"class":30,"line":33207},[28,153146,2890],{"emptyLinePlaceholder":562},[28,153148,153149,153151,153154],{"class":30,"line":33213},[28,153150,32426],{"class":42},[28,153152,153153],{"class":2453}," query_student",[28,153155,152355],{"class":34},[28,153157,153158,153160,153162,153164,153166,153169],{"class":30,"line":33219},[28,153159,152717],{"class":34},[28,153161,83],{"class":42},[28,153163,61082],{"class":38},[28,153165,367],{"class":34},[28,153167,153168],{"class":735},"\"请输入要查询的学号:\"",[28,153170,228],{"class":34},[28,153172,153173,153175,153177],{"class":30,"line":33225},[28,153174,152903],{"class":34},[28,153176,83],{"class":42},[28,153178,152908],{"class":34},[28,153180,153181],{"class":30,"line":33231},[28,153182,2890],{"emptyLinePlaceholder":562},[28,153184,153185,153187,153189,153191,153193],{"class":30,"line":33251},[28,153186,3590],{"class":42},[28,153188,152531],{"class":34},[28,153190,39404],{"class":42},[28,153192,39410],{"class":38},[28,153194,4227],{"class":34},[28,153196,153197,153199,153201,153203],{"class":30,"line":33257},[28,153198,32929],{"class":38},[28,153200,367],{"class":34},[28,153202,152933],{"class":735},[28,153204,228],{"class":34},[28,153206,153207],{"class":30,"line":33273},[28,153208,152755],{"class":42},[28,153210,153211],{"class":30,"line":33279},[28,153212,2890],{"emptyLinePlaceholder":562},[28,153214,153215],{"class":30,"line":33293},[28,153216,153217],{"class":34},"    print_student(student)\n",[28,153219,153220],{"class":30,"line":33299},[28,153221,2890],{"emptyLinePlaceholder":562},[28,153223,153224],{"class":30,"line":33314},[28,153225,2890],{"emptyLinePlaceholder":562},[28,153227,153228,153230,153233],{"class":30,"line":33320},[28,153229,32426],{"class":42},[28,153231,153232],{"class":2453}," print_student",[28,153234,153235],{"class":34},"(student):\n",[28,153237,153238,153240],{"class":30,"line":33329},[28,153239,31780],{"class":38},[28,153241,151833],{"class":34},[28,153243,153244,153247,153249,153251,153254,153257,153259,153262],{"class":30,"line":33335},[28,153245,153246],{"class":42},"        f",[28,153248,880],{"class":735},[28,153250,1515],{"class":38},[28,153252,153253],{"class":34},"student[",[28,153255,153256],{"class":735},"'student_id'",[28,153258,1559],{"class":34},[28,153260,153261],{"class":38},"}\\t",[28,153263,25620],{"class":735},[28,153265,153266,153268,153270,153272,153274,153277,153279,153281],{"class":30,"line":33344},[28,153267,153246],{"class":42},[28,153269,880],{"class":735},[28,153271,1515],{"class":38},[28,153273,153253],{"class":34},[28,153275,153276],{"class":735},"'name'",[28,153278,1559],{"class":34},[28,153280,153261],{"class":38},[28,153282,25620],{"class":735},[28,153284,153285,153287,153289,153291,153293,153296,153298,153300],{"class":30,"line":33350},[28,153286,153246],{"class":42},[28,153288,880],{"class":735},[28,153290,1515],{"class":38},[28,153292,153253],{"class":34},[28,153294,153295],{"class":735},"'age'",[28,153297,1559],{"class":34},[28,153299,153261],{"class":38},[28,153301,25620],{"class":735},[28,153303,153304,153306,153308,153310,153312,153315,153317,153319],{"class":30,"line":33356},[28,153305,153246],{"class":42},[28,153307,880],{"class":735},[28,153309,1515],{"class":38},[28,153311,153253],{"class":34},[28,153313,153314],{"class":735},"'score'",[28,153316,1559],{"class":34},[28,153318,1565],{"class":38},[28,153320,25620],{"class":735},[28,153322,153323],{"class":30,"line":33365},[28,153324,153325],{"class":34},"    )\n",[28,153327,153328],{"class":30,"line":33371},[28,153329,2890],{"emptyLinePlaceholder":562},[28,153331,153332],{"class":30,"line":33382},[28,153333,2890],{"emptyLinePlaceholder":562},[28,153335,153336,153338,153341],{"class":30,"line":33388},[28,153337,32426],{"class":42},[28,153339,153340],{"class":2453}," show_all_students",[28,153342,152355],{"class":34},[28,153344,153345,153347,153349],{"class":30,"line":33407},[28,153346,3590],{"class":42},[28,153348,39407],{"class":42},[28,153350,152536],{"class":34},[28,153352,153353,153355,153357,153360],{"class":30,"line":33413},[28,153354,32929],{"class":38},[28,153356,367],{"class":34},[28,153358,153359],{"class":735},"\"暂无学生\"",[28,153361,228],{"class":34},[28,153363,153364],{"class":30,"line":33424},[28,153365,152755],{"class":42},[28,153367,153368],{"class":30,"line":33430},[28,153369,2890],{"emptyLinePlaceholder":562},[28,153371,153372,153374,153376,153379,153381,153384,153386,153389,153391,153394],{"class":30,"line":33450},[28,153373,31780],{"class":38},[28,153375,367],{"class":34},[28,153377,153378],{"class":735},"\"学号",[28,153380,1721],{"class":38},[28,153382,153383],{"class":735},"姓名",[28,153385,1721],{"class":38},[28,153387,153388],{"class":735},"年龄",[28,153390,1721],{"class":38},[28,153392,153393],{"class":735},"成绩\"",[28,153395,228],{"class":34},[28,153397,153398,153400,153402,153404],{"class":30,"line":33466},[28,153399,377],{"class":42},[28,153401,152531],{"class":34},[28,153403,55],{"class":42},[28,153405,152536],{"class":34},[28,153407,153408],{"class":30,"line":33472},[28,153409,153410],{"class":34},"        print_student(student)\n",[28,153412,153413],{"class":30,"line":33486},[28,153414,2890],{"emptyLinePlaceholder":562},[28,153416,153417],{"class":30,"line":33492},[28,153418,2890],{"emptyLinePlaceholder":562},[28,153420,153421,153423,153425],{"class":30,"line":33498},[28,153422,32426],{"class":42},[28,153424,2463],{"class":2453},[28,153426,32432],{"class":34},[28,153428,153429,153432,153434],{"class":30,"line":33509},[28,153430,153431],{"class":34},"    students ",[28,153433,83],{"class":42},[28,153435,153436],{"class":34}," load_students()\n",[28,153438,153439],{"class":30,"line":33515},[28,153440,2890],{"emptyLinePlaceholder":562},[28,153442,153443,153445,153447],{"class":30,"line":33521},[28,153444,2741],{"class":42},[28,153446,95763],{"class":38},[28,153448,4227],{"class":34},[28,153450,153451],{"class":30,"line":33531},[28,153452,153453],{"class":34},"        show_menu()\n",[28,153455,153456,153459,153461,153463,153465,153468],{"class":30,"line":33537},[28,153457,153458],{"class":34},"        choice ",[28,153460,83],{"class":42},[28,153462,61082],{"class":38},[28,153464,367],{"class":34},[28,153466,153467],{"class":735},"\"请输入操作:\"",[28,153469,228],{"class":34},[28,153471,153472],{"class":30,"line":33548},[28,153473,2890],{"emptyLinePlaceholder":562},[28,153475,153476,153478,153481,153483,153486],{"class":30,"line":33554},[28,153477,2987],{"class":42},[28,153479,153480],{"class":34}," choice ",[28,153482,3439],{"class":42},[28,153484,153485],{"class":735}," \"1\"",[28,153487,4227],{"class":34},[28,153489,153490],{"class":30,"line":33564},[28,153491,153492],{"class":34},"            add_student(students)\n",[28,153494,153495,153498,153500,153502,153505],{"class":30,"line":33569},[28,153496,153497],{"class":42},"        elif",[28,153499,153480],{"class":34},[28,153501,3439],{"class":42},[28,153503,153504],{"class":735}," \"2\"",[28,153506,4227],{"class":34},[28,153508,153509],{"class":30,"line":33575},[28,153510,153511],{"class":34},"            delete_student(students)\n",[28,153513,153514,153516,153518,153520,153523],{"class":30,"line":33624},[28,153515,153497],{"class":42},[28,153517,153480],{"class":34},[28,153519,3439],{"class":42},[28,153521,153522],{"class":735}," \"3\"",[28,153524,4227],{"class":34},[28,153526,153527],{"class":30,"line":33671},[28,153528,153529],{"class":34},"            update_student(students)\n",[28,153531,153532,153534,153536,153538,153541],{"class":30,"line":33676},[28,153533,153497],{"class":42},[28,153535,153480],{"class":34},[28,153537,3439],{"class":42},[28,153539,153540],{"class":735}," \"4\"",[28,153542,4227],{"class":34},[28,153544,153545],{"class":30,"line":33682},[28,153546,153547],{"class":34},"            query_student(students)\n",[28,153549,153550,153552,153554,153556,153559],{"class":30,"line":33701},[28,153551,153497],{"class":42},[28,153553,153480],{"class":34},[28,153555,3439],{"class":42},[28,153557,153558],{"class":735}," \"5\"",[28,153560,4227],{"class":34},[28,153562,153563],{"class":30,"line":33707},[28,153564,153565],{"class":34},"            show_all_students(students)\n",[28,153567,153568,153570,153572,153574,153577],{"class":30,"line":33726},[28,153569,153497],{"class":42},[28,153571,153480],{"class":34},[28,153573,3439],{"class":42},[28,153575,153576],{"class":735}," \"0\"",[28,153578,4227],{"class":34},[28,153580,153581,153583,153585,153588],{"class":30,"line":33732},[28,153582,35127],{"class":38},[28,153584,367],{"class":34},[28,153586,153587],{"class":735},"\"退出系统\"",[28,153589,228],{"class":34},[28,153591,153592],{"class":30,"line":33738},[28,153593,115492],{"class":42},[28,153595,153596,153598],{"class":30,"line":33748},[28,153597,3024],{"class":42},[28,153599,4227],{"class":34},[28,153601,153602,153604,153606,153609],{"class":30,"line":33753},[28,153603,35127],{"class":38},[28,153605,367],{"class":34},[28,153607,153608],{"class":735},"\"输入错误\"",[28,153610,228],{"class":34},[28,153612,153613],{"class":30,"line":33759},[28,153614,2890],{"emptyLinePlaceholder":562},[28,153616,153617],{"class":30,"line":33775},[28,153618,2890],{"emptyLinePlaceholder":562},[28,153620,153621,153623,153625,153627,153629],{"class":30,"line":33820},[28,153622,2021],{"class":42},[28,153624,31701],{"class":38},[28,153626,101953],{"class":42},[28,153628,101956],{"class":735},[28,153630,4227],{"class":34},[28,153632,153633],{"class":30,"line":33826},[28,153634,101963],{"class":34},[14,153636,153637],{},"这个项目串联了：",[588,153639,153640,153643,153646,153649,153652,153654],{},[591,153641,153642],{},"菜单循环。",[591,153644,153645],{},"函数封装。",[591,153647,153648],{},"列表字典。",[591,153650,153651],{},"JSON 读写。",[591,153653,152121],{},[591,153655,153656,28871],{},[25,153657,153658],{},"if __name__ == \"__main__\"",[60,153660,153662],{"id":153661},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153664,153665],{},"可以进一步拆成两个类：",[588,153667,153668,153673],{},[591,153669,153670,153672],{},[25,153671,149962],{},"：表示单个学生。",[591,153674,153675,153677],{},[25,153676,151988],{},"：负责学生增删改查和文件保存。",[14,153679,153680],{},"示意代码：",[18,153682,153684],{"className":20,"code":153683,"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,153685,153686,153696,153700,153704,153708,153716,153723,153729,153735,153741,153745,153753,153759,153769,153779,153789,153799,153803,153807,153813,153821,153829,153837,153845,153853,153861],{"__ignoreMap":23},[28,153687,153688,153690,153692,153694],{"class":30,"line":31},[28,153689,530],{"class":42},[28,153691,151546],{"class":34},[28,153693,536],{"class":42},[28,153695,151551],{"class":34},[28,153697,153698],{"class":30,"line":77},[28,153699,2890],{"emptyLinePlaceholder":562},[28,153701,153702],{"class":30,"line":114},[28,153703,2890],{"emptyLinePlaceholder":562},[28,153705,153706],{"class":30,"line":128},[28,153707,151564],{"class":2453},[28,153709,153710,153712,153714],{"class":30,"line":393},[28,153711,15180],{"class":42},[28,153713,8386],{"class":2453},[28,153715,4227],{"class":34},[28,153717,153718,153721],{"class":30,"line":409},[28,153719,153720],{"class":34},"    student_id: ",[28,153722,151580],{"class":38},[28,153724,153725,153727],{"class":30,"line":1711},[28,153726,151577],{"class":34},[28,153728,151580],{"class":38},[28,153730,153731,153733],{"class":30,"line":1802},[28,153732,151585],{"class":34},[28,153734,151588],{"class":38},[28,153736,153737,153739],{"class":30,"line":1808},[28,153738,151593],{"class":34},[28,153740,151596],{"class":38},[28,153742,153743],{"class":30,"line":1820},[28,153744,2890],{"emptyLinePlaceholder":562},[28,153746,153747,153749,153751],{"class":30,"line":2102},[28,153748,31282],{"class":42},[28,153750,151744],{"class":2453},[28,153752,31288],{"class":34},[28,153754,153755,153757],{"class":30,"line":2107},[28,153756,15238],{"class":42},[28,153758,16058],{"class":34},[28,153760,153761,153763,153765,153767],{"class":30,"line":2113},[28,153762,151757],{"class":735},[28,153764,51914],{"class":34},[28,153766,31304],{"class":38},[28,153768,151764],{"class":34},[28,153770,153771,153773,153775,153777],{"class":30,"line":2118},[28,153772,151769],{"class":735},[28,153774,51914],{"class":34},[28,153776,31304],{"class":38},[28,153778,151776],{"class":34},[28,153780,153781,153783,153785,153787],{"class":30,"line":2132},[28,153782,151781],{"class":735},[28,153784,51914],{"class":34},[28,153786,31304],{"class":38},[28,153788,151788],{"class":34},[28,153790,153791,153793,153795,153797],{"class":30,"line":2137},[28,153792,151793],{"class":735},[28,153794,51914],{"class":34},[28,153796,31304],{"class":38},[28,153798,151800],{"class":34},[28,153800,153801],{"class":30,"line":2143},[28,153802,3019],{"class":34},[28,153804,153805],{"class":30,"line":2164},[28,153806,2890],{"emptyLinePlaceholder":562},[28,153808,153809,153811],{"class":30,"line":2169},[28,153810,151408],{"class":2453},[28,153812,151411],{"class":38},[28,153814,153815,153817,153819],{"class":30,"line":2183},[28,153816,31282],{"class":42},[28,153818,151821],{"class":2453},[28,153820,151824],{"class":34},[28,153822,153823,153825,153827],{"class":30,"line":2188},[28,153824,15238],{"class":42},[28,153826,151428],{"class":38},[28,153828,151833],{"class":34},[28,153830,153831,153833,153835],{"class":30,"line":2217},[28,153832,151838],{"class":34},[28,153834,151841],{"class":735},[28,153836,88313],{"class":34},[28,153838,153839,153841,153843],{"class":30,"line":2222},[28,153840,151838],{"class":34},[28,153842,63156],{"class":735},[28,153844,88313],{"class":34},[28,153846,153847,153849,153851],{"class":30,"line":2239},[28,153848,151838],{"class":34},[28,153850,69601],{"class":735},[28,153852,88313],{"class":34},[28,153854,153855,153857,153859],{"class":30,"line":2244},[28,153856,151838],{"class":34},[28,153858,151866],{"class":735},[28,153860,88313],{"class":34},[28,153862,153863],{"class":30,"line":2249},[28,153864,38603],{"class":34},[14,153866,153867],{},"管理器示意：",[18,153869,153871],{"className":20,"code":153870,"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,153872,153873,153882,153890,153901,153905,153915,153928,153939,153946,153952,153956,153965,153974,153980,153987],{"__ignoreMap":23},[28,153874,153875,153877,153880],{"class":30,"line":31},[28,153876,15180],{"class":42},[28,153878,153879],{"class":2453}," StudentManager",[28,153881,4227],{"class":34},[28,153883,153884,153886,153888],{"class":30,"line":77},[28,153885,31282],{"class":42},[28,153887,31285],{"class":38},[28,153889,31288],{"class":34},[28,153891,153892,153894,153897,153899],{"class":30,"line":114},[28,153893,31326],{"class":38},[28,153895,153896],{"class":34},".students ",[28,153898,83],{"class":42},[28,153900,52315],{"class":34},[28,153902,153903],{"class":30,"line":128},[28,153904,2890],{"emptyLinePlaceholder":562},[28,153906,153907,153909,153912],{"class":30,"line":393},[28,153908,31282],{"class":42},[28,153910,153911],{"class":2453}," find_by_id",[28,153913,153914],{"class":34},"(self, student_id):\n",[28,153916,153917,153919,153921,153923,153925],{"class":30,"line":409},[28,153918,3891],{"class":42},[28,153920,152531],{"class":34},[28,153922,55],{"class":42},[28,153924,39350],{"class":38},[28,153926,153927],{"class":34},".students:\n",[28,153929,153930,153932,153935,153937],{"class":30,"line":1711},[28,153931,5130],{"class":42},[28,153933,153934],{"class":34}," student.student_id ",[28,153936,3439],{"class":42},[28,153938,152552],{"class":34},[28,153940,153941,153944],{"class":30,"line":1802},[28,153942,153943],{"class":42},"                return",[28,153945,152559],{"class":34},[28,153947,153948,153950],{"class":30,"line":1808},[28,153949,15238],{"class":42},[28,153951,152566],{"class":38},[28,153953,153954],{"class":30,"line":1820},[28,153955,2890],{"emptyLinePlaceholder":562},[28,153957,153958,153960,153962],{"class":30,"line":2102},[28,153959,31282],{"class":42},[28,153961,5697],{"class":2453},[28,153963,153964],{"class":34},"(self, student):\n",[28,153966,153967,153969,153971],{"class":30,"line":2107},[28,153968,2987],{"class":42},[28,153970,39350],{"class":38},[28,153972,153973],{"class":34},".find_by_id(student.student_id):\n",[28,153975,153976,153978],{"class":30,"line":2113},[28,153977,16218],{"class":42},[28,153979,126201],{"class":38},[28,153981,153982,153984],{"class":30,"line":2118},[28,153983,31326],{"class":38},[28,153985,153986],{"class":34},".students.append(student)\n",[28,153988,153989,153991],{"class":30,"line":2132},[28,153990,15238],{"class":42},[28,153992,153993],{"class":38}," True\n",[14,153995,153996],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[60,153998,154000],{"id":153999},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[605,154002,154004],{"id":154003},"_1251-数据结构","12.5.1 数据结构",[18,154006,154008],{"className":20,"code":154007,"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,154009,154010,154018,154049,154079,154108,154137],{"__ignoreMap":23},[28,154011,154012,154014,154016],{"class":30,"line":31},[28,154013,148859],{"class":34},[28,154015,83],{"class":42},[28,154017,55924],{"class":34},[28,154019,154020,154022,154024,154026,154028,154030,154033,154035,154038,154040,154042,154044,154047],{"class":30,"line":77},[28,154021,148779],{"class":34},[28,154023,148391],{"class":735},[28,154025,51914],{"class":34},[28,154027,149002],{"class":735},[28,154029,12921],{"class":34},[28,154031,154032],{"class":735},"\"category\"",[28,154034,51914],{"class":34},[28,154036,154037],{"class":735},"\"手机\"",[28,154039,12921],{"class":34},[28,154041,84561],{"class":735},[28,154043,51914],{"class":34},[28,154045,154046],{"class":38},"12000",[28,154048,5418],{"class":34},[28,154050,154051,154053,154055,154057,154059,154061,154063,154065,154068,154070,154072,154074,154077],{"class":30,"line":114},[28,154052,148779],{"class":34},[28,154054,148391],{"class":735},[28,154056,51914],{"class":34},[28,154058,149002],{"class":735},[28,154060,12921],{"class":34},[28,154062,154032],{"class":735},[28,154064,51914],{"class":34},[28,154066,154067],{"class":735},"\"电脑\"",[28,154069,12921],{"class":34},[28,154071,84561],{"class":735},[28,154073,51914],{"class":34},[28,154075,154076],{"class":38},"18000",[28,154078,5418],{"class":34},[28,154080,154081,154083,154085,154087,154089,154091,154093,154095,154097,154099,154101,154103,154106],{"class":30,"line":128},[28,154082,148779],{"class":34},[28,154084,148391],{"class":735},[28,154086,51914],{"class":34},[28,154088,149023],{"class":735},[28,154090,12921],{"class":34},[28,154092,154032],{"class":735},[28,154094,51914],{"class":34},[28,154096,154037],{"class":735},[28,154098,12921],{"class":34},[28,154100,84561],{"class":735},[28,154102,51914],{"class":34},[28,154104,154105],{"class":38},"15000",[28,154107,5418],{"class":34},[28,154109,154110,154112,154114,154116,154118,154120,154122,154124,154126,154128,154130,154132,154135],{"class":30,"line":393},[28,154111,148779],{"class":34},[28,154113,148391],{"class":735},[28,154115,51914],{"class":34},[28,154117,149023],{"class":735},[28,154119,12921],{"class":34},[28,154121,154032],{"class":735},[28,154123,51914],{"class":34},[28,154125,154067],{"class":735},[28,154127,12921],{"class":34},[28,154129,84561],{"class":735},[28,154131,51914],{"class":34},[28,154133,154134],{"class":38},"16000",[28,154136,5418],{"class":34},[28,154138,154139],{"class":30,"line":409},[28,154140,111],{"class":34},[605,154142,154144],{"id":154143},"_1252-按日期统计","12.5.2 按日期统计",[18,154146,154148],{"className":20,"code":154147,"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,154149,154150,154159,154163,154174,154188,154201,154220,154224],{"__ignoreMap":23},[28,154151,154152,154155,154157],{"class":30,"line":31},[28,154153,154154],{"class":34},"daily_total ",[28,154156,83],{"class":42},[28,154158,88345],{"class":34},[28,154160,154161],{"class":30,"line":77},[28,154162,2890],{"emptyLinePlaceholder":562},[28,154164,154165,154167,154169,154171],{"class":30,"line":114},[28,154166,49],{"class":42},[28,154168,148603],{"class":34},[28,154170,55],{"class":42},[28,154172,154173],{"class":34}," sales:\n",[28,154175,154176,154179,154181,154184,154186],{"class":30,"line":128},[28,154177,154178],{"class":34},"    date ",[28,154180,83],{"class":42},[28,154182,154183],{"class":34}," item[",[28,154185,148391],{"class":735},[28,154187,111],{"class":34},[28,154189,154190,154193,154195,154197,154199],{"class":30,"line":393},[28,154191,154192],{"class":34},"    amount ",[28,154194,83],{"class":42},[28,154196,154183],{"class":34},[28,154198,84561],{"class":735},[28,154200,111],{"class":34},[28,154202,154203,154206,154208,154211,154213,154215,154217],{"class":30,"line":409},[28,154204,154205],{"class":34},"    daily_total[date] ",[28,154207,83],{"class":42},[28,154209,154210],{"class":34}," daily_total.get(date, ",[28,154212,822],{"class":38},[28,154214,14200],{"class":34},[28,154216,1104],{"class":42},[28,154218,154219],{"class":34}," amount\n",[28,154221,154222],{"class":30,"line":1711},[28,154223,2890],{"emptyLinePlaceholder":562},[28,154225,154226,154228],{"class":30,"line":1802},[28,154227,30898],{"class":38},[28,154229,154230],{"class":34},"(daily_total)\n",[605,154232,154234],{"id":154233},"_1253-按类别统计","12.5.3 按类别统计",[18,154236,154238],{"className":20,"code":154237,"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,154239,154240,154249,154253,154263,154276,154288,154306,154310],{"__ignoreMap":23},[28,154241,154242,154245,154247],{"class":30,"line":31},[28,154243,154244],{"class":34},"category_total ",[28,154246,83],{"class":42},[28,154248,88345],{"class":34},[28,154250,154251],{"class":30,"line":77},[28,154252,2890],{"emptyLinePlaceholder":562},[28,154254,154255,154257,154259,154261],{"class":30,"line":114},[28,154256,49],{"class":42},[28,154258,148603],{"class":34},[28,154260,55],{"class":42},[28,154262,154173],{"class":34},[28,154264,154265,154268,154270,154272,154274],{"class":30,"line":128},[28,154266,154267],{"class":34},"    category ",[28,154269,83],{"class":42},[28,154271,154183],{"class":34},[28,154273,154032],{"class":735},[28,154275,111],{"class":34},[28,154277,154278,154280,154282,154284,154286],{"class":30,"line":393},[28,154279,154192],{"class":34},[28,154281,83],{"class":42},[28,154283,154183],{"class":34},[28,154285,84561],{"class":735},[28,154287,111],{"class":34},[28,154289,154290,154293,154295,154298,154300,154302,154304],{"class":30,"line":409},[28,154291,154292],{"class":34},"    category_total[category] ",[28,154294,83],{"class":42},[28,154296,154297],{"class":34}," category_total.get(category, ",[28,154299,822],{"class":38},[28,154301,14200],{"class":34},[28,154303,1104],{"class":42},[28,154305,154219],{"class":34},[28,154307,154308],{"class":30,"line":1711},[28,154309,2890],{"emptyLinePlaceholder":562},[28,154311,154312,154314],{"class":30,"line":1802},[28,154313,30898],{"class":38},[28,154315,154316],{"class":34},"(category_total)\n",[605,154318,154320],{"id":154319},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[18,154322,154324],{"className":20,"code":154323,"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,154325,154326,154351],{"__ignoreMap":23},[28,154327,154328,154331,154333,154335,154338,154341,154344,154347,154349],{"class":30,"line":31},[28,154329,154330],{"class":34},"top_date, top_amount ",[28,154332,83],{"class":42},[28,154334,6439],{"class":38},[28,154336,154337],{"class":34},"(daily_total.items(), ",[28,154339,154340],{"class":5704},"key",[28,154342,154343],{"class":42},"=lambda",[28,154345,154346],{"class":34}," item: item[",[28,154348,39],{"class":38},[28,154350,5145],{"class":34},[28,154352,154353,154355],{"class":30,"line":77},[28,154354,30898],{"class":38},[28,154356,154357],{"class":34},"(top_date, top_amount)\n",[60,154359,154361],{"id":154360},"_126-绘制柱状图","12.6 绘制柱状图",[18,154363,154365],{"className":20,"code":154364,"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,154366,154367,154381,154392,154396,154404,154416,154428,154439,154443,154447,154457,154468,154482,154487,154504,154521,154537,154541],{"__ignoreMap":23},[28,154368,154369,154371,154373,154375,154377,154379],{"class":30,"line":31},[28,154370,530],{"class":42},[28,154372,147773],{"class":34},[28,154374,536],{"class":42},[28,154376,147778],{"class":34},[28,154378,542],{"class":42},[28,154380,147783],{"class":34},[28,154382,154383,154385,154387,154389],{"class":30,"line":77},[28,154384,530],{"class":42},[28,154386,147632],{"class":34},[28,154388,536],{"class":42},[28,154390,154391],{"class":34}," Bar\n",[28,154393,154394],{"class":30,"line":114},[28,154395,2890],{"emptyLinePlaceholder":562},[28,154397,154398,154400,154402],{"class":30,"line":128},[28,154399,154244],{"class":34},[28,154401,83],{"class":42},[28,154403,16058],{"class":34},[28,154405,154406,154409,154411,154414],{"class":30,"line":393},[28,154407,154408],{"class":735},"    \"手机\"",[28,154410,51914],{"class":34},[28,154412,154413],{"class":38},"27000",[28,154415,31945],{"class":34},[28,154417,154418,154421,154423,154426],{"class":30,"line":409},[28,154419,154420],{"class":735},"    \"电脑\"",[28,154422,51914],{"class":34},[28,154424,154425],{"class":38},"34000",[28,154427,31945],{"class":34},[28,154429,154430,154433,154435,154437],{"class":30,"line":1711},[28,154431,154432],{"class":735},"    \"耳机\"",[28,154434,51914],{"class":34},[28,154436,124793],{"class":38},[28,154438,31945],{"class":34},[28,154440,154441],{"class":30,"line":1802},[28,154442,2055],{"class":34},[28,154444,154445],{"class":30,"line":1808},[28,154446,2890],{"emptyLinePlaceholder":562},[28,154448,154449,154452,154454],{"class":30,"line":1820},[28,154450,154451],{"class":34},"bar ",[28,154453,83],{"class":42},[28,154455,154456],{"class":34}," Bar()\n",[28,154458,154459,154462,154465],{"class":30,"line":2102},[28,154460,154461],{"class":34},"bar.add_xaxis(",[28,154463,154464],{"class":38},"list",[28,154466,154467],{"class":34},"(category_total.keys()))\n",[28,154469,154470,154473,154475,154477,154479],{"class":30,"line":2107},[28,154471,154472],{"class":34},"bar.add_yaxis(",[28,154474,147689],{"class":735},[28,154476,12921],{"class":34},[28,154478,154464],{"class":38},[28,154480,154481],{"class":34},"(category_total.values()))\n",[28,154483,154484],{"class":30,"line":2113},[28,154485,154486],{"class":34},"bar.set_global_opts(\n",[28,154488,154489,154491,154493,154495,154497,154499,154502],{"class":30,"line":2118},[28,154490,147867],{"class":5704},[28,154492,83],{"class":42},[28,154494,147872],{"class":34},[28,154496,51884],{"class":5704},[28,154498,83],{"class":42},[28,154500,154501],{"class":735},"\"品类销售额\"",[28,154503,38524],{"class":34},[28,154505,154506,154508,154510,154512,154514,154516,154519],{"class":30,"line":2132},[28,154507,147886],{"class":5704},[28,154509,83],{"class":42},[28,154511,147891],{"class":34},[28,154513,80287],{"class":5704},[28,154515,83],{"class":42},[28,154517,154518],{"class":735},"\"品类\"",[28,154520,38524],{"class":34},[28,154522,154523,154525,154527,154529,154531,154533,154535],{"class":30,"line":2137},[28,154524,147905],{"class":5704},[28,154526,83],{"class":42},[28,154528,147891],{"class":34},[28,154530,80287],{"class":5704},[28,154532,83],{"class":42},[28,154534,147689],{"class":735},[28,154536,38524],{"class":34},[28,154538,154539],{"class":30,"line":2143},[28,154540,228],{"class":34},[28,154542,154543,154546,154549],{"class":30,"line":2164},[28,154544,154545],{"class":34},"bar.render(",[28,154547,154548],{"class":735},"\"category_sales.html\"",[28,154550,228],{"class":34},[60,154552,154554],{"id":154553},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154556,154557],{},"时间线适合展示不同日期、月份、年份的数据变化。",[18,154559,154561],{"className":20,"code":154560,"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,154562,154563,154577,154588,154592,154600,154624,154647,154672,154676,154680,154690,154694,154705,154714,154724,154738,154769,154774,154778],{"__ignoreMap":23},[28,154564,154565,154567,154569,154571,154573,154575],{"class":30,"line":31},[28,154566,530],{"class":42},[28,154568,147773],{"class":34},[28,154570,536],{"class":42},[28,154572,147778],{"class":34},[28,154574,542],{"class":42},[28,154576,147783],{"class":34},[28,154578,154579,154581,154583,154585],{"class":30,"line":77},[28,154580,530],{"class":42},[28,154582,147632],{"class":34},[28,154584,536],{"class":42},[28,154586,154587],{"class":34}," Bar, Timeline\n",[28,154589,154590],{"class":30,"line":114},[28,154591,2890],{"emptyLinePlaceholder":562},[28,154593,154594,154596,154598],{"class":30,"line":128},[28,154595,102052],{"class":34},[28,154597,83],{"class":42},[28,154599,16058],{"class":34},[28,154601,154602,154605,154608,154610,154612,154614,154616,154618,154620,154622],{"class":30,"line":393},[28,154603,154604],{"class":735},"    \"2024-10-01\"",[28,154606,154607],{"class":34},": {",[28,154609,154037],{"class":735},[28,154611,51914],{"class":34},[28,154613,154046],{"class":38},[28,154615,12921],{"class":34},[28,154617,154067],{"class":735},[28,154619,51914],{"class":34},[28,154621,154076],{"class":38},[28,154623,5418],{"class":34},[28,154625,154626,154629,154631,154633,154635,154637,154639,154641,154643,154645],{"class":30,"line":409},[28,154627,154628],{"class":735},"    \"2024-10-02\"",[28,154630,154607],{"class":34},[28,154632,154037],{"class":735},[28,154634,51914],{"class":34},[28,154636,154105],{"class":38},[28,154638,12921],{"class":34},[28,154640,154067],{"class":735},[28,154642,51914],{"class":34},[28,154644,154134],{"class":38},[28,154646,5418],{"class":34},[28,154648,154649,154652,154654,154656,154658,154661,154663,154665,154667,154670],{"class":30,"line":1711},[28,154650,154651],{"class":735},"    \"2024-10-03\"",[28,154653,154607],{"class":34},[28,154655,154037],{"class":735},[28,154657,51914],{"class":34},[28,154659,154660],{"class":38},"17000",[28,154662,12921],{"class":34},[28,154664,154067],{"class":735},[28,154666,51914],{"class":34},[28,154668,154669],{"class":38},"19000",[28,154671,5418],{"class":34},[28,154673,154674],{"class":30,"line":1802},[28,154675,2055],{"class":34},[28,154677,154678],{"class":30,"line":1808},[28,154679,2890],{"emptyLinePlaceholder":562},[28,154681,154682,154685,154687],{"class":30,"line":1820},[28,154683,154684],{"class":34},"timeline ",[28,154686,83],{"class":42},[28,154688,154689],{"class":34}," Timeline()\n",[28,154691,154692],{"class":30,"line":2102},[28,154693,2890],{"emptyLinePlaceholder":562},[28,154695,154696,154698,154701,154703],{"class":30,"line":2107},[28,154697,49],{"class":42},[28,154699,154700],{"class":34}," date, category_data ",[28,154702,55],{"class":42},[28,154704,149542],{"class":34},[28,154706,154707,154710,154712],{"class":30,"line":2113},[28,154708,154709],{"class":34},"    bar ",[28,154711,83],{"class":42},[28,154713,154456],{"class":34},[28,154715,154716,154719,154721],{"class":30,"line":2118},[28,154717,154718],{"class":34},"    bar.add_xaxis(",[28,154720,154464],{"class":38},[28,154722,154723],{"class":34},"(category_data.keys()))\n",[28,154725,154726,154729,154731,154733,154735],{"class":30,"line":2132},[28,154727,154728],{"class":34},"    bar.add_yaxis(",[28,154730,147689],{"class":735},[28,154732,12921],{"class":34},[28,154734,154464],{"class":38},[28,154736,154737],{"class":34},"(category_data.values()))\n",[28,154739,154740,154743,154746,154748,154750,154752,154754,154756,154758,154760,154762,154764,154767],{"class":30,"line":2137},[28,154741,154742],{"class":34},"    bar.set_global_opts(",[28,154744,154745],{"class":5704},"title_opts",[28,154747,83],{"class":42},[28,154749,147872],{"class":34},[28,154751,51884],{"class":5704},[28,154753,83],{"class":42},[28,154755,686],{"class":42},[28,154757,880],{"class":735},[28,154759,1515],{"class":38},[28,154761,74403],{"class":34},[28,154763,1565],{"class":38},[28,154765,154766],{"class":735},"销售额\"",[28,154768,30980],{"class":34},[28,154770,154771],{"class":30,"line":2143},[28,154772,154773],{"class":34},"    timeline.add(bar, date)\n",[28,154775,154776],{"class":30,"line":2164},[28,154777,2890],{"emptyLinePlaceholder":562},[28,154779,154780,154783,154786],{"class":30,"line":2169},[28,154781,154782],{"class":34},"timeline.render(",[28,154784,154785],{"class":735},"\"timeline_sales.html\"",[28,154787,228],{"class":34},[60,154789,154791],{"id":154790},"_128-绘制地图","12.8 绘制地图",[14,154793,154794],{},"地图适合展示地区数据。",[18,154796,154798],{"className":20,"code":154797,"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,154799,154800,154814,154825,154829,154837,154850,154862,154875,154888,154892,154896,154906,154921,154926,154943,154962,154966],{"__ignoreMap":23},[28,154801,154802,154804,154806,154808,154810,154812],{"class":30,"line":31},[28,154803,530],{"class":42},[28,154805,147773],{"class":34},[28,154807,536],{"class":42},[28,154809,147778],{"class":34},[28,154811,542],{"class":42},[28,154813,147783],{"class":34},[28,154815,154816,154818,154820,154822],{"class":30,"line":77},[28,154817,530],{"class":42},[28,154819,147632],{"class":34},[28,154821,536],{"class":42},[28,154823,154824],{"class":34}," Map\n",[28,154826,154827],{"class":30,"line":114},[28,154828,2890],{"emptyLinePlaceholder":562},[28,154830,154831,154833,154835],{"class":30,"line":128},[28,154832,102052],{"class":34},[28,154834,83],{"class":42},[28,154836,55924],{"class":34},[28,154838,154839,154842,154844,154846,154848],{"class":30,"line":393},[28,154840,154841],{"class":34},"    (",[28,154843,69746],{"class":735},[28,154845,12921],{"class":34},[28,154847,1437],{"class":38},[28,154849,38524],{"class":34},[28,154851,154852,154854,154856,154858,154860],{"class":30,"line":409},[28,154853,154841],{"class":34},[28,154855,69766],{"class":735},[28,154857,12921],{"class":34},[28,154859,147706],{"class":38},[28,154861,38524],{"class":34},[28,154863,154864,154866,154869,154871,154873],{"class":30,"line":1711},[28,154865,154841],{"class":34},[28,154867,154868],{"class":735},"\"广东\"",[28,154870,12921],{"class":34},[28,154872,2212],{"class":38},[28,154874,38524],{"class":34},[28,154876,154877,154879,154882,154884,154886],{"class":30,"line":1802},[28,154878,154841],{"class":34},[28,154880,154881],{"class":735},"\"浙江\"",[28,154883,12921],{"class":34},[28,154885,147711],{"class":38},[28,154887,38524],{"class":34},[28,154889,154890],{"class":30,"line":1808},[28,154891,111],{"class":34},[28,154893,154894],{"class":30,"line":1820},[28,154895,2890],{"emptyLinePlaceholder":562},[28,154897,154898,154901,154903],{"class":30,"line":2102},[28,154899,154900],{"class":34},"map_chart ",[28,154902,83],{"class":42},[28,154904,154905],{"class":34}," Map()\n",[28,154907,154908,154911,154913,154916,154919],{"class":30,"line":2107},[28,154909,154910],{"class":34},"map_chart.add(",[28,154912,147689],{"class":735},[28,154914,154915],{"class":34},", data, ",[28,154917,154918],{"class":735},"\"china\"",[28,154920,228],{"class":34},[28,154922,154923],{"class":30,"line":2113},[28,154924,154925],{"class":34},"map_chart.set_global_opts(\n",[28,154927,154928,154930,154932,154934,154936,154938,154941],{"class":30,"line":2118},[28,154929,147867],{"class":5704},[28,154931,83],{"class":42},[28,154933,147872],{"class":34},[28,154935,51884],{"class":5704},[28,154937,83],{"class":42},[28,154939,154940],{"class":735},"\"地区销售额\"",[28,154942,38524],{"class":34},[28,154944,154945,154948,154950,154953,154956,154958,154960],{"class":30,"line":2132},[28,154946,154947],{"class":5704},"    visualmap_opts",[28,154949,83],{"class":42},[28,154951,154952],{"class":34},"opts.VisualMapOpts(",[28,154954,154955],{"class":5704},"max_",[28,154957,83],{"class":42},[28,154959,2212],{"class":38},[28,154961,38524],{"class":34},[28,154963,154964],{"class":30,"line":2137},[28,154965,228],{"class":34},[28,154967,154968,154971,154974],{"class":30,"line":2143},[28,154969,154970],{"class":34},"map_chart.render(",[28,154972,154973],{"class":735},"\"map_sales.html\"",[28,154975,228],{"class":34},[14,154977,154978],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[60,154980,154982],{"id":154981},"_129-项目拆分建议","12.9 项目拆分建议",[14,154984,154985],{},"当代码超过一个文件时，可以这样组织：",[18,154987,154990],{"className":154988,"code":154989,"language":5675,"meta":23},[5673],"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,154991,154989],{"__ignoreMap":23},[14,154993,154994],{},"职责：",[588,154996,154997,155003,155009,155015],{},[591,154998,154999,155002],{},[25,155000,155001],{},"main.py","：程序入口。",[591,155004,155005,155008],{},[25,155006,155007],{},"file_utils.py","：读写 JSON。",[591,155010,155011,155014],{},[25,155012,155013],{},"sales_service.py","：统计销售数据。",[591,155016,155017,155020],{},[25,155018,155019],{},"chart_builder.py","：生成图表。",[60,155022,155024],{"id":155023},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155026,155027],{},"语法基础：",[588,155029,155030,155033,155036,155039],{},[591,155031,155032],{},"会写变量、注释、输入输出。",[591,155034,155035],{},"会使用 int、float、str、bool。",[591,155037,155038],{},"会做类型转换。",[591,155040,155041],{},"会使用 f-string 格式化输出。",[14,155043,155044],{},"流程控制：",[588,155046,155047,155053,155059,155067],{},[591,155048,155049,155050,28871],{},"会写 ",[25,155051,155052],{},"if elif else",[591,155054,155049,155055,101412,155057,28871],{},[25,155056,109057],{},[25,155058,49],{},[591,155060,155061,155062,101412,155064,28871],{},"理解 ",[25,155063,2543],{},[25,155065,155066],{},"continue",[591,155068,155069],{},"能写嵌套循环。",[14,155071,155072],{},"函数：",[588,155074,155075,155078,155081,155084],{},[591,155076,155077],{},"会定义和调用函数。",[591,155079,155080],{},"理解参数和返回值。",[591,155082,155083],{},"知道局部变量和全局变量。",[591,155085,155086],{},"会使用默认参数、关键字参数、不定长参数。",[14,155088,155089],{},"容器：",[588,155091,155092,155095,155098,155101,155104],{},[591,155093,155094],{},"会使用列表增删改查。",[591,155096,155097],{},"会遍历列表、字典。",[591,155099,155100],{},"会使用切片。",[591,155102,155103],{},"会用集合去重。",[591,155105,155106],{},"会处理列表嵌套字典。",[14,155108,155109],{},"文件和模块：",[588,155111,155112,155115,155118,155121,155124],{},[591,155113,155114],{},"会读写文本文件。",[591,155116,155117],{},"会读写 JSON。",[591,155119,155120],{},"会捕获常见异常。",[591,155122,155123],{},"会导入模块和第三方包。",[591,155125,155126],{},"会创建简单包结构。",[14,155128,155129],{},"项目能力：",[588,155131,155132,155135,155138,155141,155144],{},[591,155133,155134],{},"能把代码拆成函数。",[591,155136,155137],{},"能把数据保存到文件。",[591,155139,155140],{},"能处理用户输入错误。",[591,155142,155143],{},"能写一个完整菜单程序。",[591,155145,155146],{},"能用 pyecharts 生成图表。",[60,155148,155150],{"id":155149},"_1211-推荐练习顺序","12.11 推荐练习顺序",[588,155152,155153,155156,155159,155162,155165,155168,155171,155174],{},[591,155154,155155],{},"猜数字游戏。",[591,155157,155158],{},"ATM 菜单程序。",[591,155160,155161],{},"学生成绩统计。",[591,155163,155164],{},"学生管理系统函数版。",[591,155166,155167],{},"学生管理系统文件持久化版。",[591,155169,155170],{},"学生管理系统面向对象版。",[591,155172,155173],{},"销售数据统计。",[591,155175,155176],{},"销售数据可视化。",[60,155178,155180],{"id":155179},"_1212-常见学习误区","12.12 常见学习误区",[588,155182,155183,155186,155189,155192,155195,155198,155201],{},[591,155184,155185],{},"只看视频不敲代码。",[591,155187,155188],{},"一报错就复制错误去搜，不先读报错位置。",[591,155190,155191],{},"变量名随便写，后续自己看不懂。",[591,155193,155194],{},"所有代码都写在一个文件一个函数里。",[591,155196,155197],{},"不保存练习代码，复习时没有材料。",[591,155199,155200],{},"还没掌握列表字典就急着学框架。",[591,155202,155203],{},"不会读官方文档，只依赖教程。",[60,155205,155207],{"id":155206},"_1213-如何读报错","12.13 如何读报错",[14,155209,155210],{},"报错通常从下往上看最后几行。",[14,155212,15621],{},[18,155214,155217],{"className":155215,"code":155216,"language":5675,"meta":23},[5673],"ValueError: invalid literal for int() with base 10: 'abc'\n",[25,155218,155216],{"__ignoreMap":23},[14,155220,25086],{},[588,155222,155223,155229,155239],{},[591,155224,155225,155226,28871],{},"异常类型是 ",[25,155227,155228],{},"ValueError",[591,155230,107739,155231,155234,155235,155238],{},[25,155232,155233],{},"int()"," 无法把 ",[25,155236,155237],{},"'abc'"," 转成整数。",[591,155240,155241],{},"应该检查输入内容或增加异常处理。",[14,155243,155244],{},"再看文件名和行号：",[18,155246,155249],{"className":155247,"code":155248,"language":5675,"meta":23},[5673],"File \"main.py\", line 10, in \u003Cmodule>\n",[25,155250,155248],{"__ignoreMap":23},[14,155252,155253,155254,155256],{},"表示错误发生在 ",[25,155255,155001],{}," 第 10 行。",[60,155258,155260],{"id":155259},"_1214-后续学习方向","12.14 后续学习方向",[14,155262,155263],{},"Python 基础完成后，可以按兴趣选择方向：",[588,155265,155266,155278,155287,155299,155310,155319,155329],{},[591,155267,155268,155269,843,155272,843,155275,28871],{},"自动化办公：",[25,155270,155271],{},"openpyxl",[25,155273,155274],{},"python-docx",[25,155276,155277],{},"pdfplumber",[591,155279,155280,155281,843,155283,843,155285,28871],{},"数据分析：",[25,155282,101020],{},[25,155284,146579],{},[25,155286,146587],{},[591,155288,155289,155290,843,155293,843,155296,28871],{},"Web 后端：",[25,155291,155292],{},"Flask",[25,155294,155295],{},"FastAPI",[25,155297,155298],{},"Django",[591,155300,155301,155302,843,155304,843,155307,28871],{},"爬虫：",[25,155303,146564],{},[25,155305,155306],{},"BeautifulSoup",[25,155308,155309],{},"Scrapy",[591,155311,155312,155313,843,155315,155318],{},"测试开发：",[25,155314,146611],{},[25,155316,155317],{},"selenium","、接口测试。",[591,155320,155321,155322,843,155324,843,155326,28871],{},"人工智能：",[25,155323,101020],{},[25,155325,146579],{},[25,155327,155328],{},"pytorch",[591,155330,155331,155332,843,155334,843,155337,28871],{},"运维脚本：",[25,155333,146180],{},[25,155335,155336],{},"subprocess",[25,155338,155339],{},"paramiko",[14,155341,155342],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[60,155344,155346],{"id":155345},"_1215-结课练习","12.15 结课练习",[588,155348,155349,155352,155355,155358,155361,155364,155367,155370],{},[591,155350,155351],{},"完成函数版学生管理系统。",[591,155353,155354],{},"给学生管理系统增加 JSON 持久化。",[591,155356,155357],{},"给学生管理系统增加异常处理。",[591,155359,155360],{},"把学生管理系统改成面向对象版。",[591,155362,155363],{},"使用 pyecharts 绘制学生成绩柱状图。",[591,155365,155366],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[591,155368,155369],{},"按品类统计销售额并绘制柱状图。",[591,155371,155372],{},"写一份自己的 Python 学习路线图。",[547,155374,155375],{},"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":77,"depth":77,"links":155377},[155378,155379,155382,155383,155384,155390,155391,155392,155393,155394,155395,155396,155397,155398,155399],{"id":152094,"depth":77,"text":152095},{"id":152144,"depth":77,"text":152145,"children":155380},[155381],{"id":152148,"depth":114,"text":152149},{"id":152187,"depth":77,"text":152188},{"id":153661,"depth":77,"text":153662},{"id":153999,"depth":77,"text":154000,"children":155385},[155386,155387,155388,155389],{"id":154003,"depth":114,"text":154004},{"id":154143,"depth":114,"text":154144},{"id":154233,"depth":114,"text":154234},{"id":154319,"depth":114,"text":154320},{"id":154360,"depth":77,"text":154361},{"id":154553,"depth":77,"text":154554},{"id":154790,"depth":77,"text":154791},{"id":154981,"depth":77,"text":154982},{"id":155023,"depth":77,"text":155024},{"id":155149,"depth":77,"text":155150},{"id":155179,"depth":77,"text":155180},{"id":155206,"depth":77,"text":155207},{"id":155259,"depth":77,"text":155260},{"id":155345,"depth":77,"text":155346},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152086,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155406,"title":155407,"body":155408,"description":559,"extension":560,"meta":157877,"navigation":562,"path":157878,"seo":157879,"stem":157880,"__hash__":157881},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155409,"toc":157852},[155410,155413,155417,155420,155423,155443,155446,155469,155472,155475,155497,155500,155522,155526,155529,155569,155572,155693,155697,155700,155740,155743,155767,155770,155774,155777,155791,155824,155827,155862,155865,155888,155891,155924,155927,155929,155935,156010,156013,156019,156036,156076,156080,156083,156129,156131,156169,156172,156207,156210,156245,156248,156280,156283,156302,156306,156310,156423,156425,156500,156504,156550,156553,156579,156588,156592,156595,156658,156666,156694,156698,156738,156803,156807,156810,156849,156852,156897,156900,156961,156965,156992,156995,157023,157026,157030,157034,157099,157102,157140,157143,157175,157179,157278,157282,157285,157358,157361,157409,157413,157419,157459,157462,157509,157512,157561,157565,157567,157581,157583,157764,157768,157795,157815,157822,157826,157843,157849],[10,155411,155407],{"id":155412},"_2-基础语法变量与字符串",[60,155414,155416],{"id":155415},"_21-注释","2.1 注释",[14,155418,155419],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155421,155422],{},"单行注释：",[18,155424,155426],{"className":20,"code":155425,"language":22,"meta":23,"style":23},"# 这是单行注释\nprint(\"hello\")\n",[25,155427,155428,155433],{"__ignoreMap":23},[28,155429,155430],{"class":30,"line":31},[28,155431,155432],{"class":73},"# 这是单行注释\n",[28,155434,155435,155437,155439,155441],{"class":30,"line":77},[28,155436,30898],{"class":38},[28,155438,367],{"class":34},[28,155440,6332],{"class":735},[28,155442,228],{"class":34},[14,155444,155445],{},"多行说明常用三引号：",[18,155447,155449],{"className":20,"code":155448,"language":22,"meta":23,"style":23},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[25,155450,155451,155455,155460,155465],{"__ignoreMap":23},[28,155452,155453],{"class":30,"line":31},[28,155454,96169],{"class":735},[28,155456,155457],{"class":30,"line":77},[28,155458,155459],{"class":735},"这是多行说明。\n",[28,155461,155462],{"class":30,"line":114},[28,155463,155464],{"class":735},"常用于文件顶部说明、函数说明等。\n",[28,155466,155467],{"class":30,"line":128},[28,155468,96169],{"class":735},[14,155470,155471],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155473,155474],{},"不好：",[18,155476,155478],{"className":20,"code":155477,"language":22,"meta":23,"style":23},"# age 加 1\nage = age + 1\n",[25,155479,155480,155485],{"__ignoreMap":23},[28,155481,155482],{"class":30,"line":31},[28,155483,155484],{"class":73},"# age 加 1\n",[28,155486,155487,155489,155491,155493,155495],{"class":30,"line":77},[28,155488,146940],{"class":34},[28,155490,83],{"class":42},[28,155492,16193],{"class":34},[28,155494,1104],{"class":42},[28,155496,56176],{"class":38},[14,155498,155499],{},"较好：",[18,155501,155503],{"className":20,"code":155502,"language":22,"meta":23,"style":23},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[25,155504,155505,155510],{"__ignoreMap":23},[28,155506,155507],{"class":30,"line":31},[28,155508,155509],{"class":73},"# 用户过完生日后，年龄增加一岁\n",[28,155511,155512,155514,155516,155518,155520],{"class":30,"line":77},[28,155513,146940],{"class":34},[28,155515,83],{"class":42},[28,155517,16193],{"class":34},[28,155519,1104],{"class":42},[28,155521,56176],{"class":38},[60,155523,155525],{"id":155524},"_22-字面量","2.2 字面量",[14,155527,155528],{},"字面量就是代码中直接写出来的数据。",[18,155530,155532],{"className":20,"code":155531,"language":22,"meta":23,"style":23},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[25,155533,155534,155541,155548,155555,155562],{"__ignoreMap":23},[28,155535,155536,155538],{"class":30,"line":31},[28,155537,938],{"class":38},[28,155539,155540],{"class":73},"          # 整数\n",[28,155542,155543,155545],{"class":30,"line":77},[28,155544,683],{"class":38},[28,155546,155547],{"class":73},"         # 小数\n",[28,155549,155550,155552],{"class":30,"line":114},[28,155551,6332],{"class":735},[28,155553,155554],{"class":73},"      # 字符串\n",[28,155556,155557,155559],{"class":30,"line":128},[28,155558,31955],{"class":38},[28,155560,155561],{"class":73},"         # 布尔值\n",[28,155563,155564,155566],{"class":30,"line":393},[28,155565,96157],{"class":38},[28,155567,155568],{"class":73},"         # 空值\n",[14,155570,155571],{},"常见字面量类型：",[768,155573,155574,155584],{},[771,155575,155576],{},[774,155577,155578,155580,155582],{},[777,155579,24223],{},[777,155581,27978],{},[777,155583,26356],{},[815,155585,155586,155597,155608,155619,155631,155643,155655,155668,155680],{},[774,155587,155588,155590,155594],{},[820,155589,640],{},[820,155591,155592],{},[25,155593,938],{},[820,155595,155596],{},"整数",[774,155598,155599,155601,155605],{},[820,155600,675],{},[820,155602,155603],{},[25,155604,683],{},[820,155606,155607],{},"浮点数",[774,155609,155610,155612,155616],{},[820,155611,1790],{},[820,155613,155614],{},[25,155615,6332],{},[820,155617,155618],{},"字符串",[774,155620,155621,155623,155629],{},[820,155622,1845],{},[820,155624,155625,843,155627],{},[25,155626,31955],{},[25,155628,34464],{},[820,155630,66492],{},[774,155632,155633,155636,155640],{},[820,155634,155635],{},"NoneType",[820,155637,155638],{},[25,155639,96157],{},[820,155641,155642],{},"空值",[774,155644,155645,155647,155652],{},[820,155646,154464],{},[820,155648,155649],{},[25,155650,155651],{},"[1, 2, 3]",[820,155653,155654],{},"列表",[774,155656,155657,155660,155665],{},[820,155658,155659],{},"tuple",[820,155661,155662],{},[25,155663,155664],{},"(1, 2, 3)",[820,155666,155667],{},"元组",[774,155669,155670,155672,155677],{},[820,155671,114940],{},[820,155673,155674],{},[25,155675,155676],{},"{\"name\": \"张三\"}",[820,155678,155679],{},"字典",[774,155681,155682,155685,155690],{},[820,155683,155684],{},"set",[820,155686,155687],{},[25,155688,155689],{},"{1, 2, 3}",[820,155691,155692],{},"集合",[60,155694,155696],{"id":155695},"_23-变量","2.3 变量",[14,155698,155699],{},"变量是保存数据的名字。",[18,155701,155703],{"className":20,"code":155702,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[25,155704,155705,155713,155721,155731],{"__ignoreMap":23},[28,155706,155707,155709,155711],{"class":30,"line":31},[28,155708,146930],{"class":34},[28,155710,83],{"class":42},[28,155712,149747],{"class":735},[28,155714,155715,155717,155719],{"class":30,"line":77},[28,155716,146940],{"class":34},[28,155718,83],{"class":42},[28,155720,146945],{"class":38},[28,155722,155723,155726,155728],{"class":30,"line":114},[28,155724,155725],{"class":34},"height ",[28,155727,83],{"class":42},[28,155729,155730],{"class":38}," 1.75\n",[28,155732,155733,155736,155738],{"class":30,"line":128},[28,155734,155735],{"class":34},"is_student ",[28,155737,83],{"class":42},[28,155739,153993],{"class":38},[14,155741,155742],{},"Python 的变量不需要提前声明类型：",[18,155744,155746],{"className":20,"code":155745,"language":22,"meta":23,"style":23},"score = 100\nscore = \"满分\"\n",[25,155747,155748,155758],{"__ignoreMap":23},[28,155749,155750,155753,155755],{"class":30,"line":31},[28,155751,155752],{"class":34},"score ",[28,155754,83],{"class":42},[28,155756,155757],{"class":38}," 100\n",[28,155759,155760,155762,155764],{"class":30,"line":77},[28,155761,155752],{"class":34},[28,155763,83],{"class":42},[28,155765,155766],{"class":735}," \"满分\"\n",[14,155768,155769],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[60,155771,155773],{"id":155772},"_24-变量命名规则","2.4 变量命名规则",[14,155775,155776],{},"硬性规则：",[588,155778,155779,155782,155785,155788],{},[591,155780,155781],{},"只能由字母、数字、下划线组成。",[591,155783,155784],{},"不能以数字开头。",[591,155786,155787],{},"不能使用 Python 关键字。",[591,155789,155790],{},"区分大小写。",[18,155792,155794],{"className":20,"code":155793,"language":22,"meta":23,"style":23},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[25,155795,155796,155805,155814],{"__ignoreMap":23},[28,155797,155798,155801,155803],{"class":30,"line":31},[28,155799,155800],{"class":34},"user_name ",[28,155802,83],{"class":42},[28,155804,146935],{"class":735},[28,155806,155807,155810,155812],{"class":30,"line":77},[28,155808,155809],{"class":34},"age2 ",[28,155811,83],{"class":42},[28,155813,146945],{"class":38},[28,155815,155816,155819,155821],{"class":30,"line":114},[28,155817,155818],{"class":34},"_token ",[28,155820,83],{"class":42},[28,155822,155823],{"class":735}," \"abc\"\n",[14,155825,155826],{},"错误写法：",[18,155828,155830],{"className":20,"code":155829,"language":22,"meta":23,"style":23},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[25,155831,155832,155841,155853],{"__ignoreMap":23},[28,155833,155834,155837,155839],{"class":30,"line":31},[28,155835,155836],{"class":77880},"2age",[28,155838,14050],{"class":42},[28,155840,146945],{"class":38},[28,155842,155843,155845,155847,155849,155851],{"class":30,"line":77},[28,155844,131978],{"class":34},[28,155846,445],{"class":42},[28,155848,146930],{"class":34},[28,155850,83],{"class":42},[28,155852,146935],{"class":735},[28,155854,155855,155857,155859],{"class":30,"line":114},[28,155856,15180],{"class":42},[28,155858,14050],{"class":42},[28,155860,155861],{"class":735}," \"一班\"\n",[14,155863,155864],{},"查看关键字：",[18,155866,155868],{"className":20,"code":155867,"language":22,"meta":23,"style":23},"import keyword\n\nprint(keyword.kwlist)\n",[25,155869,155870,155877,155881],{"__ignoreMap":23},[28,155871,155872,155874],{"class":30,"line":31},[28,155873,536],{"class":42},[28,155875,155876],{"class":34}," keyword\n",[28,155878,155879],{"class":30,"line":77},[28,155880,2890],{"emptyLinePlaceholder":562},[28,155882,155883,155885],{"class":30,"line":114},[28,155884,30898],{"class":38},[28,155886,155887],{"class":34},"(keyword.kwlist)\n",[14,155889,155890],{},"推荐命名风格：",[18,155892,155894],{"className":20,"code":155893,"language":22,"meta":23,"style":23},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[25,155895,155896,155905,155915],{"__ignoreMap":23},[28,155897,155898,155901,155903],{"class":30,"line":31},[28,155899,155900],{"class":34},"student_name ",[28,155902,83],{"class":42},[28,155904,149747],{"class":735},[28,155906,155907,155910,155912],{"class":30,"line":77},[28,155908,155909],{"class":34},"total_price ",[28,155911,83],{"class":42},[28,155913,155914],{"class":38}," 99.8\n",[28,155916,155917,155920,155922],{"class":30,"line":114},[28,155918,155919],{"class":34},"is_finished ",[28,155921,83],{"class":42},[28,155923,126201],{"class":38},[14,155925,155926],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[60,155928,51209],{"id":51208},[14,155930,104760,155931,155934],{},[25,155932,155933],{},"type()"," 查看数据类型：",[18,155936,155938],{"className":20,"code":155937,"language":22,"meta":23,"style":23},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[25,155939,155940,155954,155968,155982,155996],{"__ignoreMap":23},[28,155941,155942,155944,155946,155948,155950,155952],{"class":30,"line":31},[28,155943,30898],{"class":38},[28,155945,367],{"class":34},[28,155947,103501],{"class":38},[28,155949,367],{"class":34},[28,155951,938],{"class":38},[28,155953,30980],{"class":34},[28,155955,155956,155958,155960,155962,155964,155966],{"class":30,"line":77},[28,155957,30898],{"class":38},[28,155959,367],{"class":34},[28,155961,103501],{"class":38},[28,155963,367],{"class":34},[28,155965,683],{"class":38},[28,155967,30980],{"class":34},[28,155969,155970,155972,155974,155976,155978,155980],{"class":30,"line":114},[28,155971,30898],{"class":38},[28,155973,367],{"class":34},[28,155975,103501],{"class":38},[28,155977,367],{"class":34},[28,155979,6332],{"class":735},[28,155981,30980],{"class":34},[28,155983,155984,155986,155988,155990,155992,155994],{"class":30,"line":128},[28,155985,30898],{"class":38},[28,155987,367],{"class":34},[28,155989,103501],{"class":38},[28,155991,367],{"class":34},[28,155993,31955],{"class":38},[28,155995,30980],{"class":34},[28,155997,155998,156000,156002,156004,156006,156008],{"class":30,"line":393},[28,155999,30898],{"class":38},[28,156001,367],{"class":34},[28,156003,103501],{"class":38},[28,156005,367],{"class":34},[28,156007,96157],{"class":38},[28,156009,30980],{"class":34},[14,156011,156012],{},"输出类似：",[18,156014,156017],{"className":156015,"code":156016,"language":5675,"meta":23},[5673],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[25,156018,156016],{"__ignoreMap":23},[14,156020,9513,156021,107677,156023,156025,156026,156028,156029,21986,156031,156028,156033,156035],{},[25,156022,1845],{},[25,156024,640],{}," 的子类，",[25,156027,31955],{}," 可以当作 ",[25,156030,39],{},[25,156032,34464],{},[25,156034,822],{},"，但业务代码中不要滥用。",[18,156037,156039],{"className":20,"code":156038,"language":22,"meta":23,"style":23},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[25,156040,156041,156059],{"__ignoreMap":23},[28,156042,156043,156045,156047,156049,156051,156053,156056],{"class":30,"line":31},[28,156044,30898],{"class":38},[28,156046,367],{"class":34},[28,156048,31955],{"class":38},[28,156050,46043],{"class":42},[28,156052,25605],{"class":38},[28,156054,156055],{"class":34},")   ",[28,156057,156058],{"class":73},"# 2\n",[28,156060,156061,156063,156065,156067,156069,156071,156073],{"class":30,"line":77},[28,156062,30898],{"class":38},[28,156064,367],{"class":34},[28,156066,34464],{"class":38},[28,156068,46043],{"class":42},[28,156070,25605],{"class":38},[28,156072,46285],{"class":34},[28,156074,156075],{"class":73},"# 1\n",[60,156077,156079],{"id":156078},"_26-类型转换","2.6 类型转换",[14,156081,156082],{},"常用转换函数：",[18,156084,156086],{"className":20,"code":156085,"language":22,"meta":23,"style":23},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[25,156087,156088,156098,156109,156119],{"__ignoreMap":23},[28,156089,156090,156092,156094,156096],{"class":30,"line":31},[28,156091,640],{"class":38},[28,156093,367],{"class":34},[28,156095,54793],{"class":735},[28,156097,228],{"class":34},[28,156099,156100,156102,156104,156107],{"class":30,"line":77},[28,156101,675],{"class":38},[28,156103,367],{"class":34},[28,156105,156106],{"class":735},"\"3.14\"",[28,156108,228],{"class":34},[28,156110,156111,156113,156115,156117],{"class":30,"line":114},[28,156112,1790],{"class":38},[28,156114,367],{"class":34},[28,156116,938],{"class":38},[28,156118,228],{"class":34},[28,156120,156121,156123,156125,156127],{"class":30,"line":128},[28,156122,1845],{"class":38},[28,156124,367],{"class":34},[28,156126,39],{"class":38},[28,156128,228],{"class":34},[14,156130,15621],{},[18,156132,156134],{"className":20,"code":156133,"language":22,"meta":23,"style":23},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[25,156135,156136,156145,156156],{"__ignoreMap":23},[28,156137,156138,156140,156142],{"class":30,"line":31},[28,156139,146940],{"class":34},[28,156141,83],{"class":42},[28,156143,156144],{"class":735}," \"18\"\n",[28,156146,156147,156149,156151,156153],{"class":30,"line":77},[28,156148,146940],{"class":34},[28,156150,83],{"class":42},[28,156152,2872],{"class":38},[28,156154,156155],{"class":34},"(age)\n",[28,156157,156158,156160,156163,156165,156167],{"class":30,"line":114},[28,156159,30898],{"class":38},[28,156161,156162],{"class":34},"(age ",[28,156164,1104],{"class":42},[28,156166,25605],{"class":38},[28,156168,228],{"class":34},[14,156170,156171],{},"输入得到的内容永远是字符串：",[18,156173,156175],{"className":20,"code":156174,"language":22,"meta":23,"style":23},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[25,156176,156177,156193],{"__ignoreMap":23},[28,156178,156179,156182,156184,156186,156188,156191],{"class":30,"line":31},[28,156180,156181],{"class":34},"num ",[28,156183,83],{"class":42},[28,156185,61082],{"class":38},[28,156187,367],{"class":34},[28,156189,156190],{"class":735},"\"请输入数字:\"",[28,156192,228],{"class":34},[28,156194,156195,156197,156199,156201,156204],{"class":30,"line":77},[28,156196,30898],{"class":38},[28,156198,367],{"class":34},[28,156200,103501],{"class":38},[28,156202,156203],{"class":34},"(num))  ",[28,156205,156206],{"class":73},"# str\n",[14,156208,156209],{},"如果要做数学运算，必须转换：",[18,156211,156213],{"className":20,"code":156212,"language":22,"meta":23,"style":23},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[25,156214,156215,156233],{"__ignoreMap":23},[28,156216,156217,156219,156221,156223,156225,156227,156229,156231],{"class":30,"line":31},[28,156218,156181],{"class":34},[28,156220,83],{"class":42},[28,156222,2872],{"class":38},[28,156224,367],{"class":34},[28,156226,54298],{"class":38},[28,156228,367],{"class":34},[28,156230,156190],{"class":735},[28,156232,30980],{"class":34},[28,156234,156235,156237,156239,156241,156243],{"class":30,"line":77},[28,156236,30898],{"class":38},[28,156238,46096],{"class":34},[28,156240,1104],{"class":42},[28,156242,2528],{"class":38},[28,156244,228],{"class":34},[14,156246,156247],{},"常见错误：",[18,156249,156251],{"className":20,"code":156250,"language":22,"meta":23,"style":23},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[25,156252,156253,156266],{"__ignoreMap":23},[28,156254,156255,156257,156259,156261,156263],{"class":30,"line":31},[28,156256,640],{"class":38},[28,156258,367],{"class":34},[28,156260,156106],{"class":735},[28,156262,156055],{"class":34},[28,156264,156265],{"class":73},"# 错误\n",[28,156267,156268,156270,156272,156275,156278],{"class":30,"line":77},[28,156269,640],{"class":38},[28,156271,367],{"class":34},[28,156273,156274],{"class":735},"\"abc\"",[28,156276,156277],{"class":34},")    ",[28,156279,156265],{"class":73},[14,156281,156282],{},"正确写法：",[18,156284,156286],{"className":20,"code":156285,"language":22,"meta":23,"style":23},"num = float(\"3.14\")\n",[25,156287,156288],{"__ignoreMap":23},[28,156289,156290,156292,156294,156296,156298,156300],{"class":30,"line":31},[28,156291,156181],{"class":34},[28,156293,83],{"class":42},[28,156295,110191],{"class":38},[28,156297,367],{"class":34},[28,156299,156106],{"class":735},[28,156301,228],{"class":34},[60,156303,156305],{"id":156304},"_27-运算符","2.7 运算符",[605,156307,156309],{"id":156308},"_271-算术运算符","2.7.1 算术运算符",[768,156311,156312,156323],{},[771,156313,156314],{},[774,156315,156316,156319,156321],{},[777,156317,156318],{},"运算符",[777,156320,26356],{},[777,156322,27978],{},[815,156324,156325,156339,156353,156367,156381,156395,156409],{},[774,156326,156327,156331,156334],{},[820,156328,156329],{},[25,156330,1104],{},[820,156332,156333],{},"加法",[820,156335,156336],{},[25,156337,156338],{},"1 + 2",[774,156340,156341,156345,156348],{},[820,156342,156343],{},[25,156344,445],{},[820,156346,156347],{},"减法",[820,156349,156350],{},[25,156351,156352],{},"5 - 3",[774,156354,156355,156359,156362],{},[820,156356,156357],{},[25,156358,256],{},[820,156360,156361],{},"乘法",[820,156363,156364],{},[25,156365,156366],{},"2 * 3",[774,156368,156369,156373,156376],{},[820,156370,156371],{},[25,156372,43],{},[820,156374,156375],{},"除法，结果是浮点数",[820,156377,156378],{},[25,156379,156380],{},"5 \u002F 2",[774,156382,156383,156387,156390],{},[820,156384,156385],{},[25,156386,33806],{},[820,156388,156389],{},"整除",[820,156391,156392],{},[25,156393,156394],{},"5 \u002F\u002F 2",[774,156396,156397,156401,156404],{},[820,156398,156399],{},[25,156400,954],{},[820,156402,156403],{},"取余",[820,156405,156406],{},[25,156407,156408],{},"5 % 2",[774,156410,156411,156415,156418],{},[820,156412,156413],{},[25,156414,11147],{},[820,156416,156417],{},"幂运算",[820,156419,156420],{},[25,156421,156422],{},"2 ** 3",[14,156424,15621],{},[18,156426,156428],{"className":20,"code":156427,"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,156429,156430,156448,156465,156482],{"__ignoreMap":23},[28,156431,156432,156434,156436,156438,156441,156443,156445],{"class":30,"line":31},[28,156433,30898],{"class":38},[28,156435,367],{"class":34},[28,156437,108],{"class":38},[28,156439,156440],{"class":42}," \u002F",[28,156442,15241],{"class":38},[28,156444,156055],{"class":34},[28,156446,156447],{"class":73},"# 2.5\n",[28,156449,156450,156452,156454,156456,156459,156461,156463],{"class":30,"line":77},[28,156451,30898],{"class":38},[28,156453,367],{"class":34},[28,156455,108],{"class":38},[28,156457,156458],{"class":42}," \u002F\u002F",[28,156460,15241],{"class":38},[28,156462,46285],{"class":34},[28,156464,156058],{"class":73},[28,156466,156467,156469,156471,156473,156476,156478,156480],{"class":30,"line":114},[28,156468,30898],{"class":38},[28,156470,367],{"class":34},[28,156472,108],{"class":38},[28,156474,156475],{"class":42}," %",[28,156477,15241],{"class":38},[28,156479,156055],{"class":34},[28,156481,156075],{"class":73},[28,156483,156484,156486,156488,156490,156493,156495,156497],{"class":30,"line":128},[28,156485,30898],{"class":38},[28,156487,367],{"class":34},[28,156489,93],{"class":38},[28,156491,156492],{"class":42}," **",[28,156494,78547],{"class":38},[28,156496,46285],{"class":34},[28,156498,156499],{"class":73},"# 8\n",[605,156501,156503],{"id":156502},"_272-赋值运算符","2.7.2 赋值运算符",[18,156505,156507],{"className":20,"code":156506,"language":22,"meta":23,"style":23},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[25,156508,156509,156517,156525,156533,156541],{"__ignoreMap":23},[28,156510,156511,156513,156515],{"class":30,"line":31},[28,156512,156181],{"class":34},[28,156514,83],{"class":42},[28,156516,58905],{"class":38},[28,156518,156519,156521,156523],{"class":30,"line":77},[28,156520,156181],{"class":34},[28,156522,9964],{"class":42},[28,156524,54904],{"class":38},[28,156526,156527,156529,156531],{"class":30,"line":114},[28,156528,156181],{"class":34},[28,156530,150646],{"class":42},[28,156532,48200],{"class":38},[28,156534,156535,156537,156539],{"class":30,"line":128},[28,156536,156181],{"class":34},[28,156538,137542],{"class":42},[28,156540,120430],{"class":38},[28,156542,156543,156545,156548],{"class":30,"line":393},[28,156544,156181],{"class":34},[28,156546,156547],{"class":42},"\u002F=",[28,156549,48200],{"class":38},[14,156551,156552],{},"等价关系：",[18,156554,156556],{"className":20,"code":156555,"language":22,"meta":23,"style":23},"num += 1\nnum = num + 1\n",[25,156557,156558,156566],{"__ignoreMap":23},[28,156559,156560,156562,156564],{"class":30,"line":31},[28,156561,156181],{"class":34},[28,156563,9964],{"class":42},[28,156565,56176],{"class":38},[28,156567,156568,156570,156572,156575,156577],{"class":30,"line":77},[28,156569,156181],{"class":34},[28,156571,83],{"class":42},[28,156573,156574],{"class":34}," num ",[28,156576,1104],{"class":42},[28,156578,56176],{"class":38},[14,156580,156581,156582,101412,156585,28871],{},"Python 没有 ",[25,156583,156584],{},"num++",[25,156586,156587],{},"num--",[605,156589,156591],{"id":156590},"_273-比较运算符","2.7.3 比较运算符",[14,156593,156594],{},"比较运算结果是布尔值。",[18,156596,156598],{"className":20,"code":156597,"language":22,"meta":23,"style":23},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[25,156599,156600,156614,156629,156643],{"__ignoreMap":23},[28,156601,156602,156604,156606,156608,156610,156612],{"class":30,"line":31},[28,156603,30898],{"class":38},[28,156605,367],{"class":34},[28,156607,225],{"class":38},[28,156609,26708],{"class":42},[28,156611,2638],{"class":38},[28,156613,228],{"class":34},[28,156615,156616,156618,156620,156622,156625,156627],{"class":30,"line":77},[28,156617,30898],{"class":38},[28,156619,367],{"class":34},[28,156621,225],{"class":38},[28,156623,156624],{"class":42}," >=",[28,156626,2528],{"class":38},[28,156628,228],{"class":34},[28,156630,156631,156633,156635,156637,156639,156641],{"class":30,"line":114},[28,156632,30898],{"class":38},[28,156634,367],{"class":34},[28,156636,225],{"class":38},[28,156638,101953],{"class":42},[28,156640,2573],{"class":38},[28,156642,228],{"class":34},[28,156644,156645,156647,156649,156651,156654,156656],{"class":30,"line":128},[28,156646,30898],{"class":38},[28,156648,367],{"class":34},[28,156650,225],{"class":38},[28,156652,156653],{"class":42}," !=",[28,156655,2573],{"class":38},[28,156657,228],{"class":34},[14,156659,156660,156661,156663,156664,28871],{},"注意：判断相等用 ",[25,156662,3439],{},"，赋值用 ",[25,156665,83],{},[18,156667,156669],{"className":20,"code":156668,"language":22,"meta":23,"style":23},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[25,156670,156671,156683],{"__ignoreMap":23},[28,156672,156673,156675,156677,156680],{"class":30,"line":31},[28,156674,146940],{"class":34},[28,156676,83],{"class":42},[28,156678,156679],{"class":38}," 18",[28,156681,156682],{"class":73},"       # 赋值\n",[28,156684,156685,156687,156689,156691],{"class":30,"line":77},[28,156686,146940],{"class":34},[28,156688,3439],{"class":42},[28,156690,156679],{"class":38},[28,156692,156693],{"class":73},"      # 判断是否相等\n",[605,156695,156697],{"id":156696},"_274-逻辑运算符","2.7.4 逻辑运算符",[768,156699,156700,156708],{},[771,156701,156702],{},[774,156703,156704,156706],{},[777,156705,156318],{},[777,156707,26356],{},[815,156709,156710,156719,156728],{},[774,156711,156712,156716],{},[820,156713,156714],{},[25,156715,30945],{},[820,156717,156718],{},"并且",[774,156720,156721,156725],{},[820,156722,156723],{},[25,156724,115484],{},[820,156726,156727],{},"或者",[774,156729,156730,156735],{},[820,156731,156732],{},[25,156733,156734],{},"not",[820,156736,156737],{},"取反",[18,156739,156741],{"className":20,"code":156740,"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,156742,156743,156751,156760,156764,156779,156793],{"__ignoreMap":23},[28,156744,156745,156747,156749],{"class":30,"line":31},[28,156746,146940],{"class":34},[28,156748,83],{"class":42},[28,156750,88542],{"class":38},[28,156752,156753,156756,156758],{"class":30,"line":77},[28,156754,156755],{"class":34},"has_ticket ",[28,156757,83],{"class":42},[28,156759,153993],{"class":38},[28,156761,156762],{"class":30,"line":114},[28,156763,2890],{"emptyLinePlaceholder":562},[28,156765,156766,156768,156770,156772,156774,156776],{"class":30,"line":128},[28,156767,30898],{"class":38},[28,156769,156162],{"class":34},[28,156771,2200],{"class":42},[28,156773,156679],{"class":38},[28,156775,120823],{"class":42},[28,156777,156778],{"class":34}," has_ticket)\n",[28,156780,156781,156783,156785,156787,156789,156791],{"class":30,"line":393},[28,156782,30898],{"class":38},[28,156784,156162],{"class":34},[28,156786,1529],{"class":42},[28,156788,156679],{"class":38},[28,156790,114595],{"class":42},[28,156792,156778],{"class":34},[28,156794,156795,156797,156799,156801],{"class":30,"line":409},[28,156796,30898],{"class":38},[28,156798,367],{"class":34},[28,156800,156734],{"class":42},[28,156802,156778],{"class":34},[60,156804,156806],{"id":156805},"_28-字符串定义","2.8 字符串定义",[14,156808,156809],{},"三种常见写法：",[18,156811,156813],{"className":20,"code":156812,"language":22,"meta":23,"style":23},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[25,156814,156815,156825,156834,156844],{"__ignoreMap":23},[28,156816,156817,156820,156822],{"class":30,"line":31},[28,156818,156819],{"class":34},"name1 ",[28,156821,83],{"class":42},[28,156823,156824],{"class":735}," '小明'\n",[28,156826,156827,156830,156832],{"class":30,"line":77},[28,156828,156829],{"class":34},"name2 ",[28,156831,83],{"class":42},[28,156833,149747],{"class":735},[28,156835,156836,156839,156841],{"class":30,"line":114},[28,156837,156838],{"class":34},"text ",[28,156840,83],{"class":42},[28,156842,156843],{"class":735}," \"\"\"这是多行字符串\n",[28,156845,156846],{"class":30,"line":128},[28,156847,156848],{"class":735},"可以换行\"\"\"\n",[14,156850,156851],{},"字符串中包含引号：",[18,156853,156855],{"className":20,"code":156854,"language":22,"meta":23,"style":23},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[25,156856,156857,156867,156877],{"__ignoreMap":23},[28,156858,156859,156862,156864],{"class":30,"line":31},[28,156860,156861],{"class":34},"msg ",[28,156863,83],{"class":42},[28,156865,156866],{"class":735}," \"他说:'你好'\"\n",[28,156868,156869,156872,156874],{"class":30,"line":77},[28,156870,156871],{"class":34},"msg2 ",[28,156873,83],{"class":42},[28,156875,156876],{"class":735}," '他说:\"你好\"'\n",[28,156878,156879,156882,156884,156887,156890,156893,156895],{"class":30,"line":114},[28,156880,156881],{"class":34},"msg3 ",[28,156883,83],{"class":42},[28,156885,156886],{"class":735}," \"他说:",[28,156888,156889],{"class":38},"\\\"",[28,156891,156892],{"class":735},"你好",[28,156894,156889],{"class":38},[28,156896,25620],{"class":735},[14,156898,156899],{},"常见转义字符：",[768,156901,156902,156911],{},[771,156903,156904],{},[774,156905,156906,156909],{},[777,156907,156908],{},"写法",[777,156910,101094],{},[815,156912,156913,156923,156932,156942,156951],{},[774,156914,156915,156920],{},[820,156916,156917],{},[25,156918,156919],{},"\\n",[820,156921,156922],{},"换行",[774,156924,156925,156929],{},[820,156926,156927],{},[25,156928,1721],{},[820,156930,156931],{},"制表符",[774,156933,156934,156939],{},[820,156935,156936],{},[25,156937,156938],{},"\\\\",[820,156940,156941],{},"反斜杠",[774,156943,156944,156948],{},[820,156945,156946],{},[25,156947,156889],{},[820,156949,156950],{},"双引号",[774,156952,156953,156958],{},[820,156954,156955],{},[25,156956,156957],{},"\\'",[820,156959,156960],{},"单引号",[60,156962,156964],{"id":156963},"_29-字符串拼接","2.9 字符串拼接",[18,156966,156968],{"className":20,"code":156967,"language":22,"meta":23,"style":23},"name = \"小明\"\nprint(\"你好，\" + name)\n",[25,156969,156970,156978],{"__ignoreMap":23},[28,156971,156972,156974,156976],{"class":30,"line":31},[28,156973,146930],{"class":34},[28,156975,83],{"class":42},[28,156977,149747],{"class":735},[28,156979,156980,156982,156984,156987,156989],{"class":30,"line":77},[28,156981,30898],{"class":38},[28,156983,367],{"class":34},[28,156985,156986],{"class":735},"\"你好，\"",[28,156988,46043],{"class":42},[28,156990,156991],{"class":34}," name)\n",[14,156993,156994],{},"字符串只能和字符串拼接：",[18,156996,156998],{"className":20,"code":156997,"language":22,"meta":23,"style":23},"age = 18\nprint(\"年龄:\" + str(age))\n",[25,156999,157000,157008],{"__ignoreMap":23},[28,157001,157002,157004,157006],{"class":30,"line":31},[28,157003,146940],{"class":34},[28,157005,83],{"class":42},[28,157007,146945],{"class":38},[28,157009,157010,157012,157014,157016,157018,157020],{"class":30,"line":77},[28,157011,30898],{"class":38},[28,157013,367],{"class":34},[28,157015,146911],{"class":735},[28,157017,46043],{"class":42},[28,157019,74396],{"class":38},[28,157021,157022],{"class":34},"(age))\n",[14,157024,157025],{},"更推荐使用格式化字符串。",[60,157027,157029],{"id":157028},"_210-字符串格式化","2.10 字符串格式化",[605,157031,157033],{"id":157032},"_2101-百分号格式化","2.10.1 百分号格式化",[18,157035,157037],{"className":20,"code":157036,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[25,157038,157039,157047,157055,157064,157068],{"__ignoreMap":23},[28,157040,157041,157043,157045],{"class":30,"line":31},[28,157042,146930],{"class":34},[28,157044,83],{"class":42},[28,157046,149747],{"class":735},[28,157048,157049,157051,157053],{"class":30,"line":77},[28,157050,146940],{"class":34},[28,157052,83],{"class":42},[28,157054,146945],{"class":38},[28,157056,157057,157059,157061],{"class":30,"line":114},[28,157058,155752],{"class":34},[28,157060,83],{"class":42},[28,157062,157063],{"class":38}," 95.5\n",[28,157065,157066],{"class":30,"line":128},[28,157067,2890],{"emptyLinePlaceholder":562},[28,157069,157070,157072,157074,157077,157080,157083,157086,157089,157092,157094,157096],{"class":30,"line":393},[28,157071,30898],{"class":38},[28,157073,367],{"class":34},[28,157075,157076],{"class":735},"\"姓名:",[28,157078,157079],{"class":38},"%s",[28,157081,157082],{"class":735}," 年龄:",[28,157084,157085],{"class":38},"%d",[28,157087,157088],{"class":735}," 分数:",[28,157090,157091],{"class":38},"%.1f",[28,157093,880],{"class":735},[28,157095,156475],{"class":42},[28,157097,157098],{"class":34}," (name, age, score))\n",[14,157100,157101],{},"常用占位符：",[768,157103,157104,157113],{},[771,157105,157106],{},[774,157107,157108,157111],{},[777,157109,157110],{},"占位符",[777,157112,26356],{},[815,157114,157115,157123,157131],{},[774,157116,157117,157121],{},[820,157118,157119],{},[25,157120,157079],{},[820,157122,155618],{},[774,157124,157125,157129],{},[820,157126,157127],{},[25,157128,157085],{},[820,157130,155596],{},[774,157132,157133,157138],{},[820,157134,157135],{},[25,157136,157137],{},"%f",[820,157139,155607],{},[14,157141,157142],{},"精度控制：",[18,157144,157146],{"className":20,"code":157145,"language":22,"meta":23,"style":23},"price = 12.3456\nprint(\"%.2f\" % price)\n",[25,157147,157148,157157],{"__ignoreMap":23},[28,157149,157150,157152,157154],{"class":30,"line":31},[28,157151,147075],{"class":34},[28,157153,83],{"class":42},[28,157155,157156],{"class":38}," 12.3456\n",[28,157158,157159,157161,157163,157165,157168,157170,157172],{"class":30,"line":77},[28,157160,30898],{"class":38},[28,157162,367],{"class":34},[28,157164,880],{"class":735},[28,157166,157167],{"class":38},"%.2f",[28,157169,880],{"class":735},[28,157171,156475],{"class":42},[28,157173,157174],{"class":34}," price)\n",[605,157176,157178],{"id":157177},"_2102-format方法","2.10.2 format方法",[18,157180,157182],{"className":20,"code":157181,"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,157183,157184,157192,157200,157204,157223,157243],{"__ignoreMap":23},[28,157185,157186,157188,157190],{"class":30,"line":31},[28,157187,146930],{"class":34},[28,157189,83],{"class":42},[28,157191,149747],{"class":735},[28,157193,157194,157196,157198],{"class":30,"line":77},[28,157195,146940],{"class":34},[28,157197,83],{"class":42},[28,157199,146945],{"class":38},[28,157201,157202],{"class":30,"line":114},[28,157203,2890],{"emptyLinePlaceholder":562},[28,157205,157206,157208,157210,157212,157214,157216,157218,157220],{"class":30,"line":128},[28,157207,30898],{"class":38},[28,157209,367],{"class":34},[28,157211,157076],{"class":735},[28,157213,32937],{"class":38},[28,157215,157082],{"class":735},[28,157217,32937],{"class":38},[28,157219,880],{"class":735},[28,157221,157222],{"class":34},".format(name, age))\n",[28,157224,157225,157227,157229,157231,157234,157236,157239,157241],{"class":30,"line":393},[28,157226,30898],{"class":38},[28,157228,367],{"class":34},[28,157230,157076],{"class":735},[28,157232,157233],{"class":38},"{0}",[28,157235,157082],{"class":735},[28,157237,157238],{"class":38},"{1}",[28,157240,880],{"class":735},[28,157242,157222],{"class":34},[28,157244,157245,157247,157249,157251,157254,157256,157259,157261,157264,157266,157268,157271,157273,157275],{"class":30,"line":409},[28,157246,30898],{"class":38},[28,157248,367],{"class":34},[28,157250,157076],{"class":735},[28,157252,157253],{"class":38},"{name}",[28,157255,157082],{"class":735},[28,157257,157258],{"class":38},"{age}",[28,157260,880],{"class":735},[28,157262,157263],{"class":34},".format(",[28,157265,80287],{"class":5704},[28,157267,83],{"class":42},[28,157269,157270],{"class":34},"name, ",[28,157272,70698],{"class":5704},[28,157274,83],{"class":42},[28,157276,157277],{"class":34},"age))\n",[605,157279,157281],{"id":157280},"_2103-f-string","2.10.3 f-string",[14,157283,157284],{},"推荐写法：",[18,157286,157288],{"className":20,"code":157287,"language":22,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[25,157289,157290,157298,157306,157314,157318],{"__ignoreMap":23},[28,157291,157292,157294,157296],{"class":30,"line":31},[28,157293,146930],{"class":34},[28,157295,83],{"class":42},[28,157297,149747],{"class":735},[28,157299,157300,157302,157304],{"class":30,"line":77},[28,157301,146940],{"class":34},[28,157303,83],{"class":42},[28,157305,146945],{"class":38},[28,157307,157308,157310,157312],{"class":30,"line":114},[28,157309,155752],{"class":34},[28,157311,83],{"class":42},[28,157313,157063],{"class":38},[28,157315,157316],{"class":30,"line":128},[28,157317,2890],{"emptyLinePlaceholder":562},[28,157319,157320,157322,157324,157326,157328,157330,157332,157334,157336,157338,157340,157342,157344,157346,157349,157352,157354,157356],{"class":30,"line":393},[28,157321,30898],{"class":38},[28,157323,367],{"class":34},[28,157325,686],{"class":42},[28,157327,157076],{"class":735},[28,157329,1515],{"class":38},[28,157331,80287],{"class":34},[28,157333,1565],{"class":38},[28,157335,157082],{"class":735},[28,157337,1515],{"class":38},[28,157339,70698],{"class":34},[28,157341,1565],{"class":38},[28,157343,157088],{"class":735},[28,157345,1515],{"class":38},[28,157347,157348],{"class":34},"score",[28,157350,157351],{"class":42},":.1f",[28,157353,1565],{"class":38},[28,157355,880],{"class":735},[28,157357,228],{"class":34},[14,157359,157360],{},"表达式也可以放进去：",[18,157362,157364],{"className":20,"code":157363,"language":22,"meta":23,"style":23},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[25,157365,157366,157374,157382],{"__ignoreMap":23},[28,157367,157368,157370,157372],{"class":30,"line":31},[28,157369,147075],{"class":34},[28,157371,83],{"class":42},[28,157373,147080],{"class":38},[28,157375,157376,157378,157380],{"class":30,"line":77},[28,157377,147085],{"class":34},[28,157379,83],{"class":42},[28,157381,54904],{"class":38},[28,157383,157384,157386,157388,157390,157393,157395,157397,157399,157402,157404,157407],{"class":30,"line":114},[28,157385,30898],{"class":38},[28,157387,367],{"class":34},[28,157389,686],{"class":42},[28,157391,157392],{"class":735},"\"总价:",[28,157394,1515],{"class":38},[28,157396,147075],{"class":34},[28,157398,256],{"class":42},[28,157400,157401],{"class":34}," count",[28,157403,1565],{"class":38},[28,157405,157406],{"class":735},"元\"",[28,157408,228],{"class":34},[60,157410,157412],{"id":157411},"_211-input输入","2.11 input输入",[14,157414,157415,157418],{},[25,157416,157417],{},"input()"," 会暂停程序，等待用户输入。",[18,157420,157422],{"className":20,"code":157421,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[25,157423,157424,157438],{"__ignoreMap":23},[28,157425,157426,157428,157430,157432,157434,157436],{"class":30,"line":31},[28,157427,146930],{"class":34},[28,157429,83],{"class":42},[28,157431,61082],{"class":38},[28,157433,367],{"class":34},[28,157435,152773],{"class":735},[28,157437,228],{"class":34},[28,157439,157440,157442,157444,157446,157449,157451,157453,157455,157457],{"class":30,"line":77},[28,157441,30898],{"class":38},[28,157443,367],{"class":34},[28,157445,686],{"class":42},[28,157447,157448],{"class":735},"\"你好，",[28,157450,1515],{"class":38},[28,157452,80287],{"class":34},[28,157454,1565],{"class":38},[28,157456,880],{"class":735},[28,157458,228],{"class":34},[14,157460,157461],{},"输入整数：",[18,157463,157465],{"className":20,"code":157464,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[25,157466,157467,157485],{"__ignoreMap":23},[28,157468,157469,157471,157473,157475,157477,157479,157481,157483],{"class":30,"line":31},[28,157470,146940],{"class":34},[28,157472,83],{"class":42},[28,157474,2872],{"class":38},[28,157476,367],{"class":34},[28,157478,54298],{"class":38},[28,157480,367],{"class":34},[28,157482,152788],{"class":735},[28,157484,30980],{"class":34},[28,157486,157487,157489,157491,157493,157496,157498,157500,157502,157505,157507],{"class":30,"line":77},[28,157488,30898],{"class":38},[28,157490,367],{"class":34},[28,157492,686],{"class":42},[28,157494,157495],{"class":735},"\"明年你",[28,157497,1515],{"class":38},[28,157499,146940],{"class":34},[28,157501,1104],{"class":42},[28,157503,157504],{"class":38}," 1}",[28,157506,149798],{"class":735},[28,157508,228],{"class":34},[14,157510,157511],{},"输入小数：",[18,157513,157515],{"className":20,"code":157514,"language":22,"meta":23,"style":23},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[25,157516,157517,157536],{"__ignoreMap":23},[28,157518,157519,157521,157523,157525,157527,157529,157531,157534],{"class":30,"line":31},[28,157520,155725],{"class":34},[28,157522,83],{"class":42},[28,157524,110191],{"class":38},[28,157526,367],{"class":34},[28,157528,54298],{"class":38},[28,157530,367],{"class":34},[28,157532,157533],{"class":735},"\"请输入身高:\"",[28,157535,30980],{"class":34},[28,157537,157538,157540,157542,157544,157547,157549,157551,157554,157556,157559],{"class":30,"line":77},[28,157539,30898],{"class":38},[28,157541,367],{"class":34},[28,157543,686],{"class":42},[28,157545,157546],{"class":735},"\"身高:",[28,157548,1515],{"class":38},[28,157550,25468],{"class":34},[28,157552,157553],{"class":42},":.2f",[28,157555,1565],{"class":38},[28,157557,157558],{"class":735},"米\"",[28,157560,228],{"class":34},[60,157562,157564],{"id":157563},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157566,123686],{},[588,157568,157569,157572,157575,157578],{},[591,157570,157571],{},"输入商品单价。",[591,157573,157574],{},"输入购买数量。",[591,157576,157577],{},"输入折扣，例如 0.8 表示八折。",[591,157579,157580],{},"输出最终金额，保留两位小数。",[14,157582,10521],{},[18,157584,157586],{"className":20,"code":157585,"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,157587,157588,157607,157626,157646,157650,157670,157674,157697,157718,157740],{"__ignoreMap":23},[28,157589,157590,157592,157594,157596,157598,157600,157602,157605],{"class":30,"line":31},[28,157591,147075],{"class":34},[28,157593,83],{"class":42},[28,157595,110191],{"class":38},[28,157597,367],{"class":34},[28,157599,54298],{"class":38},[28,157601,367],{"class":34},[28,157603,157604],{"class":735},"\"请输入商品单价:\"",[28,157606,30980],{"class":34},[28,157608,157609,157611,157613,157615,157617,157619,157621,157624],{"class":30,"line":77},[28,157610,147085],{"class":34},[28,157612,83],{"class":42},[28,157614,2872],{"class":38},[28,157616,367],{"class":34},[28,157618,54298],{"class":38},[28,157620,367],{"class":34},[28,157622,157623],{"class":735},"\"请输入购买数量:\"",[28,157625,30980],{"class":34},[28,157627,157628,157631,157633,157635,157637,157639,157641,157644],{"class":30,"line":114},[28,157629,157630],{"class":34},"discount ",[28,157632,83],{"class":42},[28,157634,110191],{"class":38},[28,157636,367],{"class":34},[28,157638,54298],{"class":38},[28,157640,367],{"class":34},[28,157642,157643],{"class":735},"\"请输入折扣:\"",[28,157645,30980],{"class":34},[28,157647,157648],{"class":30,"line":128},[28,157649,2890],{"emptyLinePlaceholder":562},[28,157651,157652,157655,157657,157660,157662,157665,157667],{"class":30,"line":393},[28,157653,157654],{"class":34},"total ",[28,157656,83],{"class":42},[28,157658,157659],{"class":34}," price ",[28,157661,256],{"class":42},[28,157663,157664],{"class":34}," count ",[28,157666,256],{"class":42},[28,157668,157669],{"class":34}," discount\n",[28,157671,157672],{"class":30,"line":409},[28,157673,2890],{"emptyLinePlaceholder":562},[28,157675,157676,157678,157680,157682,157685,157687,157689,157691,157693,157695],{"class":30,"line":1711},[28,157677,30898],{"class":38},[28,157679,367],{"class":34},[28,157681,686],{"class":42},[28,157683,157684],{"class":735},"\"商品单价:",[28,157686,1515],{"class":38},[28,157688,80292],{"class":34},[28,157690,157553],{"class":42},[28,157692,1565],{"class":38},[28,157694,880],{"class":735},[28,157696,228],{"class":34},[28,157698,157699,157701,157703,157705,157708,157710,157712,157714,157716],{"class":30,"line":1802},[28,157700,30898],{"class":38},[28,157702,367],{"class":34},[28,157704,686],{"class":42},[28,157706,157707],{"class":735},"\"购买数量:",[28,157709,1515],{"class":38},[28,157711,84911],{"class":34},[28,157713,1565],{"class":38},[28,157715,880],{"class":735},[28,157717,228],{"class":34},[28,157719,157720,157722,157724,157726,157729,157731,157734,157736,157738],{"class":30,"line":1808},[28,157721,30898],{"class":38},[28,157723,367],{"class":34},[28,157725,686],{"class":42},[28,157727,157728],{"class":735},"\"折扣:",[28,157730,1515],{"class":38},[28,157732,157733],{"class":34},"discount",[28,157735,1565],{"class":38},[28,157737,880],{"class":735},[28,157739,228],{"class":34},[28,157741,157742,157744,157746,157748,157751,157753,157756,157758,157760,157762],{"class":30,"line":1820},[28,157743,30898],{"class":38},[28,157745,367],{"class":34},[28,157747,686],{"class":42},[28,157749,157750],{"class":735},"\"应付金额:",[28,157752,1515],{"class":38},[28,157754,157755],{"class":34},"total",[28,157757,157553],{"class":42},[28,157759,1565],{"class":38},[28,157761,157406],{"class":735},[28,157763,228],{"class":34},[60,157765,157767],{"id":157766},"_213-易错点","2.13 易错点",[588,157769,157770,157775,157781,157789,157792],{},[591,157771,157772,157774],{},[25,157773,157417],{}," 的结果是字符串，做运算前要转换。",[591,157776,157777,157778,28871],{},"字符串拼接时，数字要先 ",[25,157779,157780],{},"str()",[591,157782,157783,157785,157786,157788],{},[25,157784,83],{}," 是赋值，",[25,157787,3439],{}," 是比较。",[591,157790,157791],{},"Python 没有自增自减运算符。",[591,157793,157794],{},"浮点数计算可能有精度误差：",[18,157796,157798],{"className":20,"code":157797,"language":22,"meta":23,"style":23},"print(0.1 + 0.2)\n",[25,157799,157800],{"__ignoreMap":23},[28,157801,157802,157804,157806,157808,157810,157813],{"class":30,"line":31},[28,157803,30898],{"class":38},[28,157805,367],{"class":34},[28,157807,86687],{"class":38},[28,157809,46043],{"class":42},[28,157811,157812],{"class":38}," 0.2",[28,157814,228],{"class":34},[14,157816,157817,157818,157821],{},"金额计算如果要求严格，可以后续学习 ",[25,157819,157820],{},"decimal"," 模块。",[60,157823,157825],{"id":157824},"_214-本章练习","2.14 本章练习",[588,157827,157828,157831,157834,157837,157840],{},[591,157829,157830],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[591,157832,157833],{},"输入圆的半径，计算面积，保留两位小数。",[591,157835,157836],{},"输入工资和奖金，计算总收入。",[591,157838,157839],{},"输入摄氏温度，转换为华氏温度。",[591,157841,157842],{},"写一个 BMI 计算程序：",[18,157844,157847],{"className":157845,"code":157846,"language":5675,"meta":23},[5673],"BMI = 体重kg \u002F 身高m ** 2\n",[25,157848,157846],{"__ignoreMap":23},[547,157850,157851],{},"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":77,"depth":77,"links":157853},[157854,157855,157856,157857,157858,157859,157860,157866,157867,157868,157873,157874,157875,157876],{"id":155415,"depth":77,"text":155416},{"id":155524,"depth":77,"text":155525},{"id":155695,"depth":77,"text":155696},{"id":155772,"depth":77,"text":155773},{"id":51208,"depth":77,"text":51209},{"id":156078,"depth":77,"text":156079},{"id":156304,"depth":77,"text":156305,"children":157861},[157862,157863,157864,157865],{"id":156308,"depth":114,"text":156309},{"id":156502,"depth":114,"text":156503},{"id":156590,"depth":114,"text":156591},{"id":156696,"depth":114,"text":156697},{"id":156805,"depth":77,"text":156806},{"id":156963,"depth":77,"text":156964},{"id":157028,"depth":77,"text":157029,"children":157869},[157870,157871,157872],{"id":157032,"depth":114,"text":157033},{"id":157177,"depth":114,"text":157178},{"id":157280,"depth":114,"text":157281},{"id":157411,"depth":77,"text":157412},{"id":157563,"depth":77,"text":157564},{"id":157766,"depth":77,"text":157767},{"id":157824,"depth":77,"text":157825},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155407,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157883,"title":157884,"body":157885,"description":559,"extension":560,"meta":159521,"navigation":562,"path":159522,"seo":159523,"stem":159524,"__hash__":159525},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157886,"toc":159502},[157887,157890,157894,157897,157912,157915,157943,157947,157997,157999,158015,158018,158044,158047,158051,158118,158121,158137,158141,158144,158262,158265,158272,158321,158327,158331,158334,158447,158450,158454,158458,158461,158511,158515,158518,158568,158572,158575,158613,158617,158620,158666,158669,158704,158708,158713,158716,158762,158764,158831,158835,158841,158952,158961,158965,158967,158978,158980,159146,159150,159152,159166,159168,159382,159386,159405,159422,159425,159471,159475,159499],[10,157888,157884],{"id":157889},"_3-判断语句",[60,157891,157893],{"id":157892},"_31-布尔值","3.1 布尔值",[14,157895,157896],{},"判断语句依赖布尔值：",[18,157898,157900],{"className":20,"code":157899,"language":22,"meta":23,"style":23},"True\nFalse\n",[25,157901,157902,157907],{"__ignoreMap":23},[28,157903,157904],{"class":30,"line":31},[28,157905,157906],{"class":38},"True\n",[28,157908,157909],{"class":30,"line":77},[28,157910,157911],{"class":38},"False\n",[14,157913,157914],{},"比较表达式会产生布尔值：",[18,157916,157918],{"className":20,"code":157917,"language":22,"meta":23,"style":23},"age = 18\nprint(age >= 18)  # True\n",[25,157919,157920,157928],{"__ignoreMap":23},[28,157921,157922,157924,157926],{"class":30,"line":31},[28,157923,146940],{"class":34},[28,157925,83],{"class":42},[28,157927,146945],{"class":38},[28,157929,157930,157932,157934,157936,157938,157940],{"class":30,"line":77},[28,157931,30898],{"class":38},[28,157933,156162],{"class":34},[28,157935,2200],{"class":42},[28,157937,156679],{"class":38},[28,157939,46285],{"class":34},[28,157941,157942],{"class":73},"# True\n",[60,157944,157946],{"id":157945},"_32-if基础语法","3.2 if基础语法",[18,157948,157950],{"className":20,"code":157949,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[25,157951,157952,157970,157974,157986],{"__ignoreMap":23},[28,157953,157954,157956,157958,157960,157962,157964,157966,157968],{"class":30,"line":31},[28,157955,146940],{"class":34},[28,157957,83],{"class":42},[28,157959,2872],{"class":38},[28,157961,367],{"class":34},[28,157963,54298],{"class":38},[28,157965,367],{"class":34},[28,157967,152788],{"class":735},[28,157969,30980],{"class":34},[28,157971,157972],{"class":30,"line":77},[28,157973,2890],{"emptyLinePlaceholder":562},[28,157975,157976,157978,157980,157982,157984],{"class":30,"line":114},[28,157977,2021],{"class":42},[28,157979,16193],{"class":34},[28,157981,2200],{"class":42},[28,157983,156679],{"class":38},[28,157985,4227],{"class":34},[28,157987,157988,157990,157992,157995],{"class":30,"line":128},[28,157989,31780],{"class":38},[28,157991,367],{"class":34},[28,157993,157994],{"class":735},"\"可以进入网吧\"",[28,157996,228],{"class":34},[14,157998,9513],{},[588,158000,158001,158006,158009,158012],{},[591,158002,158003,158005],{},[25,158004,2021],{}," 后面是条件表达式。",[591,158007,158008],{},"条件后面必须写冒号。",[591,158010,158011],{},"条件成立时执行缩进代码块。",[591,158013,158014],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158016,158017],{},"错误示例：",[18,158019,158021],{"className":20,"code":158020,"language":22,"meta":23,"style":23},"if age >= 18\n    print(\"可以进入\")\n",[25,158022,158023,158033],{"__ignoreMap":23},[28,158024,158025,158027,158029,158031],{"class":30,"line":31},[28,158026,2021],{"class":42},[28,158028,16193],{"class":34},[28,158030,2200],{"class":42},[28,158032,146945],{"class":38},[28,158034,158035,158037,158039,158042],{"class":30,"line":77},[28,158036,31780],{"class":38},[28,158038,367],{"class":34},[28,158040,158041],{"class":735},"\"可以进入\"",[28,158043,228],{"class":34},[14,158045,158046],{},"缺少冒号。",[60,158048,158050],{"id":158049},"_33-if-else","3.3 if else",[18,158052,158054],{"className":20,"code":158053,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[25,158055,158056,158074,158078,158090,158101,158107],{"__ignoreMap":23},[28,158057,158058,158060,158062,158064,158066,158068,158070,158072],{"class":30,"line":31},[28,158059,146940],{"class":34},[28,158061,83],{"class":42},[28,158063,2872],{"class":38},[28,158065,367],{"class":34},[28,158067,54298],{"class":38},[28,158069,367],{"class":34},[28,158071,152788],{"class":735},[28,158073,30980],{"class":34},[28,158075,158076],{"class":30,"line":77},[28,158077,2890],{"emptyLinePlaceholder":562},[28,158079,158080,158082,158084,158086,158088],{"class":30,"line":114},[28,158081,2021],{"class":42},[28,158083,16193],{"class":34},[28,158085,2200],{"class":42},[28,158087,156679],{"class":38},[28,158089,4227],{"class":34},[28,158091,158092,158094,158096,158099],{"class":30,"line":128},[28,158093,31780],{"class":38},[28,158095,367],{"class":34},[28,158097,158098],{"class":735},"\"成年人\"",[28,158100,228],{"class":34},[28,158102,158103,158105],{"class":30,"line":393},[28,158104,2191],{"class":42},[28,158106,4227],{"class":34},[28,158108,158109,158111,158113,158116],{"class":30,"line":409},[28,158110,31780],{"class":38},[28,158112,367],{"class":34},[28,158114,158115],{"class":735},"\"未成年人\"",[28,158117,228],{"class":34},[14,158119,158120],{},"执行逻辑：",[588,158122,158123,158129,158134],{},[591,158124,158125,158126,158128],{},"条件成立，执行 ",[25,158127,2021],{}," 代码块。",[591,158130,158131,158132,158128],{},"条件不成立，执行 ",[25,158133,2191],{},[591,158135,158136],{},"两个代码块只会执行其中一个。",[60,158138,158140],{"id":158139},"_34-if-elif-else","3.4 if elif else",[14,158142,158143],{},"多条件判断：",[18,158145,158147],{"className":20,"code":158146,"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,158148,158149,158167,158171,158185,158196,158210,158221,158234,158245,158251],{"__ignoreMap":23},[28,158150,158151,158153,158155,158157,158159,158161,158163,158165],{"class":30,"line":31},[28,158152,155752],{"class":34},[28,158154,83],{"class":42},[28,158156,2872],{"class":38},[28,158158,367],{"class":34},[28,158160,54298],{"class":38},[28,158162,367],{"class":34},[28,158164,152803],{"class":735},[28,158166,30980],{"class":34},[28,158168,158169],{"class":30,"line":77},[28,158170,2890],{"emptyLinePlaceholder":562},[28,158172,158173,158175,158178,158180,158183],{"class":30,"line":114},[28,158174,2021],{"class":42},[28,158176,158177],{"class":34}," score ",[28,158179,2200],{"class":42},[28,158181,158182],{"class":38}," 90",[28,158184,4227],{"class":34},[28,158186,158187,158189,158191,158194],{"class":30,"line":128},[28,158188,31780],{"class":38},[28,158190,367],{"class":34},[28,158192,158193],{"class":735},"\"优秀\"",[28,158195,228],{"class":34},[28,158197,158198,158201,158203,158205,158208],{"class":30,"line":393},[28,158199,158200],{"class":42},"elif",[28,158202,158177],{"class":34},[28,158204,2200],{"class":42},[28,158206,158207],{"class":38}," 80",[28,158209,4227],{"class":34},[28,158211,158212,158214,158216,158219],{"class":30,"line":409},[28,158213,31780],{"class":38},[28,158215,367],{"class":34},[28,158217,158218],{"class":735},"\"良好\"",[28,158220,228],{"class":34},[28,158222,158223,158225,158227,158229,158232],{"class":30,"line":1711},[28,158224,158200],{"class":42},[28,158226,158177],{"class":34},[28,158228,2200],{"class":42},[28,158230,158231],{"class":38}," 60",[28,158233,4227],{"class":34},[28,158235,158236,158238,158240,158243],{"class":30,"line":1802},[28,158237,31780],{"class":38},[28,158239,367],{"class":34},[28,158241,158242],{"class":735},"\"及格\"",[28,158244,228],{"class":34},[28,158246,158247,158249],{"class":30,"line":1808},[28,158248,2191],{"class":42},[28,158250,4227],{"class":34},[28,158252,158253,158255,158257,158260],{"class":30,"line":1820},[28,158254,31780],{"class":38},[28,158256,367],{"class":34},[28,158258,158259],{"class":735},"\"不及格\"",[28,158261,228],{"class":34},[14,158263,158264],{},"注意判断顺序很重要。",[14,158266,158267,158268,158271],{},"如果把 ",[25,158269,158270],{},"score >= 60"," 放在最前面：",[18,158273,158275],{"className":20,"code":158274,"language":22,"meta":23,"style":23},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[25,158276,158277,158289,158299,158311],{"__ignoreMap":23},[28,158278,158279,158281,158283,158285,158287],{"class":30,"line":31},[28,158280,2021],{"class":42},[28,158282,158177],{"class":34},[28,158284,2200],{"class":42},[28,158286,158231],{"class":38},[28,158288,4227],{"class":34},[28,158290,158291,158293,158295,158297],{"class":30,"line":77},[28,158292,31780],{"class":38},[28,158294,367],{"class":34},[28,158296,158242],{"class":735},[28,158298,228],{"class":34},[28,158300,158301,158303,158305,158307,158309],{"class":30,"line":114},[28,158302,158200],{"class":42},[28,158304,158177],{"class":34},[28,158306,2200],{"class":42},[28,158308,158182],{"class":38},[28,158310,4227],{"class":34},[28,158312,158313,158315,158317,158319],{"class":30,"line":128},[28,158314,31780],{"class":38},[28,158316,367],{"class":34},[28,158318,158193],{"class":735},[28,158320,228],{"class":34},[14,158322,158323,158324,158326],{},"成绩 95 会先满足 ",[25,158325,158270],{},"，后面的优秀分支就不会执行。",[60,158328,158330],{"id":158329},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158332,158333],{},"嵌套判断就是在一个判断内部再写判断。",[18,158335,158337],{"className":20,"code":158336,"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,158338,158339,158357,158372,158376,158388,158402,158412,158419,158430,158436],{"__ignoreMap":23},[28,158340,158341,158343,158345,158347,158349,158351,158353,158355],{"class":30,"line":31},[28,158342,146940],{"class":34},[28,158344,83],{"class":42},[28,158346,2872],{"class":38},[28,158348,367],{"class":34},[28,158350,54298],{"class":38},[28,158352,367],{"class":34},[28,158354,152788],{"class":735},[28,158356,30980],{"class":34},[28,158358,158359,158361,158363,158365,158367,158370],{"class":30,"line":77},[28,158360,156755],{"class":34},[28,158362,83],{"class":42},[28,158364,61082],{"class":38},[28,158366,367],{"class":34},[28,158368,158369],{"class":735},"\"是否有票(y\u002Fn):\"",[28,158371,228],{"class":34},[28,158373,158374],{"class":30,"line":114},[28,158375,2890],{"emptyLinePlaceholder":562},[28,158377,158378,158380,158382,158384,158386],{"class":30,"line":128},[28,158379,2021],{"class":42},[28,158381,16193],{"class":34},[28,158383,2200],{"class":42},[28,158385,156679],{"class":38},[28,158387,4227],{"class":34},[28,158389,158390,158392,158395,158397,158400],{"class":30,"line":393},[28,158391,3590],{"class":42},[28,158393,158394],{"class":34}," has_ticket ",[28,158396,3439],{"class":42},[28,158398,158399],{"class":735}," \"y\"",[28,158401,4227],{"class":34},[28,158403,158404,158406,158408,158410],{"class":30,"line":409},[28,158405,32929],{"class":38},[28,158407,367],{"class":34},[28,158409,158041],{"class":735},[28,158411,228],{"class":34},[28,158413,158414,158417],{"class":30,"line":1711},[28,158415,158416],{"class":42},"    else",[28,158418,4227],{"class":34},[28,158420,158421,158423,158425,158428],{"class":30,"line":1802},[28,158422,32929],{"class":38},[28,158424,367],{"class":34},[28,158426,158427],{"class":735},"\"请先买票\"",[28,158429,228],{"class":34},[28,158431,158432,158434],{"class":30,"line":1808},[28,158433,2191],{"class":42},[28,158435,4227],{"class":34},[28,158437,158438,158440,158442,158445],{"class":30,"line":1820},[28,158439,31780],{"class":38},[28,158441,367],{"class":34},[28,158443,158444],{"class":735},"\"未成年人禁止进入\"",[28,158446,228],{"class":34},[14,158448,158449],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[60,158451,158453],{"id":158452},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[605,158455,158457],{"id":158456},"_361-and","3.6.1 and",[14,158459,158460],{},"两个条件都成立才成立。",[18,158462,158464],{"className":20,"code":158463,"language":22,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[25,158465,158466,158474,158482,158486,158501],{"__ignoreMap":23},[28,158467,158468,158470,158472],{"class":30,"line":31},[28,158469,146940],{"class":34},[28,158471,83],{"class":42},[28,158473,88542],{"class":38},[28,158475,158476,158478,158480],{"class":30,"line":77},[28,158477,156755],{"class":34},[28,158479,83],{"class":42},[28,158481,153993],{"class":38},[28,158483,158484],{"class":30,"line":114},[28,158485,2890],{"emptyLinePlaceholder":562},[28,158487,158488,158490,158492,158494,158496,158498],{"class":30,"line":128},[28,158489,2021],{"class":42},[28,158491,16193],{"class":34},[28,158493,2200],{"class":42},[28,158495,156679],{"class":38},[28,158497,120823],{"class":42},[28,158499,158500],{"class":34}," has_ticket:\n",[28,158502,158503,158505,158507,158509],{"class":30,"line":393},[28,158504,31780],{"class":38},[28,158506,367],{"class":34},[28,158508,158041],{"class":735},[28,158510,228],{"class":34},[605,158512,158514],{"id":158513},"_362-or","3.6.2 or",[14,158516,158517],{},"只要一个条件成立就成立。",[18,158519,158521],{"className":20,"code":158520,"language":22,"meta":23,"style":23},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[25,158522,158523,158532,158541,158545,158557],{"__ignoreMap":23},[28,158524,158525,158528,158530],{"class":30,"line":31},[28,158526,158527],{"class":34},"is_vip ",[28,158529,83],{"class":42},[28,158531,126201],{"class":38},[28,158533,158534,158537,158539],{"class":30,"line":77},[28,158535,158536],{"class":34},"coupon ",[28,158538,83],{"class":42},[28,158540,153993],{"class":38},[28,158542,158543],{"class":30,"line":114},[28,158544,2890],{"emptyLinePlaceholder":562},[28,158546,158547,158549,158552,158554],{"class":30,"line":128},[28,158548,2021],{"class":42},[28,158550,158551],{"class":34}," is_vip ",[28,158553,115484],{"class":42},[28,158555,158556],{"class":34}," coupon:\n",[28,158558,158559,158561,158563,158566],{"class":30,"line":393},[28,158560,31780],{"class":38},[28,158562,367],{"class":34},[28,158564,158565],{"class":735},"\"可以享受优惠\"",[28,158567,228],{"class":34},[605,158569,158571],{"id":158570},"_363-not","3.6.3 not",[14,158573,158574],{},"取反。",[18,158576,158578],{"className":20,"code":158577,"language":22,"meta":23,"style":23},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[25,158579,158580,158589,158593,158602],{"__ignoreMap":23},[28,158581,158582,158585,158587],{"class":30,"line":31},[28,158583,158584],{"class":34},"is_closed ",[28,158586,83],{"class":42},[28,158588,126201],{"class":38},[28,158590,158591],{"class":30,"line":77},[28,158592,2890],{"emptyLinePlaceholder":562},[28,158594,158595,158597,158599],{"class":30,"line":114},[28,158596,2021],{"class":42},[28,158598,39407],{"class":42},[28,158600,158601],{"class":34}," is_closed:\n",[28,158603,158604,158606,158608,158611],{"class":30,"line":128},[28,158605,31780],{"class":38},[28,158607,367],{"class":34},[28,158609,158610],{"class":735},"\"店铺营业中\"",[28,158612,228],{"class":34},[60,158614,158616],{"id":158615},"_37-链式比较","3.7 链式比较",[14,158618,158619],{},"Python 支持链式比较：",[18,158621,158623],{"className":20,"code":158622,"language":22,"meta":23,"style":23},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158624,158625,158634,158638,158655],{"__ignoreMap":23},[28,158626,158627,158629,158631],{"class":30,"line":31},[28,158628,155752],{"class":34},[28,158630,83],{"class":42},[28,158632,158633],{"class":38}," 85\n",[28,158635,158636],{"class":30,"line":77},[28,158637,2890],{"emptyLinePlaceholder":562},[28,158639,158640,158642,158644,158647,158649,158651,158653],{"class":30,"line":114},[28,158641,2021],{"class":42},[28,158643,4581],{"class":38},[28,158645,158646],{"class":42}," \u003C=",[28,158648,158177],{"class":34},[28,158650,2078],{"class":42},[28,158652,6242],{"class":38},[28,158654,4227],{"class":34},[28,158656,158657,158659,158661,158664],{"class":30,"line":128},[28,158658,31780],{"class":38},[28,158660,367],{"class":34},[28,158662,158663],{"class":735},"\"成绩合法\"",[28,158665,228],{"class":34},[14,158667,158668],{},"等价于：",[18,158670,158672],{"className":20,"code":158671,"language":22,"meta":23,"style":23},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158673,158674,158694],{"__ignoreMap":23},[28,158675,158676,158678,158680,158682,158684,158686,158688,158690,158692],{"class":30,"line":31},[28,158677,2021],{"class":42},[28,158679,158177],{"class":34},[28,158681,2200],{"class":42},[28,158683,4581],{"class":38},[28,158685,120823],{"class":42},[28,158687,158177],{"class":34},[28,158689,2078],{"class":42},[28,158691,6242],{"class":38},[28,158693,4227],{"class":34},[28,158695,158696,158698,158700,158702],{"class":30,"line":77},[28,158697,31780],{"class":38},[28,158699,367],{"class":34},[28,158701,158663],{"class":735},[28,158703,228],{"class":34},[60,158705,158707],{"id":158706},"_38-真值和假值","3.8 真值和假值",[14,158709,116861,158710,158712],{},[25,158711,2021],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158714,158715],{},"假值：",[18,158717,158719],{"className":20,"code":158718,"language":22,"meta":23,"style":23},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[25,158720,158721,158725,158730,158734,158738,158743,158747,158751,158756],{"__ignoreMap":23},[28,158722,158723],{"class":30,"line":31},[28,158724,157911],{"class":38},[28,158726,158727],{"class":30,"line":77},[28,158728,158729],{"class":38},"None\n",[28,158731,158732],{"class":30,"line":114},[28,158733,3574],{"class":38},[28,158735,158736],{"class":30,"line":128},[28,158737,32821],{"class":38},[28,158739,158740],{"class":30,"line":393},[28,158741,158742],{"class":735},"\"\"\n",[28,158744,158745],{"class":30,"line":409},[28,158746,32836],{"class":34},[28,158748,158749],{"class":30,"line":1711},[28,158750,2466],{"class":34},[28,158752,158753],{"class":30,"line":1802},[28,158754,158755],{"class":34},"{}\n",[28,158757,158758,158760],{"class":30,"line":1808},[28,158759,155684],{"class":38},[28,158761,2466],{"class":34},[14,158763,15621],{},[18,158765,158767],{"className":20,"code":158766,"language":22,"meta":23,"style":23},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[25,158768,158769,158783,158787,158794,158814,158820],{"__ignoreMap":23},[28,158770,158771,158773,158775,158777,158779,158781],{"class":30,"line":31},[28,158772,146930],{"class":34},[28,158774,83],{"class":42},[28,158776,61082],{"class":38},[28,158778,367],{"class":34},[28,158780,152773],{"class":735},[28,158782,228],{"class":34},[28,158784,158785],{"class":30,"line":77},[28,158786,2890],{"emptyLinePlaceholder":562},[28,158788,158789,158791],{"class":30,"line":114},[28,158790,2021],{"class":42},[28,158792,158793],{"class":34}," name:\n",[28,158795,158796,158798,158800,158802,158804,158806,158808,158810,158812],{"class":30,"line":128},[28,158797,31780],{"class":38},[28,158799,367],{"class":34},[28,158801,686],{"class":42},[28,158803,157448],{"class":735},[28,158805,1515],{"class":38},[28,158807,80287],{"class":34},[28,158809,1565],{"class":38},[28,158811,880],{"class":735},[28,158813,228],{"class":34},[28,158815,158816,158818],{"class":30,"line":393},[28,158817,2191],{"class":42},[28,158819,4227],{"class":34},[28,158821,158822,158824,158826,158829],{"class":30,"line":409},[28,158823,31780],{"class":38},[28,158825,367],{"class":34},[28,158827,158828],{"class":735},"\"姓名不能为空\"",[28,158830,228],{"class":34},[60,158832,158834],{"id":158833},"_39-match语句","3.9 match语句",[14,158836,158837,158838,158840],{},"Python 3.10 开始支持 ",[25,158839,71742],{},"。它适合处理固定选项。",[18,158842,158844],{"className":20,"code":158843,"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,158845,158846,158862,158866,158873,158883,158894,158903,158914,158923,158934,158941],{"__ignoreMap":23},[28,158847,158848,158851,158853,158855,158857,158860],{"class":30,"line":31},[28,158849,158850],{"class":34},"command ",[28,158852,83],{"class":42},[28,158854,61082],{"class":38},[28,158856,367],{"class":34},[28,158858,158859],{"class":735},"\"请输入命令:\"",[28,158861,228],{"class":34},[28,158863,158864],{"class":30,"line":77},[28,158865,2890],{"emptyLinePlaceholder":562},[28,158867,158868,158870],{"class":30,"line":114},[28,158869,71742],{"class":42},[28,158871,158872],{"class":34}," command:\n",[28,158874,158875,158878,158881],{"class":30,"line":128},[28,158876,158877],{"class":42},"    case",[28,158879,158880],{"class":735}," \"start\"",[28,158882,4227],{"class":34},[28,158884,158885,158887,158889,158892],{"class":30,"line":393},[28,158886,32929],{"class":38},[28,158888,367],{"class":34},[28,158890,158891],{"class":735},"\"启动\"",[28,158893,228],{"class":34},[28,158895,158896,158898,158901],{"class":30,"line":409},[28,158897,158877],{"class":42},[28,158899,158900],{"class":735}," \"stop\"",[28,158902,4227],{"class":34},[28,158904,158905,158907,158909,158912],{"class":30,"line":1711},[28,158906,32929],{"class":38},[28,158908,367],{"class":34},[28,158910,158911],{"class":735},"\"停止\"",[28,158913,228],{"class":34},[28,158915,158916,158918,158921],{"class":30,"line":1802},[28,158917,158877],{"class":42},[28,158919,158920],{"class":735}," \"restart\"",[28,158922,4227],{"class":34},[28,158924,158925,158927,158929,158932],{"class":30,"line":1808},[28,158926,32929],{"class":38},[28,158928,367],{"class":34},[28,158930,158931],{"class":735},"\"重启\"",[28,158933,228],{"class":34},[28,158935,158936,158938],{"class":30,"line":1820},[28,158937,158877],{"class":42},[28,158939,158940],{"class":34}," _:\n",[28,158942,158943,158945,158947,158950],{"class":30,"line":2102},[28,158944,32929],{"class":38},[28,158946,367],{"class":34},[28,158948,158949],{"class":735},"\"未知命令\"",[28,158951,228],{"class":34},[14,158953,158954,158955,158957,158958,158960],{},"入门阶段掌握 ",[25,158956,155052],{}," 更重要，",[25,158959,71742],{}," 可以作为补充。",[60,158962,158964],{"id":158963},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158966,123686],{},[588,158968,158969,158972,158975],{},[591,158970,158971],{},"输入成绩。",[591,158973,158974],{},"判断成绩是否合法。",[591,158976,158977],{},"输出等级。",[14,158979,10521],{},[18,158981,158983],{"className":20,"code":158982,"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,158984,158985,159003,159007,159025,159036,159048,159059,159071,159082,159095,159106,159118,159129,159135],{"__ignoreMap":23},[28,158986,158987,158989,158991,158993,158995,158997,158999,159001],{"class":30,"line":31},[28,158988,155752],{"class":34},[28,158990,83],{"class":42},[28,158992,110191],{"class":38},[28,158994,367],{"class":34},[28,158996,54298],{"class":38},[28,158998,367],{"class":34},[28,159000,152803],{"class":735},[28,159002,30980],{"class":34},[28,159004,159005],{"class":30,"line":77},[28,159006,2890],{"emptyLinePlaceholder":562},[28,159008,159009,159011,159013,159015,159017,159019,159021,159023],{"class":30,"line":114},[28,159010,2021],{"class":42},[28,159012,39407],{"class":42},[28,159014,4581],{"class":38},[28,159016,158646],{"class":42},[28,159018,158177],{"class":34},[28,159020,2078],{"class":42},[28,159022,6242],{"class":38},[28,159024,4227],{"class":34},[28,159026,159027,159029,159031,159034],{"class":30,"line":128},[28,159028,31780],{"class":38},[28,159030,367],{"class":34},[28,159032,159033],{"class":735},"\"成绩不合法\"",[28,159035,228],{"class":34},[28,159037,159038,159040,159042,159044,159046],{"class":30,"line":393},[28,159039,158200],{"class":42},[28,159041,158177],{"class":34},[28,159043,2200],{"class":42},[28,159045,158182],{"class":38},[28,159047,4227],{"class":34},[28,159049,159050,159052,159054,159057],{"class":30,"line":409},[28,159051,31780],{"class":38},[28,159053,367],{"class":34},[28,159055,159056],{"class":735},"\"等级:A\"",[28,159058,228],{"class":34},[28,159060,159061,159063,159065,159067,159069],{"class":30,"line":1711},[28,159062,158200],{"class":42},[28,159064,158177],{"class":34},[28,159066,2200],{"class":42},[28,159068,158207],{"class":38},[28,159070,4227],{"class":34},[28,159072,159073,159075,159077,159080],{"class":30,"line":1802},[28,159074,31780],{"class":38},[28,159076,367],{"class":34},[28,159078,159079],{"class":735},"\"等级:B\"",[28,159081,228],{"class":34},[28,159083,159084,159086,159088,159090,159093],{"class":30,"line":1808},[28,159085,158200],{"class":42},[28,159087,158177],{"class":34},[28,159089,2200],{"class":42},[28,159091,159092],{"class":38}," 70",[28,159094,4227],{"class":34},[28,159096,159097,159099,159101,159104],{"class":30,"line":1820},[28,159098,31780],{"class":38},[28,159100,367],{"class":34},[28,159102,159103],{"class":735},"\"等级:C\"",[28,159105,228],{"class":34},[28,159107,159108,159110,159112,159114,159116],{"class":30,"line":2102},[28,159109,158200],{"class":42},[28,159111,158177],{"class":34},[28,159113,2200],{"class":42},[28,159115,158231],{"class":38},[28,159117,4227],{"class":34},[28,159119,159120,159122,159124,159127],{"class":30,"line":2107},[28,159121,31780],{"class":38},[28,159123,367],{"class":34},[28,159125,159126],{"class":735},"\"等级:D\"",[28,159128,228],{"class":34},[28,159130,159131,159133],{"class":30,"line":2113},[28,159132,2191],{"class":42},[28,159134,4227],{"class":34},[28,159136,159137,159139,159141,159144],{"class":30,"line":2118},[28,159138,31780],{"class":38},[28,159140,367],{"class":34},[28,159142,159143],{"class":735},"\"等级:E\"",[28,159145,228],{"class":34},[60,159147,159149],{"id":159148},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159151,123686],{},[588,159153,159154,159157,159160,159163],{},[591,159155,159156],{},"输入消费金额。",[591,159158,159159],{},"输入会员等级，普通、银卡、金卡。",[591,159161,159162],{},"普通不打折，银卡 9 折，金卡 8 折。",[591,159164,159165],{},"满 500 再减 50。",[14,159167,10521],{},[18,159169,159171],{"className":20,"code":159170,"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,159172,159173,159193,159209,159213,159221,159225,159239,159249,159262,159271,159284,159292,159298,159309,159313,159327,159331,159345,159355,159359],{"__ignoreMap":23},[28,159174,159175,159178,159180,159182,159184,159186,159188,159191],{"class":30,"line":31},[28,159176,159177],{"class":34},"amount ",[28,159179,83],{"class":42},[28,159181,110191],{"class":38},[28,159183,367],{"class":34},[28,159185,54298],{"class":38},[28,159187,367],{"class":34},[28,159189,159190],{"class":735},"\"请输入消费金额:\"",[28,159192,30980],{"class":34},[28,159194,159195,159198,159200,159202,159204,159207],{"class":30,"line":77},[28,159196,159197],{"class":34},"level ",[28,159199,83],{"class":42},[28,159201,61082],{"class":38},[28,159203,367],{"class":34},[28,159205,159206],{"class":735},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[28,159208,228],{"class":34},[28,159210,159211],{"class":30,"line":114},[28,159212,2890],{"emptyLinePlaceholder":562},[28,159214,159215,159217,159219],{"class":30,"line":128},[28,159216,157630],{"class":34},[28,159218,83],{"class":42},[28,159220,56176],{"class":38},[28,159222,159223],{"class":30,"line":393},[28,159224,2890],{"emptyLinePlaceholder":562},[28,159226,159227,159229,159232,159234,159237],{"class":30,"line":409},[28,159228,2021],{"class":42},[28,159230,159231],{"class":34}," level ",[28,159233,3439],{"class":42},[28,159235,159236],{"class":735}," \"银卡\"",[28,159238,4227],{"class":34},[28,159240,159241,159244,159246],{"class":30,"line":1711},[28,159242,159243],{"class":34},"    discount ",[28,159245,83],{"class":42},[28,159247,159248],{"class":38}," 0.9\n",[28,159250,159251,159253,159255,159257,159260],{"class":30,"line":1802},[28,159252,158200],{"class":42},[28,159254,159231],{"class":34},[28,159256,3439],{"class":42},[28,159258,159259],{"class":735}," \"金卡\"",[28,159261,4227],{"class":34},[28,159263,159264,159266,159268],{"class":30,"line":1808},[28,159265,159243],{"class":34},[28,159267,83],{"class":42},[28,159269,159270],{"class":38}," 0.8\n",[28,159272,159273,159275,159277,159279,159282],{"class":30,"line":1820},[28,159274,158200],{"class":42},[28,159276,159231],{"class":34},[28,159278,3439],{"class":42},[28,159280,159281],{"class":735}," \"普通\"",[28,159283,4227],{"class":34},[28,159285,159286,159288,159290],{"class":30,"line":2102},[28,159287,159243],{"class":34},[28,159289,83],{"class":42},[28,159291,56176],{"class":38},[28,159293,159294,159296],{"class":30,"line":2107},[28,159295,2191],{"class":42},[28,159297,4227],{"class":34},[28,159299,159300,159302,159304,159307],{"class":30,"line":2113},[28,159301,31780],{"class":38},[28,159303,367],{"class":34},[28,159305,159306],{"class":735},"\"会员等级输入错误，按普通会员计算\"",[28,159308,228],{"class":34},[28,159310,159311],{"class":30,"line":2118},[28,159312,2890],{"emptyLinePlaceholder":562},[28,159314,159315,159318,159320,159323,159325],{"class":30,"line":2132},[28,159316,159317],{"class":34},"pay ",[28,159319,83],{"class":42},[28,159321,159322],{"class":34}," amount ",[28,159324,256],{"class":42},[28,159326,157669],{"class":34},[28,159328,159329],{"class":30,"line":2137},[28,159330,2890],{"emptyLinePlaceholder":562},[28,159332,159333,159335,159338,159340,159343],{"class":30,"line":2143},[28,159334,2021],{"class":42},[28,159336,159337],{"class":34}," pay ",[28,159339,2200],{"class":42},[28,159341,159342],{"class":38}," 500",[28,159344,4227],{"class":34},[28,159346,159347,159350,159352],{"class":30,"line":2164},[28,159348,159349],{"class":34},"    pay ",[28,159351,150646],{"class":42},[28,159353,159354],{"class":38}," 50\n",[28,159356,159357],{"class":30,"line":2169},[28,159358,2890],{"emptyLinePlaceholder":562},[28,159360,159361,159363,159365,159367,159369,159371,159374,159376,159378,159380],{"class":30,"line":2183},[28,159362,30898],{"class":38},[28,159364,367],{"class":34},[28,159366,686],{"class":42},[28,159368,157750],{"class":735},[28,159370,1515],{"class":38},[28,159372,159373],{"class":34},"pay",[28,159375,157553],{"class":42},[28,159377,1565],{"class":38},[28,159379,157406],{"class":735},[28,159381,228],{"class":34},[60,159383,159385],{"id":159384},"_312-易错点","3.12 易错点",[588,159387,159388,159391,159394,159397,159402],{},[591,159389,159390],{},"冒号不能漏。",[591,159392,159393],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[591,159395,159396],{},"多分支判断要注意顺序。",[591,159398,159399,159400,28871],{},"判断相等用 ",[25,159401,3439],{},[591,159403,159404],{},"字符串比较区分大小写：",[18,159406,159408],{"className":20,"code":159407,"language":22,"meta":23,"style":23},"\"Y\" == \"y\"  # False\n",[25,159409,159410],{"__ignoreMap":23},[28,159411,159412,159415,159417,159419],{"class":30,"line":31},[28,159413,159414],{"class":735},"\"Y\"",[28,159416,101953],{"class":42},[28,159418,158399],{"class":735},[28,159420,159421],{"class":73},"  # False\n",[14,159423,159424],{},"可转换后再判断：",[18,159426,159428],{"className":20,"code":159427,"language":22,"meta":23,"style":23},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[25,159429,159430,159447,159460],{"__ignoreMap":23},[28,159431,159432,159435,159437,159439,159441,159444],{"class":30,"line":31},[28,159433,159434],{"class":34},"answer ",[28,159436,83],{"class":42},[28,159438,61082],{"class":38},[28,159440,367],{"class":34},[28,159442,159443],{"class":735},"\"是否继续(y\u002Fn):\"",[28,159445,159446],{"class":34},").lower()\n",[28,159448,159449,159451,159454,159456,159458],{"class":30,"line":77},[28,159450,2021],{"class":42},[28,159452,159453],{"class":34}," answer ",[28,159455,3439],{"class":42},[28,159457,158399],{"class":735},[28,159459,4227],{"class":34},[28,159461,159462,159464,159466,159469],{"class":30,"line":114},[28,159463,31780],{"class":38},[28,159465,367],{"class":34},[28,159467,159468],{"class":735},"\"继续\"",[28,159470,228],{"class":34},[60,159472,159474],{"id":159473},"_313-本章练习","3.13 本章练习",[588,159476,159477,159480,159483,159486,159496],{},[591,159478,159479],{},"输入年龄，判断是否成年。",[591,159481,159482],{},"输入年份，判断是否为闰年。",[591,159484,159485],{},"输入三个数字，输出最大值。",[591,159487,159488,159489,159492,159493,159495],{},"写登录判断：用户名是 ",[25,159490,159491],{},"admin"," 且密码是 ",[25,159494,15570],{}," 才登录成功。",[591,159497,159498],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[547,159500,159501],{},"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":77,"depth":77,"links":159503},[159504,159505,159506,159507,159508,159509,159514,159515,159516,159517,159518,159519,159520],{"id":157892,"depth":77,"text":157893},{"id":157945,"depth":77,"text":157946},{"id":158049,"depth":77,"text":158050},{"id":158139,"depth":77,"text":158140},{"id":158329,"depth":77,"text":158330},{"id":158452,"depth":77,"text":158453,"children":159510},[159511,159512,159513],{"id":158456,"depth":114,"text":158457},{"id":158513,"depth":114,"text":158514},{"id":158570,"depth":114,"text":158571},{"id":158615,"depth":77,"text":158616},{"id":158706,"depth":77,"text":158707},{"id":158833,"depth":77,"text":158834},{"id":158963,"depth":77,"text":158964},{"id":159148,"depth":77,"text":159149},{"id":159384,"depth":77,"text":159385},{"id":159473,"depth":77,"text":159474},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157884,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159527,"title":159528,"body":159529,"description":559,"extension":560,"meta":161298,"navigation":562,"path":161299,"seo":161300,"stem":161301,"__hash__":161302},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159530,"toc":161278},[159531,159534,159538,159544,159547,159564,159568,159570,159587,159589,159634,159636,159653,159657,159660,159726,159729,159747,159751,159912,159921,159925,159929,159934,159981,159983,159989,159993,159998,160045,160047,160053,160057,160062,160098,160101,160148,160152,160158,160216,160221,160252,160257,160261,160316,160319,160391,160394,160453,160457,160460,160535,160538,160542,160648,160651,160677,160681,160693,160762,160765,160857,160861,160863,160874,160876,161006,161010,161212,161220,161224,161254,161258,161275],[10,159532,159528],{"id":159533},"_4-循环语句",[60,159535,159537],{"id":159536},"_41-为什么需要循环","4.1 为什么需要循环",[14,159539,159540,159541,159543],{},"如果要输出 1 到 100，不应该写 100 行 ",[25,159542,146866],{},"，而应该用循环。",[14,159545,159546],{},"循环适合处理重复任务：",[588,159548,159549,159552,159555,159558,159561],{},[591,159550,159551],{},"重复输出。",[591,159553,159554],{},"重复输入。",[591,159556,159557],{},"遍历数据。",[591,159559,159560],{},"持续执行菜单。",[591,159562,159563],{},"批量处理文件或数据。",[60,159565,159567],{"id":159566},"_42-while循环","4.2 while循环",[14,159569,5669],{},[18,159571,159573],{"className":20,"code":159572,"language":22,"meta":23,"style":23},"while 条件:\n    循环体\n",[25,159574,159575,159582],{"__ignoreMap":23},[28,159576,159577,159579],{"class":30,"line":31},[28,159578,109057],{"class":42},[28,159580,159581],{"class":34}," 条件:\n",[28,159583,159584],{"class":30,"line":77},[28,159585,159586],{"class":34},"    循环体\n",[14,159588,15621],{},[18,159590,159592],{"className":20,"code":159591,"language":22,"meta":23,"style":23},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[25,159593,159594,159602,159606,159618,159625],{"__ignoreMap":23},[28,159595,159596,159598,159600],{"class":30,"line":31},[28,159597,46],{"class":34},[28,159599,83],{"class":42},[28,159601,56176],{"class":38},[28,159603,159604],{"class":30,"line":77},[28,159605,2890],{"emptyLinePlaceholder":562},[28,159607,159608,159610,159612,159614,159616],{"class":30,"line":114},[28,159609,109057],{"class":42},[28,159611,52],{"class":34},[28,159613,2078],{"class":42},[28,159615,2638],{"class":38},[28,159617,4227],{"class":34},[28,159619,159620,159622],{"class":30,"line":128},[28,159621,31780],{"class":38},[28,159623,159624],{"class":34},"(i)\n",[28,159626,159627,159630,159632],{"class":30,"line":393},[28,159628,159629],{"class":34},"    i ",[28,159631,9964],{"class":42},[28,159633,56176],{"class":38},[14,159635,81406],{},[588,159637,159638,159644,159647,159650],{},[591,159639,159640,159641,28871],{},"判断条件 ",[25,159642,159643],{},"i \u003C= 5",[591,159645,159646],{},"条件成立，执行循环体。",[591,159648,159649],{},"执行完后回到条件判断。",[591,159651,159652],{},"条件不成立，退出循环。",[60,159654,159656],{"id":159655},"_43-while累加","4.3 while累加",[14,159658,159659],{},"计算 1 到 100 的和：",[18,159661,159663],{"className":20,"code":159662,"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,159664,159665,159673,159681,159685,159697,159707,159715,159719],{"__ignoreMap":23},[28,159666,159667,159669,159671],{"class":30,"line":31},[28,159668,46],{"class":34},[28,159670,83],{"class":42},[28,159672,56176],{"class":38},[28,159674,159675,159677,159679],{"class":30,"line":77},[28,159676,157654],{"class":34},[28,159678,83],{"class":42},[28,159680,47810],{"class":38},[28,159682,159683],{"class":30,"line":114},[28,159684,2890],{"emptyLinePlaceholder":562},[28,159686,159687,159689,159691,159693,159695],{"class":30,"line":128},[28,159688,109057],{"class":42},[28,159690,52],{"class":34},[28,159692,2078],{"class":42},[28,159694,6242],{"class":38},[28,159696,4227],{"class":34},[28,159698,159699,159702,159704],{"class":30,"line":393},[28,159700,159701],{"class":34},"    total ",[28,159703,9964],{"class":42},[28,159705,159706],{"class":34}," i\n",[28,159708,159709,159711,159713],{"class":30,"line":409},[28,159710,159629],{"class":34},[28,159712,9964],{"class":42},[28,159714,56176],{"class":38},[28,159716,159717],{"class":30,"line":1711},[28,159718,2890],{"emptyLinePlaceholder":562},[28,159720,159721,159723],{"class":30,"line":1802},[28,159722,30898],{"class":38},[28,159724,159725],{"class":34},"(total)\n",[14,159727,159728],{},"核心思想：",[588,159730,159731,159736,159741],{},[591,159732,159733,159735],{},[25,159734,1066],{}," 控制循环次数。",[591,159737,159738,159740],{},[25,159739,157755],{}," 保存累加结果。",[591,159742,159743,159744,159746],{},"每轮循环都要更新 ",[25,159745,1066],{},"，否则可能死循环。",[60,159748,159750],{"id":159749},"_44-while猜数字","4.4 while猜数字",[18,159752,159754],{"className":20,"code":159753,"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,159755,159756,159762,159766,159783,159791,159795,159803,159823,159832,159836,159848,159859,159869,159880,159886,159908],{"__ignoreMap":23},[28,159757,159758,159760],{"class":30,"line":31},[28,159759,536],{"class":42},[28,159761,45805],{"class":34},[28,159763,159764],{"class":30,"line":77},[28,159765,2890],{"emptyLinePlaceholder":562},[28,159767,159768,159770,159772,159775,159777,159779,159781],{"class":30,"line":114},[28,159769,159434],{"class":34},[28,159771,83],{"class":42},[28,159773,159774],{"class":34}," random.randint(",[28,159776,39],{"class":38},[28,159778,12921],{"class":34},[28,159780,938],{"class":38},[28,159782,228],{"class":34},[28,159784,159785,159787,159789],{"class":30,"line":128},[28,159786,147085],{"class":34},[28,159788,83],{"class":42},[28,159790,47810],{"class":38},[28,159792,159793],{"class":30,"line":393},[28,159794,2890],{"emptyLinePlaceholder":562},[28,159796,159797,159799,159801],{"class":30,"line":409},[28,159798,109057],{"class":42},[28,159800,95763],{"class":38},[28,159802,4227],{"class":34},[28,159804,159805,159808,159810,159812,159814,159816,159818,159821],{"class":30,"line":1711},[28,159806,159807],{"class":34},"    guess ",[28,159809,83],{"class":42},[28,159811,2872],{"class":38},[28,159813,367],{"class":34},[28,159815,54298],{"class":38},[28,159817,367],{"class":34},[28,159819,159820],{"class":735},"\"请输入1到100之间的数字:\"",[28,159822,30980],{"class":34},[28,159824,159825,159828,159830],{"class":30,"line":1802},[28,159826,159827],{"class":34},"    count ",[28,159829,9964],{"class":42},[28,159831,56176],{"class":38},[28,159833,159834],{"class":30,"line":1808},[28,159835,2890],{"emptyLinePlaceholder":562},[28,159837,159838,159840,159843,159845],{"class":30,"line":1820},[28,159839,3590],{"class":42},[28,159841,159842],{"class":34}," guess ",[28,159844,1579],{"class":42},[28,159846,159847],{"class":34}," answer:\n",[28,159849,159850,159852,159854,159857],{"class":30,"line":2102},[28,159851,32929],{"class":38},[28,159853,367],{"class":34},[28,159855,159856],{"class":735},"\"猜大了\"",[28,159858,228],{"class":34},[28,159860,159861,159863,159865,159867],{"class":30,"line":2107},[28,159862,39770],{"class":42},[28,159864,159842],{"class":34},[28,159866,1529],{"class":42},[28,159868,159847],{"class":34},[28,159870,159871,159873,159875,159878],{"class":30,"line":2113},[28,159872,32929],{"class":38},[28,159874,367],{"class":34},[28,159876,159877],{"class":735},"\"猜小了\"",[28,159879,228],{"class":34},[28,159881,159882,159884],{"class":30,"line":2118},[28,159883,158416],{"class":42},[28,159885,4227],{"class":34},[28,159887,159888,159890,159892,159894,159897,159899,159901,159903,159906],{"class":30,"line":2132},[28,159889,32929],{"class":38},[28,159891,367],{"class":34},[28,159893,686],{"class":42},[28,159895,159896],{"class":735},"\"猜对了，一共猜了",[28,159898,1515],{"class":38},[28,159900,84911],{"class":34},[28,159902,1565],{"class":38},[28,159904,159905],{"class":735},"次\"",[28,159907,228],{"class":34},[28,159909,159910],{"class":30,"line":2137},[28,159911,32106],{"class":42},[14,159913,159914,159917,159918,159920],{},[25,159915,159916],{},"while True"," 表示无限循环，通常配合 ",[25,159919,2543],{}," 使用。",[60,159922,159924],{"id":159923},"_45-break和continue","4.5 break和continue",[605,159926,159928],{"id":159927},"_451-break","4.5.1 break",[14,159930,159931,159933],{},[25,159932,2543],{}," 直接结束整个循环。",[18,159935,159937],{"className":20,"code":159936,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[25,159938,159939,159959,159971,159975],{"__ignoreMap":23},[28,159940,159941,159943,159945,159947,159949,159951,159953,159955,159957],{"class":30,"line":31},[28,159942,49],{"class":42},[28,159944,52],{"class":34},[28,159946,55],{"class":42},[28,159948,364],{"class":38},[28,159950,367],{"class":34},[28,159952,39],{"class":38},[28,159954,12921],{"class":34},[28,159956,970],{"class":38},[28,159958,372],{"class":34},[28,159960,159961,159963,159965,159967,159969],{"class":30,"line":77},[28,159962,3590],{"class":42},[28,159964,52],{"class":34},[28,159966,3439],{"class":42},[28,159968,78547],{"class":38},[28,159970,4227],{"class":34},[28,159972,159973],{"class":30,"line":114},[28,159974,32106],{"class":42},[28,159976,159977,159979],{"class":30,"line":128},[28,159978,31780],{"class":38},[28,159980,159624],{"class":34},[14,159982,146851],{},[18,159984,159987],{"className":159985,"code":159986,"language":5675,"meta":23},[5673],"1\n2\n",[25,159988,159986],{"__ignoreMap":23},[605,159990,159992],{"id":159991},"_452-continue","4.5.2 continue",[14,159994,159995,159997],{},[25,159996,155066],{}," 跳过本轮剩余代码，进入下一轮循环。",[18,159999,160001],{"className":20,"code":160000,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[25,160002,160003,160023,160035,160039],{"__ignoreMap":23},[28,160004,160005,160007,160009,160011,160013,160015,160017,160019,160021],{"class":30,"line":31},[28,160006,49],{"class":42},[28,160008,52],{"class":34},[28,160010,55],{"class":42},[28,160012,364],{"class":38},[28,160014,367],{"class":34},[28,160016,39],{"class":38},[28,160018,12921],{"class":34},[28,160020,970],{"class":38},[28,160022,372],{"class":34},[28,160024,160025,160027,160029,160031,160033],{"class":30,"line":77},[28,160026,3590],{"class":42},[28,160028,52],{"class":34},[28,160030,3439],{"class":42},[28,160032,78547],{"class":38},[28,160034,4227],{"class":34},[28,160036,160037],{"class":30,"line":114},[28,160038,148906],{"class":42},[28,160040,160041,160043],{"class":30,"line":128},[28,160042,31780],{"class":38},[28,160044,159624],{"class":34},[14,160046,146851],{},[18,160048,160051],{"className":160049,"code":160050,"language":5675,"meta":23},[5673],"1\n2\n4\n5\n",[25,160052,160050],{"__ignoreMap":23},[60,160054,160056],{"id":160055},"_46-for循环","4.6 for循环",[14,160058,160059,160061],{},[25,160060,49],{}," 常用于遍历序列。",[18,160063,160065],{"className":20,"code":160064,"language":22,"meta":23,"style":23},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[25,160066,160067,160076,160080,160091],{"__ignoreMap":23},[28,160068,160069,160071,160073],{"class":30,"line":31},[28,160070,146930],{"class":34},[28,160072,83],{"class":42},[28,160074,160075],{"class":735}," \"python\"\n",[28,160077,160078],{"class":30,"line":77},[28,160079,2890],{"emptyLinePlaceholder":562},[28,160081,160082,160084,160087,160089],{"class":30,"line":114},[28,160083,49],{"class":42},[28,160085,160086],{"class":34}," ch ",[28,160088,55],{"class":42},[28,160090,158793],{"class":34},[28,160092,160093,160095],{"class":30,"line":128},[28,160094,31780],{"class":38},[28,160096,160097],{"class":34},"(ch)\n",[14,160099,160100],{},"遍历列表：",[18,160102,160104],{"className":20,"code":160103,"language":22,"meta":23,"style":23},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[25,160105,160106,160128,160132,160142],{"__ignoreMap":23},[28,160107,160108,160111,160113,160115,160117,160119,160121,160123,160126],{"class":30,"line":31},[28,160109,160110],{"class":34},"students ",[28,160112,83],{"class":42},[28,160114,52703],{"class":34},[28,160116,150282],{"class":735},[28,160118,12921],{"class":34},[28,160120,151330],{"class":735},[28,160122,12921],{"class":34},[28,160124,160125],{"class":735},"\"小刚\"",[28,160127,111],{"class":34},[28,160129,160130],{"class":30,"line":77},[28,160131,2890],{"emptyLinePlaceholder":562},[28,160133,160134,160136,160138,160140],{"class":30,"line":114},[28,160135,49],{"class":42},[28,160137,152531],{"class":34},[28,160139,55],{"class":42},[28,160141,152536],{"class":34},[28,160143,160144,160146],{"class":30,"line":128},[28,160145,31780],{"class":38},[28,160147,150436],{"class":34},[60,160149,160151],{"id":160150},"_47-range函数","4.7 range函数",[14,160153,160154,160157],{},[25,160155,160156],{},"range()"," 用于生成整数序列。",[18,160159,160161],{"className":20,"code":160160,"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,160162,160163,160177,160195],{"__ignoreMap":23},[28,160164,160165,160167,160169,160171,160174],{"class":30,"line":31},[28,160166,33893],{"class":38},[28,160168,367],{"class":34},[28,160170,108],{"class":38},[28,160172,160173],{"class":34},")          ",[28,160175,160176],{"class":73},"# 0,1,2,3,4\n",[28,160178,160179,160181,160183,160185,160187,160189,160192],{"class":30,"line":77},[28,160180,33893],{"class":38},[28,160182,367],{"class":34},[28,160184,39],{"class":38},[28,160186,12921],{"class":34},[28,160188,108],{"class":38},[28,160190,160191],{"class":34},")       ",[28,160193,160194],{"class":73},"# 1,2,3,4\n",[28,160196,160197,160199,160201,160203,160205,160207,160209,160211,160213],{"class":30,"line":114},[28,160198,33893],{"class":38},[28,160200,367],{"class":34},[28,160202,39],{"class":38},[28,160204,12921],{"class":34},[28,160206,225],{"class":38},[28,160208,12921],{"class":34},[28,160210,93],{"class":38},[28,160212,156055],{"class":34},[28,160214,160215],{"class":73},"# 1,3,5,7,9\n",[14,160217,160218,160219,25105],{},"配合 ",[25,160220,49],{},[18,160222,160224],{"className":20,"code":160223,"language":22,"meta":23,"style":23},"for i in range(1, 6):\n    print(i)\n",[25,160225,160226,160246],{"__ignoreMap":23},[28,160227,160228,160230,160232,160234,160236,160238,160240,160242,160244],{"class":30,"line":31},[28,160229,49],{"class":42},[28,160231,52],{"class":34},[28,160233,55],{"class":42},[28,160235,364],{"class":38},[28,160237,367],{"class":34},[28,160239,39],{"class":38},[28,160241,12921],{"class":34},[28,160243,970],{"class":38},[28,160245,372],{"class":34},[28,160247,160248,160250],{"class":30,"line":77},[28,160249,31780],{"class":38},[28,160251,159624],{"class":34},[14,160253,9513,160254,160256],{},[25,160255,33893],{}," 的结束值不包含在内。",[60,160258,160260],{"id":160259},"_48-for循环求和","4.8 for循环求和",[18,160262,160264],{"className":20,"code":160263,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[25,160265,160266,160274,160278,160298,160306,160310],{"__ignoreMap":23},[28,160267,160268,160270,160272],{"class":30,"line":31},[28,160269,157654],{"class":34},[28,160271,83],{"class":42},[28,160273,47810],{"class":38},[28,160275,160276],{"class":30,"line":77},[28,160277,2890],{"emptyLinePlaceholder":562},[28,160279,160280,160282,160284,160286,160288,160290,160292,160294,160296],{"class":30,"line":114},[28,160281,49],{"class":42},[28,160283,52],{"class":34},[28,160285,55],{"class":42},[28,160287,364],{"class":38},[28,160289,367],{"class":34},[28,160291,39],{"class":38},[28,160293,12921],{"class":34},[28,160295,963],{"class":38},[28,160297,372],{"class":34},[28,160299,160300,160302,160304],{"class":30,"line":128},[28,160301,159701],{"class":34},[28,160303,9964],{"class":42},[28,160305,159706],{"class":34},[28,160307,160308],{"class":30,"line":393},[28,160309,2890],{"emptyLinePlaceholder":562},[28,160311,160312,160314],{"class":30,"line":409},[28,160313,30898],{"class":38},[28,160315,159725],{"class":34},[14,160317,160318],{},"求偶数和：",[18,160320,160322],{"className":20,"code":160321,"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,160323,160324,160332,160336,160356,160372,160381,160385],{"__ignoreMap":23},[28,160325,160326,160328,160330],{"class":30,"line":31},[28,160327,157654],{"class":34},[28,160329,83],{"class":42},[28,160331,47810],{"class":38},[28,160333,160334],{"class":30,"line":77},[28,160335,2890],{"emptyLinePlaceholder":562},[28,160337,160338,160340,160342,160344,160346,160348,160350,160352,160354],{"class":30,"line":114},[28,160339,49],{"class":42},[28,160341,52],{"class":34},[28,160343,55],{"class":42},[28,160345,364],{"class":38},[28,160347,367],{"class":34},[28,160349,39],{"class":38},[28,160351,12921],{"class":34},[28,160353,963],{"class":38},[28,160355,372],{"class":34},[28,160357,160358,160360,160362,160364,160366,160368,160370],{"class":30,"line":128},[28,160359,3590],{"class":42},[28,160361,52],{"class":34},[28,160363,954],{"class":42},[28,160365,15241],{"class":38},[28,160367,101953],{"class":42},[28,160369,4581],{"class":38},[28,160371,4227],{"class":34},[28,160373,160374,160377,160379],{"class":30,"line":393},[28,160375,160376],{"class":34},"        total ",[28,160378,9964],{"class":42},[28,160380,159706],{"class":34},[28,160382,160383],{"class":30,"line":409},[28,160384,2890],{"emptyLinePlaceholder":562},[28,160386,160387,160389],{"class":30,"line":1711},[28,160388,30898],{"class":38},[28,160390,159725],{"class":34},[14,160392,160393],{},"也可以：",[18,160395,160397],{"className":20,"code":160396,"language":22,"meta":23,"style":23},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[25,160398,160399,160407,160411,160435,160443,160447],{"__ignoreMap":23},[28,160400,160401,160403,160405],{"class":30,"line":31},[28,160402,157654],{"class":34},[28,160404,83],{"class":42},[28,160406,47810],{"class":38},[28,160408,160409],{"class":30,"line":77},[28,160410,2890],{"emptyLinePlaceholder":562},[28,160412,160413,160415,160417,160419,160421,160423,160425,160427,160429,160431,160433],{"class":30,"line":114},[28,160414,49],{"class":42},[28,160416,52],{"class":34},[28,160418,55],{"class":42},[28,160420,364],{"class":38},[28,160422,367],{"class":34},[28,160424,93],{"class":38},[28,160426,12921],{"class":34},[28,160428,963],{"class":38},[28,160430,12921],{"class":34},[28,160432,93],{"class":38},[28,160434,372],{"class":34},[28,160436,160437,160439,160441],{"class":30,"line":128},[28,160438,159701],{"class":34},[28,160440,9964],{"class":42},[28,160442,159706],{"class":34},[28,160444,160445],{"class":30,"line":393},[28,160446,2890],{"emptyLinePlaceholder":562},[28,160448,160449,160451],{"class":30,"line":409},[28,160450,30898],{"class":38},[28,160452,159725],{"class":34},[60,160454,160456],{"id":160455},"_49-循环嵌套","4.9 循环嵌套",[14,160458,160459],{},"嵌套循环就是循环里面再写循环。",[18,160461,160463],{"className":20,"code":160462,"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,160464,160465,160485,160505],{"__ignoreMap":23},[28,160466,160467,160469,160471,160473,160475,160477,160479,160481,160483],{"class":30,"line":31},[28,160468,49],{"class":42},[28,160470,52],{"class":34},[28,160472,55],{"class":42},[28,160474,364],{"class":38},[28,160476,367],{"class":34},[28,160478,39],{"class":38},[28,160480,12921],{"class":34},[28,160482,103],{"class":38},[28,160484,372],{"class":34},[28,160486,160487,160489,160491,160493,160495,160497,160499,160501,160503],{"class":30,"line":77},[28,160488,377],{"class":42},[28,160490,380],{"class":34},[28,160492,55],{"class":42},[28,160494,364],{"class":38},[28,160496,367],{"class":34},[28,160498,39],{"class":38},[28,160500,12921],{"class":34},[28,160502,103],{"class":38},[28,160504,372],{"class":34},[28,160506,160507,160509,160511,160513,160516,160518,160520,160522,160525,160527,160529,160531,160533],{"class":30,"line":114},[28,160508,32929],{"class":38},[28,160510,367],{"class":34},[28,160512,686],{"class":42},[28,160514,160515],{"class":735},"\"i=",[28,160517,1515],{"class":38},[28,160519,1066],{"class":34},[28,160521,1565],{"class":38},[28,160523,160524],{"class":735},", j=",[28,160526,1515],{"class":38},[28,160528,1090],{"class":34},[28,160530,1565],{"class":38},[28,160532,880],{"class":735},[28,160534,228],{"class":34},[14,160536,160537],{},"外层循环执行一次，内层循环执行完整一轮。",[60,160539,160541],{"id":160540},"_410-九九乘法表","4.10 九九乘法表",[18,160543,160545],{"className":20,"code":160544,"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,160546,160547,160567,160590,160642],{"__ignoreMap":23},[28,160548,160549,160551,160553,160555,160557,160559,160561,160563,160565],{"class":30,"line":31},[28,160550,49],{"class":42},[28,160552,52],{"class":34},[28,160554,55],{"class":42},[28,160556,364],{"class":38},[28,160558,367],{"class":34},[28,160560,39],{"class":38},[28,160562,12921],{"class":34},[28,160564,225],{"class":38},[28,160566,372],{"class":34},[28,160568,160569,160571,160573,160575,160577,160579,160581,160584,160586,160588],{"class":30,"line":77},[28,160570,377],{"class":42},[28,160572,380],{"class":34},[28,160574,55],{"class":42},[28,160576,364],{"class":38},[28,160578,367],{"class":34},[28,160580,39],{"class":38},[28,160582,160583],{"class":34},", i ",[28,160585,1104],{"class":42},[28,160587,25605],{"class":38},[28,160589,372],{"class":34},[28,160591,160592,160594,160596,160598,160600,160602,160604,160606,160608,160610,160612,160614,160616,160618,160620,160622,160624,160626,160628,160630,160632,160634,160636,160638,160640],{"class":30,"line":114},[28,160593,32929],{"class":38},[28,160595,367],{"class":34},[28,160597,686],{"class":42},[28,160599,880],{"class":735},[28,160601,1515],{"class":38},[28,160603,1090],{"class":34},[28,160605,1565],{"class":38},[28,160607,256],{"class":735},[28,160609,1515],{"class":38},[28,160611,1066],{"class":34},[28,160613,1565],{"class":38},[28,160615,83],{"class":735},[28,160617,1515],{"class":38},[28,160619,46],{"class":34},[28,160621,256],{"class":42},[28,160623,3898],{"class":34},[28,160625,1565],{"class":38},[28,160627,880],{"class":735},[28,160629,12921],{"class":34},[28,160631,46278],{"class":5704},[28,160633,83],{"class":42},[28,160635,880],{"class":735},[28,160637,1721],{"class":38},[28,160639,880],{"class":735},[28,160641,228],{"class":34},[28,160643,160644,160646],{"class":30,"line":128},[28,160645,31780],{"class":38},[28,160647,2466],{"class":34},[14,160649,160650],{},"关键点：",[588,160652,160653,160659,160665,160671],{},[591,160654,160655,160656,160658],{},"外层 ",[25,160657,1066],{}," 控制行。",[591,160660,160661,160662,160664],{},"内层 ",[25,160663,1090],{}," 控制列。",[591,160666,160667,160668,160670],{},"每行结束后用 ",[25,160669,146866],{}," 换行。",[591,160672,160673,160676],{},[25,160674,160675],{},"end=\"\\t\""," 让同一行的内容横向排列。",[60,160678,160680],{"id":160679},"_411-循环else","4.11 循环else",[14,160682,160683,160684,160686,160687,160689,160690,160692],{},"Python 的循环可以带 ",[25,160685,2191],{},"。当循环正常结束时执行 ",[25,160688,2191],{},"，如果被 ",[25,160691,2543],{}," 打断，则不执行。",[18,160694,160696],{"className":20,"code":160695,"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,160697,160698,160718,160730,160741,160745,160751],{"__ignoreMap":23},[28,160699,160700,160702,160704,160706,160708,160710,160712,160714,160716],{"class":30,"line":31},[28,160701,49],{"class":42},[28,160703,52],{"class":34},[28,160705,55],{"class":42},[28,160707,364],{"class":38},[28,160709,367],{"class":34},[28,160711,39],{"class":38},[28,160713,12921],{"class":34},[28,160715,970],{"class":38},[28,160717,372],{"class":34},[28,160719,160720,160722,160724,160726,160728],{"class":30,"line":77},[28,160721,3590],{"class":42},[28,160723,52],{"class":34},[28,160725,3439],{"class":42},[28,160727,2528],{"class":38},[28,160729,4227],{"class":34},[28,160731,160732,160734,160736,160739],{"class":30,"line":114},[28,160733,32929],{"class":38},[28,160735,367],{"class":34},[28,160737,160738],{"class":735},"\"找到了\"",[28,160740,228],{"class":34},[28,160742,160743],{"class":30,"line":128},[28,160744,32106],{"class":42},[28,160746,160747,160749],{"class":30,"line":393},[28,160748,2191],{"class":42},[28,160750,4227],{"class":34},[28,160752,160753,160755,160757,160760],{"class":30,"line":409},[28,160754,31780],{"class":38},[28,160756,367],{"class":34},[28,160758,160759],{"class":735},"\"没找到\"",[28,160761,228],{"class":34},[14,160763,160764],{},"常用于搜索。",[18,160766,160768],{"className":20,"code":160767,"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,160769,160770,160791,160800,160804,160816,160827,160837,160841,160847],{"__ignoreMap":23},[28,160771,160772,160775,160777,160779,160781,160783,160785,160787,160789],{"class":30,"line":31},[28,160773,160774],{"class":34},"names ",[28,160776,83],{"class":42},[28,160778,52703],{"class":34},[28,160780,150282],{"class":735},[28,160782,12921],{"class":34},[28,160784,151330],{"class":735},[28,160786,12921],{"class":34},[28,160788,160125],{"class":735},[28,160790,111],{"class":34},[28,160792,160793,160795,160797],{"class":30,"line":77},[28,160794,111972],{"class":34},[28,160796,83],{"class":42},[28,160798,160799],{"class":735}," \"小李\"\n",[28,160801,160802],{"class":30,"line":114},[28,160803,2890],{"emptyLinePlaceholder":562},[28,160805,160806,160808,160811,160813],{"class":30,"line":128},[28,160807,49],{"class":42},[28,160809,160810],{"class":34}," name ",[28,160812,55],{"class":42},[28,160814,160815],{"class":34}," names:\n",[28,160817,160818,160820,160822,160824],{"class":30,"line":393},[28,160819,3590],{"class":42},[28,160821,160810],{"class":34},[28,160823,3439],{"class":42},[28,160825,160826],{"class":34}," target:\n",[28,160828,160829,160831,160833,160835],{"class":30,"line":409},[28,160830,32929],{"class":38},[28,160832,367],{"class":34},[28,160834,160738],{"class":735},[28,160836,228],{"class":34},[28,160838,160839],{"class":30,"line":1711},[28,160840,32106],{"class":42},[28,160842,160843,160845],{"class":30,"line":1802},[28,160844,2191],{"class":42},[28,160846,4227],{"class":34},[28,160848,160849,160851,160853,160855],{"class":30,"line":1808},[28,160850,31780],{"class":38},[28,160852,367],{"class":34},[28,160854,160759],{"class":735},[28,160856,228],{"class":34},[60,160858,160860],{"id":160859},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160862,123686],{},[588,160864,160865,160868,160871],{},[591,160866,160867],{},"用户最多输入 3 次密码。",[591,160869,160870],{},"密码正确则登录成功。",[591,160872,160873],{},"3 次都错误则锁定账号。",[14,160875,10521],{},[18,160877,160879],{"className":20,"code":160878,"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,160880,160881,160891,160895,160911,160927,160931,160943,160954,160958,160964,160989,160995],{"__ignoreMap":23},[28,160882,160883,160886,160888],{"class":30,"line":31},[28,160884,160885],{"class":34},"password ",[28,160887,83],{"class":42},[28,160889,160890],{"class":735}," \"123456\"\n",[28,160892,160893],{"class":30,"line":77},[28,160894,2890],{"emptyLinePlaceholder":562},[28,160896,160897,160899,160901,160903,160905,160907,160909],{"class":30,"line":114},[28,160898,49],{"class":42},[28,160900,52],{"class":34},[28,160902,55],{"class":42},[28,160904,364],{"class":38},[28,160906,367],{"class":34},[28,160908,98],{"class":38},[28,160910,372],{"class":34},[28,160912,160913,160916,160918,160920,160922,160925],{"class":30,"line":128},[28,160914,160915],{"class":34},"    user_password ",[28,160917,83],{"class":42},[28,160919,61082],{"class":38},[28,160921,367],{"class":34},[28,160923,160924],{"class":735},"\"请输入密码:\"",[28,160926,228],{"class":34},[28,160928,160929],{"class":30,"line":393},[28,160930,2890],{"emptyLinePlaceholder":562},[28,160932,160933,160935,160938,160940],{"class":30,"line":409},[28,160934,3590],{"class":42},[28,160936,160937],{"class":34}," user_password ",[28,160939,3439],{"class":42},[28,160941,160942],{"class":34}," password:\n",[28,160944,160945,160947,160949,160952],{"class":30,"line":1711},[28,160946,32929],{"class":38},[28,160948,367],{"class":34},[28,160950,160951],{"class":735},"\"登录成功\"",[28,160953,228],{"class":34},[28,160955,160956],{"class":30,"line":1802},[28,160957,32106],{"class":42},[28,160959,160960,160962],{"class":30,"line":1808},[28,160961,158416],{"class":42},[28,160963,4227],{"class":34},[28,160965,160966,160968,160970,160972,160975,160978,160980,160982,160984,160987],{"class":30,"line":1820},[28,160967,32929],{"class":38},[28,160969,367],{"class":34},[28,160971,686],{"class":42},[28,160973,160974],{"class":735},"\"密码错误，还剩",[28,160976,160977],{"class":38},"{2",[28,160979,52748],{"class":42},[28,160981,3521],{"class":34},[28,160983,1565],{"class":38},[28,160985,160986],{"class":735},"次机会\"",[28,160988,228],{"class":34},[28,160990,160991,160993],{"class":30,"line":2102},[28,160992,2191],{"class":42},[28,160994,4227],{"class":34},[28,160996,160997,160999,161001,161004],{"class":30,"line":2107},[28,160998,31780],{"class":38},[28,161000,367],{"class":34},[28,161002,161003],{"class":735},"\"账号已锁定\"",[28,161005,228],{"class":34},[60,161007,161009],{"id":161008},"_413-小案例菜单程序","4.13 小案例：菜单程序",[18,161011,161013],{"className":20,"code":161012,"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,161014,161015,161023,161034,161045,161056,161067,161078,161082,161097,161101,161113,161124,161136,161147,161159,161170,161182,161192,161196,161202],{"__ignoreMap":23},[28,161016,161017,161019,161021],{"class":30,"line":31},[28,161018,109057],{"class":42},[28,161020,95763],{"class":38},[28,161022,4227],{"class":34},[28,161024,161025,161027,161029,161032],{"class":30,"line":77},[28,161026,31780],{"class":38},[28,161028,367],{"class":34},[28,161030,161031],{"class":735},"\"====== 菜单 ======\"",[28,161033,228],{"class":34},[28,161035,161036,161038,161040,161043],{"class":30,"line":114},[28,161037,31780],{"class":38},[28,161039,367],{"class":34},[28,161041,161042],{"class":735},"\"1. 查询余额\"",[28,161044,228],{"class":34},[28,161046,161047,161049,161051,161054],{"class":30,"line":128},[28,161048,31780],{"class":38},[28,161050,367],{"class":34},[28,161052,161053],{"class":735},"\"2. 存款\"",[28,161055,228],{"class":34},[28,161057,161058,161060,161062,161065],{"class":30,"line":393},[28,161059,31780],{"class":38},[28,161061,367],{"class":34},[28,161063,161064],{"class":735},"\"3. 取款\"",[28,161066,228],{"class":34},[28,161068,161069,161071,161073,161076],{"class":30,"line":409},[28,161070,31780],{"class":38},[28,161072,367],{"class":34},[28,161074,161075],{"class":735},"\"0. 退出\"",[28,161077,228],{"class":34},[28,161079,161080],{"class":30,"line":1711},[28,161081,2890],{"emptyLinePlaceholder":562},[28,161083,161084,161087,161089,161091,161093,161095],{"class":30,"line":1802},[28,161085,161086],{"class":34},"    choice ",[28,161088,83],{"class":42},[28,161090,61082],{"class":38},[28,161092,367],{"class":34},[28,161094,153467],{"class":735},[28,161096,228],{"class":34},[28,161098,161099],{"class":30,"line":1808},[28,161100,2890],{"emptyLinePlaceholder":562},[28,161102,161103,161105,161107,161109,161111],{"class":30,"line":1820},[28,161104,3590],{"class":42},[28,161106,153480],{"class":34},[28,161108,3439],{"class":42},[28,161110,153485],{"class":735},[28,161112,4227],{"class":34},[28,161114,161115,161117,161119,161122],{"class":30,"line":2102},[28,161116,32929],{"class":38},[28,161118,367],{"class":34},[28,161120,161121],{"class":735},"\"余额为1000元\"",[28,161123,228],{"class":34},[28,161125,161126,161128,161130,161132,161134],{"class":30,"line":2107},[28,161127,39770],{"class":42},[28,161129,153480],{"class":34},[28,161131,3439],{"class":42},[28,161133,153504],{"class":735},[28,161135,4227],{"class":34},[28,161137,161138,161140,161142,161145],{"class":30,"line":2113},[28,161139,32929],{"class":38},[28,161141,367],{"class":34},[28,161143,161144],{"class":735},"\"存款功能\"",[28,161146,228],{"class":34},[28,161148,161149,161151,161153,161155,161157],{"class":30,"line":2118},[28,161150,39770],{"class":42},[28,161152,153480],{"class":34},[28,161154,3439],{"class":42},[28,161156,153522],{"class":735},[28,161158,4227],{"class":34},[28,161160,161161,161163,161165,161168],{"class":30,"line":2132},[28,161162,32929],{"class":38},[28,161164,367],{"class":34},[28,161166,161167],{"class":735},"\"取款功能\"",[28,161169,228],{"class":34},[28,161171,161172,161174,161176,161178,161180],{"class":30,"line":2137},[28,161173,39770],{"class":42},[28,161175,153480],{"class":34},[28,161177,3439],{"class":42},[28,161179,153576],{"class":735},[28,161181,4227],{"class":34},[28,161183,161184,161186,161188,161190],{"class":30,"line":2143},[28,161185,32929],{"class":38},[28,161187,367],{"class":34},[28,161189,153587],{"class":735},[28,161191,228],{"class":34},[28,161193,161194],{"class":30,"line":2164},[28,161195,32106],{"class":42},[28,161197,161198,161200],{"class":30,"line":2169},[28,161199,158416],{"class":42},[28,161201,4227],{"class":34},[28,161203,161204,161206,161208,161210],{"class":30,"line":2183},[28,161205,32929],{"class":38},[28,161207,367],{"class":34},[28,161209,153608],{"class":735},[28,161211,228],{"class":34},[14,161213,161214,161215,161217,161218,28871],{},"菜单类程序通常使用 ",[25,161216,159916],{},"，用户选择退出时 ",[25,161219,2543],{},[60,161221,161223],{"id":161222},"_414-易错点","4.14 易错点",[588,161225,161226,161231,161237,161245,161251],{},[591,161227,161228,161230],{},[25,161229,109057],{}," 循环必须更新控制变量。",[591,161232,161233,161236],{},[25,161234,161235],{},"range(1, 10)"," 不包含 10。",[591,161238,161239,161241,161242,161244],{},[25,161240,2543],{}," 结束整个循环，",[25,161243,155066],{}," 只跳过本轮。",[591,161246,161247,161248,161250],{},"嵌套循环中，",[25,161249,2543],{}," 只跳出当前所在的一层循环。",[591,161252,161253],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[60,161255,161257],{"id":161256},"_415-本章练习","4.15 本章练习",[588,161259,161260,161263,161266,161269,161272],{},[591,161261,161262],{},"输出 1 到 100。",[591,161264,161265],{},"计算 1 到 100 的偶数和。",[591,161267,161268],{},"输出 100 以内能被 3 和 5 同时整除的数。",[591,161270,161271],{},"编写猜数字游戏，限制最多猜 7 次。",[591,161273,161274],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[547,161276,161277],{},"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":77,"depth":77,"links":161279},[161280,161281,161282,161283,161284,161288,161289,161290,161291,161292,161293,161294,161295,161296,161297],{"id":159536,"depth":77,"text":159537},{"id":159566,"depth":77,"text":159567},{"id":159655,"depth":77,"text":159656},{"id":159749,"depth":77,"text":159750},{"id":159923,"depth":77,"text":159924,"children":161285},[161286,161287],{"id":159927,"depth":114,"text":159928},{"id":159991,"depth":114,"text":159992},{"id":160055,"depth":77,"text":160056},{"id":160150,"depth":77,"text":160151},{"id":160259,"depth":77,"text":160260},{"id":160455,"depth":77,"text":160456},{"id":160540,"depth":77,"text":160541},{"id":160679,"depth":77,"text":160680},{"id":160859,"depth":77,"text":160860},{"id":161008,"depth":77,"text":161009},{"id":161222,"depth":77,"text":161223},{"id":161256,"depth":77,"text":161257},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159528,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161304,"title":161305,"body":161306,"description":559,"extension":560,"meta":163311,"navigation":562,"path":163312,"seo":163313,"stem":163314,"__hash__":163315},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161307,"toc":163291},[161308,161311,161315,161318,161321,161335,161338,161352,161356,161358,161377,161379,161426,161428,161442,161446,161520,161523,161527,161530,161589,161597,161600,161653,161656,161660,161665,161720,161728,161778,161782,161787,161795,161894,161900,161904,161909,161912,161923,161964,161977,161981,161984,162020,162023,162036,162039,162099,162103,162107,162110,162161,162165,162168,162215,162221,162287,162290,162294,162297,162413,162416,162420,162423,162529,162533,162536,162574,162577,162619,162622,162682,162685,162689,163153,163156,163160,163187,163193,163254,163258,163288],[10,161309,161305],{"id":161310},"_5-函数基础",[60,161312,161314],{"id":161313},"_51-为什么需要函数","5.1 为什么需要函数",[14,161316,161317],{},"函数用于封装一段可以重复使用的代码。",[14,161319,161320],{},"不使用函数的问题：",[588,161322,161323,161326,161329,161332],{},[591,161324,161325],{},"重复代码多。",[591,161327,161328],{},"修改逻辑时容易漏改。",[591,161330,161331],{},"主流程不清晰。",[591,161333,161334],{},"程序越写越长，难以维护。",[14,161336,161337],{},"使用函数后的好处：",[588,161339,161340,161343,161346,161349],{},[591,161341,161342],{},"提高复用性。",[591,161344,161345],{},"提高可读性。",[591,161347,161348],{},"便于调试。",[591,161350,161351],{},"便于分工。",[60,161353,161355],{"id":161354},"_52-函数定义","5.2 函数定义",[14,161357,5669],{},[18,161359,161361],{"className":20,"code":161360,"language":22,"meta":23,"style":23},"def 函数名():\n    函数体\n",[25,161362,161363,161372],{"__ignoreMap":23},[28,161364,161365,161367,161370],{"class":30,"line":31},[28,161366,32426],{"class":42},[28,161368,161369],{"class":2453}," 函数名",[28,161371,32432],{"class":34},[28,161373,161374],{"class":30,"line":77},[28,161375,161376],{"class":34},"    函数体\n",[14,161378,15621],{},[18,161380,161382],{"className":20,"code":161381,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[25,161383,161384,161393,161403,161413,161417,161421],{"__ignoreMap":23},[28,161385,161386,161388,161391],{"class":30,"line":31},[28,161387,32426],{"class":42},[28,161389,161390],{"class":2453}," say_hello",[28,161392,32432],{"class":34},[28,161394,161395,161397,161399,161401],{"class":30,"line":77},[28,161396,31780],{"class":38},[28,161398,367],{"class":34},[28,161400,6332],{"class":735},[28,161402,228],{"class":34},[28,161404,161405,161407,161409,161411],{"class":30,"line":114},[28,161406,31780],{"class":38},[28,161408,367],{"class":34},[28,161410,147033],{"class":735},[28,161412,228],{"class":34},[28,161414,161415],{"class":30,"line":128},[28,161416,2890],{"emptyLinePlaceholder":562},[28,161418,161419],{"class":30,"line":393},[28,161420,2890],{"emptyLinePlaceholder":562},[28,161422,161423],{"class":30,"line":409},[28,161424,161425],{"class":34},"say_hello()\n",[14,161427,9513],{},[588,161429,161430,161433,161436,161439],{},[591,161431,161432],{},"函数必须先定义，再调用。",[591,161434,161435],{},"函数名遵循变量命名规则。",[591,161437,161438],{},"函数体需要缩进。",[591,161440,161441],{},"函数不调用就不会执行。",[60,161443,161445],{"id":161444},"_53-函数调用","5.3 函数调用",[18,161447,161449],{"className":20,"code":161448,"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,161450,161451,161460,161471,161482,161493,161503,161507,161511,161516],{"__ignoreMap":23},[28,161452,161453,161455,161458],{"class":30,"line":31},[28,161454,32426],{"class":42},[28,161456,161457],{"class":2453}," print_menu",[28,161459,32432],{"class":34},[28,161461,161462,161464,161466,161469],{"class":30,"line":77},[28,161463,31780],{"class":38},[28,161465,367],{"class":34},[28,161467,161468],{"class":735},"\"1. 查询\"",[28,161470,228],{"class":34},[28,161472,161473,161475,161477,161480],{"class":30,"line":114},[28,161474,31780],{"class":38},[28,161476,367],{"class":34},[28,161478,161479],{"class":735},"\"2. 添加\"",[28,161481,228],{"class":34},[28,161483,161484,161486,161488,161491],{"class":30,"line":128},[28,161485,31780],{"class":38},[28,161487,367],{"class":34},[28,161489,161490],{"class":735},"\"3. 删除\"",[28,161492,228],{"class":34},[28,161494,161495,161497,161499,161501],{"class":30,"line":393},[28,161496,31780],{"class":38},[28,161498,367],{"class":34},[28,161500,161075],{"class":735},[28,161502,228],{"class":34},[28,161504,161505],{"class":30,"line":409},[28,161506,2890],{"emptyLinePlaceholder":562},[28,161508,161509],{"class":30,"line":1711},[28,161510,2890],{"emptyLinePlaceholder":562},[28,161512,161513],{"class":30,"line":1802},[28,161514,161515],{"class":34},"print_menu()\n",[28,161517,161518],{"class":30,"line":1808},[28,161519,161515],{"class":34},[14,161521,161522],{},"函数可以多次调用，每次调用都会执行函数体。",[60,161524,161526],{"id":161525},"_54-参数","5.4 参数",[14,161528,161529],{},"参数用于向函数传递数据。",[18,161531,161533],{"className":20,"code":161532,"language":22,"meta":23,"style":23},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[25,161534,161535,161544,161564,161568,161572,161581],{"__ignoreMap":23},[28,161536,161537,161539,161541],{"class":30,"line":31},[28,161538,32426],{"class":42},[28,161540,161390],{"class":2453},[28,161542,161543],{"class":34},"(name):\n",[28,161545,161546,161548,161550,161552,161554,161556,161558,161560,161562],{"class":30,"line":77},[28,161547,31780],{"class":38},[28,161549,367],{"class":34},[28,161551,686],{"class":42},[28,161553,157448],{"class":735},[28,161555,1515],{"class":38},[28,161557,80287],{"class":34},[28,161559,1565],{"class":38},[28,161561,880],{"class":735},[28,161563,228],{"class":34},[28,161565,161566],{"class":30,"line":114},[28,161567,2890],{"emptyLinePlaceholder":562},[28,161569,161570],{"class":30,"line":128},[28,161571,2890],{"emptyLinePlaceholder":562},[28,161573,161574,161577,161579],{"class":30,"line":393},[28,161575,161576],{"class":34},"say_hello(",[28,161578,150282],{"class":735},[28,161580,228],{"class":34},[28,161582,161583,161585,161587],{"class":30,"line":409},[28,161584,161576],{"class":34},[28,161586,151330],{"class":735},[28,161588,228],{"class":34},[14,161590,161591,161593,161594,161596],{},[25,161592,80287],{}," 是形参，",[25,161595,150282],{}," 是实参。",[14,161598,161599],{},"多个参数：",[18,161601,161603],{"className":20,"code":161602,"language":22,"meta":23,"style":23},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[25,161604,161605,161613,161626,161632,161636,161640],{"__ignoreMap":23},[28,161606,161607,161609,161611],{"class":30,"line":31},[28,161608,32426],{"class":42},[28,161610,5697],{"class":2453},[28,161612,151487],{"class":34},[28,161614,161615,161618,161620,161622,161624],{"class":30,"line":77},[28,161616,161617],{"class":34},"    result ",[28,161619,83],{"class":42},[28,161621,11355],{"class":34},[28,161623,1104],{"class":42},[28,161625,151498],{"class":34},[28,161627,161628,161630],{"class":30,"line":114},[28,161629,31780],{"class":38},[28,161631,77062],{"class":34},[28,161633,161634],{"class":30,"line":128},[28,161635,2890],{"emptyLinePlaceholder":562},[28,161637,161638],{"class":30,"line":393},[28,161639,2890],{"emptyLinePlaceholder":562},[28,161641,161642,161645,161647,161649,161651],{"class":30,"line":409},[28,161643,161644],{"class":34},"add(",[28,161646,225],{"class":38},[28,161648,12921],{"class":34},[28,161650,1320],{"class":38},[28,161652,228],{"class":34},[14,161654,161655],{},"调用时参数数量必须匹配。",[60,161657,161659],{"id":161658},"_55-返回值","5.5 返回值",[14,161661,161662,161664],{},[25,161663,17532],{}," 用于把函数内部的结果返回给调用者。",[18,161666,161668],{"className":20,"code":161667,"language":22,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[25,161669,161670,161678,161688,161692,161696,161714],{"__ignoreMap":23},[28,161671,161672,161674,161676],{"class":30,"line":31},[28,161673,32426],{"class":42},[28,161675,5697],{"class":2453},[28,161677,151487],{"class":34},[28,161679,161680,161682,161684,161686],{"class":30,"line":77},[28,161681,4578],{"class":42},[28,161683,11355],{"class":34},[28,161685,1104],{"class":42},[28,161687,151498],{"class":34},[28,161689,161690],{"class":30,"line":114},[28,161691,2890],{"emptyLinePlaceholder":562},[28,161693,161694],{"class":30,"line":128},[28,161695,2890],{"emptyLinePlaceholder":562},[28,161697,161698,161701,161703,161706,161708,161710,161712],{"class":30,"line":393},[28,161699,161700],{"class":34},"result ",[28,161702,83],{"class":42},[28,161704,161705],{"class":34}," add(",[28,161707,225],{"class":38},[28,161709,12921],{"class":34},[28,161711,1320],{"class":38},[28,161713,228],{"class":34},[28,161715,161716,161718],{"class":30,"line":409},[28,161717,30898],{"class":38},[28,161719,77062],{"class":34},[14,161721,161722,161723,161725,161726,28871],{},"如果函数没有写 ",[25,161724,17532],{},"，默认返回 ",[25,161727,96157],{},[18,161729,161731],{"className":20,"code":161730,"language":22,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[25,161732,161733,161741,161751,161755,161759,161768],{"__ignoreMap":23},[28,161734,161735,161737,161739],{"class":30,"line":31},[28,161736,32426],{"class":42},[28,161738,161390],{"class":2453},[28,161740,32432],{"class":34},[28,161742,161743,161745,161747,161749],{"class":30,"line":77},[28,161744,31780],{"class":38},[28,161746,367],{"class":34},[28,161748,6332],{"class":735},[28,161750,228],{"class":34},[28,161752,161753],{"class":30,"line":114},[28,161754,2890],{"emptyLinePlaceholder":562},[28,161756,161757],{"class":30,"line":128},[28,161758,2890],{"emptyLinePlaceholder":562},[28,161760,161761,161763,161765],{"class":30,"line":393},[28,161762,161700],{"class":34},[28,161764,83],{"class":42},[28,161766,161767],{"class":34}," say_hello()\n",[28,161769,161770,161772,161775],{"class":30,"line":409},[28,161771,30898],{"class":38},[28,161773,161774],{"class":34},"(result)  ",[28,161776,161777],{"class":73},"# None\n",[60,161779,161781],{"id":161780},"_56-return的作用","5.6 return的作用",[14,161783,161784,161786],{},[25,161785,17532],{}," 有两个作用：",[588,161788,161789,161792],{},[591,161790,161791],{},"返回结果。",[591,161793,161794],{},"结束函数。",[18,161796,161798],{"className":20,"code":161797,"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,161799,161800,161810,161822,161829,161833,161845,161852,161856,161863,161867,161871,161882],{"__ignoreMap":23},[28,161801,161802,161804,161807],{"class":30,"line":31},[28,161803,32426],{"class":42},[28,161805,161806],{"class":2453}," check_age",[28,161808,161809],{"class":34},"(age):\n",[28,161811,161812,161814,161816,161818,161820],{"class":30,"line":77},[28,161813,3590],{"class":42},[28,161815,16193],{"class":34},[28,161817,1529],{"class":42},[28,161819,4581],{"class":38},[28,161821,4227],{"class":34},[28,161823,161824,161826],{"class":30,"line":114},[28,161825,15238],{"class":42},[28,161827,161828],{"class":735}," \"年龄不合法\"\n",[28,161830,161831],{"class":30,"line":128},[28,161832,2890],{"emptyLinePlaceholder":562},[28,161834,161835,161837,161839,161841,161843],{"class":30,"line":393},[28,161836,3590],{"class":42},[28,161838,16193],{"class":34},[28,161840,2200],{"class":42},[28,161842,156679],{"class":38},[28,161844,4227],{"class":34},[28,161846,161847,161849],{"class":30,"line":409},[28,161848,15238],{"class":42},[28,161850,161851],{"class":735}," \"成年人\"\n",[28,161853,161854],{"class":30,"line":1711},[28,161855,2890],{"emptyLinePlaceholder":562},[28,161857,161858,161860],{"class":30,"line":1802},[28,161859,4578],{"class":42},[28,161861,161862],{"class":735}," \"未成年人\"\n",[28,161864,161865],{"class":30,"line":1808},[28,161866,2890],{"emptyLinePlaceholder":562},[28,161868,161869],{"class":30,"line":1820},[28,161870,2890],{"emptyLinePlaceholder":562},[28,161872,161873,161875,161878,161880],{"class":30,"line":2102},[28,161874,30898],{"class":38},[28,161876,161877],{"class":34},"(check_age(",[28,161879,1320],{"class":38},[28,161881,30980],{"class":34},[28,161883,161884,161886,161888,161890,161892],{"class":30,"line":2107},[28,161885,30898],{"class":38},[28,161887,161877],{"class":34},[28,161889,445],{"class":42},[28,161891,39],{"class":38},[28,161893,30980],{"class":34},[14,161895,161896,161897,161899],{},"函数执行到 ",[25,161898,17532],{}," 后，后面的代码不会继续执行。",[60,161901,161903],{"id":161902},"_57-none","5.7 None",[14,161905,161906,161908],{},[25,161907,96157],{}," 表示空值或没有结果。",[14,161910,161911],{},"常见使用场景：",[588,161913,161914,161917,161920],{},[591,161915,161916],{},"函数没有返回值。",[591,161918,161919],{},"变量暂时没有具体值。",[591,161921,161922],{},"表示查询不到结果。",[18,161924,161926],{"className":20,"code":161925,"language":22,"meta":23,"style":23},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[25,161927,161928,161936,161940,161953],{"__ignoreMap":23},[28,161929,161930,161932,161934],{"class":30,"line":31},[28,161931,161700],{"class":34},[28,161933,83],{"class":42},[28,161935,152566],{"class":38},[28,161937,161938],{"class":30,"line":77},[28,161939,2890],{"emptyLinePlaceholder":562},[28,161941,161942,161944,161947,161949,161951],{"class":30,"line":114},[28,161943,2021],{"class":42},[28,161945,161946],{"class":34}," result ",[28,161948,39404],{"class":42},[28,161950,39410],{"class":38},[28,161952,4227],{"class":34},[28,161954,161955,161957,161959,161962],{"class":30,"line":128},[28,161956,31780],{"class":38},[28,161958,367],{"class":34},[28,161960,161961],{"class":735},"\"没有数据\"",[28,161963,228],{"class":34},[14,161965,161966,161967,161969,161970,161973,161974,28871],{},"判断 ",[25,161968,96157],{}," 推荐使用 ",[25,161971,161972],{},"is None","，不要写成 ",[25,161975,161976],{},"== None",[60,161978,161980],{"id":161979},"_58-函数文档字符串","5.8 函数文档字符串",[14,161982,161983],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[18,161985,161987],{"className":20,"code":161986,"language":22,"meta":23,"style":23},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[25,161988,161989,161999,162004],{"__ignoreMap":23},[28,161990,161991,161993,161996],{"class":30,"line":31},[28,161992,32426],{"class":42},[28,161994,161995],{"class":2453}," calculate_bmi",[28,161997,161998],{"class":34},"(weight, height):\n",[28,162000,162001],{"class":30,"line":77},[28,162002,162003],{"class":735},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[28,162005,162006,162008,162011,162013,162016,162018],{"class":30,"line":114},[28,162007,4578],{"class":42},[28,162009,162010],{"class":34}," weight ",[28,162012,43],{"class":42},[28,162014,162015],{"class":34}," height ",[28,162017,11147],{"class":42},[28,162019,48200],{"class":38},[14,162021,162022],{},"查看说明：",[18,162024,162026],{"className":20,"code":162025,"language":22,"meta":23,"style":23},"help(calculate_bmi)\n",[25,162027,162028],{"__ignoreMap":23},[28,162029,162030,162033],{"class":30,"line":31},[28,162031,162032],{"class":38},"help",[28,162034,162035],{"class":34},"(calculate_bmi)\n",[14,162037,162038],{},"较完整的写法：",[18,162040,162042],{"className":20,"code":162041,"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,162043,162044,162052,162057,162062,162066,162071,162076,162081,162085],{"__ignoreMap":23},[28,162045,162046,162048,162050],{"class":30,"line":31},[28,162047,32426],{"class":42},[28,162049,161995],{"class":2453},[28,162051,161998],{"class":34},[28,162053,162054],{"class":30,"line":77},[28,162055,162056],{"class":735},"    \"\"\"\n",[28,162058,162059],{"class":30,"line":114},[28,162060,162061],{"class":735},"    计算BMI。\n",[28,162063,162064],{"class":30,"line":128},[28,162065,2890],{"emptyLinePlaceholder":562},[28,162067,162068],{"class":30,"line":393},[28,162069,162070],{"class":735},"    :param weight: 体重，单位kg\n",[28,162072,162073],{"class":30,"line":409},[28,162074,162075],{"class":735},"    :param height: 身高，单位m\n",[28,162077,162078],{"class":30,"line":1711},[28,162079,162080],{"class":735},"    :return: BMI数值\n",[28,162082,162083],{"class":30,"line":1802},[28,162084,162056],{"class":735},[28,162086,162087,162089,162091,162093,162095,162097],{"class":30,"line":1808},[28,162088,4578],{"class":42},[28,162090,162010],{"class":34},[28,162092,43],{"class":42},[28,162094,162015],{"class":34},[28,162096,11147],{"class":42},[28,162098,48200],{"class":38},[60,162100,162102],{"id":162101},"_59-变量作用域","5.9 变量作用域",[605,162104,162106],{"id":162105},"_591-局部变量","5.9.1 局部变量",[14,162108,162109],{},"在函数内部定义的变量，只能在函数内部使用。",[18,162111,162113],{"className":20,"code":162112,"language":22,"meta":23,"style":23},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[25,162114,162115,162124,162132,162138,162142,162146,162151],{"__ignoreMap":23},[28,162116,162117,162119,162122],{"class":30,"line":31},[28,162118,32426],{"class":42},[28,162120,162121],{"class":2453}," test",[28,162123,32432],{"class":34},[28,162125,162126,162128,162130],{"class":30,"line":77},[28,162127,46070],{"class":34},[28,162129,83],{"class":42},[28,162131,58905],{"class":38},[28,162133,162134,162136],{"class":30,"line":114},[28,162135,31780],{"class":38},[28,162137,649],{"class":34},[28,162139,162140],{"class":30,"line":128},[28,162141,2890],{"emptyLinePlaceholder":562},[28,162143,162144],{"class":30,"line":393},[28,162145,2890],{"emptyLinePlaceholder":562},[28,162147,162148],{"class":30,"line":409},[28,162149,162150],{"class":34},"test()\n",[28,162152,162153,162155,162158],{"class":30,"line":1711},[28,162154,30898],{"class":38},[28,162156,162157],{"class":34},"(num)  ",[28,162159,162160],{"class":73},"# 报错\n",[605,162162,162164],{"id":162163},"_592-全局变量","5.9.2 全局变量",[14,162166,162167],{},"在函数外部定义的变量，可以在函数内部读取。",[18,162169,162171],{"className":20,"code":162170,"language":22,"meta":23,"style":23},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[25,162172,162173,162181,162185,162189,162197,162203,162207,162211],{"__ignoreMap":23},[28,162174,162175,162177,162179],{"class":30,"line":31},[28,162176,146930],{"class":34},[28,162178,83],{"class":42},[28,162180,149747],{"class":735},[28,162182,162183],{"class":30,"line":77},[28,162184,2890],{"emptyLinePlaceholder":562},[28,162186,162187],{"class":30,"line":114},[28,162188,2890],{"emptyLinePlaceholder":562},[28,162190,162191,162193,162195],{"class":30,"line":128},[28,162192,32426],{"class":42},[28,162194,161390],{"class":2453},[28,162196,32432],{"class":34},[28,162198,162199,162201],{"class":30,"line":393},[28,162200,31780],{"class":38},[28,162202,151054],{"class":34},[28,162204,162205],{"class":30,"line":409},[28,162206,2890],{"emptyLinePlaceholder":562},[28,162208,162209],{"class":30,"line":1711},[28,162210,2890],{"emptyLinePlaceholder":562},[28,162212,162213],{"class":30,"line":1802},[28,162214,161425],{"class":34},[14,162216,162217,162218,28871],{},"如果要在函数内部修改全局变量，需要 ",[25,162219,162220],{},"global",[18,162222,162224],{"className":20,"code":162223,"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,162225,162226,162234,162238,162242,162251,162259,162267,162271,162275,162280],{"__ignoreMap":23},[28,162227,162228,162230,162232],{"class":30,"line":31},[28,162229,147085],{"class":34},[28,162231,83],{"class":42},[28,162233,47810],{"class":38},[28,162235,162236],{"class":30,"line":77},[28,162237,2890],{"emptyLinePlaceholder":562},[28,162239,162240],{"class":30,"line":114},[28,162241,2890],{"emptyLinePlaceholder":562},[28,162243,162244,162246,162249],{"class":30,"line":128},[28,162245,32426],{"class":42},[28,162247,162248],{"class":2453}," add_count",[28,162250,32432],{"class":34},[28,162252,162253,162256],{"class":30,"line":393},[28,162254,162255],{"class":42},"    global",[28,162257,162258],{"class":34}," count\n",[28,162260,162261,162263,162265],{"class":30,"line":409},[28,162262,159827],{"class":34},[28,162264,9964],{"class":42},[28,162266,56176],{"class":38},[28,162268,162269],{"class":30,"line":1711},[28,162270,2890],{"emptyLinePlaceholder":562},[28,162272,162273],{"class":30,"line":1802},[28,162274,2890],{"emptyLinePlaceholder":562},[28,162276,162277],{"class":30,"line":1808},[28,162278,162279],{"class":34},"add_count()\n",[28,162281,162282,162284],{"class":30,"line":1820},[28,162283,30898],{"class":38},[28,162285,162286],{"class":34},"(count)\n",[14,162288,162289],{},"不建议大量使用全局变量，项目变大后很难维护。",[60,162291,162293],{"id":162292},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162295,162296],{},"一个函数中可以调用另一个函数。",[18,162298,162300],{"className":20,"code":162299,"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,162301,162302,162311,162325,162329,162333,162342,162347,162367,162388,162392,162396,162400],{"__ignoreMap":23},[28,162303,162304,162306,162309],{"class":30,"line":31},[28,162305,32426],{"class":42},[28,162307,162308],{"class":2453}," print_line",[28,162310,32432],{"class":34},[28,162312,162313,162315,162317,162319,162321,162323],{"class":30,"line":77},[28,162314,31780],{"class":38},[28,162316,367],{"class":34},[28,162318,32961],{"class":735},[28,162320,7006],{"class":42},[28,162322,79142],{"class":38},[28,162324,228],{"class":34},[28,162326,162327],{"class":30,"line":114},[28,162328,2890],{"emptyLinePlaceholder":562},[28,162330,162331],{"class":30,"line":128},[28,162332,2890],{"emptyLinePlaceholder":562},[28,162334,162335,162337,162340],{"class":30,"line":393},[28,162336,32426],{"class":42},[28,162338,162339],{"class":2453}," print_info",[28,162341,149769],{"class":34},[28,162343,162344],{"class":30,"line":409},[28,162345,162346],{"class":34},"    print_line()\n",[28,162348,162349,162351,162353,162355,162357,162359,162361,162363,162365],{"class":30,"line":1711},[28,162350,31780],{"class":38},[28,162352,367],{"class":34},[28,162354,686],{"class":42},[28,162356,157076],{"class":735},[28,162358,1515],{"class":38},[28,162360,80287],{"class":34},[28,162362,1565],{"class":38},[28,162364,880],{"class":735},[28,162366,228],{"class":34},[28,162368,162369,162371,162373,162375,162378,162380,162382,162384,162386],{"class":30,"line":1802},[28,162370,31780],{"class":38},[28,162372,367],{"class":34},[28,162374,686],{"class":42},[28,162376,162377],{"class":735},"\"年龄:",[28,162379,1515],{"class":38},[28,162381,70698],{"class":34},[28,162383,1565],{"class":38},[28,162385,880],{"class":735},[28,162387,228],{"class":34},[28,162389,162390],{"class":30,"line":1808},[28,162391,162346],{"class":34},[28,162393,162394],{"class":30,"line":1820},[28,162395,2890],{"emptyLinePlaceholder":562},[28,162397,162398],{"class":30,"line":2102},[28,162399,2890],{"emptyLinePlaceholder":562},[28,162401,162402,162405,162407,162409,162411],{"class":30,"line":2107},[28,162403,162404],{"class":34},"print_info(",[28,162406,150282],{"class":735},[28,162408,12921],{"class":34},[28,162410,1270],{"class":38},[28,162412,228],{"class":34},[14,162414,162415],{},"这种方式可以把小功能组合成大功能。",[60,162417,162419],{"id":162418},"_511-参数检查","5.11 参数检查",[14,162421,162422],{},"函数内部可以检查参数是否合法。",[18,162424,162426],{"className":20,"code":162425,"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,162427,162428,162437,162449,162455,162465,162469,162473,162490,162494,162506,162517,162523],{"__ignoreMap":23},[28,162429,162430,162432,162435],{"class":30,"line":31},[28,162431,32426],{"class":42},[28,162433,162434],{"class":2453}," divide",[28,162436,151487],{"class":34},[28,162438,162439,162441,162443,162445,162447],{"class":30,"line":77},[28,162440,3590],{"class":42},[28,162442,11368],{"class":34},[28,162444,3439],{"class":42},[28,162446,4581],{"class":38},[28,162448,4227],{"class":34},[28,162450,162451,162453],{"class":30,"line":114},[28,162452,15238],{"class":42},[28,162454,152566],{"class":38},[28,162456,162457,162459,162461,162463],{"class":30,"line":128},[28,162458,4578],{"class":42},[28,162460,11355],{"class":34},[28,162462,43],{"class":42},[28,162464,151498],{"class":34},[28,162466,162467],{"class":30,"line":393},[28,162468,2890],{"emptyLinePlaceholder":562},[28,162470,162471],{"class":30,"line":409},[28,162472,2890],{"emptyLinePlaceholder":562},[28,162474,162475,162477,162479,162482,162484,162486,162488],{"class":30,"line":1711},[28,162476,161700],{"class":34},[28,162478,83],{"class":42},[28,162480,162481],{"class":34}," divide(",[28,162483,225],{"class":38},[28,162485,12921],{"class":34},[28,162487,822],{"class":38},[28,162489,228],{"class":34},[28,162491,162492],{"class":30,"line":1802},[28,162493,2890],{"emptyLinePlaceholder":562},[28,162495,162496,162498,162500,162502,162504],{"class":30,"line":1808},[28,162497,2021],{"class":42},[28,162499,161946],{"class":34},[28,162501,39404],{"class":42},[28,162503,39410],{"class":38},[28,162505,4227],{"class":34},[28,162507,162508,162510,162512,162515],{"class":30,"line":1820},[28,162509,31780],{"class":38},[28,162511,367],{"class":34},[28,162513,162514],{"class":735},"\"除数不能为0\"",[28,162516,228],{"class":34},[28,162518,162519,162521],{"class":30,"line":2102},[28,162520,2191],{"class":42},[28,162522,4227],{"class":34},[28,162524,162525,162527],{"class":30,"line":2107},[28,162526,31780],{"class":38},[28,162528,77062],{"class":34},[60,162530,162532],{"id":162531},"_512-类型提示","5.12 类型提示",[14,162534,162535],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[18,162537,162539],{"className":20,"code":162538,"language":22,"meta":23,"style":23},"def add(a: int, b: int) -> int:\n    return a + b\n",[25,162540,162541,162564],{"__ignoreMap":23},[28,162542,162543,162545,162547,162550,162552,162555,162557,162560,162562],{"class":30,"line":31},[28,162544,32426],{"class":42},[28,162546,5697],{"class":2453},[28,162548,162549],{"class":34},"(a: ",[28,162551,640],{"class":38},[28,162553,162554],{"class":34},", b: ",[28,162556,640],{"class":38},[28,162558,162559],{"class":34},") -> ",[28,162561,640],{"class":38},[28,162563,4227],{"class":34},[28,162565,162566,162568,162570,162572],{"class":30,"line":77},[28,162567,4578],{"class":42},[28,162569,11355],{"class":34},[28,162571,1104],{"class":42},[28,162573,151498],{"class":34},[14,162575,162576],{},"字符串参数：",[18,162578,162580],{"className":20,"code":162579,"language":22,"meta":23,"style":23},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[25,162581,162582,162599],{"__ignoreMap":23},[28,162583,162584,162586,162588,162591,162593,162595,162597],{"class":30,"line":31},[28,162585,32426],{"class":42},[28,162587,161390],{"class":2453},[28,162589,162590],{"class":34},"(name: ",[28,162592,1790],{"class":38},[28,162594,162559],{"class":34},[28,162596,96157],{"class":38},[28,162598,4227],{"class":34},[28,162600,162601,162603,162605,162607,162609,162611,162613,162615,162617],{"class":30,"line":77},[28,162602,31780],{"class":38},[28,162604,367],{"class":34},[28,162606,686],{"class":42},[28,162608,157448],{"class":735},[28,162610,1515],{"class":38},[28,162612,80287],{"class":34},[28,162614,1565],{"class":38},[28,162616,880],{"class":735},[28,162618,228],{"class":34},[14,162620,162621],{},"列表参数：",[18,162623,162625],{"className":20,"code":162624,"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,162626,162627,162646,162654,162666,162675],{"__ignoreMap":23},[28,162628,162629,162631,162634,162637,162639,162642,162644],{"class":30,"line":31},[28,162630,32426],{"class":42},[28,162632,162633],{"class":2453}," get_total",[28,162635,162636],{"class":34},"(numbers: list[",[28,162638,640],{"class":38},[28,162640,162641],{"class":34},"]) -> ",[28,162643,640],{"class":38},[28,162645,4227],{"class":34},[28,162647,162648,162650,162652],{"class":30,"line":77},[28,162649,159701],{"class":34},[28,162651,83],{"class":42},[28,162653,47810],{"class":38},[28,162655,162656,162658,162661,162663],{"class":30,"line":114},[28,162657,377],{"class":42},[28,162659,162660],{"class":34}," number ",[28,162662,55],{"class":42},[28,162664,162665],{"class":34}," numbers:\n",[28,162667,162668,162670,162672],{"class":30,"line":128},[28,162669,160376],{"class":34},[28,162671,9964],{"class":42},[28,162673,162674],{"class":34}," number\n",[28,162676,162677,162679],{"class":30,"line":393},[28,162678,4578],{"class":42},[28,162680,162681],{"class":34}," total\n",[14,162683,162684],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[60,162686,162688],{"id":162687},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[18,162690,162692],{"className":20,"code":162691,"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,162693,162694,162704,162708,162712,162720,162731,162741,162751,162761,162771,162775,162779,162788,162810,162814,162818,162827,162833,162853,162865,162876,162880,162889,162900,162905,162909,162913,162922,162928,162947,162959,162969,162973,162984,162994,162998,163006,163017,163021,163025,163029,163037,163042,163056,163060,163072,163077,163089,163094,163106,163111,163123,163133,163137,163143],{"__ignoreMap":23},[28,162695,162696,162699,162701],{"class":30,"line":31},[28,162697,162698],{"class":34},"balance ",[28,162700,83],{"class":42},[28,162702,162703],{"class":38}," 1000\n",[28,162705,162706],{"class":30,"line":77},[28,162707,2890],{"emptyLinePlaceholder":562},[28,162709,162710],{"class":30,"line":114},[28,162711,2890],{"emptyLinePlaceholder":562},[28,162713,162714,162716,162718],{"class":30,"line":128},[28,162715,32426],{"class":42},[28,162717,152427],{"class":2453},[28,162719,32432],{"class":34},[28,162721,162722,162724,162726,162729],{"class":30,"line":393},[28,162723,31780],{"class":38},[28,162725,367],{"class":34},[28,162727,162728],{"class":735},"\"====== ATM ======\"",[28,162730,228],{"class":34},[28,162732,162733,162735,162737,162739],{"class":30,"line":409},[28,162734,31780],{"class":38},[28,162736,367],{"class":34},[28,162738,161042],{"class":735},[28,162740,228],{"class":34},[28,162742,162743,162745,162747,162749],{"class":30,"line":1711},[28,162744,31780],{"class":38},[28,162746,367],{"class":34},[28,162748,161053],{"class":735},[28,162750,228],{"class":34},[28,162752,162753,162755,162757,162759],{"class":30,"line":1802},[28,162754,31780],{"class":38},[28,162756,367],{"class":34},[28,162758,161064],{"class":735},[28,162760,228],{"class":34},[28,162762,162763,162765,162767,162769],{"class":30,"line":1808},[28,162764,31780],{"class":38},[28,162766,367],{"class":34},[28,162768,161075],{"class":735},[28,162770,228],{"class":34},[28,162772,162773],{"class":30,"line":1820},[28,162774,2890],{"emptyLinePlaceholder":562},[28,162776,162777],{"class":30,"line":2102},[28,162778,2890],{"emptyLinePlaceholder":562},[28,162780,162781,162783,162786],{"class":30,"line":2107},[28,162782,32426],{"class":42},[28,162784,162785],{"class":2453}," show_balance",[28,162787,32432],{"class":34},[28,162789,162790,162792,162794,162796,162799,162801,162804,162806,162808],{"class":30,"line":2113},[28,162791,31780],{"class":38},[28,162793,367],{"class":34},[28,162795,686],{"class":42},[28,162797,162798],{"class":735},"\"当前余额:",[28,162800,1515],{"class":38},[28,162802,162803],{"class":34},"balance",[28,162805,1565],{"class":38},[28,162807,157406],{"class":735},[28,162809,228],{"class":34},[28,162811,162812],{"class":30,"line":2118},[28,162813,2890],{"emptyLinePlaceholder":562},[28,162815,162816],{"class":30,"line":2132},[28,162817,2890],{"emptyLinePlaceholder":562},[28,162819,162820,162822,162825],{"class":30,"line":2137},[28,162821,32426],{"class":42},[28,162823,162824],{"class":2453}," save_money",[28,162826,32432],{"class":34},[28,162828,162829,162831],{"class":30,"line":2143},[28,162830,162255],{"class":42},[28,162832,150493],{"class":34},[28,162834,162835,162838,162840,162842,162844,162846,162848,162851],{"class":30,"line":2164},[28,162836,162837],{"class":34},"    money ",[28,162839,83],{"class":42},[28,162841,110191],{"class":38},[28,162843,367],{"class":34},[28,162845,54298],{"class":38},[28,162847,367],{"class":34},[28,162849,162850],{"class":735},"\"请输入存款金额:\"",[28,162852,30980],{"class":34},[28,162854,162855,162857,162859,162861,162863],{"class":30,"line":2169},[28,162856,3590],{"class":42},[28,162858,150536],{"class":34},[28,162860,2078],{"class":42},[28,162862,4581],{"class":38},[28,162864,4227],{"class":34},[28,162866,162867,162869,162871,162874],{"class":30,"line":2183},[28,162868,32929],{"class":38},[28,162870,367],{"class":34},[28,162872,162873],{"class":735},"\"金额必须大于0\"",[28,162875,228],{"class":34},[28,162877,162878],{"class":30,"line":2188},[28,162879,152755],{"class":42},[28,162881,162882,162885,162887],{"class":30,"line":2217},[28,162883,162884],{"class":34},"    balance ",[28,162886,9964],{"class":42},[28,162888,150569],{"class":34},[28,162890,162891,162893,162895,162898],{"class":30,"line":2222},[28,162892,31780],{"class":38},[28,162894,367],{"class":34},[28,162896,162897],{"class":735},"\"存款成功\"",[28,162899,228],{"class":34},[28,162901,162902],{"class":30,"line":2239},[28,162903,162904],{"class":34},"    show_balance()\n",[28,162906,162907],{"class":30,"line":2244},[28,162908,2890],{"emptyLinePlaceholder":562},[28,162910,162911],{"class":30,"line":2249},[28,162912,2890],{"emptyLinePlaceholder":562},[28,162914,162915,162917,162920],{"class":30,"line":2254},[28,162916,32426],{"class":42},[28,162918,162919],{"class":2453}," withdraw_money",[28,162921,32432],{"class":34},[28,162923,162924,162926],{"class":30,"line":2268},[28,162925,162255],{"class":42},[28,162927,150493],{"class":34},[28,162929,162930,162932,162934,162936,162938,162940,162942,162945],{"class":30,"line":2273},[28,162931,162837],{"class":34},[28,162933,83],{"class":42},[28,162935,110191],{"class":38},[28,162937,367],{"class":34},[28,162939,54298],{"class":38},[28,162941,367],{"class":34},[28,162943,162944],{"class":735},"\"请输入取款金额:\"",[28,162946,30980],{"class":34},[28,162948,162949,162951,162953,162955,162957],{"class":30,"line":3067},[28,162950,3590],{"class":42},[28,162952,150536],{"class":34},[28,162954,2078],{"class":42},[28,162956,4581],{"class":38},[28,162958,4227],{"class":34},[28,162960,162961,162963,162965,162967],{"class":30,"line":3081},[28,162962,32929],{"class":38},[28,162964,367],{"class":34},[28,162966,162873],{"class":735},[28,162968,228],{"class":34},[28,162970,162971],{"class":30,"line":3089},[28,162972,152755],{"class":42},[28,162974,162975,162977,162979,162981],{"class":30,"line":3094},[28,162976,3590],{"class":42},[28,162978,150536],{"class":34},[28,162980,1579],{"class":42},[28,162982,162983],{"class":34}," balance:\n",[28,162985,162986,162988,162990,162992],{"class":30,"line":3100},[28,162987,32929],{"class":38},[28,162989,367],{"class":34},[28,162991,150631],{"class":735},[28,162993,228],{"class":34},[28,162995,162996],{"class":30,"line":3106},[28,162997,152755],{"class":42},[28,162999,163000,163002,163004],{"class":30,"line":3111},[28,163001,162884],{"class":34},[28,163003,150646],{"class":42},[28,163005,150569],{"class":34},[28,163007,163008,163010,163012,163015],{"class":30,"line":8436},[28,163009,31780],{"class":38},[28,163011,367],{"class":34},[28,163013,163014],{"class":735},"\"取款成功\"",[28,163016,228],{"class":34},[28,163018,163019],{"class":30,"line":8460},[28,163020,162904],{"class":34},[28,163022,163023],{"class":30,"line":8465},[28,163024,2890],{"emptyLinePlaceholder":562},[28,163026,163027],{"class":30,"line":8471},[28,163028,2890],{"emptyLinePlaceholder":562},[28,163030,163031,163033,163035],{"class":30,"line":8498},[28,163032,109057],{"class":42},[28,163034,95763],{"class":38},[28,163036,4227],{"class":34},[28,163038,163039],{"class":30,"line":8503},[28,163040,163041],{"class":34},"    show_menu()\n",[28,163043,163044,163046,163048,163050,163052,163054],{"class":30,"line":8509},[28,163045,161086],{"class":34},[28,163047,83],{"class":42},[28,163049,61082],{"class":38},[28,163051,367],{"class":34},[28,163053,153467],{"class":735},[28,163055,228],{"class":34},[28,163057,163058],{"class":30,"line":8521},[28,163059,2890],{"emptyLinePlaceholder":562},[28,163061,163062,163064,163066,163068,163070],{"class":30,"line":8533},[28,163063,3590],{"class":42},[28,163065,153480],{"class":34},[28,163067,3439],{"class":42},[28,163069,153485],{"class":735},[28,163071,4227],{"class":34},[28,163073,163074],{"class":30,"line":8545},[28,163075,163076],{"class":34},"        show_balance()\n",[28,163078,163079,163081,163083,163085,163087],{"class":30,"line":10202},[28,163080,39770],{"class":42},[28,163082,153480],{"class":34},[28,163084,3439],{"class":42},[28,163086,153504],{"class":735},[28,163088,4227],{"class":34},[28,163090,163091],{"class":30,"line":10227},[28,163092,163093],{"class":34},"        save_money()\n",[28,163095,163096,163098,163100,163102,163104],{"class":30,"line":10250},[28,163097,39770],{"class":42},[28,163099,153480],{"class":34},[28,163101,3439],{"class":42},[28,163103,153522],{"class":735},[28,163105,4227],{"class":34},[28,163107,163108],{"class":30,"line":10274},[28,163109,163110],{"class":34},"        withdraw_money()\n",[28,163112,163113,163115,163117,163119,163121],{"class":30,"line":10279},[28,163114,39770],{"class":42},[28,163116,153480],{"class":34},[28,163118,3439],{"class":42},[28,163120,153576],{"class":735},[28,163122,4227],{"class":34},[28,163124,163125,163127,163129,163131],{"class":30,"line":10284},[28,163126,32929],{"class":38},[28,163128,367],{"class":34},[28,163130,153587],{"class":735},[28,163132,228],{"class":34},[28,163134,163135],{"class":30,"line":10289},[28,163136,32106],{"class":42},[28,163138,163139,163141],{"class":30,"line":10298},[28,163140,158416],{"class":42},[28,163142,4227],{"class":34},[28,163144,163145,163147,163149,163151],{"class":30,"line":10303},[28,163146,32929],{"class":38},[28,163148,367],{"class":34},[28,163150,153608],{"class":735},[28,163152,228],{"class":34},[14,163154,163155],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[60,163157,163159],{"id":163158},"_514-易错点","5.14 易错点",[588,163161,163162,163165,163168,163173,163178,163181],{},[591,163163,163164],{},"函数定义后必须调用才会执行。",[591,163166,163167],{},"函数名后面有括号才是调用。",[591,163169,163170,163172],{},[25,163171,17532],{}," 后面的代码不会执行。",[591,163174,163175,163176,28871],{},"没有返回值的函数默认返回 ",[25,163177,96157],{},[591,163179,163180],{},"局部变量不能在函数外部访问。",[591,163182,163183,163184,163186],{},"不要滥用 ",[25,163185,162220],{},"，更好的方式是让函数返回新值。",[14,163188,163189,163190,163192],{},"例如不用 ",[25,163191,162220],{}," 改写存款：",[18,163194,163196],{"className":20,"code":163195,"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,163197,163198,163207,163218,163222,163226,163234,163247],{"__ignoreMap":23},[28,163199,163200,163202,163204],{"class":30,"line":31},[28,163201,32426],{"class":42},[28,163203,162824],{"class":2453},[28,163205,163206],{"class":34},"(balance, money):\n",[28,163208,163209,163211,163214,163216],{"class":30,"line":77},[28,163210,4578],{"class":42},[28,163212,163213],{"class":34}," balance ",[28,163215,1104],{"class":42},[28,163217,150569],{"class":34},[28,163219,163220],{"class":30,"line":114},[28,163221,2890],{"emptyLinePlaceholder":562},[28,163223,163224],{"class":30,"line":128},[28,163225,2890],{"emptyLinePlaceholder":562},[28,163227,163228,163230,163232],{"class":30,"line":393},[28,163229,162698],{"class":34},[28,163231,83],{"class":42},[28,163233,162703],{"class":38},[28,163235,163236,163238,163240,163243,163245],{"class":30,"line":409},[28,163237,162698],{"class":34},[28,163239,83],{"class":42},[28,163241,163242],{"class":34}," save_money(balance, ",[28,163244,2212],{"class":38},[28,163246,228],{"class":34},[28,163248,163249,163251],{"class":30,"line":1711},[28,163250,30898],{"class":38},[28,163252,163253],{"class":34},"(balance)\n",[60,163255,163257],{"id":163256},"_515-本章练习","5.15 本章练习",[588,163259,163260,163267,163273,163279,163285],{},[591,163261,163262,163263,163266],{},"定义函数 ",[25,163264,163265],{},"print_student(name, age)","，输出学生信息。",[591,163268,163262,163269,163272],{},[25,163270,163271],{},"get_max(a, b, c)","，返回三个数中的最大值。",[591,163274,163262,163275,163278],{},[25,163276,163277],{},"is_even(num)","，判断一个数是否为偶数。",[591,163280,163262,163281,163284],{},[25,163282,163283],{},"calculate_bmi(weight, height)","，返回 BMI。",[591,163286,163287],{},"把第 4 章的菜单程序拆分成多个函数。",[547,163289,163290],{},"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":77,"depth":77,"links":163292},[163293,163294,163295,163296,163297,163298,163299,163300,163301,163305,163306,163307,163308,163309,163310],{"id":161313,"depth":77,"text":161314},{"id":161354,"depth":77,"text":161355},{"id":161444,"depth":77,"text":161445},{"id":161525,"depth":77,"text":161526},{"id":161658,"depth":77,"text":161659},{"id":161780,"depth":77,"text":161781},{"id":161902,"depth":77,"text":161903},{"id":161979,"depth":77,"text":161980},{"id":162101,"depth":77,"text":162102,"children":163302},[163303,163304],{"id":162105,"depth":114,"text":162106},{"id":162163,"depth":114,"text":162164},{"id":162292,"depth":77,"text":162293},{"id":162418,"depth":77,"text":162419},{"id":162531,"depth":77,"text":162532},{"id":162687,"depth":77,"text":162688},{"id":163158,"depth":77,"text":163159},{"id":163256,"depth":77,"text":163257},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161305,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163317,"title":163318,"body":163319,"description":559,"extension":560,"meta":166363,"navigation":562,"path":166364,"seo":166365,"stem":166366,"__hash__":166367},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163320,"toc":166344},[163321,163324,163328,163331,163334,163438,163441,163445,163448,163528,163531,163535,163538,163598,163601,163637,163640,163655,163659,163732,163735,163790,163793,163863,163866,163950,163960,164018,164022,164067,164070,164096,164099,164205,164209,164212,164254,164257,164321,164324,164328,164331,164392,164395,164425,164428,164466,164470,164473,164482,164485,164609,164612,164653,164657,164660,164671,164711,164714,164729,164734,164737,164804,164807,164897,164901,164904,164952,164955,164982,164984,165014,165017,165037,165040,165071,165074,165107,165111,165114,165138,165141,165165,165168,165192,165196,165199,165329,165332,165412,165415,165490,165494,165497,165547,165550,165592,165595,165619,165621,165645,165648,165703,165706,165772,165776,165779,165782,165820,165823,165876,165879,165925,165928,165961,165964,165968,166287,166291,166320,166324,166341],[10,163322,163318],{"id":163323},"_6-数据容器",[60,163325,163327],{"id":163326},"_61-什么是数据容器","6.1 什么是数据容器",[14,163329,163330],{},"数据容器用于一次保存多个数据。",[14,163332,163333],{},"常见容器：",[768,163335,163336,163353],{},[771,163337,163338],{},[774,163339,163340,163342,163345,163348,163351],{},[777,163341,26258],{},[777,163343,163344],{},"是否有序",[777,163346,163347],{},"是否可变",[777,163349,163350],{},"是否允许重复",[777,163352,27978],{},[815,163354,163355,163373,163389,163404,163421],{},[774,163356,163357,163360,163363,163366,163369],{},[820,163358,163359],{},"list列表",[820,163361,163362],{},"有序",[820,163364,163365],{},"可变",[820,163367,163368],{},"允许",[820,163370,163371],{},[25,163372,155651],{},[774,163374,163375,163378,163380,163383,163385],{},[820,163376,163377],{},"tuple元组",[820,163379,163362],{},[820,163381,163382],{},"不可变",[820,163384,163368],{},[820,163386,163387],{},[25,163388,155664],{},[774,163390,163391,163394,163396,163398,163400],{},[820,163392,163393],{},"str字符串",[820,163395,163362],{},[820,163397,163382],{},[820,163399,163368],{},[820,163401,163402],{},[25,163403,156274],{},[774,163405,163406,163409,163412,163414,163417],{},[820,163407,163408],{},"set集合",[820,163410,163411],{},"无序",[820,163413,163365],{},[820,163415,163416],{},"不允许",[820,163418,163419],{},[25,163420,155689],{},[774,163422,163423,163426,163428,163430,163433],{},[820,163424,163425],{},"dict字典",[820,163427,163362],{},[820,163429,163365],{},[820,163431,163432],{},"key不允许重复",[820,163434,163435],{},[25,163436,163437],{},"{\"name\": \"小明\"}",[14,163439,163440],{},"Python 3.7 之后，字典保持插入顺序。",[60,163442,163444],{"id":163443},"_62-列表list","6.2 列表list",[14,163446,163447],{},"列表用于保存一组有顺序的数据。",[18,163449,163451],{"className":20,"code":163450,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[25,163452,163453,163473,163498,163519],{"__ignoreMap":23},[28,163454,163455,163457,163459,163461,163463,163465,163467,163469,163471],{"class":30,"line":31},[28,163456,160774],{"class":34},[28,163458,83],{"class":42},[28,163460,52703],{"class":34},[28,163462,150282],{"class":735},[28,163464,12921],{"class":34},[28,163466,151330],{"class":735},[28,163468,12921],{"class":34},[28,163470,160125],{"class":735},[28,163472,111],{"class":34},[28,163474,163475,163478,163480,163482,163484,163486,163488,163490,163492,163494,163496],{"class":30,"line":77},[28,163476,163477],{"class":34},"numbers ",[28,163479,83],{"class":42},[28,163481,52703],{"class":34},[28,163483,39],{"class":38},[28,163485,12921],{"class":34},[28,163487,93],{"class":38},[28,163489,12921],{"class":34},[28,163491,98],{"class":38},[28,163493,12921],{"class":34},[28,163495,103],{"class":38},[28,163497,111],{"class":34},[28,163499,163500,163503,163505,163507,163509,163511,163513,163515,163517],{"class":30,"line":114},[28,163501,163502],{"class":34},"mixed ",[28,163504,83],{"class":42},[28,163506,52703],{"class":34},[28,163508,150282],{"class":735},[28,163510,12921],{"class":34},[28,163512,1270],{"class":38},[28,163514,12921],{"class":34},[28,163516,31955],{"class":38},[28,163518,111],{"class":34},[28,163520,163521,163524,163526],{"class":30,"line":128},[28,163522,163523],{"class":34},"empty ",[28,163525,83],{"class":42},[28,163527,52315],{"class":34},[14,163529,163530],{},"推荐一个列表中保存同类数据，代码更清晰。",[60,163532,163534],{"id":163533},"_63-列表索引","6.3 列表索引",[14,163536,163537],{},"正向索引从 0 开始：",[18,163539,163541],{"className":20,"code":163540,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[25,163542,163543,163563,163567,163578,163588],{"__ignoreMap":23},[28,163544,163545,163547,163549,163551,163553,163555,163557,163559,163561],{"class":30,"line":31},[28,163546,160774],{"class":34},[28,163548,83],{"class":42},[28,163550,52703],{"class":34},[28,163552,150282],{"class":735},[28,163554,12921],{"class":34},[28,163556,151330],{"class":735},[28,163558,12921],{"class":34},[28,163560,160125],{"class":735},[28,163562,111],{"class":34},[28,163564,163565],{"class":30,"line":77},[28,163566,2890],{"emptyLinePlaceholder":562},[28,163568,163569,163571,163574,163576],{"class":30,"line":114},[28,163570,30898],{"class":38},[28,163572,163573],{"class":34},"(names[",[28,163575,822],{"class":38},[28,163577,5145],{"class":34},[28,163579,163580,163582,163584,163586],{"class":30,"line":128},[28,163581,30898],{"class":38},[28,163583,163573],{"class":34},[28,163585,39],{"class":38},[28,163587,5145],{"class":34},[28,163589,163590,163592,163594,163596],{"class":30,"line":393},[28,163591,30898],{"class":38},[28,163593,163573],{"class":34},[28,163595,93],{"class":38},[28,163597,5145],{"class":34},[14,163599,163600],{},"反向索引从 -1 开始：",[18,163602,163604],{"className":20,"code":163603,"language":22,"meta":23,"style":23},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[25,163605,163606,163622],{"__ignoreMap":23},[28,163607,163608,163610,163612,163614,163616,163619],{"class":30,"line":31},[28,163609,30898],{"class":38},[28,163611,163573],{"class":34},[28,163613,445],{"class":42},[28,163615,39],{"class":38},[28,163617,163618],{"class":34},"])  ",[28,163620,163621],{"class":73},"# 小刚\n",[28,163623,163624,163626,163628,163630,163632,163634],{"class":30,"line":77},[28,163625,30898],{"class":38},[28,163627,163573],{"class":34},[28,163629,445],{"class":42},[28,163631,93],{"class":38},[28,163633,163618],{"class":34},[28,163635,163636],{"class":73},"# 小红\n",[14,163638,163639],{},"索引越界会报错：",[18,163641,163643],{"className":20,"code":163642,"language":22,"meta":23,"style":23},"print(names[3])\n",[25,163644,163645],{"__ignoreMap":23},[28,163646,163647,163649,163651,163653],{"class":30,"line":31},[28,163648,30898],{"class":38},[28,163650,163573],{"class":34},[28,163652,98],{"class":38},[28,163654,5145],{"class":34},[60,163656,163658],{"id":163657},"_64-列表常用方法","6.4 列表常用方法",[18,163660,163662],{"className":20,"code":163661,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[25,163663,163664,163680,163684,163693,163707,163721,163725],{"__ignoreMap":23},[28,163665,163666,163668,163670,163672,163674,163676,163678],{"class":30,"line":31},[28,163667,160774],{"class":34},[28,163669,83],{"class":42},[28,163671,52703],{"class":34},[28,163673,150282],{"class":735},[28,163675,12921],{"class":34},[28,163677,151330],{"class":735},[28,163679,111],{"class":34},[28,163681,163682],{"class":30,"line":77},[28,163683,2890],{"emptyLinePlaceholder":562},[28,163685,163686,163689,163691],{"class":30,"line":114},[28,163687,163688],{"class":34},"names.append(",[28,163690,160125],{"class":735},[28,163692,228],{"class":34},[28,163694,163695,163698,163700,163702,163705],{"class":30,"line":128},[28,163696,163697],{"class":34},"names.insert(",[28,163699,39],{"class":38},[28,163701,12921],{"class":34},[28,163703,163704],{"class":735},"\"小李\"",[28,163706,228],{"class":34},[28,163708,163709,163712,163714,163716,163719],{"class":30,"line":393},[28,163710,163711],{"class":34},"names.extend([",[28,163713,9171],{"class":735},[28,163715,12921],{"class":34},[28,163717,163718],{"class":735},"\"小赵\"",[28,163720,5145],{"class":34},[28,163722,163723],{"class":30,"line":409},[28,163724,2890],{"emptyLinePlaceholder":562},[28,163726,163727,163729],{"class":30,"line":1711},[28,163728,30898],{"class":38},[28,163730,163731],{"class":34},"(names)\n",[14,163733,163734],{},"删除元素：",[18,163736,163738],{"className":20,"code":163737,"language":22,"meta":23,"style":23},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[25,163739,163740,163749,163759,163773,163785],{"__ignoreMap":23},[28,163741,163742,163745,163747],{"class":30,"line":31},[28,163743,163744],{"class":34},"names.remove(",[28,163746,151330],{"class":735},[28,163748,228],{"class":34},[28,163750,163751,163754,163756],{"class":30,"line":77},[28,163752,163753],{"class":34},"last ",[28,163755,83],{"class":42},[28,163757,163758],{"class":34}," names.pop()\n",[28,163760,163761,163764,163766,163769,163771],{"class":30,"line":114},[28,163762,163763],{"class":34},"first ",[28,163765,83],{"class":42},[28,163767,163768],{"class":34}," names.pop(",[28,163770,822],{"class":38},[28,163772,228],{"class":34},[28,163774,163775,163778,163781,163783],{"class":30,"line":128},[28,163776,163777],{"class":42},"del",[28,163779,163780],{"class":34}," names[",[28,163782,822],{"class":38},[28,163784,111],{"class":34},[28,163786,163787],{"class":30,"line":393},[28,163788,163789],{"class":34},"names.clear()\n",[14,163791,163792],{},"查询和统计：",[18,163794,163796],{"className":20,"code":163795,"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,163797,163798,163826,163830,163841,163852],{"__ignoreMap":23},[28,163799,163800,163802,163804,163806,163808,163810,163812,163814,163816,163818,163820,163822,163824],{"class":30,"line":31},[28,163801,163477],{"class":34},[28,163803,83],{"class":42},[28,163805,52703],{"class":34},[28,163807,39],{"class":38},[28,163809,12921],{"class":34},[28,163811,93],{"class":38},[28,163813,12921],{"class":34},[28,163815,98],{"class":38},[28,163817,12921],{"class":34},[28,163819,93],{"class":38},[28,163821,12921],{"class":34},[28,163823,103],{"class":38},[28,163825,111],{"class":34},[28,163827,163828],{"class":30,"line":77},[28,163829,2890],{"emptyLinePlaceholder":562},[28,163831,163832,163834,163837,163839],{"class":30,"line":114},[28,163833,30898],{"class":38},[28,163835,163836],{"class":34},"(numbers.index(",[28,163838,98],{"class":38},[28,163840,30980],{"class":34},[28,163842,163843,163845,163848,163850],{"class":30,"line":128},[28,163844,30898],{"class":38},[28,163846,163847],{"class":34},"(numbers.count(",[28,163849,93],{"class":38},[28,163851,30980],{"class":34},[28,163853,163854,163856,163858,163860],{"class":30,"line":393},[28,163855,30898],{"class":38},[28,163857,367],{"class":34},[28,163859,7846],{"class":38},[28,163861,163862],{"class":34},"(numbers))\n",[14,163864,163865],{},"排序：",[18,163867,163869],{"className":20,"code":163868,"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,163870,163871,163895,163899,163904,163911,163915,163929,163935,163939,163944],{"__ignoreMap":23},[28,163872,163873,163875,163877,163879,163881,163883,163885,163887,163889,163891,163893],{"class":30,"line":31},[28,163874,163477],{"class":34},[28,163876,83],{"class":42},[28,163878,52703],{"class":34},[28,163880,98],{"class":38},[28,163882,12921],{"class":34},[28,163884,39],{"class":38},[28,163886,12921],{"class":34},[28,163888,108],{"class":38},[28,163890,12921],{"class":34},[28,163892,93],{"class":38},[28,163894,111],{"class":34},[28,163896,163897],{"class":30,"line":77},[28,163898,2890],{"emptyLinePlaceholder":562},[28,163900,163901],{"class":30,"line":114},[28,163902,163903],{"class":34},"numbers.sort()\n",[28,163905,163906,163908],{"class":30,"line":128},[28,163907,30898],{"class":38},[28,163909,163910],{"class":34},"(numbers)\n",[28,163912,163913],{"class":30,"line":393},[28,163914,2890],{"emptyLinePlaceholder":562},[28,163916,163917,163920,163923,163925,163927],{"class":30,"line":409},[28,163918,163919],{"class":34},"numbers.sort(",[28,163921,163922],{"class":5704},"reverse",[28,163924,83],{"class":42},[28,163926,31955],{"class":38},[28,163928,228],{"class":34},[28,163930,163931,163933],{"class":30,"line":1711},[28,163932,30898],{"class":38},[28,163934,163910],{"class":34},[28,163936,163937],{"class":30,"line":1802},[28,163938,2890],{"emptyLinePlaceholder":562},[28,163940,163941],{"class":30,"line":1808},[28,163942,163943],{"class":34},"numbers.reverse()\n",[28,163945,163946,163948],{"class":30,"line":1820},[28,163947,30898],{"class":38},[28,163949,163910],{"class":34},[14,163951,163952,163955,163956,163959],{},[25,163953,163954],{},"sort()"," 会修改原列表，",[25,163957,163958],{},"sorted()"," 返回新列表。",[18,163961,163963],{"className":20,"code":163962,"language":22,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[25,163964,163965,163989,164001,164005,164011],{"__ignoreMap":23},[28,163966,163967,163969,163971,163973,163975,163977,163979,163981,163983,163985,163987],{"class":30,"line":31},[28,163968,163477],{"class":34},[28,163970,83],{"class":42},[28,163972,52703],{"class":34},[28,163974,98],{"class":38},[28,163976,12921],{"class":34},[28,163978,39],{"class":38},[28,163980,12921],{"class":34},[28,163982,108],{"class":38},[28,163984,12921],{"class":34},[28,163986,93],{"class":38},[28,163988,111],{"class":34},[28,163990,163991,163994,163996,163999],{"class":30,"line":77},[28,163992,163993],{"class":34},"new_numbers ",[28,163995,83],{"class":42},[28,163997,163998],{"class":38}," sorted",[28,164000,163910],{"class":34},[28,164002,164003],{"class":30,"line":114},[28,164004,2890],{"emptyLinePlaceholder":562},[28,164006,164007,164009],{"class":30,"line":128},[28,164008,30898],{"class":38},[28,164010,163910],{"class":34},[28,164012,164013,164015],{"class":30,"line":393},[28,164014,30898],{"class":38},[28,164016,164017],{"class":34},"(new_numbers)\n",[60,164019,164021],{"id":164020},"_65-列表遍历","6.5 列表遍历",[18,164023,164025],{"className":20,"code":164024,"language":22,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[25,164026,164027,164047,164051,164061],{"__ignoreMap":23},[28,164028,164029,164031,164033,164035,164037,164039,164041,164043,164045],{"class":30,"line":31},[28,164030,160774],{"class":34},[28,164032,83],{"class":42},[28,164034,52703],{"class":34},[28,164036,150282],{"class":735},[28,164038,12921],{"class":34},[28,164040,151330],{"class":735},[28,164042,12921],{"class":34},[28,164044,160125],{"class":735},[28,164046,111],{"class":34},[28,164048,164049],{"class":30,"line":77},[28,164050,2890],{"emptyLinePlaceholder":562},[28,164052,164053,164055,164057,164059],{"class":30,"line":114},[28,164054,49],{"class":42},[28,164056,160810],{"class":34},[28,164058,55],{"class":42},[28,164060,160815],{"class":34},[28,164062,164063,164065],{"class":30,"line":128},[28,164064,31780],{"class":38},[28,164066,151054],{"class":34},[14,164068,164069],{},"需要索引时：",[18,164071,164073],{"className":20,"code":164072,"language":22,"meta":23,"style":23},"for index, name in enumerate(names):\n    print(index, name)\n",[25,164074,164075,164089],{"__ignoreMap":23},[28,164076,164077,164079,164082,164084,164086],{"class":30,"line":31},[28,164078,49],{"class":42},[28,164080,164081],{"class":34}," index, name ",[28,164083,55],{"class":42},[28,164085,32085],{"class":38},[28,164087,164088],{"class":34},"(names):\n",[28,164090,164091,164093],{"class":30,"line":77},[28,164092,31780],{"class":38},[28,164094,164095],{"class":34},"(index, name)\n",[14,164097,164098],{},"统计总分：",[18,164100,164102],{"className":20,"code":164101,"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,164103,164104,164129,164137,164141,164152,164160,164164,164181],{"__ignoreMap":23},[28,164105,164106,164109,164111,164113,164115,164117,164119,164121,164123,164125,164127],{"class":30,"line":31},[28,164107,164108],{"class":34},"scores ",[28,164110,83],{"class":42},[28,164112,52703],{"class":34},[28,164114,1482],{"class":38},[28,164116,12921],{"class":34},[28,164118,1356],{"class":38},[28,164120,12921],{"class":34},[28,164122,883],{"class":38},[28,164124,12921],{"class":34},[28,164126,1182],{"class":38},[28,164128,111],{"class":34},[28,164130,164131,164133,164135],{"class":30,"line":77},[28,164132,157654],{"class":34},[28,164134,83],{"class":42},[28,164136,47810],{"class":38},[28,164138,164139],{"class":30,"line":114},[28,164140,2890],{"emptyLinePlaceholder":562},[28,164142,164143,164145,164147,164149],{"class":30,"line":128},[28,164144,49],{"class":42},[28,164146,158177],{"class":34},[28,164148,55],{"class":42},[28,164150,164151],{"class":34}," scores:\n",[28,164153,164154,164156,164158],{"class":30,"line":393},[28,164155,159701],{"class":34},[28,164157,9964],{"class":42},[28,164159,2069],{"class":34},[28,164161,164162],{"class":30,"line":409},[28,164163,2890],{"emptyLinePlaceholder":562},[28,164165,164166,164169,164171,164174,164176,164178],{"class":30,"line":1711},[28,164167,164168],{"class":34},"avg ",[28,164170,83],{"class":42},[28,164172,164173],{"class":34}," total ",[28,164175,43],{"class":42},[28,164177,7819],{"class":38},[28,164179,164180],{"class":34},"(scores)\n",[28,164182,164183,164185,164187,164189,164192,164194,164197,164199,164201,164203],{"class":30,"line":1802},[28,164184,30898],{"class":38},[28,164186,367],{"class":34},[28,164188,686],{"class":42},[28,164190,164191],{"class":735},"\"平均分:",[28,164193,1515],{"class":38},[28,164195,164196],{"class":34},"avg",[28,164198,157553],{"class":42},[28,164200,1565],{"class":38},[28,164202,880],{"class":735},[28,164204,228],{"class":34},[60,164206,164208],{"id":164207},"_66-元组tuple","6.6 元组tuple",[14,164210,164211],{},"元组和列表类似，但不可修改。",[18,164213,164215],{"className":20,"code":164214,"language":22,"meta":23,"style":23},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[25,164216,164217,164234],{"__ignoreMap":23},[28,164218,164219,164222,164224,164226,164228,164230,164232],{"class":30,"line":31},[28,164220,164221],{"class":34},"point ",[28,164223,83],{"class":42},[28,164225,2148],{"class":34},[28,164227,225],{"class":38},[28,164229,12921],{"class":34},[28,164231,1320],{"class":38},[28,164233,228],{"class":34},[28,164235,164236,164238,164240,164242,164244,164246,164248,164250,164252],{"class":30,"line":77},[28,164237,116708],{"class":34},[28,164239,83],{"class":42},[28,164241,2148],{"class":34},[28,164243,150282],{"class":735},[28,164245,12921],{"class":34},[28,164247,1270],{"class":38},[28,164249,12921],{"class":34},[28,164251,69746],{"class":735},[28,164253,228],{"class":34},[14,164255,164256],{},"单元素元组必须加逗号：",[18,164258,164260],{"className":20,"code":164259,"language":22,"meta":23,"style":23},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[25,164261,164262,164276,164289,164293,164307],{"__ignoreMap":23},[28,164263,164264,164267,164269,164271,164273],{"class":30,"line":31},[28,164265,164266],{"class":34},"t1 ",[28,164268,83],{"class":42},[28,164270,2148],{"class":34},[28,164272,225],{"class":38},[28,164274,164275],{"class":34},",)\n",[28,164277,164278,164281,164283,164285,164287],{"class":30,"line":77},[28,164279,164280],{"class":34},"t2 ",[28,164282,83],{"class":42},[28,164284,2148],{"class":34},[28,164286,225],{"class":38},[28,164288,228],{"class":34},[28,164290,164291],{"class":30,"line":114},[28,164292,2890],{"emptyLinePlaceholder":562},[28,164294,164295,164297,164299,164301,164304],{"class":30,"line":128},[28,164296,30898],{"class":38},[28,164298,367],{"class":34},[28,164300,103501],{"class":38},[28,164302,164303],{"class":34},"(t1))  ",[28,164305,164306],{"class":73},"# tuple\n",[28,164308,164309,164311,164313,164315,164318],{"class":30,"line":393},[28,164310,30898],{"class":38},[28,164312,367],{"class":34},[28,164314,103501],{"class":38},[28,164316,164317],{"class":34},"(t2))  ",[28,164319,164320],{"class":73},"# int\n",[14,164322,164323],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[60,164325,164327],{"id":164326},"_67-字符串str","6.7 字符串str",[14,164329,164330],{},"字符串也是序列，可以索引、切片和遍历。",[18,164332,164334],{"className":20,"code":164333,"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,164335,164336,164344,164348,164359,164371,164375,164386],{"__ignoreMap":23},[28,164337,164338,164340,164342],{"class":30,"line":31},[28,164339,156838],{"class":34},[28,164341,83],{"class":42},[28,164343,160075],{"class":735},[28,164345,164346],{"class":30,"line":77},[28,164347,2890],{"emptyLinePlaceholder":562},[28,164349,164350,164352,164355,164357],{"class":30,"line":114},[28,164351,30898],{"class":38},[28,164353,164354],{"class":34},"(text[",[28,164356,822],{"class":38},[28,164358,5145],{"class":34},[28,164360,164361,164363,164365,164367,164369],{"class":30,"line":128},[28,164362,30898],{"class":38},[28,164364,164354],{"class":34},[28,164366,445],{"class":42},[28,164368,39],{"class":38},[28,164370,5145],{"class":34},[28,164372,164373],{"class":30,"line":393},[28,164374,2890],{"emptyLinePlaceholder":562},[28,164376,164377,164379,164381,164383],{"class":30,"line":409},[28,164378,49],{"class":42},[28,164380,160086],{"class":34},[28,164382,55],{"class":42},[28,164384,164385],{"class":34}," text:\n",[28,164387,164388,164390],{"class":30,"line":1711},[28,164389,31780],{"class":38},[28,164391,160097],{"class":34},[14,164393,164394],{},"字符串不可变：",[18,164396,164398],{"className":20,"code":164397,"language":22,"meta":23,"style":23},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[25,164399,164400,164408],{"__ignoreMap":23},[28,164401,164402,164404,164406],{"class":30,"line":31},[28,164403,156838],{"class":34},[28,164405,83],{"class":42},[28,164407,160075],{"class":735},[28,164409,164410,164413,164415,164417,164419,164422],{"class":30,"line":77},[28,164411,164412],{"class":34},"text[",[28,164414,822],{"class":38},[28,164416,4931],{"class":34},[28,164418,83],{"class":42},[28,164420,164421],{"class":735}," \"P\"",[28,164423,164424],{"class":73},"  # 报错\n",[14,164426,164427],{},"如果要得到新字符串：",[18,164429,164431],{"className":20,"code":164430,"language":22,"meta":23,"style":23},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[25,164432,164433,164441,164459],{"__ignoreMap":23},[28,164434,164435,164437,164439],{"class":30,"line":31},[28,164436,156838],{"class":34},[28,164438,83],{"class":42},[28,164440,160075],{"class":735},[28,164442,164443,164445,164447,164449,164451,164454,164456],{"class":30,"line":77},[28,164444,156838],{"class":34},[28,164446,83],{"class":42},[28,164448,164421],{"class":735},[28,164450,46043],{"class":42},[28,164452,164453],{"class":34}," text[",[28,164455,39],{"class":38},[28,164457,164458],{"class":34},":]\n",[28,164460,164461,164463],{"class":30,"line":114},[28,164462,30898],{"class":38},[28,164464,164465],{"class":34},"(text)\n",[60,164467,164469],{"id":164468},"_68-切片","6.8 切片",[14,164471,164472],{},"切片用于从序列中取一部分。",[18,164474,164476],{"className":20,"code":164475,"language":22,"meta":23,"style":23},"序列[开始:结束:步长]\n",[25,164477,164478],{"__ignoreMap":23},[28,164479,164480],{"class":30,"line":31},[28,164481,164475],{"class":34},[14,164483,164484],{},"结束位置不包含。",[18,164486,164488],{"className":20,"code":164487,"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,164489,164490,164527,164531,164550,164565,164579,164593],{"__ignoreMap":23},[28,164491,164492,164495,164497,164499,164501,164503,164505,164507,164509,164511,164513,164515,164517,164519,164521,164523,164525],{"class":30,"line":31},[28,164493,164494],{"class":34},"nums ",[28,164496,83],{"class":42},[28,164498,52703],{"class":34},[28,164500,822],{"class":38},[28,164502,12921],{"class":34},[28,164504,39],{"class":38},[28,164506,12921],{"class":34},[28,164508,93],{"class":38},[28,164510,12921],{"class":34},[28,164512,98],{"class":38},[28,164514,12921],{"class":34},[28,164516,103],{"class":38},[28,164518,12921],{"class":34},[28,164520,108],{"class":38},[28,164522,12921],{"class":34},[28,164524,970],{"class":38},[28,164526,111],{"class":34},[28,164528,164529],{"class":30,"line":77},[28,164530,2890],{"emptyLinePlaceholder":562},[28,164532,164533,164535,164538,164540,164542,164544,164547],{"class":30,"line":114},[28,164534,30898],{"class":38},[28,164536,164537],{"class":34},"(nums[",[28,164539,39],{"class":38},[28,164541,1479],{"class":34},[28,164543,103],{"class":38},[28,164545,164546],{"class":34},"])    ",[28,164548,164549],{"class":73},"# [1, 2, 3]\n",[28,164551,164552,164554,164557,164559,164562],{"class":30,"line":128},[28,164553,30898],{"class":38},[28,164555,164556],{"class":34},"(nums[:",[28,164558,98],{"class":38},[28,164560,164561],{"class":34},"])     ",[28,164563,164564],{"class":73},"# [0, 1, 2]\n",[28,164566,164567,164569,164571,164573,164576],{"class":30,"line":393},[28,164568,30898],{"class":38},[28,164570,164537],{"class":34},[28,164572,98],{"class":38},[28,164574,164575],{"class":34},":])     ",[28,164577,164578],{"class":73},"# [3, 4, 5, 6]\n",[28,164580,164581,164583,164586,164588,164590],{"class":30,"line":409},[28,164582,30898],{"class":38},[28,164584,164585],{"class":34},"(nums[::",[28,164587,93],{"class":38},[28,164589,164546],{"class":34},[28,164591,164592],{"class":73},"# [0, 2, 4, 6]\n",[28,164594,164595,164597,164599,164601,164603,164606],{"class":30,"line":1711},[28,164596,30898],{"class":38},[28,164598,164585],{"class":34},[28,164600,445],{"class":42},[28,164602,39],{"class":38},[28,164604,164605],{"class":34},"])   ",[28,164607,164608],{"class":73},"# 反转\n",[14,164610,164611],{},"字符串切片：",[18,164613,164615],{"className":20,"code":164614,"language":22,"meta":23,"style":23},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[25,164616,164617,164626,164640],{"__ignoreMap":23},[28,164618,164619,164621,164623],{"class":30,"line":31},[28,164620,156838],{"class":34},[28,164622,83],{"class":42},[28,164624,164625],{"class":735}," \"abcdef\"\n",[28,164627,164628,164630,164632,164634,164636,164638],{"class":30,"line":77},[28,164629,30898],{"class":38},[28,164631,164354],{"class":34},[28,164633,39],{"class":38},[28,164635,1479],{"class":34},[28,164637,103],{"class":38},[28,164639,5145],{"class":34},[28,164641,164642,164644,164647,164649,164651],{"class":30,"line":114},[28,164643,30898],{"class":38},[28,164645,164646],{"class":34},"(text[::",[28,164648,445],{"class":42},[28,164650,39],{"class":38},[28,164652,5145],{"class":34},[60,164654,164656],{"id":164655},"_69-集合set","6.9 集合set",[14,164658,164659],{},"集合特点：",[588,164661,164662,164665,164668],{},[591,164663,164664],{},"无序。",[591,164666,164667],{},"元素不重复。",[591,164669,164670],{},"可以做交集、并集、差集。",[18,164672,164674],{"className":20,"code":164673,"language":22,"meta":23,"style":23},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[25,164675,164676,164704],{"__ignoreMap":23},[28,164677,164678,164680,164682,164684,164686,164688,164690,164692,164694,164696,164698,164700,164702],{"class":30,"line":31},[28,164679,164494],{"class":34},[28,164681,83],{"class":42},[28,164683,4936],{"class":34},[28,164685,39],{"class":38},[28,164687,12921],{"class":34},[28,164689,93],{"class":38},[28,164691,12921],{"class":34},[28,164693,98],{"class":38},[28,164695,12921],{"class":34},[28,164697,98],{"class":38},[28,164699,12921],{"class":34},[28,164701,103],{"class":38},[28,164703,2055],{"class":34},[28,164705,164706,164708],{"class":30,"line":77},[28,164707,30898],{"class":38},[28,164709,164710],{"class":34},"(nums)\n",[14,164712,164713],{},"创建空集合：",[18,164715,164717],{"className":20,"code":164716,"language":22,"meta":23,"style":23},"s = set()\n",[25,164718,164719],{"__ignoreMap":23},[28,164720,164721,164723,164725,164727],{"class":30,"line":31},[28,164722,11065],{"class":34},[28,164724,83],{"class":42},[28,164726,120116],{"class":38},[28,164728,2466],{"class":34},[14,164730,9513,164731,164733],{},[25,164732,32937],{}," 是空字典，不是空集合。",[14,164735,164736],{},"集合常用操作：",[18,164738,164740],{"className":20,"code":164739,"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,164741,164742,164762,164766,164775,164784,164793],{"__ignoreMap":23},[28,164743,164744,164746,164748,164750,164752,164754,164756,164758,164760],{"class":30,"line":31},[28,164745,11065],{"class":34},[28,164747,83],{"class":42},[28,164749,4936],{"class":34},[28,164751,39],{"class":38},[28,164753,12921],{"class":34},[28,164755,93],{"class":38},[28,164757,12921],{"class":34},[28,164759,98],{"class":38},[28,164761,2055],{"class":34},[28,164763,164764],{"class":30,"line":77},[28,164765,2890],{"emptyLinePlaceholder":562},[28,164767,164768,164771,164773],{"class":30,"line":114},[28,164769,164770],{"class":34},"s.add(",[28,164772,103],{"class":38},[28,164774,228],{"class":34},[28,164776,164777,164780,164782],{"class":30,"line":128},[28,164778,164779],{"class":34},"s.remove(",[28,164781,93],{"class":38},[28,164783,228],{"class":34},[28,164785,164786,164789,164791],{"class":30,"line":393},[28,164787,164788],{"class":34},"s.discard(",[28,164790,225],{"class":38},[28,164792,228],{"class":34},[28,164794,164795,164797,164799,164801],{"class":30,"line":409},[28,164796,30898],{"class":38},[28,164798,367],{"class":34},[28,164800,7846],{"class":38},[28,164802,164803],{"class":34},"(s))\n",[14,164805,164806],{},"交并差：",[18,164808,164810],{"className":20,"code":164809,"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,164811,164812,164832,164852,164856,164871,164884],{"__ignoreMap":23},[28,164813,164814,164816,164818,164820,164822,164824,164826,164828,164830],{"class":30,"line":31},[28,164815,11405],{"class":34},[28,164817,83],{"class":42},[28,164819,4936],{"class":34},[28,164821,39],{"class":38},[28,164823,12921],{"class":34},[28,164825,93],{"class":38},[28,164827,12921],{"class":34},[28,164829,98],{"class":38},[28,164831,2055],{"class":34},[28,164833,164834,164836,164838,164840,164842,164844,164846,164848,164850],{"class":30,"line":77},[28,164835,11431],{"class":34},[28,164837,83],{"class":42},[28,164839,4936],{"class":34},[28,164841,98],{"class":38},[28,164843,12921],{"class":34},[28,164845,103],{"class":38},[28,164847,12921],{"class":34},[28,164849,108],{"class":38},[28,164851,2055],{"class":34},[28,164853,164854],{"class":30,"line":114},[28,164855,2890],{"emptyLinePlaceholder":562},[28,164857,164858,164860,164863,164865,164868],{"class":30,"line":128},[28,164859,30898],{"class":38},[28,164861,164862],{"class":34},"(a ",[28,164864,979],{"class":42},[28,164866,164867],{"class":34}," b)  ",[28,164869,164870],{"class":73},"# 交集\n",[28,164872,164873,164875,164877,164879,164881],{"class":30,"line":393},[28,164874,30898],{"class":38},[28,164876,164862],{"class":34},[28,164878,1540],{"class":42},[28,164880,164867],{"class":34},[28,164882,164883],{"class":73},"# 并集\n",[28,164885,164886,164888,164890,164892,164894],{"class":30,"line":409},[28,164887,30898],{"class":38},[28,164889,164862],{"class":34},[28,164891,445],{"class":42},[28,164893,164867],{"class":34},[28,164895,164896],{"class":73},"# 差集\n",[60,164898,164900],{"id":164899},"_610-字典dict","6.10 字典dict",[14,164902,164903],{},"字典通过 key-value 保存数据。",[18,164905,164907],{"className":20,"code":164906,"language":22,"meta":23,"style":23},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[25,164908,164909,164917,164927,164938,164948],{"__ignoreMap":23},[28,164910,164911,164913,164915],{"class":30,"line":31},[28,164912,149875],{"class":34},[28,164914,83],{"class":42},[28,164916,16058],{"class":34},[28,164918,164919,164921,164923,164925],{"class":30,"line":77},[28,164920,147414],{"class":735},[28,164922,51914],{"class":34},[28,164924,150282],{"class":735},[28,164926,31945],{"class":34},[28,164928,164929,164932,164934,164936],{"class":30,"line":114},[28,164930,164931],{"class":735},"    \"age\"",[28,164933,51914],{"class":34},[28,164935,1270],{"class":38},[28,164937,31945],{"class":34},[28,164939,164940,164943,164945],{"class":30,"line":128},[28,164941,164942],{"class":735},"    \"score\"",[28,164944,51914],{"class":34},[28,164946,164947],{"class":38},"95\n",[28,164949,164950],{"class":30,"line":393},[28,164951,2055],{"class":34},[14,164953,164954],{},"获取值：",[18,164956,164958],{"className":20,"code":164957,"language":22,"meta":23,"style":23},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[25,164959,164960,164971],{"__ignoreMap":23},[28,164961,164962,164964,164967,164969],{"class":30,"line":31},[28,164963,30898],{"class":38},[28,164965,164966],{"class":34},"(student[",[28,164968,63156],{"class":735},[28,164970,5145],{"class":34},[28,164972,164973,164975,164978,164980],{"class":30,"line":77},[28,164974,30898],{"class":38},[28,164976,164977],{"class":34},"(student.get(",[28,164979,63156],{"class":735},[28,164981,30980],{"class":34},[14,164983,15874],{},[18,164985,164987],{"className":20,"code":164986,"language":22,"meta":23,"style":23},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[25,164988,164989,165002],{"__ignoreMap":23},[28,164990,164991,164993,164996,164999],{"class":30,"line":31},[28,164992,153253],{"class":34},[28,164994,164995],{"class":735},"\"address\"",[28,164997,164998],{"class":34},"]     ",[28,165000,165001],{"class":73},"# key不存在会报错\n",[28,165003,165004,165007,165009,165011],{"class":30,"line":77},[28,165005,165006],{"class":34},"student.get(",[28,165008,164995],{"class":735},[28,165010,14200],{"class":34},[28,165012,165013],{"class":73},"# key不存在返回None\n",[14,165015,165016],{},"设置默认值：",[18,165018,165020],{"className":20,"code":165019,"language":22,"meta":23,"style":23},"print(student.get(\"address\", \"未知\"))\n",[25,165021,165022],{"__ignoreMap":23},[28,165023,165024,165026,165028,165030,165032,165035],{"class":30,"line":31},[28,165025,30898],{"class":38},[28,165027,164977],{"class":34},[28,165029,164995],{"class":735},[28,165031,12921],{"class":34},[28,165033,165034],{"class":735},"\"未知\"",[28,165036,30980],{"class":34},[14,165038,165039],{},"新增和修改：",[18,165041,165043],{"className":20,"code":165042,"language":22,"meta":23,"style":23},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[25,165044,165045,165058],{"__ignoreMap":23},[28,165046,165047,165049,165051,165053,165055],{"class":30,"line":31},[28,165048,153253],{"class":34},[28,165050,69601],{"class":735},[28,165052,4931],{"class":34},[28,165054,83],{"class":42},[28,165056,165057],{"class":38}," 19\n",[28,165059,165060,165062,165064,165066,165068],{"class":30,"line":77},[28,165061,153253],{"class":34},[28,165063,164995],{"class":735},[28,165065,4931],{"class":34},[28,165067,83],{"class":42},[28,165069,165070],{"class":735}," \"北京\"\n",[14,165072,165073],{},"删除：",[18,165075,165077],{"className":20,"code":165076,"language":22,"meta":23,"style":23},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[25,165078,165079,165092,165102],{"__ignoreMap":23},[28,165080,165081,165083,165085,165088,165090],{"class":30,"line":31},[28,165082,155752],{"class":34},[28,165084,83],{"class":42},[28,165086,165087],{"class":34}," student.pop(",[28,165089,151866],{"class":735},[28,165091,228],{"class":34},[28,165093,165094,165096,165098,165100],{"class":30,"line":77},[28,165095,163777],{"class":42},[28,165097,152543],{"class":34},[28,165099,69601],{"class":735},[28,165101,111],{"class":34},[28,165103,165104],{"class":30,"line":114},[28,165105,165106],{"class":34},"student.clear()\n",[60,165108,165110],{"id":165109},"_611-字典遍历","6.11 字典遍历",[14,165112,165113],{},"遍历 key：",[18,165115,165117],{"className":20,"code":165116,"language":22,"meta":23,"style":23},"for key in student:\n    print(key, student[key])\n",[25,165118,165119,165131],{"__ignoreMap":23},[28,165120,165121,165123,165126,165128],{"class":30,"line":31},[28,165122,49],{"class":42},[28,165124,165125],{"class":34}," key ",[28,165127,55],{"class":42},[28,165129,165130],{"class":34}," student:\n",[28,165132,165133,165135],{"class":30,"line":77},[28,165134,31780],{"class":38},[28,165136,165137],{"class":34},"(key, student[key])\n",[14,165139,165140],{},"遍历 value：",[18,165142,165144],{"className":20,"code":165143,"language":22,"meta":23,"style":23},"for value in student.values():\n    print(value)\n",[25,165145,165146,165158],{"__ignoreMap":23},[28,165147,165148,165150,165153,165155],{"class":30,"line":31},[28,165149,49],{"class":42},[28,165151,165152],{"class":34}," value ",[28,165154,55],{"class":42},[28,165156,165157],{"class":34}," student.values():\n",[28,165159,165160,165162],{"class":30,"line":77},[28,165161,31780],{"class":38},[28,165163,165164],{"class":34},"(value)\n",[14,165166,165167],{},"遍历 key 和 value：",[18,165169,165171],{"className":20,"code":165170,"language":22,"meta":23,"style":23},"for key, value in student.items():\n    print(key, value)\n",[25,165172,165173,165185],{"__ignoreMap":23},[28,165174,165175,165177,165180,165182],{"class":30,"line":31},[28,165176,49],{"class":42},[28,165178,165179],{"class":34}," key, value ",[28,165181,55],{"class":42},[28,165183,165184],{"class":34}," student.items():\n",[28,165186,165187,165189],{"class":30,"line":77},[28,165188,31780],{"class":38},[28,165190,165191],{"class":34},"(key, value)\n",[60,165193,165195],{"id":165194},"_612-嵌套容器","6.12 嵌套容器",[14,165197,165198],{},"列表中保存字典，是项目中最常见的结构之一。",[18,165200,165202],{"className":20,"code":165201,"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,165203,165204,165212,165240,165268,165296,165300,165304,165314],{"__ignoreMap":23},[28,165205,165206,165208,165210],{"class":30,"line":31},[28,165207,160110],{"class":34},[28,165209,83],{"class":42},[28,165211,55924],{"class":34},[28,165213,165214,165216,165218,165220,165222,165224,165226,165228,165230,165232,165234,165236,165238],{"class":30,"line":77},[28,165215,148779],{"class":34},[28,165217,63156],{"class":735},[28,165219,51914],{"class":34},[28,165221,150282],{"class":735},[28,165223,12921],{"class":34},[28,165225,69601],{"class":735},[28,165227,51914],{"class":34},[28,165229,1270],{"class":38},[28,165231,12921],{"class":34},[28,165233,151866],{"class":735},[28,165235,51914],{"class":34},[28,165237,1608],{"class":38},[28,165239,5418],{"class":34},[28,165241,165242,165244,165246,165248,165250,165252,165254,165256,165258,165260,165262,165264,165266],{"class":30,"line":114},[28,165243,148779],{"class":34},[28,165245,63156],{"class":735},[28,165247,51914],{"class":34},[28,165249,151330],{"class":735},[28,165251,12921],{"class":34},[28,165253,69601],{"class":735},[28,165255,51914],{"class":34},[28,165257,1245],{"class":38},[28,165259,12921],{"class":34},[28,165261,151866],{"class":735},[28,165263,51914],{"class":34},[28,165265,1431],{"class":38},[28,165267,5418],{"class":34},[28,165269,165270,165272,165274,165276,165278,165280,165282,165284,165286,165288,165290,165292,165294],{"class":30,"line":128},[28,165271,148779],{"class":34},[28,165273,63156],{"class":735},[28,165275,51914],{"class":34},[28,165277,160125],{"class":735},[28,165279,12921],{"class":34},[28,165281,69601],{"class":735},[28,165283,51914],{"class":34},[28,165285,1295],{"class":38},[28,165287,12921],{"class":34},[28,165289,151866],{"class":735},[28,165291,51914],{"class":34},[28,165293,1031],{"class":38},[28,165295,5418],{"class":34},[28,165297,165298],{"class":30,"line":393},[28,165299,111],{"class":34},[28,165301,165302],{"class":30,"line":409},[28,165303,2890],{"emptyLinePlaceholder":562},[28,165305,165306,165308,165310,165312],{"class":30,"line":1711},[28,165307,49],{"class":42},[28,165309,152531],{"class":34},[28,165311,55],{"class":42},[28,165313,152536],{"class":34},[28,165315,165316,165318,165320,165322,165325,165327],{"class":30,"line":1802},[28,165317,31780],{"class":38},[28,165319,164966],{"class":34},[28,165321,63156],{"class":735},[28,165323,165324],{"class":34},"], student[",[28,165326,151866],{"class":735},[28,165328,5145],{"class":34},[14,165330,165331],{},"统计平均分：",[18,165333,165335],{"className":20,"code":165334,"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,165336,165337,165345,165349,165359,165371,165375,165390],{"__ignoreMap":23},[28,165338,165339,165341,165343],{"class":30,"line":31},[28,165340,157654],{"class":34},[28,165342,83],{"class":42},[28,165344,47810],{"class":38},[28,165346,165347],{"class":30,"line":77},[28,165348,2890],{"emptyLinePlaceholder":562},[28,165350,165351,165353,165355,165357],{"class":30,"line":114},[28,165352,49],{"class":42},[28,165354,152531],{"class":34},[28,165356,55],{"class":42},[28,165358,152536],{"class":34},[28,165360,165361,165363,165365,165367,165369],{"class":30,"line":128},[28,165362,159701],{"class":34},[28,165364,9964],{"class":42},[28,165366,152543],{"class":34},[28,165368,151866],{"class":735},[28,165370,111],{"class":34},[28,165372,165373],{"class":30,"line":393},[28,165374,2890],{"emptyLinePlaceholder":562},[28,165376,165377,165379,165381,165383,165385,165387],{"class":30,"line":409},[28,165378,164168],{"class":34},[28,165380,83],{"class":42},[28,165382,164173],{"class":34},[28,165384,43],{"class":42},[28,165386,7819],{"class":38},[28,165388,165389],{"class":34},"(students)\n",[28,165391,165392,165394,165396,165398,165400,165402,165404,165406,165408,165410],{"class":30,"line":1711},[28,165393,30898],{"class":38},[28,165395,367],{"class":34},[28,165397,686],{"class":42},[28,165399,164191],{"class":735},[28,165401,1515],{"class":38},[28,165403,164196],{"class":34},[28,165405,157553],{"class":42},[28,165407,1565],{"class":38},[28,165409,880],{"class":735},[28,165411,228],{"class":34},[14,165413,165414],{},"查找学生：",[18,165416,165418],{"className":20,"code":165417,"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,165419,165420,165435,165439,165449,165463,165469,165473,165479],{"__ignoreMap":23},[28,165421,165422,165424,165426,165428,165430,165433],{"class":30,"line":31},[28,165423,111972],{"class":34},[28,165425,83],{"class":42},[28,165427,61082],{"class":38},[28,165429,367],{"class":34},[28,165431,165432],{"class":735},"\"请输入学生姓名:\"",[28,165434,228],{"class":34},[28,165436,165437],{"class":30,"line":77},[28,165438,2890],{"emptyLinePlaceholder":562},[28,165440,165441,165443,165445,165447],{"class":30,"line":114},[28,165442,49],{"class":42},[28,165444,152531],{"class":34},[28,165446,55],{"class":42},[28,165448,152536],{"class":34},[28,165450,165451,165453,165455,165457,165459,165461],{"class":30,"line":128},[28,165452,3590],{"class":42},[28,165454,152543],{"class":34},[28,165456,63156],{"class":735},[28,165458,4931],{"class":34},[28,165460,3439],{"class":42},[28,165462,160826],{"class":34},[28,165464,165465,165467],{"class":30,"line":393},[28,165466,32929],{"class":38},[28,165468,150436],{"class":34},[28,165470,165471],{"class":30,"line":409},[28,165472,32106],{"class":42},[28,165474,165475,165477],{"class":30,"line":1711},[28,165476,2191],{"class":42},[28,165478,4227],{"class":34},[28,165480,165481,165483,165485,165488],{"class":30,"line":1802},[28,165482,31780],{"class":38},[28,165484,367],{"class":34},[28,165486,165487],{"class":735},"\"没有找到\"",[28,165489,228],{"class":34},[60,165491,165493],{"id":165492},"_613-容器通用操作","6.13 容器通用操作",[14,165495,165496],{},"长度：",[18,165498,165500],{"className":20,"code":165499,"language":22,"meta":23,"style":23},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[25,165501,165502,165521,165531],{"__ignoreMap":23},[28,165503,165504,165506,165509,165511,165513,165515,165517,165519],{"class":30,"line":31},[28,165505,7846],{"class":38},[28,165507,165508],{"class":34},"([",[28,165510,39],{"class":38},[28,165512,12921],{"class":34},[28,165514,93],{"class":38},[28,165516,12921],{"class":34},[28,165518,98],{"class":38},[28,165520,5145],{"class":34},[28,165522,165523,165525,165527,165529],{"class":30,"line":77},[28,165524,7846],{"class":38},[28,165526,367],{"class":34},[28,165528,156274],{"class":735},[28,165530,228],{"class":34},[28,165532,165533,165535,165538,165540,165542,165544],{"class":30,"line":114},[28,165534,7846],{"class":38},[28,165536,165537],{"class":34},"({",[28,165539,63156],{"class":735},[28,165541,51914],{"class":34},[28,165543,150282],{"class":735},[28,165545,165546],{"class":34},"})\n",[14,165548,165549],{},"最大最小：",[18,165551,165553],{"className":20,"code":165552,"language":22,"meta":23,"style":23},"max([1, 2, 3])\nmin([1, 2, 3])\n",[25,165554,165555,165573],{"__ignoreMap":23},[28,165556,165557,165559,165561,165563,165565,165567,165569,165571],{"class":30,"line":31},[28,165558,6503],{"class":38},[28,165560,165508],{"class":34},[28,165562,39],{"class":38},[28,165564,12921],{"class":34},[28,165566,93],{"class":38},[28,165568,12921],{"class":34},[28,165570,98],{"class":38},[28,165572,5145],{"class":34},[28,165574,165575,165578,165580,165582,165584,165586,165588,165590],{"class":30,"line":77},[28,165576,165577],{"class":38},"min",[28,165579,165508],{"class":34},[28,165581,39],{"class":38},[28,165583,12921],{"class":34},[28,165585,93],{"class":38},[28,165587,12921],{"class":34},[28,165589,98],{"class":38},[28,165591,5145],{"class":34},[14,165593,165594],{},"求和：",[18,165596,165598],{"className":20,"code":165597,"language":22,"meta":23,"style":23},"sum([1, 2, 3])\n",[25,165599,165600],{"__ignoreMap":23},[28,165601,165602,165605,165607,165609,165611,165613,165615,165617],{"class":30,"line":31},[28,165603,165604],{"class":38},"sum",[28,165606,165508],{"class":34},[28,165608,39],{"class":38},[28,165610,12921],{"class":34},[28,165612,93],{"class":38},[28,165614,12921],{"class":34},[28,165616,98],{"class":38},[28,165618,5145],{"class":34},[14,165620,163865],{},[18,165622,165624],{"className":20,"code":165623,"language":22,"meta":23,"style":23},"sorted([3, 1, 2])\n",[25,165625,165626],{"__ignoreMap":23},[28,165627,165628,165631,165633,165635,165637,165639,165641,165643],{"class":30,"line":31},[28,165629,165630],{"class":38},"sorted",[28,165632,165508],{"class":34},[28,165634,98],{"class":38},[28,165636,12921],{"class":34},[28,165638,39],{"class":38},[28,165640,12921],{"class":34},[28,165642,93],{"class":38},[28,165644,5145],{"class":34},[14,165646,165647],{},"类型转换：",[18,165649,165651],{"className":20,"code":165650,"language":22,"meta":23,"style":23},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[25,165652,165653,165663,165681],{"__ignoreMap":23},[28,165654,165655,165657,165659,165661],{"class":30,"line":31},[28,165656,154464],{"class":38},[28,165658,367],{"class":34},[28,165660,156274],{"class":735},[28,165662,228],{"class":34},[28,165664,165665,165667,165669,165671,165673,165675,165677,165679],{"class":30,"line":77},[28,165666,155659],{"class":38},[28,165668,165508],{"class":34},[28,165670,39],{"class":38},[28,165672,12921],{"class":34},[28,165674,93],{"class":38},[28,165676,12921],{"class":34},[28,165678,98],{"class":38},[28,165680,5145],{"class":34},[28,165682,165683,165685,165687,165689,165691,165693,165695,165697,165699,165701],{"class":30,"line":114},[28,165684,155684],{"class":38},[28,165686,165508],{"class":34},[28,165688,39],{"class":38},[28,165690,12921],{"class":34},[28,165692,39],{"class":38},[28,165694,12921],{"class":34},[28,165696,93],{"class":38},[28,165698,12921],{"class":34},[28,165700,98],{"class":38},[28,165702,5145],{"class":34},[14,165704,165705],{},"成员判断：",[18,165707,165709],{"className":20,"code":165708,"language":22,"meta":23,"style":23},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[25,165710,165711,165728,165752],{"__ignoreMap":23},[28,165712,165713,165715,165717,165720,165723,165726],{"class":30,"line":31},[28,165714,30898],{"class":38},[28,165716,367],{"class":34},[28,165718,165719],{"class":735},"\"a\"",[28,165721,165722],{"class":42}," in",[28,165724,165725],{"class":735}," \"abc\"",[28,165727,228],{"class":34},[28,165729,165730,165732,165734,165736,165738,165740,165742,165744,165746,165748,165750],{"class":30,"line":77},[28,165731,30898],{"class":38},[28,165733,367],{"class":34},[28,165735,39],{"class":38},[28,165737,165722],{"class":42},[28,165739,52703],{"class":34},[28,165741,39],{"class":38},[28,165743,12921],{"class":34},[28,165745,93],{"class":38},[28,165747,12921],{"class":34},[28,165749,98],{"class":38},[28,165751,5145],{"class":34},[28,165753,165754,165756,165758,165760,165762,165764,165766,165768,165770],{"class":30,"line":114},[28,165755,30898],{"class":38},[28,165757,367],{"class":34},[28,165759,63156],{"class":735},[28,165761,165722],{"class":42},[28,165763,4936],{"class":34},[28,165765,63156],{"class":735},[28,165767,51914],{"class":34},[28,165769,150282],{"class":735},[28,165771,165546],{"class":34},[60,165773,165775],{"id":165774},"_614-推导式","6.14 推导式",[14,165777,165778],{},"推导式用于快速生成容器。",[14,165780,165781],{},"列表推导式：",[18,165783,165785],{"className":20,"code":165784,"language":22,"meta":23,"style":23},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[25,165786,165787,165814],{"__ignoreMap":23},[28,165788,165789,165791,165793,165796,165798,165800,165802,165804,165806,165808,165810,165812],{"class":30,"line":31},[28,165790,164494],{"class":34},[28,165792,83],{"class":42},[28,165794,165795],{"class":34}," [i ",[28,165797,49],{"class":42},[28,165799,52],{"class":34},[28,165801,55],{"class":42},[28,165803,364],{"class":38},[28,165805,367],{"class":34},[28,165807,39],{"class":38},[28,165809,12921],{"class":34},[28,165811,970],{"class":38},[28,165813,97771],{"class":34},[28,165815,165816,165818],{"class":30,"line":77},[28,165817,30898],{"class":38},[28,165819,164710],{"class":34},[14,165821,165822],{},"带条件：",[18,165824,165826],{"className":20,"code":165825,"language":22,"meta":23,"style":23},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[25,165827,165828,165869],{"__ignoreMap":23},[28,165829,165830,165833,165835,165837,165839,165841,165843,165845,165847,165849,165851,165853,165855,165857,165859,165861,165863,165865,165867],{"class":30,"line":31},[28,165831,165832],{"class":34},"even_nums ",[28,165834,83],{"class":42},[28,165836,165795],{"class":34},[28,165838,49],{"class":42},[28,165840,52],{"class":34},[28,165842,55],{"class":42},[28,165844,364],{"class":38},[28,165846,367],{"class":34},[28,165848,39],{"class":38},[28,165850,12921],{"class":34},[28,165852,963],{"class":38},[28,165854,14200],{"class":34},[28,165856,2021],{"class":42},[28,165858,52],{"class":34},[28,165860,954],{"class":42},[28,165862,15241],{"class":38},[28,165864,101953],{"class":42},[28,165866,4581],{"class":38},[28,165868,111],{"class":34},[28,165870,165871,165873],{"class":30,"line":77},[28,165872,30898],{"class":38},[28,165874,165875],{"class":34},"(even_nums)\n",[14,165877,165878],{},"字典推导式：",[18,165880,165882],{"className":20,"code":165881,"language":22,"meta":23,"style":23},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[25,165883,165884,165918],{"__ignoreMap":23},[28,165885,165886,165889,165891,165894,165896,165898,165901,165903,165905,165907,165909,165911,165913,165915],{"class":30,"line":31},[28,165887,165888],{"class":34},"squares ",[28,165890,83],{"class":42},[28,165892,165893],{"class":34}," {i: i ",[28,165895,11147],{"class":42},[28,165897,15241],{"class":38},[28,165899,165900],{"class":42}," for",[28,165902,52],{"class":34},[28,165904,55],{"class":42},[28,165906,364],{"class":38},[28,165908,367],{"class":34},[28,165910,39],{"class":38},[28,165912,12921],{"class":34},[28,165914,970],{"class":38},[28,165916,165917],{"class":34},")}\n",[28,165919,165920,165922],{"class":30,"line":77},[28,165921,30898],{"class":38},[28,165923,165924],{"class":34},"(squares)\n",[14,165926,165927],{},"集合推导式：",[18,165929,165931],{"className":20,"code":165930,"language":22,"meta":23,"style":23},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[25,165932,165933,165954],{"__ignoreMap":23},[28,165934,165935,165938,165940,165943,165945,165947,165949,165952],{"class":30,"line":31},[28,165936,165937],{"class":34},"chars ",[28,165939,83],{"class":42},[28,165941,165942],{"class":34}," {ch ",[28,165944,49],{"class":42},[28,165946,160086],{"class":34},[28,165948,55],{"class":42},[28,165950,165951],{"class":735}," \"hello\"",[28,165953,2055],{"class":34},[28,165955,165956,165958],{"class":30,"line":77},[28,165957,30898],{"class":38},[28,165959,165960],{"class":34},"(chars)\n",[14,165962,165963],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[60,165965,165967],{"id":165966},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[18,165969,165971],{"className":20,"code":165970,"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,165972,165973,165981,166001,166021,166041,166061,166065,166069,166077,166091,166100,166104,166114,166126,166130,166150,166159,166163,166179,166184,166188,166202,166206,166228,166264],{"__ignoreMap":23},[28,165974,165975,165977,165979],{"class":30,"line":31},[28,165976,160110],{"class":34},[28,165978,83],{"class":42},[28,165980,55924],{"class":34},[28,165982,165983,165985,165987,165989,165991,165993,165995,165997,165999],{"class":30,"line":77},[28,165984,148779],{"class":34},[28,165986,63156],{"class":735},[28,165988,51914],{"class":34},[28,165990,150282],{"class":735},[28,165992,12921],{"class":34},[28,165994,151866],{"class":735},[28,165996,51914],{"class":34},[28,165998,1608],{"class":38},[28,166000,5418],{"class":34},[28,166002,166003,166005,166007,166009,166011,166013,166015,166017,166019],{"class":30,"line":114},[28,166004,148779],{"class":34},[28,166006,63156],{"class":735},[28,166008,51914],{"class":34},[28,166010,151330],{"class":735},[28,166012,12921],{"class":34},[28,166014,151866],{"class":735},[28,166016,51914],{"class":34},[28,166018,1431],{"class":38},[28,166020,5418],{"class":34},[28,166022,166023,166025,166027,166029,166031,166033,166035,166037,166039],{"class":30,"line":128},[28,166024,148779],{"class":34},[28,166026,63156],{"class":735},[28,166028,51914],{"class":34},[28,166030,160125],{"class":735},[28,166032,12921],{"class":34},[28,166034,151866],{"class":735},[28,166036,51914],{"class":34},[28,166038,1031],{"class":38},[28,166040,5418],{"class":34},[28,166042,166043,166045,166047,166049,166051,166053,166055,166057,166059],{"class":30,"line":393},[28,166044,148779],{"class":34},[28,166046,63156],{"class":735},[28,166048,51914],{"class":34},[28,166050,163704],{"class":735},[28,166052,12921],{"class":34},[28,166054,151866],{"class":735},[28,166056,51914],{"class":34},[28,166058,1502],{"class":38},[28,166060,5418],{"class":34},[28,166062,166063],{"class":30,"line":409},[28,166064,111],{"class":34},[28,166066,166067],{"class":30,"line":1711},[28,166068,2890],{"emptyLinePlaceholder":562},[28,166070,166071,166073,166075],{"class":30,"line":1802},[28,166072,157654],{"class":34},[28,166074,83],{"class":42},[28,166076,47810],{"class":38},[28,166078,166079,166082,166084,166087,166089],{"class":30,"line":1808},[28,166080,166081],{"class":34},"max_student ",[28,166083,83],{"class":42},[28,166085,166086],{"class":34}," students[",[28,166088,822],{"class":38},[28,166090,111],{"class":34},[28,166092,166093,166096,166098],{"class":30,"line":1820},[28,166094,166095],{"class":34},"passed ",[28,166097,83],{"class":42},[28,166099,52315],{"class":34},[28,166101,166102],{"class":30,"line":2102},[28,166103,2890],{"emptyLinePlaceholder":562},[28,166105,166106,166108,166110,166112],{"class":30,"line":2107},[28,166107,49],{"class":42},[28,166109,152531],{"class":34},[28,166111,55],{"class":42},[28,166113,152536],{"class":34},[28,166115,166116,166118,166120,166122,166124],{"class":30,"line":2113},[28,166117,159701],{"class":34},[28,166119,9964],{"class":42},[28,166121,152543],{"class":34},[28,166123,151866],{"class":735},[28,166125,111],{"class":34},[28,166127,166128],{"class":30,"line":2118},[28,166129,2890],{"emptyLinePlaceholder":562},[28,166131,166132,166134,166136,166138,166140,166142,166145,166147],{"class":30,"line":2132},[28,166133,3590],{"class":42},[28,166135,152543],{"class":34},[28,166137,151866],{"class":735},[28,166139,4931],{"class":34},[28,166141,1579],{"class":42},[28,166143,166144],{"class":34}," max_student[",[28,166146,151866],{"class":735},[28,166148,166149],{"class":34},"]:\n",[28,166151,166152,166155,166157],{"class":30,"line":2137},[28,166153,166154],{"class":34},"        max_student ",[28,166156,83],{"class":42},[28,166158,152559],{"class":34},[28,166160,166161],{"class":30,"line":2143},[28,166162,2890],{"emptyLinePlaceholder":562},[28,166164,166165,166167,166169,166171,166173,166175,166177],{"class":30,"line":2164},[28,166166,3590],{"class":42},[28,166168,152543],{"class":34},[28,166170,151866],{"class":735},[28,166172,4931],{"class":34},[28,166174,2200],{"class":42},[28,166176,158231],{"class":38},[28,166178,4227],{"class":34},[28,166180,166181],{"class":30,"line":2169},[28,166182,166183],{"class":34},"        passed.append(student)\n",[28,166185,166186],{"class":30,"line":2183},[28,166187,2890],{"emptyLinePlaceholder":562},[28,166189,166190,166192,166194,166196,166198,166200],{"class":30,"line":2188},[28,166191,164168],{"class":34},[28,166193,83],{"class":42},[28,166195,164173],{"class":34},[28,166197,43],{"class":42},[28,166199,7819],{"class":38},[28,166201,165389],{"class":34},[28,166203,166204],{"class":30,"line":2217},[28,166205,2890],{"emptyLinePlaceholder":562},[28,166207,166208,166210,166212,166214,166216,166218,166220,166222,166224,166226],{"class":30,"line":2222},[28,166209,30898],{"class":38},[28,166211,367],{"class":34},[28,166213,686],{"class":42},[28,166215,164191],{"class":735},[28,166217,1515],{"class":38},[28,166219,164196],{"class":34},[28,166221,157553],{"class":42},[28,166223,1565],{"class":38},[28,166225,880],{"class":735},[28,166227,228],{"class":34},[28,166229,166230,166232,166234,166236,166239,166241,166244,166246,166248,166250,166252,166254,166256,166258,166260,166262],{"class":30,"line":2239},[28,166231,30898],{"class":38},[28,166233,367],{"class":34},[28,166235,686],{"class":42},[28,166237,166238],{"class":735},"\"最高分学生:",[28,166240,1515],{"class":38},[28,166242,166243],{"class":34},"max_student[",[28,166245,153276],{"class":735},[28,166247,1559],{"class":34},[28,166249,1565],{"class":38},[28,166251,4936],{"class":38},[28,166253,166243],{"class":34},[28,166255,153314],{"class":735},[28,166257,1559],{"class":34},[28,166259,1565],{"class":38},[28,166261,880],{"class":735},[28,166263,228],{"class":34},[28,166265,166266,166268,166270,166272,166275,166278,166281,166283,166285],{"class":30,"line":2244},[28,166267,30898],{"class":38},[28,166269,367],{"class":34},[28,166271,686],{"class":42},[28,166273,166274],{"class":735},"\"及格人数:",[28,166276,166277],{"class":38},"{len",[28,166279,166280],{"class":34},"(passed)",[28,166282,1565],{"class":38},[28,166284,880],{"class":735},[28,166286,228],{"class":34},[60,166288,166290],{"id":166289},"_616-易错点","6.16 易错点",[588,166292,166293,166296,166299,166302,166308,166317],{},[591,166294,166295],{},"列表可变，元组和字符串不可变。",[591,166297,166298],{},"切片结束位置不包含。",[591,166300,166301],{},"字典通过 key 取值，不是通过索引。",[591,166303,166304,166305,28871],{},"空集合要用 ",[25,166306,166307],{},"set()",[591,166309,104760,166310,166313,166314,28871],{},[25,166311,166312],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[25,166315,166316],{},"get()",[591,166318,166319],{},"嵌套容器要先看清楚每一层是什么类型。",[60,166321,166323],{"id":166322},"_617-本章练习","6.17 本章练习",[588,166325,166326,166329,166332,166335,166338],{},[591,166327,166328],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[591,166330,166331],{},"输入一句话，统计每个字符出现次数。",[591,166333,166334],{},"使用集合去除列表中的重复元素。",[591,166336,166337],{},"使用字典保存一个学生的信息，并实现修改成绩。",[591,166339,166340],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[547,166342,166343],{},"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":77,"depth":77,"links":166345},[166346,166347,166348,166349,166350,166351,166352,166353,166354,166355,166356,166357,166358,166359,166360,166361,166362],{"id":163326,"depth":77,"text":163327},{"id":163443,"depth":77,"text":163444},{"id":163533,"depth":77,"text":163534},{"id":163657,"depth":77,"text":163658},{"id":164020,"depth":77,"text":164021},{"id":164207,"depth":77,"text":164208},{"id":164326,"depth":77,"text":164327},{"id":164468,"depth":77,"text":164469},{"id":164655,"depth":77,"text":164656},{"id":164899,"depth":77,"text":164900},{"id":165109,"depth":77,"text":165110},{"id":165194,"depth":77,"text":165195},{"id":165492,"depth":77,"text":165493},{"id":165774,"depth":77,"text":165775},{"id":165966,"depth":77,"text":165967},{"id":166289,"depth":77,"text":166290},{"id":166322,"depth":77,"text":166323},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163318,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166369,"title":166370,"body":166371,"description":559,"extension":560,"meta":168543,"navigation":562,"path":168544,"seo":168545,"stem":168546,"__hash__":168547},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166372,"toc":168518},[166373,166376,166380,166383,166463,166466,166487,166490,166494,166497,166559,166562,166579,166583,166586,166631,166633,166641,166645,166648,166730,166733,166736,166761,166764,166787,166791,166794,166796,166858,166861,166863,166914,166918,166922,166928,167033,167037,167043,167114,167118,167121,167189,167192,167272,167276,167282,167318,167321,167324,167434,167440,167444,167447,167519,167522,167526,167530,167535,167597,167601,167606,167674,167678,167683,167799,167803,167806,167886,167889,167893,167896,168000,168002,168017,168020,168024,168162,168170,168174,168176,168187,168189,168447,168451,168483,168487,168515],[10,166374,166370],{"id":166375},"_7-函数进阶",[60,166377,166379],{"id":166378},"_71-多返回值","7.1 多返回值",[14,166381,166382],{},"Python 函数可以返回多个值，本质上返回的是元组。",[18,166384,166386],{"className":20,"code":166385,"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,166387,166388,166397,166405,166413,166422,166429,166433,166437,166446,166452],{"__ignoreMap":23},[28,166389,166390,166392,166395],{"class":30,"line":31},[28,166391,32426],{"class":42},[28,166393,166394],{"class":2453}," get_info",[28,166396,32432],{"class":34},[28,166398,166399,166401,166403],{"class":30,"line":77},[28,166400,152764],{"class":34},[28,166402,83],{"class":42},[28,166404,149747],{"class":735},[28,166406,166407,166409,166411],{"class":30,"line":114},[28,166408,152780],{"class":34},[28,166410,83],{"class":42},[28,166412,146945],{"class":38},[28,166414,166415,166417,166419],{"class":30,"line":128},[28,166416,152795],{"class":34},[28,166418,83],{"class":42},[28,166420,166421],{"class":38}," 95\n",[28,166423,166424,166426],{"class":30,"line":393},[28,166425,4578],{"class":42},[28,166427,166428],{"class":34}," name, age, score\n",[28,166430,166431],{"class":30,"line":409},[28,166432,2890],{"emptyLinePlaceholder":562},[28,166434,166435],{"class":30,"line":1711},[28,166436,2890],{"emptyLinePlaceholder":562},[28,166438,166439,166441,166443],{"class":30,"line":1802},[28,166440,161700],{"class":34},[28,166442,83],{"class":42},[28,166444,166445],{"class":34}," get_info()\n",[28,166447,166448,166450],{"class":30,"line":1808},[28,166449,30898],{"class":38},[28,166451,77062],{"class":34},[28,166453,166454,166456,166458,166460],{"class":30,"line":1820},[28,166455,30898],{"class":38},[28,166457,367],{"class":34},[28,166459,103501],{"class":38},[28,166461,166462],{"class":34},"(result))\n",[14,166464,166465],{},"可以直接解包：",[18,166467,166469],{"className":20,"code":166468,"language":22,"meta":23,"style":23},"name, age, score = get_info()\nprint(name, age, score)\n",[25,166470,166471,166480],{"__ignoreMap":23},[28,166472,166473,166476,166478],{"class":30,"line":31},[28,166474,166475],{"class":34},"name, age, score ",[28,166477,83],{"class":42},[28,166479,166445],{"class":34},[28,166481,166482,166484],{"class":30,"line":77},[28,166483,30898],{"class":38},[28,166485,166486],{"class":34},"(name, age, score)\n",[14,166488,166489],{},"返回多个值适合函数需要同时给出多个结果时使用。",[60,166491,166493],{"id":166492},"_72-位置参数","7.2 位置参数",[14,166495,166496],{},"位置参数按顺序传递。",[18,166498,166500],{"className":20,"code":166499,"language":22,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[25,166501,166502,166510,166538,166542,166546],{"__ignoreMap":23},[28,166503,166504,166506,166508],{"class":30,"line":31},[28,166505,32426],{"class":42},[28,166507,149766],{"class":2453},[28,166509,149769],{"class":34},[28,166511,166512,166514,166516,166518,166520,166522,166524,166526,166528,166530,166532,166534,166536],{"class":30,"line":77},[28,166513,31780],{"class":38},[28,166515,367],{"class":34},[28,166517,686],{"class":42},[28,166519,149780],{"class":735},[28,166521,1515],{"class":38},[28,166523,80287],{"class":34},[28,166525,1565],{"class":38},[28,166527,149789],{"class":735},[28,166529,1515],{"class":38},[28,166531,70698],{"class":34},[28,166533,1565],{"class":38},[28,166535,149798],{"class":735},[28,166537,228],{"class":34},[28,166539,166540],{"class":30,"line":114},[28,166541,2890],{"emptyLinePlaceholder":562},[28,166543,166544],{"class":30,"line":128},[28,166545,2890],{"emptyLinePlaceholder":562},[28,166547,166548,166551,166553,166555,166557],{"class":30,"line":393},[28,166549,166550],{"class":34},"introduce(",[28,166552,150282],{"class":735},[28,166554,12921],{"class":34},[28,166556,1270],{"class":38},[28,166558,228],{"class":34},[14,166560,166561],{},"顺序错了就会得到错误含义：",[18,166563,166565],{"className":20,"code":166564,"language":22,"meta":23,"style":23},"introduce(18, \"小明\")\n",[25,166566,166567],{"__ignoreMap":23},[28,166568,166569,166571,166573,166575,166577],{"class":30,"line":31},[28,166570,166550],{"class":34},[28,166572,1270],{"class":38},[28,166574,12921],{"class":34},[28,166576,150282],{"class":735},[28,166578,228],{"class":34},[60,166580,166582],{"id":166581},"_73-关键字参数","7.3 关键字参数",[14,166584,166585],{},"关键字参数按参数名传递。",[18,166587,166589],{"className":20,"code":166588,"language":22,"meta":23,"style":23},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[25,166590,166591,166611],{"__ignoreMap":23},[28,166592,166593,166595,166597,166599,166601,166603,166605,166607,166609],{"class":30,"line":31},[28,166594,166550],{"class":34},[28,166596,80287],{"class":5704},[28,166598,83],{"class":42},[28,166600,150282],{"class":735},[28,166602,12921],{"class":34},[28,166604,70698],{"class":5704},[28,166606,83],{"class":42},[28,166608,1270],{"class":38},[28,166610,228],{"class":34},[28,166612,166613,166615,166617,166619,166621,166623,166625,166627,166629],{"class":30,"line":77},[28,166614,166550],{"class":34},[28,166616,70698],{"class":5704},[28,166618,83],{"class":42},[28,166620,1270],{"class":38},[28,166622,12921],{"class":34},[28,166624,80287],{"class":5704},[28,166626,83],{"class":42},[28,166628,150282],{"class":735},[28,166630,228],{"class":34},[14,166632,118328],{},[588,166634,166635,166638],{},[591,166636,166637],{},"顺序不容易错。",[591,166639,166640],{},"调用时可读性更强。",[60,166642,166644],{"id":166643},"_74-默认参数","7.4 默认参数",[14,166646,166647],{},"默认参数给参数设置默认值。",[18,166649,166651],{"className":20,"code":166650,"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,166652,166653,166669,166699,166703,166707,166717],{"__ignoreMap":23},[28,166654,166655,166657,166659,166662,166664,166667],{"class":30,"line":31},[28,166656,32426],{"class":42},[28,166658,122487],{"class":2453},[28,166660,166661],{"class":34},"(host, port",[28,166663,83],{"class":42},[28,166665,166666],{"class":38},"3306",[28,166668,372],{"class":34},[28,166670,166671,166673,166675,166677,166680,166682,166684,166686,166688,166690,166693,166695,166697],{"class":30,"line":77},[28,166672,31780],{"class":38},[28,166674,367],{"class":34},[28,166676,686],{"class":42},[28,166678,166679],{"class":735},"\"连接",[28,166681,1515],{"class":38},[28,166683,27881],{"class":34},[28,166685,1565],{"class":38},[28,166687,1479],{"class":735},[28,166689,1515],{"class":38},[28,166691,166692],{"class":34},"port",[28,166694,1565],{"class":38},[28,166696,880],{"class":735},[28,166698,228],{"class":34},[28,166700,166701],{"class":30,"line":114},[28,166702,2890],{"emptyLinePlaceholder":562},[28,166704,166705],{"class":30,"line":128},[28,166706,2890],{"emptyLinePlaceholder":562},[28,166708,166709,166712,166715],{"class":30,"line":393},[28,166710,166711],{"class":34},"connect(",[28,166713,166714],{"class":735},"\"localhost\"",[28,166716,228],{"class":34},[28,166718,166719,166721,166723,166725,166728],{"class":30,"line":409},[28,166720,166711],{"class":34},[28,166722,166714],{"class":735},[28,166724,12921],{"class":34},[28,166726,166727],{"class":38},"6379",[28,166729,228],{"class":34},[14,166731,166732],{},"注意：默认参数必须放在非默认参数后面。",[14,166734,166735],{},"错误：",[18,166737,166739],{"className":20,"code":166738,"language":22,"meta":23,"style":23},"def connect(port=3306, host):\n    pass\n",[25,166740,166741,166757],{"__ignoreMap":23},[28,166742,166743,166745,166747,166750,166752,166754],{"class":30,"line":31},[28,166744,32426],{"class":42},[28,166746,122487],{"class":2453},[28,166748,166749],{"class":34},"(port",[28,166751,83],{"class":42},[28,166753,166666],{"class":38},[28,166755,166756],{"class":34},", host):\n",[28,166758,166759],{"class":30,"line":77},[28,166760,149931],{"class":42},[14,166762,166763],{},"正确：",[18,166765,166767],{"className":20,"code":166766,"language":22,"meta":23,"style":23},"def connect(host, port=3306):\n    pass\n",[25,166768,166769,166783],{"__ignoreMap":23},[28,166770,166771,166773,166775,166777,166779,166781],{"class":30,"line":31},[28,166772,32426],{"class":42},[28,166774,122487],{"class":2453},[28,166776,166661],{"class":34},[28,166778,83],{"class":42},[28,166780,166666],{"class":38},[28,166782,372],{"class":34},[28,166784,166785],{"class":30,"line":77},[28,166786,149931],{"class":42},[60,166788,166790],{"id":166789},"_75-默认参数的坑","7.5 默认参数的坑",[14,166792,166793],{},"不要使用可变对象作为默认参数。",[14,166795,158017],{},[18,166797,166799],{"className":20,"code":166798,"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,166800,166801,166816,166821,166828,166832,166836,166847],{"__ignoreMap":23},[28,166802,166803,166805,166808,166811,166813],{"class":30,"line":31},[28,166804,32426],{"class":42},[28,166806,166807],{"class":2453}," add_item",[28,166809,166810],{"class":34},"(item, items",[28,166812,83],{"class":42},[28,166814,166815],{"class":34},"[]):\n",[28,166817,166818],{"class":30,"line":77},[28,166819,166820],{"class":34},"    items.append(item)\n",[28,166822,166823,166825],{"class":30,"line":114},[28,166824,4578],{"class":42},[28,166826,166827],{"class":34}," items\n",[28,166829,166830],{"class":30,"line":128},[28,166831,2890],{"emptyLinePlaceholder":562},[28,166833,166834],{"class":30,"line":393},[28,166835,2890],{"emptyLinePlaceholder":562},[28,166837,166838,166840,166843,166845],{"class":30,"line":409},[28,166839,30898],{"class":38},[28,166841,166842],{"class":34},"(add_item(",[28,166844,165719],{"class":735},[28,166846,30980],{"class":34},[28,166848,166849,166851,166853,166856],{"class":30,"line":1711},[28,166850,30898],{"class":38},[28,166852,166842],{"class":34},[28,166854,166855],{"class":735},"\"b\"",[28,166857,30980],{"class":34},[14,166859,166860],{},"第二次调用会复用第一次的列表。",[14,166862,156282],{},[18,166864,166866],{"className":20,"code":166865,"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,166867,166868,166882,166895,166904,166908],{"__ignoreMap":23},[28,166869,166870,166872,166874,166876,166878,166880],{"class":30,"line":31},[28,166871,32426],{"class":42},[28,166873,166807],{"class":2453},[28,166875,166810],{"class":34},[28,166877,83],{"class":42},[28,166879,96157],{"class":38},[28,166881,372],{"class":34},[28,166883,166884,166886,166889,166891,166893],{"class":30,"line":77},[28,166885,3590],{"class":42},[28,166887,166888],{"class":34}," items ",[28,166890,39404],{"class":42},[28,166892,39410],{"class":38},[28,166894,4227],{"class":34},[28,166896,166897,166900,166902],{"class":30,"line":114},[28,166898,166899],{"class":34},"        items ",[28,166901,83],{"class":42},[28,166903,52315],{"class":34},[28,166905,166906],{"class":30,"line":128},[28,166907,166820],{"class":34},[28,166909,166910,166912],{"class":30,"line":393},[28,166911,4578],{"class":42},[28,166913,166827],{"class":34},[60,166915,166917],{"id":166916},"_76-不定长参数","7.6 不定长参数",[605,166919,166921],{"id":166920},"_761-args","7.6.1 *args",[14,166923,166924,166927],{},[25,166925,166926],{},"*args"," 接收任意数量的位置参数，得到元组。",[18,166929,166931],{"className":20,"code":166930,"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,166932,166933,166946,166954,166965,166974,166980,166984,166988,167007],{"__ignoreMap":23},[28,166934,166935,166937,166939,166941,166943],{"class":30,"line":31},[28,166936,32426],{"class":42},[28,166938,5697],{"class":2453},[28,166940,367],{"class":34},[28,166942,256],{"class":42},[28,166944,166945],{"class":34},"args):\n",[28,166947,166948,166950,166952],{"class":30,"line":77},[28,166949,159701],{"class":34},[28,166951,83],{"class":42},[28,166953,47810],{"class":38},[28,166955,166956,166958,166960,166962],{"class":30,"line":114},[28,166957,377],{"class":42},[28,166959,156574],{"class":34},[28,166961,55],{"class":42},[28,166963,166964],{"class":34}," args:\n",[28,166966,166967,166969,166971],{"class":30,"line":128},[28,166968,160376],{"class":34},[28,166970,9964],{"class":42},[28,166972,166973],{"class":34}," num\n",[28,166975,166976,166978],{"class":30,"line":393},[28,166977,4578],{"class":42},[28,166979,162681],{"class":34},[28,166981,166982],{"class":30,"line":409},[28,166983,2890],{"emptyLinePlaceholder":562},[28,166985,166986],{"class":30,"line":1711},[28,166987,2890],{"emptyLinePlaceholder":562},[28,166989,166990,166992,166995,166997,166999,167001,167003,167005],{"class":30,"line":1802},[28,166991,30898],{"class":38},[28,166993,166994],{"class":34},"(add(",[28,166996,39],{"class":38},[28,166998,12921],{"class":34},[28,167000,93],{"class":38},[28,167002,12921],{"class":34},[28,167004,98],{"class":38},[28,167006,30980],{"class":34},[28,167008,167009,167011,167013,167015,167017,167019,167021,167023,167025,167027,167029,167031],{"class":30,"line":1808},[28,167010,30898],{"class":38},[28,167012,166994],{"class":34},[28,167014,39],{"class":38},[28,167016,12921],{"class":34},[28,167018,93],{"class":38},[28,167020,12921],{"class":34},[28,167022,98],{"class":38},[28,167024,12921],{"class":34},[28,167026,103],{"class":38},[28,167028,12921],{"class":34},[28,167030,108],{"class":38},[28,167032,30980],{"class":34},[605,167034,167036],{"id":167035},"_762-kwargs","7.6.2 **kwargs",[14,167038,167039,167042],{},[25,167040,167041],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[18,167044,167046],{"className":20,"code":167045,"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,167047,167048,167061,167072,167078,167082,167086],{"__ignoreMap":23},[28,167049,167050,167052,167054,167056,167058],{"class":30,"line":31},[28,167051,32426],{"class":42},[28,167053,162339],{"class":2453},[28,167055,367],{"class":34},[28,167057,11147],{"class":42},[28,167059,167060],{"class":34},"kwargs):\n",[28,167062,167063,167065,167067,167069],{"class":30,"line":77},[28,167064,377],{"class":42},[28,167066,165179],{"class":34},[28,167068,55],{"class":42},[28,167070,167071],{"class":34}," kwargs.items():\n",[28,167073,167074,167076],{"class":30,"line":114},[28,167075,32929],{"class":38},[28,167077,165191],{"class":34},[28,167079,167080],{"class":30,"line":128},[28,167081,2890],{"emptyLinePlaceholder":562},[28,167083,167084],{"class":30,"line":393},[28,167085,2890],{"emptyLinePlaceholder":562},[28,167087,167088,167090,167092,167094,167096,167098,167100,167102,167104,167106,167108,167110,167112],{"class":30,"line":409},[28,167089,162404],{"class":34},[28,167091,80287],{"class":5704},[28,167093,83],{"class":42},[28,167095,150282],{"class":735},[28,167097,12921],{"class":34},[28,167099,70698],{"class":5704},[28,167101,83],{"class":42},[28,167103,1270],{"class":38},[28,167105,12921],{"class":34},[28,167107,70749],{"class":5704},[28,167109,83],{"class":42},[28,167111,69746],{"class":735},[28,167113,228],{"class":34},[60,167115,167117],{"id":167116},"_77-参数解包","7.7 参数解包",[14,167119,167120],{},"列表或元组解包为位置参数：",[18,167122,167124],{"className":20,"code":167123,"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,167125,167126,167135,167150,167154,167158,167178],{"__ignoreMap":23},[28,167127,167128,167130,167132],{"class":30,"line":31},[28,167129,32426],{"class":42},[28,167131,5697],{"class":2453},[28,167133,167134],{"class":34},"(a, b, c):\n",[28,167136,167137,167139,167141,167143,167145,167147],{"class":30,"line":77},[28,167138,4578],{"class":42},[28,167140,11355],{"class":34},[28,167142,1104],{"class":42},[28,167144,11368],{"class":34},[28,167146,1104],{"class":42},[28,167148,167149],{"class":34}," c\n",[28,167151,167152],{"class":30,"line":114},[28,167153,2890],{"emptyLinePlaceholder":562},[28,167155,167156],{"class":30,"line":128},[28,167157,2890],{"emptyLinePlaceholder":562},[28,167159,167160,167162,167164,167166,167168,167170,167172,167174,167176],{"class":30,"line":393},[28,167161,164494],{"class":34},[28,167163,83],{"class":42},[28,167165,52703],{"class":34},[28,167167,39],{"class":38},[28,167169,12921],{"class":34},[28,167171,93],{"class":38},[28,167173,12921],{"class":34},[28,167175,98],{"class":38},[28,167177,111],{"class":34},[28,167179,167180,167182,167184,167186],{"class":30,"line":409},[28,167181,30898],{"class":38},[28,167183,166994],{"class":34},[28,167185,256],{"class":42},[28,167187,167188],{"class":34},"nums))\n",[14,167190,167191],{},"字典解包为关键字参数：",[18,167193,167195],{"className":20,"code":167194,"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,167196,167197,167205,167231,167235,167239,167263],{"__ignoreMap":23},[28,167198,167199,167201,167203],{"class":30,"line":31},[28,167200,32426],{"class":42},[28,167202,149766],{"class":2453},[28,167204,149769],{"class":34},[28,167206,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225,167227,167229],{"class":30,"line":77},[28,167208,31780],{"class":38},[28,167210,367],{"class":34},[28,167212,686],{"class":42},[28,167214,880],{"class":735},[28,167216,1515],{"class":38},[28,167218,80287],{"class":34},[28,167220,1565],{"class":38},[28,167222,4936],{"class":38},[28,167224,70698],{"class":34},[28,167226,1565],{"class":38},[28,167228,880],{"class":735},[28,167230,228],{"class":34},[28,167232,167233],{"class":30,"line":114},[28,167234,2890],{"emptyLinePlaceholder":562},[28,167236,167237],{"class":30,"line":128},[28,167238,2890],{"emptyLinePlaceholder":562},[28,167240,167241,167243,167245,167247,167249,167251,167253,167255,167257,167259,167261],{"class":30,"line":393},[28,167242,116708],{"class":34},[28,167244,83],{"class":42},[28,167246,4936],{"class":34},[28,167248,63156],{"class":735},[28,167250,51914],{"class":34},[28,167252,150282],{"class":735},[28,167254,12921],{"class":34},[28,167256,69601],{"class":735},[28,167258,51914],{"class":34},[28,167260,1270],{"class":38},[28,167262,2055],{"class":34},[28,167264,167265,167267,167269],{"class":30,"line":409},[28,167266,166550],{"class":34},[28,167268,11147],{"class":42},[28,167270,167271],{"class":34},"info)\n",[60,167273,167275],{"id":167274},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167277,167278,167281],{},[25,167279,167280],{},"lambda"," 用于定义简单匿名函数。",[18,167283,167285],{"className":20,"code":167284,"language":22,"meta":23,"style":23},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[25,167286,167287,167304],{"__ignoreMap":23},[28,167288,167289,167292,167294,167297,167300,167302],{"class":30,"line":31},[28,167290,167291],{"class":34},"add ",[28,167293,83],{"class":42},[28,167295,167296],{"class":42}," lambda",[28,167298,167299],{"class":34}," a, b: a ",[28,167301,1104],{"class":42},[28,167303,151498],{"class":34},[28,167305,167306,167308,167310,167312,167314,167316],{"class":30,"line":77},[28,167307,30898],{"class":38},[28,167309,166994],{"class":34},[28,167311,39],{"class":38},[28,167313,12921],{"class":34},[28,167315,93],{"class":38},[28,167317,30980],{"class":34},[14,167319,167320],{},"常和排序、过滤等函数一起使用。",[14,167322,167323],{},"按分数排序：",[18,167325,167327],{"className":20,"code":167326,"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,167328,167329,167337,167357,167377,167397,167401,167405,167428],{"__ignoreMap":23},[28,167330,167331,167333,167335],{"class":30,"line":31},[28,167332,160110],{"class":34},[28,167334,83],{"class":42},[28,167336,55924],{"class":34},[28,167338,167339,167341,167343,167345,167347,167349,167351,167353,167355],{"class":30,"line":77},[28,167340,148779],{"class":34},[28,167342,63156],{"class":735},[28,167344,51914],{"class":34},[28,167346,150282],{"class":735},[28,167348,12921],{"class":34},[28,167350,151866],{"class":735},[28,167352,51914],{"class":34},[28,167354,1608],{"class":38},[28,167356,5418],{"class":34},[28,167358,167359,167361,167363,167365,167367,167369,167371,167373,167375],{"class":30,"line":114},[28,167360,148779],{"class":34},[28,167362,63156],{"class":735},[28,167364,51914],{"class":34},[28,167366,151330],{"class":735},[28,167368,12921],{"class":34},[28,167370,151866],{"class":735},[28,167372,51914],{"class":34},[28,167374,1431],{"class":38},[28,167376,5418],{"class":34},[28,167378,167379,167381,167383,167385,167387,167389,167391,167393,167395],{"class":30,"line":128},[28,167380,148779],{"class":34},[28,167382,63156],{"class":735},[28,167384,51914],{"class":34},[28,167386,160125],{"class":735},[28,167388,12921],{"class":34},[28,167390,151866],{"class":735},[28,167392,51914],{"class":34},[28,167394,1031],{"class":38},[28,167396,5418],{"class":34},[28,167398,167399],{"class":30,"line":393},[28,167400,111],{"class":34},[28,167402,167403],{"class":30,"line":409},[28,167404,2890],{"emptyLinePlaceholder":562},[28,167406,167407,167410,167412,167414,167416,167418,167420,167422,167424,167426],{"class":30,"line":1711},[28,167408,167409],{"class":34},"students.sort(",[28,167411,154340],{"class":5704},[28,167413,154343],{"class":42},[28,167415,154346],{"class":34},[28,167417,151866],{"class":735},[28,167419,112596],{"class":34},[28,167421,163922],{"class":5704},[28,167423,83],{"class":42},[28,167425,31955],{"class":38},[28,167427,228],{"class":34},[28,167429,167430,167432],{"class":30,"line":1802},[28,167431,30898],{"class":38},[28,167433,165389],{"class":34},[14,167435,167436,167437,167439],{},"如果逻辑复杂，不要硬写 ",[25,167438,167280],{},"，定义普通函数更清晰。",[60,167441,167443],{"id":167442},"_79-函数作为参数","7.9 函数作为参数",[14,167445,167446],{},"函数可以作为参数传给另一个函数。",[18,167448,167450],{"className":20,"code":167449,"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,167451,167452,167460,167470,167474,167478,167488,167495,167499,167503],{"__ignoreMap":23},[28,167453,167454,167456,167458],{"class":30,"line":31},[28,167455,32426],{"class":42},[28,167457,5697],{"class":2453},[28,167459,151487],{"class":34},[28,167461,167462,167464,167466,167468],{"class":30,"line":77},[28,167463,4578],{"class":42},[28,167465,11355],{"class":34},[28,167467,1104],{"class":42},[28,167469,151498],{"class":34},[28,167471,167472],{"class":30,"line":114},[28,167473,2890],{"emptyLinePlaceholder":562},[28,167475,167476],{"class":30,"line":128},[28,167477,2890],{"emptyLinePlaceholder":562},[28,167479,167480,167482,167485],{"class":30,"line":393},[28,167481,32426],{"class":42},[28,167483,167484],{"class":2453}," calculate",[28,167486,167487],{"class":34},"(a, b, func):\n",[28,167489,167490,167492],{"class":30,"line":409},[28,167491,4578],{"class":42},[28,167493,167494],{"class":34}," func(a, b)\n",[28,167496,167497],{"class":30,"line":1711},[28,167498,2890],{"emptyLinePlaceholder":562},[28,167500,167501],{"class":30,"line":1802},[28,167502,2890],{"emptyLinePlaceholder":562},[28,167504,167505,167507,167510,167512,167514,167516],{"class":30,"line":1808},[28,167506,30898],{"class":38},[28,167508,167509],{"class":34},"(calculate(",[28,167511,225],{"class":38},[28,167513,12921],{"class":34},[28,167515,1320],{"class":38},[28,167517,167518],{"class":34},", add))\n",[14,167520,167521],{},"这种思想在排序、回调、框架中经常出现。",[60,167523,167525],{"id":167524},"_710-mapfiltersorted","7.10 map、filter、sorted",[605,167527,167529],{"id":167528},"_7101-map","7.10.1 map",[14,167531,167532,167534],{},[25,167533,74521],{}," 对每个元素执行函数。",[18,167536,167538],{"className":20,"code":167537,"language":22,"meta":23,"style":23},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[25,167539,167540,167564,167587],{"__ignoreMap":23},[28,167541,167542,167544,167546,167548,167550,167552,167554,167556,167558,167560,167562],{"class":30,"line":31},[28,167543,164494],{"class":34},[28,167545,83],{"class":42},[28,167547,52703],{"class":34},[28,167549,39],{"class":38},[28,167551,12921],{"class":34},[28,167553,93],{"class":38},[28,167555,12921],{"class":34},[28,167557,98],{"class":38},[28,167559,12921],{"class":34},[28,167561,103],{"class":38},[28,167563,111],{"class":34},[28,167565,167566,167568,167570,167573,167575,167577,167580,167582,167584],{"class":30,"line":77},[28,167567,161700],{"class":34},[28,167569,83],{"class":42},[28,167571,167572],{"class":38}," map",[28,167574,367],{"class":34},[28,167576,167280],{"class":42},[28,167578,167579],{"class":34}," x: x ",[28,167581,256],{"class":42},[28,167583,15241],{"class":38},[28,167585,167586],{"class":34},", nums)\n",[28,167588,167589,167591,167593,167595],{"class":30,"line":114},[28,167590,30898],{"class":38},[28,167592,367],{"class":34},[28,167594,154464],{"class":38},[28,167596,166462],{"class":34},[605,167598,167600],{"id":167599},"_7102-filter","7.10.2 filter",[14,167602,167603,167605],{},[25,167604,80528],{}," 保留满足条件的元素。",[18,167607,167609],{"className":20,"code":167608,"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,167610,167611,167639,167664],{"__ignoreMap":23},[28,167612,167613,167615,167617,167619,167621,167623,167625,167627,167629,167631,167633,167635,167637],{"class":30,"line":31},[28,167614,164494],{"class":34},[28,167616,83],{"class":42},[28,167618,52703],{"class":34},[28,167620,39],{"class":38},[28,167622,12921],{"class":34},[28,167624,93],{"class":38},[28,167626,12921],{"class":34},[28,167628,98],{"class":38},[28,167630,12921],{"class":34},[28,167632,103],{"class":38},[28,167634,12921],{"class":34},[28,167636,108],{"class":38},[28,167638,111],{"class":34},[28,167640,167641,167643,167645,167648,167650,167652,167654,167656,167658,167660,167662],{"class":30,"line":77},[28,167642,161700],{"class":34},[28,167644,83],{"class":42},[28,167646,167647],{"class":38}," filter",[28,167649,367],{"class":34},[28,167651,167280],{"class":42},[28,167653,167579],{"class":34},[28,167655,954],{"class":42},[28,167657,15241],{"class":38},[28,167659,101953],{"class":42},[28,167661,4581],{"class":38},[28,167663,167586],{"class":34},[28,167665,167666,167668,167670,167672],{"class":30,"line":114},[28,167667,30898],{"class":38},[28,167669,367],{"class":34},[28,167671,154464],{"class":38},[28,167673,166462],{"class":34},[605,167675,167677],{"id":167676},"_7103-sorted","7.10.3 sorted",[14,167679,167680,167682],{},[25,167681,165630],{}," 返回排序后的新列表。",[18,167684,167686],{"className":20,"code":167685,"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,167687,167688,167696,167716,167736,167756,167760,167764,167793],{"__ignoreMap":23},[28,167689,167690,167692,167694],{"class":30,"line":31},[28,167691,160110],{"class":34},[28,167693,83],{"class":42},[28,167695,55924],{"class":34},[28,167697,167698,167700,167702,167704,167706,167708,167710,167712,167714],{"class":30,"line":77},[28,167699,148779],{"class":34},[28,167701,63156],{"class":735},[28,167703,51914],{"class":34},[28,167705,150282],{"class":735},[28,167707,12921],{"class":34},[28,167709,151866],{"class":735},[28,167711,51914],{"class":34},[28,167713,1608],{"class":38},[28,167715,5418],{"class":34},[28,167717,167718,167720,167722,167724,167726,167728,167730,167732,167734],{"class":30,"line":114},[28,167719,148779],{"class":34},[28,167721,63156],{"class":735},[28,167723,51914],{"class":34},[28,167725,151330],{"class":735},[28,167727,12921],{"class":34},[28,167729,151866],{"class":735},[28,167731,51914],{"class":34},[28,167733,1431],{"class":38},[28,167735,5418],{"class":34},[28,167737,167738,167740,167742,167744,167746,167748,167750,167752,167754],{"class":30,"line":128},[28,167739,148779],{"class":34},[28,167741,63156],{"class":735},[28,167743,51914],{"class":34},[28,167745,160125],{"class":735},[28,167747,12921],{"class":34},[28,167749,151866],{"class":735},[28,167751,51914],{"class":34},[28,167753,1031],{"class":38},[28,167755,5418],{"class":34},[28,167757,167758],{"class":30,"line":393},[28,167759,111],{"class":34},[28,167761,167762],{"class":30,"line":409},[28,167763,2890],{"emptyLinePlaceholder":562},[28,167765,167766,167768,167770,167772,167775,167777,167779,167781,167783,167785,167787,167789,167791],{"class":30,"line":1711},[28,167767,161700],{"class":34},[28,167769,83],{"class":42},[28,167771,163998],{"class":38},[28,167773,167774],{"class":34},"(students, ",[28,167776,154340],{"class":5704},[28,167778,154343],{"class":42},[28,167780,154346],{"class":34},[28,167782,151866],{"class":735},[28,167784,112596],{"class":34},[28,167786,163922],{"class":5704},[28,167788,83],{"class":42},[28,167790,31955],{"class":38},[28,167792,228],{"class":34},[28,167794,167795,167797],{"class":30,"line":1802},[28,167796,30898],{"class":38},[28,167798,77062],{"class":34},[60,167800,167802],{"id":167801},"_711-闭包入门","7.11 闭包入门",[14,167804,167805],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[18,167807,167809],{"className":20,"code":167808,"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,167810,167811,167821,167831,167842,167846,167853,167857,167861,167875],{"__ignoreMap":23},[28,167812,167813,167815,167818],{"class":30,"line":31},[28,167814,32426],{"class":42},[28,167816,167817],{"class":2453}," outer",[28,167819,167820],{"class":34},"(base):\n",[28,167822,167823,167825,167828],{"class":30,"line":77},[28,167824,31282],{"class":42},[28,167826,167827],{"class":2453}," inner",[28,167829,167830],{"class":34},"(num):\n",[28,167832,167833,167835,167838,167840],{"class":30,"line":114},[28,167834,15238],{"class":42},[28,167836,167837],{"class":34}," base ",[28,167839,1104],{"class":42},[28,167841,166973],{"class":34},[28,167843,167844],{"class":30,"line":128},[28,167845,2890],{"emptyLinePlaceholder":562},[28,167847,167848,167850],{"class":30,"line":393},[28,167849,4578],{"class":42},[28,167851,167852],{"class":34}," inner\n",[28,167854,167855],{"class":30,"line":409},[28,167856,2890],{"emptyLinePlaceholder":562},[28,167858,167859],{"class":30,"line":1711},[28,167860,2890],{"emptyLinePlaceholder":562},[28,167862,167863,167866,167868,167871,167873],{"class":30,"line":1802},[28,167864,167865],{"class":34},"add_10 ",[28,167867,83],{"class":42},[28,167869,167870],{"class":34}," outer(",[28,167872,225],{"class":38},[28,167874,228],{"class":34},[28,167876,167877,167879,167882,167884],{"class":30,"line":1808},[28,167878,30898],{"class":38},[28,167880,167881],{"class":34},"(add_10(",[28,167883,108],{"class":38},[28,167885,30980],{"class":34},[14,167887,167888],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[60,167890,167892],{"id":167891},"_712-装饰器入门","7.12 装饰器入门",[14,167894,167895],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[18,167897,167899],{"className":20,"code":167898,"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,167900,167901,167910,167919,167930,167935,167946,167950,167957,167961,167965,167970,167978,167988,167992,167996],{"__ignoreMap":23},[28,167902,167903,167905,167907],{"class":30,"line":31},[28,167904,32426],{"class":42},[28,167906,87668],{"class":2453},[28,167908,167909],{"class":34},"(func):\n",[28,167911,167912,167914,167917],{"class":30,"line":77},[28,167913,31282],{"class":42},[28,167915,167916],{"class":2453}," wrapper",[28,167918,32432],{"class":34},[28,167920,167921,167923,167925,167928],{"class":30,"line":114},[28,167922,32929],{"class":38},[28,167924,367],{"class":34},[28,167926,167927],{"class":735},"\"函数开始执行\"",[28,167929,228],{"class":34},[28,167931,167932],{"class":30,"line":128},[28,167933,167934],{"class":34},"        func()\n",[28,167936,167937,167939,167941,167944],{"class":30,"line":393},[28,167938,32929],{"class":38},[28,167940,367],{"class":34},[28,167942,167943],{"class":735},"\"函数执行结束\"",[28,167945,228],{"class":34},[28,167947,167948],{"class":30,"line":409},[28,167949,2890],{"emptyLinePlaceholder":562},[28,167951,167952,167954],{"class":30,"line":1711},[28,167953,4578],{"class":42},[28,167955,167956],{"class":34}," wrapper\n",[28,167958,167959],{"class":30,"line":1802},[28,167960,2890],{"emptyLinePlaceholder":562},[28,167962,167963],{"class":30,"line":1808},[28,167964,2890],{"emptyLinePlaceholder":562},[28,167966,167967],{"class":30,"line":1820},[28,167968,167969],{"class":2453},"@log\n",[28,167971,167972,167974,167976],{"class":30,"line":2102},[28,167973,32426],{"class":42},[28,167975,161390],{"class":2453},[28,167977,32432],{"class":34},[28,167979,167980,167982,167984,167986],{"class":30,"line":2107},[28,167981,31780],{"class":38},[28,167983,367],{"class":34},[28,167985,6332],{"class":735},[28,167987,228],{"class":34},[28,167989,167990],{"class":30,"line":2113},[28,167991,2890],{"emptyLinePlaceholder":562},[28,167993,167994],{"class":30,"line":2118},[28,167995,2890],{"emptyLinePlaceholder":562},[28,167997,167998],{"class":30,"line":2132},[28,167999,161425],{"class":34},[14,168001,158668],{},[18,168003,168005],{"className":20,"code":168004,"language":22,"meta":23,"style":23},"say_hello = log(say_hello)\n",[25,168006,168007],{"__ignoreMap":23},[28,168008,168009,168012,168014],{"class":30,"line":31},[28,168010,168011],{"class":34},"say_hello ",[28,168013,83],{"class":42},[28,168015,168016],{"class":34}," log(say_hello)\n",[14,168018,168019],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[60,168021,168023],{"id":168022},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[18,168025,168027],{"className":20,"code":168026,"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,168028,168029,168037,168054,168064,168083,168093,168100,168104,168110,168114,168118,168122,168130,168140,168144,168148],{"__ignoreMap":23},[28,168030,168031,168033,168035],{"class":30,"line":31},[28,168032,32426],{"class":42},[28,168034,87668],{"class":2453},[28,168036,167909],{"class":34},[28,168038,168039,168041,168043,168045,168047,168050,168052],{"class":30,"line":77},[28,168040,31282],{"class":42},[28,168042,167916],{"class":2453},[28,168044,367],{"class":34},[28,168046,256],{"class":42},[28,168048,168049],{"class":34},"args, ",[28,168051,11147],{"class":42},[28,168053,167060],{"class":34},[28,168055,168056,168058,168060,168062],{"class":30,"line":114},[28,168057,32929],{"class":38},[28,168059,367],{"class":34},[28,168061,167927],{"class":735},[28,168063,228],{"class":34},[28,168065,168066,168069,168071,168074,168076,168078,168080],{"class":30,"line":128},[28,168067,168068],{"class":34},"        result ",[28,168070,83],{"class":42},[28,168072,168073],{"class":34}," func(",[28,168075,256],{"class":42},[28,168077,168049],{"class":34},[28,168079,11147],{"class":42},[28,168081,168082],{"class":34},"kwargs)\n",[28,168084,168085,168087,168089,168091],{"class":30,"line":393},[28,168086,32929],{"class":38},[28,168088,367],{"class":34},[28,168090,167943],{"class":735},[28,168092,228],{"class":34},[28,168094,168095,168097],{"class":30,"line":409},[28,168096,15238],{"class":42},[28,168098,168099],{"class":34}," result\n",[28,168101,168102],{"class":30,"line":1711},[28,168103,2890],{"emptyLinePlaceholder":562},[28,168105,168106,168108],{"class":30,"line":1802},[28,168107,4578],{"class":42},[28,168109,167956],{"class":34},[28,168111,168112],{"class":30,"line":1808},[28,168113,2890],{"emptyLinePlaceholder":562},[28,168115,168116],{"class":30,"line":1820},[28,168117,2890],{"emptyLinePlaceholder":562},[28,168119,168120],{"class":30,"line":2102},[28,168121,167969],{"class":2453},[28,168123,168124,168126,168128],{"class":30,"line":2107},[28,168125,32426],{"class":42},[28,168127,5697],{"class":2453},[28,168129,151487],{"class":34},[28,168131,168132,168134,168136,168138],{"class":30,"line":2113},[28,168133,4578],{"class":42},[28,168135,11355],{"class":34},[28,168137,1104],{"class":42},[28,168139,151498],{"class":34},[28,168141,168142],{"class":30,"line":2118},[28,168143,2890],{"emptyLinePlaceholder":562},[28,168145,168146],{"class":30,"line":2132},[28,168147,2890],{"emptyLinePlaceholder":562},[28,168149,168150,168152,168154,168156,168158,168160],{"class":30,"line":2137},[28,168151,30898],{"class":38},[28,168153,166994],{"class":34},[28,168155,225],{"class":38},[28,168157,12921],{"class":34},[28,168159,1320],{"class":38},[28,168161,30980],{"class":34},[14,168163,168164,168165,101412,168167,168169],{},"这个写法使用 ",[25,168166,166926],{},[25,168168,167041],{}," 接收原函数的所有参数。",[60,168171,168173],{"id":168172},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168175,123686],{},[588,168177,168178,168181,168184],{},[591,168179,168180],{},"给定一组学生数据。",[591,168182,168183],{},"封装函数，根据传入规则筛选学生。",[591,168185,168186],{},"筛选及格、优秀、未成年学生。",[14,168188,10521],{},[18,168190,168192],{"className":20,"code":168191,"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,168193,168194,168202,168230,168258,168286,168290,168294,168298,168308,168316,168326,168333,168338,168344,168348,168352,168376,168399,168422,168426,168433,168440],{"__ignoreMap":23},[28,168195,168196,168198,168200],{"class":30,"line":31},[28,168197,160110],{"class":34},[28,168199,83],{"class":42},[28,168201,55924],{"class":34},[28,168203,168204,168206,168208,168210,168212,168214,168216,168218,168220,168222,168224,168226,168228],{"class":30,"line":77},[28,168205,148779],{"class":34},[28,168207,63156],{"class":735},[28,168209,51914],{"class":34},[28,168211,150282],{"class":735},[28,168213,12921],{"class":34},[28,168215,69601],{"class":735},[28,168217,51914],{"class":34},[28,168219,1270],{"class":38},[28,168221,12921],{"class":34},[28,168223,151866],{"class":735},[28,168225,51914],{"class":34},[28,168227,1608],{"class":38},[28,168229,5418],{"class":34},[28,168231,168232,168234,168236,168238,168240,168242,168244,168246,168248,168250,168252,168254,168256],{"class":30,"line":114},[28,168233,148779],{"class":34},[28,168235,63156],{"class":735},[28,168237,51914],{"class":34},[28,168239,151330],{"class":735},[28,168241,12921],{"class":34},[28,168243,69601],{"class":735},[28,168245,51914],{"class":34},[28,168247,1245],{"class":38},[28,168249,12921],{"class":34},[28,168251,151866],{"class":735},[28,168253,51914],{"class":34},[28,168255,1431],{"class":38},[28,168257,5418],{"class":34},[28,168259,168260,168262,168264,168266,168268,168270,168272,168274,168276,168278,168280,168282,168284],{"class":30,"line":128},[28,168261,148779],{"class":34},[28,168263,63156],{"class":735},[28,168265,51914],{"class":34},[28,168267,160125],{"class":735},[28,168269,12921],{"class":34},[28,168271,69601],{"class":735},[28,168273,51914],{"class":34},[28,168275,1295],{"class":38},[28,168277,12921],{"class":34},[28,168279,151866],{"class":735},[28,168281,51914],{"class":34},[28,168283,1502],{"class":38},[28,168285,5418],{"class":34},[28,168287,168288],{"class":30,"line":393},[28,168289,111],{"class":34},[28,168291,168292],{"class":30,"line":409},[28,168293,2890],{"emptyLinePlaceholder":562},[28,168295,168296],{"class":30,"line":1711},[28,168297,2890],{"emptyLinePlaceholder":562},[28,168299,168300,168302,168305],{"class":30,"line":1802},[28,168301,32426],{"class":42},[28,168303,168304],{"class":2453}," filter_students",[28,168306,168307],{"class":34},"(students, condition):\n",[28,168309,168310,168312,168314],{"class":30,"line":1808},[28,168311,161617],{"class":34},[28,168313,83],{"class":42},[28,168315,52315],{"class":34},[28,168317,168318,168320,168322,168324],{"class":30,"line":1820},[28,168319,377],{"class":42},[28,168321,152531],{"class":34},[28,168323,55],{"class":42},[28,168325,152536],{"class":34},[28,168327,168328,168330],{"class":30,"line":2102},[28,168329,2987],{"class":42},[28,168331,168332],{"class":34}," condition(student):\n",[28,168334,168335],{"class":30,"line":2107},[28,168336,168337],{"class":34},"            result.append(student)\n",[28,168339,168340,168342],{"class":30,"line":2113},[28,168341,4578],{"class":42},[28,168343,168099],{"class":34},[28,168345,168346],{"class":30,"line":2118},[28,168347,2890],{"emptyLinePlaceholder":562},[28,168349,168350],{"class":30,"line":2132},[28,168351,2890],{"emptyLinePlaceholder":562},[28,168353,168354,168356,168358,168361,168363,168366,168368,168370,168372,168374],{"class":30,"line":2137},[28,168355,166095],{"class":34},[28,168357,83],{"class":42},[28,168359,168360],{"class":34}," filter_students(students, ",[28,168362,167280],{"class":42},[28,168364,168365],{"class":34}," s: s[",[28,168367,151866],{"class":735},[28,168369,4931],{"class":34},[28,168371,2200],{"class":42},[28,168373,158231],{"class":38},[28,168375,228],{"class":34},[28,168377,168378,168381,168383,168385,168387,168389,168391,168393,168395,168397],{"class":30,"line":2143},[28,168379,168380],{"class":34},"excellent ",[28,168382,83],{"class":42},[28,168384,168360],{"class":34},[28,168386,167280],{"class":42},[28,168388,168365],{"class":34},[28,168390,151866],{"class":735},[28,168392,4931],{"class":34},[28,168394,2200],{"class":42},[28,168396,158182],{"class":38},[28,168398,228],{"class":34},[28,168400,168401,168404,168406,168408,168410,168412,168414,168416,168418,168420],{"class":30,"line":2164},[28,168402,168403],{"class":34},"under_age ",[28,168405,83],{"class":42},[28,168407,168360],{"class":34},[28,168409,167280],{"class":42},[28,168411,168365],{"class":34},[28,168413,69601],{"class":735},[28,168415,4931],{"class":34},[28,168417,1529],{"class":42},[28,168419,156679],{"class":38},[28,168421,228],{"class":34},[28,168423,168424],{"class":30,"line":2169},[28,168425,2890],{"emptyLinePlaceholder":562},[28,168427,168428,168430],{"class":30,"line":2183},[28,168429,30898],{"class":38},[28,168431,168432],{"class":34},"(passed)\n",[28,168434,168435,168437],{"class":30,"line":2188},[28,168436,30898],{"class":38},[28,168438,168439],{"class":34},"(excellent)\n",[28,168441,168442,168444],{"class":30,"line":2217},[28,168443,30898],{"class":38},[28,168445,168446],{"class":34},"(under_age)\n",[60,168448,168450],{"id":168449},"_715-易错点","7.15 易错点",[588,168452,168453,168456,168464,168469,168480],{},[591,168454,168455],{},"默认参数不要写可变对象。",[591,168457,168458,168460,168461,168463],{},[25,168459,166926],{}," 是元组，",[25,168462,167041],{}," 是字典。",[591,168465,168466,168468],{},[25,168467,167280],{}," 只适合简单表达式。",[591,168470,168471,101412,168473,168475,168476,168479],{},[25,168472,74521],{},[25,168474,80528],{}," 的结果是迭代器，常用 ",[25,168477,168478],{},"list()"," 转换查看。",[591,168481,168482],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[60,168484,168486],{"id":168485},"_716-本章练习","7.16 本章练习",[588,168488,168489,168496,168502,168507,168512],{},[591,168490,168491,168492,168495],{},"写函数 ",[25,168493,168494],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[591,168497,168491,168498,168501],{},[25,168499,168500],{},"print_user(**kwargs)","，输出用户所有字段。",[591,168503,104760,168504,168506],{},[25,168505,167280],{}," 对学生列表按年龄排序。",[591,168508,104760,168509,168511],{},[25,168510,80528],{}," 找出成绩不及格的学生。",[591,168513,168514],{},"写一个装饰器，统计函数执行前后的提示信息。",[547,168516,168517],{},"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":77,"depth":77,"links":168519},[168520,168521,168522,168523,168524,168525,168529,168530,168531,168532,168537,168538,168539,168540,168541,168542],{"id":166378,"depth":77,"text":166379},{"id":166492,"depth":77,"text":166493},{"id":166581,"depth":77,"text":166582},{"id":166643,"depth":77,"text":166644},{"id":166789,"depth":77,"text":166790},{"id":166916,"depth":77,"text":166917,"children":168526},[168527,168528],{"id":166920,"depth":114,"text":166921},{"id":167035,"depth":114,"text":167036},{"id":167116,"depth":77,"text":167117},{"id":167274,"depth":77,"text":167275},{"id":167442,"depth":77,"text":167443},{"id":167524,"depth":77,"text":167525,"children":168533},[168534,168535,168536],{"id":167528,"depth":114,"text":167529},{"id":167599,"depth":114,"text":167600},{"id":167676,"depth":114,"text":167677},{"id":167801,"depth":77,"text":167802},{"id":167891,"depth":77,"text":167892},{"id":168022,"depth":77,"text":168023},{"id":168172,"depth":77,"text":168173},{"id":168449,"depth":77,"text":168450},{"id":168485,"depth":77,"text":168486},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166370,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168549,"title":168550,"body":168551,"description":559,"extension":560,"meta":171070,"navigation":562,"path":171071,"seo":171072,"stem":171073,"__hash__":171074},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168552,"toc":171045},[168553,168556,168560,168563,168566,168597,168601,168605,168608,168635,168639,168642,168693,168696,168711,168714,168749,168753,168755,168779,168782,168842,168846,168850,168853,168910,168913,168933,168937,168940,169003,169007,169010,169066,169073,169097,169101,169104,169167,169171,169176,169227,169230,169234,169239,169306,169309,169391,169395,169400,169451,169454,169458,169461,169464,169472,169475,169521,169524,169570,169574,169580,169624,169627,169673,169676,169716,169719,169780,169784,169787,169877,169880,170022,170025,170092,170096,170099,170102,170243,170246,170324,170327,170503,170507,170509,170520,170522,170721,170725,170969,170973,171007,171011,171042],[10,168554,168550],{"id":168555},"_8-文件操作",[60,168557,168559],{"id":168558},"_81-文件操作的意义","8.1 文件操作的意义",[14,168561,168562],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168564,168565],{},"常见文件类型：",[588,168567,168568,168574,168580,168586,168592],{},[591,168569,168570,168573],{},[25,168571,168572],{},".txt","：普通文本。",[591,168575,168576,168579],{},[25,168577,168578],{},".csv","：表格文本。",[591,168581,168582,168585],{},[25,168583,168584],{},".json","：结构化数据。",[591,168587,168588,168591],{},[25,168589,168590],{},".log","：日志文件。",[591,168593,168594,168596],{},[25,168595,146746],{},"：Python 源代码。",[60,168598,168600],{"id":168599},"_82-路径","8.2 路径",[605,168602,168604],{"id":168603},"_821-相对路径","8.2.1 相对路径",[14,168606,168607],{},"相对当前运行目录：",[18,168609,168611],{"className":20,"code":168610,"language":22,"meta":23,"style":23},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[25,168612,168613],{"__ignoreMap":23},[28,168614,168615,168617,168619,168621,168623,168625,168627,168629,168631,168633],{"class":30,"line":31},[28,168616,87392],{"class":38},[28,168618,367],{"class":34},[28,168620,147190],{"class":735},[28,168622,12921],{"class":34},[28,168624,147195],{"class":735},[28,168626,12921],{"class":34},[28,168628,147200],{"class":5704},[28,168630,83],{"class":42},[28,168632,147205],{"class":735},[28,168634,228],{"class":34},[605,168636,168638],{"id":168637},"_822-绝对路径","8.2.2 绝对路径",[14,168640,168641],{},"从根目录或盘符开始：",[18,168643,168645],{"className":20,"code":168644,"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,168646,168647,168670],{"__ignoreMap":23},[28,168648,168649,168651,168653,168656,168658,168660,168662,168664,168666,168668],{"class":30,"line":31},[28,168650,87392],{"class":38},[28,168652,367],{"class":34},[28,168654,168655],{"class":735},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[28,168657,12921],{"class":34},[28,168659,147195],{"class":735},[28,168661,12921],{"class":34},[28,168663,147200],{"class":5704},[28,168665,83],{"class":42},[28,168667,147205],{"class":735},[28,168669,228],{"class":34},[28,168671,168672,168674,168676,168679,168681,168683,168685,168687,168689,168691],{"class":30,"line":77},[28,168673,87392],{"class":38},[28,168675,367],{"class":34},[28,168677,168678],{"class":735},"\"D:\u002Fdata\u002Fdata.txt\"",[28,168680,12921],{"class":34},[28,168682,147195],{"class":735},[28,168684,12921],{"class":34},[28,168686,147200],{"class":5704},[28,168688,83],{"class":42},[28,168690,147205],{"class":735},[28,168692,228],{"class":34},[14,168694,168695],{},"Windows 路径建议写成：",[18,168697,168699],{"className":20,"code":168698,"language":22,"meta":23,"style":23},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[25,168700,168701],{"__ignoreMap":23},[28,168702,168703,168706,168708],{"class":30,"line":31},[28,168704,168705],{"class":34},"path ",[28,168707,83],{"class":42},[28,168709,168710],{"class":735}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168712,168713],{},"或原始字符串：",[18,168715,168717],{"className":20,"code":168716,"language":22,"meta":23,"style":23},"path = r\"D:\\data\\data.txt\"\n",[25,168718,168719],{"__ignoreMap":23},[28,168720,168721,168723,168725,168727,168729,168732,168735,168738,168740,168742,168744,168747],{"class":30,"line":31},[28,168722,168705],{"class":34},[28,168724,83],{"class":42},[28,168726,17607],{"class":42},[28,168728,880],{"class":735},[28,168730,168731],{"class":48454},"D:",[28,168733,168734],{"class":38},"\\d",[28,168736,168737],{"class":48454},"ata",[28,168739,168734],{"class":38},[28,168741,168737],{"class":48454},[28,168743,1179],{"class":38},[28,168745,168746],{"class":48454},"txt",[28,168748,25620],{"class":735},[60,168750,168752],{"id":168751},"_83-open函数","8.3 open函数",[14,168754,5669],{},[18,168756,168758],{"className":20,"code":168757,"language":22,"meta":23,"style":23},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[25,168759,168760],{"__ignoreMap":23},[28,168761,168762,168764,168766,168768,168771,168773,168775,168777],{"class":30,"line":31},[28,168763,45831],{"class":5704},[28,168765,14050],{"class":42},[28,168767,147185],{"class":38},[28,168769,168770],{"class":34},"(文件路径, 打开模式, ",[28,168772,147200],{"class":5704},[28,168774,83],{"class":42},[28,168776,147205],{"class":735},[28,168778,228],{"class":34},[14,168780,168781],{},"常见模式：",[768,168783,168784,168793],{},[771,168785,168786],{},[774,168787,168788,168791],{},[777,168789,168790],{},"模式",[777,168792,26356],{},[815,168794,168795,168804,168813,168822,168832],{},[774,168796,168797,168801],{},[820,168798,168799],{},[25,168800,1290],{},[820,168802,168803],{},"只读，文件不存在会报错",[774,168805,168806,168810],{},[820,168807,168808],{},[25,168809,1415],{},[820,168811,168812],{},"只写，文件不存在会创建，存在会清空",[774,168814,168815,168819],{},[820,168816,168817],{},[25,168818,80],{},[820,168820,168821],{},"追加，文件不存在会创建",[774,168823,168824,168829],{},[820,168825,168826],{},[25,168827,168828],{},"rb",[820,168830,168831],{},"二进制只读",[774,168833,168834,168839],{},[820,168835,168836],{},[25,168837,168838],{},"wb",[820,168840,168841],{},"二进制只写",[60,168843,168845],{"id":168844},"_84-读取文件","8.4 读取文件",[605,168847,168849],{"id":168848},"_841-read","8.4.1 read",[14,168851,168852],{},"一次读取全部内容：",[18,168854,168856],{"className":20,"code":168855,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[25,168857,168858,168884,168896,168903],{"__ignoreMap":23},[28,168859,168860,168862,168864,168866,168868,168870,168872,168874,168876,168878,168880,168882],{"class":30,"line":31},[28,168861,45831],{"class":5704},[28,168863,14050],{"class":42},[28,168865,147185],{"class":38},[28,168867,367],{"class":34},[28,168869,147190],{"class":735},[28,168871,12921],{"class":34},[28,168873,147195],{"class":735},[28,168875,12921],{"class":34},[28,168877,147200],{"class":5704},[28,168879,83],{"class":42},[28,168881,147205],{"class":735},[28,168883,228],{"class":34},[28,168885,168886,168889,168891,168893],{"class":30,"line":77},[28,168887,168888],{"class":34},"content ",[28,168890,83],{"class":42},[28,168892,148547],{"class":5704},[28,168894,168895],{"class":34},".read()\n",[28,168897,168898,168900],{"class":30,"line":114},[28,168899,30898],{"class":38},[28,168901,168902],{"class":34},"(content)\n",[28,168904,168905,168907],{"class":30,"line":128},[28,168906,45831],{"class":5704},[28,168908,168909],{"class":34},".close()\n",[14,168911,168912],{},"可以指定读取字符数：",[18,168914,168916],{"className":20,"code":168915,"language":22,"meta":23,"style":23},"content = file.read(10)\n",[25,168917,168918],{"__ignoreMap":23},[28,168919,168920,168922,168924,168926,168929,168931],{"class":30,"line":31},[28,168921,168888],{"class":34},[28,168923,83],{"class":42},[28,168925,148547],{"class":5704},[28,168927,168928],{"class":34},".read(",[28,168930,225],{"class":38},[28,168932,228],{"class":34},[605,168934,168936],{"id":168935},"_842-readline","8.4.2 readline",[14,168938,168939],{},"一次读取一行：",[18,168941,168943],{"className":20,"code":168942,"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,168944,168945,168971,168975,168986,168993,168997],{"__ignoreMap":23},[28,168946,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965,168967,168969],{"class":30,"line":31},[28,168948,45831],{"class":5704},[28,168950,14050],{"class":42},[28,168952,147185],{"class":38},[28,168954,367],{"class":34},[28,168956,147190],{"class":735},[28,168958,12921],{"class":34},[28,168960,147195],{"class":735},[28,168962,12921],{"class":34},[28,168964,147200],{"class":5704},[28,168966,83],{"class":42},[28,168968,147205],{"class":735},[28,168970,228],{"class":34},[28,168972,168973],{"class":30,"line":77},[28,168974,2890],{"emptyLinePlaceholder":562},[28,168976,168977,168979,168981,168983],{"class":30,"line":114},[28,168978,147646],{"class":34},[28,168980,83],{"class":42},[28,168982,148547],{"class":5704},[28,168984,168985],{"class":34},".readline()\n",[28,168987,168988,168990],{"class":30,"line":128},[28,168989,30898],{"class":38},[28,168991,168992],{"class":34},"(line)\n",[28,168994,168995],{"class":30,"line":393},[28,168996,2890],{"emptyLinePlaceholder":562},[28,168998,168999,169001],{"class":30,"line":409},[28,169000,45831],{"class":5704},[28,169002,168909],{"class":34},[605,169004,169006],{"id":169005},"_843-readlines","8.4.3 readlines",[14,169008,169009],{},"读取所有行，返回列表：",[18,169011,169013],{"className":20,"code":169012,"language":22,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[25,169014,169015,169041,169053,169060],{"__ignoreMap":23},[28,169016,169017,169019,169021,169023,169025,169027,169029,169031,169033,169035,169037,169039],{"class":30,"line":31},[28,169018,45831],{"class":5704},[28,169020,14050],{"class":42},[28,169022,147185],{"class":38},[28,169024,367],{"class":34},[28,169026,147190],{"class":735},[28,169028,12921],{"class":34},[28,169030,147195],{"class":735},[28,169032,12921],{"class":34},[28,169034,147200],{"class":5704},[28,169036,83],{"class":42},[28,169038,147205],{"class":735},[28,169040,228],{"class":34},[28,169042,169043,169046,169048,169050],{"class":30,"line":77},[28,169044,169045],{"class":34},"lines ",[28,169047,83],{"class":42},[28,169049,148547],{"class":5704},[28,169051,169052],{"class":34},".readlines()\n",[28,169054,169055,169057],{"class":30,"line":114},[28,169056,30898],{"class":38},[28,169058,169059],{"class":34},"(lines)\n",[28,169061,169062,169064],{"class":30,"line":128},[28,169063,45831],{"class":5704},[28,169065,168909],{"class":34},[14,169067,169068,169069,169072],{},"每一行通常带有换行符，可以用 ",[25,169070,169071],{},"strip()"," 去掉：",[18,169074,169076],{"className":20,"code":169075,"language":22,"meta":23,"style":23},"for line in lines:\n    print(line.strip())\n",[25,169077,169078,169090],{"__ignoreMap":23},[28,169079,169080,169082,169085,169087],{"class":30,"line":31},[28,169081,49],{"class":42},[28,169083,169084],{"class":34}," line ",[28,169086,55],{"class":42},[28,169088,169089],{"class":34}," lines:\n",[28,169091,169092,169094],{"class":30,"line":77},[28,169093,31780],{"class":38},[28,169095,169096],{"class":34},"(line.strip())\n",[605,169098,169100],{"id":169099},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169102,169103],{},"推荐读取大文件时使用：",[18,169105,169107],{"className":20,"code":169106,"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,169108,169109,169135,169139,169151,169157,169161],{"__ignoreMap":23},[28,169110,169111,169113,169115,169117,169119,169121,169123,169125,169127,169129,169131,169133],{"class":30,"line":31},[28,169112,45831],{"class":5704},[28,169114,14050],{"class":42},[28,169116,147185],{"class":38},[28,169118,367],{"class":34},[28,169120,147190],{"class":735},[28,169122,12921],{"class":34},[28,169124,147195],{"class":735},[28,169126,12921],{"class":34},[28,169128,147200],{"class":5704},[28,169130,83],{"class":42},[28,169132,147205],{"class":735},[28,169134,228],{"class":34},[28,169136,169137],{"class":30,"line":77},[28,169138,2890],{"emptyLinePlaceholder":562},[28,169140,169141,169143,169145,169147,169149],{"class":30,"line":114},[28,169142,49],{"class":42},[28,169144,169084],{"class":34},[28,169146,55],{"class":42},[28,169148,148547],{"class":5704},[28,169150,4227],{"class":34},[28,169152,169153,169155],{"class":30,"line":128},[28,169154,31780],{"class":38},[28,169156,169096],{"class":34},[28,169158,169159],{"class":30,"line":393},[28,169160,2890],{"emptyLinePlaceholder":562},[28,169162,169163,169165],{"class":30,"line":409},[28,169164,45831],{"class":5704},[28,169166,168909],{"class":34},[60,169168,169170],{"id":169169},"_85-with语句","8.5 with语句",[14,169172,169173,169175],{},[25,169174,108227],{}," 会自动关闭文件，推荐使用。",[18,169177,169179],{"className":20,"code":169178,"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,169180,169181,169211,169221],{"__ignoreMap":23},[28,169182,169183,169185,169187,169189,169191,169193,169195,169197,169199,169201,169203,169205,169207,169209],{"class":30,"line":31},[28,169184,108227],{"class":42},[28,169186,147185],{"class":38},[28,169188,367],{"class":34},[28,169190,147190],{"class":735},[28,169192,12921],{"class":34},[28,169194,147195],{"class":735},[28,169196,12921],{"class":34},[28,169198,147200],{"class":5704},[28,169200,83],{"class":42},[28,169202,147205],{"class":735},[28,169204,14200],{"class":34},[28,169206,542],{"class":42},[28,169208,148547],{"class":5704},[28,169210,4227],{"class":34},[28,169212,169213,169215,169217,169219],{"class":30,"line":77},[28,169214,147217],{"class":34},[28,169216,83],{"class":42},[28,169218,148547],{"class":5704},[28,169220,168895],{"class":34},[28,169222,169223,169225],{"class":30,"line":114},[28,169224,31780],{"class":38},[28,169226,168902],{"class":34},[14,169228,169229],{},"等价于打开文件、读取、最后关闭，但更安全。",[60,169231,169233],{"id":169232},"_86-写入文件","8.6 写入文件",[14,169235,169236,169238],{},[25,169237,1415],{}," 模式会清空原文件。",[18,169240,169242],{"className":20,"code":169241,"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,169243,169244,169274,169291],{"__ignoreMap":23},[28,169245,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272],{"class":30,"line":31},[28,169247,108227],{"class":42},[28,169249,147185],{"class":38},[28,169251,367],{"class":34},[28,169253,147190],{"class":735},[28,169255,12921],{"class":34},[28,169257,152370],{"class":735},[28,169259,12921],{"class":34},[28,169261,147200],{"class":5704},[28,169263,83],{"class":42},[28,169265,147205],{"class":735},[28,169267,14200],{"class":34},[28,169269,542],{"class":42},[28,169271,148547],{"class":5704},[28,169273,4227],{"class":34},[28,169275,169276,169279,169282,169285,169287,169289],{"class":30,"line":77},[28,169277,169278],{"class":5704},"    file",[28,169280,169281],{"class":34},".write(",[28,169283,169284],{"class":735},"\"hello",[28,169286,156919],{"class":38},[28,169288,880],{"class":735},[28,169290,228],{"class":34},[28,169292,169293,169295,169297,169300,169302,169304],{"class":30,"line":114},[28,169294,169278],{"class":5704},[28,169296,169281],{"class":34},[28,169298,169299],{"class":735},"\"python",[28,169301,156919],{"class":38},[28,169303,880],{"class":735},[28,169305,228],{"class":34},[14,169307,169308],{},"写入多行：",[18,169310,169312],{"className":20,"code":169311,"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,169313,169314,169349,169353,169384],{"__ignoreMap":23},[28,169315,169316,169318,169320,169322,169325,169327,169329,169331,169334,169336,169338,169340,169343,169345,169347],{"class":30,"line":31},[28,169317,169045],{"class":34},[28,169319,83],{"class":42},[28,169321,52703],{"class":34},[28,169323,169324],{"class":735},"\"小明,18",[28,169326,156919],{"class":38},[28,169328,880],{"class":735},[28,169330,12921],{"class":34},[28,169332,169333],{"class":735},"\"小红,17",[28,169335,156919],{"class":38},[28,169337,880],{"class":735},[28,169339,12921],{"class":34},[28,169341,169342],{"class":735},"\"小刚,19",[28,169344,156919],{"class":38},[28,169346,880],{"class":735},[28,169348,111],{"class":34},[28,169350,169351],{"class":30,"line":77},[28,169352,2890],{"emptyLinePlaceholder":562},[28,169354,169355,169357,169359,169361,169364,169366,169368,169370,169372,169374,169376,169378,169380,169382],{"class":30,"line":114},[28,169356,108227],{"class":42},[28,169358,147185],{"class":38},[28,169360,367],{"class":34},[28,169362,169363],{"class":735},"\"students.txt\"",[28,169365,12921],{"class":34},[28,169367,152370],{"class":735},[28,169369,12921],{"class":34},[28,169371,147200],{"class":5704},[28,169373,83],{"class":42},[28,169375,147205],{"class":735},[28,169377,14200],{"class":34},[28,169379,542],{"class":42},[28,169381,148547],{"class":5704},[28,169383,4227],{"class":34},[28,169385,169386,169388],{"class":30,"line":128},[28,169387,169278],{"class":5704},[28,169389,169390],{"class":34},".writelines(lines)\n",[60,169392,169394],{"id":169393},"_87-追加文件","8.7 追加文件",[14,169396,169397,169399],{},[25,169398,80],{}," 模式不会清空原内容，而是在末尾追加。",[18,169401,169403],{"className":20,"code":169402,"language":22,"meta":23,"style":23},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[25,169404,169405,169436],{"__ignoreMap":23},[28,169406,169407,169409,169411,169413,169416,169418,169420,169422,169424,169426,169428,169430,169432,169434],{"class":30,"line":31},[28,169408,108227],{"class":42},[28,169410,147185],{"class":38},[28,169412,367],{"class":34},[28,169414,169415],{"class":735},"\"log.txt\"",[28,169417,12921],{"class":34},[28,169419,165719],{"class":735},[28,169421,12921],{"class":34},[28,169423,147200],{"class":5704},[28,169425,83],{"class":42},[28,169427,147205],{"class":735},[28,169429,14200],{"class":34},[28,169431,542],{"class":42},[28,169433,148547],{"class":5704},[28,169435,4227],{"class":34},[28,169437,169438,169440,169442,169445,169447,169449],{"class":30,"line":77},[28,169439,169278],{"class":5704},[28,169441,169281],{"class":34},[28,169443,169444],{"class":735},"\"程序启动",[28,169446,156919],{"class":38},[28,169448,880],{"class":735},[28,169450,228],{"class":34},[14,169452,169453],{},"日志类文件常用追加模式。",[60,169455,169457],{"id":169456},"_88-文件编码","8.8 文件编码",[14,169459,169460],{},"编码决定文字如何保存为字节。",[14,169462,169463],{},"常见编码：",[588,169465,169466,169469],{},[591,169467,169468],{},"UTF-8：推荐。",[591,169470,169471],{},"GBK：部分 Windows 中文文件常见。",[14,169473,169474],{},"读取文件乱码时，可以尝试：",[18,169476,169478],{"className":20,"code":169477,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[25,169479,169480,169511],{"__ignoreMap":23},[28,169481,169482,169484,169486,169488,169490,169492,169494,169496,169498,169500,169503,169505,169507,169509],{"class":30,"line":31},[28,169483,108227],{"class":42},[28,169485,147185],{"class":38},[28,169487,367],{"class":34},[28,169489,147190],{"class":735},[28,169491,12921],{"class":34},[28,169493,147195],{"class":735},[28,169495,12921],{"class":34},[28,169497,147200],{"class":5704},[28,169499,83],{"class":42},[28,169501,169502],{"class":735},"\"gbk\"",[28,169504,14200],{"class":34},[28,169506,542],{"class":42},[28,169508,148547],{"class":5704},[28,169510,4227],{"class":34},[28,169512,169513,169515,169517,169519],{"class":30,"line":77},[28,169514,147217],{"class":34},[28,169516,83],{"class":42},[28,169518,148547],{"class":5704},[28,169520,168895],{"class":34},[14,169522,169523],{},"写文件时建议统一 UTF-8：",[18,169525,169527],{"className":20,"code":169526,"language":22,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[25,169528,169529,169559],{"__ignoreMap":23},[28,169530,169531,169533,169535,169537,169539,169541,169543,169545,169547,169549,169551,169553,169555,169557],{"class":30,"line":31},[28,169532,108227],{"class":42},[28,169534,147185],{"class":38},[28,169536,367],{"class":34},[28,169538,147190],{"class":735},[28,169540,12921],{"class":34},[28,169542,152370],{"class":735},[28,169544,12921],{"class":34},[28,169546,147200],{"class":5704},[28,169548,83],{"class":42},[28,169550,147205],{"class":735},[28,169552,14200],{"class":34},[28,169554,542],{"class":42},[28,169556,148547],{"class":5704},[28,169558,4227],{"class":34},[28,169560,169561,169563,169565,169568],{"class":30,"line":77},[28,169562,169278],{"class":5704},[28,169564,169281],{"class":34},[28,169566,169567],{"class":735},"\"中文内容\"",[28,169569,228],{"class":34},[60,169571,169573],{"id":169572},"_89-pathlib","8.9 pathlib",[14,169575,169576,169579],{},[25,169577,169578],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[18,169581,169583],{"className":20,"code":169582,"language":22,"meta":23,"style":23},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[25,169584,169585,169595,169599,169617],{"__ignoreMap":23},[28,169586,169587,169589,169591,169593],{"class":30,"line":31},[28,169588,530],{"class":42},[28,169590,108705],{"class":34},[28,169592,536],{"class":42},[28,169594,108710],{"class":34},[28,169596,169597],{"class":30,"line":77},[28,169598,2890],{"emptyLinePlaceholder":562},[28,169600,169601,169603,169605,169607,169610,169612,169614],{"class":30,"line":114},[28,169602,168705],{"class":34},[28,169604,83],{"class":42},[28,169606,108939],{"class":34},[28,169608,169609],{"class":735},"\"data\"",[28,169611,14200],{"class":34},[28,169613,43],{"class":42},[28,169615,169616],{"class":735}," \"students.txt\"\n",[28,169618,169619,169621],{"class":30,"line":128},[28,169620,30898],{"class":38},[28,169622,169623],{"class":34},"(path)\n",[14,169625,169626],{},"创建目录：",[18,169628,169630],{"className":20,"code":169629,"language":22,"meta":23,"style":23},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[25,169631,169632,169642,169646,169659],{"__ignoreMap":23},[28,169633,169634,169636,169638,169640],{"class":30,"line":31},[28,169635,530],{"class":42},[28,169637,108705],{"class":34},[28,169639,536],{"class":42},[28,169641,108710],{"class":34},[28,169643,169644],{"class":30,"line":77},[28,169645,2890],{"emptyLinePlaceholder":562},[28,169647,169648,169651,169653,169655,169657],{"class":30,"line":114},[28,169649,169650],{"class":34},"data_dir ",[28,169652,83],{"class":42},[28,169654,108939],{"class":34},[28,169656,169609],{"class":735},[28,169658,228],{"class":34},[28,169660,169661,169664,169667,169669,169671],{"class":30,"line":128},[28,169662,169663],{"class":34},"data_dir.mkdir(",[28,169665,169666],{"class":5704},"exist_ok",[28,169668,83],{"class":42},[28,169670,31955],{"class":38},[28,169672,228],{"class":34},[14,169674,169675],{},"判断文件是否存在：",[18,169677,169679],{"className":20,"code":169678,"language":22,"meta":23,"style":23},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[25,169680,169681,169694,169698,169705],{"__ignoreMap":23},[28,169682,169683,169685,169687,169689,169692],{"class":30,"line":31},[28,169684,168705],{"class":34},[28,169686,83],{"class":42},[28,169688,108939],{"class":34},[28,169690,169691],{"class":735},"\"data\u002Fstudents.txt\"",[28,169693,228],{"class":34},[28,169695,169696],{"class":30,"line":77},[28,169697,2890],{"emptyLinePlaceholder":562},[28,169699,169700,169702],{"class":30,"line":114},[28,169701,2021],{"class":42},[28,169703,169704],{"class":34}," path.exists():\n",[28,169706,169707,169709,169711,169714],{"class":30,"line":128},[28,169708,31780],{"class":38},[28,169710,367],{"class":34},[28,169712,169713],{"class":735},"\"文件存在\"",[28,169715,228],{"class":34},[14,169717,169718],{},"读写文本：",[18,169720,169722],{"className":20,"code":169721,"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,169723,169724,169736,169740,169757,169774],{"__ignoreMap":23},[28,169725,169726,169728,169730,169732,169734],{"class":30,"line":31},[28,169727,168705],{"class":34},[28,169729,83],{"class":42},[28,169731,108939],{"class":34},[28,169733,147190],{"class":735},[28,169735,228],{"class":34},[28,169737,169738],{"class":30,"line":77},[28,169739,2890],{"emptyLinePlaceholder":562},[28,169741,169742,169745,169747,169749,169751,169753,169755],{"class":30,"line":114},[28,169743,169744],{"class":34},"path.write_text(",[28,169746,146270],{"class":735},[28,169748,12921],{"class":34},[28,169750,147200],{"class":5704},[28,169752,83],{"class":42},[28,169754,147205],{"class":735},[28,169756,228],{"class":34},[28,169758,169759,169761,169763,169766,169768,169770,169772],{"class":30,"line":128},[28,169760,168888],{"class":34},[28,169762,83],{"class":42},[28,169764,169765],{"class":34}," path.read_text(",[28,169767,147200],{"class":5704},[28,169769,83],{"class":42},[28,169771,147205],{"class":735},[28,169773,228],{"class":34},[28,169775,169776,169778],{"class":30,"line":393},[28,169777,30898],{"class":38},[28,169779,168902],{"class":34},[60,169781,169783],{"id":169782},"_810-json文件","8.10 JSON文件",[14,169785,169786],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[18,169788,169790],{"className":20,"code":169789,"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,169791,169792,169798,169802,169810,169820,169830,169838,169842,169846,169871],{"__ignoreMap":23},[28,169793,169794,169796],{"class":30,"line":31},[28,169795,536],{"class":42},[28,169797,147485],{"class":34},[28,169799,169800],{"class":30,"line":77},[28,169801,2890],{"emptyLinePlaceholder":562},[28,169803,169804,169806,169808],{"class":30,"line":114},[28,169805,149875],{"class":34},[28,169807,83],{"class":42},[28,169809,16058],{"class":34},[28,169811,169812,169814,169816,169818],{"class":30,"line":128},[28,169813,147414],{"class":735},[28,169815,51914],{"class":34},[28,169817,150282],{"class":735},[28,169819,31945],{"class":34},[28,169821,169822,169824,169826,169828],{"class":30,"line":393},[28,169823,164931],{"class":735},[28,169825,51914],{"class":34},[28,169827,1270],{"class":38},[28,169829,31945],{"class":34},[28,169831,169832,169834,169836],{"class":30,"line":409},[28,169833,164942],{"class":735},[28,169835,51914],{"class":34},[28,169837,164947],{"class":38},[28,169839,169840],{"class":30,"line":1711},[28,169841,2055],{"class":34},[28,169843,169844],{"class":30,"line":1802},[28,169845,2890],{"emptyLinePlaceholder":562},[28,169847,169848,169850,169852,169855,169857,169859,169861,169863,169865,169867,169869],{"class":30,"line":1808},[28,169849,156838],{"class":34},[28,169851,83],{"class":42},[28,169853,169854],{"class":34}," json.dumps(student, ",[28,169856,147531],{"class":5704},[28,169858,83],{"class":42},[28,169860,34464],{"class":38},[28,169862,12921],{"class":34},[28,169864,152406],{"class":5704},[28,169866,83],{"class":42},[28,169868,93],{"class":38},[28,169870,228],{"class":34},[28,169872,169873,169875],{"class":30,"line":1820},[28,169874,30898],{"class":38},[28,169876,164465],{"class":34},[14,169878,169879],{},"写入 JSON 文件：",[18,169881,169883],{"className":20,"code":169882,"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,169884,169885,169891,169895,169903,169931,169959,169963,169967,169997],{"__ignoreMap":23},[28,169886,169887,169889],{"class":30,"line":31},[28,169888,536],{"class":42},[28,169890,147485],{"class":34},[28,169892,169893],{"class":30,"line":77},[28,169894,2890],{"emptyLinePlaceholder":562},[28,169896,169897,169899,169901],{"class":30,"line":114},[28,169898,160110],{"class":34},[28,169900,83],{"class":42},[28,169902,55924],{"class":34},[28,169904,169905,169907,169909,169911,169913,169915,169917,169919,169921,169923,169925,169927,169929],{"class":30,"line":128},[28,169906,148779],{"class":34},[28,169908,63156],{"class":735},[28,169910,51914],{"class":34},[28,169912,150282],{"class":735},[28,169914,12921],{"class":34},[28,169916,69601],{"class":735},[28,169918,51914],{"class":34},[28,169920,1270],{"class":38},[28,169922,12921],{"class":34},[28,169924,151866],{"class":735},[28,169926,51914],{"class":34},[28,169928,1608],{"class":38},[28,169930,5418],{"class":34},[28,169932,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957],{"class":30,"line":393},[28,169934,148779],{"class":34},[28,169936,63156],{"class":735},[28,169938,51914],{"class":34},[28,169940,151330],{"class":735},[28,169942,12921],{"class":34},[28,169944,69601],{"class":735},[28,169946,51914],{"class":34},[28,169948,1245],{"class":38},[28,169950,12921],{"class":34},[28,169952,151866],{"class":735},[28,169954,51914],{"class":34},[28,169956,1431],{"class":38},[28,169958,5418],{"class":34},[28,169960,169961],{"class":30,"line":409},[28,169962,111],{"class":34},[28,169964,169965],{"class":30,"line":1711},[28,169966,2890],{"emptyLinePlaceholder":562},[28,169968,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":30,"line":1802},[28,169970,108227],{"class":42},[28,169972,147185],{"class":38},[28,169974,367],{"class":34},[28,169976,152225],{"class":735},[28,169978,12921],{"class":34},[28,169980,152370],{"class":735},[28,169982,12921],{"class":34},[28,169984,147200],{"class":5704},[28,169986,83],{"class":42},[28,169988,147205],{"class":735},[28,169990,14200],{"class":34},[28,169992,542],{"class":42},[28,169994,148547],{"class":5704},[28,169996,4227],{"class":34},[28,169998,169999,170002,170004,170006,170008,170010,170012,170014,170016,170018,170020],{"class":30,"line":1808},[28,170000,170001],{"class":34},"    json.dump(students, ",[28,170003,45831],{"class":5704},[28,170005,12921],{"class":34},[28,170007,147531],{"class":5704},[28,170009,83],{"class":42},[28,170011,34464],{"class":38},[28,170013,12921],{"class":34},[28,170015,152406],{"class":5704},[28,170017,83],{"class":42},[28,170019,93],{"class":38},[28,170021,228],{"class":34},[14,170023,170024],{},"读取 JSON 文件：",[18,170026,170028],{"className":20,"code":170027,"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,170029,170030,170036,170040,170070,170082,170086],{"__ignoreMap":23},[28,170031,170032,170034],{"class":30,"line":31},[28,170033,536],{"class":42},[28,170035,147485],{"class":34},[28,170037,170038],{"class":30,"line":77},[28,170039,2890],{"emptyLinePlaceholder":562},[28,170041,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068],{"class":30,"line":114},[28,170043,108227],{"class":42},[28,170045,147185],{"class":38},[28,170047,367],{"class":34},[28,170049,152225],{"class":735},[28,170051,12921],{"class":34},[28,170053,147195],{"class":735},[28,170055,12921],{"class":34},[28,170057,147200],{"class":5704},[28,170059,83],{"class":42},[28,170061,147205],{"class":735},[28,170063,14200],{"class":34},[28,170065,542],{"class":42},[28,170067,148547],{"class":5704},[28,170069,4227],{"class":34},[28,170071,170072,170074,170076,170078,170080],{"class":30,"line":128},[28,170073,153431],{"class":34},[28,170075,83],{"class":42},[28,170077,148558],{"class":34},[28,170079,45831],{"class":5704},[28,170081,228],{"class":34},[28,170083,170084],{"class":30,"line":393},[28,170085,2890],{"emptyLinePlaceholder":562},[28,170087,170088,170090],{"class":30,"line":409},[28,170089,30898],{"class":38},[28,170091,165389],{"class":34},[60,170093,170095],{"id":170094},"_811-csv文件","8.11 CSV文件",[14,170097,170098],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170100,170101],{},"写入 CSV：",[18,170103,170105],{"className":20,"code":170104,"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,170106,170107,170114,170118,170126,170144,170160,170176,170180,170184,170224,170238],{"__ignoreMap":23},[28,170108,170109,170111],{"class":30,"line":31},[28,170110,536],{"class":42},[28,170112,170113],{"class":34}," csv\n",[28,170115,170116],{"class":30,"line":77},[28,170117,2890],{"emptyLinePlaceholder":562},[28,170119,170120,170122,170124],{"class":30,"line":114},[28,170121,160110],{"class":34},[28,170123,83],{"class":42},[28,170125,55924],{"class":34},[28,170127,170128,170131,170133,170135,170137,170139,170142],{"class":30,"line":128},[28,170129,170130],{"class":34},"    [",[28,170132,73576],{"class":735},[28,170134,12921],{"class":34},[28,170136,73609],{"class":735},[28,170138,12921],{"class":34},[28,170140,170141],{"class":735},"\"成绩\"",[28,170143,88313],{"class":34},[28,170145,170146,170148,170150,170152,170154,170156,170158],{"class":30,"line":393},[28,170147,170130],{"class":34},[28,170149,150282],{"class":735},[28,170151,12921],{"class":34},[28,170153,1270],{"class":38},[28,170155,12921],{"class":34},[28,170157,1608],{"class":38},[28,170159,88313],{"class":34},[28,170161,170162,170164,170166,170168,170170,170172,170174],{"class":30,"line":409},[28,170163,170130],{"class":34},[28,170165,151330],{"class":735},[28,170167,12921],{"class":34},[28,170169,1245],{"class":38},[28,170171,12921],{"class":34},[28,170173,1431],{"class":38},[28,170175,88313],{"class":34},[28,170177,170178],{"class":30,"line":1711},[28,170179,111],{"class":34},[28,170181,170182],{"class":30,"line":1802},[28,170183,2890],{"emptyLinePlaceholder":562},[28,170185,170186,170188,170190,170192,170195,170197,170199,170201,170203,170205,170207,170209,170212,170214,170216,170218,170220,170222],{"class":30,"line":1808},[28,170187,108227],{"class":42},[28,170189,147185],{"class":38},[28,170191,367],{"class":34},[28,170193,170194],{"class":735},"\"students.csv\"",[28,170196,12921],{"class":34},[28,170198,152370],{"class":735},[28,170200,12921],{"class":34},[28,170202,147200],{"class":5704},[28,170204,83],{"class":42},[28,170206,147205],{"class":735},[28,170208,12921],{"class":34},[28,170210,170211],{"class":5704},"newline",[28,170213,83],{"class":42},[28,170215,8140],{"class":735},[28,170217,14200],{"class":34},[28,170219,542],{"class":42},[28,170221,148547],{"class":5704},[28,170223,4227],{"class":34},[28,170225,170226,170229,170231,170234,170236],{"class":30,"line":1820},[28,170227,170228],{"class":34},"    writer ",[28,170230,83],{"class":42},[28,170232,170233],{"class":34}," csv.writer(",[28,170235,45831],{"class":5704},[28,170237,228],{"class":34},[28,170239,170240],{"class":30,"line":2102},[28,170241,170242],{"class":34},"    writer.writerows(students)\n",[14,170244,170245],{},"读取 CSV：",[18,170247,170249],{"className":20,"code":170248,"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,170250,170251,170257,170261,170291,170305,170317],{"__ignoreMap":23},[28,170252,170253,170255],{"class":30,"line":31},[28,170254,536],{"class":42},[28,170256,170113],{"class":34},[28,170258,170259],{"class":30,"line":77},[28,170260,2890],{"emptyLinePlaceholder":562},[28,170262,170263,170265,170267,170269,170271,170273,170275,170277,170279,170281,170283,170285,170287,170289],{"class":30,"line":114},[28,170264,108227],{"class":42},[28,170266,147185],{"class":38},[28,170268,367],{"class":34},[28,170270,170194],{"class":735},[28,170272,12921],{"class":34},[28,170274,147195],{"class":735},[28,170276,12921],{"class":34},[28,170278,147200],{"class":5704},[28,170280,83],{"class":42},[28,170282,147205],{"class":735},[28,170284,14200],{"class":34},[28,170286,542],{"class":42},[28,170288,148547],{"class":5704},[28,170290,4227],{"class":34},[28,170292,170293,170296,170298,170301,170303],{"class":30,"line":128},[28,170294,170295],{"class":34},"    reader ",[28,170297,83],{"class":42},[28,170299,170300],{"class":34}," csv.reader(",[28,170302,45831],{"class":5704},[28,170304,228],{"class":34},[28,170306,170307,170309,170312,170314],{"class":30,"line":393},[28,170308,377],{"class":42},[28,170310,170311],{"class":34}," row ",[28,170313,55],{"class":42},[28,170315,170316],{"class":34}," reader:\n",[28,170318,170319,170321],{"class":30,"line":409},[28,170320,32929],{"class":38},[28,170322,170323],{"class":34},"(row)\n",[14,170325,170326],{},"使用字典写入：",[18,170328,170330],{"className":20,"code":170329,"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,170331,170332,170338,170342,170350,170378,170406,170410,170414,170452,170473,170494,170499],{"__ignoreMap":23},[28,170333,170334,170336],{"class":30,"line":31},[28,170335,536],{"class":42},[28,170337,170113],{"class":34},[28,170339,170340],{"class":30,"line":77},[28,170341,2890],{"emptyLinePlaceholder":562},[28,170343,170344,170346,170348],{"class":30,"line":114},[28,170345,160110],{"class":34},[28,170347,83],{"class":42},[28,170349,55924],{"class":34},[28,170351,170352,170354,170356,170358,170360,170362,170364,170366,170368,170370,170372,170374,170376],{"class":30,"line":128},[28,170353,148779],{"class":34},[28,170355,63156],{"class":735},[28,170357,51914],{"class":34},[28,170359,150282],{"class":735},[28,170361,12921],{"class":34},[28,170363,69601],{"class":735},[28,170365,51914],{"class":34},[28,170367,1270],{"class":38},[28,170369,12921],{"class":34},[28,170371,151866],{"class":735},[28,170373,51914],{"class":34},[28,170375,1608],{"class":38},[28,170377,5418],{"class":34},[28,170379,170380,170382,170384,170386,170388,170390,170392,170394,170396,170398,170400,170402,170404],{"class":30,"line":393},[28,170381,148779],{"class":34},[28,170383,63156],{"class":735},[28,170385,51914],{"class":34},[28,170387,151330],{"class":735},[28,170389,12921],{"class":34},[28,170391,69601],{"class":735},[28,170393,51914],{"class":34},[28,170395,1245],{"class":38},[28,170397,12921],{"class":34},[28,170399,151866],{"class":735},[28,170401,51914],{"class":34},[28,170403,1431],{"class":38},[28,170405,5418],{"class":34},[28,170407,170408],{"class":30,"line":409},[28,170409,111],{"class":34},[28,170411,170412],{"class":30,"line":1711},[28,170413,2890],{"emptyLinePlaceholder":562},[28,170415,170416,170418,170420,170422,170424,170426,170428,170430,170432,170434,170436,170438,170440,170442,170444,170446,170448,170450],{"class":30,"line":1802},[28,170417,108227],{"class":42},[28,170419,147185],{"class":38},[28,170421,367],{"class":34},[28,170423,170194],{"class":735},[28,170425,12921],{"class":34},[28,170427,152370],{"class":735},[28,170429,12921],{"class":34},[28,170431,147200],{"class":5704},[28,170433,83],{"class":42},[28,170435,147205],{"class":735},[28,170437,12921],{"class":34},[28,170439,170211],{"class":5704},[28,170441,83],{"class":42},[28,170443,8140],{"class":735},[28,170445,14200],{"class":34},[28,170447,542],{"class":42},[28,170449,148547],{"class":5704},[28,170451,4227],{"class":34},[28,170453,170454,170457,170459,170461,170463,170465,170467,170469,170471],{"class":30,"line":1808},[28,170455,170456],{"class":34},"    fieldnames ",[28,170458,83],{"class":42},[28,170460,52703],{"class":34},[28,170462,63156],{"class":735},[28,170464,12921],{"class":34},[28,170466,69601],{"class":735},[28,170468,12921],{"class":34},[28,170470,151866],{"class":735},[28,170472,111],{"class":34},[28,170474,170475,170477,170479,170482,170484,170486,170489,170491],{"class":30,"line":1820},[28,170476,170228],{"class":34},[28,170478,83],{"class":42},[28,170480,170481],{"class":34}," csv.DictWriter(",[28,170483,45831],{"class":5704},[28,170485,12921],{"class":34},[28,170487,170488],{"class":5704},"fieldnames",[28,170490,83],{"class":42},[28,170492,170493],{"class":34},"fieldnames)\n",[28,170495,170496],{"class":30,"line":2102},[28,170497,170498],{"class":34},"    writer.writeheader()\n",[28,170500,170501],{"class":30,"line":2107},[28,170502,170242],{"class":34},[60,170504,170506],{"id":170505},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170508,123686],{},[588,170510,170511,170514,170517],{},[591,170512,170513],{},"读取文本文件。",[591,170515,170516],{},"统计每个单词出现次数。",[591,170518,170519],{},"输出出现次数最多的前 10 个单词。",[14,170521,10521],{},[18,170523,170525],{"className":20,"code":170524,"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,170526,170527,170537,170541,170554,170570,170574,170584,170593,170597,170609,170629,170638,170642,170660,170664,170694,170698,170714],{"__ignoreMap":23},[28,170528,170529,170531,170533,170535],{"class":30,"line":31},[28,170530,530],{"class":42},[28,170532,108705],{"class":34},[28,170534,536],{"class":42},[28,170536,108710],{"class":34},[28,170538,170539],{"class":30,"line":77},[28,170540,2890],{"emptyLinePlaceholder":562},[28,170542,170543,170545,170547,170549,170552],{"class":30,"line":114},[28,170544,168705],{"class":34},[28,170546,83],{"class":42},[28,170548,108939],{"class":34},[28,170550,170551],{"class":735},"\"article.txt\"",[28,170553,228],{"class":34},[28,170555,170556,170558,170560,170562,170564,170566,170568],{"class":30,"line":128},[28,170557,168888],{"class":34},[28,170559,83],{"class":42},[28,170561,169765],{"class":34},[28,170563,147200],{"class":5704},[28,170565,83],{"class":42},[28,170567,147205],{"class":735},[28,170569,228],{"class":34},[28,170571,170572],{"class":30,"line":393},[28,170573,2890],{"emptyLinePlaceholder":562},[28,170575,170576,170579,170581],{"class":30,"line":409},[28,170577,170578],{"class":34},"words ",[28,170580,83],{"class":42},[28,170582,170583],{"class":34}," content.lower().split()\n",[28,170585,170586,170589,170591],{"class":30,"line":1711},[28,170587,170588],{"class":34},"counter ",[28,170590,83],{"class":42},[28,170592,88345],{"class":34},[28,170594,170595],{"class":30,"line":1802},[28,170596,2890],{"emptyLinePlaceholder":562},[28,170598,170599,170601,170604,170606],{"class":30,"line":1808},[28,170600,49],{"class":42},[28,170602,170603],{"class":34}," word ",[28,170605,55],{"class":42},[28,170607,170608],{"class":34}," words:\n",[28,170610,170611,170614,170616,170619,170622,170624,170627],{"class":30,"line":1820},[28,170612,170613],{"class":34},"    word ",[28,170615,83],{"class":42},[28,170617,170618],{"class":34}," word.strip(",[28,170620,170621],{"class":735},"\".,!?;:",[28,170623,156889],{"class":38},[28,170625,170626],{"class":735},"'()[]\"",[28,170628,228],{"class":34},[28,170630,170631,170633,170635],{"class":30,"line":2102},[28,170632,3590],{"class":42},[28,170634,39407],{"class":42},[28,170636,170637],{"class":34}," word:\n",[28,170639,170640],{"class":30,"line":2107},[28,170641,148906],{"class":42},[28,170643,170644,170647,170649,170652,170654,170656,170658],{"class":30,"line":2113},[28,170645,170646],{"class":34},"    counter[word] ",[28,170648,83],{"class":42},[28,170650,170651],{"class":34}," counter.get(word, ",[28,170653,822],{"class":38},[28,170655,14200],{"class":34},[28,170657,1104],{"class":42},[28,170659,56176],{"class":38},[28,170661,170662],{"class":30,"line":2118},[28,170663,2890],{"emptyLinePlaceholder":562},[28,170665,170666,170669,170671,170673,170676,170678,170680,170682,170684,170686,170688,170690,170692],{"class":30,"line":2132},[28,170667,170668],{"class":34},"items ",[28,170670,83],{"class":42},[28,170672,163998],{"class":38},[28,170674,170675],{"class":34},"(counter.items(), ",[28,170677,154340],{"class":5704},[28,170679,154343],{"class":42},[28,170681,154346],{"class":34},[28,170683,39],{"class":38},[28,170685,112596],{"class":34},[28,170687,163922],{"class":5704},[28,170689,83],{"class":42},[28,170691,31955],{"class":38},[28,170693,228],{"class":34},[28,170695,170696],{"class":30,"line":2137},[28,170697,2890],{"emptyLinePlaceholder":562},[28,170699,170700,170702,170705,170707,170710,170712],{"class":30,"line":2143},[28,170701,49],{"class":42},[28,170703,170704],{"class":34}," word, count ",[28,170706,55],{"class":42},[28,170708,170709],{"class":34}," items[:",[28,170711,225],{"class":38},[28,170713,166149],{"class":34},[28,170715,170716,170718],{"class":30,"line":2164},[28,170717,31780],{"class":38},[28,170719,170720],{"class":34},"(word, count)\n",[60,170722,170724],{"id":170723},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[18,170726,170728],{"className":20,"code":170727,"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,170729,170730,170736,170746,170750,170762,170766,170770,170778,170788,170794,170798,170828,170838,170842,170846,170854,170884,170908,170912,170916,170924,170953,170958],{"__ignoreMap":23},[28,170731,170732,170734],{"class":30,"line":31},[28,170733,536],{"class":42},[28,170735,147485],{"class":34},[28,170737,170738,170740,170742,170744],{"class":30,"line":77},[28,170739,530],{"class":42},[28,170741,108705],{"class":34},[28,170743,536],{"class":42},[28,170745,108710],{"class":34},[28,170747,170748],{"class":30,"line":114},[28,170749,2890],{"emptyLinePlaceholder":562},[28,170751,170752,170754,170756,170758,170760],{"class":30,"line":128},[28,170753,152218],{"class":38},[28,170755,14050],{"class":42},[28,170757,108939],{"class":34},[28,170759,152225],{"class":735},[28,170761,228],{"class":34},[28,170763,170764],{"class":30,"line":393},[28,170765,2890],{"emptyLinePlaceholder":562},[28,170767,170768],{"class":30,"line":409},[28,170769,2890],{"emptyLinePlaceholder":562},[28,170771,170772,170774,170776],{"class":30,"line":1711},[28,170773,32426],{"class":42},[28,170775,152242],{"class":2453},[28,170777,32432],{"class":34},[28,170779,170780,170782,170784,170786],{"class":30,"line":1802},[28,170781,3590],{"class":42},[28,170783,39407],{"class":42},[28,170785,152253],{"class":38},[28,170787,152256],{"class":34},[28,170789,170790,170792],{"class":30,"line":1808},[28,170791,15238],{"class":42},[28,170793,52315],{"class":34},[28,170795,170796],{"class":30,"line":1820},[28,170797,2890],{"emptyLinePlaceholder":562},[28,170799,170800,170802,170804,170806,170808,170810,170812,170814,170816,170818,170820,170822,170824,170826],{"class":30,"line":2102},[28,170801,34655],{"class":42},[28,170803,147185],{"class":38},[28,170805,367],{"class":34},[28,170807,152218],{"class":38},[28,170809,12921],{"class":34},[28,170811,147195],{"class":735},[28,170813,12921],{"class":34},[28,170815,147200],{"class":5704},[28,170817,83],{"class":42},[28,170819,147205],{"class":735},[28,170821,14200],{"class":34},[28,170823,542],{"class":42},[28,170825,148547],{"class":5704},[28,170827,4227],{"class":34},[28,170829,170830,170832,170834,170836],{"class":30,"line":2107},[28,170831,15238],{"class":42},[28,170833,148558],{"class":34},[28,170835,45831],{"class":5704},[28,170837,228],{"class":34},[28,170839,170840],{"class":30,"line":2113},[28,170841,2890],{"emptyLinePlaceholder":562},[28,170843,170844],{"class":30,"line":2118},[28,170845,2890],{"emptyLinePlaceholder":562},[28,170847,170848,170850,170852],{"class":30,"line":2132},[28,170849,32426],{"class":42},[28,170851,152352],{"class":2453},[28,170853,152355],{"class":34},[28,170855,170856,170858,170860,170862,170864,170866,170868,170870,170872,170874,170876,170878,170880,170882],{"class":30,"line":2137},[28,170857,34655],{"class":42},[28,170859,147185],{"class":38},[28,170861,367],{"class":34},[28,170863,152218],{"class":38},[28,170865,12921],{"class":34},[28,170867,152370],{"class":735},[28,170869,12921],{"class":34},[28,170871,147200],{"class":5704},[28,170873,83],{"class":42},[28,170875,147205],{"class":735},[28,170877,14200],{"class":34},[28,170879,542],{"class":42},[28,170881,148547],{"class":5704},[28,170883,4227],{"class":34},[28,170885,170886,170888,170890,170892,170894,170896,170898,170900,170902,170904,170906],{"class":30,"line":2143},[28,170887,152391],{"class":34},[28,170889,45831],{"class":5704},[28,170891,12921],{"class":34},[28,170893,147531],{"class":5704},[28,170895,83],{"class":42},[28,170897,34464],{"class":38},[28,170899,12921],{"class":34},[28,170901,152406],{"class":5704},[28,170903,83],{"class":42},[28,170905,93],{"class":38},[28,170907,228],{"class":34},[28,170909,170910],{"class":30,"line":2164},[28,170911,2890],{"emptyLinePlaceholder":562},[28,170913,170914],{"class":30,"line":2169},[28,170915,2890],{"emptyLinePlaceholder":562},[28,170917,170918,170920,170922],{"class":30,"line":2183},[28,170919,160110],{"class":34},[28,170921,83],{"class":42},[28,170923,153436],{"class":34},[28,170925,170926,170929,170931,170933,170935,170937,170939,170941,170943,170945,170947,170949,170951],{"class":30,"line":2188},[28,170927,170928],{"class":34},"students.append({",[28,170930,63156],{"class":735},[28,170932,51914],{"class":34},[28,170934,150282],{"class":735},[28,170936,12921],{"class":34},[28,170938,69601],{"class":735},[28,170940,51914],{"class":34},[28,170942,1270],{"class":38},[28,170944,12921],{"class":34},[28,170946,151866],{"class":735},[28,170948,51914],{"class":34},[28,170950,1608],{"class":38},[28,170952,165546],{"class":34},[28,170954,170955],{"class":30,"line":2217},[28,170956,170957],{"class":34},"save_students(students)\n",[28,170959,170960,170962,170964,170967],{"class":30,"line":2222},[28,170961,30898],{"class":38},[28,170963,367],{"class":34},[28,170965,170966],{"class":735},"\"保存成功\"",[28,170968,228],{"class":34},[60,170970,170972],{"id":170971},"_814-易错点","8.14 易错点",[588,170974,170975,170979,170985,170990,170997,171004],{},[591,170976,170977,169238],{},[25,170978,1415],{},[591,170980,170981,170982,28871],{},"读写中文要指定 ",[25,170983,170984],{},"encoding=\"utf-8\"",[591,170986,170987,170988,28871],{},"打开文件后要关闭，推荐使用 ",[25,170989,108227],{},[591,170991,170992,170993,170996],{},"读取大文件不要直接 ",[25,170994,170995],{},"read()"," 全部内容。",[591,170998,170999,171000,171003],{},"Windows 写 CSV 时建议加 ",[25,171001,171002],{},"newline=\"\"","，避免空行。",[591,171005,171006],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[60,171008,171010],{"id":171009},"_815-本章练习","8.15 本章练习",[588,171012,171013,171020,171025,171028,171031],{},[591,171014,171015,171016,171019],{},"写入一个 ",[25,171017,171018],{},"students.txt","，每行保存一个学生姓名。",[591,171021,104749,171022,171024],{},[25,171023,171018],{}," 并输出所有学生。",[591,171026,171027],{},"把学生列表保存为 JSON 文件。",[591,171029,171030],{},"从 JSON 文件读取学生数据，计算平均分。",[591,171032,171033,171034,171037,171038,171041],{},"写一个日志函数 ",[25,171035,171036],{},"write_log(message)","，每次调用向 ",[25,171039,171040],{},"app.log"," 追加一行。",[547,171043,171044],{},"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":77,"depth":77,"links":171046},[171047,171048,171052,171053,171059,171060,171061,171062,171063,171064,171065,171066,171067,171068,171069],{"id":168558,"depth":77,"text":168559},{"id":168599,"depth":77,"text":168600,"children":171049},[171050,171051],{"id":168603,"depth":114,"text":168604},{"id":168637,"depth":114,"text":168638},{"id":168751,"depth":77,"text":168752},{"id":168844,"depth":77,"text":168845,"children":171054},[171055,171056,171057,171058],{"id":168848,"depth":114,"text":168849},{"id":168935,"depth":114,"text":168936},{"id":169005,"depth":114,"text":169006},{"id":169099,"depth":114,"text":169100},{"id":169169,"depth":77,"text":169170},{"id":169232,"depth":77,"text":169233},{"id":169393,"depth":77,"text":169394},{"id":169456,"depth":77,"text":169457},{"id":169572,"depth":77,"text":169573},{"id":169782,"depth":77,"text":169783},{"id":170094,"depth":77,"text":170095},{"id":170505,"depth":77,"text":170506},{"id":170723,"depth":77,"text":170724},{"id":170971,"depth":77,"text":170972},{"id":171009,"depth":77,"text":171010},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168550,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171076,"title":171077,"body":171078,"description":559,"extension":560,"meta":173264,"navigation":562,"path":173265,"seo":173266,"stem":173267,"__hash__":173268},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171079,"toc":173231},[171080,171083,171087,171090,171093,171185,171187,171206,171211,171215,171218,171221,171250,171257,171260,171264,171267,171296,171298,171350,171356,171409,171413,171511,171514,171581,171585,171642,171644,171650,171654,171659,171665,171756,171761,171765,171768,171846,171849,171887,171891,172009,172012,172016,172019,172064,172067,172071,172076,172082,172132,172135,172166,172170,172174,172204,172208,172243,172247,172282,172322,172326,172342,172345,172349,172353,172432,172436,172477,172481,172536,172540,172574,172578,172608,172617,172624,172630,172687,172690,172698,172701,172705,172712,172715,172721,172724,172741,172746,172750,172756,172769,172772,172809,172812,172823,172826,172840,172843,172857,172861,172868,172901,172904,172906,172912,172915,172919,172921,172927,172932,173105,173109,173172,173176,173200,173204,173228],[10,171081,171077],{"id":171082},"_9-异常模块与包",[60,171084,171086],{"id":171085},"_91-什么是异常","9.1 什么是异常",[14,171088,171089],{},"异常是程序运行过程中出现的错误。",[14,171091,171092],{},"常见异常：",[768,171094,171095,171104],{},[771,171096,171097],{},[774,171098,171099,171102],{},[777,171100,171101],{},"异常",[777,171103,26356],{},[815,171105,171106,171116,171126,171135,171145,171155,171165,171175],{},[774,171107,171108,171113],{},[820,171109,171110],{},[25,171111,171112],{},"NameError",[820,171114,171115],{},"使用了未定义变量",[774,171117,171118,171123],{},[820,171119,171120],{},[25,171121,171122],{},"TypeError",[820,171124,171125],{},"类型不匹配",[774,171127,171128,171132],{},[820,171129,171130],{},[25,171131,155228],{},[820,171133,171134],{},"值不合法",[774,171136,171137,171142],{},[820,171138,171139],{},[25,171140,171141],{},"IndexError",[820,171143,171144],{},"列表索引越界",[774,171146,171147,171152],{},[820,171148,171149],{},[25,171150,171151],{},"KeyError",[820,171153,171154],{},"字典 key 不存在",[774,171156,171157,171162],{},[820,171158,171159],{},[25,171160,171161],{},"FileNotFoundError",[820,171163,171164],{},"文件不存在",[774,171166,171167,171172],{},[820,171168,171169],{},[25,171170,171171],{},"ZeroDivisionError",[820,171173,171174],{},"除数为 0",[774,171176,171177,171182],{},[820,171178,171179],{},[25,171180,171181],{},"ImportError",[820,171183,171184],{},"导入失败",[14,171186,15621],{},[18,171188,171190],{"className":20,"code":171189,"language":22,"meta":23,"style":23},"num = int(\"abc\")\n",[25,171191,171192],{"__ignoreMap":23},[28,171193,171194,171196,171198,171200,171202,171204],{"class":30,"line":31},[28,171195,156181],{"class":34},[28,171197,83],{"class":42},[28,171199,2872],{"class":38},[28,171201,367],{"class":34},[28,171203,156274],{"class":735},[28,171205,228],{"class":34},[14,171207,171208,171209,28871],{},"会触发 ",[25,171210,155228],{},[60,171212,171214],{"id":171213},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171216,171217],{},"如果不处理异常，程序会直接终止。",[14,171219,171220],{},"例如用户输入年龄：",[18,171222,171224],{"className":20,"code":171223,"language":22,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[25,171225,171226,171244],{"__ignoreMap":23},[28,171227,171228,171230,171232,171234,171236,171238,171240,171242],{"class":30,"line":31},[28,171229,146940],{"class":34},[28,171231,83],{"class":42},[28,171233,2872],{"class":38},[28,171235,367],{"class":34},[28,171237,54298],{"class":38},[28,171239,367],{"class":34},[28,171241,152788],{"class":735},[28,171243,30980],{"class":34},[28,171245,171246,171248],{"class":30,"line":77},[28,171247,30898],{"class":38},[28,171249,156155],{"class":34},[14,171251,171252,171253,171256],{},"用户输入 ",[25,171254,171255],{},"abc","，程序就会报错退出。",[14,171258,171259],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[60,171261,171263],{"id":171262},"_93-try-except","9.3 try except",[14,171265,171266],{},"基础语法：",[18,171268,171270],{"className":20,"code":171269,"language":22,"meta":23,"style":23},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[25,171271,171272,171279,171284,171291],{"__ignoreMap":23},[28,171273,171274,171277],{"class":30,"line":31},[28,171275,171276],{"class":42},"try",[28,171278,4227],{"class":34},[28,171280,171281],{"class":30,"line":77},[28,171282,171283],{"class":34},"    可能出错的代码\n",[28,171285,171286,171289],{"class":30,"line":114},[28,171287,171288],{"class":42},"except",[28,171290,4227],{"class":34},[28,171292,171293],{"class":30,"line":128},[28,171294,171295],{"class":34},"    出错后的处理代码\n",[14,171297,15621],{},[18,171299,171301],{"className":20,"code":171300,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[25,171302,171303,171309,171327,171333,171339],{"__ignoreMap":23},[28,171304,171305,171307],{"class":30,"line":31},[28,171306,171276],{"class":42},[28,171308,4227],{"class":34},[28,171310,171311,171313,171315,171317,171319,171321,171323,171325],{"class":30,"line":77},[28,171312,152780],{"class":34},[28,171314,83],{"class":42},[28,171316,2872],{"class":38},[28,171318,367],{"class":34},[28,171320,54298],{"class":38},[28,171322,367],{"class":34},[28,171324,152788],{"class":735},[28,171326,30980],{"class":34},[28,171328,171329,171331],{"class":30,"line":114},[28,171330,31780],{"class":38},[28,171332,156155],{"class":34},[28,171334,171335,171337],{"class":30,"line":128},[28,171336,171288],{"class":42},[28,171338,4227],{"class":34},[28,171340,171341,171343,171345,171348],{"class":30,"line":393},[28,171342,31780],{"class":38},[28,171344,367],{"class":34},[28,171346,171347],{"class":735},"\"年龄必须是数字\"",[28,171349,228],{"class":34},[14,171351,171352,171353,171355],{},"不建议裸写 ",[25,171354,171288],{},"，最好指定异常类型。",[18,171357,171359],{"className":20,"code":171358,"language":22,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[25,171360,171361,171367,171385,171391,171399],{"__ignoreMap":23},[28,171362,171363,171365],{"class":30,"line":31},[28,171364,171276],{"class":42},[28,171366,4227],{"class":34},[28,171368,171369,171371,171373,171375,171377,171379,171381,171383],{"class":30,"line":77},[28,171370,152780],{"class":34},[28,171372,83],{"class":42},[28,171374,2872],{"class":38},[28,171376,367],{"class":34},[28,171378,54298],{"class":38},[28,171380,367],{"class":34},[28,171382,152788],{"class":735},[28,171384,30980],{"class":34},[28,171386,171387,171389],{"class":30,"line":114},[28,171388,31780],{"class":38},[28,171390,156155],{"class":34},[28,171392,171393,171395,171397],{"class":30,"line":128},[28,171394,171288],{"class":42},[28,171396,152620],{"class":38},[28,171398,4227],{"class":34},[28,171400,171401,171403,171405,171407],{"class":30,"line":393},[28,171402,31780],{"class":38},[28,171404,367],{"class":34},[28,171406,171347],{"class":735},[28,171408,228],{"class":34},[60,171410,171412],{"id":171411},"_94-捕获多个异常","9.4 捕获多个异常",[18,171414,171416],{"className":20,"code":171415,"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,171417,171418,171424,171445,171465,171472,171480,171491,171500],{"__ignoreMap":23},[28,171419,171420,171422],{"class":30,"line":31},[28,171421,171276],{"class":42},[28,171423,4227],{"class":34},[28,171425,171426,171429,171431,171433,171435,171437,171439,171441,171443],{"class":30,"line":77},[28,171427,171428],{"class":34},"    nums ",[28,171430,83],{"class":42},[28,171432,52703],{"class":34},[28,171434,39],{"class":38},[28,171436,12921],{"class":34},[28,171438,93],{"class":38},[28,171440,12921],{"class":34},[28,171442,98],{"class":38},[28,171444,111],{"class":34},[28,171446,171447,171450,171452,171454,171456,171458,171460,171463],{"class":30,"line":114},[28,171448,171449],{"class":34},"    index ",[28,171451,83],{"class":42},[28,171453,2872],{"class":38},[28,171455,367],{"class":34},[28,171457,54298],{"class":38},[28,171459,367],{"class":34},[28,171461,171462],{"class":735},"\"请输入索引:\"",[28,171464,30980],{"class":34},[28,171466,171467,171469],{"class":30,"line":128},[28,171468,31780],{"class":38},[28,171470,171471],{"class":34},"(nums[index])\n",[28,171473,171474,171476,171478],{"class":30,"line":393},[28,171475,171288],{"class":42},[28,171477,152620],{"class":38},[28,171479,4227],{"class":34},[28,171481,171482,171484,171486,171489],{"class":30,"line":409},[28,171483,31780],{"class":38},[28,171485,367],{"class":34},[28,171487,171488],{"class":735},"\"索引必须是整数\"",[28,171490,228],{"class":34},[28,171492,171493,171495,171498],{"class":30,"line":1711},[28,171494,171288],{"class":42},[28,171496,171497],{"class":38}," IndexError",[28,171499,4227],{"class":34},[28,171501,171502,171504,171506,171509],{"class":30,"line":1802},[28,171503,31780],{"class":38},[28,171505,367],{"class":34},[28,171507,171508],{"class":735},"\"索引越界\"",[28,171510,228],{"class":34},[14,171512,171513],{},"多个异常使用相同处理逻辑：",[18,171515,171517],{"className":20,"code":171516,"language":22,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[25,171518,171519,171525,171543,171556,171570],{"__ignoreMap":23},[28,171520,171521,171523],{"class":30,"line":31},[28,171522,171276],{"class":42},[28,171524,4227],{"class":34},[28,171526,171527,171529,171531,171533,171535,171537,171539,171541],{"class":30,"line":77},[28,171528,46070],{"class":34},[28,171530,83],{"class":42},[28,171532,2872],{"class":38},[28,171534,367],{"class":34},[28,171536,54298],{"class":38},[28,171538,367],{"class":34},[28,171540,156190],{"class":735},[28,171542,30980],{"class":34},[28,171544,171545,171547,171549,171551,171553],{"class":30,"line":114},[28,171546,31780],{"class":38},[28,171548,367],{"class":34},[28,171550,225],{"class":38},[28,171552,156440],{"class":42},[28,171554,171555],{"class":34}," num)\n",[28,171557,171558,171560,171562,171564,171566,171568],{"class":30,"line":128},[28,171559,171288],{"class":42},[28,171561,2148],{"class":34},[28,171563,155228],{"class":38},[28,171565,12921],{"class":34},[28,171567,171171],{"class":38},[28,171569,372],{"class":34},[28,171571,171572,171574,171576,171579],{"class":30,"line":393},[28,171573,31780],{"class":38},[28,171575,367],{"class":34},[28,171577,171578],{"class":735},"\"输入不合法\"",[28,171580,228],{"class":34},[60,171582,171584],{"id":171583},"_95-获取异常信息","9.5 获取异常信息",[18,171586,171588],{"className":20,"code":171587,"language":22,"meta":23,"style":23},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[25,171589,171590,171596,171610,171621],{"__ignoreMap":23},[28,171591,171592,171594],{"class":30,"line":31},[28,171593,171276],{"class":42},[28,171595,4227],{"class":34},[28,171597,171598,171600,171602,171604,171606,171608],{"class":30,"line":77},[28,171599,46070],{"class":34},[28,171601,83],{"class":42},[28,171603,2872],{"class":38},[28,171605,367],{"class":34},[28,171607,156274],{"class":735},[28,171609,228],{"class":34},[28,171611,171612,171614,171616,171618],{"class":30,"line":114},[28,171613,171288],{"class":42},[28,171615,152620],{"class":38},[28,171617,65081],{"class":42},[28,171619,171620],{"class":34}," e:\n",[28,171622,171623,171625,171627,171629,171632,171634,171636,171638,171640],{"class":30,"line":128},[28,171624,31780],{"class":38},[28,171626,367],{"class":34},[28,171628,686],{"class":42},[28,171630,171631],{"class":735},"\"出错了:",[28,171633,1515],{"class":38},[28,171635,706],{"class":34},[28,171637,1565],{"class":38},[28,171639,880],{"class":735},[28,171641,228],{"class":34},[14,171643,146851],{},[18,171645,171648],{"className":171646,"code":171647,"language":5675,"meta":23},[5673],"出错了:invalid literal for int() with base 10: 'abc'\n",[25,171649,171647],{"__ignoreMap":23},[60,171651,171653],{"id":171652},"_96-else和finally","9.6 else和finally",[14,171655,171656,171658],{},[25,171657,2191],{},"：没有异常时执行。",[14,171660,171661,171664],{},[25,171662,171663],{},"finally","：无论是否异常都会执行。",[18,171666,171668],{"className":20,"code":171667,"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,171669,171670,171676,171694,171702,171712,171718,171739,171745],{"__ignoreMap":23},[28,171671,171672,171674],{"class":30,"line":31},[28,171673,171276],{"class":42},[28,171675,4227],{"class":34},[28,171677,171678,171680,171682,171684,171686,171688,171690,171692],{"class":30,"line":77},[28,171679,46070],{"class":34},[28,171681,83],{"class":42},[28,171683,2872],{"class":38},[28,171685,367],{"class":34},[28,171687,54298],{"class":38},[28,171689,367],{"class":34},[28,171691,156190],{"class":735},[28,171693,30980],{"class":34},[28,171695,171696,171698,171700],{"class":30,"line":114},[28,171697,171288],{"class":42},[28,171699,152620],{"class":38},[28,171701,4227],{"class":34},[28,171703,171704,171706,171708,171710],{"class":30,"line":128},[28,171705,31780],{"class":38},[28,171707,367],{"class":34},[28,171709,153608],{"class":735},[28,171711,228],{"class":34},[28,171713,171714,171716],{"class":30,"line":393},[28,171715,2191],{"class":42},[28,171717,4227],{"class":34},[28,171719,171720,171722,171724,171726,171729,171731,171733,171735,171737],{"class":30,"line":409},[28,171721,31780],{"class":38},[28,171723,367],{"class":34},[28,171725,686],{"class":42},[28,171727,171728],{"class":735},"\"输入正确:",[28,171730,1515],{"class":38},[28,171732,2155],{"class":34},[28,171734,1565],{"class":38},[28,171736,880],{"class":735},[28,171738,228],{"class":34},[28,171740,171741,171743],{"class":30,"line":1711},[28,171742,171663],{"class":42},[28,171744,4227],{"class":34},[28,171746,171747,171749,171751,171754],{"class":30,"line":1802},[28,171748,31780],{"class":38},[28,171750,367],{"class":34},[28,171752,171753],{"class":735},"\"程序结束\"",[28,171755,228],{"class":34},[14,171757,171758,171760],{},[25,171759,171663],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[60,171762,171764],{"id":171763},"_97-抛出异常","9.7 抛出异常",[14,171766,171767],{},"程序可以主动抛出异常。",[18,171769,171771],{"className":20,"code":171770,"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,171772,171773,171782,171794,171807,171827,171831,171835],{"__ignoreMap":23},[28,171774,171775,171777,171780],{"class":30,"line":31},[28,171776,32426],{"class":42},[28,171778,171779],{"class":2453}," set_age",[28,171781,161809],{"class":34},[28,171783,171784,171786,171788,171790,171792],{"class":30,"line":77},[28,171785,3590],{"class":42},[28,171787,16193],{"class":34},[28,171789,1529],{"class":42},[28,171791,4581],{"class":38},[28,171793,4227],{"class":34},[28,171795,171796,171798,171800,171802,171805],{"class":30,"line":114},[28,171797,103826],{"class":42},[28,171799,152620],{"class":38},[28,171801,367],{"class":34},[28,171803,171804],{"class":735},"\"年龄不能为负数\"",[28,171806,228],{"class":34},[28,171808,171809,171811,171813,171815,171817,171819,171821,171823,171825],{"class":30,"line":128},[28,171810,31780],{"class":38},[28,171812,367],{"class":34},[28,171814,686],{"class":42},[28,171816,162377],{"class":735},[28,171818,1515],{"class":38},[28,171820,70698],{"class":34},[28,171822,1565],{"class":38},[28,171824,880],{"class":735},[28,171826,228],{"class":34},[28,171828,171829],{"class":30,"line":393},[28,171830,2890],{"emptyLinePlaceholder":562},[28,171832,171833],{"class":30,"line":409},[28,171834,2890],{"emptyLinePlaceholder":562},[28,171836,171837,171840,171842,171844],{"class":30,"line":1711},[28,171838,171839],{"class":34},"set_age(",[28,171841,445],{"class":42},[28,171843,39],{"class":38},[28,171845,228],{"class":34},[14,171847,171848],{},"调用者可以捕获：",[18,171850,171852],{"className":20,"code":171851,"language":22,"meta":23,"style":23},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[25,171853,171854,171860,171871,171881],{"__ignoreMap":23},[28,171855,171856,171858],{"class":30,"line":31},[28,171857,171276],{"class":42},[28,171859,4227],{"class":34},[28,171861,171862,171865,171867,171869],{"class":30,"line":77},[28,171863,171864],{"class":34},"    set_age(",[28,171866,445],{"class":42},[28,171868,39],{"class":38},[28,171870,228],{"class":34},[28,171872,171873,171875,171877,171879],{"class":30,"line":114},[28,171874,171288],{"class":42},[28,171876,152620],{"class":38},[28,171878,65081],{"class":42},[28,171880,171620],{"class":34},[28,171882,171883,171885],{"class":30,"line":128},[28,171884,31780],{"class":38},[28,171886,67476],{"class":34},[60,171888,171890],{"id":171889},"_98-自定义异常","9.8 自定义异常",[18,171892,171894],{"className":20,"code":171893,"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,171895,171896,171910,171914,171918,171922,171930,171940,171951,171961,171965,171969,171975,171992,172003],{"__ignoreMap":23},[28,171897,171898,171900,171903,171905,171908],{"class":30,"line":31},[28,171899,15180],{"class":42},[28,171901,171902],{"class":2453}," BalanceNotEnoughError",[28,171904,367],{"class":34},[28,171906,171907],{"class":38},"Exception",[28,171909,372],{"class":34},[28,171911,171912],{"class":30,"line":77},[28,171913,149931],{"class":42},[28,171915,171916],{"class":30,"line":114},[28,171917,2890],{"emptyLinePlaceholder":562},[28,171919,171920],{"class":30,"line":128},[28,171921,2890],{"emptyLinePlaceholder":562},[28,171923,171924,171926,171928],{"class":30,"line":393},[28,171925,32426],{"class":42},[28,171927,150580],{"class":2453},[28,171929,163206],{"class":34},[28,171931,171932,171934,171936,171938],{"class":30,"line":409},[28,171933,3590],{"class":42},[28,171935,150536],{"class":34},[28,171937,1579],{"class":42},[28,171939,162983],{"class":34},[28,171941,171942,171944,171947,171949],{"class":30,"line":1711},[28,171943,103826],{"class":42},[28,171945,171946],{"class":34}," BalanceNotEnoughError(",[28,171948,150631],{"class":735},[28,171950,228],{"class":34},[28,171952,171953,171955,171957,171959],{"class":30,"line":1802},[28,171954,4578],{"class":42},[28,171956,163213],{"class":34},[28,171958,445],{"class":42},[28,171960,150569],{"class":34},[28,171962,171963],{"class":30,"line":1808},[28,171964,2890],{"emptyLinePlaceholder":562},[28,171966,171967],{"class":30,"line":1820},[28,171968,2890],{"emptyLinePlaceholder":562},[28,171970,171971,171973],{"class":30,"line":2102},[28,171972,171276],{"class":42},[28,171974,4227],{"class":34},[28,171976,171977,171979,171981,171984,171986,171988,171990],{"class":30,"line":2107},[28,171978,162884],{"class":34},[28,171980,83],{"class":42},[28,171982,171983],{"class":34}," withdraw(",[28,171985,938],{"class":38},[28,171987,12921],{"class":34},[28,171989,2212],{"class":38},[28,171991,228],{"class":34},[28,171993,171994,171996,171999,172001],{"class":30,"line":2113},[28,171995,171288],{"class":42},[28,171997,171998],{"class":34}," BalanceNotEnoughError ",[28,172000,542],{"class":42},[28,172002,171620],{"class":34},[28,172004,172005,172007],{"class":30,"line":2118},[28,172006,31780],{"class":38},[28,172008,67476],{"class":34},[14,172010,172011],{},"入门阶段大多数情况使用内置异常即可。",[60,172013,172015],{"id":172014},"_99-traceback","9.9 traceback",[14,172017,172018],{},"调试时可以输出完整异常堆栈。",[18,172020,172022],{"className":20,"code":172021,"language":22,"meta":23,"style":23},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[25,172023,172024,172031,172035,172041,172051,172059],{"__ignoreMap":23},[28,172025,172026,172028],{"class":30,"line":31},[28,172027,536],{"class":42},[28,172029,172030],{"class":34}," traceback\n",[28,172032,172033],{"class":30,"line":77},[28,172034,2890],{"emptyLinePlaceholder":562},[28,172036,172037,172039],{"class":30,"line":114},[28,172038,171276],{"class":42},[28,172040,4227],{"class":34},[28,172042,172043,172045,172047,172049],{"class":30,"line":128},[28,172044,2475],{"class":38},[28,172046,367],{"class":34},[28,172048,156274],{"class":735},[28,172050,228],{"class":34},[28,172052,172053,172055,172057],{"class":30,"line":393},[28,172054,171288],{"class":42},[28,172056,152620],{"class":38},[28,172058,4227],{"class":34},[28,172060,172061],{"class":30,"line":409},[28,172062,172063],{"class":34},"    traceback.print_exc()\n",[14,172065,172066],{},"日志系统中常把异常堆栈记录到文件。",[60,172068,172070],{"id":172069},"_910-什么是模块","9.10 什么是模块",[14,172072,172073,172074,126377],{},"模块就是一个 ",[25,172075,146746],{},[14,172077,172078,172079,25105],{},"例如创建 ",[25,172080,172081],{},"my_math.py",[18,172083,172085],{"className":20,"code":172084,"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,172086,172087,172095,172105,172109,172113,172122],{"__ignoreMap":23},[28,172088,172089,172091,172093],{"class":30,"line":31},[28,172090,32426],{"class":42},[28,172092,5697],{"class":2453},[28,172094,151487],{"class":34},[28,172096,172097,172099,172101,172103],{"class":30,"line":77},[28,172098,4578],{"class":42},[28,172100,11355],{"class":34},[28,172102,1104],{"class":42},[28,172104,151498],{"class":34},[28,172106,172107],{"class":30,"line":114},[28,172108,2890],{"emptyLinePlaceholder":562},[28,172110,172111],{"class":30,"line":128},[28,172112,2890],{"emptyLinePlaceholder":562},[28,172114,172115,172117,172120],{"class":30,"line":393},[28,172116,32426],{"class":42},[28,172118,172119],{"class":2453}," sub",[28,172121,151487],{"class":34},[28,172123,172124,172126,172128,172130],{"class":30,"line":409},[28,172125,4578],{"class":42},[28,172127,11355],{"class":34},[28,172129,445],{"class":42},[28,172131,151498],{"class":34},[14,172133,172134],{},"在另一个文件中导入：",[18,172136,172138],{"className":20,"code":172137,"language":22,"meta":23,"style":23},"import my_math\n\nprint(my_math.add(1, 2))\n",[25,172139,172140,172147,172151],{"__ignoreMap":23},[28,172141,172142,172144],{"class":30,"line":31},[28,172143,536],{"class":42},[28,172145,172146],{"class":34}," my_math\n",[28,172148,172149],{"class":30,"line":77},[28,172150,2890],{"emptyLinePlaceholder":562},[28,172152,172153,172155,172158,172160,172162,172164],{"class":30,"line":114},[28,172154,30898],{"class":38},[28,172156,172157],{"class":34},"(my_math.add(",[28,172159,39],{"class":38},[28,172161,12921],{"class":34},[28,172163,93],{"class":38},[28,172165,30980],{"class":34},[60,172167,172169],{"id":172168},"_911-import导入","9.11 import导入",[605,172171,172173],{"id":172172},"_9111-导入模块","9.11.1 导入模块",[18,172175,172177],{"className":20,"code":172176,"language":22,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\n",[25,172178,172179,172185,172189],{"__ignoreMap":23},[28,172180,172181,172183],{"class":30,"line":31},[28,172182,536],{"class":42},[28,172184,45805],{"class":34},[28,172186,172187],{"class":30,"line":77},[28,172188,2890],{"emptyLinePlaceholder":562},[28,172190,172191,172193,172196,172198,172200,172202],{"class":30,"line":114},[28,172192,30898],{"class":38},[28,172194,172195],{"class":34},"(random.randint(",[28,172197,39],{"class":38},[28,172199,12921],{"class":34},[28,172201,225],{"class":38},[28,172203,30980],{"class":34},[605,172205,172207],{"id":172206},"_9112-导入指定内容","9.11.2 导入指定内容",[18,172209,172211],{"className":20,"code":172210,"language":22,"meta":23,"style":23},"from random import randint\n\nprint(randint(1, 10))\n",[25,172212,172213,172224,172228],{"__ignoreMap":23},[28,172214,172215,172217,172219,172221],{"class":30,"line":31},[28,172216,530],{"class":42},[28,172218,58273],{"class":34},[28,172220,536],{"class":42},[28,172222,172223],{"class":34}," randint\n",[28,172225,172226],{"class":30,"line":77},[28,172227,2890],{"emptyLinePlaceholder":562},[28,172229,172230,172232,172235,172237,172239,172241],{"class":30,"line":114},[28,172231,30898],{"class":38},[28,172233,172234],{"class":34},"(randint(",[28,172236,39],{"class":38},[28,172238,12921],{"class":34},[28,172240,225],{"class":38},[28,172242,30980],{"class":34},[605,172244,172246],{"id":172245},"_9113-起别名","9.11.3 起别名",[18,172248,172250],{"className":20,"code":172249,"language":22,"meta":23,"style":23},"import random as rd\n\nprint(rd.randint(1, 10))\n",[25,172251,172252,172263,172267],{"__ignoreMap":23},[28,172253,172254,172256,172258,172260],{"class":30,"line":31},[28,172255,536],{"class":42},[28,172257,58273],{"class":34},[28,172259,542],{"class":42},[28,172261,172262],{"class":34}," rd\n",[28,172264,172265],{"class":30,"line":77},[28,172266,2890],{"emptyLinePlaceholder":562},[28,172268,172269,172271,172274,172276,172278,172280],{"class":30,"line":114},[28,172270,30898],{"class":38},[28,172272,172273],{"class":34},"(rd.randint(",[28,172275,39],{"class":38},[28,172277,12921],{"class":34},[28,172279,225],{"class":38},[28,172281,30980],{"class":34},[18,172283,172285],{"className":20,"code":172284,"language":22,"meta":23,"style":23},"from random import randint as rint\n\nprint(rint(1, 10))\n",[25,172286,172287,172303,172307],{"__ignoreMap":23},[28,172288,172289,172291,172293,172295,172298,172300],{"class":30,"line":31},[28,172290,530],{"class":42},[28,172292,58273],{"class":34},[28,172294,536],{"class":42},[28,172296,172297],{"class":34}," randint ",[28,172299,542],{"class":42},[28,172301,172302],{"class":34}," rint\n",[28,172304,172305],{"class":30,"line":77},[28,172306,2890],{"emptyLinePlaceholder":562},[28,172308,172309,172311,172314,172316,172318,172320],{"class":30,"line":114},[28,172310,30898],{"class":38},[28,172312,172313],{"class":34},"(rint(",[28,172315,39],{"class":38},[28,172317,12921],{"class":34},[28,172319,225],{"class":38},[28,172321,30980],{"class":34},[605,172323,172325],{"id":172324},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[18,172327,172329],{"className":20,"code":172328,"language":22,"meta":23,"style":23},"from random import *\n",[25,172330,172331],{"__ignoreMap":23},[28,172332,172333,172335,172337,172339],{"class":30,"line":31},[28,172334,530],{"class":42},[28,172336,58273],{"class":34},[28,172338,536],{"class":42},[28,172340,172341],{"class":42}," *\n",[14,172343,172344],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[60,172346,172348],{"id":172347},"_912-常用内置模块","9.12 常用内置模块",[605,172350,172352],{"id":172351},"_9121-random","9.12.1 random",[18,172354,172356],{"className":20,"code":172355,"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,172357,172358,172364,172368,172382,172401],{"__ignoreMap":23},[28,172359,172360,172362],{"class":30,"line":31},[28,172361,536],{"class":42},[28,172363,45805],{"class":34},[28,172365,172366],{"class":30,"line":77},[28,172367,2890],{"emptyLinePlaceholder":562},[28,172369,172370,172372,172374,172376,172378,172380],{"class":30,"line":114},[28,172371,30898],{"class":38},[28,172373,172195],{"class":34},[28,172375,39],{"class":38},[28,172377,12921],{"class":34},[28,172379,225],{"class":38},[28,172381,30980],{"class":34},[28,172383,172384,172386,172389,172391,172393,172395,172397,172399],{"class":30,"line":128},[28,172385,30898],{"class":38},[28,172387,172388],{"class":34},"(random.choice([",[28,172390,150282],{"class":735},[28,172392,12921],{"class":34},[28,172394,151330],{"class":735},[28,172396,12921],{"class":34},[28,172398,160125],{"class":735},[28,172400,33621],{"class":34},[28,172402,172403,172405,172408,172410,172412,172414,172416,172418,172420,172422,172424,172426,172428,172430],{"class":30,"line":393},[28,172404,30898],{"class":38},[28,172406,172407],{"class":34},"(random.sample([",[28,172409,39],{"class":38},[28,172411,12921],{"class":34},[28,172413,93],{"class":38},[28,172415,12921],{"class":34},[28,172417,98],{"class":38},[28,172419,12921],{"class":34},[28,172421,103],{"class":38},[28,172423,12921],{"class":34},[28,172425,108],{"class":38},[28,172427,112596],{"class":34},[28,172429,93],{"class":38},[28,172431,30980],{"class":34},[605,172433,172435],{"id":172434},"_9122-time","9.12.2 time",[18,172437,172439],{"className":20,"code":172438,"language":22,"meta":23,"style":23},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[25,172440,172441,172447,172451,172458,172466],{"__ignoreMap":23},[28,172442,172443,172445],{"class":30,"line":31},[28,172444,536],{"class":42},[28,172446,32308],{"class":34},[28,172448,172449],{"class":30,"line":77},[28,172450,2890],{"emptyLinePlaceholder":562},[28,172452,172453,172455],{"class":30,"line":114},[28,172454,30898],{"class":38},[28,172456,172457],{"class":34},"(time.time())\n",[28,172459,172460,172462,172464],{"class":30,"line":128},[28,172461,95542],{"class":34},[28,172463,39],{"class":38},[28,172465,228],{"class":34},[28,172467,172468,172470,172472,172475],{"class":30,"line":393},[28,172469,30898],{"class":38},[28,172471,367],{"class":34},[28,172473,172474],{"class":735},"\"1秒后执行\"",[28,172476,228],{"class":34},[605,172478,172480],{"id":172479},"_9123-datetime","9.12.3 datetime",[18,172482,172484],{"className":20,"code":172483,"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,172485,172486,172498,172502,172512,172519],{"__ignoreMap":23},[28,172487,172488,172490,172493,172495],{"class":30,"line":31},[28,172489,530],{"class":42},[28,172491,172492],{"class":34}," datetime ",[28,172494,536],{"class":42},[28,172496,172497],{"class":34}," datetime\n",[28,172499,172500],{"class":30,"line":77},[28,172501,2890],{"emptyLinePlaceholder":562},[28,172503,172504,172507,172509],{"class":30,"line":114},[28,172505,172506],{"class":34},"now ",[28,172508,83],{"class":42},[28,172510,172511],{"class":34}," datetime.now()\n",[28,172513,172514,172516],{"class":30,"line":128},[28,172515,30898],{"class":38},[28,172517,172518],{"class":34},"(now)\n",[28,172520,172521,172523,172526,172529,172531,172534],{"class":30,"line":393},[28,172522,30898],{"class":38},[28,172524,172525],{"class":34},"(now.strftime(",[28,172527,172528],{"class":735},"\"%Y-%m-",[28,172530,157085],{"class":38},[28,172532,172533],{"class":735}," %H:%M:%S\"",[28,172535,30980],{"class":34},[605,172537,172539],{"id":172538},"_9124-os","9.12.4 os",[18,172541,172543],{"className":20,"code":172542,"language":22,"meta":23,"style":23},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[25,172544,172545,172551,172555,172562],{"__ignoreMap":23},[28,172546,172547,172549],{"class":30,"line":31},[28,172548,536],{"class":42},[28,172550,45782],{"class":34},[28,172552,172553],{"class":30,"line":77},[28,172554,2890],{"emptyLinePlaceholder":562},[28,172556,172557,172559],{"class":30,"line":114},[28,172558,30898],{"class":38},[28,172560,172561],{"class":34},"(os.getcwd())\n",[28,172563,172564,172566,172569,172572],{"class":30,"line":128},[28,172565,30898],{"class":38},[28,172567,172568],{"class":34},"(os.listdir(",[28,172570,172571],{"class":735},"\".\"",[28,172573,30980],{"class":34},[605,172575,172577],{"id":172576},"_9125-sys","9.12.5 sys",[18,172579,172581],{"className":20,"code":172580,"language":22,"meta":23,"style":23},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[25,172582,172583,172590,172594,172601],{"__ignoreMap":23},[28,172584,172585,172587],{"class":30,"line":31},[28,172586,536],{"class":42},[28,172588,172589],{"class":34}," sys\n",[28,172591,172592],{"class":30,"line":77},[28,172593,2890],{"emptyLinePlaceholder":562},[28,172595,172596,172598],{"class":30,"line":114},[28,172597,30898],{"class":38},[28,172599,172600],{"class":34},"(sys.version)\n",[28,172602,172603,172605],{"class":30,"line":128},[28,172604,30898],{"class":38},[28,172606,172607],{"class":34},"(sys.path)\n",[60,172609,172611,172612,172614,172615,880],{"id":172610},"_913-if-name-main","9.13 if ",[780,172613,80287],{}," == \"",[780,172616,102452],{},[14,172618,172619,172620,172623],{},"模块被直接运行和被导入时，",[25,172621,172622],{},"__name__"," 的值不同。",[14,172625,172626,172627,25105],{},"创建 ",[25,172628,172629],{},"my_module.py",[18,172631,172633],{"className":20,"code":172632,"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,172634,172635,172643,172653,172657,172661,172673],{"__ignoreMap":23},[28,172636,172637,172639,172641],{"class":30,"line":31},[28,172638,32426],{"class":42},[28,172640,5697],{"class":2453},[28,172642,151487],{"class":34},[28,172644,172645,172647,172649,172651],{"class":30,"line":77},[28,172646,4578],{"class":42},[28,172648,11355],{"class":34},[28,172650,1104],{"class":42},[28,172652,151498],{"class":34},[28,172654,172655],{"class":30,"line":114},[28,172656,2890],{"emptyLinePlaceholder":562},[28,172658,172659],{"class":30,"line":128},[28,172660,2890],{"emptyLinePlaceholder":562},[28,172662,172663,172665,172667,172669,172671],{"class":30,"line":393},[28,172664,2021],{"class":42},[28,172666,31701],{"class":38},[28,172668,101953],{"class":42},[28,172670,101956],{"class":735},[28,172672,4227],{"class":34},[28,172674,172675,172677,172679,172681,172683,172685],{"class":30,"line":409},[28,172676,31780],{"class":38},[28,172678,166994],{"class":34},[28,172680,39],{"class":38},[28,172682,12921],{"class":34},[28,172684,93],{"class":38},[28,172686,30980],{"class":34},[14,172688,172689],{},"作用：",[588,172691,172692,172695],{},[591,172693,172694],{},"直接运行该文件时，执行测试代码。",[591,172696,172697],{},"被其他文件导入时，不执行测试代码。",[14,172699,172700],{},"这是写模块时很常用的习惯。",[60,172702,172704],{"id":172703},"_914-包","9.14 包",[14,172706,172707,172708,172711],{},"包是包含 ",[25,172709,172710],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172713,172714],{},"目录结构：",[18,172716,172719],{"className":172717,"code":172718,"language":5675,"meta":23},[5673],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[25,172720,172718],{"__ignoreMap":23},[14,172722,172723],{},"导入：",[18,172725,172727],{"className":20,"code":172726,"language":22,"meta":23,"style":23},"from utils.file_utils import read_file\n",[25,172728,172729],{"__ignoreMap":23},[28,172730,172731,172733,172736,172738],{"class":30,"line":31},[28,172732,530],{"class":42},[28,172734,172735],{"class":34}," utils.file_utils ",[28,172737,536],{"class":42},[28,172739,172740],{"class":34}," read_file\n",[14,172742,172743,172745],{},[25,172744,172710],{}," 可以为空，也可以写包初始化逻辑。",[60,172747,172749],{"id":172748},"_915-第三方包","9.15 第三方包",[14,172751,172752,172753,172755],{},"第三方包通过 ",[25,172754,24317],{}," 安装。",[18,172757,172759],{"className":24308,"code":172758,"language":24310,"meta":23,"style":23},"pip install requests\n",[25,172760,172761],{"__ignoreMap":23},[28,172762,172763,172765,172767],{"class":30,"line":31},[28,172764,24317],{"class":2453},[28,172766,24320],{"class":735},[28,172768,146492],{"class":735},[14,172770,172771],{},"使用：",[18,172773,172775],{"className":20,"code":172774,"language":22,"meta":23,"style":23},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[25,172776,172777,172783,172787,172802],{"__ignoreMap":23},[28,172778,172779,172781],{"class":30,"line":31},[28,172780,536],{"class":42},[28,172782,146492],{"class":34},[28,172784,172785],{"class":30,"line":77},[28,172786,2890],{"emptyLinePlaceholder":562},[28,172788,172789,172792,172794,172797,172800],{"class":30,"line":114},[28,172790,172791],{"class":34},"response ",[28,172793,83],{"class":42},[28,172795,172796],{"class":34}," requests.get(",[28,172798,172799],{"class":735},"\"https:\u002F\u002Fwww.example.com\"",[28,172801,228],{"class":34},[28,172803,172804,172806],{"class":30,"line":128},[28,172805,30898],{"class":38},[28,172807,172808],{"class":34},"(response.status_code)\n",[14,172810,172811],{},"查看已安装包：",[18,172813,172815],{"className":24308,"code":172814,"language":24310,"meta":23,"style":23},"pip list\n",[25,172816,172817],{"__ignoreMap":23},[28,172818,172819,172821],{"class":30,"line":31},[28,172820,24317],{"class":2453},[28,172822,119349],{"class":735},[14,172824,172825],{},"导出项目依赖：",[18,172827,172828],{"className":24308,"code":146687,"language":24310,"meta":23,"style":23},[25,172829,172830],{"__ignoreMap":23},[28,172831,172832,172834,172836,172838],{"class":30,"line":31},[28,172833,24317],{"class":2453},[28,172835,146696],{"class":735},[28,172837,26708],{"class":42},[28,172839,146701],{"class":735},[14,172841,172842],{},"安装项目依赖：",[18,172844,172845],{"className":24308,"code":146707,"language":24310,"meta":23,"style":23},[25,172846,172847],{"__ignoreMap":23},[28,172848,172849,172851,172853,172855],{"class":30,"line":31},[28,172850,24317],{"class":2453},[28,172852,24320],{"class":735},[28,172854,120033],{"class":38},[28,172856,146701],{"class":735},[60,172858,172860],{"id":172859},"_916-模块搜索路径","9.16 模块搜索路径",[14,172862,172863,172864,172867],{},"Python 导入模块时会在 ",[25,172865,172866],{},"sys.path"," 中查找。",[18,172869,172871],{"className":20,"code":172870,"language":22,"meta":23,"style":23},"import sys\n\nfor path in sys.path:\n    print(path)\n",[25,172872,172873,172879,172883,172895],{"__ignoreMap":23},[28,172874,172875,172877],{"class":30,"line":31},[28,172876,536],{"class":42},[28,172878,172589],{"class":34},[28,172880,172881],{"class":30,"line":77},[28,172882,2890],{"emptyLinePlaceholder":562},[28,172884,172885,172887,172890,172892],{"class":30,"line":114},[28,172886,49],{"class":42},[28,172888,172889],{"class":34}," path ",[28,172891,55],{"class":42},[28,172893,172894],{"class":34}," sys.path:\n",[28,172896,172897,172899],{"class":30,"line":128},[28,172898,31780],{"class":38},[28,172900,169623],{"class":34},[14,172902,172903],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172905,158017],{},[18,172907,172910],{"className":172908,"code":172909,"language":5675,"meta":23},[5673],"random.py\njson.py\ntime.py\n",[25,172911,172909],{"__ignoreMap":23},[14,172913,172914],{},"这些文件名可能导致导入异常。",[60,172916,172918],{"id":172917},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172920,172714],{},[18,172922,172925],{"className":172923,"code":172924,"language":5675,"meta":23},[5673],"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,172926,172924],{"__ignoreMap":23},[14,172928,172929,25105],{},[25,172930,172931],{},"utils\u002Ffile_utils.py",[18,172933,172935],{"className":20,"code":172934,"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,172936,172937,172943,172953,172957,172961,172971,172981,172989,172995,172999,173026,173036,173040,173044,173054,173080],{"__ignoreMap":23},[28,172938,172939,172941],{"class":30,"line":31},[28,172940,536],{"class":42},[28,172942,147485],{"class":34},[28,172944,172945,172947,172949,172951],{"class":30,"line":77},[28,172946,530],{"class":42},[28,172948,108705],{"class":34},[28,172950,536],{"class":42},[28,172952,108710],{"class":34},[28,172954,172955],{"class":30,"line":114},[28,172956,2890],{"emptyLinePlaceholder":562},[28,172958,172959],{"class":30,"line":128},[28,172960,2890],{"emptyLinePlaceholder":562},[28,172962,172963,172965,172968],{"class":30,"line":393},[28,172964,32426],{"class":42},[28,172966,172967],{"class":2453}," read_json",[28,172969,172970],{"class":34},"(path):\n",[28,172972,172973,172976,172978],{"class":30,"line":409},[28,172974,172975],{"class":34},"    path ",[28,172977,83],{"class":42},[28,172979,172980],{"class":34}," Path(path)\n",[28,172982,172983,172985,172987],{"class":30,"line":1711},[28,172984,3590],{"class":42},[28,172986,39407],{"class":42},[28,172988,169704],{"class":34},[28,172990,172991,172993],{"class":30,"line":1802},[28,172992,15238],{"class":42},[28,172994,52315],{"class":34},[28,172996,172997],{"class":30,"line":1808},[28,172998,2890],{"emptyLinePlaceholder":562},[28,173000,173001,173003,173005,173008,173010,173012,173014,173016,173018,173020,173022,173024],{"class":30,"line":1820},[28,173002,34655],{"class":42},[28,173004,147185],{"class":38},[28,173006,173007],{"class":34},"(path, ",[28,173009,147195],{"class":735},[28,173011,12921],{"class":34},[28,173013,147200],{"class":5704},[28,173015,83],{"class":42},[28,173017,147205],{"class":735},[28,173019,14200],{"class":34},[28,173021,542],{"class":42},[28,173023,148547],{"class":5704},[28,173025,4227],{"class":34},[28,173027,173028,173030,173032,173034],{"class":30,"line":2102},[28,173029,15238],{"class":42},[28,173031,148558],{"class":34},[28,173033,45831],{"class":5704},[28,173035,228],{"class":34},[28,173037,173038],{"class":30,"line":2107},[28,173039,2890],{"emptyLinePlaceholder":562},[28,173041,173042],{"class":30,"line":2113},[28,173043,2890],{"emptyLinePlaceholder":562},[28,173045,173046,173048,173051],{"class":30,"line":2118},[28,173047,32426],{"class":42},[28,173049,173050],{"class":2453}," write_json",[28,173052,173053],{"class":34},"(path, data):\n",[28,173055,173056,173058,173060,173062,173064,173066,173068,173070,173072,173074,173076,173078],{"class":30,"line":2132},[28,173057,34655],{"class":42},[28,173059,147185],{"class":38},[28,173061,173007],{"class":34},[28,173063,152370],{"class":735},[28,173065,12921],{"class":34},[28,173067,147200],{"class":5704},[28,173069,83],{"class":42},[28,173071,147205],{"class":735},[28,173073,14200],{"class":34},[28,173075,542],{"class":42},[28,173077,148547],{"class":5704},[28,173079,4227],{"class":34},[28,173081,173082,173085,173087,173089,173091,173093,173095,173097,173099,173101,173103],{"class":30,"line":2137},[28,173083,173084],{"class":34},"        json.dump(data, ",[28,173086,45831],{"class":5704},[28,173088,12921],{"class":34},[28,173090,147531],{"class":5704},[28,173092,83],{"class":42},[28,173094,34464],{"class":38},[28,173096,12921],{"class":34},[28,173098,152406],{"class":5704},[28,173100,83],{"class":42},[28,173102,93],{"class":38},[28,173104,228],{"class":34},[14,173106,173107,25105],{},[25,173108,155001],{},[18,173110,173112],{"className":20,"code":173111,"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,173113,173114,173125,173129,173142,173162],{"__ignoreMap":23},[28,173115,173116,173118,173120,173122],{"class":30,"line":31},[28,173117,530],{"class":42},[28,173119,172735],{"class":34},[28,173121,536],{"class":42},[28,173123,173124],{"class":34}," read_json, write_json\n",[28,173126,173127],{"class":30,"line":77},[28,173128,2890],{"emptyLinePlaceholder":562},[28,173130,173131,173133,173135,173138,173140],{"class":30,"line":114},[28,173132,160110],{"class":34},[28,173134,83],{"class":42},[28,173136,173137],{"class":34}," read_json(",[28,173139,152225],{"class":735},[28,173141,228],{"class":34},[28,173143,173144,173146,173148,173150,173152,173154,173156,173158,173160],{"class":30,"line":128},[28,173145,170928],{"class":34},[28,173147,63156],{"class":735},[28,173149,51914],{"class":34},[28,173151,150282],{"class":735},[28,173153,12921],{"class":34},[28,173155,151866],{"class":735},[28,173157,51914],{"class":34},[28,173159,1608],{"class":38},[28,173161,165546],{"class":34},[28,173163,173164,173167,173169],{"class":30,"line":393},[28,173165,173166],{"class":34},"write_json(",[28,173168,152225],{"class":735},[28,173170,173171],{"class":34},", students)\n",[60,173173,173175],{"id":173174},"_918-易错点","9.18 易错点",[588,173177,173178,173181,173186,173191,173194,173197],{},[591,173179,173180],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[591,173182,173183,173184,28871],{},"能指定异常类型就不要裸写 ",[25,173185,171288],{},[591,173187,173188,173190],{},[25,173189,171663],{}," 无论是否出错都会执行。",[591,173192,173193],{},"模块文件名不要和标准库重名。",[591,173195,173196],{},"导入自己写的模块时，要注意运行目录。",[591,173198,173199],{},"第三方包要安装到当前解释器或虚拟环境中。",[60,173201,173203],{"id":173202},"_919-本章练习","9.19 本章练习",[588,173205,173206,173209,173212,173218,173225],{},[591,173207,173208],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[591,173210,173211],{},"写函数读取文件，如果文件不存在则返回空字符串。",[591,173213,172626,173214,173217],{},[25,173215,173216],{},"math_utils.py","，实现加减乘除函数并导入使用。",[591,173219,173220,173221,173224],{},"创建一个 ",[25,173222,173223],{},"utils"," 包，把 JSON 读写函数放进去。",[591,173226,173227],{},"写一个程序，捕获除零异常和输入格式异常。",[547,173229,173230],{},"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":77,"depth":77,"links":173232},[173233,173234,173235,173236,173237,173238,173239,173240,173241,173242,173243,173249,173256,173258,173259,173260,173261,173262,173263],{"id":171085,"depth":77,"text":171086},{"id":171213,"depth":77,"text":171214},{"id":171262,"depth":77,"text":171263},{"id":171411,"depth":77,"text":171412},{"id":171583,"depth":77,"text":171584},{"id":171652,"depth":77,"text":171653},{"id":171763,"depth":77,"text":171764},{"id":171889,"depth":77,"text":171890},{"id":172014,"depth":77,"text":172015},{"id":172069,"depth":77,"text":172070},{"id":172168,"depth":77,"text":172169,"children":173244},[173245,173246,173247,173248],{"id":172172,"depth":114,"text":172173},{"id":172206,"depth":114,"text":172207},{"id":172245,"depth":114,"text":172246},{"id":172324,"depth":114,"text":172325},{"id":172347,"depth":77,"text":172348,"children":173250},[173251,173252,173253,173254,173255],{"id":172351,"depth":114,"text":172352},{"id":172434,"depth":114,"text":172435},{"id":172479,"depth":114,"text":172480},{"id":172538,"depth":114,"text":172539},{"id":172576,"depth":114,"text":172577},{"id":172610,"depth":77,"text":173257},"9.13 if name == \"main\"",{"id":172703,"depth":77,"text":172704},{"id":172748,"depth":77,"text":172749},{"id":172859,"depth":77,"text":172860},{"id":172917,"depth":77,"text":172918},{"id":173174,"depth":77,"text":173175},{"id":173202,"depth":77,"text":173203},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171077,"description":559},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173270,"title":173271,"body":173272,"description":173435,"extension":560,"meta":173436,"navigation":562,"path":173437,"seo":173438,"stem":173439,"__hash__":173440},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173273,"toc":173430},[173274,173277,173280,173283,173294,173296,173370,173373,173376,173379,173382,173385,173388,173391,173394,173397,173400],[10,173275,173271],{"id":173276},"python教程",[14,173278,173279],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173281,173282],{},"建议学习环境：",[588,173284,173285,173288,173291],{},[591,173286,173287],{},"Python 版本：Python 3.10 及以上。",[591,173289,173290],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[591,173292,173293],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[60,173295,117472],{"id":117472},[588,173297,173298,173304,173310,173316,173322,173328,173334,173340,173346,173352,173358,173364],{},[591,173299,173300],{},[80,173301,173303],{"href":173302},".\u002Fch1-Python","Python环境与第一个程序",[591,173305,173306],{},[80,173307,173309],{"href":173308},".\u002Fch2","基础语法、变量与字符串",[591,173311,173312],{},[80,173313,173315],{"href":173314},".\u002Fch3","判断语句",[591,173317,173318],{},[80,173319,173321],{"href":173320},".\u002Fch4","循环语句",[591,173323,173324],{},[80,173325,173327],{"href":173326},".\u002Fch5","函数基础",[591,173329,173330],{},[80,173331,173333],{"href":173332},".\u002Fch6","数据容器",[591,173335,173336],{},[80,173337,173339],{"href":173338},".\u002Fch7","函数进阶",[591,173341,173342],{},[80,173343,173345],{"href":173344},".\u002Fch8","文件操作",[591,173347,173348],{},[80,173349,173351],{"href":173350},".\u002Fch9","异常、模块与包",[591,173353,173354],{},[80,173355,173357],{"href":173356},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[591,173359,173360],{},[80,173361,173363],{"href":173362},".\u002Fch11","面向对象基础",[591,173365,173366],{},[80,173367,173369],{"href":173368},".\u002Fch12","综合案例与复习路线",[60,173371,173372],{"id":173372},"学习路线",[14,173374,173375],{},"第一阶段：能运行程序。",[14,173377,173378],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173380,173381],{},"第二阶段：能组织数据。",[14,173383,173384],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173386,173387],{},"第三阶段：能封装逻辑。",[14,173389,173390],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173392,173393],{},"第四阶段：能做小项目。",[14,173395,173396],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[60,173398,173399],{"id":173399},"参考资料",[588,173401,173402,173409,173416,173423],{},[591,173403,173404,173405],{},"黑马程序员 Python 入门教程推荐：",[80,173406,173407],{"href":173407,"rel":173408},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24351],[591,173410,173411,173412],{},"Python 官方中文教程：",[80,173413,173414],{"href":173414,"rel":173415},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24351],[591,173417,173418,173419],{},"Python 标准库文档：",[80,173420,173421],{"href":173421,"rel":173422},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24351],[591,173424,173425,173426],{},"pyecharts 文档：",[80,173427,173428],{"href":173428,"rel":173429},"https:\u002F\u002Fpyecharts.org\u002F",[24351],{"title":23,"searchDepth":77,"depth":77,"links":173431},[173432,173433,173434],{"id":117472,"depth":77,"text":117472},{"id":173372,"depth":77,"text":173372},{"id":173399,"depth":77,"text":173399},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23864},"\u002Fwiki\u002F2024-10-10-python",{"title":173271,"description":173435},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331450985]